[{"data":1,"prerenderedAt":174300},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch3-zhi-zhen":3,"wiki-doc-nav":1563},{"id":4,"title":5,"body":6,"description":16,"extension":1557,"meta":1558,"navigation":159,"path":1559,"seo":1560,"stem":1561,"__hash__":1562},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8,"toc":1547},"minimark",[9,13,17,22,232,236,239,242,245,248,392,396,399,402,405,473,477,483,550,553,557,560,573,579,600,603,608,627,630,634,653,656,660,921,925,928,931,934,1106,1109,1113,1116,1122,1543],[10,11,5],"h1",{"id":12},"_3指针",[14,15,16],"p",{},"通过指针保存一个地址，指针就是个地址",[18,19,21],"h2",{"id":20},"_31定义指针","3.1定义指针",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-c++ shiki shiki-themes github-light github-dark","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","c++","",[30,31,32,49,55,62,81,87,96,108,132,154,161,167,173,179,194,211,226],"code",{"__ignoreMap":28},[33,34,37,41,45],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"szBVR","int",[33,42,44],{"class":43},"sScJk"," main",[33,46,48],{"class":47},"sVt8B","()\n",[33,50,52],{"class":35,"line":51},2,[33,53,54],{"class":47},"{\n",[33,56,58],{"class":35,"line":57},3,[33,59,61],{"class":60},"sJ8bj","    \u002F\u002F1.定义指针\n",[33,63,65,68,71,74,78],{"class":35,"line":64},4,[33,66,67],{"class":39},"    int",[33,69,70],{"class":47}," a",[33,72,73],{"class":39},"=",[33,75,77],{"class":76},"sj4cs","10",[33,79,80],{"class":47},";\n",[33,82,84],{"class":35,"line":83},5,[33,85,86],{"class":60},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[33,88,90,93],{"class":35,"line":89},6,[33,91,92],{"class":39},"    int*",[33,94,95],{"class":47},"p;\n",[33,97,99,102,105],{"class":35,"line":98},7,[33,100,101],{"class":47},"    p",[33,103,104],{"class":39},"=&",[33,106,107],{"class":47},"a;\n",[33,109,111,114,117,121,124,127,129],{"class":35,"line":110},8,[33,112,113],{"class":47},"    cout",[33,115,116],{"class":39},"\u003C\u003C",[33,118,120],{"class":119},"sZZnC","\"a的地址为：\"",[33,122,123],{"class":39},"\u003C\u003C&",[33,125,126],{"class":47},"a",[33,128,116],{"class":39},[33,130,131],{"class":47},"endl;\n",[33,133,135,137,139,142,144,146,148,151],{"class":35,"line":134},9,[33,136,113],{"class":47},[33,138,116],{"class":39},[33,140,141],{"class":119},"\"指针p为：\"",[33,143,116],{"class":39},[33,145,14],{"class":47},[33,147,116],{"class":39},[33,149,150],{"class":47},"endl;",[33,152,153],{"class":60},"\u002F\u002F指针p表示的就是a的地址\n",[33,155,157],{"class":35,"line":156},10,[33,158,160],{"emptyLinePlaceholder":159},true,"\n",[33,162,164],{"class":35,"line":163},11,[33,165,166],{"class":60},"    \u002F\u002F2.使用指针\n",[33,168,170],{"class":35,"line":169},12,[33,171,172],{"class":60},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[33,174,176],{"class":35,"line":175},13,[33,177,178],{"class":60},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[33,180,182,185,187,189,192],{"class":35,"line":181},14,[33,183,184],{"class":39},"    *",[33,186,14],{"class":47},[33,188,73],{"class":39},[33,190,191],{"class":76},"1000",[33,193,80],{"class":47},[33,195,197,199,202,204,206,208],{"class":35,"line":196},15,[33,198,113],{"class":47},[33,200,201],{"class":39},"\u003C\u003C*",[33,203,14],{"class":47},[33,205,116],{"class":39},[33,207,150],{"class":47},[33,209,210],{"class":60},"\u002F\u002F1000\n",[33,212,214,216,218,220,222,224],{"class":35,"line":213},16,[33,215,113],{"class":47},[33,217,116],{"class":39},[33,219,126],{"class":47},[33,221,116],{"class":39},[33,223,150],{"class":47},[33,225,210],{"class":60},[33,227,229],{"class":35,"line":228},17,[33,230,231],{"class":47},"}\n",[18,233,235],{"id":234},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,237,238],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,240,241],{},"在32位操作系统下：占用4个字节空间",[14,243,244],{},"在64位操作系统下：占用8个字节空间",[14,246,247],{},"上方是不管啥数据类型的",[23,249,251],{"className":25,"code":250,"language":27,"meta":28,"style":28},"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",[30,252,253,261,265,270,282,287,292,297,310,333,361,388],{"__ignoreMap":28},[33,254,255,257,259],{"class":35,"line":36},[33,256,40],{"class":39},[33,258,44],{"class":43},[33,260,48],{"class":47},[33,262,263],{"class":35,"line":51},[33,264,54],{"class":47},[33,266,267],{"class":35,"line":57},[33,268,269],{"class":60},"    \u002F\u002F指针所占内存空间\n",[33,271,272,274,276,278,280],{"class":35,"line":64},[33,273,67],{"class":39},[33,275,70],{"class":47},[33,277,73],{"class":39},[33,279,77],{"class":76},[33,281,80],{"class":47},[33,283,284],{"class":35,"line":83},[33,285,286],{"class":60},"    \u002F\u002Fint *p;\n",[33,288,289],{"class":35,"line":89},[33,290,291],{"class":60},"    \u002F\u002Fp=&a;\n",[33,293,294],{"class":35,"line":98},[33,295,296],{"class":60},"    \u002F\u002F上述可以写为以下：\n",[33,298,299,301,304,306,308],{"class":35,"line":110},[33,300,67],{"class":39},[33,302,303],{"class":39}," *",[33,305,14],{"class":47},[33,307,104],{"class":39},[33,309,107],{"class":47},[33,311,312,315,317,320,323,326,328,330],{"class":35,"line":134},[33,313,314],{"class":47},"    cout ",[33,316,116],{"class":39},[33,318,319],{"class":119},"\"sizeof(int *)\"",[33,321,322],{"class":39},"\u003C\u003Csizeof",[33,324,325],{"class":47},"(p)",[33,327,116],{"class":39},[33,329,150],{"class":47},[33,331,332],{"class":60},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[33,334,335,337,339,341,343,346,348,350,353,355,358],{"class":35,"line":156},[33,336,314],{"class":47},[33,338,116],{"class":39},[33,340,319],{"class":119},[33,342,322],{"class":39},[33,344,345],{"class":47},"(",[33,347,40],{"class":39},[33,349,303],{"class":39},[33,351,352],{"class":47},")",[33,354,116],{"class":39},[33,356,357],{"class":47},"endl",[33,359,360],{"class":60},"  \u002F\u002F4字节(32位的话)\n",[33,362,363,365,367,370,372,374,377,379,381,383,385],{"class":35,"line":163},[33,364,314],{"class":47},[33,366,116],{"class":39},[33,368,369],{"class":119},"\"sizeof(char *)\"",[33,371,322],{"class":39},[33,373,345],{"class":47},[33,375,376],{"class":39},"char",[33,378,303],{"class":39},[33,380,352],{"class":47},[33,382,116],{"class":39},[33,384,150],{"class":47},[33,386,387],{"class":60}," \u002F\u002F4字节(32位的话)\n",[33,389,390],{"class":35,"line":169},[33,391,231],{"class":47},[18,393,395],{"id":394},"_33空指针","3.3空指针",[14,397,398],{},"空指针：指针变量指向内存中编号为0的空间",[14,400,401],{},"用途：初始化指针变量",[14,403,404],{},"注意：空指针指向的内存是不可以访问的",[23,406,408],{"className":25,"code":407,"language":27,"meta":28,"style":28},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[30,409,410,418,422,427,442,447,464,469],{"__ignoreMap":28},[33,411,412,414,416],{"class":35,"line":36},[33,413,40],{"class":39},[33,415,44],{"class":43},[33,417,48],{"class":47},[33,419,420],{"class":35,"line":51},[33,421,54],{"class":47},[33,423,424],{"class":35,"line":57},[33,425,426],{"class":60},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[33,428,429,431,433,435,437,440],{"class":35,"line":64},[33,430,67],{"class":39},[33,432,303],{"class":39},[33,434,14],{"class":47},[33,436,73],{"class":39},[33,438,439],{"class":76},"NULL",[33,441,80],{"class":47},[33,443,444],{"class":35,"line":83},[33,445,446],{"class":60},"    \u002F\u002F2.空指针不能进行访问\n",[33,448,449,451,453,455,458,461],{"class":35,"line":89},[33,450,184],{"class":39},[33,452,14],{"class":47},[33,454,73],{"class":39},[33,456,457],{"class":76},"100",[33,459,460],{"class":47},";",[33,462,463],{"class":60},"\u002F\u002F直接报错，压根不能访问\n",[33,465,466],{"class":35,"line":98},[33,467,468],{"class":60},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[33,470,471],{"class":35,"line":110},[33,472,231],{"class":47},[18,474,476],{"id":475},"_34野指针","3.4野指针",[14,478,479],{},[480,481,482],"strong",{},"指针变量指向非法的内存空间",[23,484,486],{"className":25,"code":485,"language":27,"meta":28,"style":28},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[30,487,488,496,500,529,534,546],{"__ignoreMap":28},[33,489,490,492,494],{"class":35,"line":36},[33,491,40],{"class":39},[33,493,44],{"class":43},[33,495,48],{"class":47},[33,497,498],{"class":35,"line":51},[33,499,54],{"class":47},[33,501,502,504,506,508,510,512,514,516,518,521,524,526],{"class":35,"line":57},[33,503,67],{"class":39},[33,505,303],{"class":39},[33,507,14],{"class":47},[33,509,73],{"class":39},[33,511,345],{"class":47},[33,513,40],{"class":39},[33,515,303],{"class":39},[33,517,352],{"class":47},[33,519,520],{"class":39},"0x",[33,522,523],{"class":76},"1100",[33,525,460],{"class":47},[33,527,528],{"class":60}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[33,530,531],{"class":35,"line":64},[33,532,533],{"class":60},"    \u002F\u002F访问野指针报错\n",[33,535,536,538,540,542,544],{"class":35,"line":83},[33,537,113],{"class":47},[33,539,201],{"class":39},[33,541,14],{"class":47},[33,543,116],{"class":39},[33,545,131],{"class":47},[33,547,548],{"class":35,"line":89},[33,549,231],{"class":47},[14,551,552],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[18,554,556],{"id":555},"_35const修饰指针","3.5const修饰指针",[14,558,559],{},"三种情况：",[561,562,563,567,570],"ul",{},[564,565,566],"li",{},"const修饰指针 常量指针",[564,568,569],{},"const修饰常量 指针常量",[564,571,572],{},"const即修饰指针，又修饰常量",[574,575,576],"ol",{},[564,577,578],{},"常量指针",[23,580,582],{"className":25,"code":581,"language":27,"meta":28,"style":28},"const int *p=&a;\n",[30,583,584],{"__ignoreMap":28},[33,585,586,589,592,594,596,598],{"class":35,"line":36},[33,587,588],{"class":39},"const",[33,590,591],{"class":39}," int",[33,593,303],{"class":39},[33,595,14],{"class":47},[33,597,104],{"class":39},[33,599,107],{"class":47},[14,601,602],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[574,604,605],{"start":51},[564,606,607],{},"指针常量",[23,609,611],{"className":25,"code":610,"language":27,"meta":28,"style":28},"int *const p=&a;\n",[30,612,613],{"__ignoreMap":28},[33,614,615,617,620,623,625],{"class":35,"line":36},[33,616,40],{"class":39},[33,618,619],{"class":39}," *const",[33,621,622],{"class":47}," p",[33,624,104],{"class":39},[33,626,107],{"class":47},[14,628,629],{},"指针的指向不可以改，指针指向的值可以改",[574,631,632],{"start":57},[564,633,572],{},[23,635,637],{"className":25,"code":636,"language":27,"meta":28,"style":28},"const int *const p=&a;\n",[30,638,639],{"__ignoreMap":28},[33,640,641,643,645,647,649,651],{"class":35,"line":36},[33,642,588],{"class":39},[33,644,591],{"class":39},[33,646,619],{"class":39},[33,648,622],{"class":47},[33,650,104],{"class":39},[33,652,107],{"class":47},[14,654,655],{},"指针的指向和指针指向的值都不可以改变",[18,657,659],{"id":658},"_36指针和数组","3.6指针和数组",[23,661,663],{"className":25,"code":662,"language":27,"meta":28,"style":28},"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",[30,664,665,673,677,682,750,773,789,805,817,834,839,853,885,890,903,912,917],{"__ignoreMap":28},[33,666,667,669,671],{"class":35,"line":36},[33,668,40],{"class":39},[33,670,44],{"class":43},[33,672,48],{"class":47},[33,674,675],{"class":35,"line":51},[33,676,54],{"class":47},[33,678,679],{"class":35,"line":57},[33,680,681],{"class":60},"    \u002F\u002F利用指针访问数组中的元素\n",[33,683,684,686,689,691,694,696,699,702,705,708,710,713,715,718,720,723,725,728,730,733,735,738,740,743,745,747],{"class":35,"line":64},[33,685,67],{"class":39},[33,687,688],{"class":47}," arr[",[33,690,77],{"class":76},[33,692,693],{"class":47},"]",[33,695,73],{"class":39},[33,697,698],{"class":47},"{",[33,700,701],{"class":76},"1",[33,703,704],{"class":47},",",[33,706,707],{"class":76},"2",[33,709,704],{"class":47},[33,711,712],{"class":76},"3",[33,714,704],{"class":47},[33,716,717],{"class":76},"4",[33,719,704],{"class":47},[33,721,722],{"class":76},"5",[33,724,704],{"class":47},[33,726,727],{"class":76},"6",[33,729,704],{"class":47},[33,731,732],{"class":76},"7",[33,734,704],{"class":47},[33,736,737],{"class":76},"8",[33,739,704],{"class":47},[33,741,742],{"class":76},"9",[33,744,704],{"class":47},[33,746,77],{"class":76},[33,748,749],{"class":47},"};\n",[33,751,752,754,756,759,761,764,767,769,771],{"class":35,"line":83},[33,753,113],{"class":47},[33,755,116],{"class":39},[33,757,758],{"class":119},"\"数组的第一个元素为：\"",[33,760,116],{"class":39},[33,762,763],{"class":47},"arr[",[33,765,766],{"class":76},"0",[33,768,693],{"class":47},[33,770,116],{"class":39},[33,772,131],{"class":47},[33,774,775,777,779,781,783,786],{"class":35,"line":89},[33,776,67],{"class":39},[33,778,303],{"class":39},[33,780,14],{"class":47},[33,782,73],{"class":39},[33,784,785],{"class":47},"arr;",[33,787,788],{"class":60},"\u002F\u002F注意数才要加取地址符号&\n",[33,790,791,793,795,797,799,801,803],{"class":35,"line":98},[33,792,113],{"class":47},[33,794,116],{"class":39},[33,796,758],{"class":119},[33,798,201],{"class":39},[33,800,14],{"class":47},[33,802,116],{"class":39},[33,804,131],{"class":47},[33,806,807,809,812,814],{"class":35,"line":110},[33,808,101],{"class":47},[33,810,811],{"class":39},"++",[33,813,460],{"class":47},[33,815,816],{"class":60}," \u002F\u002F让指针向后偏移4个字节\n",[33,818,819,821,823,826,828,830,832],{"class":35,"line":134},[33,820,113],{"class":47},[33,822,116],{"class":39},[33,824,825],{"class":119},"\"数组的第二个元素为：\"",[33,827,201],{"class":39},[33,829,14],{"class":47},[33,831,116],{"class":39},[33,833,131],{"class":47},[33,835,836],{"class":35,"line":156},[33,837,838],{"class":60},"    \u002F\u002F利用指针遍历数组\n",[33,840,841,843,845,848,850],{"class":35,"line":163},[33,842,67],{"class":39},[33,844,303],{"class":39},[33,846,847],{"class":47},"p2",[33,849,73],{"class":39},[33,851,852],{"class":47},"arr;\n",[33,854,855,858,861,863,866,868,870,873,876,878,880,882],{"class":35,"line":169},[33,856,857],{"class":39},"    for",[33,859,860],{"class":47}," (",[33,862,40],{"class":39},[33,864,865],{"class":47}," i",[33,867,73],{"class":39},[33,869,766],{"class":76},[33,871,872],{"class":47},";i",[33,874,875],{"class":39},"\u003C",[33,877,77],{"class":76},[33,879,872],{"class":47},[33,881,811],{"class":39},[33,883,884],{"class":47},")\n",[33,886,887],{"class":35,"line":175},[33,888,889],{"class":47},"    {\n",[33,891,892,895,897,899,901],{"class":35,"line":181},[33,893,894],{"class":47},"        cout",[33,896,201],{"class":39},[33,898,847],{"class":47},[33,900,116],{"class":39},[33,902,131],{"class":47},[33,904,905,908,910],{"class":35,"line":196},[33,906,907],{"class":47},"        p2",[33,909,811],{"class":39},[33,911,80],{"class":47},[33,913,914],{"class":35,"line":213},[33,915,916],{"class":47},"    }\n",[33,918,919],{"class":35,"line":228},[33,920,231],{"class":47},[18,922,924],{"id":923},"_37指针和函数","3.7指针和函数",[14,926,927],{},"利用指针做函数参数，可以修改实参的值",[14,929,930],{},"值传递：只改变形参，不改变实参",[14,932,933],{},"地址传递：",[23,935,937],{"className":25,"code":936,"language":27,"meta":28,"style":28},"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",[30,938,939,967,971,984,995,1006,1010,1018,1022,1034,1048,1053,1071,1086,1102],{"__ignoreMap":28},[33,940,941,944,947,949,951,953,957,959,961,963,965],{"class":35,"line":36},[33,942,943],{"class":39},"void",[33,945,946],{"class":43}," swap",[33,948,345],{"class":47},[33,950,40],{"class":39},[33,952,303],{"class":39},[33,954,956],{"class":955},"s4XuR","p1",[33,958,704],{"class":47},[33,960,40],{"class":39},[33,962,303],{"class":39},[33,964,847],{"class":955},[33,966,884],{"class":47},[33,968,969],{"class":35,"line":51},[33,970,54],{"class":47},[33,972,973,975,978,981],{"class":35,"line":57},[33,974,67],{"class":39},[33,976,977],{"class":47}," temp",[33,979,980],{"class":39},"=*",[33,982,983],{"class":47},"p1;\n",[33,985,986,988,990,992],{"class":35,"line":64},[33,987,184],{"class":39},[33,989,956],{"class":47},[33,991,980],{"class":39},[33,993,994],{"class":47},"p2;\n",[33,996,997,999,1001,1003],{"class":35,"line":83},[33,998,184],{"class":39},[33,1000,847],{"class":47},[33,1002,73],{"class":39},[33,1004,1005],{"class":47},"temp;\n",[33,1007,1008],{"class":35,"line":89},[33,1009,231],{"class":47},[33,1011,1012,1014,1016],{"class":35,"line":98},[33,1013,40],{"class":39},[33,1015,44],{"class":43},[33,1017,48],{"class":47},[33,1019,1020],{"class":35,"line":110},[33,1021,54],{"class":47},[33,1023,1024,1026,1028,1030,1032],{"class":35,"line":134},[33,1025,67],{"class":39},[33,1027,70],{"class":47},[33,1029,73],{"class":39},[33,1031,77],{"class":76},[33,1033,80],{"class":47},[33,1035,1036,1038,1041,1043,1046],{"class":35,"line":156},[33,1037,67],{"class":39},[33,1039,1040],{"class":47}," b",[33,1042,73],{"class":39},[33,1044,1045],{"class":76},"20",[33,1047,80],{"class":47},[33,1049,1050],{"class":35,"line":163},[33,1051,1052],{"class":60},"    \u002F\u002F地址传递\n",[33,1054,1055,1058,1060,1063,1066,1068],{"class":35,"line":169},[33,1056,1057],{"class":43},"    swap",[33,1059,345],{"class":47},[33,1061,1062],{"class":39},"&",[33,1064,1065],{"class":47},"a,",[33,1067,1062],{"class":39},[33,1069,1070],{"class":47},"b);\n",[33,1072,1073,1075,1077,1079,1081,1083],{"class":35,"line":175},[33,1074,113],{"class":47},[33,1076,116],{"class":39},[33,1078,126],{"class":47},[33,1080,116],{"class":39},[33,1082,150],{"class":47},[33,1084,1085],{"class":60},"\u002F\u002F20\n",[33,1087,1088,1090,1092,1095,1097,1099],{"class":35,"line":181},[33,1089,113],{"class":47},[33,1091,116],{"class":39},[33,1093,1094],{"class":47},"b",[33,1096,116],{"class":39},[33,1098,150],{"class":47},[33,1100,1101],{"class":60},"\u002F\u002F10\n",[33,1103,1104],{"class":35,"line":196},[33,1105,231],{"class":47},[14,1107,1108],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[18,1110,1112],{"id":1111},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,1114,1115],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,1117,1118,1119,1121],{},"例如数组：int arr",[33,1120,77],{},"={4,3,6,9,1,2,10,8,7,5}",[23,1123,1125],{"className":25,"code":1124,"language":27,"meta":28,"style":28},"#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",[30,1126,1127,1135,1148,1172,1176,1208,1212,1250,1255,1277,1282,1294,1310,1325,1330,1335,1339,1343,1348,1357,1362,1368,1423,1436,1449,1455,1464,1469,1475,1502,1507,1523,1533,1538],{"__ignoreMap":28},[33,1128,1129,1132],{"class":35,"line":36},[33,1130,1131],{"class":39},"#include",[33,1133,1134],{"class":119},"\u003Ciostream>\n",[33,1136,1137,1140,1143,1146],{"class":35,"line":51},[33,1138,1139],{"class":39},"using",[33,1141,1142],{"class":39}," namespace",[33,1144,1145],{"class":43}," std",[33,1147,80],{"class":47},[33,1149,1150,1152,1155,1157,1159,1161,1163,1165,1167,1170],{"class":35,"line":57},[33,1151,943],{"class":39},[33,1153,1154],{"class":43}," bubbleSort",[33,1156,345],{"class":47},[33,1158,40],{"class":39},[33,1160,303],{"class":39},[33,1162,14],{"class":955},[33,1164,704],{"class":47},[33,1166,40],{"class":39},[33,1168,1169],{"class":955}," len",[33,1171,884],{"class":47},[33,1173,1174],{"class":35,"line":64},[33,1175,54],{"class":47},[33,1177,1178,1180,1182,1184,1186,1188,1190,1192,1194,1197,1200,1202,1204,1206],{"class":35,"line":83},[33,1179,857],{"class":39},[33,1181,345],{"class":47},[33,1183,40],{"class":39},[33,1185,865],{"class":47},[33,1187,73],{"class":39},[33,1189,766],{"class":76},[33,1191,872],{"class":47},[33,1193,875],{"class":39},[33,1195,1196],{"class":47},"len",[33,1198,1199],{"class":39},"-",[33,1201,701],{"class":76},[33,1203,872],{"class":47},[33,1205,811],{"class":39},[33,1207,884],{"class":47},[33,1209,1210],{"class":35,"line":89},[33,1211,889],{"class":47},[33,1213,1214,1217,1219,1221,1224,1226,1228,1231,1233,1235,1237,1240,1242,1244,1246,1248],{"class":35,"line":98},[33,1215,1216],{"class":39},"        for",[33,1218,345],{"class":47},[33,1220,40],{"class":39},[33,1222,1223],{"class":47}," j",[33,1225,73],{"class":39},[33,1227,766],{"class":76},[33,1229,1230],{"class":47},";j",[33,1232,875],{"class":39},[33,1234,1196],{"class":47},[33,1236,1199],{"class":39},[33,1238,1239],{"class":47},"i",[33,1241,1199],{"class":39},[33,1243,701],{"class":76},[33,1245,1230],{"class":47},[33,1247,811],{"class":39},[33,1249,884],{"class":47},[33,1251,1252],{"class":35,"line":110},[33,1253,1254],{"class":47},"        {\n",[33,1256,1257,1260,1263,1266,1269,1272,1274],{"class":35,"line":134},[33,1258,1259],{"class":39},"            if",[33,1261,1262],{"class":47},"(p[j]",[33,1264,1265],{"class":39},">",[33,1267,1268],{"class":47},"p[j",[33,1270,1271],{"class":39},"+",[33,1273,701],{"class":76},[33,1275,1276],{"class":47},"])\n",[33,1278,1279],{"class":35,"line":156},[33,1280,1281],{"class":47},"            {\n",[33,1283,1284,1287,1289,1291],{"class":35,"line":163},[33,1285,1286],{"class":39},"                int",[33,1288,977],{"class":47},[33,1290,73],{"class":39},[33,1292,1293],{"class":47},"p[j];\n",[33,1295,1296,1299,1301,1303,1305,1307],{"class":35,"line":169},[33,1297,1298],{"class":47},"                p[j]",[33,1300,73],{"class":39},[33,1302,1268],{"class":47},[33,1304,1271],{"class":39},[33,1306,701],{"class":76},[33,1308,1309],{"class":47},"];\n",[33,1311,1312,1315,1317,1319,1321,1323],{"class":35,"line":175},[33,1313,1314],{"class":47},"                p[j",[33,1316,1271],{"class":39},[33,1318,701],{"class":76},[33,1320,693],{"class":47},[33,1322,73],{"class":39},[33,1324,1005],{"class":47},[33,1326,1327],{"class":35,"line":181},[33,1328,1329],{"class":47},"            }\n",[33,1331,1332],{"class":35,"line":196},[33,1333,1334],{"class":47},"        }\n",[33,1336,1337],{"class":35,"line":213},[33,1338,916],{"class":47},[33,1340,1341],{"class":35,"line":228},[33,1342,231],{"class":47},[33,1344,1346],{"class":35,"line":1345},18,[33,1347,160],{"emptyLinePlaceholder":159},[33,1349,1351,1353,1355],{"class":35,"line":1350},19,[33,1352,40],{"class":39},[33,1354,44],{"class":43},[33,1356,48],{"class":47},[33,1358,1360],{"class":35,"line":1359},20,[33,1361,54],{"class":47},[33,1363,1365],{"class":35,"line":1364},21,[33,1366,1367],{"class":60},"    \u002F\u002F 1.创建数组\n",[33,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421],{"class":35,"line":1370},22,[33,1372,67],{"class":39},[33,1374,688],{"class":47},[33,1376,77],{"class":76},[33,1378,693],{"class":47},[33,1380,73],{"class":39},[33,1382,698],{"class":47},[33,1384,717],{"class":76},[33,1386,704],{"class":47},[33,1388,712],{"class":76},[33,1390,704],{"class":47},[33,1392,727],{"class":76},[33,1394,704],{"class":47},[33,1396,742],{"class":76},[33,1398,704],{"class":47},[33,1400,701],{"class":76},[33,1402,704],{"class":47},[33,1404,707],{"class":76},[33,1406,704],{"class":47},[33,1408,77],{"class":76},[33,1410,704],{"class":47},[33,1412,737],{"class":76},[33,1414,704],{"class":47},[33,1416,732],{"class":76},[33,1418,704],{"class":47},[33,1420,722],{"class":76},[33,1422,749],{"class":47},[33,1424,1426,1428,1430,1432,1434],{"class":35,"line":1425},23,[33,1427,67],{"class":39},[33,1429,1169],{"class":47},[33,1431,73],{"class":39},[33,1433,77],{"class":76},[33,1435,80],{"class":47},[33,1437,1439,1441,1443,1445,1447],{"class":35,"line":1438},24,[33,1440,67],{"class":39},[33,1442,303],{"class":39},[33,1444,14],{"class":47},[33,1446,73],{"class":39},[33,1448,852],{"class":47},[33,1450,1452],{"class":35,"line":1451},25,[33,1453,1454],{"class":60},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[33,1456,1458,1461],{"class":35,"line":1457},26,[33,1459,1460],{"class":43},"    bubbleSort",[33,1462,1463],{"class":47},"(p,len);\n",[33,1465,1467],{"class":35,"line":1466},27,[33,1468,160],{"emptyLinePlaceholder":159},[33,1470,1472],{"class":35,"line":1471},28,[33,1473,1474],{"class":60},"    \u002F\u002F 3.打印排序后的数组\n",[33,1476,1478,1480,1482,1484,1486,1488,1490,1493,1495,1498,1500],{"class":35,"line":1477},29,[33,1479,857],{"class":39},[33,1481,860],{"class":47},[33,1483,40],{"class":39},[33,1485,865],{"class":47},[33,1487,73],{"class":39},[33,1489,766],{"class":76},[33,1491,1492],{"class":47},"; i",[33,1494,875],{"class":39},[33,1496,1497],{"class":47},"len; i",[33,1499,811],{"class":39},[33,1501,884],{"class":47},[33,1503,1505],{"class":35,"line":1504},30,[33,1506,889],{"class":47},[33,1508,1510,1512,1514,1516,1518,1521],{"class":35,"line":1509},31,[33,1511,894],{"class":47},[33,1513,201],{"class":39},[33,1515,14],{"class":47},[33,1517,116],{"class":39},[33,1519,1520],{"class":119},"\"\"",[33,1522,80],{"class":47},[33,1524,1526,1529,1531],{"class":35,"line":1525},32,[33,1527,1528],{"class":47},"        p",[33,1530,811],{"class":39},[33,1532,80],{"class":47},[33,1534,1536],{"class":35,"line":1535},33,[33,1537,916],{"class":47},[33,1539,1541],{"class":35,"line":1540},34,[33,1542,231],{"class":47},[1544,1545,1546],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":28,"searchDepth":51,"depth":51,"links":1548},[1549,1550,1551,1552,1553,1554,1555,1556],{"id":20,"depth":51,"text":21},{"id":234,"depth":51,"text":235},{"id":394,"depth":51,"text":395},{"id":475,"depth":51,"text":476},{"id":555,"depth":51,"text":556},{"id":658,"depth":51,"text":659},{"id":923,"depth":51,"text":924},{"id":1111,"depth":51,"text":1112},"md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":5,"description":16},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",[1564,6553,7656,8941,11930,13281,14770,15859,24622,24635,25234,25260,25384,25625,25690,25708,25721,25768,25892,26061,26260,26440,26645,26781,26876,26913,26926,27236,27977,28685,28706,29726,31357,31508,31521,31533,31834,51646,51661,51678,51711,54583,77931,94076,94097,94210,94331,95101,95764,96125,96163,96269,96369,96412,96438,96499,98153,98254,98279,98770,99270,100350,100633,101375,101877,101889,103905,105569,107072,108770,110687,112606,114628,118098,118530,118993,119742,122686,123034,123056,123412,126719,126731,127134,127157,127304,127471,127676,127977,128534,129191,131122,132720,133369,134863,136294,137529,139223,140975,143385,143501,144436,144647,145532,146767,146995,147008,148163,150575,152943,156264,158741,160385,162162,164175,167227,169407,171934,174128],{"id":1565,"title":1566,"body":1567,"description":28,"extension":1557,"meta":6548,"navigation":159,"path":6549,"seo":6550,"stem":6551,"__hash__":6552},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1568,"toc":6520},[1569,1572,1576,1579,1583,1594,1598,1603,1606,1609,1612,1615,1618,1641,1645,1648,1651,1654,1657,1704,1708,1725,1727,1741,1744,1752,1755,2594,2601,2617,2621,2704,2708,2714,2799,2803,2840,2844,2907,2911,2915,2922,2933,2937,2942,2946,2951,2955,2960,2964,2968,2973,3220,3225,3363,3368,3614,3617,3625,3629,3634,3736,3739,4035,4044,4145,4148,4151,4154,4157,4416,4421,4559,4562,4739,4742,4866,4869,5021,5025,5030,5033,5044,5052,5055,5162,5166,5170,5175,5225,5230,5235,5259,5264,5316,5319,5324,5499,5504,5787,5792,6183,6187,6192,6249,6254,6262,6265,6405,6408,6517],[10,1570,1566],{"id":1571},"_1基础入门",[18,1573,1575],{"id":1574},"_11注释","1.1注释",[14,1577,1578],{},"\u002F\u002F或者\u002F* *\u002F",[18,1580,1582],{"id":1581},"_12命名","1.2命名",[574,1584,1585,1588,1591],{},[564,1586,1587],{},"字母数字下划线",[564,1589,1590],{},"开头必须是字母或_",[564,1592,1593],{},"不能使用关键词",[18,1595,1597],{"id":1596},"_13数据类型","1.3数据类型",[1599,1600,1602],"h3",{"id":1601},"_131整形","1.3.1整形",[14,1604,1605],{},"short 短整形 2",[14,1607,1608],{},"int 整形 4",[14,1610,1611],{},"long 长整形 win4 linux32位4 linux64位8",[14,1613,1614],{},"long long 长长整形 8",[14,1616,1617],{},"利用sizeof可以求数据类型占用的内存空间大小",[23,1619,1621],{"className":25,"code":1620,"language":27,"meta":28,"style":28},"sizeof(int)\nsizeof(num)\n",[30,1622,1623,1634],{"__ignoreMap":28},[33,1624,1625,1628,1630,1632],{"class":35,"line":36},[33,1626,1627],{"class":39},"sizeof",[33,1629,345],{"class":47},[33,1631,40],{"class":39},[33,1633,884],{"class":47},[33,1635,1636,1638],{"class":35,"line":51},[33,1637,1627],{"class":39},[33,1639,1640],{"class":47},"(num)\n",[1599,1642,1644],{"id":1643},"_132浮点型","1.3.2浮点型",[14,1646,1647],{},"float 单精度 4节 7位有效数字",[14,1649,1650],{},"double 双精度 8节 15-16有效数字",[14,1652,1653],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,1655,1656],{},"注意点：",[23,1658,1660],{"className":25,"code":1659,"language":27,"meta":28,"style":28},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[30,1661,1662,1683],{"__ignoreMap":28},[33,1663,1664,1667,1670,1672,1675,1678,1680],{"class":35,"line":36},[33,1665,1666],{"class":39},"float",[33,1668,1669],{"class":47}," f1",[33,1671,73],{"class":39},[33,1673,1674],{"class":76},"3.14",[33,1676,1677],{"class":39},"f",[33,1679,460],{"class":47},[33,1681,1682],{"class":60}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[33,1684,1685,1687,1690,1692,1694,1697,1699,1701],{"class":35,"line":51},[33,1686,1666],{"class":39},[33,1688,1689],{"class":47}," f2",[33,1691,73],{"class":39},[33,1693,712],{"class":76},[33,1695,1696],{"class":39},"e",[33,1698,707],{"class":76},[33,1700,460],{"class":47},[33,1702,1703],{"class":60}," \u002F\u002F科学记数法\n",[1599,1705,1707],{"id":1706},"_133字符型","1.3.3字符型",[23,1709,1711],{"className":25,"code":1710,"language":27,"meta":28,"style":28},"char ch='a'\n",[30,1712,1713],{"__ignoreMap":28},[33,1714,1715,1717,1720,1722],{"class":35,"line":36},[33,1716,376],{"class":39},[33,1718,1719],{"class":47}," ch",[33,1721,73],{"class":39},[33,1723,1724],{"class":119},"'a'\n",[14,1726,1656],{},[574,1728,1729,1732,1735,1738],{},[564,1730,1731],{},"在显示字符型变量时，只能单引号，双引号x",[564,1733,1734],{},"单引号内只能一个字符，不能字符串",[564,1736,1737],{},"c和c++字符型变量只占用一个字符",[564,1739,1740],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,1742,1743],{},"ASCII码大致由以下两部分组成：",[574,1745,1746,1749],{},[564,1747,1748],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[564,1750,1751],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,1753,1754],{},"ASCII码表格：",[1756,1757,1758,1801],"table",{},[1759,1760,1761],"thead",{},[1762,1763,1764,1771,1776,1780,1785,1789,1793,1797],"tr",{},[1765,1766,1767,1770],"th",{},[480,1768,1769],{},"ASCII","值",[1765,1772,1773],{},[480,1774,1775],{},"控制字符",[1765,1777,1778,1770],{},[480,1779,1769],{},[1765,1781,1782],{},[480,1783,1784],{},"字符",[1765,1786,1787,1770],{},[480,1788,1769],{},[1765,1790,1791],{},[480,1792,1784],{},[1765,1794,1795,1770],{},[480,1796,1769],{},[1765,1798,1799],{},[480,1800,1784],{},[1802,1803,1804,1830,1854,1878,1903,1927,1951,1974,1998,2022,2045,2070,2095,2120,2145,2171,2197,2221,2246,2271,2296,2320,2345,2370,2395,2420,2445,2471,2495,2519,2543,2568],"tbody",{},[1762,1805,1806,1809,1812,1815,1818,1821,1824,1827],{},[1807,1808,766],"td",{},[1807,1810,1811],{},"NUT",[1807,1813,1814],{},"32",[1807,1816,1817],{},"(space)",[1807,1819,1820],{},"64",[1807,1822,1823],{},"@",[1807,1825,1826],{},"96",[1807,1828,1829],{},"、",[1762,1831,1832,1834,1837,1840,1843,1846,1849,1852],{},[1807,1833,701],{},[1807,1835,1836],{},"SOH",[1807,1838,1839],{},"33",[1807,1841,1842],{},"!",[1807,1844,1845],{},"65",[1807,1847,1848],{},"A",[1807,1850,1851],{},"97",[1807,1853,126],{},[1762,1855,1856,1858,1861,1864,1867,1870,1873,1876],{},[1807,1857,707],{},[1807,1859,1860],{},"STX",[1807,1862,1863],{},"34",[1807,1865,1866],{},"\"",[1807,1868,1869],{},"66",[1807,1871,1872],{},"B",[1807,1874,1875],{},"98",[1807,1877,1094],{},[1762,1879,1880,1882,1885,1888,1891,1894,1897,1900],{},[1807,1881,712],{},[1807,1883,1884],{},"ETX",[1807,1886,1887],{},"35",[1807,1889,1890],{},"#",[1807,1892,1893],{},"67",[1807,1895,1896],{},"C",[1807,1898,1899],{},"99",[1807,1901,1902],{},"c",[1762,1904,1905,1907,1910,1913,1916,1919,1922,1924],{},[1807,1906,717],{},[1807,1908,1909],{},"EOT",[1807,1911,1912],{},"36",[1807,1914,1915],{},"$",[1807,1917,1918],{},"68",[1807,1920,1921],{},"D",[1807,1923,457],{},[1807,1925,1926],{},"d",[1762,1928,1929,1931,1934,1937,1940,1943,1946,1949],{},[1807,1930,722],{},[1807,1932,1933],{},"ENQ",[1807,1935,1936],{},"37",[1807,1938,1939],{},"%",[1807,1941,1942],{},"69",[1807,1944,1945],{},"E",[1807,1947,1948],{},"101",[1807,1950,1696],{},[1762,1952,1953,1955,1958,1961,1963,1966,1969,1972],{},[1807,1954,727],{},[1807,1956,1957],{},"ACK",[1807,1959,1960],{},"38",[1807,1962,1062],{},[1807,1964,1965],{},"70",[1807,1967,1968],{},"F",[1807,1970,1971],{},"102",[1807,1973,1677],{},[1762,1975,1976,1978,1981,1984,1986,1989,1992,1995],{},[1807,1977,732],{},[1807,1979,1980],{},"BEL",[1807,1982,1983],{},"39",[1807,1985,704],{},[1807,1987,1988],{},"71",[1807,1990,1991],{},"G",[1807,1993,1994],{},"103",[1807,1996,1997],{},"g",[1762,1999,2000,2002,2005,2008,2010,2013,2016,2019],{},[1807,2001,737],{},[1807,2003,2004],{},"BS",[1807,2006,2007],{},"40",[1807,2009,345],{},[1807,2011,2012],{},"72",[1807,2014,2015],{},"H",[1807,2017,2018],{},"104",[1807,2020,2021],{},"h",[1762,2023,2024,2026,2029,2032,2034,2037,2040,2043],{},[1807,2025,742],{},[1807,2027,2028],{},"HT",[1807,2030,2031],{},"41",[1807,2033,352],{},[1807,2035,2036],{},"73",[1807,2038,2039],{},"I",[1807,2041,2042],{},"105",[1807,2044,1239],{},[1762,2046,2047,2049,2052,2055,2058,2061,2064,2067],{},[1807,2048,77],{},[1807,2050,2051],{},"LF",[1807,2053,2054],{},"42",[1807,2056,2057],{},"*",[1807,2059,2060],{},"74",[1807,2062,2063],{},"J",[1807,2065,2066],{},"106",[1807,2068,2069],{},"j",[1762,2071,2072,2075,2078,2081,2083,2086,2089,2092],{},[1807,2073,2074],{},"11",[1807,2076,2077],{},"VT",[1807,2079,2080],{},"43",[1807,2082,1271],{},[1807,2084,2085],{},"75",[1807,2087,2088],{},"K",[1807,2090,2091],{},"107",[1807,2093,2094],{},"k",[1762,2096,2097,2100,2103,2106,2108,2111,2114,2117],{},[1807,2098,2099],{},"12",[1807,2101,2102],{},"FF",[1807,2104,2105],{},"44",[1807,2107,704],{},[1807,2109,2110],{},"76",[1807,2112,2113],{},"L",[1807,2115,2116],{},"108",[1807,2118,2119],{},"l",[1762,2121,2122,2125,2128,2131,2133,2136,2139,2142],{},[1807,2123,2124],{},"13",[1807,2126,2127],{},"CR",[1807,2129,2130],{},"45",[1807,2132,1199],{},[1807,2134,2135],{},"77",[1807,2137,2138],{},"M",[1807,2140,2141],{},"109",[1807,2143,2144],{},"m",[1762,2146,2147,2150,2153,2156,2159,2162,2165,2168],{},[1807,2148,2149],{},"14",[1807,2151,2152],{},"SO",[1807,2154,2155],{},"46",[1807,2157,2158],{},".",[1807,2160,2161],{},"78",[1807,2163,2164],{},"N",[1807,2166,2167],{},"110",[1807,2169,2170],{},"n",[1762,2172,2173,2176,2179,2182,2185,2188,2191,2194],{},[1807,2174,2175],{},"15",[1807,2177,2178],{},"SI",[1807,2180,2181],{},"47",[1807,2183,2184],{},"\u002F",[1807,2186,2187],{},"79",[1807,2189,2190],{},"O",[1807,2192,2193],{},"111",[1807,2195,2196],{},"o",[1762,2198,2199,2202,2205,2208,2210,2213,2216,2219],{},[1807,2200,2201],{},"16",[1807,2203,2204],{},"DLE",[1807,2206,2207],{},"48",[1807,2209,766],{},[1807,2211,2212],{},"80",[1807,2214,2215],{},"P",[1807,2217,2218],{},"112",[1807,2220,14],{},[1762,2222,2223,2226,2229,2232,2234,2237,2240,2243],{},[1807,2224,2225],{},"17",[1807,2227,2228],{},"DCI",[1807,2230,2231],{},"49",[1807,2233,701],{},[1807,2235,2236],{},"81",[1807,2238,2239],{},"Q",[1807,2241,2242],{},"113",[1807,2244,2245],{},"q",[1762,2247,2248,2251,2254,2257,2259,2262,2265,2268],{},[1807,2249,2250],{},"18",[1807,2252,2253],{},"DC2",[1807,2255,2256],{},"50",[1807,2258,707],{},[1807,2260,2261],{},"82",[1807,2263,2264],{},"R",[1807,2266,2267],{},"114",[1807,2269,2270],{},"r",[1762,2272,2273,2276,2279,2282,2284,2287,2290,2293],{},[1807,2274,2275],{},"19",[1807,2277,2278],{},"DC3",[1807,2280,2281],{},"51",[1807,2283,712],{},[1807,2285,2286],{},"83",[1807,2288,2289],{},"S",[1807,2291,2292],{},"115",[1807,2294,2295],{},"s",[1762,2297,2298,2300,2303,2306,2308,2311,2314,2317],{},[1807,2299,1045],{},[1807,2301,2302],{},"DC4",[1807,2304,2305],{},"52",[1807,2307,717],{},[1807,2309,2310],{},"84",[1807,2312,2313],{},"T",[1807,2315,2316],{},"116",[1807,2318,2319],{},"t",[1762,2321,2322,2325,2328,2331,2333,2336,2339,2342],{},[1807,2323,2324],{},"21",[1807,2326,2327],{},"NAK",[1807,2329,2330],{},"53",[1807,2332,722],{},[1807,2334,2335],{},"85",[1807,2337,2338],{},"U",[1807,2340,2341],{},"117",[1807,2343,2344],{},"u",[1762,2346,2347,2350,2353,2356,2358,2361,2364,2367],{},[1807,2348,2349],{},"22",[1807,2351,2352],{},"SYN",[1807,2354,2355],{},"54",[1807,2357,727],{},[1807,2359,2360],{},"86",[1807,2362,2363],{},"V",[1807,2365,2366],{},"118",[1807,2368,2369],{},"v",[1762,2371,2372,2375,2378,2381,2383,2386,2389,2392],{},[1807,2373,2374],{},"23",[1807,2376,2377],{},"TB",[1807,2379,2380],{},"55",[1807,2382,732],{},[1807,2384,2385],{},"87",[1807,2387,2388],{},"W",[1807,2390,2391],{},"119",[1807,2393,2394],{},"w",[1762,2396,2397,2400,2403,2406,2408,2411,2414,2417],{},[1807,2398,2399],{},"24",[1807,2401,2402],{},"CAN",[1807,2404,2405],{},"56",[1807,2407,737],{},[1807,2409,2410],{},"88",[1807,2412,2413],{},"X",[1807,2415,2416],{},"120",[1807,2418,2419],{},"x",[1762,2421,2422,2425,2428,2431,2433,2436,2439,2442],{},[1807,2423,2424],{},"25",[1807,2426,2427],{},"EM",[1807,2429,2430],{},"57",[1807,2432,742],{},[1807,2434,2435],{},"89",[1807,2437,2438],{},"Y",[1807,2440,2441],{},"121",[1807,2443,2444],{},"y",[1762,2446,2447,2450,2453,2456,2459,2462,2465,2468],{},[1807,2448,2449],{},"26",[1807,2451,2452],{},"SUB",[1807,2454,2455],{},"58",[1807,2457,2458],{},":",[1807,2460,2461],{},"90",[1807,2463,2464],{},"Z",[1807,2466,2467],{},"122",[1807,2469,2470],{},"z",[1762,2472,2473,2476,2479,2482,2484,2487,2490,2493],{},[1807,2474,2475],{},"27",[1807,2477,2478],{},"ESC",[1807,2480,2481],{},"59",[1807,2483,460],{},[1807,2485,2486],{},"91",[1807,2488,2489],{},"[",[1807,2491,2492],{},"123",[1807,2494,698],{},[1762,2496,2497,2500,2503,2506,2508,2511,2513,2516],{},[1807,2498,2499],{},"28",[1807,2501,2502],{},"FS",[1807,2504,2505],{},"60",[1807,2507,875],{},[1807,2509,2510],{},"92",[1807,2512,2184],{},[1807,2514,2515],{},"124",[1807,2517,2518],{},"|",[1762,2520,2521,2524,2527,2530,2532,2535,2537,2540],{},[1807,2522,2523],{},"29",[1807,2525,2526],{},"GS",[1807,2528,2529],{},"61",[1807,2531,73],{},[1807,2533,2534],{},"93",[1807,2536,693],{},[1807,2538,2539],{},"125",[1807,2541,2542],{},"}",[1762,2544,2545,2548,2551,2554,2556,2559,2562,2565],{},[1807,2546,2547],{},"30",[1807,2549,2550],{},"RS",[1807,2552,2553],{},"62",[1807,2555,1265],{},[1807,2557,2558],{},"94",[1807,2560,2561],{},"^",[1807,2563,2564],{},"126",[1807,2566,2567],{},"`",[1762,2569,2570,2573,2576,2579,2582,2585,2588,2591],{},[1807,2571,2572],{},"31",[1807,2574,2575],{},"US",[1807,2577,2578],{},"63",[1807,2580,2581],{},"?",[1807,2583,2584],{},"95",[1807,2586,2587],{},"_",[1807,2589,2590],{},"127",[1807,2592,2593],{},"DEL",[14,2595,2596,2597,2600],{},"ASCII 码大致由以下",[480,2598,2599],{},"两部分组","成：",[561,2602,2603,2610],{},[564,2604,2605,2606,2609],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[480,2607,2608],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[564,2611,2612,2613,2616],{},"ASCII 打印字符：数字 ",[480,2614,2615],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[1599,2618,2620],{"id":2619},"_134转义字符","1.3.4转义字符",[23,2622,2624],{"className":25,"code":2623,"language":27,"meta":28,"style":28},"\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",[30,2625,2626,2631,2646,2659,2664,2677,2682],{"__ignoreMap":28},[33,2627,2628],{"class":35,"line":36},[33,2629,2630],{"class":60},"\u002F\u002F换行符\n",[33,2632,2633,2636,2638,2641,2643],{"class":35,"line":51},[33,2634,2635],{"class":47},"cout ",[33,2637,116],{"class":39},[33,2639,2640],{"class":119},"\"hello world\u002Fn\"",[33,2642,460],{"class":47},[33,2644,2645],{"class":60}," \u002F\u002F就等同于如下：\n",[33,2647,2648,2650,2652,2655,2657],{"class":35,"line":57},[33,2649,2635],{"class":47},[33,2651,116],{"class":39},[33,2653,2654],{"class":119},"\"hello world\"",[33,2656,116],{"class":39},[33,2658,131],{"class":47},[33,2660,2661],{"class":35,"line":64},[33,2662,2663],{"class":60},"\u002F\u002F反斜杠\n",[33,2665,2666,2668,2670,2673,2675],{"class":35,"line":83},[33,2667,2635],{"class":47},[33,2669,116],{"class":39},[33,2671,2672],{"class":119},"\"\u002F\u002F\"",[33,2674,116],{"class":39},[33,2676,131],{"class":47},[33,2678,2679],{"class":35,"line":89},[33,2680,2681],{"class":60},"\u002F\u002F水平制表符\n",[33,2683,2684,2686,2688,2691,2694,2697,2699,2701],{"class":35,"line":98},[33,2685,2635],{"class":47},[33,2687,116],{"class":39},[33,2689,2690],{"class":119},"\"aaaa",[33,2692,2693],{"class":76},"\\t",[33,2695,2696],{"class":119},"helloworld\"",[33,2698,116],{"class":39},[33,2700,150],{"class":47},[33,2702,2703],{"class":60}," \u002F\u002F输出窗口时有对齐效果\n",[1599,2705,2707],{"id":2706},"_135字符串型","1.3.5字符串型",[14,2709,2710,2711,2713],{},"char 变量名",[33,2712],{},"=\"字符串值\"",[23,2715,2717],{"className":25,"code":2716,"language":27,"meta":28,"style":28},"\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",[30,2718,2719,2724,2729,2734,2739,2752,2765,2770,2775,2786],{"__ignoreMap":28},[33,2720,2721],{"class":35,"line":36},[33,2722,2723],{"class":60},"\u002F\u002Fc风格字符串\n",[33,2725,2726],{"class":35,"line":51},[33,2727,2728],{"class":60},"\u002F\u002F注意事项：\n",[33,2730,2731],{"class":35,"line":57},[33,2732,2733],{"class":60},"\u002F\u002F1.char字符串名[]\n",[33,2735,2736],{"class":35,"line":64},[33,2737,2738],{"class":60},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[33,2740,2741,2743,2746,2748,2750],{"class":35,"line":83},[33,2742,376],{"class":39},[33,2744,2745],{"class":47}," str[]",[33,2747,73],{"class":39},[33,2749,2654],{"class":119},[33,2751,80],{"class":47},[33,2753,2754,2756,2758,2761,2763],{"class":35,"line":89},[33,2755,2635],{"class":47},[33,2757,116],{"class":39},[33,2759,2760],{"class":47},"str",[33,2762,116],{"class":39},[33,2764,131],{"class":47},[33,2766,2767],{"class":35,"line":98},[33,2768,2769],{"class":60},"\u002F\u002Fc++风格字符串\n",[33,2771,2772],{"class":35,"line":110},[33,2773,2774],{"class":60},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[33,2776,2777,2780,2782,2784],{"class":35,"line":134},[33,2778,2779],{"class":47},"string str2",[33,2781,73],{"class":39},[33,2783,2654],{"class":119},[33,2785,80],{"class":47},[33,2787,2788,2790,2792,2795,2797],{"class":35,"line":156},[33,2789,2635],{"class":47},[33,2791,116],{"class":39},[33,2793,2794],{"class":47},"str2",[33,2796,116],{"class":39},[33,2798,131],{"class":47},[1599,2800,2802],{"id":2801},"_136布尔类型bool","1.3.6布尔类型bool",[23,2804,2806],{"className":25,"code":2805,"language":27,"meta":28,"style":28},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[30,2807,2808,2823],{"__ignoreMap":28},[33,2809,2810,2813,2816,2818,2821],{"class":35,"line":36},[33,2811,2812],{"class":39},"bool",[33,2814,2815],{"class":47}," flag",[33,2817,73],{"class":39},[33,2819,2820],{"class":76},"true",[33,2822,80],{"class":47},[33,2824,2825,2828,2830,2833,2835,2837],{"class":35,"line":51},[33,2826,2827],{"class":47},"cout",[33,2829,322],{"class":39},[33,2831,2832],{"class":47},"(flag)",[33,2834,116],{"class":39},[33,2836,150],{"class":47},[33,2838,2839],{"class":60}," \u002F\u002F查看布尔占内存空间\n",[18,2841,2843],{"id":2842},"_14键盘输入cin","1.4键盘输入cin",[23,2845,2847],{"className":25,"code":2846,"language":27,"meta":28,"style":28},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[30,2848,2849,2861,2878,2889],{"__ignoreMap":28},[33,2850,2851,2853,2855,2857,2859],{"class":35,"line":36},[33,2852,40],{"class":39},[33,2854,70],{"class":47},[33,2856,73],{"class":39},[33,2858,766],{"class":76},[33,2860,80],{"class":47},[33,2862,2863,2865,2867,2870,2872,2874,2876],{"class":35,"line":51},[33,2864,2827],{"class":47},[33,2866,116],{"class":39},[33,2868,2869],{"class":119},"\"请给整型变量a赋值\"",[33,2871,116],{"class":39},[33,2873,126],{"class":47},[33,2875,116],{"class":39},[33,2877,131],{"class":47},[33,2879,2880,2883,2886],{"class":35,"line":57},[33,2881,2882],{"class":47},"cin ",[33,2884,2885],{"class":39},">>",[33,2887,2888],{"class":47}," a;\n",[33,2890,2891,2893,2895,2898,2901,2903,2905],{"class":35,"line":64},[33,2892,2635],{"class":47},[33,2894,116],{"class":39},[33,2896,2897],{"class":119}," \"整型变量a=\"",[33,2899,2900],{"class":39}," \u003C\u003C",[33,2902,126],{"class":47},[33,2904,116],{"class":39},[33,2906,131],{"class":47},[18,2908,2910],{"id":2909},"_15运算符","1.5运算符",[1599,2912,2914],{"id":2913},"_151算术运算符","1.5.1算术运算符",[14,2916,2917,2921],{},[2918,2919],"img",{"alt":28,"src":2920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[574,2923,2924,2927,2930],{},[564,2925,2926],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[564,2928,2929],{},"两个小数不可以做取模运算",[564,2931,2932],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[1599,2934,2936],{"id":2935},"_152赋值运算符","1.5.2赋值运算符",[14,2938,2939],{},[2918,2940],{"alt":28,"src":2941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[1599,2943,2945],{"id":2944},"_153比较运算符","1.5.3比较运算符",[14,2947,2948],{},[2918,2949],{"alt":28,"src":2950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[1599,2952,2954],{"id":2953},"_154逻辑运算符","1.5.4逻辑运算符",[14,2956,2957],{},[2918,2958],{"alt":28,"src":2959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[18,2961,2963],{"id":2962},"_16程序流程结构","1.6程序流程结构",[1599,2965,2967],{"id":2966},"_161选择结构","1.6.1选择结构",[574,2969,2970],{},[564,2971,2972],{},"if语句\n单行、多行、多条件if语句",[23,2974,2976],{"className":25,"code":2975,"language":27,"meta":28,"style":28},"\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",[30,2977,2978,2983,2998,3002,3015,3019,3024,3033,3046,3050,3063,3067,3072,3076,3089,3093,3098,3117,3121,3134,3138,3166,3170,3186,3190,3194,3198,3211,3215],{"__ignoreMap":28},[33,2979,2980],{"class":35,"line":36},[33,2981,2982],{"class":60},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[33,2984,2985,2988,2991,2993,2996],{"class":35,"line":51},[33,2986,2987],{"class":39},"if",[33,2989,2990],{"class":47},"(score",[33,2992,1265],{"class":39},[33,2994,2995],{"class":76},"600",[33,2997,884],{"class":47},[33,2999,3000],{"class":35,"line":57},[33,3001,54],{"class":47},[33,3003,3004,3006,3008,3011,3013],{"class":35,"line":64},[33,3005,113],{"class":47},[33,3007,116],{"class":39},[33,3009,3010],{"class":119},"'这是单行if语句'",[33,3012,116],{"class":39},[33,3014,131],{"class":47},[33,3016,3017],{"class":35,"line":83},[33,3018,231],{"class":47},[33,3020,3021],{"class":35,"line":89},[33,3022,3023],{"class":60},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[33,3025,3026,3028,3030],{"class":35,"line":98},[33,3027,2882],{"class":47},[33,3029,2885],{"class":39},[33,3031,3032],{"class":47}," score\n",[33,3034,3035,3037,3039,3042,3044],{"class":35,"line":110},[33,3036,2987],{"class":39},[33,3038,2990],{"class":47},[33,3040,3041],{"class":39},"\u003C=",[33,3043,2995],{"class":76},[33,3045,884],{"class":47},[33,3047,3048],{"class":35,"line":134},[33,3049,54],{"class":47},[33,3051,3052,3054,3056,3059,3061],{"class":35,"line":156},[33,3053,113],{"class":47},[33,3055,2885],{"class":39},[33,3057,3058],{"class":119},"\"小于等于600\"",[33,3060,116],{"class":39},[33,3062,131],{"class":47},[33,3064,3065],{"class":35,"line":163},[33,3066,231],{"class":47},[33,3068,3069],{"class":35,"line":169},[33,3070,3071],{"class":39},"else\n",[33,3073,3074],{"class":35,"line":175},[33,3075,54],{"class":47},[33,3077,3078,3080,3082,3085,3087],{"class":35,"line":181},[33,3079,113],{"class":47},[33,3081,2885],{"class":39},[33,3083,3084],{"class":119},"\"大于600\"",[33,3086,2885],{"class":39},[33,3088,131],{"class":47},[33,3090,3091],{"class":35,"line":196},[33,3092,231],{"class":47},[33,3094,3095],{"class":35,"line":213},[33,3096,3097],{"class":60},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[33,3099,3100,3102,3104,3106,3108,3111,3113,3115],{"class":35,"line":228},[33,3101,2987],{"class":39},[33,3103,860],{"class":47},[33,3105,766],{"class":76},[33,3107,875],{"class":39},[33,3109,3110],{"class":47},"num",[33,3112,875],{"class":39},[33,3114,457],{"class":76},[33,3116,884],{"class":47},[33,3118,3119],{"class":35,"line":1345},[33,3120,54],{"class":47},[33,3122,3123,3125,3127,3130,3132],{"class":35,"line":1350},[33,3124,113],{"class":47},[33,3126,116],{"class":39},[33,3128,3129],{"class":119},"\"小于100\"",[33,3131,116],{"class":39},[33,3133,131],{"class":47},[33,3135,3136],{"class":35,"line":1359},[33,3137,231],{"class":47},[33,3139,3140,3143,3146,3149,3152,3154,3157,3159,3161,3164],{"class":35,"line":1364},[33,3141,3142],{"class":39},"else",[33,3144,3145],{"class":39}," if",[33,3147,3148],{"class":47}," (nmu",[33,3150,3151],{"class":39},">=",[33,3153,457],{"class":76},[33,3155,3156],{"class":39},"&&",[33,3158,3110],{"class":47},[33,3160,875],{"class":39},[33,3162,3163],{"class":76},"200",[33,3165,884],{"class":47},[33,3167,3168],{"class":35,"line":1370},[33,3169,54],{"class":47},[33,3171,3172,3174,3176,3179,3181,3183],{"class":35,"line":1425},[33,3173,113],{"class":47},[33,3175,116],{"class":39},[33,3177,3178],{"class":119},"\"不小于100且小于200\"",[33,3180,116],{"class":39},[33,3182,150],{"class":47},[33,3184,3185],{"class":60}," \u002F\u002F可以无限else if,python中是elif：\n",[33,3187,3188],{"class":35,"line":1438},[33,3189,231],{"class":47},[33,3191,3192],{"class":35,"line":1451},[33,3193,3071],{"class":39},[33,3195,3196],{"class":35,"line":1457},[33,3197,54],{"class":47},[33,3199,3200,3202,3204,3207,3209],{"class":35,"line":1466},[33,3201,113],{"class":47},[33,3203,116],{"class":39},[33,3205,3206],{"class":119},"\"不小于200\"",[33,3208,116],{"class":39},[33,3210,131],{"class":47},[33,3212,3213],{"class":35,"line":1471},[33,3214,231],{"class":47},[33,3216,3217],{"class":35,"line":1477},[33,3218,3219],{"class":60},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[574,3221,3222],{"start":51},[564,3223,3224],{},"三目运算符",[23,3226,3228],{"className":25,"code":3227,"language":27,"meta":28,"style":28},"\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",[30,3229,3230,3235,3240,3266,3288,3305,3310,3333,3348],{"__ignoreMap":28},[33,3231,3232],{"class":35,"line":36},[33,3233,3234],{"class":60},"\u002F\u002F创建三个变量a,b,c\n",[33,3236,3237],{"class":35,"line":51},[33,3238,3239],{"class":60},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[33,3241,3242,3244,3246,3248,3250,3253,3255,3257,3260,3262,3264],{"class":35,"line":57},[33,3243,40],{"class":39},[33,3245,70],{"class":47},[33,3247,73],{"class":39},[33,3249,1045],{"class":76},[33,3251,3252],{"class":47},",b",[33,3254,73],{"class":39},[33,3256,77],{"class":76},[33,3258,3259],{"class":47},",c",[33,3261,73],{"class":39},[33,3263,766],{"class":76},[33,3265,80],{"class":47},[33,3267,3268,3270,3272,3275,3277,3279,3281,3283,3285],{"class":35,"line":64},[33,3269,1902],{"class":47},[33,3271,73],{"class":39},[33,3273,3274],{"class":47},"(a",[33,3276,1265],{"class":39},[33,3278,1094],{"class":47},[33,3280,2581],{"class":39},[33,3282,126],{"class":47},[33,3284,2458],{"class":39},[33,3286,3287],{"class":47},"b)\n",[33,3289,3290,3292,3294,3297,3299,3301,3303],{"class":35,"line":83},[33,3291,2827],{"class":47},[33,3293,116],{"class":39},[33,3295,3296],{"class":119},"\"c=\"",[33,3298,116],{"class":39},[33,3300,1902],{"class":47},[33,3302,116],{"class":39},[33,3304,131],{"class":47},[33,3306,3307],{"class":35,"line":89},[33,3308,3309],{"class":60},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[33,3311,3312,3314,3316,3318,3320,3322,3324,3327,3329,3331],{"class":35,"line":98},[33,3313,3274],{"class":47},[33,3315,1265],{"class":39},[33,3317,1094],{"class":47},[33,3319,2581],{"class":39},[33,3321,126],{"class":47},[33,3323,2458],{"class":39},[33,3325,3326],{"class":47},"b)",[33,3328,73],{"class":39},[33,3330,457],{"class":76},[33,3332,80],{"class":47},[33,3334,3335,3337,3339,3341,3343,3345],{"class":35,"line":110},[33,3336,2827],{"class":47},[33,3338,116],{"class":39},[33,3340,126],{"class":47},[33,3342,116],{"class":39},[33,3344,150],{"class":47},[33,3346,3347],{"class":60}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[33,3349,3350,3352,3354,3356,3358,3360],{"class":35,"line":134},[33,3351,2827],{"class":47},[33,3353,116],{"class":39},[33,3355,1094],{"class":47},[33,3357,116],{"class":39},[33,3359,150],{"class":47},[33,3361,3362],{"class":60}," \u002F\u002F10   a>b,b还是原值\n",[574,3364,3365],{"start":57},[564,3366,3367],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[23,3369,3371],{"className":25,"code":3370,"language":27,"meta":28,"style":28},"\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",[30,3372,3373,3378,3384,3394,3402,3406,3419,3432,3442,3450,3454,3479,3500,3522,3543,3565,3586,3606,3610],{"__ignoreMap":28},[33,3374,3375],{"class":35,"line":36},[33,3376,3377],{"class":60},"\u002F\u002F案例-电影打分\n",[33,3379,3380,3382],{"class":35,"line":51},[33,3381,1131],{"class":39},[33,3383,1134],{"class":119},[33,3385,3386,3388,3390,3392],{"class":35,"line":57},[33,3387,1139],{"class":39},[33,3389,1142],{"class":39},[33,3391,1145],{"class":43},[33,3393,80],{"class":47},[33,3395,3396,3398,3400],{"class":35,"line":64},[33,3397,40],{"class":39},[33,3399,44],{"class":43},[33,3401,48],{"class":47},[33,3403,3404],{"class":35,"line":83},[33,3405,54],{"class":47},[33,3407,3408,3410,3413,3415,3417],{"class":35,"line":89},[33,3409,67],{"class":39},[33,3411,3412],{"class":47}," score",[33,3414,73],{"class":39},[33,3416,766],{"class":76},[33,3418,80],{"class":47},[33,3420,3421,3423,3425,3428,3430],{"class":35,"line":98},[33,3422,113],{"class":47},[33,3424,116],{"class":39},[33,3426,3427],{"class":119},"\"电影打分：\"",[33,3429,116],{"class":39},[33,3431,131],{"class":47},[33,3433,3434,3437,3439],{"class":35,"line":110},[33,3435,3436],{"class":47},"    cin",[33,3438,2885],{"class":39},[33,3440,3441],{"class":47},"score;\n",[33,3443,3444,3447],{"class":35,"line":134},[33,3445,3446],{"class":39},"    switch",[33,3448,3449],{"class":47},"(score)\n",[33,3451,3452],{"class":35,"line":156},[33,3453,889],{"class":47},[33,3455,3456,3459,3462,3465,3467,3470,3472,3474,3477],{"class":35,"line":163},[33,3457,3458],{"class":39},"        case",[33,3460,3461],{"class":76}," 10",[33,3463,3464],{"class":47},":cout",[33,3466,116],{"class":39},[33,3468,3469],{"class":119},"\"经典\"",[33,3471,116],{"class":39},[33,3473,150],{"class":47},[33,3475,3476],{"class":39},"break",[33,3478,80],{"class":47},[33,3480,3481,3483,3486,3488,3490,3492,3494,3496,3498],{"class":35,"line":169},[33,3482,3458],{"class":39},[33,3484,3485],{"class":76}," 9",[33,3487,3464],{"class":47},[33,3489,116],{"class":39},[33,3491,3469],{"class":119},[33,3493,116],{"class":39},[33,3495,150],{"class":47},[33,3497,3476],{"class":39},[33,3499,80],{"class":47},[33,3501,3502,3504,3507,3509,3511,3514,3516,3518,3520],{"class":35,"line":175},[33,3503,3458],{"class":39},[33,3505,3506],{"class":76}," 8",[33,3508,3464],{"class":47},[33,3510,116],{"class":39},[33,3512,3513],{"class":119},"\"非常好\"",[33,3515,116],{"class":39},[33,3517,150],{"class":47},[33,3519,3476],{"class":39},[33,3521,80],{"class":47},[33,3523,3524,3526,3529,3531,3533,3535,3537,3539,3541],{"class":35,"line":181},[33,3525,3458],{"class":39},[33,3527,3528],{"class":76}," 7",[33,3530,3464],{"class":47},[33,3532,116],{"class":39},[33,3534,3513],{"class":119},[33,3536,116],{"class":39},[33,3538,150],{"class":47},[33,3540,3476],{"class":39},[33,3542,80],{"class":47},[33,3544,3545,3547,3550,3552,3554,3557,3559,3561,3563],{"class":35,"line":196},[33,3546,3458],{"class":39},[33,3548,3549],{"class":76}," 6",[33,3551,3464],{"class":47},[33,3553,116],{"class":39},[33,3555,3556],{"class":119},"\"一般\"",[33,3558,116],{"class":39},[33,3560,150],{"class":47},[33,3562,3476],{"class":39},[33,3564,80],{"class":47},[33,3566,3567,3569,3572,3574,3576,3578,3580,3582,3584],{"class":35,"line":213},[33,3568,3458],{"class":39},[33,3570,3571],{"class":76}," 5",[33,3573,3464],{"class":47},[33,3575,116],{"class":39},[33,3577,3556],{"class":119},[33,3579,116],{"class":39},[33,3581,150],{"class":47},[33,3583,3476],{"class":39},[33,3585,80],{"class":47},[33,3587,3588,3591,3593,3595,3598,3600,3602,3604],{"class":35,"line":228},[33,3589,3590],{"class":39},"        default",[33,3592,3464],{"class":47},[33,3594,116],{"class":39},[33,3596,3597],{"class":119},"\"烂片\"",[33,3599,116],{"class":39},[33,3601,150],{"class":47},[33,3603,3476],{"class":39},[33,3605,80],{"class":47},[33,3607,3608],{"class":35,"line":1345},[33,3609,916],{"class":47},[33,3611,3612],{"class":35,"line":1350},[33,3613,231],{"class":47},[14,3615,3616],{},"if和switch区别：",[561,3618,3619,3622],{},[564,3620,3621],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[564,3623,3624],{},"switch优点：结构清晰，执行效率高",[1599,3626,3628],{"id":3627},"_162循环结构","1.6.2循环结构",[574,3630,3631],{},[564,3632,3633],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[23,3635,3637],{"className":25,"code":3636,"language":27,"meta":28,"style":28},"\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",[30,3638,3639,3644,3652,3656,3669,3683,3687,3707,3716,3720,3732],{"__ignoreMap":28},[33,3640,3641],{"class":35,"line":36},[33,3642,3643],{"class":60},"\u002F\u002F打印0-9数字\n",[33,3645,3646,3648,3650],{"class":35,"line":51},[33,3647,40],{"class":39},[33,3649,44],{"class":43},[33,3651,48],{"class":47},[33,3653,3654],{"class":35,"line":57},[33,3655,54],{"class":47},[33,3657,3658,3660,3663,3665,3667],{"class":35,"line":64},[33,3659,67],{"class":39},[33,3661,3662],{"class":47}," num",[33,3664,73],{"class":39},[33,3666,766],{"class":76},[33,3668,80],{"class":47},[33,3670,3671,3674,3677,3679,3681],{"class":35,"line":83},[33,3672,3673],{"class":39},"    while",[33,3675,3676],{"class":47},"(num",[33,3678,875],{"class":39},[33,3680,77],{"class":76},[33,3682,884],{"class":47},[33,3684,3685],{"class":35,"line":89},[33,3686,889],{"class":47},[33,3688,3689,3692,3695,3697,3699,3701,3704],{"class":35,"line":98},[33,3690,3691],{"class":43},"       std",[33,3693,3694],{"class":47},"::cout",[33,3696,116],{"class":39},[33,3698,3110],{"class":47},[33,3700,116],{"class":39},[33,3702,3703],{"class":43},"std",[33,3705,3706],{"class":47},"::endl;\n",[33,3708,3709,3712,3714],{"class":35,"line":110},[33,3710,3711],{"class":47},"        num",[33,3713,811],{"class":39},[33,3715,80],{"class":47},[33,3717,3718],{"class":35,"line":134},[33,3719,916],{"class":47},[33,3721,3722,3725,3727,3730],{"class":35,"line":156},[33,3723,3724],{"class":43},"    system",[33,3726,345],{"class":47},[33,3728,3729],{"class":119},"\"pause\"",[33,3731,884],{"class":47},[33,3733,3734],{"class":35,"line":163},[33,3735,231],{"class":47},[14,3737,3738],{},"注意：写好循环条件，避免死循环情况",[23,3740,3742],{"className":25,"code":3741,"language":27,"meta":28,"style":28},"\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",[30,3743,3744,3749,3756,3763,3773,3781,3785,3790,3815,3819,3824,3832,3859,3864,3869,3882,3892,3896,3906,3911,3924,3928,3942,3946,3961,3965,3978,3982,3987,3991,4004,4011,4015,4020,4025,4030],{"__ignoreMap":28},[33,3745,3746],{"class":35,"line":36},[33,3747,3748],{"class":60},"\u002F\u002F循环结构-猜数字\n",[33,3750,3751,3753],{"class":35,"line":51},[33,3752,1131],{"class":39},[33,3754,3755],{"class":119}," \u003Ciostream>\n",[33,3757,3758,3760],{"class":35,"line":57},[33,3759,1131],{"class":39},[33,3761,3762],{"class":119}," \u003Cctime>\n",[33,3764,3765,3767,3769,3771],{"class":35,"line":64},[33,3766,1139],{"class":39},[33,3768,1142],{"class":39},[33,3770,1145],{"class":43},[33,3772,80],{"class":47},[33,3774,3775,3777,3779],{"class":35,"line":83},[33,3776,40],{"class":39},[33,3778,44],{"class":43},[33,3780,48],{"class":47},[33,3782,3783],{"class":35,"line":89},[33,3784,54],{"class":47},[33,3786,3787],{"class":35,"line":98},[33,3788,3789],{"class":60},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[33,3791,3792,3795,3798,3801,3803,3805,3808,3810,3812],{"class":35,"line":110},[33,3793,3794],{"class":43},"    srand",[33,3796,3797],{"class":47},"((",[33,3799,3800],{"class":39},"unsigned",[33,3802,591],{"class":39},[33,3804,352],{"class":47},[33,3806,3807],{"class":43},"time",[33,3809,345],{"class":47},[33,3811,439],{"class":76},[33,3813,3814],{"class":47},"));\n",[33,3816,3817],{"class":35,"line":134},[33,3818,160],{"emptyLinePlaceholder":159},[33,3820,3821],{"class":35,"line":156},[33,3822,3823],{"class":60},"    \u002F\u002F1.系统生成随机数\n",[33,3825,3826,3829],{"class":35,"line":163},[33,3827,3828],{"class":60},"    \u002F\u002Frand()%100",[33,3830,3831],{"class":60}," \u002F\u002F生成0-99的随机数\n",[33,3833,3834,3836,3838,3840,3843,3846,3848,3850,3852,3854,3856],{"class":35,"line":169},[33,3835,67],{"class":39},[33,3837,3662],{"class":47},[33,3839,73],{"class":39},[33,3841,3842],{"class":43},"rand",[33,3844,3845],{"class":47},"()",[33,3847,1939],{"class":39},[33,3849,457],{"class":76},[33,3851,1271],{"class":39},[33,3853,701],{"class":76},[33,3855,460],{"class":47},[33,3857,3858],{"class":60}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[33,3860,3861],{"class":35,"line":175},[33,3862,3863],{"class":60},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[33,3865,3866],{"class":35,"line":181},[33,3867,3868],{"class":60},"    \u002F\u002F2.玩家猜测\n",[33,3870,3871,3873,3876,3878,3880],{"class":35,"line":196},[33,3872,67],{"class":39},[33,3874,3875],{"class":47}," val",[33,3877,73],{"class":39},[33,3879,766],{"class":76},[33,3881,80],{"class":47},[33,3883,3884,3886,3888,3890],{"class":35,"line":213},[33,3885,3673],{"class":39},[33,3887,860],{"class":47},[33,3889,701],{"class":76},[33,3891,884],{"class":47},[33,3893,3894],{"class":35,"line":228},[33,3895,889],{"class":47},[33,3897,3898,3901,3903],{"class":35,"line":1345},[33,3899,3900],{"class":47},"        cin",[33,3902,2885],{"class":39},[33,3904,3905],{"class":47},"val;\n",[33,3907,3908],{"class":35,"line":1350},[33,3909,3910],{"class":60},"        \u002F\u002F3.判断玩家猜测\n",[33,3912,3913,3916,3919,3921],{"class":35,"line":1359},[33,3914,3915],{"class":39},"        if",[33,3917,3918],{"class":47},"(val",[33,3920,875],{"class":39},[33,3922,3923],{"class":47},"num) \n",[33,3925,3926],{"class":35,"line":1364},[33,3927,1254],{"class":47},[33,3929,3930,3933,3935,3938,3940],{"class":35,"line":1370},[33,3931,3932],{"class":47},"            cout",[33,3934,116],{"class":39},[33,3936,3937],{"class":119},"\"猜小了！\"",[33,3939,116],{"class":39},[33,3941,131],{"class":47},[33,3943,3944],{"class":35,"line":1425},[33,3945,1334],{"class":47},[33,3947,3948,3951,3953,3956,3958],{"class":35,"line":1438},[33,3949,3950],{"class":39},"        else",[33,3952,3145],{"class":39},[33,3954,3955],{"class":47}," (val",[33,3957,1265],{"class":39},[33,3959,3960],{"class":47},"num)\n",[33,3962,3963],{"class":35,"line":1451},[33,3964,1254],{"class":47},[33,3966,3967,3969,3971,3974,3976],{"class":35,"line":1457},[33,3968,3932],{"class":47},[33,3970,116],{"class":39},[33,3972,3973],{"class":119},"\"猜大了！\"",[33,3975,116],{"class":39},[33,3977,131],{"class":47},[33,3979,3980],{"class":35,"line":1466},[33,3981,1334],{"class":47},[33,3983,3984],{"class":35,"line":1471},[33,3985,3986],{"class":39},"        else\n",[33,3988,3989],{"class":35,"line":1477},[33,3990,1254],{"class":47},[33,3992,3993,3995,3997,4000,4002],{"class":35,"line":1504},[33,3994,3932],{"class":47},[33,3996,116],{"class":39},[33,3998,3999],{"class":119},"\"猜对了！\"",[33,4001,116],{"class":39},[33,4003,131],{"class":47},[33,4005,4006,4009],{"class":35,"line":1509},[33,4007,4008],{"class":39},"            break",[33,4010,80],{"class":47},[33,4012,4013],{"class":35,"line":1525},[33,4014,1334],{"class":47},[33,4016,4017],{"class":35,"line":1535},[33,4018,4019],{"class":60},"        \u002F\u002F猜对 退出游戏\n",[33,4021,4022],{"class":35,"line":1540},[33,4023,4024],{"class":60},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[33,4026,4028],{"class":35,"line":4027},35,[33,4029,916],{"class":47},[33,4031,4033],{"class":35,"line":4032},36,[33,4034,231],{"class":47},[574,4036,4037],{"start":51},[564,4038,4039,4040,4043],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[480,4041,4042],{},"do...while会先执行一次循环语句","，在判断循环语句",[23,4045,4047],{"className":25,"code":4046,"language":27,"meta":28,"style":28},"\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",[30,4048,4049,4054,4062,4066,4078,4086,4090,4107,4114,4118,4131,4141],{"__ignoreMap":28},[33,4050,4051],{"class":35,"line":36},[33,4052,4053],{"class":60},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[33,4055,4056,4058,4060],{"class":35,"line":51},[33,4057,40],{"class":39},[33,4059,44],{"class":43},[33,4061,48],{"class":47},[33,4063,4064],{"class":35,"line":57},[33,4065,54],{"class":47},[33,4067,4068,4070,4072,4074,4076],{"class":35,"line":64},[33,4069,67],{"class":39},[33,4071,3662],{"class":47},[33,4073,73],{"class":39},[33,4075,766],{"class":76},[33,4077,80],{"class":47},[33,4079,4080,4083],{"class":35,"line":83},[33,4081,4082],{"class":39},"    do",[33,4084,4085],{"class":47}," \n",[33,4087,4088],{"class":35,"line":89},[33,4089,889],{"class":47},[33,4091,4092,4095,4097,4099,4101,4103,4105],{"class":35,"line":98},[33,4093,4094],{"class":43},"        std",[33,4096,3694],{"class":47},[33,4098,116],{"class":39},[33,4100,3110],{"class":47},[33,4102,116],{"class":39},[33,4104,3703],{"class":43},[33,4106,3706],{"class":47},[33,4108,4109,4111],{"class":35,"line":110},[33,4110,3711],{"class":47},[33,4112,4113],{"class":39},"++\n",[33,4115,4116],{"class":35,"line":134},[33,4117,916],{"class":47},[33,4119,4120,4122,4124,4126,4128],{"class":35,"line":156},[33,4121,3673],{"class":39},[33,4123,3676],{"class":47},[33,4125,875],{"class":39},[33,4127,77],{"class":76},[33,4129,4130],{"class":47},");\n",[33,4132,4133,4135,4137,4139],{"class":35,"line":163},[33,4134,3724],{"class":43},[33,4136,345],{"class":47},[33,4138,3729],{"class":119},[33,4140,4130],{"class":47},[33,4142,4143],{"class":35,"line":169},[33,4144,231],{"class":47},[14,4146,4147],{},"案例-水仙花数",[14,4149,4150],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,4152,4153],{},"例如：1^3+5^3+3^3=153",[14,4155,4156],{},"请用do...while语句，求出所有3位数的水仙花数",[23,4158,4160],{"className":25,"code":4159,"language":27,"meta":28,"style":28},"#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",[30,4161,4162,4168,4178,4186,4190,4195,4207,4213,4217,4222,4238,4253,4269,4284,4303,4318,4366,4370,4382,4386,4394,4398,4412],{"__ignoreMap":28},[33,4163,4164,4166],{"class":35,"line":36},[33,4165,1131],{"class":39},[33,4167,3755],{"class":119},[33,4169,4170,4172,4174,4176],{"class":35,"line":51},[33,4171,1139],{"class":39},[33,4173,1142],{"class":39},[33,4175,1145],{"class":43},[33,4177,80],{"class":47},[33,4179,4180,4182,4184],{"class":35,"line":57},[33,4181,40],{"class":39},[33,4183,44],{"class":43},[33,4185,48],{"class":47},[33,4187,4188],{"class":35,"line":64},[33,4189,54],{"class":47},[33,4191,4192],{"class":35,"line":83},[33,4193,4194],{"class":60},"    \u002F\u002F1.先打印所有三位数字\n",[33,4196,4197,4199,4201,4203,4205],{"class":35,"line":89},[33,4198,67],{"class":39},[33,4200,3662],{"class":47},[33,4202,73],{"class":39},[33,4204,457],{"class":76},[33,4206,80],{"class":47},[33,4208,4209,4211],{"class":35,"line":98},[33,4210,4082],{"class":39},[33,4212,4085],{"class":47},[33,4214,4215],{"class":35,"line":110},[33,4216,889],{"class":47},[33,4218,4219],{"class":35,"line":134},[33,4220,4221],{"class":60},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[33,4223,4224,4227,4229,4231,4233,4235],{"class":35,"line":156},[33,4225,4226],{"class":39},"        int",[33,4228,70],{"class":47},[33,4230,73],{"class":39},[33,4232,766],{"class":76},[33,4234,460],{"class":47},[33,4236,4237],{"class":60}," \u002F\u002F个位\n",[33,4239,4240,4242,4244,4246,4248,4250],{"class":35,"line":163},[33,4241,4226],{"class":39},[33,4243,1040],{"class":47},[33,4245,73],{"class":39},[33,4247,766],{"class":76},[33,4249,460],{"class":47},[33,4251,4252],{"class":60}," \u002F\u002F十位\n",[33,4254,4255,4257,4260,4262,4264,4266],{"class":35,"line":169},[33,4256,4226],{"class":39},[33,4258,4259],{"class":47}," c",[33,4261,73],{"class":39},[33,4263,766],{"class":76},[33,4265,460],{"class":47},[33,4267,4268],{"class":60}," \u002F\u002F百位\n",[33,4270,4271,4274,4276,4278,4280,4282],{"class":35,"line":175},[33,4272,4273],{"class":47},"        a",[33,4275,73],{"class":39},[33,4277,3110],{"class":47},[33,4279,1939],{"class":39},[33,4281,77],{"class":76},[33,4283,80],{"class":47},[33,4285,4286,4289,4291,4293,4295,4297,4299,4301],{"class":35,"line":181},[33,4287,4288],{"class":47},"        b",[33,4290,73],{"class":39},[33,4292,3110],{"class":47},[33,4294,2184],{"class":39},[33,4296,77],{"class":76},[33,4298,1939],{"class":39},[33,4300,77],{"class":76},[33,4302,80],{"class":47},[33,4304,4305,4308,4310,4312,4314,4316],{"class":35,"line":196},[33,4306,4307],{"class":47},"        c",[33,4309,73],{"class":39},[33,4311,3110],{"class":47},[33,4313,2184],{"class":39},[33,4315,457],{"class":76},[33,4317,80],{"class":47},[33,4319,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344,4346,4348,4350,4352,4354,4357,4360,4363],{"class":35,"line":213},[33,4321,3915],{"class":39},[33,4323,3274],{"class":47},[33,4325,2057],{"class":39},[33,4327,126],{"class":47},[33,4329,2057],{"class":39},[33,4331,126],{"class":47},[33,4333,1271],{"class":39},[33,4335,1094],{"class":47},[33,4337,2057],{"class":39},[33,4339,1094],{"class":47},[33,4341,2057],{"class":39},[33,4343,1094],{"class":47},[33,4345,1271],{"class":39},[33,4347,1902],{"class":47},[33,4349,2057],{"class":39},[33,4351,1902],{"class":47},[33,4353,2057],{"class":39},[33,4355,4356],{"class":47},"c ",[33,4358,4359],{"class":39},"==",[33,4361,4362],{"class":47}," num)",[33,4364,4365],{"class":60}," \u002F\u002F如果是水仙花数，才打印\n",[33,4367,4368],{"class":35,"line":228},[33,4369,1254],{"class":47},[33,4371,4372,4374,4376,4378,4380],{"class":35,"line":1345},[33,4373,3932],{"class":47},[33,4375,116],{"class":39},[33,4377,3110],{"class":47},[33,4379,116],{"class":39},[33,4381,131],{"class":47},[33,4383,4384],{"class":35,"line":1350},[33,4385,1334],{"class":47},[33,4387,4388,4390,4392],{"class":35,"line":1359},[33,4389,3711],{"class":47},[33,4391,811],{"class":39},[33,4393,80],{"class":47},[33,4395,4396],{"class":35,"line":1364},[33,4397,916],{"class":47},[33,4399,4400,4402,4405,4407,4410],{"class":35,"line":1370},[33,4401,3673],{"class":39},[33,4403,4404],{"class":47}," (num ",[33,4406,875],{"class":39},[33,4408,4409],{"class":76}," 1000",[33,4411,4130],{"class":47},[33,4413,4414],{"class":35,"line":1425},[33,4415,231],{"class":47},[574,4417,4418],{"start":57},[564,4419,4420],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[23,4422,4424],{"className":25,"code":4423,"language":27,"meta":28,"style":28},"\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",[30,4425,4426,4431,4458,4462,4474,4478,4483,4494,4501,4505,4519,4523,4530,4534,4546,4555],{"__ignoreMap":28},[33,4427,4428],{"class":35,"line":36},[33,4429,4430],{"class":60},"\u002F\u002F从数字0-9打印\n",[33,4432,4433,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456],{"class":35,"line":51},[33,4434,4435],{"class":39},"for",[33,4437,345],{"class":47},[33,4439,40],{"class":39},[33,4441,865],{"class":47},[33,4443,73],{"class":39},[33,4445,766],{"class":76},[33,4447,872],{"class":47},[33,4449,875],{"class":39},[33,4451,77],{"class":76},[33,4453,872],{"class":47},[33,4455,811],{"class":39},[33,4457,884],{"class":47},[33,4459,4460],{"class":35,"line":57},[33,4461,54],{"class":47},[33,4463,4464,4466,4468,4470,4472],{"class":35,"line":64},[33,4465,113],{"class":47},[33,4467,116],{"class":39},[33,4469,1239],{"class":47},[33,4471,116],{"class":39},[33,4473,131],{"class":47},[33,4475,4476],{"class":35,"line":83},[33,4477,231],{"class":47},[33,4479,4480],{"class":35,"line":89},[33,4481,4482],{"class":60},"\u002F\u002F上式可以进行拆分\n",[33,4484,4485,4487,4489,4491],{"class":35,"line":98},[33,4486,40],{"class":39},[33,4488,865],{"class":47},[33,4490,73],{"class":39},[33,4492,4493],{"class":76},"0\n",[33,4495,4496,4498],{"class":35,"line":110},[33,4497,4435],{"class":39},[33,4499,4500],{"class":47},"(;;;)\n",[33,4502,4503],{"class":35,"line":134},[33,4504,54],{"class":47},[33,4506,4507,4510,4513,4515,4517],{"class":35,"line":156},[33,4508,4509],{"class":39},"    if",[33,4511,4512],{"class":47},"(i",[33,4514,3151],{"class":39},[33,4516,77],{"class":76},[33,4518,884],{"class":47},[33,4520,4521],{"class":35,"line":163},[33,4522,889],{"class":47},[33,4524,4525,4528],{"class":35,"line":169},[33,4526,4527],{"class":39},"        break",[33,4529,80],{"class":47},[33,4531,4532],{"class":35,"line":175},[33,4533,916],{"class":47},[33,4535,4536,4538,4540,4542,4544],{"class":35,"line":181},[33,4537,113],{"class":47},[33,4539,116],{"class":39},[33,4541,1239],{"class":47},[33,4543,116],{"class":39},[33,4545,131],{"class":47},[33,4547,4548,4551,4553],{"class":35,"line":196},[33,4549,4550],{"class":47},"    i",[33,4552,811],{"class":39},[33,4554,80],{"class":47},[33,4556,4557],{"class":35,"line":213},[33,4558,231],{"class":47},[14,4560,4561],{},"小练习",[23,4563,4565],{"className":25,"code":4564,"language":27,"meta":28,"style":28},"#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",[30,4566,4567,4573,4583,4591,4595,4600,4605,4631,4635,4640,4645,4686,4690,4703,4707,4711,4715,4727,4731,4735],{"__ignoreMap":28},[33,4568,4569,4571],{"class":35,"line":36},[33,4570,1131],{"class":39},[33,4572,1134],{"class":119},[33,4574,4575,4577,4579,4581],{"class":35,"line":51},[33,4576,1139],{"class":39},[33,4578,1142],{"class":39},[33,4580,1145],{"class":43},[33,4582,80],{"class":47},[33,4584,4585,4587,4589],{"class":35,"line":57},[33,4586,40],{"class":39},[33,4588,44],{"class":43},[33,4590,48],{"class":47},[33,4592,4593],{"class":35,"line":64},[33,4594,54],{"class":47},[33,4596,4597],{"class":35,"line":83},[33,4598,4599],{"class":60},"    \u002F\u002F敲桌子案例\n",[33,4601,4602],{"class":35,"line":89},[33,4603,4604],{"class":60},"    \u002F\u002F1.先输出1-100的数字\n",[33,4606,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627,4629],{"class":35,"line":98},[33,4608,857],{"class":39},[33,4610,345],{"class":47},[33,4612,40],{"class":39},[33,4614,865],{"class":47},[33,4616,73],{"class":39},[33,4618,701],{"class":76},[33,4620,1492],{"class":47},[33,4622,3041],{"class":39},[33,4624,457],{"class":76},[33,4626,1492],{"class":47},[33,4628,811],{"class":39},[33,4630,884],{"class":47},[33,4632,4633],{"class":35,"line":110},[33,4634,889],{"class":47},[33,4636,4637],{"class":35,"line":134},[33,4638,4639],{"class":60},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[33,4641,4642],{"class":35,"line":156},[33,4643,4644],{"class":60},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[33,4646,4647,4649,4651,4653,4655,4657,4659,4662,4664,4666,4668,4670,4672,4674,4676,4678,4680,4682,4684],{"class":35,"line":163},[33,4648,3915],{"class":39},[33,4650,4512],{"class":47},[33,4652,1939],{"class":39},[33,4654,732],{"class":76},[33,4656,4359],{"class":39},[33,4658,766],{"class":76},[33,4660,4661],{"class":39}," ||",[33,4663,865],{"class":47},[33,4665,1939],{"class":39},[33,4667,77],{"class":76},[33,4669,4359],{"class":39},[33,4671,732],{"class":76},[33,4673,4661],{"class":39},[33,4675,865],{"class":47},[33,4677,2184],{"class":39},[33,4679,77],{"class":76},[33,4681,4359],{"class":39},[33,4683,732],{"class":76},[33,4685,884],{"class":47},[33,4687,4688],{"class":35,"line":169},[33,4689,1254],{"class":47},[33,4691,4692,4694,4696,4699,4701],{"class":35,"line":175},[33,4693,3932],{"class":47},[33,4695,116],{"class":39},[33,4697,4698],{"class":119},"\"敲桌子\"",[33,4700,116],{"class":39},[33,4702,131],{"class":47},[33,4704,4705],{"class":35,"line":181},[33,4706,1334],{"class":47},[33,4708,4709],{"class":35,"line":196},[33,4710,3986],{"class":39},[33,4712,4713],{"class":35,"line":213},[33,4714,1254],{"class":47},[33,4716,4717,4719,4721,4723,4725],{"class":35,"line":228},[33,4718,3932],{"class":47},[33,4720,116],{"class":39},[33,4722,1239],{"class":47},[33,4724,116],{"class":39},[33,4726,131],{"class":47},[33,4728,4729],{"class":35,"line":1345},[33,4730,1334],{"class":47},[33,4732,4733],{"class":35,"line":1350},[33,4734,916],{"class":47},[33,4736,4737],{"class":35,"line":1359},[33,4738,231],{"class":47},[14,4740,4741],{},"嵌套实现星图",[23,4743,4745],{"className":25,"code":4744,"language":27,"meta":28,"style":28},"#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",[30,4746,4747,4753,4763,4771,4775,4801,4805,4831,4835,4846,4850,4858,4862],{"__ignoreMap":28},[33,4748,4749,4751],{"class":35,"line":36},[33,4750,1131],{"class":39},[33,4752,1134],{"class":119},[33,4754,4755,4757,4759,4761],{"class":35,"line":51},[33,4756,1139],{"class":39},[33,4758,1142],{"class":39},[33,4760,1145],{"class":43},[33,4762,80],{"class":47},[33,4764,4765,4767,4769],{"class":35,"line":57},[33,4766,40],{"class":39},[33,4768,44],{"class":43},[33,4770,48],{"class":47},[33,4772,4773],{"class":35,"line":64},[33,4774,54],{"class":47},[33,4776,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795,4797,4799],{"class":35,"line":83},[33,4778,857],{"class":39},[33,4780,860],{"class":47},[33,4782,40],{"class":39},[33,4784,865],{"class":47},[33,4786,73],{"class":39},[33,4788,766],{"class":76},[33,4790,872],{"class":47},[33,4792,875],{"class":39},[33,4794,77],{"class":76},[33,4796,872],{"class":47},[33,4798,811],{"class":39},[33,4800,884],{"class":47},[33,4802,4803],{"class":35,"line":89},[33,4804,889],{"class":47},[33,4806,4807,4809,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829],{"class":35,"line":98},[33,4808,1216],{"class":39},[33,4810,860],{"class":47},[33,4812,40],{"class":39},[33,4814,1223],{"class":47},[33,4816,73],{"class":39},[33,4818,766],{"class":76},[33,4820,1230],{"class":47},[33,4822,875],{"class":39},[33,4824,77],{"class":76},[33,4826,1230],{"class":47},[33,4828,811],{"class":39},[33,4830,884],{"class":47},[33,4832,4833],{"class":35,"line":110},[33,4834,1254],{"class":47},[33,4836,4837,4839,4841,4844],{"class":35,"line":134},[33,4838,3932],{"class":47},[33,4840,116],{"class":39},[33,4842,4843],{"class":119},"\"*\"",[33,4845,80],{"class":47},[33,4847,4848],{"class":35,"line":156},[33,4849,1334],{"class":47},[33,4851,4852,4854,4856],{"class":35,"line":163},[33,4853,894],{"class":47},[33,4855,116],{"class":39},[33,4857,131],{"class":47},[33,4859,4860],{"class":35,"line":169},[33,4861,916],{"class":47},[33,4863,4864],{"class":35,"line":175},[33,4865,231],{"class":47},[14,4867,4868],{},"乘法口诀表",[23,4870,4872],{"className":25,"code":4871,"language":27,"meta":28,"style":28},"#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",[30,4873,4874,4880,4890,4898,4902,4928,4932,4957,4961,5001,5005,5013,5017],{"__ignoreMap":28},[33,4875,4876,4878],{"class":35,"line":36},[33,4877,1131],{"class":39},[33,4879,3755],{"class":119},[33,4881,4882,4884,4886,4888],{"class":35,"line":51},[33,4883,1139],{"class":39},[33,4885,1142],{"class":39},[33,4887,1145],{"class":43},[33,4889,80],{"class":47},[33,4891,4892,4894,4896],{"class":35,"line":57},[33,4893,40],{"class":39},[33,4895,44],{"class":43},[33,4897,48],{"class":47},[33,4899,4900],{"class":35,"line":64},[33,4901,54],{"class":47},[33,4903,4904,4906,4908,4910,4912,4914,4916,4918,4920,4922,4924,4926],{"class":35,"line":83},[33,4905,857],{"class":39},[33,4907,345],{"class":47},[33,4909,40],{"class":39},[33,4911,865],{"class":47},[33,4913,73],{"class":39},[33,4915,701],{"class":76},[33,4917,872],{"class":47},[33,4919,875],{"class":39},[33,4921,77],{"class":76},[33,4923,872],{"class":47},[33,4925,811],{"class":39},[33,4927,884],{"class":47},[33,4929,4930],{"class":35,"line":89},[33,4931,889],{"class":47},[33,4933,4934,4936,4938,4940,4942,4944,4946,4948,4950,4953,4955],{"class":35,"line":98},[33,4935,1216],{"class":39},[33,4937,345],{"class":47},[33,4939,40],{"class":39},[33,4941,1223],{"class":47},[33,4943,73],{"class":39},[33,4945,701],{"class":76},[33,4947,1230],{"class":47},[33,4949,3041],{"class":39},[33,4951,4952],{"class":47},"i;j",[33,4954,811],{"class":39},[33,4956,884],{"class":47},[33,4958,4959],{"class":35,"line":110},[33,4960,1254],{"class":47},[33,4962,4963,4965,4967,4969,4971,4973,4975,4977,4979,4982,4984,4986,4988,4990,4992,4995,4997,4999],{"class":35,"line":134},[33,4964,3932],{"class":47},[33,4966,116],{"class":39},[33,4968,2069],{"class":47},[33,4970,116],{"class":39},[33,4972,4843],{"class":119},[33,4974,116],{"class":39},[33,4976,1239],{"class":47},[33,4978,116],{"class":39},[33,4980,4981],{"class":119},"\"=\"",[33,4983,116],{"class":39},[33,4985,1239],{"class":47},[33,4987,2057],{"class":39},[33,4989,2069],{"class":47},[33,4991,116],{"class":39},[33,4993,4994],{"class":119},"'",[33,4996,2693],{"class":76},[33,4998,4994],{"class":119},[33,5000,80],{"class":47},[33,5002,5003],{"class":35,"line":156},[33,5004,1334],{"class":47},[33,5006,5007,5009,5011],{"class":35,"line":163},[33,5008,894],{"class":47},[33,5010,116],{"class":39},[33,5012,131],{"class":47},[33,5014,5015],{"class":35,"line":169},[33,5016,916],{"class":47},[33,5018,5019],{"class":35,"line":175},[33,5020,231],{"class":47},[1599,5022,5024],{"id":5023},"_163跳出语句","1.6.3跳出语句",[574,5026,5027],{},[564,5028,5029],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,5031,5032],{},"break使用时机：",[561,5034,5035,5038,5041],{},[564,5036,5037],{},"出现在switch条件语句中，作用是终止case并跳出switch",[564,5039,5040],{},"出现在循环结构中，作用是跳出当前的循环结构",[564,5042,5043],{},"出现在嵌套循环中，跳出最近的内层循环语句",[574,5045,5046,5049],{"start":51},[564,5047,5048],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[564,5050,5051],{},"goto语句\n语法：goto 标记;",[14,5053,5054],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[23,5056,5058],{"className":25,"code":5057,"language":27,"meta":28,"style":28},"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",[30,5059,5060,5068,5072,5085,5095,5108,5121,5134,5142,5158],{"__ignoreMap":28},[33,5061,5062,5064,5066],{"class":35,"line":36},[33,5063,40],{"class":39},[33,5065,44],{"class":43},[33,5067,48],{"class":47},[33,5069,5070],{"class":35,"line":51},[33,5071,54],{"class":47},[33,5073,5074,5076,5078,5081,5083],{"class":35,"line":57},[33,5075,113],{"class":47},[33,5077,116],{"class":39},[33,5079,5080],{"class":119},"\"1\"",[33,5082,116],{"class":39},[33,5084,131],{"class":47},[33,5086,5087,5090,5093],{"class":35,"line":64},[33,5088,5089],{"class":39},"    goto",[33,5091,5092],{"class":43}," FLAG",[33,5094,80],{"class":47},[33,5096,5097,5099,5101,5104,5106],{"class":35,"line":83},[33,5098,113],{"class":47},[33,5100,116],{"class":39},[33,5102,5103],{"class":119},"\"2\"",[33,5105,116],{"class":39},[33,5107,131],{"class":47},[33,5109,5110,5112,5114,5117,5119],{"class":35,"line":89},[33,5111,113],{"class":47},[33,5113,116],{"class":39},[33,5115,5116],{"class":119},"\"3\"",[33,5118,116],{"class":39},[33,5120,131],{"class":47},[33,5122,5123,5125,5127,5130,5132],{"class":35,"line":98},[33,5124,113],{"class":47},[33,5126,116],{"class":39},[33,5128,5129],{"class":119},"\"4\"",[33,5131,116],{"class":39},[33,5133,131],{"class":47},[33,5135,5136,5139],{"class":35,"line":110},[33,5137,5138],{"class":43},"    FLAG",[33,5140,5141],{"class":47},":\n",[33,5143,5144,5146,5148,5151,5153,5155],{"class":35,"line":134},[33,5145,113],{"class":47},[33,5147,116],{"class":39},[33,5149,5150],{"class":119},"\"5\"",[33,5152,116],{"class":39},[33,5154,150],{"class":47},[33,5156,5157],{"class":60},"\u002F\u002F跳过了2,3,4,直接到5\n",[33,5159,5160],{"class":35,"line":156},[33,5161,231],{"class":47},[18,5163,5165],{"id":5164},"_17数组","1.7数组",[1599,5167,5169],{"id":5168},"_171一维数组","1.7.1一维数组",[574,5171,5172],{},[564,5173,5174],{},"一维数组定义方式",[1756,5176,5177,5187],{},[1759,5178,5179],{},[1762,5180,5181,5184],{},[1765,5182,5183],{},"方式",[1765,5185,5186],{},"注意事项",[1802,5188,5189,5203,5213],{},[1762,5190,5191,5197],{},[1807,5192,5193,5194,460],{},"数据类型 数组名",[33,5195,5196],{},"数组长度",[1807,5198,5199,5200,5202],{},"这种方式是先定义再arr",[33,5201,1239],{},"赋值",[1762,5204,5205,5210],{},[1807,5206,5193,5207,5209],{},[33,5208,5196],{},"={值1,值2....};",[1807,5211,5212],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1762,5214,5215,5219],{},[1807,5216,5193,5217,5209],{},[33,5218],{},[1807,5220,5221,5222,5224],{},"int arr",[33,5223],{},";这是不正确的，按照这样的方式定义必须有初始长度",[574,5226,5227],{"start":51},[564,5228,5229],{},"一维数组数组名\n用途：",[561,5231,5232],{},[564,5233,5234],{},"1.可以统计整个数组在内存中的长度：",[23,5236,5238],{"className":25,"code":5237,"language":27,"meta":28,"style":28},"sizeof(arr);\nsizeof(arr[0]);\n",[30,5239,5240,5247],{"__ignoreMap":28},[33,5241,5242,5244],{"class":35,"line":36},[33,5243,1627],{"class":39},[33,5245,5246],{"class":47},"(arr);\n",[33,5248,5249,5251,5254,5256],{"class":35,"line":51},[33,5250,1627],{"class":39},[33,5252,5253],{"class":47},"(arr[",[33,5255,766],{"class":76},[33,5257,5258],{"class":47},"]);\n",[561,5260,5261],{},[564,5262,5263],{},"2.可以获取数组在内存中的首地址:",[23,5265,5267],{"className":25,"code":5266,"language":27,"meta":28,"style":28},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[30,5268,5269,5274,5287,5292],{"__ignoreMap":28},[33,5270,5271],{"class":35,"line":36},[33,5272,5273],{"class":60},"\u002F\u002F查看16进制的首地址\n",[33,5275,5276,5278,5280,5283,5285],{"class":35,"line":51},[33,5277,2827],{"class":47},[33,5279,116],{"class":39},[33,5281,5282],{"class":47},"arr",[33,5284,116],{"class":39},[33,5286,131],{"class":47},[33,5288,5289],{"class":35,"line":57},[33,5290,5291],{"class":60},"\u002F\u002F看10进制数\n",[33,5293,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314],{"class":35,"line":64},[33,5295,2827],{"class":47},[33,5297,116],{"class":39},[33,5299,345],{"class":47},[33,5301,40],{"class":39},[33,5303,352],{"class":47},[33,5305,1062],{"class":39},[33,5307,763],{"class":47},[33,5309,766],{"class":76},[33,5311,693],{"class":47},[33,5313,116],{"class":39},[33,5315,131],{"class":47},[14,5317,5318],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[561,5320,5321],{},[564,5322,5323],{},"1️⃣五只小猪称体重",[23,5325,5327],{"className":25,"code":5326,"language":27,"meta":28,"style":28},"#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",[30,5328,5329,5335,5345,5353,5357,5395,5408,5434,5438,5450,5454,5464,5468,5472,5485,5495],{"__ignoreMap":28},[33,5330,5331,5333],{"class":35,"line":36},[33,5332,1131],{"class":39},[33,5334,1134],{"class":119},[33,5336,5337,5339,5341,5343],{"class":35,"line":51},[33,5338,1139],{"class":39},[33,5340,1142],{"class":39},[33,5342,1145],{"class":43},[33,5344,80],{"class":47},[33,5346,5347,5349,5351],{"class":35,"line":57},[33,5348,40],{"class":39},[33,5350,44],{"class":43},[33,5352,48],{"class":47},[33,5354,5355],{"class":35,"line":64},[33,5356,54],{"class":47},[33,5358,5359,5361,5363,5365,5367,5369,5371,5374,5376,5379,5381,5383,5385,5388,5390,5393],{"class":35,"line":83},[33,5360,67],{"class":39},[33,5362,688],{"class":47},[33,5364,722],{"class":76},[33,5366,693],{"class":47},[33,5368,73],{"class":39},[33,5370,698],{"class":47},[33,5372,5373],{"class":76},"300",[33,5375,704],{"class":47},[33,5377,5378],{"class":76},"350",[33,5380,704],{"class":47},[33,5382,3163],{"class":76},[33,5384,704],{"class":47},[33,5386,5387],{"class":76},"400",[33,5389,704],{"class":47},[33,5391,5392],{"class":76},"250",[33,5394,749],{"class":47},[33,5396,5397,5399,5402,5404,5406],{"class":35,"line":89},[33,5398,67],{"class":39},[33,5400,5401],{"class":47}," tmp",[33,5403,73],{"class":39},[33,5405,766],{"class":76},[33,5407,80],{"class":47},[33,5409,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428,5430,5432],{"class":35,"line":98},[33,5411,857],{"class":39},[33,5413,860],{"class":47},[33,5415,40],{"class":39},[33,5417,865],{"class":47},[33,5419,73],{"class":39},[33,5421,766],{"class":76},[33,5423,872],{"class":47},[33,5425,875],{"class":39},[33,5427,722],{"class":76},[33,5429,872],{"class":47},[33,5431,811],{"class":39},[33,5433,884],{"class":47},[33,5435,5436],{"class":35,"line":110},[33,5437,889],{"class":47},[33,5439,5440,5442,5445,5447],{"class":35,"line":134},[33,5441,3915],{"class":39},[33,5443,5444],{"class":47},"(tmp",[33,5446,875],{"class":39},[33,5448,5449],{"class":47},"arr[i])\n",[33,5451,5452],{"class":35,"line":156},[33,5453,1254],{"class":47},[33,5455,5456,5459,5461],{"class":35,"line":163},[33,5457,5458],{"class":47},"            tmp",[33,5460,73],{"class":39},[33,5462,5463],{"class":47},"arr[i];\n",[33,5465,5466],{"class":35,"line":169},[33,5467,1334],{"class":47},[33,5469,5470],{"class":35,"line":175},[33,5471,916],{"class":47},[33,5473,5474,5476,5478,5481,5483],{"class":35,"line":181},[33,5475,113],{"class":47},[33,5477,116],{"class":39},[33,5479,5480],{"class":47},"tmp",[33,5482,116],{"class":39},[33,5484,131],{"class":47},[33,5486,5487,5490,5493],{"class":35,"line":196},[33,5488,5489],{"class":39},"    return",[33,5491,5492],{"class":76}," 0",[33,5494,80],{"class":47},[33,5496,5497],{"class":35,"line":213},[33,5498,231],{"class":47},[561,5500,5501],{},[564,5502,5503],{},"2️⃣数组元素逆置",[23,5505,5507],{"className":25,"code":5506,"language":27,"meta":28,"style":28},"\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",[30,5508,5509,5514,5520,5530,5538,5542,5577,5593,5625,5638,5643,5648,5659,5669,5678,5683,5692,5702,5707,5712,5739,5743,5759,5763,5774,5783],{"__ignoreMap":28},[33,5510,5511],{"class":35,"line":36},[33,5512,5513],{"class":60},"\u002F\u002F元素逆置\n",[33,5515,5516,5518],{"class":35,"line":51},[33,5517,1131],{"class":39},[33,5519,1134],{"class":119},[33,5521,5522,5524,5526,5528],{"class":35,"line":57},[33,5523,1139],{"class":39},[33,5525,1142],{"class":39},[33,5527,1145],{"class":43},[33,5529,80],{"class":47},[33,5531,5532,5534,5536],{"class":35,"line":64},[33,5533,40],{"class":39},[33,5535,44],{"class":43},[33,5537,48],{"class":47},[33,5539,5540],{"class":35,"line":83},[33,5541,54],{"class":47},[33,5543,5544,5547,5549,5551,5553,5555,5557,5559,5561,5563,5565,5567,5569,5571,5573,5575],{"class":35,"line":89},[33,5545,5546],{"class":39},"   int",[33,5548,688],{"class":47},[33,5550,722],{"class":76},[33,5552,693],{"class":47},[33,5554,73],{"class":39},[33,5556,698],{"class":47},[33,5558,701],{"class":76},[33,5560,704],{"class":47},[33,5562,707],{"class":76},[33,5564,704],{"class":47},[33,5566,712],{"class":76},[33,5568,704],{"class":47},[33,5570,717],{"class":76},[33,5572,704],{"class":47},[33,5574,722],{"class":76},[33,5576,749],{"class":47},[33,5578,5579,5581,5584,5586,5588,5590],{"class":35,"line":98},[33,5580,5546],{"class":39},[33,5582,5583],{"class":47}," start",[33,5585,73],{"class":39},[33,5587,766],{"class":76},[33,5589,460],{"class":47},[33,5591,5592],{"class":60},"\u002F\u002F起始下标\n",[33,5594,5595,5597,5600,5603,5606,5609,5611,5613,5616,5618,5620,5622],{"class":35,"line":110},[33,5596,5546],{"class":39},[33,5598,5599],{"class":47}," end",[33,5601,5602],{"class":39},"=sizeof",[33,5604,5605],{"class":47},"(arr)",[33,5607,5608],{"class":39},"\u002Fsizeof",[33,5610,5253],{"class":47},[33,5612,766],{"class":76},[33,5614,5615],{"class":47},"])",[33,5617,1199],{"class":39},[33,5619,701],{"class":76},[33,5621,460],{"class":47},[33,5623,5624],{"class":60},"\u002F\u002F结束下标\n",[33,5626,5627,5630,5633,5635],{"class":35,"line":134},[33,5628,5629],{"class":39},"   while",[33,5631,5632],{"class":47}," (start",[33,5634,875],{"class":39},[33,5636,5637],{"class":47},"end)\n",[33,5639,5640],{"class":35,"line":156},[33,5641,5642],{"class":47},"   {\n",[33,5644,5645],{"class":35,"line":163},[33,5646,5647],{"class":60},"    \u002F\u002F实现元素互换代码\n",[33,5649,5650,5652,5654,5656],{"class":35,"line":169},[33,5651,67],{"class":39},[33,5653,977],{"class":47},[33,5655,73],{"class":39},[33,5657,5658],{"class":47},"arr[start];\n",[33,5660,5661,5664,5666],{"class":35,"line":175},[33,5662,5663],{"class":47},"    arr[start]",[33,5665,73],{"class":39},[33,5667,5668],{"class":47},"arr[end];\n",[33,5670,5671,5674,5676],{"class":35,"line":181},[33,5672,5673],{"class":47},"    arr[end]",[33,5675,73],{"class":39},[33,5677,1005],{"class":47},[33,5679,5680],{"class":35,"line":196},[33,5681,5682],{"class":60},"    \u002F\u002F下标更新\n",[33,5684,5685,5688,5690],{"class":35,"line":213},[33,5686,5687],{"class":47},"    start",[33,5689,811],{"class":39},[33,5691,80],{"class":47},[33,5693,5694,5697,5700],{"class":35,"line":228},[33,5695,5696],{"class":47},"    end",[33,5698,5699],{"class":39},"--",[33,5701,80],{"class":47},[33,5703,5704],{"class":35,"line":1345},[33,5705,5706],{"class":47},"   }\n",[33,5708,5709],{"class":35,"line":1350},[33,5710,5711],{"class":60},"   \u002F\u002F输出逆置后的数组\n",[33,5713,5714,5717,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737],{"class":35,"line":1359},[33,5715,5716],{"class":39},"   for",[33,5718,860],{"class":47},[33,5720,40],{"class":39},[33,5722,865],{"class":47},[33,5724,73],{"class":39},[33,5726,766],{"class":76},[33,5728,872],{"class":47},[33,5730,875],{"class":39},[33,5732,722],{"class":76},[33,5734,872],{"class":47},[33,5736,811],{"class":39},[33,5738,884],{"class":47},[33,5740,5741],{"class":35,"line":1364},[33,5742,5642],{"class":47},[33,5744,5745,5747,5749,5752,5754,5757],{"class":35,"line":1370},[33,5746,113],{"class":47},[33,5748,116],{"class":39},[33,5750,5751],{"class":47},"arr[i]",[33,5753,116],{"class":39},[33,5755,5756],{"class":119},"\" \"",[33,5758,80],{"class":47},[33,5760,5761],{"class":35,"line":1425},[33,5762,5706],{"class":47},[33,5764,5765,5768,5770,5772],{"class":35,"line":1438},[33,5766,5767],{"class":43},"   system",[33,5769,345],{"class":47},[33,5771,3729],{"class":119},[33,5773,4130],{"class":47},[33,5775,5776,5779,5781],{"class":35,"line":1451},[33,5777,5778],{"class":39},"   return",[33,5780,5492],{"class":76},[33,5782,80],{"class":47},[33,5784,5785],{"class":35,"line":1457},[33,5786,231],{"class":47},[561,5788,5789],{},[564,5790,5791],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[23,5793,5795],{"className":25,"code":5794,"language":27,"meta":28,"style":28},"\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",[30,5796,5797,5802,5808,5818,5826,5830,5882,5895,5921,5925,5939,5943,5948,5953,5983,5987,5992,6026,6030,6035,6053,6057,6068,6083,6098,6102,6106,6110,6123,6149,6153,6167,6171,6179],{"__ignoreMap":28},[33,5798,5799],{"class":35,"line":36},[33,5800,5801],{"class":60},"\u002F\u002F冒泡排序,升序\n",[33,5803,5804,5806],{"class":35,"line":51},[33,5805,1131],{"class":39},[33,5807,1134],{"class":119},[33,5809,5810,5812,5814,5816],{"class":35,"line":57},[33,5811,1139],{"class":39},[33,5813,1142],{"class":39},[33,5815,1145],{"class":43},[33,5817,80],{"class":47},[33,5819,5820,5822,5824],{"class":35,"line":64},[33,5821,40],{"class":39},[33,5823,44],{"class":43},[33,5825,48],{"class":47},[33,5827,5828],{"class":35,"line":83},[33,5829,54],{"class":47},[33,5831,5832,5834,5836,5838,5841,5843,5846,5848,5850,5852,5854,5856,5858,5860,5862,5864,5866,5868,5870,5872,5874,5876,5878,5880],{"class":35,"line":89},[33,5833,67],{"class":39},[33,5835,688],{"class":47},[33,5837,742],{"class":76},[33,5839,5840],{"class":47},"] ",[33,5842,73],{"class":39},[33,5844,5845],{"class":47}," {",[33,5847,717],{"class":76},[33,5849,704],{"class":47},[33,5851,707],{"class":76},[33,5853,704],{"class":47},[33,5855,737],{"class":76},[33,5857,704],{"class":47},[33,5859,766],{"class":76},[33,5861,704],{"class":47},[33,5863,722],{"class":76},[33,5865,704],{"class":47},[33,5867,732],{"class":76},[33,5869,704],{"class":47},[33,5871,701],{"class":76},[33,5873,704],{"class":47},[33,5875,712],{"class":76},[33,5877,704],{"class":47},[33,5879,742],{"class":76},[33,5881,749],{"class":47},[33,5883,5884,5886,5888,5891,5893],{"class":35,"line":98},[33,5885,113],{"class":47},[33,5887,116],{"class":39},[33,5889,5890],{"class":119},"\"排序前：\"",[33,5892,116],{"class":39},[33,5894,131],{"class":47},[33,5896,5897,5899,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919],{"class":35,"line":110},[33,5898,857],{"class":39},[33,5900,860],{"class":47},[33,5902,40],{"class":39},[33,5904,865],{"class":47},[33,5906,73],{"class":39},[33,5908,766],{"class":76},[33,5910,872],{"class":47},[33,5912,875],{"class":39},[33,5914,742],{"class":76},[33,5916,872],{"class":47},[33,5918,811],{"class":39},[33,5920,884],{"class":47},[33,5922,5923],{"class":35,"line":134},[33,5924,889],{"class":47},[33,5926,5927,5929,5931,5933,5935,5937],{"class":35,"line":156},[33,5928,894],{"class":47},[33,5930,116],{"class":39},[33,5932,5751],{"class":47},[33,5934,116],{"class":39},[33,5936,5756],{"class":119},[33,5938,80],{"class":47},[33,5940,5941],{"class":35,"line":163},[33,5942,916],{"class":47},[33,5944,5945],{"class":35,"line":169},[33,5946,5947],{"class":60},"    \u002F\u002F开始冒泡排序\n",[33,5949,5950],{"class":35,"line":175},[33,5951,5952],{"class":60},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[33,5954,5955,5957,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981],{"class":35,"line":181},[33,5956,857],{"class":39},[33,5958,860],{"class":47},[33,5960,40],{"class":39},[33,5962,865],{"class":47},[33,5964,73],{"class":39},[33,5966,766],{"class":76},[33,5968,872],{"class":47},[33,5970,875],{"class":39},[33,5972,742],{"class":76},[33,5974,1199],{"class":39},[33,5976,701],{"class":76},[33,5978,872],{"class":47},[33,5980,811],{"class":39},[33,5982,884],{"class":47},[33,5984,5985],{"class":35,"line":196},[33,5986,889],{"class":47},[33,5988,5989],{"class":35,"line":213},[33,5990,5991],{"class":60},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[33,5993,5994,5996,5998,6000,6002,6004,6006,6008,6010,6012,6014,6016,6018,6020,6022,6024],{"class":35,"line":228},[33,5995,1216],{"class":39},[33,5997,860],{"class":47},[33,5999,40],{"class":39},[33,6001,1223],{"class":47},[33,6003,73],{"class":39},[33,6005,766],{"class":76},[33,6007,1230],{"class":47},[33,6009,875],{"class":39},[33,6011,742],{"class":76},[33,6013,1199],{"class":39},[33,6015,1239],{"class":47},[33,6017,1199],{"class":39},[33,6019,701],{"class":76},[33,6021,1230],{"class":47},[33,6023,811],{"class":39},[33,6025,884],{"class":47},[33,6027,6028],{"class":35,"line":1345},[33,6029,1254],{"class":47},[33,6031,6032],{"class":35,"line":1350},[33,6033,6034],{"class":60},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[33,6036,6037,6039,6042,6044,6047,6049,6051],{"class":35,"line":1359},[33,6038,1259],{"class":39},[33,6040,6041],{"class":47},"(arr[j]",[33,6043,1265],{"class":39},[33,6045,6046],{"class":47},"arr[j",[33,6048,1271],{"class":39},[33,6050,701],{"class":76},[33,6052,1276],{"class":47},[33,6054,6055],{"class":35,"line":1364},[33,6056,1281],{"class":47},[33,6058,6059,6061,6063,6065],{"class":35,"line":1370},[33,6060,1286],{"class":39},[33,6062,977],{"class":47},[33,6064,73],{"class":39},[33,6066,6067],{"class":47},"arr[j];\n",[33,6069,6070,6073,6075,6077,6079,6081],{"class":35,"line":1425},[33,6071,6072],{"class":47},"                arr[j]",[33,6074,73],{"class":39},[33,6076,6046],{"class":47},[33,6078,1271],{"class":39},[33,6080,701],{"class":76},[33,6082,1309],{"class":47},[33,6084,6085,6088,6090,6092,6094,6096],{"class":35,"line":1438},[33,6086,6087],{"class":47},"                arr[j",[33,6089,1271],{"class":39},[33,6091,701],{"class":76},[33,6093,693],{"class":47},[33,6095,73],{"class":39},[33,6097,1005],{"class":47},[33,6099,6100],{"class":35,"line":1451},[33,6101,1329],{"class":47},[33,6103,6104],{"class":35,"line":1457},[33,6105,1334],{"class":47},[33,6107,6108],{"class":35,"line":1466},[33,6109,916],{"class":47},[33,6111,6112,6114,6116,6119,6121],{"class":35,"line":1471},[33,6113,113],{"class":47},[33,6115,116],{"class":39},[33,6117,6118],{"class":119},"\"排序后：\"",[33,6120,116],{"class":39},[33,6122,131],{"class":47},[33,6124,6125,6127,6129,6131,6133,6135,6137,6139,6141,6143,6145,6147],{"class":35,"line":1477},[33,6126,857],{"class":39},[33,6128,860],{"class":47},[33,6130,40],{"class":39},[33,6132,865],{"class":47},[33,6134,73],{"class":39},[33,6136,766],{"class":76},[33,6138,872],{"class":47},[33,6140,875],{"class":39},[33,6142,742],{"class":76},[33,6144,872],{"class":47},[33,6146,811],{"class":39},[33,6148,884],{"class":47},[33,6150,6151],{"class":35,"line":1504},[33,6152,889],{"class":47},[33,6154,6155,6157,6159,6161,6163,6165],{"class":35,"line":1509},[33,6156,894],{"class":47},[33,6158,116],{"class":39},[33,6160,5751],{"class":47},[33,6162,116],{"class":39},[33,6164,5756],{"class":119},[33,6166,80],{"class":47},[33,6168,6169],{"class":35,"line":1525},[33,6170,916],{"class":47},[33,6172,6173,6175,6177],{"class":35,"line":1535},[33,6174,5489],{"class":39},[33,6176,5492],{"class":76},[33,6178,80],{"class":47},[33,6180,6181],{"class":35,"line":1540},[33,6182,231],{"class":47},[1599,6184,6186],{"id":6185},"_172二维数组","1.7.2二维数组",[574,6188,6189],{},[564,6190,6191],{},"二维数组的四种定义方式",[1756,6193,6194,6203],{},[1759,6195,6196],{},[1762,6197,6198,6201],{},[1765,6199,6200],{},"序号",[1765,6202,5183],{},[1802,6204,6205,6215,6224,6233,6242],{},[1762,6206,6207,6209],{},[1807,6208,701],{},[1807,6210,6211,6212,460],{},"数据类型 数组名[行数]",[33,6213,6214],{},"列数",[1762,6216,6217,6219],{},[1807,6218,707],{},[1807,6220,6211,6221,6223],{},[33,6222,6214],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1762,6225,6226,6228],{},[1807,6227,712],{},[1807,6229,6211,6230,6232],{},[33,6231,6214],{},"={数据1,数据2,数据3...}",[1762,6234,6235,6237],{},[1807,6236,717],{},[1807,6238,6239,6240,6232],{},"数据类型 数组名[]",[33,6241,6214],{},[1762,6243,6244,6247],{},[1807,6245,6246],{},"注意：不能只省略列数",[1807,6248],{},[574,6250,6251],{"start":51},[564,6252,6253],{},"二维数组数组名",[561,6255,6256,6259],{},[564,6257,6258],{},"1.查看二维数组所占内存空间",[564,6260,6261],{},"2.获取二维数组首地址",[14,6263,6264],{},"已知二维数组，求二维数组的行数与列数",[23,6266,6268],{"className":25,"code":6267,"language":27,"meta":28,"style":28},"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",[30,6269,6270,6278,6282,6300,6304,6322,6338,6343,6368,6401],{"__ignoreMap":28},[33,6271,6272,6274,6276],{"class":35,"line":36},[33,6273,40],{"class":39},[33,6275,44],{"class":43},[33,6277,48],{"class":47},[33,6279,6280],{"class":35,"line":51},[33,6281,54],{"class":47},[33,6283,6284,6286,6288,6290,6293,6295,6297],{"class":35,"line":57},[33,6285,67],{"class":39},[33,6287,688],{"class":47},[33,6289,707],{"class":76},[33,6291,6292],{"class":47},"][",[33,6294,712],{"class":76},[33,6296,693],{"class":47},[33,6298,6299],{"class":39},"=\n",[33,6301,6302],{"class":35,"line":64},[33,6303,889],{"class":47},[33,6305,6306,6309,6311,6313,6315,6317,6319],{"class":35,"line":83},[33,6307,6308],{"class":47},"        {",[33,6310,701],{"class":76},[33,6312,704],{"class":47},[33,6314,707],{"class":76},[33,6316,704],{"class":47},[33,6318,712],{"class":76},[33,6320,6321],{"class":47},"},\n",[33,6323,6324,6326,6328,6330,6332,6334,6336],{"class":35,"line":89},[33,6325,6308],{"class":47},[33,6327,717],{"class":76},[33,6329,704],{"class":47},[33,6331,722],{"class":76},[33,6333,704],{"class":47},[33,6335,727],{"class":76},[33,6337,231],{"class":47},[33,6339,6340],{"class":35,"line":98},[33,6341,6342],{"class":47},"    };\n",[33,6344,6345,6347,6349,6352,6354,6356,6358,6360,6362,6364,6366],{"class":35,"line":110},[33,6346,113],{"class":47},[33,6348,116],{"class":39},[33,6350,6351],{"class":119},"\"二维数组的行数\"",[33,6353,322],{"class":39},[33,6355,5605],{"class":47},[33,6357,5608],{"class":39},[33,6359,5253],{"class":47},[33,6361,766],{"class":76},[33,6363,5615],{"class":47},[33,6365,116],{"class":39},[33,6367,131],{"class":47},[33,6369,6370,6372,6374,6377,6379,6381,6383,6385,6387,6389,6391,6393,6395,6397,6399],{"class":35,"line":134},[33,6371,113],{"class":47},[33,6373,116],{"class":39},[33,6375,6376],{"class":119},"\"二维数组的列数\"",[33,6378,322],{"class":39},[33,6380,5253],{"class":47},[33,6382,766],{"class":76},[33,6384,5615],{"class":47},[33,6386,5608],{"class":39},[33,6388,5253],{"class":47},[33,6390,766],{"class":76},[33,6392,6292],{"class":47},[33,6394,766],{"class":76},[33,6396,5615],{"class":47},[33,6398,116],{"class":39},[33,6400,131],{"class":47},[33,6402,6403],{"class":35,"line":156},[33,6404,231],{"class":47},[14,6406,6407],{},"查看二维数组首地址",[23,6409,6411],{"className":25,"code":6410,"language":27,"meta":28,"style":28},"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",[30,6412,6413,6430,6456,6481],{"__ignoreMap":28},[33,6414,6415,6417,6419,6422,6424,6426,6428],{"class":35,"line":36},[33,6416,2827],{"class":47},[33,6418,116],{"class":39},[33,6420,6421],{"class":119},"\"二维数组首地址：\"",[33,6423,116],{"class":39},[33,6425,5282],{"class":47},[33,6427,116],{"class":39},[33,6429,131],{"class":47},[33,6431,6432,6434,6436,6439,6441,6443,6445,6448,6450,6452,6454],{"class":35,"line":51},[33,6433,2827],{"class":47},[33,6435,116],{"class":39},[33,6437,6438],{"class":119},"\"二维数组第一行的首地址：\"",[33,6440,116],{"class":39},[33,6442,345],{"class":47},[33,6444,40],{"class":39},[33,6446,6447],{"class":47},")arr[",[33,6449,766],{"class":76},[33,6451,693],{"class":47},[33,6453,116],{"class":39},[33,6455,131],{"class":47},[33,6457,6458,6460,6462,6465,6467,6469,6471,6473,6475,6477,6479],{"class":35,"line":57},[33,6459,2827],{"class":47},[33,6461,116],{"class":39},[33,6463,6464],{"class":119},"\"二维数组第二行的首地址：\"",[33,6466,116],{"class":39},[33,6468,345],{"class":47},[33,6470,40],{"class":39},[33,6472,6447],{"class":47},[33,6474,701],{"class":76},[33,6476,693],{"class":47},[33,6478,116],{"class":39},[33,6480,131],{"class":47},[33,6482,6483,6485,6487,6490,6492,6494,6496,6498,6500,6502,6504,6506,6508,6510,6512,6514],{"class":35,"line":64},[33,6484,2827],{"class":47},[33,6486,116],{"class":39},[33,6488,6489],{"class":119},"\"二维数组第一个元素的首地址:\"",[33,6491,116],{"class":39},[33,6493,345],{"class":47},[33,6495,40],{"class":39},[33,6497,352],{"class":47},[33,6499,1062],{"class":39},[33,6501,763],{"class":47},[33,6503,766],{"class":76},[33,6505,6292],{"class":47},[33,6507,766],{"class":76},[33,6509,693],{"class":47},[33,6511,116],{"class":39},[33,6513,150],{"class":47},[33,6515,6516],{"class":60},"\u002F\u002F对于数，要加取址符\n",[1544,6518,6519],{},"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":28,"searchDepth":51,"depth":51,"links":6521},[6522,6523,6524,6532,6533,6539,6544],{"id":1574,"depth":51,"text":1575},{"id":1581,"depth":51,"text":1582},{"id":1596,"depth":51,"text":1597,"children":6525},[6526,6527,6528,6529,6530,6531],{"id":1601,"depth":57,"text":1602},{"id":1643,"depth":57,"text":1644},{"id":1706,"depth":57,"text":1707},{"id":2619,"depth":57,"text":2620},{"id":2706,"depth":57,"text":2707},{"id":2801,"depth":57,"text":2802},{"id":2842,"depth":51,"text":2843},{"id":2909,"depth":51,"text":2910,"children":6534},[6535,6536,6537,6538],{"id":2913,"depth":57,"text":2914},{"id":2935,"depth":57,"text":2936},{"id":2944,"depth":57,"text":2945},{"id":2953,"depth":57,"text":2954},{"id":2962,"depth":51,"text":2963,"children":6540},[6541,6542,6543],{"id":2966,"depth":57,"text":2967},{"id":3627,"depth":57,"text":3628},{"id":5023,"depth":57,"text":5024},{"id":5164,"depth":51,"text":5165,"children":6545},[6546,6547],{"id":5168,"depth":57,"text":5169},{"id":6185,"depth":57,"text":6186},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1566,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6554,"title":6555,"body":6556,"description":28,"extension":1557,"meta":7651,"navigation":159,"path":7652,"seo":7653,"stem":7654,"__hash__":7655},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6557,"toc":7643},[6558,6561,6565,6573,6581,6584,6649,6653,6656,6732,6736,6739,6742,6745,6955,6959,6964,7028,7033,7100,7105,7196,7199,7304,7308,7311,7317,7461,7465,7468,7482,7485,7530,7533,7640],[10,6559,6555],{"id":6560},"_2函数",[18,6562,6564],{"id":6563},"_21函数概述","2.1函数概述",[574,6566,6567,6570],{},[564,6568,6569],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[564,6571,6572],{},"语法：",[23,6574,6579],{"className":6575,"code":6577,"language":6578,"meta":28},[6576],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[30,6580,6577],{"__ignoreMap":28},[14,6582,6583],{},"小案例",[23,6585,6587],{"className":25,"code":6586,"language":27,"meta":28,"style":28},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[30,6588,6589,6594,6617,6621,6638,6645],{"__ignoreMap":28},[33,6590,6591],{"class":35,"line":36},[33,6592,6593],{"class":60},"\u002F\u002Fnum1,num2形参\n",[33,6595,6596,6598,6601,6603,6605,6608,6610,6612,6615],{"class":35,"line":51},[33,6597,40],{"class":39},[33,6599,6600],{"class":43}," add",[33,6602,345],{"class":47},[33,6604,40],{"class":39},[33,6606,6607],{"class":955}," num1",[33,6609,704],{"class":47},[33,6611,40],{"class":39},[33,6613,6614],{"class":955}," num2",[33,6616,884],{"class":47},[33,6618,6619],{"class":35,"line":57},[33,6620,54],{"class":47},[33,6622,6623,6625,6628,6630,6633,6635],{"class":35,"line":64},[33,6624,67],{"class":39},[33,6626,6627],{"class":47}," sum",[33,6629,73],{"class":39},[33,6631,6632],{"class":47},"num1",[33,6634,1271],{"class":39},[33,6636,6637],{"class":47},"num2;\n",[33,6639,6640,6642],{"class":35,"line":83},[33,6641,5489],{"class":39},[33,6643,6644],{"class":47}," sum;\n",[33,6646,6647],{"class":35,"line":89},[33,6648,231],{"class":47},[18,6650,6652],{"id":6651},"_22函数调用","2.2函数调用",[14,6654,6655],{},"调用刚刚写的求和函数",[23,6657,6659],{"className":25,"code":6658,"language":27,"meta":28,"style":28},"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",[30,6660,6661,6669,6673,6678,6690,6702,6711,6716,6728],{"__ignoreMap":28},[33,6662,6663,6665,6667],{"class":35,"line":36},[33,6664,40],{"class":39},[33,6666,44],{"class":43},[33,6668,48],{"class":47},[33,6670,6671],{"class":35,"line":51},[33,6672,54],{"class":47},[33,6674,6675],{"class":35,"line":57},[33,6676,6677],{"class":60},"    \u002F\u002Fa,b实参\n",[33,6679,6680,6682,6684,6686,6688],{"class":35,"line":64},[33,6681,67],{"class":39},[33,6683,70],{"class":47},[33,6685,73],{"class":39},[33,6687,766],{"class":76},[33,6689,80],{"class":47},[33,6691,6692,6694,6696,6698,6700],{"class":35,"line":83},[33,6693,67],{"class":39},[33,6695,1040],{"class":47},[33,6697,73],{"class":39},[33,6699,766],{"class":76},[33,6701,80],{"class":47},[33,6703,6704,6706,6708],{"class":35,"line":89},[33,6705,3436],{"class":47},[33,6707,2885],{"class":39},[33,6709,6710],{"class":47},"a,b;\n",[33,6712,6713],{"class":35,"line":98},[33,6714,6715],{"class":60},"    \u002F\u002F调用函数时，实参值传给了形参\n",[33,6717,6718,6720,6722,6725],{"class":35,"line":110},[33,6719,113],{"class":47},[33,6721,116],{"class":39},[33,6723,6724],{"class":43},"add",[33,6726,6727],{"class":47},"(a,b);\n",[33,6729,6730],{"class":35,"line":134},[33,6731,231],{"class":47},[18,6733,6735],{"id":6734},"_23值传递","2.3值传递",[14,6737,6738],{},"值传递就是函数调用时实参将数值传给形参",[14,6740,6741],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,6743,6744],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[23,6746,6748],{"className":25,"code":6747,"language":27,"meta":28,"style":28},"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",[30,6749,6750,6770,6774,6787,6804,6822,6833,6842,6851,6864,6880,6896,6905,6909,6917,6921,6933,6945,6951],{"__ignoreMap":28},[33,6751,6752,6754,6756,6758,6760,6762,6764,6766,6768],{"class":35,"line":36},[33,6753,943],{"class":39},[33,6755,946],{"class":43},[33,6757,345],{"class":47},[33,6759,40],{"class":39},[33,6761,6607],{"class":955},[33,6763,704],{"class":47},[33,6765,40],{"class":39},[33,6767,6614],{"class":955},[33,6769,884],{"class":47},[33,6771,6772],{"class":35,"line":51},[33,6773,54],{"class":47},[33,6775,6776,6778,6780,6783,6785],{"class":35,"line":57},[33,6777,113],{"class":47},[33,6779,116],{"class":39},[33,6781,6782],{"class":119},"\"交换前：\"",[33,6784,116],{"class":39},[33,6786,131],{"class":47},[33,6788,6789,6791,6793,6796,6798,6800,6802],{"class":35,"line":64},[33,6790,113],{"class":47},[33,6792,116],{"class":39},[33,6794,6795],{"class":119},"\"num1=\"",[33,6797,116],{"class":39},[33,6799,6632],{"class":47},[33,6801,116],{"class":39},[33,6803,131],{"class":47},[33,6805,6806,6808,6810,6813,6815,6818,6820],{"class":35,"line":83},[33,6807,113],{"class":47},[33,6809,116],{"class":39},[33,6811,6812],{"class":119},"\"num2=\"",[33,6814,116],{"class":39},[33,6816,6817],{"class":47},"num2",[33,6819,116],{"class":39},[33,6821,131],{"class":47},[33,6823,6824,6826,6828,6830],{"class":35,"line":89},[33,6825,67],{"class":39},[33,6827,977],{"class":47},[33,6829,73],{"class":39},[33,6831,6832],{"class":47},"num1;\n",[33,6834,6835,6838,6840],{"class":35,"line":98},[33,6836,6837],{"class":47},"    num1",[33,6839,73],{"class":39},[33,6841,6637],{"class":47},[33,6843,6844,6847,6849],{"class":35,"line":110},[33,6845,6846],{"class":47},"    num2",[33,6848,73],{"class":39},[33,6850,1005],{"class":47},[33,6852,6853,6855,6857,6860,6862],{"class":35,"line":134},[33,6854,113],{"class":47},[33,6856,116],{"class":39},[33,6858,6859],{"class":119},"\"交换后：\"",[33,6861,116],{"class":39},[33,6863,131],{"class":47},[33,6865,6866,6868,6870,6872,6874,6876,6878],{"class":35,"line":156},[33,6867,113],{"class":47},[33,6869,116],{"class":39},[33,6871,6795],{"class":119},[33,6873,116],{"class":39},[33,6875,6632],{"class":47},[33,6877,116],{"class":39},[33,6879,131],{"class":47},[33,6881,6882,6884,6886,6888,6890,6892,6894],{"class":35,"line":163},[33,6883,113],{"class":47},[33,6885,116],{"class":39},[33,6887,6812],{"class":119},[33,6889,116],{"class":39},[33,6891,6817],{"class":47},[33,6893,116],{"class":39},[33,6895,131],{"class":47},[33,6897,6898,6900,6902],{"class":35,"line":169},[33,6899,5489],{"class":39},[33,6901,460],{"class":47},[33,6903,6904],{"class":60},"\u002F\u002F或者不写\n",[33,6906,6907],{"class":35,"line":175},[33,6908,231],{"class":47},[33,6910,6911,6913,6915],{"class":35,"line":181},[33,6912,40],{"class":39},[33,6914,44],{"class":43},[33,6916,48],{"class":47},[33,6918,6919],{"class":35,"line":196},[33,6920,54],{"class":47},[33,6922,6923,6925,6927,6929,6931],{"class":35,"line":213},[33,6924,67],{"class":39},[33,6926,70],{"class":47},[33,6928,73],{"class":39},[33,6930,77],{"class":76},[33,6932,80],{"class":47},[33,6934,6935,6937,6939,6941,6943],{"class":35,"line":228},[33,6936,67],{"class":39},[33,6938,1040],{"class":47},[33,6940,73],{"class":39},[33,6942,1045],{"class":76},[33,6944,80],{"class":47},[33,6946,6947,6949],{"class":35,"line":1345},[33,6948,1057],{"class":43},[33,6950,6727],{"class":47},[33,6952,6953],{"class":35,"line":1350},[33,6954,231],{"class":47},[18,6956,6958],{"id":6957},"_24函数的常见形式","2.4函数的常见形式",[574,6960,6961],{},[564,6962,6963],{},"无参无返",[23,6965,6967],{"className":25,"code":6966,"language":27,"meta":28,"style":28},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[30,6968,6969,6978,6982,6995,6999,7007,7011,7016,7024],{"__ignoreMap":28},[33,6970,6971,6973,6976],{"class":35,"line":36},[33,6972,943],{"class":39},[33,6974,6975],{"class":43}," test01",[33,6977,48],{"class":47},[33,6979,6980],{"class":35,"line":51},[33,6981,54],{"class":47},[33,6983,6984,6986,6988,6991,6993],{"class":35,"line":57},[33,6985,113],{"class":47},[33,6987,116],{"class":39},[33,6989,6990],{"class":119},"\"你好\"",[33,6992,116],{"class":39},[33,6994,131],{"class":47},[33,6996,6997],{"class":35,"line":64},[33,6998,231],{"class":47},[33,7000,7001,7003,7005],{"class":35,"line":83},[33,7002,40],{"class":39},[33,7004,44],{"class":43},[33,7006,48],{"class":47},[33,7008,7009],{"class":35,"line":89},[33,7010,54],{"class":47},[33,7012,7013],{"class":35,"line":98},[33,7014,7015],{"class":60},"    \u002F\u002F函数调用\n",[33,7017,7018,7021],{"class":35,"line":110},[33,7019,7020],{"class":43},"    test01",[33,7022,7023],{"class":47},"();\n",[33,7025,7026],{"class":35,"line":134},[33,7027,231],{"class":47},[574,7029,7030],{"start":51},[564,7031,7032],{},"有参无返",[23,7034,7036],{"className":25,"code":7035,"language":27,"meta":28,"style":28},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[30,7037,7038,7053,7057,7069,7073,7081,7085,7096],{"__ignoreMap":28},[33,7039,7040,7042,7045,7047,7049,7051],{"class":35,"line":36},[33,7041,943],{"class":39},[33,7043,7044],{"class":43}," test02",[33,7046,345],{"class":47},[33,7048,40],{"class":39},[33,7050,70],{"class":955},[33,7052,884],{"class":47},[33,7054,7055],{"class":35,"line":51},[33,7056,54],{"class":47},[33,7058,7059,7061,7063,7065,7067],{"class":35,"line":57},[33,7060,113],{"class":47},[33,7062,116],{"class":39},[33,7064,6990],{"class":119},[33,7066,116],{"class":39},[33,7068,131],{"class":47},[33,7070,7071],{"class":35,"line":64},[33,7072,231],{"class":47},[33,7074,7075,7077,7079],{"class":35,"line":83},[33,7076,40],{"class":39},[33,7078,44],{"class":43},[33,7080,48],{"class":47},[33,7082,7083],{"class":35,"line":89},[33,7084,54],{"class":47},[33,7086,7087,7090,7092,7094],{"class":35,"line":98},[33,7088,7089],{"class":43},"    test02",[33,7091,345],{"class":47},[33,7093,457],{"class":76},[33,7095,4130],{"class":47},[33,7097,7098],{"class":35,"line":110},[33,7099,231],{"class":47},[574,7101,7102],{"start":57},[564,7103,7104],{},"无参有返",[23,7106,7108],{"className":25,"code":7107,"language":27,"meta":28,"style":28},"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",[30,7109,7110,7119,7123,7135,7144,7148,7156,7160,7173,7192],{"__ignoreMap":28},[33,7111,7112,7114,7117],{"class":35,"line":36},[33,7113,40],{"class":39},[33,7115,7116],{"class":43}," test03",[33,7118,48],{"class":47},[33,7120,7121],{"class":35,"line":51},[33,7122,54],{"class":47},[33,7124,7125,7127,7129,7131,7133],{"class":35,"line":57},[33,7126,113],{"class":47},[33,7128,116],{"class":39},[33,7130,6990],{"class":119},[33,7132,116],{"class":39},[33,7134,131],{"class":47},[33,7136,7137,7139,7142],{"class":35,"line":64},[33,7138,5489],{"class":39},[33,7140,7141],{"class":76}," 100",[33,7143,80],{"class":47},[33,7145,7146],{"class":35,"line":83},[33,7147,231],{"class":47},[33,7149,7150,7152,7154],{"class":35,"line":89},[33,7151,40],{"class":39},[33,7153,44],{"class":43},[33,7155,48],{"class":47},[33,7157,7158],{"class":35,"line":98},[33,7159,54],{"class":47},[33,7161,7162,7164,7166,7168,7171],{"class":35,"line":110},[33,7163,67],{"class":39},[33,7165,6607],{"class":47},[33,7167,73],{"class":39},[33,7169,7170],{"class":43},"test03",[33,7172,7023],{"class":47},[33,7174,7175,7177,7179,7181,7183,7185,7187,7189],{"class":35,"line":134},[33,7176,113],{"class":47},[33,7178,116],{"class":39},[33,7180,6795],{"class":119},[33,7182,116],{"class":39},[33,7184,6632],{"class":47},[33,7186,116],{"class":39},[33,7188,150],{"class":47},[33,7190,7191],{"class":60}," \u002F\u002F100\n",[33,7193,7194],{"class":35,"line":156},[33,7195,231],{"class":47},[14,7197,7198],{},"4.有参有返",[23,7200,7202],{"className":25,"code":7201,"language":27,"meta":28,"style":28},"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",[30,7203,7204,7219,7223,7236,7242,7246,7255,7259,7271,7285,7300],{"__ignoreMap":28},[33,7205,7206,7208,7211,7213,7215,7217],{"class":35,"line":36},[33,7207,40],{"class":39},[33,7209,7210],{"class":43}," test04",[33,7212,345],{"class":47},[33,7214,40],{"class":39},[33,7216,70],{"class":955},[33,7218,884],{"class":47},[33,7220,7221],{"class":35,"line":51},[33,7222,54],{"class":47},[33,7224,7225,7227,7229,7232,7234],{"class":35,"line":57},[33,7226,113],{"class":47},[33,7228,116],{"class":39},[33,7230,7231],{"class":119},"\"hello\"",[33,7233,116],{"class":39},[33,7235,131],{"class":47},[33,7237,7238,7240],{"class":35,"line":64},[33,7239,5489],{"class":39},[33,7241,2888],{"class":47},[33,7243,7244],{"class":35,"line":83},[33,7245,231],{"class":47},[33,7247,7248,7250,7253],{"class":35,"line":89},[33,7249,40],{"class":39},[33,7251,7252],{"class":43}," mian",[33,7254,48],{"class":47},[33,7256,7257],{"class":35,"line":98},[33,7258,54],{"class":47},[33,7260,7261,7263,7265,7267,7269],{"class":35,"line":110},[33,7262,67],{"class":39},[33,7264,1040],{"class":47},[33,7266,73],{"class":39},[33,7268,701],{"class":76},[33,7270,80],{"class":47},[33,7272,7273,7275,7277,7279,7282],{"class":35,"line":134},[33,7274,67],{"class":39},[33,7276,4259],{"class":47},[33,7278,73],{"class":39},[33,7280,7281],{"class":43},"test04",[33,7283,7284],{"class":47},"(b);\n",[33,7286,7287,7289,7291,7293,7295,7297],{"class":35,"line":156},[33,7288,113],{"class":47},[33,7290,116],{"class":39},[33,7292,1902],{"class":47},[33,7294,116],{"class":39},[33,7296,150],{"class":47},[33,7298,7299],{"class":60}," \u002F\u002F1\n",[33,7301,7302],{"class":35,"line":163},[33,7303,231],{"class":47},[18,7305,7307],{"id":7306},"_25函数的声明","2.5函数的声明",[14,7309,7310],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,7312,7313,7314],{},"函数的",[480,7315,7316],{},"声明可以多次，但是函数的定义只能有一次",[23,7318,7320],{"className":25,"code":7319,"language":27,"meta":28,"style":28},"\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",[30,7321,7322,7327,7332,7357,7366,7370,7382,7394,7410,7414,7434,7438,7457],{"__ignoreMap":28},[33,7323,7324],{"class":35,"line":36},[33,7325,7326],{"class":60},"\u002F\u002F函数声明\n",[33,7328,7329],{"class":35,"line":51},[33,7330,7331],{"class":60},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[33,7333,7334,7336,7339,7341,7343,7345,7347,7349,7351,7354],{"class":35,"line":57},[33,7335,40],{"class":39},[33,7337,7338],{"class":43}," max",[33,7340,345],{"class":47},[33,7342,40],{"class":39},[33,7344,70],{"class":955},[33,7346,704],{"class":47},[33,7348,40],{"class":39},[33,7350,1040],{"class":955},[33,7352,7353],{"class":47},");",[33,7355,7356],{"class":60},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[33,7358,7359,7361,7363],{"class":35,"line":64},[33,7360,40],{"class":39},[33,7362,44],{"class":43},[33,7364,7365],{"class":47},"() \n",[33,7367,7368],{"class":35,"line":83},[33,7369,54],{"class":47},[33,7371,7372,7374,7376,7378,7380],{"class":35,"line":89},[33,7373,67],{"class":39},[33,7375,70],{"class":47},[33,7377,73],{"class":39},[33,7379,77],{"class":76},[33,7381,80],{"class":47},[33,7383,7384,7386,7388,7390,7392],{"class":35,"line":98},[33,7385,67],{"class":39},[33,7387,1040],{"class":47},[33,7389,73],{"class":39},[33,7391,1045],{"class":76},[33,7393,80],{"class":47},[33,7395,7396,7398,7400,7403,7406,7408],{"class":35,"line":110},[33,7397,113],{"class":47},[33,7399,116],{"class":39},[33,7401,7402],{"class":43},"max",[33,7404,7405],{"class":47},"(a,b)",[33,7407,116],{"class":39},[33,7409,131],{"class":47},[33,7411,7412],{"class":35,"line":134},[33,7413,231],{"class":47},[33,7415,7416,7418,7420,7422,7424,7426,7428,7430,7432],{"class":35,"line":156},[33,7417,40],{"class":39},[33,7419,7338],{"class":43},[33,7421,345],{"class":47},[33,7423,40],{"class":39},[33,7425,70],{"class":955},[33,7427,704],{"class":47},[33,7429,40],{"class":39},[33,7431,1040],{"class":955},[33,7433,884],{"class":47},[33,7435,7436],{"class":35,"line":163},[33,7437,54],{"class":47},[33,7439,7440,7442,7444,7446,7448,7450,7452,7454],{"class":35,"line":169},[33,7441,5489],{"class":39},[33,7443,70],{"class":47},[33,7445,1265],{"class":39},[33,7447,1094],{"class":47},[33,7449,2581],{"class":39},[33,7451,126],{"class":47},[33,7453,2458],{"class":39},[33,7455,7456],{"class":47},"b;\n",[33,7458,7459],{"class":35,"line":175},[33,7460,231],{"class":47},[18,7462,7464],{"id":7463},"_26函数的分文件编写","2.6函数的分文件编写",[14,7466,7467],{},"4个步骤：",[561,7469,7470,7473,7476,7479],{},[564,7471,7472],{},"1.创建后缀名为.h的头文件",[564,7474,7475],{},"2.创建后缀名为.cpp的源文件",[564,7477,7478],{},"3.在头文件中写函数的定义",[564,7480,7481],{},"4.在源文件中写函数的定义\n示例：",[14,7483,7484],{},"头文件：swap.h",[23,7486,7488],{"className":25,"code":7487,"language":27,"meta":28,"style":28},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[30,7489,7490,7496,7506,7510],{"__ignoreMap":28},[33,7491,7492,7494],{"class":35,"line":36},[33,7493,1131],{"class":39},[33,7495,1134],{"class":119},[33,7497,7498,7500,7502,7504],{"class":35,"line":51},[33,7499,1139],{"class":39},[33,7501,1142],{"class":39},[33,7503,1145],{"class":43},[33,7505,80],{"class":47},[33,7507,7508],{"class":35,"line":57},[33,7509,7326],{"class":60},[33,7511,7512,7514,7516,7518,7520,7522,7524,7526,7528],{"class":35,"line":64},[33,7513,943],{"class":39},[33,7515,946],{"class":43},[33,7517,345],{"class":47},[33,7519,40],{"class":39},[33,7521,70],{"class":955},[33,7523,704],{"class":47},[33,7525,40],{"class":39},[33,7527,1040],{"class":955},[33,7529,4130],{"class":47},[14,7531,7532],{},"源文件：swap.cpp",[23,7534,7536],{"className":25,"code":7535,"language":27,"meta":28,"style":28},"#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",[30,7537,7538,7545,7550,7570,7574,7584,7593,7602,7619,7636],{"__ignoreMap":28},[33,7539,7540,7542],{"class":35,"line":36},[33,7541,1131],{"class":39},[33,7543,7544],{"class":119}," \"swap.h\"\n",[33,7546,7547],{"class":35,"line":51},[33,7548,7549],{"class":60},"\u002F\u002F函数的定义\n",[33,7551,7552,7554,7556,7558,7560,7562,7564,7566,7568],{"class":35,"line":57},[33,7553,943],{"class":39},[33,7555,946],{"class":43},[33,7557,345],{"class":47},[33,7559,40],{"class":39},[33,7561,70],{"class":955},[33,7563,704],{"class":47},[33,7565,40],{"class":39},[33,7567,1040],{"class":955},[33,7569,884],{"class":47},[33,7571,7572],{"class":35,"line":64},[33,7573,54],{"class":47},[33,7575,7576,7578,7580,7582],{"class":35,"line":83},[33,7577,67],{"class":39},[33,7579,977],{"class":47},[33,7581,73],{"class":39},[33,7583,107],{"class":47},[33,7585,7586,7589,7591],{"class":35,"line":89},[33,7587,7588],{"class":47},"    a",[33,7590,73],{"class":39},[33,7592,7456],{"class":47},[33,7594,7595,7598,7600],{"class":35,"line":98},[33,7596,7597],{"class":47},"    b",[33,7599,73],{"class":39},[33,7601,1005],{"class":47},[33,7603,7604,7606,7608,7611,7613,7615,7617],{"class":35,"line":110},[33,7605,113],{"class":47},[33,7607,116],{"class":39},[33,7609,7610],{"class":119},"\"a=\"",[33,7612,116],{"class":39},[33,7614,126],{"class":47},[33,7616,116],{"class":39},[33,7618,131],{"class":47},[33,7620,7621,7623,7625,7628,7630,7632,7634],{"class":35,"line":134},[33,7622,113],{"class":47},[33,7624,116],{"class":39},[33,7626,7627],{"class":119},"\"b=\"",[33,7629,116],{"class":39},[33,7631,1094],{"class":47},[33,7633,116],{"class":39},[33,7635,131],{"class":47},[33,7637,7638],{"class":35,"line":156},[33,7639,231],{"class":47},[1544,7641,7642],{},"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":28,"searchDepth":51,"depth":51,"links":7644},[7645,7646,7647,7648,7649,7650],{"id":6563,"depth":51,"text":6564},{"id":6651,"depth":51,"text":6652},{"id":6734,"depth":51,"text":6735},{"id":6957,"depth":51,"text":6958},{"id":7306,"depth":51,"text":7307},{"id":7463,"depth":51,"text":7464},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6555,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":4,"title":5,"body":7657,"description":16,"extension":1557,"meta":8939,"navigation":159,"path":1559,"seo":8940,"stem":1561,"__hash__":1562},{"type":7,"value":7658,"toc":8929},[7659,7661,7663,7665,7809,7811,7813,7815,7817,7819,7945,7947,7949,7951,7953,8013,8015,8019,8081,8083,8085,8087,8095,8099,8117,8119,8123,8139,8141,8145,8163,8165,8167,8391,8393,8395,8397,8399,8551,8553,8555,8557,8561,8927],[10,7660,5],{"id":12},[14,7662,16],{},[18,7664,21],{"id":20},[23,7666,7667],{"className":25,"code":26,"language":27,"meta":28,"style":28},[30,7668,7669,7677,7681,7685,7697,7701,7707,7715,7731,7749,7753,7757,7761,7765,7777,7791,7805],{"__ignoreMap":28},[33,7670,7671,7673,7675],{"class":35,"line":36},[33,7672,40],{"class":39},[33,7674,44],{"class":43},[33,7676,48],{"class":47},[33,7678,7679],{"class":35,"line":51},[33,7680,54],{"class":47},[33,7682,7683],{"class":35,"line":57},[33,7684,61],{"class":60},[33,7686,7687,7689,7691,7693,7695],{"class":35,"line":64},[33,7688,67],{"class":39},[33,7690,70],{"class":47},[33,7692,73],{"class":39},[33,7694,77],{"class":76},[33,7696,80],{"class":47},[33,7698,7699],{"class":35,"line":83},[33,7700,86],{"class":60},[33,7702,7703,7705],{"class":35,"line":89},[33,7704,92],{"class":39},[33,7706,95],{"class":47},[33,7708,7709,7711,7713],{"class":35,"line":98},[33,7710,101],{"class":47},[33,7712,104],{"class":39},[33,7714,107],{"class":47},[33,7716,7717,7719,7721,7723,7725,7727,7729],{"class":35,"line":110},[33,7718,113],{"class":47},[33,7720,116],{"class":39},[33,7722,120],{"class":119},[33,7724,123],{"class":39},[33,7726,126],{"class":47},[33,7728,116],{"class":39},[33,7730,131],{"class":47},[33,7732,7733,7735,7737,7739,7741,7743,7745,7747],{"class":35,"line":134},[33,7734,113],{"class":47},[33,7736,116],{"class":39},[33,7738,141],{"class":119},[33,7740,116],{"class":39},[33,7742,14],{"class":47},[33,7744,116],{"class":39},[33,7746,150],{"class":47},[33,7748,153],{"class":60},[33,7750,7751],{"class":35,"line":156},[33,7752,160],{"emptyLinePlaceholder":159},[33,7754,7755],{"class":35,"line":163},[33,7756,166],{"class":60},[33,7758,7759],{"class":35,"line":169},[33,7760,172],{"class":60},[33,7762,7763],{"class":35,"line":175},[33,7764,178],{"class":60},[33,7766,7767,7769,7771,7773,7775],{"class":35,"line":181},[33,7768,184],{"class":39},[33,7770,14],{"class":47},[33,7772,73],{"class":39},[33,7774,191],{"class":76},[33,7776,80],{"class":47},[33,7778,7779,7781,7783,7785,7787,7789],{"class":35,"line":196},[33,7780,113],{"class":47},[33,7782,201],{"class":39},[33,7784,14],{"class":47},[33,7786,116],{"class":39},[33,7788,150],{"class":47},[33,7790,210],{"class":60},[33,7792,7793,7795,7797,7799,7801,7803],{"class":35,"line":213},[33,7794,113],{"class":47},[33,7796,116],{"class":39},[33,7798,126],{"class":47},[33,7800,116],{"class":39},[33,7802,150],{"class":47},[33,7804,210],{"class":60},[33,7806,7807],{"class":35,"line":228},[33,7808,231],{"class":47},[18,7810,235],{"id":234},[14,7812,238],{},[14,7814,241],{},[14,7816,244],{},[14,7818,247],{},[23,7820,7821],{"className":25,"code":250,"language":27,"meta":28,"style":28},[30,7822,7823,7831,7835,7839,7851,7855,7859,7863,7875,7893,7917,7941],{"__ignoreMap":28},[33,7824,7825,7827,7829],{"class":35,"line":36},[33,7826,40],{"class":39},[33,7828,44],{"class":43},[33,7830,48],{"class":47},[33,7832,7833],{"class":35,"line":51},[33,7834,54],{"class":47},[33,7836,7837],{"class":35,"line":57},[33,7838,269],{"class":60},[33,7840,7841,7843,7845,7847,7849],{"class":35,"line":64},[33,7842,67],{"class":39},[33,7844,70],{"class":47},[33,7846,73],{"class":39},[33,7848,77],{"class":76},[33,7850,80],{"class":47},[33,7852,7853],{"class":35,"line":83},[33,7854,286],{"class":60},[33,7856,7857],{"class":35,"line":89},[33,7858,291],{"class":60},[33,7860,7861],{"class":35,"line":98},[33,7862,296],{"class":60},[33,7864,7865,7867,7869,7871,7873],{"class":35,"line":110},[33,7866,67],{"class":39},[33,7868,303],{"class":39},[33,7870,14],{"class":47},[33,7872,104],{"class":39},[33,7874,107],{"class":47},[33,7876,7877,7879,7881,7883,7885,7887,7889,7891],{"class":35,"line":134},[33,7878,314],{"class":47},[33,7880,116],{"class":39},[33,7882,319],{"class":119},[33,7884,322],{"class":39},[33,7886,325],{"class":47},[33,7888,116],{"class":39},[33,7890,150],{"class":47},[33,7892,332],{"class":60},[33,7894,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915],{"class":35,"line":156},[33,7896,314],{"class":47},[33,7898,116],{"class":39},[33,7900,319],{"class":119},[33,7902,322],{"class":39},[33,7904,345],{"class":47},[33,7906,40],{"class":39},[33,7908,303],{"class":39},[33,7910,352],{"class":47},[33,7912,116],{"class":39},[33,7914,357],{"class":47},[33,7916,360],{"class":60},[33,7918,7919,7921,7923,7925,7927,7929,7931,7933,7935,7937,7939],{"class":35,"line":163},[33,7920,314],{"class":47},[33,7922,116],{"class":39},[33,7924,369],{"class":119},[33,7926,322],{"class":39},[33,7928,345],{"class":47},[33,7930,376],{"class":39},[33,7932,303],{"class":39},[33,7934,352],{"class":47},[33,7936,116],{"class":39},[33,7938,150],{"class":47},[33,7940,387],{"class":60},[33,7942,7943],{"class":35,"line":169},[33,7944,231],{"class":47},[18,7946,395],{"id":394},[14,7948,398],{},[14,7950,401],{},[14,7952,404],{},[23,7954,7955],{"className":25,"code":407,"language":27,"meta":28,"style":28},[30,7956,7957,7965,7969,7973,7987,7991,8005,8009],{"__ignoreMap":28},[33,7958,7959,7961,7963],{"class":35,"line":36},[33,7960,40],{"class":39},[33,7962,44],{"class":43},[33,7964,48],{"class":47},[33,7966,7967],{"class":35,"line":51},[33,7968,54],{"class":47},[33,7970,7971],{"class":35,"line":57},[33,7972,426],{"class":60},[33,7974,7975,7977,7979,7981,7983,7985],{"class":35,"line":64},[33,7976,67],{"class":39},[33,7978,303],{"class":39},[33,7980,14],{"class":47},[33,7982,73],{"class":39},[33,7984,439],{"class":76},[33,7986,80],{"class":47},[33,7988,7989],{"class":35,"line":83},[33,7990,446],{"class":60},[33,7992,7993,7995,7997,7999,8001,8003],{"class":35,"line":89},[33,7994,184],{"class":39},[33,7996,14],{"class":47},[33,7998,73],{"class":39},[33,8000,457],{"class":76},[33,8002,460],{"class":47},[33,8004,463],{"class":60},[33,8006,8007],{"class":35,"line":98},[33,8008,468],{"class":60},[33,8010,8011],{"class":35,"line":110},[33,8012,231],{"class":47},[18,8014,476],{"id":475},[14,8016,8017],{},[480,8018,482],{},[23,8020,8021],{"className":25,"code":485,"language":27,"meta":28,"style":28},[30,8022,8023,8031,8035,8061,8065,8077],{"__ignoreMap":28},[33,8024,8025,8027,8029],{"class":35,"line":36},[33,8026,40],{"class":39},[33,8028,44],{"class":43},[33,8030,48],{"class":47},[33,8032,8033],{"class":35,"line":51},[33,8034,54],{"class":47},[33,8036,8037,8039,8041,8043,8045,8047,8049,8051,8053,8055,8057,8059],{"class":35,"line":57},[33,8038,67],{"class":39},[33,8040,303],{"class":39},[33,8042,14],{"class":47},[33,8044,73],{"class":39},[33,8046,345],{"class":47},[33,8048,40],{"class":39},[33,8050,303],{"class":39},[33,8052,352],{"class":47},[33,8054,520],{"class":39},[33,8056,523],{"class":76},[33,8058,460],{"class":47},[33,8060,528],{"class":60},[33,8062,8063],{"class":35,"line":64},[33,8064,533],{"class":60},[33,8066,8067,8069,8071,8073,8075],{"class":35,"line":83},[33,8068,113],{"class":47},[33,8070,201],{"class":39},[33,8072,14],{"class":47},[33,8074,116],{"class":39},[33,8076,131],{"class":47},[33,8078,8079],{"class":35,"line":89},[33,8080,231],{"class":47},[14,8082,552],{},[18,8084,556],{"id":555},[14,8086,559],{},[561,8088,8089,8091,8093],{},[564,8090,566],{},[564,8092,569],{},[564,8094,572],{},[574,8096,8097],{},[564,8098,578],{},[23,8100,8101],{"className":25,"code":581,"language":27,"meta":28,"style":28},[30,8102,8103],{"__ignoreMap":28},[33,8104,8105,8107,8109,8111,8113,8115],{"class":35,"line":36},[33,8106,588],{"class":39},[33,8108,591],{"class":39},[33,8110,303],{"class":39},[33,8112,14],{"class":47},[33,8114,104],{"class":39},[33,8116,107],{"class":47},[14,8118,602],{},[574,8120,8121],{"start":51},[564,8122,607],{},[23,8124,8125],{"className":25,"code":610,"language":27,"meta":28,"style":28},[30,8126,8127],{"__ignoreMap":28},[33,8128,8129,8131,8133,8135,8137],{"class":35,"line":36},[33,8130,40],{"class":39},[33,8132,619],{"class":39},[33,8134,622],{"class":47},[33,8136,104],{"class":39},[33,8138,107],{"class":47},[14,8140,629],{},[574,8142,8143],{"start":57},[564,8144,572],{},[23,8146,8147],{"className":25,"code":636,"language":27,"meta":28,"style":28},[30,8148,8149],{"__ignoreMap":28},[33,8150,8151,8153,8155,8157,8159,8161],{"class":35,"line":36},[33,8152,588],{"class":39},[33,8154,591],{"class":39},[33,8156,619],{"class":39},[33,8158,622],{"class":47},[33,8160,104],{"class":39},[33,8162,107],{"class":47},[14,8164,655],{},[18,8166,659],{"id":658},[23,8168,8169],{"className":25,"code":662,"language":27,"meta":28,"style":28},[30,8170,8171,8179,8183,8187,8241,8261,8275,8291,8301,8317,8321,8333,8359,8363,8375,8383,8387],{"__ignoreMap":28},[33,8172,8173,8175,8177],{"class":35,"line":36},[33,8174,40],{"class":39},[33,8176,44],{"class":43},[33,8178,48],{"class":47},[33,8180,8181],{"class":35,"line":51},[33,8182,54],{"class":47},[33,8184,8185],{"class":35,"line":57},[33,8186,681],{"class":60},[33,8188,8189,8191,8193,8195,8197,8199,8201,8203,8205,8207,8209,8211,8213,8215,8217,8219,8221,8223,8225,8227,8229,8231,8233,8235,8237,8239],{"class":35,"line":64},[33,8190,67],{"class":39},[33,8192,688],{"class":47},[33,8194,77],{"class":76},[33,8196,693],{"class":47},[33,8198,73],{"class":39},[33,8200,698],{"class":47},[33,8202,701],{"class":76},[33,8204,704],{"class":47},[33,8206,707],{"class":76},[33,8208,704],{"class":47},[33,8210,712],{"class":76},[33,8212,704],{"class":47},[33,8214,717],{"class":76},[33,8216,704],{"class":47},[33,8218,722],{"class":76},[33,8220,704],{"class":47},[33,8222,727],{"class":76},[33,8224,704],{"class":47},[33,8226,732],{"class":76},[33,8228,704],{"class":47},[33,8230,737],{"class":76},[33,8232,704],{"class":47},[33,8234,742],{"class":76},[33,8236,704],{"class":47},[33,8238,77],{"class":76},[33,8240,749],{"class":47},[33,8242,8243,8245,8247,8249,8251,8253,8255,8257,8259],{"class":35,"line":83},[33,8244,113],{"class":47},[33,8246,116],{"class":39},[33,8248,758],{"class":119},[33,8250,116],{"class":39},[33,8252,763],{"class":47},[33,8254,766],{"class":76},[33,8256,693],{"class":47},[33,8258,116],{"class":39},[33,8260,131],{"class":47},[33,8262,8263,8265,8267,8269,8271,8273],{"class":35,"line":89},[33,8264,67],{"class":39},[33,8266,303],{"class":39},[33,8268,14],{"class":47},[33,8270,73],{"class":39},[33,8272,785],{"class":47},[33,8274,788],{"class":60},[33,8276,8277,8279,8281,8283,8285,8287,8289],{"class":35,"line":98},[33,8278,113],{"class":47},[33,8280,116],{"class":39},[33,8282,758],{"class":119},[33,8284,201],{"class":39},[33,8286,14],{"class":47},[33,8288,116],{"class":39},[33,8290,131],{"class":47},[33,8292,8293,8295,8297,8299],{"class":35,"line":110},[33,8294,101],{"class":47},[33,8296,811],{"class":39},[33,8298,460],{"class":47},[33,8300,816],{"class":60},[33,8302,8303,8305,8307,8309,8311,8313,8315],{"class":35,"line":134},[33,8304,113],{"class":47},[33,8306,116],{"class":39},[33,8308,825],{"class":119},[33,8310,201],{"class":39},[33,8312,14],{"class":47},[33,8314,116],{"class":39},[33,8316,131],{"class":47},[33,8318,8319],{"class":35,"line":156},[33,8320,838],{"class":60},[33,8322,8323,8325,8327,8329,8331],{"class":35,"line":163},[33,8324,67],{"class":39},[33,8326,303],{"class":39},[33,8328,847],{"class":47},[33,8330,73],{"class":39},[33,8332,852],{"class":47},[33,8334,8335,8337,8339,8341,8343,8345,8347,8349,8351,8353,8355,8357],{"class":35,"line":169},[33,8336,857],{"class":39},[33,8338,860],{"class":47},[33,8340,40],{"class":39},[33,8342,865],{"class":47},[33,8344,73],{"class":39},[33,8346,766],{"class":76},[33,8348,872],{"class":47},[33,8350,875],{"class":39},[33,8352,77],{"class":76},[33,8354,872],{"class":47},[33,8356,811],{"class":39},[33,8358,884],{"class":47},[33,8360,8361],{"class":35,"line":175},[33,8362,889],{"class":47},[33,8364,8365,8367,8369,8371,8373],{"class":35,"line":181},[33,8366,894],{"class":47},[33,8368,201],{"class":39},[33,8370,847],{"class":47},[33,8372,116],{"class":39},[33,8374,131],{"class":47},[33,8376,8377,8379,8381],{"class":35,"line":196},[33,8378,907],{"class":47},[33,8380,811],{"class":39},[33,8382,80],{"class":47},[33,8384,8385],{"class":35,"line":213},[33,8386,916],{"class":47},[33,8388,8389],{"class":35,"line":228},[33,8390,231],{"class":47},[18,8392,924],{"id":923},[14,8394,927],{},[14,8396,930],{},[14,8398,933],{},[23,8400,8401],{"className":25,"code":936,"language":27,"meta":28,"style":28},[30,8402,8403,8427,8431,8441,8451,8461,8465,8473,8477,8489,8501,8505,8519,8533,8547],{"__ignoreMap":28},[33,8404,8405,8407,8409,8411,8413,8415,8417,8419,8421,8423,8425],{"class":35,"line":36},[33,8406,943],{"class":39},[33,8408,946],{"class":43},[33,8410,345],{"class":47},[33,8412,40],{"class":39},[33,8414,303],{"class":39},[33,8416,956],{"class":955},[33,8418,704],{"class":47},[33,8420,40],{"class":39},[33,8422,303],{"class":39},[33,8424,847],{"class":955},[33,8426,884],{"class":47},[33,8428,8429],{"class":35,"line":51},[33,8430,54],{"class":47},[33,8432,8433,8435,8437,8439],{"class":35,"line":57},[33,8434,67],{"class":39},[33,8436,977],{"class":47},[33,8438,980],{"class":39},[33,8440,983],{"class":47},[33,8442,8443,8445,8447,8449],{"class":35,"line":64},[33,8444,184],{"class":39},[33,8446,956],{"class":47},[33,8448,980],{"class":39},[33,8450,994],{"class":47},[33,8452,8453,8455,8457,8459],{"class":35,"line":83},[33,8454,184],{"class":39},[33,8456,847],{"class":47},[33,8458,73],{"class":39},[33,8460,1005],{"class":47},[33,8462,8463],{"class":35,"line":89},[33,8464,231],{"class":47},[33,8466,8467,8469,8471],{"class":35,"line":98},[33,8468,40],{"class":39},[33,8470,44],{"class":43},[33,8472,48],{"class":47},[33,8474,8475],{"class":35,"line":110},[33,8476,54],{"class":47},[33,8478,8479,8481,8483,8485,8487],{"class":35,"line":134},[33,8480,67],{"class":39},[33,8482,70],{"class":47},[33,8484,73],{"class":39},[33,8486,77],{"class":76},[33,8488,80],{"class":47},[33,8490,8491,8493,8495,8497,8499],{"class":35,"line":156},[33,8492,67],{"class":39},[33,8494,1040],{"class":47},[33,8496,73],{"class":39},[33,8498,1045],{"class":76},[33,8500,80],{"class":47},[33,8502,8503],{"class":35,"line":163},[33,8504,1052],{"class":60},[33,8506,8507,8509,8511,8513,8515,8517],{"class":35,"line":169},[33,8508,1057],{"class":43},[33,8510,345],{"class":47},[33,8512,1062],{"class":39},[33,8514,1065],{"class":47},[33,8516,1062],{"class":39},[33,8518,1070],{"class":47},[33,8520,8521,8523,8525,8527,8529,8531],{"class":35,"line":175},[33,8522,113],{"class":47},[33,8524,116],{"class":39},[33,8526,126],{"class":47},[33,8528,116],{"class":39},[33,8530,150],{"class":47},[33,8532,1085],{"class":60},[33,8534,8535,8537,8539,8541,8543,8545],{"class":35,"line":181},[33,8536,113],{"class":47},[33,8538,116],{"class":39},[33,8540,1094],{"class":47},[33,8542,116],{"class":39},[33,8544,150],{"class":47},[33,8546,1101],{"class":60},[33,8548,8549],{"class":35,"line":196},[33,8550,231],{"class":47},[14,8552,1108],{},[18,8554,1112],{"id":1111},[14,8556,1115],{},[14,8558,1118,8559,1121],{},[33,8560,77],{},[23,8562,8563],{"className":25,"code":1124,"language":27,"meta":28,"style":28},[30,8564,8565,8571,8581,8603,8607,8637,8641,8675,8679,8695,8699,8709,8723,8737,8741,8745,8749,8753,8757,8765,8769,8773,8827,8839,8851,8855,8861,8865,8869,8893,8897,8911,8919,8923],{"__ignoreMap":28},[33,8566,8567,8569],{"class":35,"line":36},[33,8568,1131],{"class":39},[33,8570,1134],{"class":119},[33,8572,8573,8575,8577,8579],{"class":35,"line":51},[33,8574,1139],{"class":39},[33,8576,1142],{"class":39},[33,8578,1145],{"class":43},[33,8580,80],{"class":47},[33,8582,8583,8585,8587,8589,8591,8593,8595,8597,8599,8601],{"class":35,"line":57},[33,8584,943],{"class":39},[33,8586,1154],{"class":43},[33,8588,345],{"class":47},[33,8590,40],{"class":39},[33,8592,303],{"class":39},[33,8594,14],{"class":955},[33,8596,704],{"class":47},[33,8598,40],{"class":39},[33,8600,1169],{"class":955},[33,8602,884],{"class":47},[33,8604,8605],{"class":35,"line":64},[33,8606,54],{"class":47},[33,8608,8609,8611,8613,8615,8617,8619,8621,8623,8625,8627,8629,8631,8633,8635],{"class":35,"line":83},[33,8610,857],{"class":39},[33,8612,345],{"class":47},[33,8614,40],{"class":39},[33,8616,865],{"class":47},[33,8618,73],{"class":39},[33,8620,766],{"class":76},[33,8622,872],{"class":47},[33,8624,875],{"class":39},[33,8626,1196],{"class":47},[33,8628,1199],{"class":39},[33,8630,701],{"class":76},[33,8632,872],{"class":47},[33,8634,811],{"class":39},[33,8636,884],{"class":47},[33,8638,8639],{"class":35,"line":89},[33,8640,889],{"class":47},[33,8642,8643,8645,8647,8649,8651,8653,8655,8657,8659,8661,8663,8665,8667,8669,8671,8673],{"class":35,"line":98},[33,8644,1216],{"class":39},[33,8646,345],{"class":47},[33,8648,40],{"class":39},[33,8650,1223],{"class":47},[33,8652,73],{"class":39},[33,8654,766],{"class":76},[33,8656,1230],{"class":47},[33,8658,875],{"class":39},[33,8660,1196],{"class":47},[33,8662,1199],{"class":39},[33,8664,1239],{"class":47},[33,8666,1199],{"class":39},[33,8668,701],{"class":76},[33,8670,1230],{"class":47},[33,8672,811],{"class":39},[33,8674,884],{"class":47},[33,8676,8677],{"class":35,"line":110},[33,8678,1254],{"class":47},[33,8680,8681,8683,8685,8687,8689,8691,8693],{"class":35,"line":134},[33,8682,1259],{"class":39},[33,8684,1262],{"class":47},[33,8686,1265],{"class":39},[33,8688,1268],{"class":47},[33,8690,1271],{"class":39},[33,8692,701],{"class":76},[33,8694,1276],{"class":47},[33,8696,8697],{"class":35,"line":156},[33,8698,1281],{"class":47},[33,8700,8701,8703,8705,8707],{"class":35,"line":163},[33,8702,1286],{"class":39},[33,8704,977],{"class":47},[33,8706,73],{"class":39},[33,8708,1293],{"class":47},[33,8710,8711,8713,8715,8717,8719,8721],{"class":35,"line":169},[33,8712,1298],{"class":47},[33,8714,73],{"class":39},[33,8716,1268],{"class":47},[33,8718,1271],{"class":39},[33,8720,701],{"class":76},[33,8722,1309],{"class":47},[33,8724,8725,8727,8729,8731,8733,8735],{"class":35,"line":175},[33,8726,1314],{"class":47},[33,8728,1271],{"class":39},[33,8730,701],{"class":76},[33,8732,693],{"class":47},[33,8734,73],{"class":39},[33,8736,1005],{"class":47},[33,8738,8739],{"class":35,"line":181},[33,8740,1329],{"class":47},[33,8742,8743],{"class":35,"line":196},[33,8744,1334],{"class":47},[33,8746,8747],{"class":35,"line":213},[33,8748,916],{"class":47},[33,8750,8751],{"class":35,"line":228},[33,8752,231],{"class":47},[33,8754,8755],{"class":35,"line":1345},[33,8756,160],{"emptyLinePlaceholder":159},[33,8758,8759,8761,8763],{"class":35,"line":1350},[33,8760,40],{"class":39},[33,8762,44],{"class":43},[33,8764,48],{"class":47},[33,8766,8767],{"class":35,"line":1359},[33,8768,54],{"class":47},[33,8770,8771],{"class":35,"line":1364},[33,8772,1367],{"class":60},[33,8774,8775,8777,8779,8781,8783,8785,8787,8789,8791,8793,8795,8797,8799,8801,8803,8805,8807,8809,8811,8813,8815,8817,8819,8821,8823,8825],{"class":35,"line":1370},[33,8776,67],{"class":39},[33,8778,688],{"class":47},[33,8780,77],{"class":76},[33,8782,693],{"class":47},[33,8784,73],{"class":39},[33,8786,698],{"class":47},[33,8788,717],{"class":76},[33,8790,704],{"class":47},[33,8792,712],{"class":76},[33,8794,704],{"class":47},[33,8796,727],{"class":76},[33,8798,704],{"class":47},[33,8800,742],{"class":76},[33,8802,704],{"class":47},[33,8804,701],{"class":76},[33,8806,704],{"class":47},[33,8808,707],{"class":76},[33,8810,704],{"class":47},[33,8812,77],{"class":76},[33,8814,704],{"class":47},[33,8816,737],{"class":76},[33,8818,704],{"class":47},[33,8820,732],{"class":76},[33,8822,704],{"class":47},[33,8824,722],{"class":76},[33,8826,749],{"class":47},[33,8828,8829,8831,8833,8835,8837],{"class":35,"line":1425},[33,8830,67],{"class":39},[33,8832,1169],{"class":47},[33,8834,73],{"class":39},[33,8836,77],{"class":76},[33,8838,80],{"class":47},[33,8840,8841,8843,8845,8847,8849],{"class":35,"line":1438},[33,8842,67],{"class":39},[33,8844,303],{"class":39},[33,8846,14],{"class":47},[33,8848,73],{"class":39},[33,8850,852],{"class":47},[33,8852,8853],{"class":35,"line":1451},[33,8854,1454],{"class":60},[33,8856,8857,8859],{"class":35,"line":1457},[33,8858,1460],{"class":43},[33,8860,1463],{"class":47},[33,8862,8863],{"class":35,"line":1466},[33,8864,160],{"emptyLinePlaceholder":159},[33,8866,8867],{"class":35,"line":1471},[33,8868,1474],{"class":60},[33,8870,8871,8873,8875,8877,8879,8881,8883,8885,8887,8889,8891],{"class":35,"line":1477},[33,8872,857],{"class":39},[33,8874,860],{"class":47},[33,8876,40],{"class":39},[33,8878,865],{"class":47},[33,8880,73],{"class":39},[33,8882,766],{"class":76},[33,8884,1492],{"class":47},[33,8886,875],{"class":39},[33,8888,1497],{"class":47},[33,8890,811],{"class":39},[33,8892,884],{"class":47},[33,8894,8895],{"class":35,"line":1504},[33,8896,889],{"class":47},[33,8898,8899,8901,8903,8905,8907,8909],{"class":35,"line":1509},[33,8900,894],{"class":47},[33,8902,201],{"class":39},[33,8904,14],{"class":47},[33,8906,116],{"class":39},[33,8908,1520],{"class":119},[33,8910,80],{"class":47},[33,8912,8913,8915,8917],{"class":35,"line":1525},[33,8914,1528],{"class":47},[33,8916,811],{"class":39},[33,8918,80],{"class":47},[33,8920,8921],{"class":35,"line":1535},[33,8922,916],{"class":47},[33,8924,8925],{"class":35,"line":1540},[33,8926,231],{"class":47},[1544,8928,1546],{},{"title":28,"searchDepth":51,"depth":51,"links":8930},[8931,8932,8933,8934,8935,8936,8937,8938],{"id":20,"depth":51,"text":21},{"id":234,"depth":51,"text":235},{"id":394,"depth":51,"text":395},{"id":475,"depth":51,"text":476},{"id":555,"depth":51,"text":556},{"id":658,"depth":51,"text":659},{"id":923,"depth":51,"text":924},{"id":1111,"depth":51,"text":1112},{},{"title":5,"description":16},{"id":8942,"title":8943,"body":8944,"description":8951,"extension":1557,"meta":11925,"navigation":159,"path":11926,"seo":11927,"stem":11928,"__hash__":11929},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8945,"toc":11916},[8946,8949,8952,8956,8959,8962,8973,9311,9314,9318,9321,9328,9583,9587,9590,9593,9748,9752,9755,9758,9964,9968,9971,10274,10277,10285,10289,10292,10443,10445,10456,10513,10517,10522,11179,11187,11190,11284,11287,11907,11913],[10,8947,8943],{"id":8948},"_4结构体",[14,8950,8951],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[18,8953,8955],{"id":8954},"_41结构体定义与使用","4.1结构体定义与使用",[14,8957,8958],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8960,8961],{},"通过结构体创建变量的方式：",[561,8963,8964,8967,8970],{},[564,8965,8966],{},"struct 结构体名 变量名",[564,8968,8969],{},"struct 结构体名 变量名={成员1值，成员2值...}",[564,8971,8972],{},"定义结构体时顺便创建变量",[23,8974,8976],{"className":25,"code":8975,"language":27,"meta":28,"style":28},"#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",[30,8977,8978,8984,8994,9001,9006,9014,9018,9023,9027,9032,9037,9042,9049,9054,9061,9065,9072,9076,9080,9084,9088,9092,9096,9102,9106,9112,9120,9128,9132,9137,9142,9153,9158,9170,9181,9192,9197,9221,9226,9232,9259,9264,9270,9282,9294,9306],{"__ignoreMap":28},[33,8979,8980,8982],{"class":35,"line":36},[33,8981,1131],{"class":39},[33,8983,1134],{"class":119},[33,8985,8986,8988,8990,8992],{"class":35,"line":51},[33,8987,1139],{"class":39},[33,8989,1142],{"class":39},[33,8991,1145],{"class":43},[33,8993,80],{"class":47},[33,8995,8996,8998],{"class":35,"line":57},[33,8997,1131],{"class":39},[33,8999,9000],{"class":119},"\u003Cstring>\n",[33,9002,9003],{"class":35,"line":64},[33,9004,9005],{"class":60},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[33,9007,9008,9011],{"class":35,"line":83},[33,9009,9010],{"class":39},"struct",[33,9012,9013],{"class":43}," Student\n",[33,9015,9016],{"class":35,"line":89},[33,9017,54],{"class":47},[33,9019,9020],{"class":35,"line":98},[33,9021,9022],{"class":60},"    \u002F\u002F成员列表\n",[33,9024,9025],{"class":35,"line":110},[33,9026,160],{"emptyLinePlaceholder":159},[33,9028,9029],{"class":35,"line":134},[33,9030,9031],{"class":60},"    \u002F\u002F姓名\n",[33,9033,9034],{"class":35,"line":156},[33,9035,9036],{"class":47},"    string name;\n",[33,9038,9039],{"class":35,"line":163},[33,9040,9041],{"class":60},"    \u002F\u002F年龄\n",[33,9043,9044,9046],{"class":35,"line":169},[33,9045,67],{"class":39},[33,9047,9048],{"class":47}," age;\n",[33,9050,9051],{"class":35,"line":175},[33,9052,9053],{"class":60},"    \u002F\u002F分数\n",[33,9055,9056,9058],{"class":35,"line":181},[33,9057,67],{"class":39},[33,9059,9060],{"class":47}," score;\n",[33,9062,9063],{"class":35,"line":196},[33,9064,749],{"class":47},[33,9066,9067,9069],{"class":35,"line":213},[33,9068,9010],{"class":39},[33,9070,9071],{"class":43}," School\n",[33,9073,9074],{"class":35,"line":228},[33,9075,54],{"class":47},[33,9077,9078],{"class":35,"line":1345},[33,9079,9022],{"class":60},[33,9081,9082],{"class":35,"line":1350},[33,9083,160],{"emptyLinePlaceholder":159},[33,9085,9086],{"class":35,"line":1359},[33,9087,9031],{"class":60},[33,9089,9090],{"class":35,"line":1364},[33,9091,9036],{"class":47},[33,9093,9094],{"class":35,"line":1370},[33,9095,9041],{"class":60},[33,9097,9098,9100],{"class":35,"line":1425},[33,9099,67],{"class":39},[33,9101,9048],{"class":47},[33,9103,9104],{"class":35,"line":1438},[33,9105,9053],{"class":60},[33,9107,9108,9110],{"class":35,"line":1451},[33,9109,67],{"class":39},[33,9111,9060],{"class":47},[33,9113,9114,9117],{"class":35,"line":1457},[33,9115,9116],{"class":47},"} s3;",[33,9118,9119],{"class":60}," \u002F\u002F创建结构体时就创建了变量\n",[33,9121,9122,9124,9126],{"class":35,"line":1466},[33,9123,40],{"class":39},[33,9125,44],{"class":43},[33,9127,48],{"class":47},[33,9129,9130],{"class":35,"line":1471},[33,9131,54],{"class":47},[33,9133,9134],{"class":35,"line":1477},[33,9135,9136],{"class":60},"    \u002F\u002F2.通过学生类型创建具体学生\n",[33,9138,9139],{"class":35,"line":1504},[33,9140,9141],{"class":60},"    \u002F\u002F2.1 struct Student s1;\n",[33,9143,9144,9147,9150],{"class":35,"line":1509},[33,9145,9146],{"class":39},"    struct",[33,9148,9149],{"class":43}," Student",[33,9151,9152],{"class":47}," s1;\n",[33,9154,9155],{"class":35,"line":1525},[33,9156,9157],{"class":60},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[33,9159,9160,9163,9165,9168],{"class":35,"line":1535},[33,9161,9162],{"class":47},"    s1.name",[33,9164,73],{"class":39},[33,9166,9167],{"class":119},"\"张三\"",[33,9169,80],{"class":47},[33,9171,9172,9175,9177,9179],{"class":35,"line":1540},[33,9173,9174],{"class":47},"    s1.age",[33,9176,73],{"class":39},[33,9178,2250],{"class":76},[33,9180,80],{"class":47},[33,9182,9183,9186,9188,9190],{"class":35,"line":4027},[33,9184,9185],{"class":47},"    s1.score",[33,9187,73],{"class":39},[33,9189,1869],{"class":76},[33,9191,80],{"class":47},[33,9193,9194],{"class":35,"line":4032},[33,9195,9196],{"class":60},"    \u002F\u002F输出结果\n",[33,9198,9200,9202,9204,9207,9209,9212,9214,9217,9219],{"class":35,"line":9199},37,[33,9201,113],{"class":47},[33,9203,116],{"class":39},[33,9205,9206],{"class":47},"s1.name",[33,9208,116],{"class":39},[33,9210,9211],{"class":47},"s1.age",[33,9213,116],{"class":39},[33,9215,9216],{"class":47},"s1.score",[33,9218,116],{"class":39},[33,9220,131],{"class":47},[33,9222,9224],{"class":35,"line":9223},38,[33,9225,160],{"emptyLinePlaceholder":159},[33,9227,9229],{"class":35,"line":9228},39,[33,9230,9231],{"class":60},"    \u002F\u002F2.2 struct Student s2={...}\n",[33,9233,9235,9237,9239,9242,9244,9246,9249,9251,9253,9255,9257],{"class":35,"line":9234},40,[33,9236,9146],{"class":39},[33,9238,9149],{"class":43},[33,9240,9241],{"class":47}," s2",[33,9243,73],{"class":39},[33,9245,698],{"class":47},[33,9247,9248],{"class":119},"\"王五\"",[33,9250,704],{"class":47},[33,9252,2250],{"class":76},[33,9254,704],{"class":47},[33,9256,1869],{"class":76},[33,9258,749],{"class":47},[33,9260,9262],{"class":35,"line":9261},41,[33,9263,160],{"emptyLinePlaceholder":159},[33,9265,9267],{"class":35,"line":9266},42,[33,9268,9269],{"class":60},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[33,9271,9273,9276,9278,9280],{"class":35,"line":9272},43,[33,9274,9275],{"class":47},"    s3.name",[33,9277,73],{"class":39},[33,9279,5080],{"class":119},[33,9281,80],{"class":47},[33,9283,9285,9288,9290,9292],{"class":35,"line":9284},44,[33,9286,9287],{"class":47},"    s3.age",[33,9289,73],{"class":39},[33,9291,2250],{"class":76},[33,9293,80],{"class":47},[33,9295,9297,9300,9302,9304],{"class":35,"line":9296},45,[33,9298,9299],{"class":47},"    s3.score",[33,9301,73],{"class":39},[33,9303,1045],{"class":76},[33,9305,80],{"class":47},[33,9307,9309],{"class":35,"line":9308},46,[33,9310,231],{"class":47},[14,9312,9313],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[18,9315,9317],{"id":9316},"_42结构体数组","4.2结构体数组",[14,9319,9320],{},"将自定义的结构体放入到数组中方便维护",[14,9322,9323,9324,9327],{},"语法：struct 结构体名 数组名",[33,9325,9326],{},"元素个数","={ {}，{},...{} };",[23,9329,9331],{"className":25,"code":9330,"language":27,"meta":28,"style":28},"#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",[30,9332,9333,9339,9349,9355,9360,9366,9370,9374,9380,9386,9390,9394,9402,9406,9411,9426,9430,9446,9462,9466,9471,9487,9502,9517,9522,9548,9552,9575,9579],{"__ignoreMap":28},[33,9334,9335,9337],{"class":35,"line":36},[33,9336,1131],{"class":39},[33,9338,1134],{"class":119},[33,9340,9341,9343,9345,9347],{"class":35,"line":51},[33,9342,1139],{"class":39},[33,9344,1142],{"class":39},[33,9346,1145],{"class":43},[33,9348,80],{"class":47},[33,9350,9351,9353],{"class":35,"line":57},[33,9352,1131],{"class":39},[33,9354,9000],{"class":119},[33,9356,9357],{"class":35,"line":64},[33,9358,9359],{"class":60},"\u002F\u002F1.定义结构体\n",[33,9361,9362,9364],{"class":35,"line":83},[33,9363,9010],{"class":39},[33,9365,9013],{"class":43},[33,9367,9368],{"class":35,"line":89},[33,9369,54],{"class":47},[33,9371,9372],{"class":35,"line":98},[33,9373,9036],{"class":47},[33,9375,9376,9378],{"class":35,"line":110},[33,9377,67],{"class":39},[33,9379,9048],{"class":47},[33,9381,9382,9384],{"class":35,"line":134},[33,9383,67],{"class":39},[33,9385,9060],{"class":47},[33,9387,9388],{"class":35,"line":156},[33,9389,160],{"emptyLinePlaceholder":159},[33,9391,9392],{"class":35,"line":163},[33,9393,749],{"class":47},[33,9395,9396,9398,9400],{"class":35,"line":169},[33,9397,40],{"class":39},[33,9399,44],{"class":43},[33,9401,48],{"class":47},[33,9403,9404],{"class":35,"line":175},[33,9405,54],{"class":47},[33,9407,9408],{"class":35,"line":181},[33,9409,9410],{"class":60},"    \u002F\u002F2.创建结构体数组\n",[33,9412,9413,9415,9417,9420,9422,9424],{"class":35,"line":196},[33,9414,9146],{"class":39},[33,9416,9149],{"class":43},[33,9418,9419],{"class":47}," stuArray[",[33,9421,707],{"class":76},[33,9423,693],{"class":47},[33,9425,6299],{"class":39},[33,9427,9428],{"class":35,"line":213},[33,9429,889],{"class":47},[33,9431,9432,9434,9436,9438,9440,9442,9444],{"class":35,"line":228},[33,9433,6308],{"class":47},[33,9435,9167],{"class":119},[33,9437,704],{"class":47},[33,9439,2250],{"class":76},[33,9441,704],{"class":47},[33,9443,457],{"class":76},[33,9445,6321],{"class":47},[33,9447,9448,9450,9452,9454,9456,9458,9460],{"class":35,"line":1345},[33,9449,6308],{"class":47},[33,9451,5080],{"class":119},[33,9453,704],{"class":47},[33,9455,2175],{"class":76},[33,9457,704],{"class":47},[33,9459,2175],{"class":76},[33,9461,231],{"class":47},[33,9463,9464],{"class":35,"line":1350},[33,9465,916],{"class":47},[33,9467,9468],{"class":35,"line":1359},[33,9469,9470],{"class":60},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[33,9472,9473,9476,9478,9481,9483,9485],{"class":35,"line":1364},[33,9474,9475],{"class":47},"    stuArray[",[33,9477,701],{"class":76},[33,9479,9480],{"class":47},"].name",[33,9482,73],{"class":39},[33,9484,5103],{"class":119},[33,9486,80],{"class":47},[33,9488,9489,9491,9493,9496,9498,9500],{"class":35,"line":1370},[33,9490,9475],{"class":47},[33,9492,701],{"class":76},[33,9494,9495],{"class":47},"].age",[33,9497,73],{"class":39},[33,9499,707],{"class":76},[33,9501,80],{"class":47},[33,9503,9504,9506,9508,9511,9513,9515],{"class":35,"line":1425},[33,9505,9475],{"class":47},[33,9507,701],{"class":76},[33,9509,9510],{"class":47},"].score",[33,9512,73],{"class":39},[33,9514,707],{"class":76},[33,9516,80],{"class":47},[33,9518,9519],{"class":35,"line":1438},[33,9520,9521],{"class":60},"    \u002F\u002F4.遍历结构体数组\n",[33,9523,9524,9526,9528,9530,9532,9534,9536,9538,9540,9542,9544,9546],{"class":35,"line":1451},[33,9525,857],{"class":39},[33,9527,860],{"class":47},[33,9529,40],{"class":39},[33,9531,865],{"class":47},[33,9533,73],{"class":39},[33,9535,766],{"class":76},[33,9537,872],{"class":47},[33,9539,875],{"class":39},[33,9541,707],{"class":76},[33,9543,872],{"class":47},[33,9545,811],{"class":39},[33,9547,884],{"class":47},[33,9549,9550],{"class":35,"line":1457},[33,9551,889],{"class":47},[33,9553,9554,9556,9558,9561,9563,9566,9568,9571,9573],{"class":35,"line":1466},[33,9555,894],{"class":47},[33,9557,116],{"class":39},[33,9559,9560],{"class":47},"stuArray[i].name",[33,9562,116],{"class":39},[33,9564,9565],{"class":47},"stuArray[i].age",[33,9567,116],{"class":39},[33,9569,9570],{"class":47},"stuArray[i].score",[33,9572,116],{"class":39},[33,9574,131],{"class":47},[33,9576,9577],{"class":35,"line":1471},[33,9578,916],{"class":47},[33,9580,9581],{"class":35,"line":1477},[33,9582,231],{"class":47},[18,9584,9586],{"id":9585},"_43结构体指针","4.3结构体指针",[14,9588,9589],{},"作用：通过指针访问结构体中的成员",[14,9591,9592],{},"利用操作符->可以通过结构体指针访问结构体属性",[23,9594,9596],{"className":25,"code":9595,"language":27,"meta":28,"style":28},"#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",[30,9597,9598,9604,9614,9620,9624,9630,9634,9638,9644,9650,9654,9662,9666,9671,9696,9701,9716,9721,9744],{"__ignoreMap":28},[33,9599,9600,9602],{"class":35,"line":36},[33,9601,1131],{"class":39},[33,9603,1134],{"class":119},[33,9605,9606,9608,9610,9612],{"class":35,"line":51},[33,9607,1139],{"class":39},[33,9609,1142],{"class":39},[33,9611,1145],{"class":43},[33,9613,80],{"class":47},[33,9615,9616,9618],{"class":35,"line":57},[33,9617,1131],{"class":39},[33,9619,9000],{"class":119},[33,9621,9622],{"class":35,"line":64},[33,9623,9359],{"class":60},[33,9625,9626,9628],{"class":35,"line":83},[33,9627,9010],{"class":39},[33,9629,9013],{"class":43},[33,9631,9632],{"class":35,"line":89},[33,9633,54],{"class":47},[33,9635,9636],{"class":35,"line":98},[33,9637,9036],{"class":47},[33,9639,9640,9642],{"class":35,"line":110},[33,9641,67],{"class":39},[33,9643,9048],{"class":47},[33,9645,9646,9648],{"class":35,"line":134},[33,9647,67],{"class":39},[33,9649,9060],{"class":47},[33,9651,9652],{"class":35,"line":156},[33,9653,749],{"class":47},[33,9655,9656,9658,9660],{"class":35,"line":163},[33,9657,40],{"class":39},[33,9659,44],{"class":43},[33,9661,48],{"class":47},[33,9663,9664],{"class":35,"line":169},[33,9665,54],{"class":47},[33,9667,9668],{"class":35,"line":175},[33,9669,9670],{"class":60},"    \u002F\u002F创建学生结构体变量\n",[33,9672,9673,9675,9677,9680,9682,9684,9686,9688,9690,9692,9694],{"class":35,"line":181},[33,9674,9146],{"class":39},[33,9676,9149],{"class":43},[33,9678,9679],{"class":47}," s",[33,9681,73],{"class":39},[33,9683,698],{"class":47},[33,9685,9167],{"class":119},[33,9687,704],{"class":47},[33,9689,2250],{"class":76},[33,9691,704],{"class":47},[33,9693,3163],{"class":76},[33,9695,749],{"class":47},[33,9697,9698],{"class":35,"line":196},[33,9699,9700],{"class":60},"    \u002F\u002F通过指针指向结构体变量\n",[33,9702,9703,9705,9707,9709,9711,9713],{"class":35,"line":213},[33,9704,9146],{"class":39},[33,9706,9149],{"class":43},[33,9708,303],{"class":39},[33,9710,14],{"class":47},[33,9712,104],{"class":39},[33,9714,9715],{"class":47},"s\n",[33,9717,9718],{"class":35,"line":228},[33,9719,9720],{"class":60},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[33,9722,9723,9725,9727,9730,9732,9735,9737,9740,9742],{"class":35,"line":1345},[33,9724,113],{"class":47},[33,9726,116],{"class":39},[33,9728,9729],{"class":47},"p->name",[33,9731,116],{"class":39},[33,9733,9734],{"class":47},"p->age",[33,9736,116],{"class":39},[33,9738,9739],{"class":47},"p->score",[33,9741,116],{"class":39},[33,9743,131],{"class":47},[33,9745,9746],{"class":35,"line":1350},[33,9747,231],{"class":47},[18,9749,9751],{"id":9750},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,9753,9754],{},"作用：结构体中的成员可以是另一个结构体",[14,9756,9757],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[23,9759,9761],{"className":25,"code":9760,"language":27,"meta":28,"style":28},"#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",[30,9762,9763,9769,9779,9785,9790,9798,9802,9806,9812,9818,9822,9827,9834,9838,9845,9849,9855,9860,9864,9872,9876,9881,9886,9891,9902,9914,9925,9938,9949,9960],{"__ignoreMap":28},[33,9764,9765,9767],{"class":35,"line":36},[33,9766,1131],{"class":39},[33,9768,1134],{"class":119},[33,9770,9771,9773,9775,9777],{"class":35,"line":51},[33,9772,1139],{"class":39},[33,9774,1142],{"class":39},[33,9776,1145],{"class":43},[33,9778,80],{"class":47},[33,9780,9781,9783],{"class":35,"line":57},[33,9782,1131],{"class":39},[33,9784,9000],{"class":119},[33,9786,9787],{"class":35,"line":64},[33,9788,9789],{"class":60},"\u002F\u002F定义学生结构体\n",[33,9791,9792,9794,9796],{"class":35,"line":83},[33,9793,9010],{"class":39},[33,9795,9149],{"class":43},[33,9797,4085],{"class":47},[33,9799,9800],{"class":35,"line":89},[33,9801,54],{"class":47},[33,9803,9804],{"class":35,"line":98},[33,9805,9036],{"class":47},[33,9807,9808,9810],{"class":35,"line":110},[33,9809,67],{"class":39},[33,9811,9048],{"class":47},[33,9813,9814,9816],{"class":35,"line":134},[33,9815,67],{"class":39},[33,9817,9060],{"class":47},[33,9819,9820],{"class":35,"line":156},[33,9821,231],{"class":47},[33,9823,9824],{"class":35,"line":163},[33,9825,9826],{"class":60},"\u002F\u002F定义老师结构体\n",[33,9828,9829,9831],{"class":35,"line":169},[33,9830,9010],{"class":39},[33,9832,9833],{"class":43}," Teacher\n",[33,9835,9836],{"class":35,"line":175},[33,9837,54],{"class":47},[33,9839,9840,9842],{"class":35,"line":181},[33,9841,67],{"class":39},[33,9843,9844],{"class":47}," id;\n",[33,9846,9847],{"class":35,"line":196},[33,9848,9036],{"class":47},[33,9850,9851,9853],{"class":35,"line":213},[33,9852,67],{"class":39},[33,9854,9048],{"class":47},[33,9856,9857],{"class":35,"line":228},[33,9858,9859],{"class":47},"    Student stu;\n",[33,9861,9862],{"class":35,"line":1345},[33,9863,231],{"class":47},[33,9865,9866,9868,9870],{"class":35,"line":1350},[33,9867,40],{"class":39},[33,9869,44],{"class":43},[33,9871,7365],{"class":47},[33,9873,9874],{"class":35,"line":1359},[33,9875,54],{"class":47},[33,9877,9878],{"class":35,"line":1364},[33,9879,9880],{"class":60},"    \u002F\u002F结构体嵌套结构体\n",[33,9882,9883],{"class":35,"line":1370},[33,9884,9885],{"class":60},"    \u002F\u002F创建老师\n",[33,9887,9888],{"class":35,"line":1425},[33,9889,9890],{"class":47},"    Teacher t;\n",[33,9892,9893,9896,9898,9900],{"class":35,"line":1438},[33,9894,9895],{"class":47},"    t.id",[33,9897,73],{"class":39},[33,9899,457],{"class":76},[33,9901,80],{"class":47},[33,9903,9904,9907,9909,9912],{"class":35,"line":1451},[33,9905,9906],{"class":47},"    t.name",[33,9908,73],{"class":39},[33,9910,9911],{"class":119},"\"老王\"",[33,9913,80],{"class":47},[33,9915,9916,9919,9921,9923],{"class":35,"line":1457},[33,9917,9918],{"class":47},"    t.age",[33,9920,73],{"class":39},[33,9922,2250],{"class":76},[33,9924,80],{"class":47},[33,9926,9927,9930,9932,9935],{"class":35,"line":1466},[33,9928,9929],{"class":47},"    t.stu.name",[33,9931,73],{"class":39},[33,9933,9934],{"class":119},"\"小王\"",[33,9936,9937],{"class":47},"；\n",[33,9939,9940,9943,9945,9947],{"class":35,"line":1471},[33,9941,9942],{"class":47},"    t.stu.age",[33,9944,73],{"class":39},[33,9946,1045],{"class":76},[33,9948,80],{"class":47},[33,9950,9951,9954,9956,9958],{"class":35,"line":1477},[33,9952,9953],{"class":47},"    t.stu.score",[33,9955,73],{"class":39},[33,9957,727],{"class":76},[33,9959,80],{"class":47},[33,9961,9962],{"class":35,"line":1504},[33,9963,231],{"class":47},[18,9965,9967],{"id":9966},"_45结构体做函数参数","4.5结构体做函数参数",[14,9969,9970],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[23,9972,9974],{"className":25,"code":9973,"language":27,"meta":28,"style":28},"#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",[30,9975,9976,9982,9992,9998,10004,10008,10012,10018,10024,10028,10033,10038,10055,10059,10092,10096,10101,10120,10124,10155,10159,10167,10171,10180,10192,10204,10216,10229,10237,10250,10262,10270],{"__ignoreMap":28},[33,9977,9978,9980],{"class":35,"line":36},[33,9979,1131],{"class":39},[33,9981,1134],{"class":119},[33,9983,9984,9986,9988,9990],{"class":35,"line":51},[33,9985,1139],{"class":39},[33,9987,1142],{"class":39},[33,9989,1145],{"class":43},[33,9991,80],{"class":47},[33,9993,9994,9996],{"class":35,"line":57},[33,9995,1131],{"class":39},[33,9997,9000],{"class":119},[33,9999,10000,10002],{"class":35,"line":64},[33,10001,9010],{"class":39},[33,10003,9013],{"class":43},[33,10005,10006],{"class":35,"line":83},[33,10007,54],{"class":47},[33,10009,10010],{"class":35,"line":89},[33,10011,9036],{"class":47},[33,10013,10014,10016],{"class":35,"line":98},[33,10015,67],{"class":39},[33,10017,9048],{"class":47},[33,10019,10020,10022],{"class":35,"line":110},[33,10021,67],{"class":39},[33,10023,9060],{"class":47},[33,10025,10026],{"class":35,"line":134},[33,10027,749],{"class":47},[33,10029,10030],{"class":35,"line":156},[33,10031,10032],{"class":60},"\u002F\u002F打印学生信息的函数\n",[33,10034,10035],{"class":35,"line":163},[33,10036,10037],{"class":60},"\u002F\u002F值传递\n",[33,10039,10040,10042,10045,10047,10049,10051,10053],{"class":35,"line":169},[33,10041,943],{"class":39},[33,10043,10044],{"class":43}," printStudent1",[33,10046,345],{"class":47},[33,10048,9010],{"class":39},[33,10050,9149],{"class":43},[33,10052,9679],{"class":955},[33,10054,884],{"class":47},[33,10056,10057],{"class":35,"line":175},[33,10058,54],{"class":47},[33,10060,10061,10063,10065,10068,10070,10073,10075,10078,10080,10082,10084,10087,10089],{"class":35,"line":181},[33,10062,314],{"class":47},[33,10064,116],{"class":39},[33,10066,10067],{"class":47}," s.name ",[33,10069,116],{"class":39},[33,10071,10072],{"class":119}," \" \"",[33,10074,2900],{"class":39},[33,10076,10077],{"class":47}," s.age ",[33,10079,116],{"class":39},[33,10081,10072],{"class":119},[33,10083,2900],{"class":39},[33,10085,10086],{"class":47}," s.score ",[33,10088,116],{"class":39},[33,10090,10091],{"class":47}," endl;\n",[33,10093,10094],{"class":35,"line":196},[33,10095,231],{"class":47},[33,10097,10098],{"class":35,"line":213},[33,10099,10100],{"class":60},"\u002F\u002F地址传递\n",[33,10102,10103,10105,10108,10110,10112,10114,10116,10118],{"class":35,"line":228},[33,10104,943],{"class":39},[33,10106,10107],{"class":43}," printStudent2",[33,10109,345],{"class":47},[33,10111,9010],{"class":39},[33,10113,9149],{"class":43},[33,10115,303],{"class":39},[33,10117,2295],{"class":955},[33,10119,884],{"class":47},[33,10121,10122],{"class":35,"line":1345},[33,10123,54],{"class":47},[33,10125,10126,10128,10130,10133,10135,10137,10139,10142,10144,10146,10148,10151,10153],{"class":35,"line":1350},[33,10127,314],{"class":47},[33,10129,116],{"class":39},[33,10131,10132],{"class":47}," s->name ",[33,10134,116],{"class":39},[33,10136,10072],{"class":119},[33,10138,2900],{"class":39},[33,10140,10141],{"class":47}," s->age ",[33,10143,116],{"class":39},[33,10145,10072],{"class":119},[33,10147,2900],{"class":39},[33,10149,10150],{"class":47}," s->score ",[33,10152,116],{"class":39},[33,10154,10091],{"class":47},[33,10156,10157],{"class":35,"line":1359},[33,10158,231],{"class":47},[33,10160,10161,10163,10165],{"class":35,"line":1364},[33,10162,40],{"class":39},[33,10164,44],{"class":43},[33,10166,48],{"class":47},[33,10168,10169],{"class":35,"line":1370},[33,10170,54],{"class":47},[33,10172,10173,10175,10177],{"class":35,"line":1425},[33,10174,9146],{"class":39},[33,10176,9149],{"class":43},[33,10178,10179],{"class":47}," s;\n",[33,10181,10182,10185,10187,10190],{"class":35,"line":1438},[33,10183,10184],{"class":47},"    s.name ",[33,10186,73],{"class":39},[33,10188,10189],{"class":119}," \"张三\"",[33,10191,80],{"class":47},[33,10193,10194,10197,10199,10202],{"class":35,"line":1451},[33,10195,10196],{"class":47},"    s.age ",[33,10198,73],{"class":39},[33,10200,10201],{"class":76}," 20",[33,10203,80],{"class":47},[33,10205,10206,10209,10211,10214],{"class":35,"line":1457},[33,10207,10208],{"class":47},"    s.score ",[33,10210,73],{"class":39},[33,10212,10213],{"class":76}," 85",[33,10215,80],{"class":47},[33,10217,10218,10220,10222,10225,10227],{"class":35,"line":1466},[33,10219,113],{"class":47},[33,10221,116],{"class":39},[33,10223,10224],{"class":119},"\"值传递:\"",[33,10226,116],{"class":39},[33,10228,131],{"class":47},[33,10230,10231,10234],{"class":35,"line":1471},[33,10232,10233],{"class":43},"    printStudent1",[33,10235,10236],{"class":47},"(s);\n",[33,10238,10239,10241,10243,10246,10248],{"class":35,"line":1477},[33,10240,113],{"class":47},[33,10242,116],{"class":39},[33,10244,10245],{"class":119},"\"地址传递:\"",[33,10247,116],{"class":39},[33,10249,131],{"class":47},[33,10251,10252,10255,10257,10259],{"class":35,"line":1504},[33,10253,10254],{"class":43},"    printStudent2",[33,10256,345],{"class":47},[33,10258,1062],{"class":39},[33,10260,10261],{"class":47},"s); \n",[33,10263,10264,10266,10268],{"class":35,"line":1509},[33,10265,5489],{"class":39},[33,10267,5492],{"class":76},[33,10269,80],{"class":47},[33,10271,10272],{"class":35,"line":1525},[33,10273,231],{"class":47},[14,10275,10276],{},"注意：",[561,10278,10279,10282],{},[564,10280,10281],{},"1.先定义结构体，不要在函数中写结构体的定义",[564,10283,10284],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[18,10286,10288],{"id":10287},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,10290,10291],{},"用const防止误操作",[23,10293,10295],{"className":25,"code":10294,"language":27,"meta":28,"style":28},"#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",[30,10296,10297,10303,10313,10319,10324,10328,10332,10338,10344,10348,10364,10368,10391,10395,10403,10407,10428,10435,10439],{"__ignoreMap":28},[33,10298,10299,10301],{"class":35,"line":36},[33,10300,1131],{"class":39},[33,10302,1134],{"class":119},[33,10304,10305,10307,10309,10311],{"class":35,"line":51},[33,10306,1139],{"class":39},[33,10308,1142],{"class":39},[33,10310,1145],{"class":43},[33,10312,80],{"class":47},[33,10314,10315,10317],{"class":35,"line":57},[33,10316,1131],{"class":39},[33,10318,9000],{"class":119},[33,10320,10321],{"class":35,"line":64},[33,10322,10323],{"class":47},"sctuct Student\n",[33,10325,10326],{"class":35,"line":83},[33,10327,54],{"class":47},[33,10329,10330],{"class":35,"line":89},[33,10331,9036],{"class":47},[33,10333,10334,10336],{"class":35,"line":98},[33,10335,67],{"class":39},[33,10337,9048],{"class":47},[33,10339,10340,10342],{"class":35,"line":110},[33,10341,67],{"class":39},[33,10343,9060],{"class":47},[33,10345,10346],{"class":35,"line":134},[33,10347,749],{"class":47},[33,10349,10350,10352,10355,10357,10360,10362],{"class":35,"line":156},[33,10351,943],{"class":39},[33,10353,10354],{"class":43}," printStudents",[33,10356,345],{"class":47},[33,10358,10359],{"class":43},"student",[33,10361,9679],{"class":955},[33,10363,884],{"class":47},[33,10365,10366],{"class":35,"line":163},[33,10367,54],{"class":47},[33,10369,10370,10372,10374,10377,10379,10382,10384,10387,10389],{"class":35,"line":169},[33,10371,113],{"class":47},[33,10373,116],{"class":39},[33,10375,10376],{"class":47},"s.name",[33,10378,116],{"class":39},[33,10380,10381],{"class":47},"s.age",[33,10383,116],{"class":39},[33,10385,10386],{"class":47},"s.score",[33,10388,116],{"class":39},[33,10390,131],{"class":47},[33,10392,10393],{"class":35,"line":175},[33,10394,231],{"class":47},[33,10396,10397,10399,10401],{"class":35,"line":181},[33,10398,40],{"class":39},[33,10400,44],{"class":43},[33,10402,7365],{"class":47},[33,10404,10405],{"class":35,"line":196},[33,10406,54],{"class":47},[33,10408,10409,10412,10414,10416,10418,10420,10422,10424,10426],{"class":35,"line":213},[33,10410,10411],{"class":47},"    Student s",[33,10413,73],{"class":39},[33,10415,698],{"class":47},[33,10417,9167],{"class":119},[33,10419,704],{"class":47},[33,10421,2250],{"class":76},[33,10423,704],{"class":47},[33,10425,2250],{"class":76},[33,10427,749],{"class":47},[33,10429,10430,10433],{"class":35,"line":228},[33,10431,10432],{"class":43},"    printStudent",[33,10434,10236],{"class":47},[33,10436,10437],{"class":35,"line":1345},[33,10438,160],{"emptyLinePlaceholder":159},[33,10440,10441],{"class":35,"line":1350},[33,10442,231],{"class":47},[14,10444,10276],{},[561,10446,10447,10450,10453],{},[564,10448,10449],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[564,10451,10452],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[564,10454,10455],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[23,10457,10459],{"className":25,"code":10458,"language":27,"meta":28,"style":28},"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",[30,10460,10461,10480,10484,10489,10509],{"__ignoreMap":28},[33,10462,10463,10465,10467,10469,10471,10474,10476,10478],{"class":35,"line":36},[33,10464,943],{"class":39},[33,10466,10354],{"class":43},[33,10468,345],{"class":47},[33,10470,588],{"class":39},[33,10472,10473],{"class":43}," student",[33,10475,303],{"class":39},[33,10477,2295],{"class":955},[33,10479,884],{"class":47},[33,10481,10482],{"class":35,"line":51},[33,10483,54],{"class":47},[33,10485,10486],{"class":35,"line":57},[33,10487,10488],{"class":60},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[33,10490,10491,10493,10495,10497,10499,10501,10503,10505,10507],{"class":35,"line":64},[33,10492,113],{"class":47},[33,10494,116],{"class":39},[33,10496,10376],{"class":47},[33,10498,116],{"class":39},[33,10500,10381],{"class":47},[33,10502,116],{"class":39},[33,10504,10386],{"class":47},[33,10506,116],{"class":39},[33,10508,131],{"class":47},[33,10510,10511],{"class":35,"line":83},[33,10512,231],{"class":47},[18,10514,10516],{"id":10515},"_47案例","4.7案例",[574,10518,10519],{},[564,10520,10521],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[23,10523,10525],{"className":25,"code":10524,"language":27,"meta":28,"style":28},"#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",[30,10526,10527,10533,10543,10549,10556,10560,10566,10570,10575,10581,10587,10591,10595,10601,10605,10610,10615,10628,10632,10637,10663,10667,10679,10706,10710,10722,10732,10736,10741,10770,10774,10786,10795,10822,10833,10843,10847,10851,10855,10860,10884,10888,10912,10916,10935,10961,10965,10990,11013,11037,11042,11047,11052,11061,11066,11072,11093,11099,11113,11119,11146,11155,11161,11169,11174],{"__ignoreMap":28},[33,10528,10529,10531],{"class":35,"line":36},[33,10530,1131],{"class":39},[33,10532,1134],{"class":119},[33,10534,10535,10537,10539,10541],{"class":35,"line":51},[33,10536,1139],{"class":39},[33,10538,1142],{"class":39},[33,10540,1145],{"class":43},[33,10542,80],{"class":47},[33,10544,10545,10547],{"class":35,"line":57},[33,10546,1131],{"class":39},[33,10548,9000],{"class":119},[33,10550,10551,10553],{"class":35,"line":64},[33,10552,1131],{"class":39},[33,10554,10555],{"class":119},"\u003Cctime>\n",[33,10557,10558],{"class":35,"line":83},[33,10559,9789],{"class":60},[33,10561,10562,10564],{"class":35,"line":89},[33,10563,9010],{"class":39},[33,10565,9013],{"class":43},[33,10567,10568],{"class":35,"line":98},[33,10569,54],{"class":47},[33,10571,10572],{"class":35,"line":110},[33,10573,10574],{"class":47},"    string sName;\n",[33,10576,10577,10579],{"class":35,"line":134},[33,10578,67],{"class":39},[33,10580,9048],{"class":47},[33,10582,10583,10585],{"class":35,"line":156},[33,10584,67],{"class":39},[33,10586,9060],{"class":47},[33,10588,10589],{"class":35,"line":163},[33,10590,749],{"class":47},[33,10592,10593],{"class":35,"line":169},[33,10594,9826],{"class":60},[33,10596,10597,10599],{"class":35,"line":175},[33,10598,9010],{"class":39},[33,10600,9833],{"class":43},[33,10602,10603],{"class":35,"line":181},[33,10604,54],{"class":47},[33,10606,10607],{"class":35,"line":196},[33,10608,10609],{"class":47},"    string tName;\n",[33,10611,10612],{"class":35,"line":213},[33,10613,10614],{"class":60},"    \u002F\u002F学生数组\n",[33,10616,10617,10619,10621,10624,10626],{"class":35,"line":228},[33,10618,9146],{"class":39},[33,10620,9149],{"class":43},[33,10622,10623],{"class":47}," sArray[",[33,10625,722],{"class":76},[33,10627,1309],{"class":47},[33,10629,10630],{"class":35,"line":1345},[33,10631,749],{"class":47},[33,10633,10634],{"class":35,"line":1350},[33,10635,10636],{"class":60},"\u002F\u002F给老师和学生赋值的函数\n",[33,10638,10639,10641,10644,10646,10648,10651,10654,10657,10659,10661],{"class":35,"line":1359},[33,10640,943],{"class":39},[33,10642,10643],{"class":43}," allocateSpace",[33,10645,345],{"class":47},[33,10647,9010],{"class":39},[33,10649,10650],{"class":43}," Teacher",[33,10652,10653],{"class":955}," tArray",[33,10655,10656],{"class":47},"[],",[33,10658,40],{"class":39},[33,10660,1169],{"class":955},[33,10662,884],{"class":47},[33,10664,10665],{"class":35,"line":1364},[33,10666,54],{"class":47},[33,10668,10669,10672,10674,10677],{"class":35,"line":1370},[33,10670,10671],{"class":47},"    string nameSeed",[33,10673,73],{"class":39},[33,10675,10676],{"class":119},"\"ABCDE\"",[33,10678,80],{"class":47},[33,10680,10681,10683,10685,10687,10690,10692,10694,10697,10699,10702,10704],{"class":35,"line":1425},[33,10682,857],{"class":39},[33,10684,860],{"class":47},[33,10686,40],{"class":39},[33,10688,10689],{"class":47}," i ",[33,10691,73],{"class":39},[33,10693,5492],{"class":76},[33,10695,10696],{"class":47},"; i ",[33,10698,875],{"class":39},[33,10700,10701],{"class":47}," len; i",[33,10703,811],{"class":39},[33,10705,884],{"class":47},[33,10707,10708],{"class":35,"line":1438},[33,10709,889],{"class":47},[33,10711,10712,10715,10717,10720],{"class":35,"line":1451},[33,10713,10714],{"class":47},"        tArray[i].tName ",[33,10716,73],{"class":39},[33,10718,10719],{"class":119}," \"Teacher_\"",[33,10721,80],{"class":47},[33,10723,10724,10726,10729],{"class":35,"line":1457},[33,10725,10714],{"class":47},[33,10727,10728],{"class":39},"+=",[33,10730,10731],{"class":47},"nameSeed[i];\n",[33,10733,10734],{"class":35,"line":1466},[33,10735,160],{"emptyLinePlaceholder":159},[33,10737,10738],{"class":35,"line":1471},[33,10739,10740],{"class":60},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[33,10742,10743,10745,10747,10749,10752,10754,10756,10759,10761,10763,10766,10768],{"class":35,"line":1477},[33,10744,1216],{"class":39},[33,10746,860],{"class":47},[33,10748,40],{"class":39},[33,10750,10751],{"class":47}," j ",[33,10753,73],{"class":39},[33,10755,5492],{"class":76},[33,10757,10758],{"class":47},"; j ",[33,10760,875],{"class":39},[33,10762,3571],{"class":76},[33,10764,10765],{"class":47},"; j",[33,10767,811],{"class":39},[33,10769,884],{"class":47},[33,10771,10772],{"class":35,"line":1504},[33,10773,1254],{"class":47},[33,10775,10776,10779,10781,10784],{"class":35,"line":1509},[33,10777,10778],{"class":47},"            tArray[i].sArray[j].sName ",[33,10780,73],{"class":39},[33,10782,10783],{"class":119}," \"Student_\"",[33,10785,80],{"class":47},[33,10787,10788,10790,10792],{"class":35,"line":1525},[33,10789,10778],{"class":47},[33,10791,10728],{"class":39},[33,10793,10794],{"class":47}," nameSeed[j];\n",[33,10796,10797,10800,10803,10805,10807,10809,10811,10813,10815,10817,10819],{"class":35,"line":1535},[33,10798,10799],{"class":39},"            int",[33,10801,10802],{"class":47}," random",[33,10804,73],{"class":39},[33,10806,3842],{"class":43},[33,10808,3845],{"class":47},[33,10810,1939],{"class":39},[33,10812,2505],{"class":76},[33,10814,1271],{"class":39},[33,10816,2007],{"class":76},[33,10818,460],{"class":47},[33,10820,10821],{"class":60},"\u002F\u002F40~99\n",[33,10823,10824,10827,10829,10831],{"class":35,"line":1540},[33,10825,10826],{"class":47},"            tArray[i].sArray[j].age ",[33,10828,73],{"class":39},[33,10830,10201],{"class":76},[33,10832,80],{"class":47},[33,10834,10835,10838,10840],{"class":35,"line":4027},[33,10836,10837],{"class":47},"            tArray[i].sArray[j].score ",[33,10839,73],{"class":39},[33,10841,10842],{"class":47}," random;\n",[33,10844,10845],{"class":35,"line":4032},[33,10846,1334],{"class":47},[33,10848,10849],{"class":35,"line":9199},[33,10850,916],{"class":47},[33,10852,10853],{"class":35,"line":9223},[33,10854,231],{"class":47},[33,10856,10857],{"class":35,"line":9228},[33,10858,10859],{"class":60},"\u002F\u002F打印所有信息的函数\n",[33,10861,10862,10864,10867,10869,10871,10873,10875,10878,10880,10882],{"class":35,"line":9234},[33,10863,943],{"class":39},[33,10865,10866],{"class":43}," printInfo",[33,10868,345],{"class":47},[33,10870,9010],{"class":39},[33,10872,10650],{"class":43},[33,10874,10653],{"class":955},[33,10876,10877],{"class":47},"[], ",[33,10879,40],{"class":39},[33,10881,1169],{"class":955},[33,10883,884],{"class":47},[33,10885,10886],{"class":35,"line":9261},[33,10887,54],{"class":47},[33,10889,10890,10892,10894,10896,10898,10900,10902,10904,10906,10908,10910],{"class":35,"line":9266},[33,10891,857],{"class":39},[33,10893,860],{"class":47},[33,10895,40],{"class":39},[33,10897,10689],{"class":47},[33,10899,73],{"class":39},[33,10901,5492],{"class":76},[33,10903,10696],{"class":47},[33,10905,875],{"class":39},[33,10907,10701],{"class":47},[33,10909,811],{"class":39},[33,10911,884],{"class":47},[33,10913,10914],{"class":35,"line":9272},[33,10915,889],{"class":47},[33,10917,10918,10921,10923,10926,10928,10931,10933],{"class":35,"line":9284},[33,10919,10920],{"class":47},"        cout ",[33,10922,116],{"class":39},[33,10924,10925],{"class":119}," \"Teacher: \"",[33,10927,2900],{"class":39},[33,10929,10930],{"class":47}," tArray[i].tName ",[33,10932,116],{"class":39},[33,10934,10091],{"class":47},[33,10936,10937,10939,10941,10943,10945,10947,10949,10951,10953,10955,10957,10959],{"class":35,"line":9296},[33,10938,1216],{"class":39},[33,10940,860],{"class":47},[33,10942,40],{"class":39},[33,10944,10751],{"class":47},[33,10946,73],{"class":39},[33,10948,5492],{"class":76},[33,10950,10758],{"class":47},[33,10952,875],{"class":39},[33,10954,3571],{"class":76},[33,10956,10765],{"class":47},[33,10958,811],{"class":39},[33,10960,884],{"class":47},[33,10962,10963],{"class":35,"line":9308},[33,10964,1254],{"class":47},[33,10966,10968,10971,10973,10976,10978,10981,10983,10986,10988],{"class":35,"line":10967},47,[33,10969,10970],{"class":47},"            cout ",[33,10972,116],{"class":39},[33,10974,10975],{"class":119}," \"",[33,10977,2693],{"class":76},[33,10979,10980],{"class":119},"Student: \"",[33,10982,2900],{"class":39},[33,10984,10985],{"class":47}," tArray[i].sArray[j].sName",[33,10987,116],{"class":39},[33,10989,131],{"class":47},[33,10991,10993,10995,10997,10999,11001,11004,11006,11009,11011],{"class":35,"line":10992},48,[33,10994,10970],{"class":47},[33,10996,116],{"class":39},[33,10998,10975],{"class":119},[33,11000,2693],{"class":76},[33,11002,11003],{"class":119},"Age: \"",[33,11005,2900],{"class":39},[33,11007,11008],{"class":47}," tArray[i].sArray[j].age ",[33,11010,116],{"class":39},[33,11012,10091],{"class":47},[33,11014,11016,11018,11020,11022,11024,11027,11029,11032,11034],{"class":35,"line":11015},49,[33,11017,10970],{"class":47},[33,11019,116],{"class":39},[33,11021,10975],{"class":119},[33,11023,2693],{"class":76},[33,11025,11026],{"class":119},"Score: \"",[33,11028,2900],{"class":39},[33,11030,11031],{"class":47}," tArray[i].sArray[j].score ",[33,11033,116],{"class":39},[33,11035,11036],{"class":47}," endl;   \n",[33,11038,11040],{"class":35,"line":11039},50,[33,11041,1334],{"class":47},[33,11043,11045],{"class":35,"line":11044},51,[33,11046,916],{"class":47},[33,11048,11050],{"class":35,"line":11049},52,[33,11051,231],{"class":47},[33,11053,11055,11057,11059],{"class":35,"line":11054},53,[33,11056,40],{"class":39},[33,11058,44],{"class":43},[33,11060,48],{"class":47},[33,11062,11064],{"class":35,"line":11063},54,[33,11065,54],{"class":47},[33,11067,11069],{"class":35,"line":11068},55,[33,11070,11071],{"class":60},"    \u002F\u002F随机数种子\n",[33,11073,11075,11077,11079,11081,11083,11085,11087,11089,11091],{"class":35,"line":11074},56,[33,11076,3794],{"class":43},[33,11078,3797],{"class":47},[33,11080,3800],{"class":39},[33,11082,591],{"class":39},[33,11084,352],{"class":47},[33,11086,3807],{"class":43},[33,11088,345],{"class":47},[33,11090,439],{"class":76},[33,11092,3814],{"class":47},[33,11094,11096],{"class":35,"line":11095},57,[33,11097,11098],{"class":60},"    \u002F\u002F1.创建3名老师的数组\n",[33,11100,11102,11104,11106,11109,11111],{"class":35,"line":11101},58,[33,11103,9146],{"class":39},[33,11105,10650],{"class":43},[33,11107,11108],{"class":47}," tArray[",[33,11110,712],{"class":76},[33,11112,1309],{"class":47},[33,11114,11116],{"class":35,"line":11115},59,[33,11117,11118],{"class":60},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[33,11120,11122,11124,11127,11129,11132,11135,11137,11139,11142,11144],{"class":35,"line":11121},60,[33,11123,67],{"class":39},[33,11125,11126],{"class":47}," len ",[33,11128,73],{"class":39},[33,11130,11131],{"class":39}," sizeof",[33,11133,11134],{"class":47},"(tArray) ",[33,11136,2184],{"class":39},[33,11138,11131],{"class":39},[33,11140,11141],{"class":47},"(tArray[",[33,11143,766],{"class":76},[33,11145,5258],{"class":47},[33,11147,11149,11152],{"class":35,"line":11148},61,[33,11150,11151],{"class":43},"    allocateSpace",[33,11153,11154],{"class":47},"(tArray, len);\n",[33,11156,11158],{"class":35,"line":11157},62,[33,11159,11160],{"class":60},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[33,11162,11164,11167],{"class":35,"line":11163},63,[33,11165,11166],{"class":43},"    printInfo",[33,11168,11154],{"class":47},[33,11170,11172],{"class":35,"line":11171},64,[33,11173,160],{"emptyLinePlaceholder":159},[33,11175,11177],{"class":35,"line":11176},65,[33,11178,231],{"class":47},[574,11180,11181],{"start":51},[564,11182,11183,11186],{},[480,11184,11185],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,11188,11189],{},"五名英雄信息如下：",[23,11191,11195],{"className":11192,"code":11193,"language":11194,"meta":28,"style":28},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[30,11196,11197,11215,11232,11249,11266],{"__ignoreMap":28},[33,11198,11199,11201,11204,11206,11208,11210,11213],{"class":35,"line":36},[33,11200,6308],{"class":47},[33,11202,11203],{"class":119},"\"刘备\"",[33,11205,704],{"class":47},[33,11207,2374],{"class":76},[33,11209,704],{"class":47},[33,11211,11212],{"class":119},"\"男\"",[33,11214,6321],{"class":47},[33,11216,11217,11219,11222,11224,11226,11228,11230],{"class":35,"line":51},[33,11218,6308],{"class":47},[33,11220,11221],{"class":119},"\"关羽\"",[33,11223,704],{"class":47},[33,11225,2349],{"class":76},[33,11227,704],{"class":47},[33,11229,11212],{"class":119},[33,11231,6321],{"class":47},[33,11233,11234,11236,11239,11241,11243,11245,11247],{"class":35,"line":57},[33,11235,6308],{"class":47},[33,11237,11238],{"class":119},"\"张飞\"",[33,11240,704],{"class":47},[33,11242,1045],{"class":76},[33,11244,704],{"class":47},[33,11246,11212],{"class":119},[33,11248,6321],{"class":47},[33,11250,11251,11253,11256,11258,11260,11262,11264],{"class":35,"line":64},[33,11252,6308],{"class":47},[33,11254,11255],{"class":119},"\"赵云\"",[33,11257,704],{"class":47},[33,11259,2324],{"class":76},[33,11261,704],{"class":47},[33,11263,11212],{"class":119},[33,11265,6321],{"class":47},[33,11267,11268,11270,11273,11275,11277,11279,11282],{"class":35,"line":83},[33,11269,6308],{"class":47},[33,11271,11272],{"class":119},"\"貂蝉\"",[33,11274,704],{"class":47},[33,11276,2275],{"class":76},[33,11278,704],{"class":47},[33,11280,11281],{"class":119},"\"女\"",[33,11283,6321],{"class":47},[14,11285,11286],{},"代码：",[23,11288,11290],{"className":25,"code":11289,"language":27,"meta":28,"style":28},"#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",[30,11291,11292,11298,11308,11314,11321,11325,11329,11335,11340,11344,11349,11372,11376,11401,11405,11438,11443,11472,11477,11492,11518,11538,11543,11548,11552,11556,11561,11583,11587,11611,11615,11677,11681,11685,11693,11697,11702,11713,11717,11733,11749,11765,11781,11797,11801,11821,11843,11848,11861,11868,11873,11879,11884,11897,11903],{"__ignoreMap":28},[33,11293,11294,11296],{"class":35,"line":36},[33,11295,1131],{"class":39},[33,11297,1134],{"class":119},[33,11299,11300,11302,11304,11306],{"class":35,"line":51},[33,11301,1139],{"class":39},[33,11303,1142],{"class":39},[33,11305,1145],{"class":43},[33,11307,80],{"class":47},[33,11309,11310,11312],{"class":35,"line":57},[33,11311,1131],{"class":39},[33,11313,9000],{"class":119},[33,11315,11316,11318],{"class":35,"line":64},[33,11317,9010],{"class":39},[33,11319,11320],{"class":43}," Sanguo\n",[33,11322,11323],{"class":35,"line":83},[33,11324,54],{"class":47},[33,11326,11327],{"class":35,"line":89},[33,11328,9036],{"class":47},[33,11330,11331,11333],{"class":35,"line":98},[33,11332,67],{"class":39},[33,11334,9048],{"class":47},[33,11336,11337],{"class":35,"line":110},[33,11338,11339],{"class":47},"    string gender;\n",[33,11341,11342],{"class":35,"line":134},[33,11343,749],{"class":47},[33,11345,11346],{"class":35,"line":156},[33,11347,11348],{"class":60},"\u002F\u002F定义排序函数\n",[33,11350,11351,11353,11355,11357,11360,11362,11364,11366,11368,11370],{"class":35,"line":163},[33,11352,943],{"class":39},[33,11354,1154],{"class":43},[33,11356,345],{"class":47},[33,11358,11359],{"class":43},"Sanguo",[33,11361,303],{"class":39},[33,11363,2295],{"class":955},[33,11365,704],{"class":47},[33,11367,40],{"class":39},[33,11369,1169],{"class":955},[33,11371,884],{"class":47},[33,11373,11374],{"class":35,"line":169},[33,11375,54],{"class":47},[33,11377,11378,11380,11382,11384,11386,11388,11390,11392,11394,11397,11399],{"class":35,"line":175},[33,11379,857],{"class":39},[33,11381,345],{"class":47},[33,11383,40],{"class":39},[33,11385,865],{"class":47},[33,11387,73],{"class":39},[33,11389,766],{"class":76},[33,11391,872],{"class":47},[33,11393,875],{"class":39},[33,11395,11396],{"class":47},"len;i",[33,11398,811],{"class":39},[33,11400,884],{"class":47},[33,11402,11403],{"class":35,"line":181},[33,11404,889],{"class":47},[33,11406,11407,11410,11412,11414,11416,11418,11420,11422,11424,11426,11428,11430,11432,11434,11436],{"class":35,"line":196},[33,11408,11409],{"class":39},"     for",[33,11411,860],{"class":47},[33,11413,40],{"class":39},[33,11415,1223],{"class":47},[33,11417,73],{"class":39},[33,11419,766],{"class":76},[33,11421,1230],{"class":47},[33,11423,875],{"class":39},[33,11425,1196],{"class":47},[33,11427,1199],{"class":39},[33,11429,701],{"class":76},[33,11431,1199],{"class":39},[33,11433,4952],{"class":47},[33,11435,811],{"class":39},[33,11437,884],{"class":47},[33,11439,11440],{"class":35,"line":213},[33,11441,11442],{"class":47},"     {\n",[33,11444,11445,11448,11451,11453,11456,11458,11461,11463,11465,11467,11469],{"class":35,"line":228},[33,11446,11447],{"class":39},"         if",[33,11449,11450],{"class":47}," ((s",[33,11452,1271],{"class":39},[33,11454,11455],{"class":47},"j)->age ",[33,11457,1265],{"class":39},[33,11459,11460],{"class":47}," (s",[33,11462,1271],{"class":39},[33,11464,2069],{"class":47},[33,11466,1271],{"class":39},[33,11468,701],{"class":76},[33,11470,11471],{"class":47},")->age)\n",[33,11473,11474],{"class":35,"line":1345},[33,11475,11476],{"class":47},"         {\n",[33,11478,11479,11482,11484,11487,11489],{"class":35,"line":1350},[33,11480,11481],{"class":47},"             Sanguo temp",[33,11483,980],{"class":39},[33,11485,11486],{"class":47},"(s",[33,11488,1271],{"class":39},[33,11490,11491],{"class":47},"j);\n",[33,11493,11494,11497,11499,11501,11504,11506,11508,11510,11512,11514,11516],{"class":35,"line":1359},[33,11495,11496],{"class":39},"             *",[33,11498,11486],{"class":47},[33,11500,1271],{"class":39},[33,11502,11503],{"class":47},"j)",[33,11505,980],{"class":39},[33,11507,11486],{"class":47},[33,11509,1271],{"class":39},[33,11511,2069],{"class":47},[33,11513,1271],{"class":39},[33,11515,701],{"class":76},[33,11517,4130],{"class":47},[33,11519,11520,11522,11524,11526,11528,11530,11532,11534,11536],{"class":35,"line":1364},[33,11521,11496],{"class":39},[33,11523,11486],{"class":47},[33,11525,1271],{"class":39},[33,11527,2069],{"class":47},[33,11529,1271],{"class":39},[33,11531,701],{"class":76},[33,11533,352],{"class":47},[33,11535,73],{"class":39},[33,11537,1005],{"class":47},[33,11539,11540],{"class":35,"line":1370},[33,11541,11542],{"class":47},"         }\n",[33,11544,11545],{"class":35,"line":1425},[33,11546,11547],{"class":47},"     }\n",[33,11549,11550],{"class":35,"line":1438},[33,11551,916],{"class":47},[33,11553,11554],{"class":35,"line":1451},[33,11555,231],{"class":47},[33,11557,11558],{"class":35,"line":1457},[33,11559,11560],{"class":60},"\u002F\u002F定义打印函数\n",[33,11562,11563,11565,11567,11569,11571,11573,11575,11577,11579,11581],{"class":35,"line":1466},[33,11564,943],{"class":39},[33,11566,10866],{"class":43},[33,11568,345],{"class":47},[33,11570,11359],{"class":43},[33,11572,303],{"class":39},[33,11574,2295],{"class":955},[33,11576,704],{"class":47},[33,11578,40],{"class":39},[33,11580,1169],{"class":955},[33,11582,884],{"class":47},[33,11584,11585],{"class":35,"line":1471},[33,11586,54],{"class":47},[33,11588,11589,11591,11593,11595,11597,11599,11601,11603,11605,11607,11609],{"class":35,"line":1477},[33,11590,857],{"class":39},[33,11592,860],{"class":47},[33,11594,40],{"class":39},[33,11596,865],{"class":47},[33,11598,73],{"class":39},[33,11600,766],{"class":76},[33,11602,872],{"class":47},[33,11604,875],{"class":39},[33,11606,11396],{"class":47},[33,11608,811],{"class":39},[33,11610,884],{"class":47},[33,11612,11613],{"class":35,"line":1504},[33,11614,889],{"class":47},[33,11616,11617,11619,11621,11623,11625,11628,11630,11632,11634,11637,11639,11641,11643,11646,11648,11650,11652,11655,11657,11659,11661,11664,11666,11668,11670,11673,11675],{"class":35,"line":1509},[33,11618,894],{"class":47},[33,11620,116],{"class":39},[33,11622,1866],{"class":119},[33,11624,2693],{"class":76},[33,11626,11627],{"class":119},"姓名：\"",[33,11629,116],{"class":39},[33,11631,11486],{"class":47},[33,11633,1271],{"class":39},[33,11635,11636],{"class":47},"i)->name",[33,11638,116],{"class":39},[33,11640,1866],{"class":119},[33,11642,2693],{"class":76},[33,11644,11645],{"class":119},"年龄：\"",[33,11647,116],{"class":39},[33,11649,11486],{"class":47},[33,11651,1271],{"class":39},[33,11653,11654],{"class":47},"i)->age",[33,11656,116],{"class":39},[33,11658,1866],{"class":119},[33,11660,2693],{"class":76},[33,11662,11663],{"class":119},"性别：\"",[33,11665,116],{"class":39},[33,11667,11486],{"class":47},[33,11669,1271],{"class":39},[33,11671,11672],{"class":47},"i)->gender",[33,11674,116],{"class":39},[33,11676,131],{"class":47},[33,11678,11679],{"class":35,"line":1525},[33,11680,916],{"class":47},[33,11682,11683],{"class":35,"line":1535},[33,11684,231],{"class":47},[33,11686,11687,11689,11691],{"class":35,"line":1540},[33,11688,40],{"class":39},[33,11690,44],{"class":43},[33,11692,48],{"class":47},[33,11694,11695],{"class":35,"line":4027},[33,11696,54],{"class":47},[33,11698,11699],{"class":35,"line":4032},[33,11700,11701],{"class":60},"    \u002F\u002F定义结构体变量\n",[33,11703,11704,11707,11709,11711],{"class":35,"line":9199},[33,11705,11706],{"class":47},"    Sanguo s1[",[33,11708,722],{"class":76},[33,11710,693],{"class":47},[33,11712,6299],{"class":39},[33,11714,11715],{"class":35,"line":9223},[33,11716,889],{"class":47},[33,11718,11719,11721,11723,11725,11727,11729,11731],{"class":35,"line":9228},[33,11720,6308],{"class":47},[33,11722,11203],{"class":119},[33,11724,704],{"class":47},[33,11726,2374],{"class":76},[33,11728,704],{"class":47},[33,11730,11212],{"class":119},[33,11732,6321],{"class":47},[33,11734,11735,11737,11739,11741,11743,11745,11747],{"class":35,"line":9234},[33,11736,6308],{"class":47},[33,11738,11221],{"class":119},[33,11740,704],{"class":47},[33,11742,2349],{"class":76},[33,11744,704],{"class":47},[33,11746,11212],{"class":119},[33,11748,6321],{"class":47},[33,11750,11751,11753,11755,11757,11759,11761,11763],{"class":35,"line":9261},[33,11752,6308],{"class":47},[33,11754,11238],{"class":119},[33,11756,704],{"class":47},[33,11758,1045],{"class":76},[33,11760,704],{"class":47},[33,11762,11212],{"class":119},[33,11764,6321],{"class":47},[33,11766,11767,11769,11771,11773,11775,11777,11779],{"class":35,"line":9266},[33,11768,6308],{"class":47},[33,11770,11255],{"class":119},[33,11772,704],{"class":47},[33,11774,2324],{"class":76},[33,11776,704],{"class":47},[33,11778,11212],{"class":119},[33,11780,6321],{"class":47},[33,11782,11783,11785,11787,11789,11791,11793,11795],{"class":35,"line":9272},[33,11784,6308],{"class":47},[33,11786,11272],{"class":119},[33,11788,704],{"class":47},[33,11790,2275],{"class":76},[33,11792,704],{"class":47},[33,11794,11281],{"class":119},[33,11796,6321],{"class":47},[33,11798,11799],{"class":35,"line":9284},[33,11800,6342],{"class":47},[33,11802,11803,11805,11807,11809,11812,11814,11817,11819],{"class":35,"line":9296},[33,11804,67],{"class":39},[33,11806,1169],{"class":47},[33,11808,5602],{"class":39},[33,11810,11811],{"class":47},"(s1)",[33,11813,5608],{"class":39},[33,11815,11816],{"class":47},"(s1[",[33,11818,766],{"class":76},[33,11820,5258],{"class":47},[33,11822,11823,11826,11828,11831,11833,11836,11839,11841],{"class":35,"line":9308},[33,11824,11825],{"class":47},"    Sanguo ",[33,11827,2057],{"class":39},[33,11829,11830],{"class":47},"s ",[33,11832,73],{"class":39},[33,11834,11835],{"class":39}," &",[33,11837,11838],{"class":47},"s1[",[33,11840,766],{"class":76},[33,11842,1309],{"class":47},[33,11844,11845],{"class":35,"line":10967},[33,11846,11847],{"class":60},"    \u002F\u002F排序前：\n",[33,11849,11850,11852,11854,11857,11859],{"class":35,"line":10992},[33,11851,314],{"class":47},[33,11853,116],{"class":39},[33,11855,11856],{"class":119}," \"排序前：\"",[33,11858,2900],{"class":39},[33,11860,10091],{"class":47},[33,11862,11863,11865],{"class":35,"line":11015},[33,11864,11166],{"class":43},[33,11866,11867],{"class":47},"(s,len);\n",[33,11869,11870],{"class":35,"line":11039},[33,11871,11872],{"class":60},"    \u002F\u002F调用排序函数\n",[33,11874,11875,11877],{"class":35,"line":11044},[33,11876,1460],{"class":43},[33,11878,11867],{"class":47},[33,11880,11881],{"class":35,"line":11049},[33,11882,11883],{"class":60},"    \u002F\u002F排序后\n",[33,11885,11886,11888,11890,11893,11895],{"class":35,"line":11054},[33,11887,314],{"class":47},[33,11889,116],{"class":39},[33,11891,11892],{"class":119}," \"排序后：\"",[33,11894,2900],{"class":39},[33,11896,10091],{"class":47},[33,11898,11899,11901],{"class":35,"line":11063},[33,11900,11166],{"class":43},[33,11902,11867],{"class":47},[33,11904,11905],{"class":35,"line":11068},[33,11906,231],{"class":47},[14,11908,11909,11910,11912],{},"注意：使用指针时直接用传首地址**&s",[33,11911,766],{},"**",[1544,11914,11915],{},"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":28,"searchDepth":51,"depth":51,"links":11917},[11918,11919,11920,11921,11922,11923,11924],{"id":8954,"depth":51,"text":8955},{"id":9316,"depth":51,"text":9317},{"id":9585,"depth":51,"text":9586},{"id":9750,"depth":51,"text":9751},{"id":9966,"depth":51,"text":9967},{"id":10287,"depth":51,"text":10288},{"id":10515,"depth":51,"text":10516},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8943,"description":8951},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11931,"title":11932,"body":11933,"description":28,"extension":1557,"meta":13276,"navigation":159,"path":13277,"seo":13278,"stem":13279,"__hash__":13280},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11934,"toc":13270},[11935,11938,11942,11948,11962,11967,11970,11974,11981,11987,11990,11997,12003,12008,12011,12014,12017,12581,12584,12598,12602,12607,12623,12763,12766,12772,12775,12780,12788,12896,12899,12904,12907,12912,12915,12921,12924,13267],[10,11936,11932],{"id":11937},"_5程序内存模型",[18,11939,11941],{"id":11940},"_51内存分区模型","5.1内存分区模型",[14,11943,11944,11945],{},"C++程序在执行时，将内存大方向划分为",[480,11946,11947],{},"4个区域",[561,11949,11950,11953,11956,11959],{},[564,11951,11952],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[564,11954,11955],{},"全局区：存放全局变量和静态变量以及常量",[564,11957,11958],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[564,11960,11961],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11963,11964],{},[480,11965,11966],{},"内存四区意义：",[14,11968,11969],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[1599,11971,11973],{"id":11972},"_511程序运行前","5.1.1程序运行前",[14,11975,11976,11977,11980],{},"​\t在程序编译后，生成了exe可执行程序，",[480,11978,11979],{},"未执行该程序前","分为两个区域",[14,11982,11983,11984],{},"​\t",[480,11985,11986],{},"代码区：",[14,11988,11989],{},"​\t\t存放 CPU 执行的机器指令",[14,11991,11992,11993,11996],{},"​\t\t代码区是",[480,11994,11995],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11998,11992,11999,12002],{},[480,12000,12001],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,12004,11983,12005],{},[480,12006,12007],{},"全局区：",[14,12009,12010],{},"​\t\t全局变量和静态变量存放在此.",[14,12012,12013],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,12015,12016],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[23,12018,12020],{"className":25,"code":12019,"language":27,"meta":28,"style":28},"\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",[30,12021,12022,12027,12040,12053,12057,12062,12077,12092,12096,12105,12109,12114,12127,12140,12144,12149,12175,12201,12205,12232,12258,12262,12267,12283,12298,12302,12328,12354,12358,12383,12408,12412,12438,12464,12468,12484,12499,12525,12551,12555,12565,12569,12577],{"__ignoreMap":28},[33,12023,12024],{"class":35,"line":36},[33,12025,12026],{"class":60},"\u002F\u002F全局变量\n",[33,12028,12029,12031,12034,12036,12038],{"class":35,"line":51},[33,12030,40],{"class":39},[33,12032,12033],{"class":47}," g_a ",[33,12035,73],{"class":39},[33,12037,3461],{"class":76},[33,12039,80],{"class":47},[33,12041,12042,12044,12047,12049,12051],{"class":35,"line":57},[33,12043,40],{"class":39},[33,12045,12046],{"class":47}," g_b ",[33,12048,73],{"class":39},[33,12050,3461],{"class":76},[33,12052,80],{"class":47},[33,12054,12055],{"class":35,"line":64},[33,12056,160],{"emptyLinePlaceholder":159},[33,12058,12059],{"class":35,"line":83},[33,12060,12061],{"class":60},"\u002F\u002F全局常量\n",[33,12063,12064,12066,12068,12071,12073,12075],{"class":35,"line":89},[33,12065,588],{"class":39},[33,12067,591],{"class":39},[33,12069,12070],{"class":47}," c_g_a ",[33,12072,73],{"class":39},[33,12074,3461],{"class":76},[33,12076,80],{"class":47},[33,12078,12079,12081,12083,12086,12088,12090],{"class":35,"line":98},[33,12080,588],{"class":39},[33,12082,591],{"class":39},[33,12084,12085],{"class":47}," c_g_b ",[33,12087,73],{"class":39},[33,12089,3461],{"class":76},[33,12091,80],{"class":47},[33,12093,12094],{"class":35,"line":110},[33,12095,160],{"emptyLinePlaceholder":159},[33,12097,12098,12100,12102],{"class":35,"line":134},[33,12099,40],{"class":39},[33,12101,44],{"class":43},[33,12103,12104],{"class":47},"() {\n",[33,12106,12107],{"class":35,"line":156},[33,12108,160],{"emptyLinePlaceholder":159},[33,12110,12111],{"class":35,"line":163},[33,12112,12113],{"class":60},"    \u002F\u002F局部变量\n",[33,12115,12116,12118,12121,12123,12125],{"class":35,"line":169},[33,12117,67],{"class":39},[33,12119,12120],{"class":47}," a ",[33,12122,73],{"class":39},[33,12124,3461],{"class":76},[33,12126,80],{"class":47},[33,12128,12129,12131,12134,12136,12138],{"class":35,"line":175},[33,12130,67],{"class":39},[33,12132,12133],{"class":47}," b ",[33,12135,73],{"class":39},[33,12137,3461],{"class":76},[33,12139,80],{"class":47},[33,12141,12142],{"class":35,"line":181},[33,12143,160],{"emptyLinePlaceholder":159},[33,12145,12146],{"class":35,"line":196},[33,12147,12148],{"class":60},"    \u002F\u002F打印地址\n",[33,12150,12151,12153,12155,12158,12160,12162,12164,12166,12168,12171,12173],{"class":35,"line":213},[33,12152,314],{"class":47},[33,12154,116],{"class":39},[33,12156,12157],{"class":119}," \"局部变量a地址为： \"",[33,12159,2900],{"class":39},[33,12161,860],{"class":47},[33,12163,40],{"class":39},[33,12165,352],{"class":47},[33,12167,1062],{"class":39},[33,12169,12170],{"class":47},"a ",[33,12172,116],{"class":39},[33,12174,10091],{"class":47},[33,12176,12177,12179,12181,12184,12186,12188,12190,12192,12194,12197,12199],{"class":35,"line":228},[33,12178,314],{"class":47},[33,12180,116],{"class":39},[33,12182,12183],{"class":119}," \"局部变量b地址为： \"",[33,12185,2900],{"class":39},[33,12187,860],{"class":47},[33,12189,40],{"class":39},[33,12191,352],{"class":47},[33,12193,1062],{"class":39},[33,12195,12196],{"class":47},"b ",[33,12198,116],{"class":39},[33,12200,10091],{"class":47},[33,12202,12203],{"class":35,"line":1345},[33,12204,160],{"emptyLinePlaceholder":159},[33,12206,12207,12209,12211,12214,12216,12219,12221,12223,12225,12228,12230],{"class":35,"line":1350},[33,12208,314],{"class":47},[33,12210,116],{"class":39},[33,12212,12213],{"class":119}," \"全局变量g_a地址为： \"",[33,12215,2900],{"class":39},[33,12217,12218],{"class":47},"  (",[33,12220,40],{"class":39},[33,12222,352],{"class":47},[33,12224,1062],{"class":39},[33,12226,12227],{"class":47},"g_a ",[33,12229,116],{"class":39},[33,12231,10091],{"class":47},[33,12233,12234,12236,12238,12241,12243,12245,12247,12249,12251,12254,12256],{"class":35,"line":1359},[33,12235,314],{"class":47},[33,12237,116],{"class":39},[33,12239,12240],{"class":119}," \"全局变量g_b地址为： \"",[33,12242,2900],{"class":39},[33,12244,12218],{"class":47},[33,12246,40],{"class":39},[33,12248,352],{"class":47},[33,12250,1062],{"class":39},[33,12252,12253],{"class":47},"g_b ",[33,12255,116],{"class":39},[33,12257,10091],{"class":47},[33,12259,12260],{"class":35,"line":1364},[33,12261,160],{"emptyLinePlaceholder":159},[33,12263,12264],{"class":35,"line":1370},[33,12265,12266],{"class":60},"    \u002F\u002F静态变量\n",[33,12268,12269,12272,12274,12277,12279,12281],{"class":35,"line":1425},[33,12270,12271],{"class":39},"    static",[33,12273,591],{"class":39},[33,12275,12276],{"class":47}," s_a ",[33,12278,73],{"class":39},[33,12280,3461],{"class":76},[33,12282,80],{"class":47},[33,12284,12285,12287,12289,12292,12294,12296],{"class":35,"line":1438},[33,12286,12271],{"class":39},[33,12288,591],{"class":39},[33,12290,12291],{"class":47}," s_b ",[33,12293,73],{"class":39},[33,12295,3461],{"class":76},[33,12297,80],{"class":47},[33,12299,12300],{"class":35,"line":1451},[33,12301,160],{"emptyLinePlaceholder":159},[33,12303,12304,12306,12308,12311,12313,12315,12317,12319,12321,12324,12326],{"class":35,"line":1457},[33,12305,314],{"class":47},[33,12307,116],{"class":39},[33,12309,12310],{"class":119}," \"静态变量s_a地址为： \"",[33,12312,2900],{"class":39},[33,12314,860],{"class":47},[33,12316,40],{"class":39},[33,12318,352],{"class":47},[33,12320,1062],{"class":39},[33,12322,12323],{"class":47},"s_a ",[33,12325,116],{"class":39},[33,12327,10091],{"class":47},[33,12329,12330,12332,12334,12337,12339,12341,12343,12345,12347,12350,12352],{"class":35,"line":1466},[33,12331,314],{"class":47},[33,12333,116],{"class":39},[33,12335,12336],{"class":119}," \"静态变量s_b地址为： \"",[33,12338,2900],{"class":39},[33,12340,860],{"class":47},[33,12342,40],{"class":39},[33,12344,352],{"class":47},[33,12346,1062],{"class":39},[33,12348,12349],{"class":47},"s_b ",[33,12351,116],{"class":39},[33,12353,10091],{"class":47},[33,12355,12356],{"class":35,"line":1471},[33,12357,160],{"emptyLinePlaceholder":159},[33,12359,12360,12362,12364,12367,12369,12371,12373,12375,12377,12379,12381],{"class":35,"line":1477},[33,12361,314],{"class":47},[33,12363,116],{"class":39},[33,12365,12366],{"class":119}," \"字符串常量地址为： \"",[33,12368,2900],{"class":39},[33,12370,860],{"class":47},[33,12372,40],{"class":39},[33,12374,352],{"class":47},[33,12376,1062],{"class":39},[33,12378,2654],{"class":119},[33,12380,2900],{"class":39},[33,12382,10091],{"class":47},[33,12384,12385,12387,12389,12391,12393,12395,12397,12399,12401,12404,12406],{"class":35,"line":1504},[33,12386,314],{"class":47},[33,12388,116],{"class":39},[33,12390,12366],{"class":119},[33,12392,2900],{"class":39},[33,12394,860],{"class":47},[33,12396,40],{"class":39},[33,12398,352],{"class":47},[33,12400,1062],{"class":39},[33,12402,12403],{"class":119},"\"hello world1\"",[33,12405,2900],{"class":39},[33,12407,10091],{"class":47},[33,12409,12410],{"class":35,"line":1509},[33,12411,160],{"emptyLinePlaceholder":159},[33,12413,12414,12416,12418,12421,12423,12425,12427,12429,12431,12434,12436],{"class":35,"line":1525},[33,12415,314],{"class":47},[33,12417,116],{"class":39},[33,12419,12420],{"class":119}," \"全局常量c_g_a地址为： \"",[33,12422,2900],{"class":39},[33,12424,860],{"class":47},[33,12426,40],{"class":39},[33,12428,352],{"class":47},[33,12430,1062],{"class":39},[33,12432,12433],{"class":47},"c_g_a ",[33,12435,116],{"class":39},[33,12437,10091],{"class":47},[33,12439,12440,12442,12444,12447,12449,12451,12453,12455,12457,12460,12462],{"class":35,"line":1535},[33,12441,314],{"class":47},[33,12443,116],{"class":39},[33,12445,12446],{"class":119}," \"全局常量c_g_b地址为： \"",[33,12448,2900],{"class":39},[33,12450,860],{"class":47},[33,12452,40],{"class":39},[33,12454,352],{"class":47},[33,12456,1062],{"class":39},[33,12458,12459],{"class":47},"c_g_b ",[33,12461,116],{"class":39},[33,12463,10091],{"class":47},[33,12465,12466],{"class":35,"line":1540},[33,12467,160],{"emptyLinePlaceholder":159},[33,12469,12470,12473,12475,12478,12480,12482],{"class":35,"line":4027},[33,12471,12472],{"class":39},"    const",[33,12474,591],{"class":39},[33,12476,12477],{"class":47}," c_l_a ",[33,12479,73],{"class":39},[33,12481,3461],{"class":76},[33,12483,80],{"class":47},[33,12485,12486,12488,12490,12493,12495,12497],{"class":35,"line":4032},[33,12487,12472],{"class":39},[33,12489,591],{"class":39},[33,12491,12492],{"class":47}," c_l_b ",[33,12494,73],{"class":39},[33,12496,3461],{"class":76},[33,12498,80],{"class":47},[33,12500,12501,12503,12505,12508,12510,12512,12514,12516,12518,12521,12523],{"class":35,"line":9199},[33,12502,314],{"class":47},[33,12504,116],{"class":39},[33,12506,12507],{"class":119}," \"局部常量c_l_a地址为： \"",[33,12509,2900],{"class":39},[33,12511,860],{"class":47},[33,12513,40],{"class":39},[33,12515,352],{"class":47},[33,12517,1062],{"class":39},[33,12519,12520],{"class":47},"c_l_a ",[33,12522,116],{"class":39},[33,12524,10091],{"class":47},[33,12526,12527,12529,12531,12534,12536,12538,12540,12542,12544,12547,12549],{"class":35,"line":9223},[33,12528,314],{"class":47},[33,12530,116],{"class":39},[33,12532,12533],{"class":119}," \"局部常量c_l_b地址为： \"",[33,12535,2900],{"class":39},[33,12537,860],{"class":47},[33,12539,40],{"class":39},[33,12541,352],{"class":47},[33,12543,1062],{"class":39},[33,12545,12546],{"class":47},"c_l_b ",[33,12548,116],{"class":39},[33,12550,10091],{"class":47},[33,12552,12553],{"class":35,"line":9228},[33,12554,160],{"emptyLinePlaceholder":159},[33,12556,12557,12559,12561,12563],{"class":35,"line":9234},[33,12558,3724],{"class":43},[33,12560,345],{"class":47},[33,12562,3729],{"class":119},[33,12564,4130],{"class":47},[33,12566,12567],{"class":35,"line":9261},[33,12568,160],{"emptyLinePlaceholder":159},[33,12570,12571,12573,12575],{"class":35,"line":9266},[33,12572,5489],{"class":39},[33,12574,5492],{"class":76},[33,12576,80],{"class":47},[33,12578,12579],{"class":35,"line":9272},[33,12580,231],{"class":47},[14,12582,12583],{},"总结：",[561,12585,12586,12589,12592,12595],{},[564,12587,12588],{},"c++中程序运行前分为全局区和代码区",[564,12590,12591],{},"代码区特点是共享和只读",[564,12593,12594],{},"全局区中存放全局变量、静态变量、常量",[564,12596,12597],{},"常量区中存放const修饰的全局常量和字符串常量",[1599,12599,12601],{"id":12600},"_512程序运行后","5.1.2程序运行后",[574,12603,12604],{},[564,12605,12606],{},"栈区：",[561,12608,12609,12616],{},[564,12610,12611,12612,12615],{},"由编译器自动分配释放, 存放",[480,12613,12614],{},"函数的参数值,局部变量","等",[564,12617,12618,12619,12622],{},"注意事项：",[480,12620,12621],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[23,12624,12626],{"className":25,"code":12625,"language":27,"meta":28,"style":28},"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",[30,12627,12628,12639,12643,12658,12670,12674,12678,12686,12691,12706,12724,12741,12751,12759],{"__ignoreMap":28},[33,12629,12630,12632,12634,12637],{"class":35,"line":36},[33,12631,40],{"class":39},[33,12633,303],{"class":39},[33,12635,12636],{"class":43}," func",[33,12638,48],{"class":47},[33,12640,12641],{"class":35,"line":51},[33,12642,54],{"class":47},[33,12644,12645,12647,12649,12651,12653,12655],{"class":35,"line":57},[33,12646,67],{"class":39},[33,12648,12120],{"class":47},[33,12650,73],{"class":39},[33,12652,3461],{"class":76},[33,12654,460],{"class":47},[33,12656,12657],{"class":60}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[33,12659,12660,12662,12664,12667],{"class":35,"line":64},[33,12661,5489],{"class":39},[33,12663,11835],{"class":39},[33,12665,12666],{"class":47},"a;",[33,12668,12669],{"class":60}," \u002F\u002F放回局部变量的地址\n",[33,12671,12672],{"class":35,"line":83},[33,12673,231],{"class":47},[33,12675,12676],{"class":35,"line":89},[33,12677,160],{"emptyLinePlaceholder":159},[33,12679,12680,12682,12684],{"class":35,"line":98},[33,12681,40],{"class":39},[33,12683,44],{"class":43},[33,12685,12104],{"class":47},[33,12687,12688],{"class":35,"line":110},[33,12689,12690],{"class":60},"    \u002F\u002F接受func的返回值\n",[33,12692,12693,12695,12697,12700,12702,12704],{"class":35,"line":134},[33,12694,67],{"class":39},[33,12696,303],{"class":39},[33,12698,12699],{"class":47},"p ",[33,12701,73],{"class":39},[33,12703,12636],{"class":43},[33,12705,7023],{"class":47},[33,12707,12708,12710,12712,12714,12716,12718,12721],{"class":35,"line":156},[33,12709,314],{"class":47},[33,12711,116],{"class":39},[33,12713,303],{"class":39},[33,12715,12699],{"class":47},[33,12717,116],{"class":39},[33,12719,12720],{"class":47}," endl;",[33,12722,12723],{"class":60}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[33,12725,12726,12728,12730,12732,12734,12736,12738],{"class":35,"line":163},[33,12727,314],{"class":47},[33,12729,116],{"class":39},[33,12731,303],{"class":39},[33,12733,12699],{"class":47},[33,12735,116],{"class":39},[33,12737,12720],{"class":47},[33,12739,12740],{"class":60}," \u002F\u002F第二次这个数据不再保留\n",[33,12742,12743,12745,12747,12749],{"class":35,"line":169},[33,12744,3724],{"class":43},[33,12746,345],{"class":47},[33,12748,3729],{"class":119},[33,12750,4130],{"class":47},[33,12752,12753,12755,12757],{"class":35,"line":175},[33,12754,5489],{"class":39},[33,12756,5492],{"class":76},[33,12758,80],{"class":47},[33,12760,12761],{"class":35,"line":181},[33,12762,231],{"class":47},[14,12764,12765],{},"输出结果：",[14,12767,12768],{},[2918,12769],{"alt":12770,"src":12771},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,12773,12774],{},"总结：不要返回局部变量的地址",[574,12776,12777],{"start":51},[564,12778,12779],{},"堆区",[561,12781,12782,12785],{},[564,12783,12784],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[564,12786,12787],{},"在c++中主要利用new在堆区开辟内存",[23,12789,12791],{"className":25,"code":12790,"language":27,"meta":28,"style":28},"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",[30,12792,12793,12808,12812,12817,12838,12845,12849,12857,12861,12866,12880,12892],{"__ignoreMap":28},[33,12794,12795,12797,12800,12803,12805],{"class":35,"line":36},[33,12796,40],{"class":39},[33,12798,12799],{"class":39},"  *",[33,12801,12802],{"class":43},"func",[33,12804,3845],{"class":47},[33,12806,12807],{"class":60},"  \u002F\u002F函数返回指针\n",[33,12809,12810],{"class":35,"line":51},[33,12811,54],{"class":47},[33,12813,12814],{"class":35,"line":57},[33,12815,12816],{"class":60},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[33,12818,12819,12821,12823,12825,12827,12830,12832,12834,12836],{"class":35,"line":64},[33,12820,5546],{"class":39},[33,12822,303],{"class":39},[33,12824,14],{"class":47},[33,12826,73],{"class":39},[33,12828,12829],{"class":39}," new",[33,12831,591],{"class":39},[33,12833,345],{"class":47},[33,12835,77],{"class":76},[33,12837,4130],{"class":47},[33,12839,12840,12842],{"class":35,"line":83},[33,12841,5778],{"class":39},[33,12843,12844],{"class":47}," p;\n",[33,12846,12847],{"class":35,"line":89},[33,12848,231],{"class":47},[33,12850,12851,12853,12855],{"class":35,"line":98},[33,12852,40],{"class":39},[33,12854,44],{"class":43},[33,12856,48],{"class":47},[33,12858,12859],{"class":35,"line":110},[33,12860,54],{"class":47},[33,12862,12863],{"class":35,"line":134},[33,12864,12865],{"class":60},"    \u002F\u002F在堆区开辟数据\n",[33,12867,12868,12870,12872,12874,12876,12878],{"class":35,"line":156},[33,12869,67],{"class":39},[33,12871,303],{"class":39},[33,12873,14],{"class":47},[33,12875,73],{"class":39},[33,12877,12802],{"class":43},[33,12879,7023],{"class":47},[33,12881,12882,12884,12886,12888,12890],{"class":35,"line":163},[33,12883,113],{"class":47},[33,12885,201],{"class":39},[33,12887,14],{"class":47},[33,12889,116],{"class":39},[33,12891,131],{"class":47},[33,12893,12894],{"class":35,"line":169},[33,12895,231],{"class":47},[14,12897,12898],{},"图片展示：",[14,12900,12901],{},[2918,12902],{"alt":12770,"src":12903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,12905,12906],{},"堆区内存由程序员管生死！！！",[574,12908,12909],{"start":57},[564,12910,12911],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12913,12914],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12916,12917,12918],{},"​语法：",[30,12919,12920],{}," new 数据类型",[14,12922,12923],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[23,12925,12927],{"className":25,"code":12926,"language":27,"meta":28,"style":28},"\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",[30,12928,12929,12934,12944,12948,12953,12958,12980,12984,12992,12996,13010,13022,13034,13046,13051,13056,13067,13071,13076,13084,13088,13093,13115,13141,13145,13163,13167,13193,13197,13209,13213,13218,13223,13231,13235,13239,13247,13251,13257,13263],{"__ignoreMap":28},[33,12930,12931],{"class":35,"line":36},[33,12932,12933],{"class":60},"\u002F\u002F1.new的基本语法\n",[33,12935,12936,12938,12940,12942],{"class":35,"line":51},[33,12937,40],{"class":39},[33,12939,303],{"class":39},[33,12941,12802],{"class":43},[33,12943,48],{"class":47},[33,12945,12946],{"class":35,"line":57},[33,12947,54],{"class":47},[33,12949,12950],{"class":35,"line":64},[33,12951,12952],{"class":60},"    \u002F\u002F在堆区创建整型数据\n",[33,12954,12955],{"class":35,"line":83},[33,12956,12957],{"class":60},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[33,12959,12960,12962,12964,12966,12969,12971,12973,12975,12977],{"class":35,"line":89},[33,12961,67],{"class":39},[33,12963,303],{"class":39},[33,12965,14],{"class":47},[33,12967,12968],{"class":39},"=new",[33,12970,591],{"class":39},[33,12972,345],{"class":47},[33,12974,77],{"class":76},[33,12976,7353],{"class":47},[33,12978,12979],{"class":60},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[33,12981,12982],{"class":35,"line":98},[33,12983,231],{"class":47},[33,12985,12986,12988,12990],{"class":35,"line":110},[33,12987,943],{"class":39},[33,12989,6975],{"class":43},[33,12991,48],{"class":47},[33,12993,12994],{"class":35,"line":134},[33,12995,54],{"class":47},[33,12997,12998,13000,13002,13004,13006,13008],{"class":35,"line":156},[33,12999,67],{"class":39},[33,13001,303],{"class":39},[33,13003,14],{"class":47},[33,13005,73],{"class":39},[33,13007,12802],{"class":43},[33,13009,7023],{"class":47},[33,13011,13012,13014,13016,13018,13020],{"class":35,"line":163},[33,13013,113],{"class":47},[33,13015,201],{"class":39},[33,13017,14],{"class":47},[33,13019,116],{"class":39},[33,13021,131],{"class":47},[33,13023,13024,13026,13028,13030,13032],{"class":35,"line":169},[33,13025,113],{"class":47},[33,13027,201],{"class":39},[33,13029,14],{"class":47},[33,13031,116],{"class":39},[33,13033,131],{"class":47},[33,13035,13036,13038,13040,13042,13044],{"class":35,"line":175},[33,13037,113],{"class":47},[33,13039,201],{"class":39},[33,13041,14],{"class":47},[33,13043,116],{"class":39},[33,13045,131],{"class":47},[33,13047,13048],{"class":35,"line":181},[33,13049,13050],{"class":60},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[33,13052,13053],{"class":35,"line":196},[33,13054,13055],{"class":60},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[33,13057,13058,13061,13064],{"class":35,"line":213},[33,13059,13060],{"class":39},"    delete",[33,13062,13063],{"class":47}," p;",[33,13065,13066],{"class":60},"\u002F\u002F删除这块地址\n",[33,13068,13069],{"class":35,"line":228},[33,13070,231],{"class":47},[33,13072,13073],{"class":35,"line":1345},[33,13074,13075],{"class":60},"\u002F\u002F2.在堆区利用new开辟数组\n",[33,13077,13078,13080,13082],{"class":35,"line":1350},[33,13079,943],{"class":39},[33,13081,7044],{"class":43},[33,13083,48],{"class":47},[33,13085,13086],{"class":35,"line":1359},[33,13087,54],{"class":47},[33,13089,13090],{"class":35,"line":1364},[33,13091,13092],{"class":60},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[33,13094,13095,13097,13099,13101,13103,13105,13107,13109,13112],{"class":35,"line":1370},[33,13096,67],{"class":39},[33,13098,303],{"class":39},[33,13100,5282],{"class":47},[33,13102,12968],{"class":39},[33,13104,591],{"class":39},[33,13106,2489],{"class":47},[33,13108,77],{"class":76},[33,13110,13111],{"class":47},"];",[33,13113,13114],{"class":60},"\u002F\u002F10代表数组有10个元素\n",[33,13116,13117,13119,13121,13123,13125,13127,13129,13131,13133,13135,13137,13139],{"class":35,"line":1425},[33,13118,857],{"class":39},[33,13120,860],{"class":47},[33,13122,40],{"class":39},[33,13124,865],{"class":47},[33,13126,73],{"class":39},[33,13128,766],{"class":76},[33,13130,872],{"class":47},[33,13132,875],{"class":39},[33,13134,77],{"class":76},[33,13136,872],{"class":47},[33,13138,811],{"class":39},[33,13140,884],{"class":47},[33,13142,13143],{"class":35,"line":1438},[33,13144,889],{"class":47},[33,13146,13147,13150,13152,13154,13156,13158,13160],{"class":35,"line":1451},[33,13148,13149],{"class":47},"        arr[i]",[33,13151,73],{"class":39},[33,13153,1239],{"class":47},[33,13155,1271],{"class":39},[33,13157,457],{"class":76},[33,13159,460],{"class":47},[33,13161,13162],{"class":60},"\u002F\u002F给10个元素赋值100～109\n",[33,13164,13165],{"class":35,"line":1457},[33,13166,916],{"class":47},[33,13168,13169,13171,13173,13175,13177,13179,13181,13183,13185,13187,13189,13191],{"class":35,"line":1466},[33,13170,857],{"class":39},[33,13172,860],{"class":47},[33,13174,40],{"class":39},[33,13176,865],{"class":47},[33,13178,73],{"class":39},[33,13180,766],{"class":76},[33,13182,872],{"class":47},[33,13184,875],{"class":39},[33,13186,77],{"class":76},[33,13188,872],{"class":47},[33,13190,811],{"class":39},[33,13192,884],{"class":47},[33,13194,13195],{"class":35,"line":1471},[33,13196,889],{"class":47},[33,13198,13199,13201,13203,13205,13207],{"class":35,"line":1477},[33,13200,894],{"class":47},[33,13202,116],{"class":39},[33,13204,5751],{"class":47},[33,13206,116],{"class":39},[33,13208,131],{"class":47},[33,13210,13211],{"class":35,"line":1504},[33,13212,916],{"class":47},[33,13214,13215],{"class":35,"line":1509},[33,13216,13217],{"class":60},"    \u002F\u002F释放堆区数组\n",[33,13219,13220],{"class":35,"line":1525},[33,13221,13222],{"class":60},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[33,13224,13225,13228],{"class":35,"line":1535},[33,13226,13227],{"class":39},"    delete[]",[33,13229,13230],{"class":47}," arr;\n",[33,13232,13233],{"class":35,"line":1540},[33,13234,231],{"class":47},[33,13236,13237],{"class":35,"line":4027},[33,13238,160],{"emptyLinePlaceholder":159},[33,13240,13241,13243,13245],{"class":35,"line":4032},[33,13242,40],{"class":39},[33,13244,44],{"class":43},[33,13246,48],{"class":47},[33,13248,13249],{"class":35,"line":9199},[33,13250,54],{"class":47},[33,13252,13253,13255],{"class":35,"line":9223},[33,13254,7020],{"class":43},[33,13256,7023],{"class":47},[33,13258,13259,13261],{"class":35,"line":9228},[33,13260,7089],{"class":43},[33,13262,7023],{"class":47},[33,13264,13265],{"class":35,"line":9234},[33,13266,231],{"class":47},[1544,13268,13269],{},"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":28,"searchDepth":51,"depth":51,"links":13271},[13272],{"id":11940,"depth":51,"text":11941,"children":13273},[13274,13275],{"id":11972,"depth":57,"text":11973},{"id":12600,"depth":57,"text":12601},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11932,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13282,"title":13283,"body":13284,"description":28,"extension":1557,"meta":14765,"navigation":159,"path":14766,"seo":14767,"stem":14768,"__hash__":14769},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13285,"toc":14757},[13286,13289,13293,13296,13299,13468,13472,13477,13494,13499,13651,13655,13658,13661,14055,14059,14062,14067,14070,14382,14386,14392,14552,14554,14562,14566,14569,14576,14754],[10,13287,13283],{"id":13288},"_6引用",[18,13290,13292],{"id":13291},"_61引用基本用法","6.1引用基本用法",[14,13294,13295],{},"引用的本质：给变量起别名",[14,13297,13298],{},"语法：数据类型 &别名=原名",[23,13300,13302],{"className":25,"code":13301,"language":27,"meta":28,"style":28},"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",[30,13303,13304,13312,13316,13328,13340,13344,13363,13382,13386,13397,13401,13420,13438,13442,13452,13456,13464],{"__ignoreMap":28},[33,13305,13306,13308,13310],{"class":35,"line":36},[33,13307,40],{"class":39},[33,13309,44],{"class":43},[33,13311,12104],{"class":47},[33,13313,13314],{"class":35,"line":51},[33,13315,160],{"emptyLinePlaceholder":159},[33,13317,13318,13320,13322,13324,13326],{"class":35,"line":57},[33,13319,67],{"class":39},[33,13321,12120],{"class":47},[33,13323,73],{"class":39},[33,13325,3461],{"class":76},[33,13327,80],{"class":47},[33,13329,13330,13332,13334,13336,13338],{"class":35,"line":64},[33,13331,67],{"class":39},[33,13333,11835],{"class":39},[33,13335,12196],{"class":47},[33,13337,73],{"class":39},[33,13339,2888],{"class":47},[33,13341,13342],{"class":35,"line":83},[33,13343,160],{"emptyLinePlaceholder":159},[33,13345,13346,13348,13350,13353,13355,13357,13359,13361],{"class":35,"line":89},[33,13347,314],{"class":47},[33,13349,116],{"class":39},[33,13351,13352],{"class":119}," \"a = \"",[33,13354,2900],{"class":39},[33,13356,12120],{"class":47},[33,13358,116],{"class":39},[33,13360,12720],{"class":47},[33,13362,1101],{"class":60},[33,13364,13365,13367,13369,13372,13374,13376,13378,13380],{"class":35,"line":98},[33,13366,314],{"class":47},[33,13368,116],{"class":39},[33,13370,13371],{"class":119}," \"b = \"",[33,13373,2900],{"class":39},[33,13375,12133],{"class":47},[33,13377,116],{"class":39},[33,13379,12720],{"class":47},[33,13381,1101],{"class":60},[33,13383,13384],{"class":35,"line":110},[33,13385,160],{"emptyLinePlaceholder":159},[33,13387,13388,13391,13393,13395],{"class":35,"line":134},[33,13389,13390],{"class":47},"    b ",[33,13392,73],{"class":39},[33,13394,7141],{"class":76},[33,13396,80],{"class":47},[33,13398,13399],{"class":35,"line":156},[33,13400,160],{"emptyLinePlaceholder":159},[33,13402,13403,13405,13407,13409,13411,13413,13415,13417],{"class":35,"line":163},[33,13404,314],{"class":47},[33,13406,116],{"class":39},[33,13408,13352],{"class":119},[33,13410,2900],{"class":39},[33,13412,12120],{"class":47},[33,13414,116],{"class":39},[33,13416,12720],{"class":47},[33,13418,13419],{"class":60},"\u002F\u002F100\n",[33,13421,13422,13424,13426,13428,13430,13432,13434,13436],{"class":35,"line":169},[33,13423,314],{"class":47},[33,13425,116],{"class":39},[33,13427,13371],{"class":119},[33,13429,2900],{"class":39},[33,13431,12133],{"class":47},[33,13433,116],{"class":39},[33,13435,12720],{"class":47},[33,13437,13419],{"class":60},[33,13439,13440],{"class":35,"line":175},[33,13441,160],{"emptyLinePlaceholder":159},[33,13443,13444,13446,13448,13450],{"class":35,"line":181},[33,13445,3724],{"class":43},[33,13447,345],{"class":47},[33,13449,3729],{"class":119},[33,13451,4130],{"class":47},[33,13453,13454],{"class":35,"line":196},[33,13455,160],{"emptyLinePlaceholder":159},[33,13457,13458,13460,13462],{"class":35,"line":213},[33,13459,5489],{"class":39},[33,13461,5492],{"class":76},[33,13463,80],{"class":47},[33,13465,13466],{"class":35,"line":228},[33,13467,231],{"class":47},[18,13469,13471],{"id":13470},"_62引用的注意事项","6.2引用的注意事项",[574,13473,13474],{},[564,13475,13476],{},"引用必须要初始化",[23,13478,13480],{"className":25,"code":13479,"language":27,"meta":28,"style":28},"int &b;\u002F\u002F非常错误！\n",[30,13481,13482],{"__ignoreMap":28},[33,13483,13484,13486,13488,13491],{"class":35,"line":36},[33,13485,40],{"class":39},[33,13487,11835],{"class":39},[33,13489,13490],{"class":47},"b;",[33,13492,13493],{"class":60},"\u002F\u002F非常错误！\n",[574,13495,13496],{"start":51},[564,13497,13498],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[23,13500,13502],{"className":25,"code":13501,"language":27,"meta":28,"style":28},"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",[30,13503,13504,13512,13524,13536,13544,13560,13573,13591,13609,13629,13639,13647],{"__ignoreMap":28},[33,13505,13506,13508,13510],{"class":35,"line":36},[33,13507,40],{"class":39},[33,13509,44],{"class":43},[33,13511,12104],{"class":47},[33,13513,13514,13516,13518,13520,13522],{"class":35,"line":51},[33,13515,67],{"class":39},[33,13517,12120],{"class":47},[33,13519,73],{"class":39},[33,13521,3461],{"class":76},[33,13523,80],{"class":47},[33,13525,13526,13528,13530,13532,13534],{"class":35,"line":57},[33,13527,67],{"class":39},[33,13529,12133],{"class":47},[33,13531,73],{"class":39},[33,13533,10201],{"class":76},[33,13535,80],{"class":47},[33,13537,13538,13541],{"class":35,"line":64},[33,13539,13540],{"class":60},"    \u002F\u002Fint &c;",[33,13542,13543],{"class":60}," \u002F\u002F错误，引用必须初始化\n",[33,13545,13546,13548,13550,13552,13554,13557],{"class":35,"line":83},[33,13547,67],{"class":39},[33,13549,11835],{"class":39},[33,13551,4356],{"class":47},[33,13553,73],{"class":39},[33,13555,13556],{"class":47}," a;",[33,13558,13559],{"class":60}," \u002F\u002F一旦初始化后，就不可以更改\n",[33,13561,13562,13565,13567,13570],{"class":35,"line":89},[33,13563,13564],{"class":47},"    c ",[33,13566,73],{"class":39},[33,13568,13569],{"class":47}," b;",[33,13571,13572],{"class":60}," \u002F\u002F这是赋值操作，不是更改引用\n",[33,13574,13575,13577,13579,13581,13583,13585,13587,13589],{"class":35,"line":98},[33,13576,314],{"class":47},[33,13578,116],{"class":39},[33,13580,13352],{"class":119},[33,13582,2900],{"class":39},[33,13584,12120],{"class":47},[33,13586,116],{"class":39},[33,13588,12720],{"class":47},[33,13590,1085],{"class":60},[33,13592,13593,13595,13597,13599,13601,13603,13605,13607],{"class":35,"line":110},[33,13594,314],{"class":47},[33,13596,116],{"class":39},[33,13598,13371],{"class":119},[33,13600,2900],{"class":39},[33,13602,12133],{"class":47},[33,13604,116],{"class":39},[33,13606,12720],{"class":47},[33,13608,1085],{"class":60},[33,13610,13611,13613,13615,13618,13620,13623,13625,13627],{"class":35,"line":134},[33,13612,314],{"class":47},[33,13614,116],{"class":39},[33,13616,13617],{"class":119}," \"c = \"",[33,13619,2900],{"class":39},[33,13621,13622],{"class":47}," c ",[33,13624,116],{"class":39},[33,13626,12720],{"class":47},[33,13628,1085],{"class":60},[33,13630,13631,13633,13635,13637],{"class":35,"line":156},[33,13632,3724],{"class":43},[33,13634,345],{"class":47},[33,13636,3729],{"class":119},[33,13638,4130],{"class":47},[33,13640,13641,13643,13645],{"class":35,"line":163},[33,13642,5489],{"class":39},[33,13644,5492],{"class":76},[33,13646,80],{"class":47},[33,13648,13649],{"class":35,"line":169},[33,13650,231],{"class":47},[18,13652,13654],{"id":13653},"_63引用做函数参数","6.3引用做函数参数",[14,13656,13657],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,13659,13660],{},"优点：可以简化指针修改实参",[23,13662,13664],{"className":25,"code":13663,"language":27,"meta":28,"style":28},"\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",[30,13665,13666,13671,13694,13705,13715,13724,13728,13732,13737,13759,13771,13783,13793,13797,13801,13806,13828,13838,13846,13854,13858,13862,13870,13874,13886,13898,13902,13913,13939,13943,13963,13987,13991,14001,14025,14029,14039,14043,14051],{"__ignoreMap":28},[33,13667,13668],{"class":35,"line":36},[33,13669,13670],{"class":60},"\u002F\u002F1. 值传递\n",[33,13672,13673,13675,13678,13680,13682,13684,13687,13689,13691],{"class":35,"line":51},[33,13674,943],{"class":39},[33,13676,13677],{"class":43}," mySwap01",[33,13679,345],{"class":47},[33,13681,40],{"class":39},[33,13683,70],{"class":955},[33,13685,13686],{"class":47},", ",[33,13688,40],{"class":39},[33,13690,1040],{"class":955},[33,13692,13693],{"class":47},") {\n",[33,13695,13696,13698,13701,13703],{"class":35,"line":57},[33,13697,67],{"class":39},[33,13699,13700],{"class":47}," temp ",[33,13702,73],{"class":39},[33,13704,2888],{"class":47},[33,13706,13707,13710,13712],{"class":35,"line":64},[33,13708,13709],{"class":47},"    a ",[33,13711,73],{"class":39},[33,13713,13714],{"class":47}," b;\n",[33,13716,13717,13719,13721],{"class":35,"line":83},[33,13718,13390],{"class":47},[33,13720,73],{"class":39},[33,13722,13723],{"class":47}," temp;\n",[33,13725,13726],{"class":35,"line":89},[33,13727,231],{"class":47},[33,13729,13730],{"class":35,"line":98},[33,13731,160],{"emptyLinePlaceholder":159},[33,13733,13734],{"class":35,"line":110},[33,13735,13736],{"class":60},"\u002F\u002F2. 地址传递\n",[33,13738,13739,13741,13744,13746,13749,13751,13753,13755,13757],{"class":35,"line":134},[33,13740,943],{"class":39},[33,13742,13743],{"class":43}," mySwap02",[33,13745,345],{"class":47},[33,13747,13748],{"class":39},"int*",[33,13750,70],{"class":955},[33,13752,13686],{"class":47},[33,13754,13748],{"class":39},[33,13756,1040],{"class":955},[33,13758,13693],{"class":47},[33,13760,13761,13763,13765,13767,13769],{"class":35,"line":156},[33,13762,67],{"class":39},[33,13764,13700],{"class":47},[33,13766,73],{"class":39},[33,13768,303],{"class":39},[33,13770,107],{"class":47},[33,13772,13773,13775,13777,13779,13781],{"class":35,"line":163},[33,13774,184],{"class":39},[33,13776,12170],{"class":47},[33,13778,73],{"class":39},[33,13780,303],{"class":39},[33,13782,7456],{"class":47},[33,13784,13785,13787,13789,13791],{"class":35,"line":169},[33,13786,184],{"class":39},[33,13788,12196],{"class":47},[33,13790,73],{"class":39},[33,13792,13723],{"class":47},[33,13794,13795],{"class":35,"line":175},[33,13796,231],{"class":47},[33,13798,13799],{"class":35,"line":181},[33,13800,160],{"emptyLinePlaceholder":159},[33,13802,13803],{"class":35,"line":196},[33,13804,13805],{"class":60},"\u002F\u002F3. 引用传递\n",[33,13807,13808,13810,13813,13815,13818,13820,13822,13824,13826],{"class":35,"line":213},[33,13809,943],{"class":39},[33,13811,13812],{"class":43}," mySwap03",[33,13814,345],{"class":47},[33,13816,13817],{"class":39},"int&",[33,13819,70],{"class":955},[33,13821,13686],{"class":47},[33,13823,13817],{"class":39},[33,13825,1040],{"class":955},[33,13827,13693],{"class":47},[33,13829,13830,13832,13834,13836],{"class":35,"line":228},[33,13831,67],{"class":39},[33,13833,13700],{"class":47},[33,13835,73],{"class":39},[33,13837,2888],{"class":47},[33,13839,13840,13842,13844],{"class":35,"line":1345},[33,13841,13709],{"class":47},[33,13843,73],{"class":39},[33,13845,13714],{"class":47},[33,13847,13848,13850,13852],{"class":35,"line":1350},[33,13849,13390],{"class":47},[33,13851,73],{"class":39},[33,13853,13723],{"class":47},[33,13855,13856],{"class":35,"line":1359},[33,13857,231],{"class":47},[33,13859,13860],{"class":35,"line":1364},[33,13861,160],{"emptyLinePlaceholder":159},[33,13863,13864,13866,13868],{"class":35,"line":1370},[33,13865,40],{"class":39},[33,13867,44],{"class":43},[33,13869,12104],{"class":47},[33,13871,13872],{"class":35,"line":1425},[33,13873,160],{"emptyLinePlaceholder":159},[33,13875,13876,13878,13880,13882,13884],{"class":35,"line":1438},[33,13877,67],{"class":39},[33,13879,12120],{"class":47},[33,13881,73],{"class":39},[33,13883,3461],{"class":76},[33,13885,80],{"class":47},[33,13887,13888,13890,13892,13894,13896],{"class":35,"line":1451},[33,13889,67],{"class":39},[33,13891,12133],{"class":47},[33,13893,73],{"class":39},[33,13895,10201],{"class":76},[33,13897,80],{"class":47},[33,13899,13900],{"class":35,"line":1457},[33,13901,160],{"emptyLinePlaceholder":159},[33,13903,13904,13907,13910],{"class":35,"line":1466},[33,13905,13906],{"class":43},"    mySwap01",[33,13908,13909],{"class":47},"(a, b);",[33,13911,13912],{"class":60},"\u002F\u002F值传递，形参不会修饰实参\n",[33,13914,13915,13917,13919,13922,13924,13926,13928,13931,13933,13935,13937],{"class":35,"line":1471},[33,13916,314],{"class":47},[33,13918,116],{"class":39},[33,13920,13921],{"class":119}," \"a:\"",[33,13923,2900],{"class":39},[33,13925,12120],{"class":47},[33,13927,116],{"class":39},[33,13929,13930],{"class":119}," \" b:\"",[33,13932,2900],{"class":39},[33,13934,12133],{"class":47},[33,13936,116],{"class":39},[33,13938,10091],{"class":47},[33,13940,13941],{"class":35,"line":1477},[33,13942,160],{"emptyLinePlaceholder":159},[33,13944,13945,13948,13950,13952,13955,13957,13960],{"class":35,"line":1504},[33,13946,13947],{"class":43},"    mySwap02",[33,13949,345],{"class":47},[33,13951,1062],{"class":39},[33,13953,13954],{"class":47},"a, ",[33,13956,1062],{"class":39},[33,13958,13959],{"class":47},"b);",[33,13961,13962],{"class":60},"\u002F\u002F地址传递，形参会修饰实参\n",[33,13964,13965,13967,13969,13971,13973,13975,13977,13979,13981,13983,13985],{"class":35,"line":1509},[33,13966,314],{"class":47},[33,13968,116],{"class":39},[33,13970,13921],{"class":119},[33,13972,2900],{"class":39},[33,13974,12120],{"class":47},[33,13976,116],{"class":39},[33,13978,13930],{"class":119},[33,13980,2900],{"class":39},[33,13982,12133],{"class":47},[33,13984,116],{"class":39},[33,13986,10091],{"class":47},[33,13988,13989],{"class":35,"line":1525},[33,13990,160],{"emptyLinePlaceholder":159},[33,13992,13993,13996,13998],{"class":35,"line":1535},[33,13994,13995],{"class":43},"    mySwap03",[33,13997,13909],{"class":47},[33,13999,14000],{"class":60},"\u002F\u002F引用传递，形参会修饰实参\n",[33,14002,14003,14005,14007,14009,14011,14013,14015,14017,14019,14021,14023],{"class":35,"line":1540},[33,14004,314],{"class":47},[33,14006,116],{"class":39},[33,14008,13921],{"class":119},[33,14010,2900],{"class":39},[33,14012,12120],{"class":47},[33,14014,116],{"class":39},[33,14016,13930],{"class":119},[33,14018,2900],{"class":39},[33,14020,12133],{"class":47},[33,14022,116],{"class":39},[33,14024,10091],{"class":47},[33,14026,14027],{"class":35,"line":4027},[33,14028,160],{"emptyLinePlaceholder":159},[33,14030,14031,14033,14035,14037],{"class":35,"line":4032},[33,14032,3724],{"class":43},[33,14034,345],{"class":47},[33,14036,3729],{"class":119},[33,14038,4130],{"class":47},[33,14040,14041],{"class":35,"line":9199},[33,14042,160],{"emptyLinePlaceholder":159},[33,14044,14045,14047,14049],{"class":35,"line":9223},[33,14046,5489],{"class":39},[33,14048,5492],{"class":76},[33,14050,80],{"class":47},[33,14052,14053],{"class":35,"line":9228},[33,14054,231],{"class":47},[18,14056,14058],{"id":14057},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,14060,14061],{},"作用：引用是可以作为函数的返回值存在的",[14,14063,10276,14064],{},[480,14065,14066],{},"不要返回局部变量引用",[14,14068,14069],{},"用法：函数调用作为左值",[23,14071,14073],{"className":11192,"code":14072,"language":11194,"meta":28,"style":28},"\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",[30,14074,14075,14080,14088,14103,14109,14113,14117,14122,14130,14147,14153,14157,14161,14169,14173,14178,14192,14212,14231,14235,14240,14253,14273,14291,14295,14311,14315,14334,14352,14356,14366,14370,14378],{"__ignoreMap":28},[33,14076,14077],{"class":35,"line":36},[33,14078,14079],{"class":60},"\u002F\u002F返回局部变量引用\n",[33,14081,14082,14084,14086],{"class":35,"line":51},[33,14083,13817],{"class":39},[33,14085,6975],{"class":43},[33,14087,12104],{"class":47},[33,14089,14090,14092,14094,14096,14098,14100],{"class":35,"line":57},[33,14091,67],{"class":39},[33,14093,12120],{"class":47},[33,14095,73],{"class":39},[33,14097,3461],{"class":76},[33,14099,460],{"class":47},[33,14101,14102],{"class":60}," \u002F\u002F局部变量\n",[33,14104,14105,14107],{"class":35,"line":64},[33,14106,5489],{"class":39},[33,14108,2888],{"class":47},[33,14110,14111],{"class":35,"line":83},[33,14112,231],{"class":47},[33,14114,14115],{"class":35,"line":89},[33,14116,160],{"emptyLinePlaceholder":159},[33,14118,14119],{"class":35,"line":98},[33,14120,14121],{"class":60},"\u002F\u002F返回静态变量引用\n",[33,14123,14124,14126,14128],{"class":35,"line":110},[33,14125,13817],{"class":39},[33,14127,7044],{"class":43},[33,14129,12104],{"class":47},[33,14131,14132,14134,14136,14138,14140,14142,14144],{"class":35,"line":134},[33,14133,12271],{"class":39},[33,14135,591],{"class":39},[33,14137,12120],{"class":47},[33,14139,73],{"class":39},[33,14141,10201],{"class":76},[33,14143,460],{"class":47},[33,14145,14146],{"class":60},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[33,14148,14149,14151],{"class":35,"line":156},[33,14150,5489],{"class":39},[33,14152,2888],{"class":47},[33,14154,14155],{"class":35,"line":163},[33,14156,231],{"class":47},[33,14158,14159],{"class":35,"line":169},[33,14160,160],{"emptyLinePlaceholder":159},[33,14162,14163,14165,14167],{"class":35,"line":175},[33,14164,40],{"class":39},[33,14166,44],{"class":43},[33,14168,12104],{"class":47},[33,14170,14171],{"class":35,"line":181},[33,14172,160],{"emptyLinePlaceholder":159},[33,14174,14175],{"class":35,"line":196},[33,14176,14177],{"class":60},"    \u002F\u002F不能返回局部变量的引用\n",[33,14179,14180,14183,14186,14188,14190],{"class":35,"line":213},[33,14181,14182],{"class":39},"    int&",[33,14184,14185],{"class":47}," ref ",[33,14187,73],{"class":39},[33,14189,6975],{"class":43},[33,14191,7023],{"class":47},[33,14193,14194,14196,14198,14201,14203,14205,14207,14209],{"class":35,"line":228},[33,14195,314],{"class":47},[33,14197,116],{"class":39},[33,14199,14200],{"class":119}," \"ref = \"",[33,14202,2900],{"class":39},[33,14204,14185],{"class":47},[33,14206,116],{"class":39},[33,14208,12720],{"class":47},[33,14210,14211],{"class":60},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[33,14213,14214,14216,14218,14220,14222,14224,14226,14228],{"class":35,"line":1345},[33,14215,314],{"class":47},[33,14217,116],{"class":39},[33,14219,14200],{"class":119},[33,14221,2900],{"class":39},[33,14223,14185],{"class":47},[33,14225,116],{"class":39},[33,14227,12720],{"class":47},[33,14229,14230],{"class":60},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[33,14232,14233],{"class":35,"line":1350},[33,14234,160],{"emptyLinePlaceholder":159},[33,14236,14237],{"class":35,"line":1359},[33,14238,14239],{"class":60},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[33,14241,14242,14244,14247,14249,14251],{"class":35,"line":1364},[33,14243,14182],{"class":39},[33,14245,14246],{"class":47}," ref2 ",[33,14248,73],{"class":39},[33,14250,7044],{"class":43},[33,14252,7023],{"class":47},[33,14254,14255,14257,14259,14262,14264,14266,14268,14270],{"class":35,"line":1370},[33,14256,314],{"class":47},[33,14258,116],{"class":39},[33,14260,14261],{"class":119}," \"ref2 = \"",[33,14263,2900],{"class":39},[33,14265,14246],{"class":47},[33,14267,116],{"class":39},[33,14269,12720],{"class":47},[33,14271,14272],{"class":60}," \u002F\u002F20\n",[33,14274,14275,14277,14279,14281,14283,14285,14287,14289],{"class":35,"line":1425},[33,14276,314],{"class":47},[33,14278,116],{"class":39},[33,14280,14261],{"class":119},[33,14282,2900],{"class":39},[33,14284,14246],{"class":47},[33,14286,116],{"class":39},[33,14288,12720],{"class":47},[33,14290,14272],{"class":60},[33,14292,14293],{"class":35,"line":1438},[33,14294,160],{"emptyLinePlaceholder":159},[33,14296,14297,14299,14302,14304,14306,14308],{"class":35,"line":1451},[33,14298,7089],{"class":43},[33,14300,14301],{"class":47},"() ",[33,14303,73],{"class":39},[33,14305,4409],{"class":76},[33,14307,460],{"class":47},[33,14309,14310],{"class":60},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[33,14312,14313],{"class":35,"line":1457},[33,14314,160],{"emptyLinePlaceholder":159},[33,14316,14317,14319,14321,14323,14325,14327,14329,14331],{"class":35,"line":1466},[33,14318,314],{"class":47},[33,14320,116],{"class":39},[33,14322,14261],{"class":119},[33,14324,2900],{"class":39},[33,14326,14246],{"class":47},[33,14328,116],{"class":39},[33,14330,12720],{"class":47},[33,14332,14333],{"class":60}," \u002F\u002F1000\n",[33,14335,14336,14338,14340,14342,14344,14346,14348,14350],{"class":35,"line":1471},[33,14337,314],{"class":47},[33,14339,116],{"class":39},[33,14341,14261],{"class":119},[33,14343,2900],{"class":39},[33,14345,14246],{"class":47},[33,14347,116],{"class":39},[33,14349,12720],{"class":47},[33,14351,14333],{"class":60},[33,14353,14354],{"class":35,"line":1477},[33,14355,160],{"emptyLinePlaceholder":159},[33,14357,14358,14360,14362,14364],{"class":35,"line":1504},[33,14359,3724],{"class":43},[33,14361,345],{"class":47},[33,14363,3729],{"class":119},[33,14365,4130],{"class":47},[33,14367,14368],{"class":35,"line":1509},[33,14369,160],{"emptyLinePlaceholder":159},[33,14371,14372,14374,14376],{"class":35,"line":1525},[33,14373,5489],{"class":39},[33,14375,5492],{"class":76},[33,14377,80],{"class":47},[33,14379,14380],{"class":35,"line":1535},[33,14381,231],{"class":47},[18,14383,14385],{"id":14384},"_65引用的本质","6.5引用的本质",[14,14387,14388,14389],{},"本质：",[480,14390,14391],{},"引用的本质在c++内部实现是一个指针常量.",[23,14393,14395],{"className":25,"code":14394,"language":27,"meta":28,"style":28},"\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",[30,14396,14397,14402,14418,14432,14436,14445,14457,14462,14467,14478,14491,14495,14511,14528,14532,14540,14548],{"__ignoreMap":28},[33,14398,14399],{"class":35,"line":36},[33,14400,14401],{"class":60},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[33,14403,14404,14406,14408,14410,14412,14415],{"class":35,"line":51},[33,14405,943],{"class":39},[33,14407,12636],{"class":43},[33,14409,345],{"class":47},[33,14411,13817],{"class":39},[33,14413,14414],{"class":955}," ref",[33,14416,14417],{"class":47},"){\n",[33,14419,14420,14423,14425,14427,14429],{"class":35,"line":57},[33,14421,14422],{"class":47},"    ref ",[33,14424,73],{"class":39},[33,14426,7141],{"class":76},[33,14428,460],{"class":47},[33,14430,14431],{"class":60}," \u002F\u002F ref是引用，转换为*ref = 100\n",[33,14433,14434],{"class":35,"line":64},[33,14435,231],{"class":47},[33,14437,14438,14440,14442],{"class":35,"line":83},[33,14439,40],{"class":39},[33,14441,44],{"class":43},[33,14443,14444],{"class":47},"(){\n",[33,14446,14447,14449,14451,14453,14455],{"class":35,"line":89},[33,14448,67],{"class":39},[33,14450,12120],{"class":47},[33,14452,73],{"class":39},[33,14454,3461],{"class":76},[33,14456,80],{"class":47},[33,14458,14459],{"class":35,"line":98},[33,14460,14461],{"class":47},"    \n",[33,14463,14464],{"class":35,"line":110},[33,14465,14466],{"class":60},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[33,14468,14469,14471,14473,14475],{"class":35,"line":134},[33,14470,14182],{"class":39},[33,14472,14185],{"class":47},[33,14474,73],{"class":39},[33,14476,14477],{"class":47}," a; \n",[33,14479,14480,14482,14484,14486,14488],{"class":35,"line":156},[33,14481,14422],{"class":47},[33,14483,73],{"class":39},[33,14485,10201],{"class":76},[33,14487,460],{"class":47},[33,14489,14490],{"class":60}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[33,14492,14493],{"class":35,"line":163},[33,14494,14461],{"class":47},[33,14496,14497,14499,14501,14503,14505,14507,14509],{"class":35,"line":169},[33,14498,314],{"class":47},[33,14500,116],{"class":39},[33,14502,13921],{"class":119},[33,14504,2900],{"class":39},[33,14506,12120],{"class":47},[33,14508,116],{"class":39},[33,14510,10091],{"class":47},[33,14512,14513,14515,14517,14520,14522,14524,14526],{"class":35,"line":175},[33,14514,314],{"class":47},[33,14516,116],{"class":39},[33,14518,14519],{"class":119}," \"ref:\"",[33,14521,2900],{"class":39},[33,14523,14185],{"class":47},[33,14525,116],{"class":39},[33,14527,10091],{"class":47},[33,14529,14530],{"class":35,"line":181},[33,14531,14461],{"class":47},[33,14533,14534,14537],{"class":35,"line":196},[33,14535,14536],{"class":43},"    func",[33,14538,14539],{"class":47},"(a);\n",[33,14541,14542,14544,14546],{"class":35,"line":213},[33,14543,5489],{"class":39},[33,14545,5492],{"class":76},[33,14547,80],{"class":47},[33,14549,14550],{"class":35,"line":228},[33,14551,231],{"class":47},[14,14553,12583],{},[574,14555,14556,14559],{},[564,14557,14558],{},"引用的本质，就是一个指针常量",[564,14560,14561],{},"引用一旦初始化，就不可以发生改变",[18,14563,14565],{"id":14564},"_66常量引用","6.6常量引用",[14,14567,14568],{},"作用：常量引用主要用来修饰形参",[14,14570,14571,14572,14575],{},"在函数形参列表中，可以加",[480,14573,14574],{},"const修饰形参","，防止形参改变实参",[23,14577,14579],{"className":25,"code":14578,"language":27,"meta":28,"style":28},"\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",[30,14580,14581,14586,14591,14610,14615,14628,14632,14636,14644,14648,14653,14658,14672,14676,14684,14696,14700,14705,14717,14724,14728,14738,14742,14750],{"__ignoreMap":28},[33,14582,14583],{"class":35,"line":36},[33,14584,14585],{"class":60},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[33,14587,14588],{"class":35,"line":51},[33,14589,14590],{"class":60},"\u002F\u002F加上const就不能修改实参的\n",[33,14592,14593,14595,14598,14600,14602,14605,14608],{"class":35,"line":57},[33,14594,943],{"class":39},[33,14596,14597],{"class":43}," showValue",[33,14599,345],{"class":47},[33,14601,588],{"class":39},[33,14603,14604],{"class":39}," int&",[33,14606,14607],{"class":955}," v",[33,14609,13693],{"class":47},[33,14611,14612],{"class":35,"line":64},[33,14613,14614],{"class":60},"    \u002F\u002Fv += 100;\n",[33,14616,14617,14619,14621,14624,14626],{"class":35,"line":83},[33,14618,314],{"class":47},[33,14620,116],{"class":39},[33,14622,14623],{"class":47}," v ",[33,14625,116],{"class":39},[33,14627,10091],{"class":47},[33,14629,14630],{"class":35,"line":89},[33,14631,231],{"class":47},[33,14633,14634],{"class":35,"line":98},[33,14635,160],{"emptyLinePlaceholder":159},[33,14637,14638,14640,14642],{"class":35,"line":110},[33,14639,40],{"class":39},[33,14641,44],{"class":43},[33,14643,12104],{"class":47},[33,14645,14646],{"class":35,"line":134},[33,14647,160],{"emptyLinePlaceholder":159},[33,14649,14650],{"class":35,"line":156},[33,14651,14652],{"class":60},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[33,14654,14655],{"class":35,"line":163},[33,14656,14657],{"class":60},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[33,14659,14660,14662,14664,14666,14668,14670],{"class":35,"line":169},[33,14661,12472],{"class":39},[33,14663,14604],{"class":39},[33,14665,14185],{"class":47},[33,14667,73],{"class":39},[33,14669,3461],{"class":76},[33,14671,80],{"class":47},[33,14673,14674],{"class":35,"line":175},[33,14675,160],{"emptyLinePlaceholder":159},[33,14677,14678,14681],{"class":35,"line":181},[33,14679,14680],{"class":60},"    \u002F\u002Fref = 100;",[33,14682,14683],{"class":60},"  \u002F\u002F加入const后不可以修改变量\n",[33,14685,14686,14688,14690,14692,14694],{"class":35,"line":196},[33,14687,314],{"class":47},[33,14689,116],{"class":39},[33,14691,14185],{"class":47},[33,14693,116],{"class":39},[33,14695,10091],{"class":47},[33,14697,14698],{"class":35,"line":213},[33,14699,160],{"emptyLinePlaceholder":159},[33,14701,14702],{"class":35,"line":228},[33,14703,14704],{"class":60},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[33,14706,14707,14709,14711,14713,14715],{"class":35,"line":1345},[33,14708,67],{"class":39},[33,14710,12120],{"class":47},[33,14712,73],{"class":39},[33,14714,3461],{"class":76},[33,14716,80],{"class":47},[33,14718,14719,14722],{"class":35,"line":1350},[33,14720,14721],{"class":43},"    showValue",[33,14723,14539],{"class":47},[33,14725,14726],{"class":35,"line":1359},[33,14727,160],{"emptyLinePlaceholder":159},[33,14729,14730,14732,14734,14736],{"class":35,"line":1364},[33,14731,3724],{"class":43},[33,14733,345],{"class":47},[33,14735,3729],{"class":119},[33,14737,4130],{"class":47},[33,14739,14740],{"class":35,"line":1370},[33,14741,160],{"emptyLinePlaceholder":159},[33,14743,14744,14746,14748],{"class":35,"line":1425},[33,14745,5489],{"class":39},[33,14747,5492],{"class":76},[33,14749,80],{"class":47},[33,14751,14752],{"class":35,"line":1438},[33,14753,231],{"class":47},[1544,14755,14756],{},"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":28,"searchDepth":51,"depth":51,"links":14758},[14759,14760,14761,14762,14763,14764],{"id":13291,"depth":51,"text":13292},{"id":13470,"depth":51,"text":13471},{"id":13653,"depth":51,"text":13654},{"id":14057,"depth":51,"text":14058},{"id":14384,"depth":51,"text":14385},{"id":14564,"depth":51,"text":14565},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13283,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14771,"title":14772,"body":14773,"description":28,"extension":1557,"meta":15854,"navigation":159,"path":15855,"seo":15856,"stem":15857,"__hash__":15858},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14774,"toc":15846},[14775,14778,14782,14785,14790,15022,15024,15035,15039,15042,15050,15154,15157,15161,15164,15168,15171,15176,15198,15204,15531,15534,15538,15546,15843],[10,14776,14772],{"id":14777},"_7函数高级部分",[18,14779,14781],{"id":14780},"_71函数默认参数","7.1函数默认参数",[14,14783,14784],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,14786,6572,14787],{},[30,14788,14789],{}," 返回值类型  函数名 （参数= 默认值）{}",[23,14791,14793],{"className":25,"code":14792,"language":27,"meta":28,"style":28},"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",[30,14794,14795,14830,14845,14849,14853,14858,14863,14892,14912,14922,14926,14930,14938,14942,14970,14992,14996,15006,15010,15018],{"__ignoreMap":28},[33,14796,14797,14799,14801,14803,14805,14807,14809,14811,14813,14816,14818,14820,14822,14824,14826,14828],{"class":35,"line":36},[33,14798,40],{"class":39},[33,14800,12636],{"class":43},[33,14802,345],{"class":47},[33,14804,40],{"class":39},[33,14806,70],{"class":955},[33,14808,13686],{"class":47},[33,14810,40],{"class":39},[33,14812,1040],{"class":955},[33,14814,14815],{"class":39}," =",[33,14817,3461],{"class":76},[33,14819,13686],{"class":47},[33,14821,40],{"class":39},[33,14823,4259],{"class":955},[33,14825,14815],{"class":39},[33,14827,3461],{"class":76},[33,14829,13693],{"class":47},[33,14831,14832,14834,14836,14838,14840,14842],{"class":35,"line":51},[33,14833,5489],{"class":39},[33,14835,12120],{"class":47},[33,14837,1271],{"class":39},[33,14839,12133],{"class":47},[33,14841,1271],{"class":39},[33,14843,14844],{"class":47}," c;\n",[33,14846,14847],{"class":35,"line":57},[33,14848,231],{"class":47},[33,14850,14851],{"class":35,"line":64},[33,14852,160],{"emptyLinePlaceholder":159},[33,14854,14855],{"class":35,"line":83},[33,14856,14857],{"class":60},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[33,14859,14860],{"class":35,"line":89},[33,14861,14862],{"class":60},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[33,14864,14865,14867,14870,14872,14874,14876,14878,14880,14882,14884,14886,14888,14890],{"class":35,"line":98},[33,14866,40],{"class":39},[33,14868,14869],{"class":43}," func2",[33,14871,345],{"class":47},[33,14873,40],{"class":39},[33,14875,70],{"class":955},[33,14877,14815],{"class":39},[33,14879,3461],{"class":76},[33,14881,13686],{"class":47},[33,14883,40],{"class":39},[33,14885,1040],{"class":955},[33,14887,14815],{"class":39},[33,14889,3461],{"class":76},[33,14891,4130],{"class":47},[33,14893,14894,14896,14898,14900,14902,14904,14906,14908,14910],{"class":35,"line":110},[33,14895,40],{"class":39},[33,14897,14869],{"class":43},[33,14899,345],{"class":47},[33,14901,40],{"class":39},[33,14903,70],{"class":955},[33,14905,13686],{"class":47},[33,14907,40],{"class":39},[33,14909,1040],{"class":955},[33,14911,13693],{"class":47},[33,14913,14914,14916,14918,14920],{"class":35,"line":134},[33,14915,5489],{"class":39},[33,14917,12120],{"class":47},[33,14919,1271],{"class":39},[33,14921,13714],{"class":47},[33,14923,14924],{"class":35,"line":156},[33,14925,231],{"class":47},[33,14927,14928],{"class":35,"line":163},[33,14929,160],{"emptyLinePlaceholder":159},[33,14931,14932,14934,14936],{"class":35,"line":169},[33,14933,40],{"class":39},[33,14935,44],{"class":43},[33,14937,12104],{"class":47},[33,14939,14940],{"class":35,"line":175},[33,14941,160],{"emptyLinePlaceholder":159},[33,14943,14944,14946,14948,14951,14953,14955,14957,14959,14961,14963,14966,14968],{"class":35,"line":181},[33,14945,314],{"class":47},[33,14947,116],{"class":39},[33,14949,14950],{"class":119}," \"ret = \"",[33,14952,2900],{"class":39},[33,14954,12636],{"class":43},[33,14956,345],{"class":47},[33,14958,1045],{"class":76},[33,14960,13686],{"class":47},[33,14962,1045],{"class":76},[33,14964,14965],{"class":47},") ",[33,14967,116],{"class":39},[33,14969,10091],{"class":47},[33,14971,14972,14974,14976,14978,14980,14982,14984,14986,14988,14990],{"class":35,"line":196},[33,14973,314],{"class":47},[33,14975,116],{"class":39},[33,14977,14950],{"class":119},[33,14979,2900],{"class":39},[33,14981,12636],{"class":43},[33,14983,345],{"class":47},[33,14985,457],{"class":76},[33,14987,14965],{"class":47},[33,14989,116],{"class":39},[33,14991,10091],{"class":47},[33,14993,14994],{"class":35,"line":213},[33,14995,160],{"emptyLinePlaceholder":159},[33,14997,14998,15000,15002,15004],{"class":35,"line":228},[33,14999,3724],{"class":43},[33,15001,345],{"class":47},[33,15003,3729],{"class":119},[33,15005,4130],{"class":47},[33,15007,15008],{"class":35,"line":1345},[33,15009,160],{"emptyLinePlaceholder":159},[33,15011,15012,15014,15016],{"class":35,"line":1350},[33,15013,5489],{"class":39},[33,15015,5492],{"class":76},[33,15017,80],{"class":47},[33,15019,15020],{"class":35,"line":1359},[33,15021,231],{"class":47},[14,15023,12583],{},[574,15025,15026,15029,15032],{},[564,15027,15028],{},"我传就用我；没传就用你",[564,15030,15031],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[564,15033,15034],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[18,15036,15038],{"id":15037},"_72函数的占位参数","7.2函数的占位参数",[14,15040,15041],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,15043,15044,15046,15047],{},[480,15045,6572],{}," ",[30,15048,15049],{},"返回值类型 函数名 (数据类型){}",[23,15051,15053],{"className":25,"code":15052,"language":27,"meta":28,"style":28},"\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",[30,15054,15055,15060,15078,15091,15095,15103,15107,15124,15128,15138,15142,15150],{"__ignoreMap":28},[33,15056,15057],{"class":35,"line":36},[33,15058,15059],{"class":60},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[33,15061,15062,15064,15066,15068,15070,15072,15074,15076],{"class":35,"line":51},[33,15063,943],{"class":39},[33,15065,12636],{"class":43},[33,15067,345],{"class":47},[33,15069,40],{"class":39},[33,15071,70],{"class":955},[33,15073,13686],{"class":47},[33,15075,40],{"class":39},[33,15077,13693],{"class":47},[33,15079,15080,15082,15084,15087,15089],{"class":35,"line":57},[33,15081,314],{"class":47},[33,15083,116],{"class":39},[33,15085,15086],{"class":119}," \"this is func\"",[33,15088,2900],{"class":39},[33,15090,10091],{"class":47},[33,15092,15093],{"class":35,"line":64},[33,15094,231],{"class":47},[33,15096,15097,15099,15101],{"class":35,"line":83},[33,15098,40],{"class":39},[33,15100,44],{"class":43},[33,15102,12104],{"class":47},[33,15104,15105],{"class":35,"line":89},[33,15106,160],{"emptyLinePlaceholder":159},[33,15108,15109,15111,15113,15115,15117,15119,15121],{"class":35,"line":98},[33,15110,14536],{"class":43},[33,15112,345],{"class":47},[33,15114,77],{"class":76},[33,15116,704],{"class":47},[33,15118,77],{"class":76},[33,15120,7353],{"class":47},[33,15122,15123],{"class":60}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[33,15125,15126],{"class":35,"line":110},[33,15127,160],{"emptyLinePlaceholder":159},[33,15129,15130,15132,15134,15136],{"class":35,"line":134},[33,15131,3724],{"class":43},[33,15133,345],{"class":47},[33,15135,3729],{"class":119},[33,15137,4130],{"class":47},[33,15139,15140],{"class":35,"line":156},[33,15141,160],{"emptyLinePlaceholder":159},[33,15143,15144,15146,15148],{"class":35,"line":163},[33,15145,5489],{"class":39},[33,15147,5492],{"class":76},[33,15149,80],{"class":47},[33,15151,15152],{"class":35,"line":169},[33,15153,231],{"class":47},[14,15155,15156],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[18,15158,15160],{"id":15159},"_73函数重载","7.3函数重载",[14,15162,15163],{},"意思是函数名是可以相同的",[1599,15165,15167],{"id":15166},"_731基本语法","7.3.1基本语法",[14,15169,15170],{},"作用：函数名可以相同，提高复用性",[14,15172,15173],{},[480,15174,15175],{},"函数重载满足条件：",[561,15177,15178,15181,15184],{},[564,15179,15180],{},"同一个作用域下",[564,15182,15183],{},"函数名称相同",[564,15185,15186,15187,15190,15191,15194,15195],{},"函数参数",[480,15188,15189],{},"类型不同","  或者 ",[480,15192,15193],{},"个数不同"," 或者 ",[480,15196,15197],{},"顺序不同",[14,15199,15200,15203],{},[480,15201,15202],{},"注意:","  函数的返回值不可以作为函数重载的条件",[23,15205,15207],{"className":11192,"code":15206,"language":11194,"meta":28,"style":28},"\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",[30,15208,15209,15214,15222,15226,15239,15243,15257,15261,15274,15278,15293,15297,15310,15314,15335,15339,15352,15356,15376,15380,15393,15397,15401,15406,15411,15416,15421,15426,15430,15434,15442,15446,15452,15462,15472,15486,15501,15505,15515,15519,15527],{"__ignoreMap":28},[33,15210,15211],{"class":35,"line":36},[33,15212,15213],{"class":60},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[33,15215,15216,15218,15220],{"class":35,"line":51},[33,15217,943],{"class":39},[33,15219,12636],{"class":43},[33,15221,48],{"class":47},[33,15223,15224],{"class":35,"line":57},[33,15225,54],{"class":47},[33,15227,15228,15230,15232,15235,15237],{"class":35,"line":64},[33,15229,314],{"class":47},[33,15231,116],{"class":39},[33,15233,15234],{"class":119}," \"func 的调用！\"",[33,15236,2900],{"class":39},[33,15238,10091],{"class":47},[33,15240,15241],{"class":35,"line":83},[33,15242,231],{"class":47},[33,15244,15245,15247,15249,15251,15253,15255],{"class":35,"line":89},[33,15246,943],{"class":39},[33,15248,12636],{"class":43},[33,15250,345],{"class":47},[33,15252,40],{"class":39},[33,15254,70],{"class":955},[33,15256,884],{"class":47},[33,15258,15259],{"class":35,"line":98},[33,15260,54],{"class":47},[33,15262,15263,15265,15267,15270,15272],{"class":35,"line":110},[33,15264,314],{"class":47},[33,15266,116],{"class":39},[33,15268,15269],{"class":119}," \"func (int a) 的调用！\"",[33,15271,2900],{"class":39},[33,15273,10091],{"class":47},[33,15275,15276],{"class":35,"line":134},[33,15277,231],{"class":47},[33,15279,15280,15282,15284,15286,15289,15291],{"class":35,"line":156},[33,15281,943],{"class":39},[33,15283,12636],{"class":43},[33,15285,345],{"class":47},[33,15287,15288],{"class":39},"double",[33,15290,70],{"class":955},[33,15292,884],{"class":47},[33,15294,15295],{"class":35,"line":163},[33,15296,54],{"class":47},[33,15298,15299,15301,15303,15306,15308],{"class":35,"line":169},[33,15300,314],{"class":47},[33,15302,116],{"class":39},[33,15304,15305],{"class":119}," \"func (double a)的调用！\"",[33,15307,2900],{"class":39},[33,15309,10091],{"class":47},[33,15311,15312],{"class":35,"line":175},[33,15313,231],{"class":47},[33,15315,15316,15318,15320,15322,15324,15326,15329,15331,15333],{"class":35,"line":181},[33,15317,943],{"class":39},[33,15319,12636],{"class":43},[33,15321,345],{"class":47},[33,15323,40],{"class":39},[33,15325,70],{"class":955},[33,15327,15328],{"class":47}," ,",[33,15330,15288],{"class":39},[33,15332,1040],{"class":955},[33,15334,884],{"class":47},[33,15336,15337],{"class":35,"line":196},[33,15338,54],{"class":47},[33,15340,15341,15343,15345,15348,15350],{"class":35,"line":213},[33,15342,314],{"class":47},[33,15344,116],{"class":39},[33,15346,15347],{"class":119}," \"func (int a ,double b) 的调用！\"",[33,15349,2900],{"class":39},[33,15351,10091],{"class":47},[33,15353,15354],{"class":35,"line":228},[33,15355,231],{"class":47},[33,15357,15358,15360,15362,15364,15366,15368,15370,15372,15374],{"class":35,"line":1345},[33,15359,943],{"class":39},[33,15361,12636],{"class":43},[33,15363,345],{"class":47},[33,15365,15288],{"class":39},[33,15367,70],{"class":955},[33,15369,15328],{"class":47},[33,15371,40],{"class":39},[33,15373,1040],{"class":955},[33,15375,884],{"class":47},[33,15377,15378],{"class":35,"line":1350},[33,15379,54],{"class":47},[33,15381,15382,15384,15386,15389,15391],{"class":35,"line":1359},[33,15383,314],{"class":47},[33,15385,116],{"class":39},[33,15387,15388],{"class":119}," \"func (double a ,int b)的调用！\"",[33,15390,2900],{"class":39},[33,15392,10091],{"class":47},[33,15394,15395],{"class":35,"line":1364},[33,15396,231],{"class":47},[33,15398,15399],{"class":35,"line":1370},[33,15400,160],{"emptyLinePlaceholder":159},[33,15402,15403],{"class":35,"line":1425},[33,15404,15405],{"class":60},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[33,15407,15408],{"class":35,"line":1438},[33,15409,15410],{"class":60},"\u002F\u002Fint func(double a, int b)\n",[33,15412,15413],{"class":35,"line":1451},[33,15414,15415],{"class":60},"\u002F\u002F{\n",[33,15417,15418],{"class":35,"line":1457},[33,15419,15420],{"class":60},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[33,15422,15423],{"class":35,"line":1466},[33,15424,15425],{"class":60},"\u002F\u002F}\n",[33,15427,15428],{"class":35,"line":1471},[33,15429,160],{"emptyLinePlaceholder":159},[33,15431,15432],{"class":35,"line":1477},[33,15433,160],{"emptyLinePlaceholder":159},[33,15435,15436,15438,15440],{"class":35,"line":1504},[33,15437,40],{"class":39},[33,15439,44],{"class":43},[33,15441,12104],{"class":47},[33,15443,15444],{"class":35,"line":1509},[33,15445,160],{"emptyLinePlaceholder":159},[33,15447,15448,15450],{"class":35,"line":1525},[33,15449,14536],{"class":43},[33,15451,7023],{"class":47},[33,15453,15454,15456,15458,15460],{"class":35,"line":1535},[33,15455,14536],{"class":43},[33,15457,345],{"class":47},[33,15459,77],{"class":76},[33,15461,4130],{"class":47},[33,15463,15464,15466,15468,15470],{"class":35,"line":1540},[33,15465,14536],{"class":43},[33,15467,345],{"class":47},[33,15469,1674],{"class":76},[33,15471,4130],{"class":47},[33,15473,15474,15476,15478,15480,15482,15484],{"class":35,"line":4027},[33,15475,14536],{"class":43},[33,15477,345],{"class":47},[33,15479,77],{"class":76},[33,15481,704],{"class":47},[33,15483,1674],{"class":76},[33,15485,4130],{"class":47},[33,15487,15488,15490,15492,15494,15497,15499],{"class":35,"line":4032},[33,15489,14536],{"class":43},[33,15491,345],{"class":47},[33,15493,1674],{"class":76},[33,15495,15496],{"class":47}," , ",[33,15498,77],{"class":76},[33,15500,4130],{"class":47},[33,15502,15503],{"class":35,"line":9199},[33,15504,14461],{"class":47},[33,15506,15507,15509,15511,15513],{"class":35,"line":9223},[33,15508,3724],{"class":43},[33,15510,345],{"class":47},[33,15512,3729],{"class":119},[33,15514,4130],{"class":47},[33,15516,15517],{"class":35,"line":9228},[33,15518,160],{"emptyLinePlaceholder":159},[33,15520,15521,15523,15525],{"class":35,"line":9234},[33,15522,5489],{"class":39},[33,15524,5492],{"class":76},[33,15526,80],{"class":47},[33,15528,15529],{"class":35,"line":9261},[33,15530,231],{"class":47},[14,15532,15533],{},"重点：函数返回值不可以作为函数重载条件！",[1599,15535,15537],{"id":15536},"_732注意事项","7.3.2注意事项",[561,15539,15540,15543],{},[564,15541,15542],{},"引用作为重载条件!!!",[564,15544,15545],{},"函数重载碰到函数默认参数",[23,15547,15549],{"className":25,"code":15548,"language":27,"meta":28,"style":28},"\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",[30,15550,15551,15556,15561,15565,15581,15585,15598,15602,15606,15624,15628,15641,15645,15649,15653,15658,15662,15686,15690,15703,15707,15711,15725,15729,15742,15746,15750,15758,15762,15774,15784,15797,15801,15805,15813,15817,15827,15831,15839],{"__ignoreMap":28},[33,15552,15553],{"class":35,"line":36},[33,15554,15555],{"class":60},"\u002F\u002F函数重载注意事项\n",[33,15557,15558],{"class":35,"line":51},[33,15559,15560],{"class":60},"\u002F\u002F1、引用作为重载条件\n",[33,15562,15563],{"class":35,"line":57},[33,15564,160],{"emptyLinePlaceholder":159},[33,15566,15567,15569,15571,15573,15575,15577,15579],{"class":35,"line":64},[33,15568,943],{"class":39},[33,15570,12636],{"class":43},[33,15572,345],{"class":47},[33,15574,40],{"class":39},[33,15576,11835],{"class":39},[33,15578,126],{"class":955},[33,15580,884],{"class":47},[33,15582,15583],{"class":35,"line":83},[33,15584,54],{"class":47},[33,15586,15587,15589,15591,15594,15596],{"class":35,"line":89},[33,15588,314],{"class":47},[33,15590,116],{"class":39},[33,15592,15593],{"class":119}," \"func (int &a) 调用 \"",[33,15595,2900],{"class":39},[33,15597,10091],{"class":47},[33,15599,15600],{"class":35,"line":98},[33,15601,231],{"class":47},[33,15603,15604],{"class":35,"line":110},[33,15605,160],{"emptyLinePlaceholder":159},[33,15607,15608,15610,15612,15614,15616,15618,15620,15622],{"class":35,"line":134},[33,15609,943],{"class":39},[33,15611,12636],{"class":43},[33,15613,345],{"class":47},[33,15615,588],{"class":39},[33,15617,591],{"class":39},[33,15619,11835],{"class":39},[33,15621,126],{"class":955},[33,15623,884],{"class":47},[33,15625,15626],{"class":35,"line":156},[33,15627,54],{"class":47},[33,15629,15630,15632,15634,15637,15639],{"class":35,"line":163},[33,15631,314],{"class":47},[33,15633,116],{"class":39},[33,15635,15636],{"class":119}," \"func (const int &a) 调用 \"",[33,15638,2900],{"class":39},[33,15640,10091],{"class":47},[33,15642,15643],{"class":35,"line":169},[33,15644,231],{"class":47},[33,15646,15647],{"class":35,"line":175},[33,15648,160],{"emptyLinePlaceholder":159},[33,15650,15651],{"class":35,"line":181},[33,15652,160],{"emptyLinePlaceholder":159},[33,15654,15655],{"class":35,"line":196},[33,15656,15657],{"class":60},"\u002F\u002F2、函数重载碰到函数默认参数\n",[33,15659,15660],{"class":35,"line":213},[33,15661,160],{"emptyLinePlaceholder":159},[33,15663,15664,15666,15668,15670,15672,15674,15676,15678,15680,15682,15684],{"class":35,"line":228},[33,15665,943],{"class":39},[33,15667,14869],{"class":43},[33,15669,345],{"class":47},[33,15671,40],{"class":39},[33,15673,70],{"class":955},[33,15675,13686],{"class":47},[33,15677,40],{"class":39},[33,15679,1040],{"class":955},[33,15681,14815],{"class":39},[33,15683,3461],{"class":76},[33,15685,884],{"class":47},[33,15687,15688],{"class":35,"line":1345},[33,15689,54],{"class":47},[33,15691,15692,15694,15696,15699,15701],{"class":35,"line":1350},[33,15693,314],{"class":47},[33,15695,116],{"class":39},[33,15697,15698],{"class":119}," \"func2(int a, int b = 10) 调用\"",[33,15700,2900],{"class":39},[33,15702,10091],{"class":47},[33,15704,15705],{"class":35,"line":1359},[33,15706,231],{"class":47},[33,15708,15709],{"class":35,"line":1364},[33,15710,160],{"emptyLinePlaceholder":159},[33,15712,15713,15715,15717,15719,15721,15723],{"class":35,"line":1370},[33,15714,943],{"class":39},[33,15716,14869],{"class":43},[33,15718,345],{"class":47},[33,15720,40],{"class":39},[33,15722,70],{"class":955},[33,15724,884],{"class":47},[33,15726,15727],{"class":35,"line":1425},[33,15728,54],{"class":47},[33,15730,15731,15733,15735,15738,15740],{"class":35,"line":1438},[33,15732,314],{"class":47},[33,15734,116],{"class":39},[33,15736,15737],{"class":119}," \"func2(int a) 调用\"",[33,15739,2900],{"class":39},[33,15741,10091],{"class":47},[33,15743,15744],{"class":35,"line":1451},[33,15745,231],{"class":47},[33,15747,15748],{"class":35,"line":1457},[33,15749,160],{"emptyLinePlaceholder":159},[33,15751,15752,15754,15756],{"class":35,"line":1466},[33,15753,40],{"class":39},[33,15755,44],{"class":43},[33,15757,12104],{"class":47},[33,15759,15760],{"class":35,"line":1471},[33,15761,14461],{"class":47},[33,15763,15764,15766,15768,15770,15772],{"class":35,"line":1477},[33,15765,67],{"class":39},[33,15767,12120],{"class":47},[33,15769,73],{"class":39},[33,15771,3461],{"class":76},[33,15773,80],{"class":47},[33,15775,15776,15778,15781],{"class":35,"line":1504},[33,15777,14536],{"class":43},[33,15779,15780],{"class":47},"(a);",[33,15782,15783],{"class":60}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[33,15785,15786,15788,15790,15792,15794],{"class":35,"line":1509},[33,15787,14536],{"class":43},[33,15789,345],{"class":47},[33,15791,77],{"class":76},[33,15793,7353],{"class":47},[33,15795,15796],{"class":60},"\u002F\u002F调用有const   10是个常量\n",[33,15798,15799],{"class":35,"line":1525},[33,15800,160],{"emptyLinePlaceholder":159},[33,15802,15803],{"class":35,"line":1535},[33,15804,160],{"emptyLinePlaceholder":159},[33,15806,15807,15810],{"class":35,"line":1540},[33,15808,15809],{"class":60},"    \u002F\u002Ffunc2(10);",[33,15811,15812],{"class":60}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[33,15814,15815],{"class":35,"line":4027},[33,15816,160],{"emptyLinePlaceholder":159},[33,15818,15819,15821,15823,15825],{"class":35,"line":4032},[33,15820,3724],{"class":43},[33,15822,345],{"class":47},[33,15824,3729],{"class":119},[33,15826,4130],{"class":47},[33,15828,15829],{"class":35,"line":9199},[33,15830,160],{"emptyLinePlaceholder":159},[33,15832,15833,15835,15837],{"class":35,"line":9223},[33,15834,5489],{"class":39},[33,15836,5492],{"class":76},[33,15838,80],{"class":47},[33,15840,15841],{"class":35,"line":9228},[33,15842,231],{"class":47},[1544,15844,15845],{},"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":28,"searchDepth":51,"depth":51,"links":15847},[15848,15849,15850],{"id":14780,"depth":51,"text":14781},{"id":15037,"depth":51,"text":15038},{"id":15159,"depth":51,"text":15160,"children":15851},[15852,15853],{"id":15166,"depth":57,"text":15167},{"id":15536,"depth":57,"text":15537},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14772,"description":28},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15860,"title":15861,"body":15862,"description":24616,"extension":1557,"meta":24617,"navigation":159,"path":24618,"seo":24619,"stem":24620,"__hash__":24621},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15863,"toc":24597},[15864,15867,15873,15880,15885,15888,15891,15894,15898,15902,15905,15908,15916,15921,15924,15931,15936,16095,16098,16351,16354,16357,16360,16365,16368,16371,16382,16387,16623,16627,16637,16640,16648,16795,16799,16802,16805,16809,17254,17258,17266,17274,18186,18193,18198,18826,18829,18832,18835,18954,18957,19044,19047,19173,19176,19270,19273,19626,19630,19638,19642,19649,19652,19655,19666,19672,19677,19689,19697,19717,19725,19742,19928,19931,19935,19938,19941,19944,19947,19950,19953,19956,20416,20422,20426,20429,20440,21027,21030,21519,21523,21526,21529,21532,21535,21538,21546,21942,21946,21949,21952,22399,22402,22405,22410,22413,22418,22421,22425,22428,22430,22436,22439,22745,22755,22796,22800,22803,22805,22838,22841,23148,23150,23165,23168,23191,23200,23206,23209,23213,23216,23219,23224,23235,23240,23248,23253,23383,23386,23389,23564,23569,23781,23785,23788,23902,23907,24146,24150,24154,24157,24160,24165,24270,24273,24276,24279,24283,24394,24397,24400,24405,24457,24460,24463,24468,24514,24517,24522,24590,24592,24595],[10,15865,15861],{"id":15866},"_8类和对象",[14,15868,15869,15870],{},"C++面向对象的三大特性为",[480,15871,15872],{},"封装、继承、多态",[14,15874,15875,15876,15879],{},"C++认为",[480,15877,15878],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,15881,15882],{},[480,15883,15884],{},"例如：",[14,15886,15887],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,15889,15890],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,15892,15893],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[18,15895,15897],{"id":15896},"_81封装","8.1封装",[1599,15899,15901],{"id":15900},"_811封装的意义","8.1.1封装的意义",[14,15903,15904],{},"封装是C++面向对象三大特性之一",[14,15906,15907],{},"封装的意义：",[561,15909,15910,15913],{},[564,15911,15912],{},"将属性和行为作为一个整体，表现生活中的事物",[564,15914,15915],{},"将属性和行为加以权限控制",[14,15917,15918],{},[480,15919,15920],{},"封装意义一：",[14,15922,15923],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15925,15926,15046,15928],{},[480,15927,6572],{},[30,15929,15930],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[574,15932,15933],{},[564,15934,15935],{},"**示例1：**设计一个圆类，求圆的周长",[23,15937,15939],{"className":25,"code":15938,"language":27,"meta":28,"style":28},"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",[30,15940,15941,15949,15953,15958,15963,15968,15973,15980,15985,15995,15999,16017,16021,16025,16033,16037,16042,16047,16052,16057,16068,16091],{"__ignoreMap":28},[33,15942,15943,15946],{"class":35,"line":36},[33,15944,15945],{"class":39},"class",[33,15947,15948],{"class":43}," Circle\n",[33,15950,15951],{"class":35,"line":51},[33,15952,54],{"class":47},[33,15954,15955],{"class":35,"line":57},[33,15956,15957],{"class":60},"    \u002F\u002F访问权限\n",[33,15959,15960],{"class":35,"line":64},[33,15961,15962],{"class":60},"    \u002F\u002F公共权限\n",[33,15964,15965],{"class":35,"line":83},[33,15966,15967],{"class":39},"public:\n",[33,15969,15970],{"class":35,"line":89},[33,15971,15972],{"class":60},"    \u002F\u002F属性\n",[33,15974,15975,15977],{"class":35,"line":98},[33,15976,67],{"class":39},[33,15978,15979],{"class":47}," m_r;\n",[33,15981,15982],{"class":35,"line":110},[33,15983,15984],{"class":60},"    \u002F\u002F行为\n",[33,15986,15987,15990,15993],{"class":35,"line":134},[33,15988,15989],{"class":39},"    double",[33,15991,15992],{"class":43}," calculateZC",[33,15994,48],{"class":47},[33,15996,15997],{"class":35,"line":156},[33,15998,889],{"class":47},[33,16000,16001,16004,16007,16009,16012,16014],{"class":35,"line":163},[33,16002,16003],{"class":39},"        return",[33,16005,16006],{"class":76}," 2",[33,16008,2057],{"class":39},[33,16010,16011],{"class":47},"PI",[33,16013,2057],{"class":39},[33,16015,16016],{"class":47},"m_r;\n",[33,16018,16019],{"class":35,"line":169},[33,16020,916],{"class":47},[33,16022,16023],{"class":35,"line":175},[33,16024,749],{"class":47},[33,16026,16027,16029,16031],{"class":35,"line":181},[33,16028,40],{"class":39},[33,16030,44],{"class":43},[33,16032,48],{"class":47},[33,16034,16035],{"class":35,"line":196},[33,16036,54],{"class":47},[33,16038,16039],{"class":35,"line":213},[33,16040,16041],{"class":60},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[33,16043,16044],{"class":35,"line":228},[33,16045,16046],{"class":60},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[33,16048,16049],{"class":35,"line":1345},[33,16050,16051],{"class":47},"    Circle c1;\n",[33,16053,16054],{"class":35,"line":1350},[33,16055,16056],{"class":60},"    \u002F\u002F给圆对象 的属性进行赋值\n",[33,16058,16059,16062,16064,16066],{"class":35,"line":1359},[33,16060,16061],{"class":47},"    c1.m_r",[33,16063,73],{"class":39},[33,16065,77],{"class":76},[33,16067,80],{"class":47},[33,16069,16070,16072,16074,16077,16079,16082,16085,16087,16089],{"class":35,"line":1364},[33,16071,113],{"class":47},[33,16073,116],{"class":39},[33,16075,16076],{"class":119},"\"圆的周长\"",[33,16078,116],{"class":39},[33,16080,16081],{"class":47},"c1.",[33,16083,16084],{"class":43},"calculateZC",[33,16086,3845],{"class":47},[33,16088,116],{"class":39},[33,16090,131],{"class":47},[33,16092,16093],{"class":35,"line":1370},[33,16094,231],{"class":47},[14,16096,16097],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[23,16099,16101],{"className":25,"code":16100,"language":27,"meta":28,"style":28},"#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",[30,16102,16103,16109,16119,16125,16131,16135,16139,16144,16151,16156,16174,16178,16188,16192,16197,16213,16217,16227,16231,16236,16244,16248,16280,16284,16288,16296,16300,16305,16310,16324,16338,16347],{"__ignoreMap":28},[33,16104,16105,16107],{"class":35,"line":36},[33,16106,1131],{"class":39},[33,16108,1134],{"class":119},[33,16110,16111,16113,16115,16117],{"class":35,"line":51},[33,16112,1139],{"class":39},[33,16114,1142],{"class":39},[33,16116,1145],{"class":43},[33,16118,80],{"class":47},[33,16120,16121,16123],{"class":35,"line":57},[33,16122,1131],{"class":39},[33,16124,9000],{"class":119},[33,16126,16127,16129],{"class":35,"line":64},[33,16128,15945],{"class":39},[33,16130,9013],{"class":43},[33,16132,16133],{"class":35,"line":83},[33,16134,54],{"class":47},[33,16136,16137],{"class":35,"line":89},[33,16138,15967],{"class":39},[33,16140,16141],{"class":35,"line":98},[33,16142,16143],{"class":47},"    string m_name;\n",[33,16145,16146,16148],{"class":35,"line":110},[33,16147,67],{"class":39},[33,16149,16150],{"class":47}," m_id;\n",[33,16152,16153],{"class":35,"line":134},[33,16154,16155],{"class":60},"    \u002F\u002F赋值姓名\n",[33,16157,16158,16161,16164,16166,16169,16172],{"class":35,"line":156},[33,16159,16160],{"class":39},"    void",[33,16162,16163],{"class":43}," setName",[33,16165,345],{"class":47},[33,16167,16168],{"class":43},"string",[33,16170,16171],{"class":955}," name",[33,16173,884],{"class":47},[33,16175,16176],{"class":35,"line":163},[33,16177,889],{"class":47},[33,16179,16180,16183,16185],{"class":35,"line":169},[33,16181,16182],{"class":47},"        m_name",[33,16184,73],{"class":39},[33,16186,16187],{"class":47},"name;\n",[33,16189,16190],{"class":35,"line":175},[33,16191,916],{"class":47},[33,16193,16194],{"class":35,"line":181},[33,16195,16196],{"class":60},"    \u002F\u002F赋值学号\n",[33,16198,16199,16201,16204,16206,16208,16211],{"class":35,"line":196},[33,16200,16160],{"class":39},[33,16202,16203],{"class":43}," setId",[33,16205,345],{"class":47},[33,16207,40],{"class":39},[33,16209,16210],{"class":955}," id",[33,16212,884],{"class":47},[33,16214,16215],{"class":35,"line":213},[33,16216,889],{"class":47},[33,16218,16219,16222,16224],{"class":35,"line":228},[33,16220,16221],{"class":47},"        m_id",[33,16223,73],{"class":39},[33,16225,16226],{"class":47},"id;\n",[33,16228,16229],{"class":35,"line":1345},[33,16230,916],{"class":47},[33,16232,16233],{"class":35,"line":1350},[33,16234,16235],{"class":60},"    \u002F\u002F打印学生信息\n",[33,16237,16238,16240,16242],{"class":35,"line":1359},[33,16239,16160],{"class":39},[33,16241,10866],{"class":43},[33,16243,48],{"class":47},[33,16245,16246],{"class":35,"line":1364},[33,16247,889],{"class":47},[33,16249,16250,16252,16254,16257,16259,16262,16264,16266,16268,16271,16273,16276,16278],{"class":35,"line":1370},[33,16251,894],{"class":47},[33,16253,116],{"class":39},[33,16255,16256],{"class":119},"\"姓名：\"",[33,16258,116],{"class":39},[33,16260,16261],{"class":47},"m_name",[33,16263,116],{"class":39},[33,16265,5756],{"class":119},[33,16267,116],{"class":39},[33,16269,16270],{"class":119},"\"学号：\"",[33,16272,116],{"class":39},[33,16274,16275],{"class":47},"m_id",[33,16277,116],{"class":39},[33,16279,131],{"class":47},[33,16281,16282],{"class":35,"line":1425},[33,16283,916],{"class":47},[33,16285,16286],{"class":35,"line":1438},[33,16287,749],{"class":47},[33,16289,16290,16292,16294],{"class":35,"line":1451},[33,16291,40],{"class":39},[33,16293,44],{"class":43},[33,16295,48],{"class":47},[33,16297,16298],{"class":35,"line":1457},[33,16299,54],{"class":47},[33,16301,16302],{"class":35,"line":1466},[33,16303,16304],{"class":60},"    \u002F\u002F实例化\n",[33,16306,16307],{"class":35,"line":1471},[33,16308,16309],{"class":47},"    Student s1;\n",[33,16311,16312,16315,16318,16320,16322],{"class":35,"line":1477},[33,16313,16314],{"class":47},"    s1.",[33,16316,16317],{"class":43},"setName",[33,16319,345],{"class":47},[33,16321,9167],{"class":119},[33,16323,4130],{"class":47},[33,16325,16326,16328,16331,16333,16336],{"class":35,"line":1504},[33,16327,16314],{"class":47},[33,16329,16330],{"class":43},"setId",[33,16332,345],{"class":47},[33,16334,16335],{"class":76},"123456",[33,16337,4130],{"class":47},[33,16339,16340,16342,16345],{"class":35,"line":1509},[33,16341,16314],{"class":47},[33,16343,16344],{"class":43},"printInfo",[33,16346,7023],{"class":47},[33,16348,16349],{"class":35,"line":1525},[33,16350,231],{"class":47},[14,16352,16353],{},"类中的属性和行为统称为成员",[14,16355,16356],{},"属性：成员属性(成员变量)",[14,16358,16359],{},"方法：成员函数(成员方法)",[14,16361,16362],{},[480,16363,16364],{},"封装意义二：",[14,16366,16367],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,16369,16370],{},"访问权限有三种：",[574,16372,16373,16376,16379],{},[564,16374,16375],{},"public        公共权限",[564,16377,16378],{},"protected 保护权限",[564,16380,16381],{},"private      私有权限",[14,16383,16384],{},[480,16385,16386],{},"示例：",[23,16388,16390],{"className":11192,"code":16389,"language":11194,"meta":28,"style":28},"\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",[30,16391,16392,16397,16402,16407,16412,16416,16423,16427,16432,16436,16441,16445,16450,16455,16460,16464,16469,16474,16481,16485,16489,16497,16501,16512,16524,16536,16540,16544,16548,16556,16560,16565,16577,16585,16593,16597,16607,16611,16619],{"__ignoreMap":28},[33,16393,16394],{"class":35,"line":36},[33,16395,16396],{"class":60},"\u002F\u002F三种权限\n",[33,16398,16399],{"class":35,"line":51},[33,16400,16401],{"class":60},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[33,16403,16404],{"class":35,"line":57},[33,16405,16406],{"class":60},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[33,16408,16409],{"class":35,"line":64},[33,16410,16411],{"class":60},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[33,16413,16414],{"class":35,"line":83},[33,16415,160],{"emptyLinePlaceholder":159},[33,16417,16418,16420],{"class":35,"line":89},[33,16419,15945],{"class":39},[33,16421,16422],{"class":43}," Person\n",[33,16424,16425],{"class":35,"line":98},[33,16426,54],{"class":47},[33,16428,16429],{"class":35,"line":110},[33,16430,16431],{"class":60},"    \u002F\u002F姓名  公共权限\n",[33,16433,16434],{"class":35,"line":134},[33,16435,15967],{"class":39},[33,16437,16438],{"class":35,"line":156},[33,16439,16440],{"class":47},"    string m_Name;\n",[33,16442,16443],{"class":35,"line":163},[33,16444,160],{"emptyLinePlaceholder":159},[33,16446,16447],{"class":35,"line":169},[33,16448,16449],{"class":60},"    \u002F\u002F汽车  保护权限\n",[33,16451,16452],{"class":35,"line":175},[33,16453,16454],{"class":39},"protected:\n",[33,16456,16457],{"class":35,"line":181},[33,16458,16459],{"class":47},"    string m_Car;\n",[33,16461,16462],{"class":35,"line":196},[33,16463,160],{"emptyLinePlaceholder":159},[33,16465,16466],{"class":35,"line":213},[33,16467,16468],{"class":60},"    \u002F\u002F银行卡密码  私有权限\n",[33,16470,16471],{"class":35,"line":228},[33,16472,16473],{"class":39},"private:\n",[33,16475,16476,16478],{"class":35,"line":1345},[33,16477,67],{"class":39},[33,16479,16480],{"class":47}," m_Password;\n",[33,16482,16483],{"class":35,"line":1350},[33,16484,160],{"emptyLinePlaceholder":159},[33,16486,16487],{"class":35,"line":1359},[33,16488,15967],{"class":39},[33,16490,16491,16493,16495],{"class":35,"line":1364},[33,16492,16160],{"class":39},[33,16494,12636],{"class":43},[33,16496,48],{"class":47},[33,16498,16499],{"class":35,"line":1370},[33,16500,889],{"class":47},[33,16502,16503,16506,16508,16510],{"class":35,"line":1425},[33,16504,16505],{"class":47},"        m_Name ",[33,16507,73],{"class":39},[33,16509,10189],{"class":119},[33,16511,80],{"class":47},[33,16513,16514,16517,16519,16522],{"class":35,"line":1438},[33,16515,16516],{"class":47},"        m_Car ",[33,16518,73],{"class":39},[33,16520,16521],{"class":119}," \"拖拉机\"",[33,16523,80],{"class":47},[33,16525,16526,16529,16531,16534],{"class":35,"line":1451},[33,16527,16528],{"class":47},"        m_Password ",[33,16530,73],{"class":39},[33,16532,16533],{"class":76}," 123456",[33,16535,80],{"class":47},[33,16537,16538],{"class":35,"line":1457},[33,16539,916],{"class":47},[33,16541,16542],{"class":35,"line":1466},[33,16543,749],{"class":47},[33,16545,16546],{"class":35,"line":1471},[33,16547,160],{"emptyLinePlaceholder":159},[33,16549,16550,16552,16554],{"class":35,"line":1477},[33,16551,40],{"class":39},[33,16553,44],{"class":43},[33,16555,12104],{"class":47},[33,16557,16558],{"class":35,"line":1504},[33,16559,160],{"emptyLinePlaceholder":159},[33,16561,16562],{"class":35,"line":1509},[33,16563,16564],{"class":47},"    Person p;\n",[33,16566,16567,16570,16572,16575],{"class":35,"line":1525},[33,16568,16569],{"class":47},"    p.m_Name ",[33,16571,73],{"class":39},[33,16573,16574],{"class":119}," \"李四\"",[33,16576,80],{"class":47},[33,16578,16579,16582],{"class":35,"line":1535},[33,16580,16581],{"class":60},"    \u002F\u002Fp.m_Car = \"奔驰\";",[33,16583,16584],{"class":60},"  \u002F\u002F保护权限类外访问不到\n",[33,16586,16587,16590],{"class":35,"line":1540},[33,16588,16589],{"class":60},"    \u002F\u002Fp.m_Password = 123;",[33,16591,16592],{"class":60}," \u002F\u002F私有权限类外访问不到\n",[33,16594,16595],{"class":35,"line":4027},[33,16596,160],{"emptyLinePlaceholder":159},[33,16598,16599,16601,16603,16605],{"class":35,"line":4032},[33,16600,3724],{"class":43},[33,16602,345],{"class":47},[33,16604,3729],{"class":119},[33,16606,4130],{"class":47},[33,16608,16609],{"class":35,"line":9199},[33,16610,160],{"emptyLinePlaceholder":159},[33,16612,16613,16615,16617],{"class":35,"line":9223},[33,16614,5489],{"class":39},[33,16616,5492],{"class":76},[33,16618,80],{"class":47},[33,16620,16621],{"class":35,"line":9228},[33,16622,231],{"class":47},[1599,16624,16626],{"id":16625},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,16628,16629,16630,16633,16634],{},"在C++中 struct和class唯一的",[480,16631,16632],{},"区别","就在于 ",[480,16635,16636],{},"默认的访问权限不同",[14,16638,16639],{},"区别：",[561,16641,16642,16645],{},[564,16643,16644],{},"struct 默认权限为公共",[564,16646,16647],{},"class   默认权限为私有",[23,16649,16651],{"className":11192,"code":16650,"language":11194,"meta":28,"style":28},"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",[30,16652,16653,16660,16664,16674,16678,16682,16689,16693,16703,16707,16711,16719,16723,16728,16742,16746,16751,16765,16769,16779,16783,16791],{"__ignoreMap":28},[33,16654,16655,16657],{"class":35,"line":36},[33,16656,15945],{"class":39},[33,16658,16659],{"class":43}," C1\n",[33,16661,16662],{"class":35,"line":51},[33,16663,54],{"class":47},[33,16665,16666,16668,16671],{"class":35,"line":57},[33,16667,67],{"class":39},[33,16669,16670],{"class":47},"  m_A;",[33,16672,16673],{"class":60}," \u002F\u002F默认是私有权限\n",[33,16675,16676],{"class":35,"line":64},[33,16677,749],{"class":47},[33,16679,16680],{"class":35,"line":83},[33,16681,160],{"emptyLinePlaceholder":159},[33,16683,16684,16686],{"class":35,"line":89},[33,16685,9010],{"class":39},[33,16687,16688],{"class":43}," C2\n",[33,16690,16691],{"class":35,"line":98},[33,16692,54],{"class":47},[33,16694,16695,16697,16700],{"class":35,"line":110},[33,16696,67],{"class":39},[33,16698,16699],{"class":47}," m_A;",[33,16701,16702],{"class":60},"  \u002F\u002F默认是公共权限\n",[33,16704,16705],{"class":35,"line":134},[33,16706,749],{"class":47},[33,16708,16709],{"class":35,"line":156},[33,16710,160],{"emptyLinePlaceholder":159},[33,16712,16713,16715,16717],{"class":35,"line":163},[33,16714,40],{"class":39},[33,16716,44],{"class":43},[33,16718,12104],{"class":47},[33,16720,16721],{"class":35,"line":169},[33,16722,160],{"emptyLinePlaceholder":159},[33,16724,16725],{"class":35,"line":175},[33,16726,16727],{"class":47},"    C1 c1;\n",[33,16729,16730,16733,16735,16737,16739],{"class":35,"line":181},[33,16731,16732],{"class":47},"    c1.m_A ",[33,16734,73],{"class":39},[33,16736,3461],{"class":76},[33,16738,460],{"class":47},[33,16740,16741],{"class":60}," \u002F\u002F错误，访问权限是私有\n",[33,16743,16744],{"class":35,"line":196},[33,16745,160],{"emptyLinePlaceholder":159},[33,16747,16748],{"class":35,"line":213},[33,16749,16750],{"class":47},"    C2 c2;\n",[33,16752,16753,16756,16758,16760,16762],{"class":35,"line":228},[33,16754,16755],{"class":47},"    c2.m_A ",[33,16757,73],{"class":39},[33,16759,3461],{"class":76},[33,16761,460],{"class":47},[33,16763,16764],{"class":60}," \u002F\u002F正确，访问权限是公共\n",[33,16766,16767],{"class":35,"line":1345},[33,16768,160],{"emptyLinePlaceholder":159},[33,16770,16771,16773,16775,16777],{"class":35,"line":1350},[33,16772,3724],{"class":43},[33,16774,345],{"class":47},[33,16776,3729],{"class":119},[33,16778,4130],{"class":47},[33,16780,16781],{"class":35,"line":1359},[33,16782,160],{"emptyLinePlaceholder":159},[33,16784,16785,16787,16789],{"class":35,"line":1364},[33,16786,5489],{"class":39},[33,16788,5492],{"class":76},[33,16790,80],{"class":47},[33,16792,16793],{"class":35,"line":1370},[33,16794,231],{"class":47},[1599,16796,16798],{"id":16797},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,16800,16801],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,16803,16804],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,16806,16807],{},[480,16808,16386],{},[23,16810,16812],{"className":11192,"code":16811,"language":11194,"meta":28,"style":28},"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",[30,16813,16814,16824,16828,16832,16837,16851,16860,16864,16874,16878,16885,16889,16893,16897,16902,16911,16918,16922,16927,16943,16966,16979,16986,16990,16999,17003,17007,17012,17028,17038,17042,17046,17050,17058,17062,17072,17076,17084,17088,17092,17100,17104,17108,17113,17126,17149,17153,17158,17171,17193,17197,17202,17216,17224,17228,17238,17242,17250],{"__ignoreMap":28},[33,16815,16816,16818,16821],{"class":35,"line":36},[33,16817,15945],{"class":39},[33,16819,16820],{"class":43}," Person",[33,16822,16823],{"class":47}," {\n",[33,16825,16826],{"class":35,"line":51},[33,16827,15967],{"class":39},[33,16829,16830],{"class":35,"line":57},[33,16831,160],{"emptyLinePlaceholder":159},[33,16833,16834],{"class":35,"line":64},[33,16835,16836],{"class":60},"    \u002F\u002F姓名设置可读可写\n",[33,16838,16839,16841,16843,16845,16847,16849],{"class":35,"line":83},[33,16840,16160],{"class":39},[33,16842,16163],{"class":43},[33,16844,345],{"class":47},[33,16846,16168],{"class":43},[33,16848,16171],{"class":955},[33,16850,13693],{"class":47},[33,16852,16853,16855,16857],{"class":35,"line":89},[33,16854,16505],{"class":47},[33,16856,73],{"class":39},[33,16858,16859],{"class":47}," name;\n",[33,16861,16862],{"class":35,"line":98},[33,16863,916],{"class":47},[33,16865,16866,16869,16872],{"class":35,"line":110},[33,16867,16868],{"class":43},"    string",[33,16870,16871],{"class":43}," getName",[33,16873,48],{"class":47},[33,16875,16876],{"class":35,"line":134},[33,16877,889],{"class":47},[33,16879,16880,16882],{"class":35,"line":156},[33,16881,16003],{"class":39},[33,16883,16884],{"class":47}," m_Name;\n",[33,16886,16887],{"class":35,"line":163},[33,16888,916],{"class":47},[33,16890,16891],{"class":35,"line":169},[33,16892,160],{"emptyLinePlaceholder":159},[33,16894,16895],{"class":35,"line":175},[33,16896,160],{"emptyLinePlaceholder":159},[33,16898,16899],{"class":35,"line":181},[33,16900,16901],{"class":60},"    \u002F\u002F获取年龄 \n",[33,16903,16904,16906,16909],{"class":35,"line":196},[33,16905,67],{"class":39},[33,16907,16908],{"class":43}," getAge",[33,16910,12104],{"class":47},[33,16912,16913,16915],{"class":35,"line":213},[33,16914,16003],{"class":39},[33,16916,16917],{"class":47}," m_Age;\n",[33,16919,16920],{"class":35,"line":228},[33,16921,916],{"class":47},[33,16923,16924],{"class":35,"line":1345},[33,16925,16926],{"class":60},"    \u002F\u002F设置年龄\n",[33,16928,16929,16931,16934,16936,16938,16941],{"class":35,"line":1350},[33,16930,16160],{"class":39},[33,16932,16933],{"class":43}," setAge",[33,16935,345],{"class":47},[33,16937,40],{"class":39},[33,16939,16940],{"class":955}," age",[33,16942,13693],{"class":47},[33,16944,16945,16947,16950,16952,16954,16956,16959,16961,16964],{"class":35,"line":1359},[33,16946,3915],{"class":39},[33,16948,16949],{"class":47}," (age ",[33,16951,875],{"class":39},[33,16953,5492],{"class":76},[33,16955,4661],{"class":39},[33,16957,16958],{"class":47}," age ",[33,16960,1265],{"class":39},[33,16962,16963],{"class":76}," 150",[33,16965,13693],{"class":47},[33,16967,16968,16970,16972,16975,16977],{"class":35,"line":1364},[33,16969,10970],{"class":47},[33,16971,116],{"class":39},[33,16973,16974],{"class":119}," \"你个老妖精!\"",[33,16976,2900],{"class":39},[33,16978,10091],{"class":47},[33,16980,16981,16984],{"class":35,"line":1370},[33,16982,16983],{"class":39},"            return",[33,16985,80],{"class":47},[33,16987,16988],{"class":35,"line":1425},[33,16989,1334],{"class":47},[33,16991,16992,16995,16997],{"class":35,"line":1438},[33,16993,16994],{"class":47},"        m_Age ",[33,16996,73],{"class":39},[33,16998,9048],{"class":47},[33,17000,17001],{"class":35,"line":1451},[33,17002,916],{"class":47},[33,17004,17005],{"class":35,"line":1457},[33,17006,160],{"emptyLinePlaceholder":159},[33,17008,17009],{"class":35,"line":1466},[33,17010,17011],{"class":60},"    \u002F\u002F情人设置为只写\n",[33,17013,17014,17016,17019,17021,17023,17026],{"class":35,"line":1471},[33,17015,16160],{"class":39},[33,17017,17018],{"class":43}," setLover",[33,17020,345],{"class":47},[33,17022,16168],{"class":43},[33,17024,17025],{"class":955}," lover",[33,17027,13693],{"class":47},[33,17029,17030,17033,17035],{"class":35,"line":1477},[33,17031,17032],{"class":47},"        m_Lover ",[33,17034,73],{"class":39},[33,17036,17037],{"class":47}," lover;\n",[33,17039,17040],{"class":35,"line":1504},[33,17041,916],{"class":47},[33,17043,17044],{"class":35,"line":1509},[33,17045,160],{"emptyLinePlaceholder":159},[33,17047,17048],{"class":35,"line":1525},[33,17049,16473],{"class":39},[33,17051,17052,17055],{"class":35,"line":1535},[33,17053,17054],{"class":47},"    string m_Name;",[33,17056,17057],{"class":60}," \u002F\u002F可读可写  姓名\n",[33,17059,17060],{"class":35,"line":1540},[33,17061,14461],{"class":47},[33,17063,17064,17066,17069],{"class":35,"line":4027},[33,17065,67],{"class":39},[33,17067,17068],{"class":47}," m_Age;",[33,17070,17071],{"class":60}," \u002F\u002F只读  年龄\n",[33,17073,17074],{"class":35,"line":4032},[33,17075,160],{"emptyLinePlaceholder":159},[33,17077,17078,17081],{"class":35,"line":9199},[33,17079,17080],{"class":47},"    string m_Lover;",[33,17082,17083],{"class":60}," \u002F\u002F只写  情人\n",[33,17085,17086],{"class":35,"line":9223},[33,17087,749],{"class":47},[33,17089,17090],{"class":35,"line":9228},[33,17091,160],{"emptyLinePlaceholder":159},[33,17093,17094,17096,17098],{"class":35,"line":9234},[33,17095,40],{"class":39},[33,17097,44],{"class":43},[33,17099,12104],{"class":47},[33,17101,17102],{"class":35,"line":9261},[33,17103,160],{"emptyLinePlaceholder":159},[33,17105,17106],{"class":35,"line":9266},[33,17107,16564],{"class":47},[33,17109,17110],{"class":35,"line":9272},[33,17111,17112],{"class":60},"    \u002F\u002F姓名设置\n",[33,17114,17115,17118,17120,17122,17124],{"class":35,"line":9284},[33,17116,17117],{"class":47},"    p.",[33,17119,16317],{"class":43},[33,17121,345],{"class":47},[33,17123,9167],{"class":119},[33,17125,4130],{"class":47},[33,17127,17128,17130,17132,17135,17137,17140,17143,17145,17147],{"class":35,"line":9296},[33,17129,314],{"class":47},[33,17131,116],{"class":39},[33,17133,17134],{"class":119}," \"姓名： \"",[33,17136,2900],{"class":39},[33,17138,17139],{"class":47}," p.",[33,17141,17142],{"class":43},"getName",[33,17144,14301],{"class":47},[33,17146,116],{"class":39},[33,17148,10091],{"class":47},[33,17150,17151],{"class":35,"line":9308},[33,17152,160],{"emptyLinePlaceholder":159},[33,17154,17155],{"class":35,"line":10967},[33,17156,17157],{"class":60},"    \u002F\u002F年龄设置\n",[33,17159,17160,17162,17165,17167,17169],{"class":35,"line":10992},[33,17161,17117],{"class":47},[33,17163,17164],{"class":43},"setAge",[33,17166,345],{"class":47},[33,17168,2256],{"class":76},[33,17170,4130],{"class":47},[33,17172,17173,17175,17177,17180,17182,17184,17187,17189,17191],{"class":35,"line":11015},[33,17174,314],{"class":47},[33,17176,116],{"class":39},[33,17178,17179],{"class":119}," \"年龄： \"",[33,17181,2900],{"class":39},[33,17183,17139],{"class":47},[33,17185,17186],{"class":43},"getAge",[33,17188,14301],{"class":47},[33,17190,116],{"class":39},[33,17192,10091],{"class":47},[33,17194,17195],{"class":35,"line":11039},[33,17196,160],{"emptyLinePlaceholder":159},[33,17198,17199],{"class":35,"line":11044},[33,17200,17201],{"class":60},"    \u002F\u002F情人设置\n",[33,17203,17204,17206,17209,17211,17214],{"class":35,"line":11049},[33,17205,17117],{"class":47},[33,17207,17208],{"class":43},"setLover",[33,17210,345],{"class":47},[33,17212,17213],{"class":119},"\"苍井\"",[33,17215,4130],{"class":47},[33,17217,17218,17221],{"class":35,"line":11054},[33,17219,17220],{"class":60},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[33,17222,17223],{"class":60},"  \u002F\u002F只写属性，不可以读取\n",[33,17225,17226],{"class":35,"line":11063},[33,17227,160],{"emptyLinePlaceholder":159},[33,17229,17230,17232,17234,17236],{"class":35,"line":11068},[33,17231,3724],{"class":43},[33,17233,345],{"class":47},[33,17235,3729],{"class":119},[33,17237,4130],{"class":47},[33,17239,17240],{"class":35,"line":11074},[33,17241,160],{"emptyLinePlaceholder":159},[33,17243,17244,17246,17248],{"class":35,"line":11095},[33,17245,5489],{"class":39},[33,17247,5492],{"class":76},[33,17249,80],{"class":47},[33,17251,17252],{"class":35,"line":11101},[33,17253,231],{"class":47},[1599,17255,17257],{"id":17256},"_814封装案例","8.1.4封装案例",[574,17259,17260],{},[564,17261,17262,17265],{},[480,17263,17264],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[561,17267,17268,17271],{},[564,17269,17270],{},"求出立方体的面积和体积",[564,17272,17273],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[23,17275,17277],{"className":25,"code":17276,"language":27,"meta":28,"style":28},"#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",[30,17278,17279,17285,17295,17302,17306,17310,17315,17345,17349,17359,17369,17379,17383,17392,17396,17432,17436,17445,17449,17465,17469,17474,17483,17487,17494,17498,17507,17511,17518,17522,17531,17535,17542,17546,17551,17568,17572,17618,17622,17631,17635,17639,17643,17652,17656,17660,17665,17669,17675,17681,17687,17691,17695,17700,17722,17726,17780,17784,17792,17796,17801,17806,17819,17826,17842,17853,17859,17882,17888,17911,17925,17945,17951,17962,17985,18007,18012,18018,18032,18045,18050,18064,18069,18075,18080,18094,18099,18104,18118,18130,18135,18148,18153,18158,18163,18176,18181],{"__ignoreMap":28},[33,17280,17281,17283],{"class":35,"line":36},[33,17282,1131],{"class":39},[33,17284,1134],{"class":119},[33,17286,17287,17289,17291,17293],{"class":35,"line":51},[33,17288,1139],{"class":39},[33,17290,1142],{"class":39},[33,17292,1145],{"class":43},[33,17294,80],{"class":47},[33,17296,17297,17299],{"class":35,"line":57},[33,17298,15945],{"class":39},[33,17300,17301],{"class":43}," Cube\n",[33,17303,17304],{"class":35,"line":64},[33,17305,54],{"class":47},[33,17307,17308],{"class":35,"line":83},[33,17309,15967],{"class":39},[33,17311,17312],{"class":35,"line":89},[33,17313,17314],{"class":60},"    \u002F\u002F输入长宽高\n",[33,17316,17317,17319,17322,17324,17326,17329,17331,17333,17336,17338,17340,17343],{"class":35,"line":98},[33,17318,16160],{"class":39},[33,17320,17321],{"class":43}," setLwh",[33,17323,345],{"class":47},[33,17325,40],{"class":39},[33,17327,17328],{"class":955}," l",[33,17330,704],{"class":47},[33,17332,40],{"class":39},[33,17334,17335],{"class":955}," w",[33,17337,704],{"class":47},[33,17339,40],{"class":39},[33,17341,17342],{"class":955}," h",[33,17344,884],{"class":47},[33,17346,17347],{"class":35,"line":110},[33,17348,889],{"class":47},[33,17350,17351,17354,17356],{"class":35,"line":134},[33,17352,17353],{"class":47},"        m_L",[33,17355,73],{"class":39},[33,17357,17358],{"class":47},"l;\n",[33,17360,17361,17364,17366],{"class":35,"line":156},[33,17362,17363],{"class":47},"        m_W",[33,17365,73],{"class":39},[33,17367,17368],{"class":47},"w;\n",[33,17370,17371,17374,17376],{"class":35,"line":163},[33,17372,17373],{"class":47},"        m_H",[33,17375,73],{"class":39},[33,17377,17378],{"class":47},"h;\n",[33,17380,17381],{"class":35,"line":169},[33,17382,916],{"class":47},[33,17384,17385,17387,17390],{"class":35,"line":175},[33,17386,67],{"class":39},[33,17388,17389],{"class":43}," mianji",[33,17391,48],{"class":47},[33,17393,17394],{"class":35,"line":181},[33,17395,889],{"class":47},[33,17397,17398,17400,17402,17404,17407,17409,17412,17414,17417,17419,17422,17424,17427,17429],{"class":35,"line":196},[33,17399,16003],{"class":39},[33,17401,16006],{"class":76},[33,17403,2057],{"class":39},[33,17405,17406],{"class":47},"(m_L",[33,17408,2057],{"class":39},[33,17410,17411],{"class":47},"m_W ",[33,17413,1271],{"class":39},[33,17415,17416],{"class":47}," m_L",[33,17418,2057],{"class":39},[33,17420,17421],{"class":47},"m_H ",[33,17423,1271],{"class":39},[33,17425,17426],{"class":47}," m_W",[33,17428,2057],{"class":39},[33,17430,17431],{"class":47},"m_H);\n",[33,17433,17434],{"class":35,"line":213},[33,17435,916],{"class":47},[33,17437,17438,17440,17443],{"class":35,"line":228},[33,17439,67],{"class":39},[33,17441,17442],{"class":43}," tiji",[33,17444,48],{"class":47},[33,17446,17447],{"class":35,"line":1345},[33,17448,889],{"class":47},[33,17450,17451,17453,17455,17457,17460,17462],{"class":35,"line":1350},[33,17452,16003],{"class":39},[33,17454,17416],{"class":47},[33,17456,2057],{"class":39},[33,17458,17459],{"class":47},"m_W",[33,17461,2057],{"class":39},[33,17463,17464],{"class":47},"m_H;\n",[33,17466,17467],{"class":35,"line":1359},[33,17468,916],{"class":47},[33,17470,17471],{"class":35,"line":1364},[33,17472,17473],{"class":60},"    \u002F\u002F获取长宽高\n",[33,17475,17476,17478,17481],{"class":35,"line":1370},[33,17477,67],{"class":39},[33,17479,17480],{"class":43}," getLength",[33,17482,48],{"class":47},[33,17484,17485],{"class":35,"line":1425},[33,17486,889],{"class":47},[33,17488,17489,17491],{"class":35,"line":1438},[33,17490,16003],{"class":39},[33,17492,17493],{"class":47}," m_L;\n",[33,17495,17496],{"class":35,"line":1451},[33,17497,916],{"class":47},[33,17499,17500,17502,17505],{"class":35,"line":1457},[33,17501,67],{"class":39},[33,17503,17504],{"class":43}," getWidth",[33,17506,48],{"class":47},[33,17508,17509],{"class":35,"line":1466},[33,17510,889],{"class":47},[33,17512,17513,17515],{"class":35,"line":1471},[33,17514,16003],{"class":39},[33,17516,17517],{"class":47}," m_W;\n",[33,17519,17520],{"class":35,"line":1477},[33,17521,916],{"class":47},[33,17523,17524,17526,17529],{"class":35,"line":1504},[33,17525,67],{"class":39},[33,17527,17528],{"class":43}," getHeight",[33,17530,48],{"class":47},[33,17532,17533],{"class":35,"line":1509},[33,17534,889],{"class":47},[33,17536,17537,17539],{"class":35,"line":1525},[33,17538,16003],{"class":39},[33,17540,17541],{"class":47}," m_H;\n",[33,17543,17544],{"class":35,"line":1535},[33,17545,916],{"class":47},[33,17547,17548],{"class":35,"line":1540},[33,17549,17550],{"class":60},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[33,17552,17553,17556,17559,17561,17564,17566],{"class":35,"line":4027},[33,17554,17555],{"class":39},"    bool",[33,17557,17558],{"class":43}," isEqual",[33,17560,345],{"class":47},[33,17562,17563],{"class":43},"Cube",[33,17565,4259],{"class":955},[33,17567,884],{"class":47},[33,17569,17570],{"class":35,"line":4032},[33,17571,889],{"class":47},[33,17573,17574,17576,17579,17582,17584,17586,17589,17591,17594,17597,17599,17601,17604,17606,17608,17611,17613,17615],{"class":35,"line":9199},[33,17575,3915],{"class":39},[33,17577,17578],{"class":47}," (c.",[33,17580,17581],{"class":43},"getLength",[33,17583,14301],{"class":47},[33,17585,4359],{"class":39},[33,17587,17588],{"class":47}," m_L ",[33,17590,3156],{"class":39},[33,17592,17593],{"class":47}," c.",[33,17595,17596],{"class":43},"getWidth",[33,17598,14301],{"class":47},[33,17600,4359],{"class":39},[33,17602,17603],{"class":47}," m_W ",[33,17605,3156],{"class":39},[33,17607,17593],{"class":47},[33,17609,17610],{"class":43},"getHeight",[33,17612,14301],{"class":47},[33,17614,4359],{"class":39},[33,17616,17617],{"class":47}," m_H)\n",[33,17619,17620],{"class":35,"line":9223},[33,17621,1254],{"class":47},[33,17623,17624,17626,17629],{"class":35,"line":9228},[33,17625,16983],{"class":39},[33,17627,17628],{"class":76}," true",[33,17630,80],{"class":47},[33,17632,17633],{"class":35,"line":9234},[33,17634,1334],{"class":47},[33,17636,17637],{"class":35,"line":9261},[33,17638,3986],{"class":39},[33,17640,17641],{"class":35,"line":9266},[33,17642,1254],{"class":47},[33,17644,17645,17647,17650],{"class":35,"line":9272},[33,17646,16983],{"class":39},[33,17648,17649],{"class":76}," false",[33,17651,80],{"class":47},[33,17653,17654],{"class":35,"line":9284},[33,17655,1334],{"class":47},[33,17657,17658],{"class":35,"line":9296},[33,17659,916],{"class":47},[33,17661,17662],{"class":35,"line":9308},[33,17663,17664],{"class":60},"    \u002F\u002F私有属性\n",[33,17666,17667],{"class":35,"line":10967},[33,17668,16473],{"class":39},[33,17670,17671,17673],{"class":35,"line":10992},[33,17672,67],{"class":39},[33,17674,17493],{"class":47},[33,17676,17677,17679],{"class":35,"line":11015},[33,17678,67],{"class":39},[33,17680,17517],{"class":47},[33,17682,17683,17685],{"class":35,"line":11039},[33,17684,67],{"class":39},[33,17686,17541],{"class":47},[33,17688,17689],{"class":35,"line":11044},[33,17690,160],{"emptyLinePlaceholder":159},[33,17692,17693],{"class":35,"line":11049},[33,17694,749],{"class":47},[33,17696,17697],{"class":35,"line":11054},[33,17698,17699],{"class":60},"\u002F\u002F全局函数判断两个立方体是否相等\n",[33,17701,17702,17704,17706,17708,17710,17713,17715,17717,17720],{"class":35,"line":11063},[33,17703,2812],{"class":39},[33,17705,17558],{"class":43},[33,17707,345],{"class":47},[33,17709,17563],{"class":43},[33,17711,17712],{"class":955}," c1",[33,17714,704],{"class":47},[33,17716,17563],{"class":43},[33,17718,17719],{"class":955}," c2",[33,17721,884],{"class":47},[33,17723,17724],{"class":35,"line":11068},[33,17725,54],{"class":47},[33,17727,17728,17730,17733,17735,17737,17739,17742,17744,17747,17749,17751,17753,17755,17757,17759,17761,17763,17765,17767,17769,17771,17773,17775,17777],{"class":35,"line":11074},[33,17729,5489],{"class":39},[33,17731,17732],{"class":47}," (c1.",[33,17734,17581],{"class":43},[33,17736,14301],{"class":47},[33,17738,4359],{"class":39},[33,17740,17741],{"class":47}," c2.",[33,17743,17581],{"class":43},[33,17745,17746],{"class":47},"()) ",[33,17748,3156],{"class":39},[33,17750,17732],{"class":47},[33,17752,17596],{"class":43},[33,17754,14301],{"class":47},[33,17756,4359],{"class":39},[33,17758,17741],{"class":47},[33,17760,17596],{"class":43},[33,17762,17746],{"class":47},[33,17764,3156],{"class":39},[33,17766,17732],{"class":47},[33,17768,17610],{"class":43},[33,17770,14301],{"class":47},[33,17772,4359],{"class":39},[33,17774,17741],{"class":47},[33,17776,17610],{"class":43},[33,17778,17779],{"class":47},"());\n",[33,17781,17782],{"class":35,"line":11095},[33,17783,231],{"class":47},[33,17785,17786,17788,17790],{"class":35,"line":11101},[33,17787,40],{"class":39},[33,17789,44],{"class":43},[33,17791,48],{"class":47},[33,17793,17794],{"class":35,"line":11115},[33,17795,54],{"class":47},[33,17797,17798],{"class":35,"line":11121},[33,17799,17800],{"class":47},"    Cube c1;\n",[33,17802,17803],{"class":35,"line":11148},[33,17804,17805],{"class":60},"    \u002F\u002F输入立方体的长宽高\n",[33,17807,17808,17810,17812,17815,17817],{"class":35,"line":11157},[33,17809,113],{"class":47},[33,17811,116],{"class":39},[33,17813,17814],{"class":119},"\"请输入第一个立方体的长、宽、高：\"",[33,17816,116],{"class":39},[33,17818,131],{"class":47},[33,17820,17821,17823],{"class":35,"line":11163},[33,17822,67],{"class":39},[33,17824,17825],{"class":47}," l,w,h,l1,w1,h1;\n",[33,17827,17828,17830,17832,17834,17836,17838,17840],{"class":35,"line":11171},[33,17829,3436],{"class":47},[33,17831,2885],{"class":39},[33,17833,2119],{"class":47},[33,17835,2885],{"class":39},[33,17837,2394],{"class":47},[33,17839,2885],{"class":39},[33,17841,17378],{"class":47},[33,17843,17844,17847,17850],{"class":35,"line":11176},[33,17845,17846],{"class":47},"    c1.",[33,17848,17849],{"class":43},"setLwh",[33,17851,17852],{"class":47},"(l,w,h);\n",[33,17854,17856],{"class":35,"line":17855},66,[33,17857,17858],{"class":60},"    \u002F\u002F面积\n",[33,17860,17862,17864,17866,17869,17871,17873,17876,17878,17880],{"class":35,"line":17861},67,[33,17863,113],{"class":47},[33,17865,116],{"class":39},[33,17867,17868],{"class":119},"\"立方体的表面积为：\"",[33,17870,116],{"class":39},[33,17872,16081],{"class":47},[33,17874,17875],{"class":43},"mianji",[33,17877,3845],{"class":47},[33,17879,116],{"class":39},[33,17881,131],{"class":47},[33,17883,17885],{"class":35,"line":17884},68,[33,17886,17887],{"class":60},"    \u002F\u002F体积\n",[33,17889,17891,17893,17895,17898,17900,17902,17905,17907,17909],{"class":35,"line":17890},69,[33,17892,113],{"class":47},[33,17894,116],{"class":39},[33,17896,17897],{"class":119},"\"立方体的体积为：\"",[33,17899,116],{"class":39},[33,17901,16081],{"class":47},[33,17903,17904],{"class":43},"tiji",[33,17906,3845],{"class":47},[33,17908,116],{"class":39},[33,17910,131],{"class":47},[33,17912,17914,17916,17918,17921,17923],{"class":35,"line":17913},70,[33,17915,113],{"class":47},[33,17917,116],{"class":39},[33,17919,17920],{"class":119},"\"请输入第二个立方体的长、宽、高：\"",[33,17922,116],{"class":39},[33,17924,131],{"class":47},[33,17926,17928,17930,17932,17935,17937,17940,17942],{"class":35,"line":17927},71,[33,17929,3436],{"class":47},[33,17931,2885],{"class":39},[33,17933,17934],{"class":47},"l1",[33,17936,2885],{"class":39},[33,17938,17939],{"class":47},"w1",[33,17941,2885],{"class":39},[33,17943,17944],{"class":47},"h1;\n",[33,17946,17948],{"class":35,"line":17947},72,[33,17949,17950],{"class":47},"    Cube c2;\n",[33,17952,17954,17957,17959],{"class":35,"line":17953},73,[33,17955,17956],{"class":47},"    c2.",[33,17958,17849],{"class":43},[33,17960,17961],{"class":47},"(l1,w1,h1);\n",[33,17963,17965,17967,17969,17972,17974,17977,17979,17981,17983],{"class":35,"line":17964},74,[33,17966,113],{"class":47},[33,17968,116],{"class":39},[33,17970,17971],{"class":119},"\"第二个立方体的表面积为：\"",[33,17973,116],{"class":39},[33,17975,17976],{"class":47},"c2.",[33,17978,17875],{"class":43},[33,17980,3845],{"class":47},[33,17982,116],{"class":39},[33,17984,131],{"class":47},[33,17986,17988,17990,17992,17995,17997,17999,18001,18003,18005],{"class":35,"line":17987},75,[33,17989,113],{"class":47},[33,17991,116],{"class":39},[33,17993,17994],{"class":119},"\"第二个立方体的体积为：\"",[33,17996,116],{"class":39},[33,17998,17976],{"class":47},[33,18000,17904],{"class":43},[33,18002,3845],{"class":47},[33,18004,116],{"class":39},[33,18006,131],{"class":47},[33,18008,18010],{"class":35,"line":18009},76,[33,18011,160],{"emptyLinePlaceholder":159},[33,18013,18015],{"class":35,"line":18014},77,[33,18016,18017],{"class":60},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[33,18019,18021,18023,18025,18028,18030],{"class":35,"line":18020},78,[33,18022,113],{"class":47},[33,18024,116],{"class":39},[33,18026,18027],{"class":119},"\"内部函数判断结果：\"",[33,18029,116],{"class":39},[33,18031,131],{"class":47},[33,18033,18035,18037,18039,18042],{"class":35,"line":18034},79,[33,18036,4509],{"class":39},[33,18038,17732],{"class":47},[33,18040,18041],{"class":43},"isEqual",[33,18043,18044],{"class":47},"(c2))\n",[33,18046,18048],{"class":35,"line":18047},80,[33,18049,889],{"class":47},[33,18051,18053,18055,18057,18060,18062],{"class":35,"line":18052},81,[33,18054,894],{"class":47},[33,18056,116],{"class":39},[33,18058,18059],{"class":119},"\"两个立方体相等\"",[33,18061,116],{"class":39},[33,18063,131],{"class":47},[33,18065,18067],{"class":35,"line":18066},82,[33,18068,916],{"class":47},[33,18070,18072],{"class":35,"line":18071},83,[33,18073,18074],{"class":39},"    else\n",[33,18076,18078],{"class":35,"line":18077},84,[33,18079,889],{"class":47},[33,18081,18083,18085,18087,18090,18092],{"class":35,"line":18082},85,[33,18084,894],{"class":47},[33,18086,116],{"class":39},[33,18088,18089],{"class":119},"\"两个立方体不相等\"",[33,18091,116],{"class":39},[33,18093,131],{"class":47},[33,18095,18097],{"class":35,"line":18096},86,[33,18098,916],{"class":47},[33,18100,18102],{"class":35,"line":18101},87,[33,18103,160],{"emptyLinePlaceholder":159},[33,18105,18107,18109,18111,18114,18116],{"class":35,"line":18106},88,[33,18108,113],{"class":47},[33,18110,116],{"class":39},[33,18112,18113],{"class":119},"\"全局函数判断结果：\"",[33,18115,116],{"class":39},[33,18117,131],{"class":47},[33,18119,18121,18123,18125,18127],{"class":35,"line":18120},89,[33,18122,4509],{"class":39},[33,18124,860],{"class":47},[33,18126,18041],{"class":43},[33,18128,18129],{"class":47},"(c1, c2))\n",[33,18131,18133],{"class":35,"line":18132},90,[33,18134,889],{"class":47},[33,18136,18138,18140,18142,18144,18146],{"class":35,"line":18137},91,[33,18139,894],{"class":47},[33,18141,116],{"class":39},[33,18143,18059],{"class":119},[33,18145,116],{"class":39},[33,18147,131],{"class":47},[33,18149,18151],{"class":35,"line":18150},92,[33,18152,916],{"class":47},[33,18154,18156],{"class":35,"line":18155},93,[33,18157,18074],{"class":39},[33,18159,18161],{"class":35,"line":18160},94,[33,18162,889],{"class":47},[33,18164,18166,18168,18170,18172,18174],{"class":35,"line":18165},95,[33,18167,894],{"class":47},[33,18169,116],{"class":39},[33,18171,18089],{"class":119},[33,18173,116],{"class":39},[33,18175,131],{"class":47},[33,18177,18179],{"class":35,"line":18178},96,[33,18180,916],{"class":47},[33,18182,18184],{"class":35,"line":18183},97,[33,18185,231],{"class":47},[574,18187,18188],{"start":51},[564,18189,18190],{},[480,18191,18192],{},"练习案例2：点和圆的关系",[561,18194,18195],{},[564,18196,18197],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[23,18199,18201],{"className":25,"code":18200,"language":27,"meta":28,"style":28},"#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",[30,18202,18203,18209,18219,18226,18233,18237,18241,18246,18280,18285,18301,18315,18319,18323,18330,18337,18341,18347,18351,18355,18359,18381,18404,18409,18423,18438,18442,18446,18452,18457,18462,18466,18492,18496,18526,18554,18582,18599,18603,18616,18620,18624,18628,18641,18645,18649,18657,18661,18665,18669,18674,18678,18689,18696,18705,18715,18726,18733,18746,18757,18767,18778,18785,18799,18804,18814,18822],{"__ignoreMap":28},[33,18204,18205,18207],{"class":35,"line":36},[33,18206,1131],{"class":39},[33,18208,1134],{"class":119},[33,18210,18211,18213,18215,18217],{"class":35,"line":51},[33,18212,1139],{"class":39},[33,18214,1142],{"class":39},[33,18216,1145],{"class":43},[33,18218,80],{"class":47},[33,18220,18221,18223],{"class":35,"line":57},[33,18222,1131],{"class":39},[33,18224,18225],{"class":119},"\u003Ccmath>\n",[33,18227,18228,18230],{"class":35,"line":64},[33,18229,15945],{"class":39},[33,18231,18232],{"class":43}," Point\n",[33,18234,18235],{"class":35,"line":83},[33,18236,54],{"class":47},[33,18238,18239],{"class":35,"line":89},[33,18240,15967],{"class":39},[33,18242,18243],{"class":35,"line":98},[33,18244,18245],{"class":60},"    \u002F\u002F赋值\n",[33,18247,18248,18250,18253,18255,18257,18260,18262,18264,18267,18270,18272,18275,18277],{"class":35,"line":110},[33,18249,16160],{"class":39},[33,18251,18252],{"class":43}," setPoint",[33,18254,345],{"class":47},[33,18256,15288],{"class":39},[33,18258,18259],{"class":955}," x",[33,18261,13686],{"class":47},[33,18263,15288],{"class":39},[33,18265,18266],{"class":955}," y",[33,18268,18269],{"class":47},") { m_x ",[33,18271,73],{"class":39},[33,18273,18274],{"class":47}," x; m_y ",[33,18276,73],{"class":39},[33,18278,18279],{"class":47}," y; }\n",[33,18281,18282],{"class":35,"line":134},[33,18283,18284],{"class":60},"    \u002F\u002F获取坐标\n",[33,18286,18287,18289,18292,18295,18298],{"class":35,"line":156},[33,18288,15989],{"class":39},[33,18290,18291],{"class":43}," getX",[33,18293,18294],{"class":47},"() { ",[33,18296,18297],{"class":39},"return",[33,18299,18300],{"class":47}," m_x; }\n",[33,18302,18303,18305,18308,18310,18312],{"class":35,"line":163},[33,18304,15989],{"class":39},[33,18306,18307],{"class":43}," getY",[33,18309,18294],{"class":47},[33,18311,18297],{"class":39},[33,18313,18314],{"class":47}," m_y; }\n",[33,18316,18317],{"class":35,"line":169},[33,18318,160],{"emptyLinePlaceholder":159},[33,18320,18321],{"class":35,"line":175},[33,18322,16473],{"class":39},[33,18324,18325,18327],{"class":35,"line":181},[33,18326,15989],{"class":39},[33,18328,18329],{"class":47}," m_x;\n",[33,18331,18332,18334],{"class":35,"line":196},[33,18333,15989],{"class":39},[33,18335,18336],{"class":47}," m_y;\n",[33,18338,18339],{"class":35,"line":213},[33,18340,749],{"class":47},[33,18342,18343,18345],{"class":35,"line":228},[33,18344,15945],{"class":39},[33,18346,15948],{"class":43},[33,18348,18349],{"class":35,"line":1345},[33,18350,54],{"class":47},[33,18352,18353],{"class":35,"line":1350},[33,18354,15967],{"class":39},[33,18356,18357],{"class":35,"line":1359},[33,18358,18245],{"class":60},[33,18360,18361,18363,18366,18368,18370,18373,18376,18378],{"class":35,"line":1364},[33,18362,16160],{"class":39},[33,18364,18365],{"class":43}," setRadius",[33,18367,345],{"class":47},[33,18369,15288],{"class":39},[33,18371,18372],{"class":955}," r",[33,18374,18375],{"class":47},") { m_r ",[33,18377,73],{"class":39},[33,18379,18380],{"class":47}," r; }\n",[33,18382,18383,18385,18388,18390,18393,18396,18399,18401],{"class":35,"line":1370},[33,18384,16160],{"class":39},[33,18386,18387],{"class":43}," setCenter",[33,18389,345],{"class":47},[33,18391,18392],{"class":43},"Point",[33,18394,18395],{"class":955}," center",[33,18397,18398],{"class":47},") { m_center ",[33,18400,73],{"class":39},[33,18402,18403],{"class":47}," center; }\n",[33,18405,18406],{"class":35,"line":1425},[33,18407,18408],{"class":60},"    \u002F\u002F获取属性\n",[33,18410,18411,18413,18416,18418,18420],{"class":35,"line":1438},[33,18412,15989],{"class":39},[33,18414,18415],{"class":43}," getRadius",[33,18417,18294],{"class":47},[33,18419,18297],{"class":39},[33,18421,18422],{"class":47}," m_r; }\n",[33,18424,18425,18428,18431,18433,18435],{"class":35,"line":1451},[33,18426,18427],{"class":43},"    Point",[33,18429,18430],{"class":43}," getCenter",[33,18432,18294],{"class":47},[33,18434,18297],{"class":39},[33,18436,18437],{"class":47}," m_center; }\n",[33,18439,18440],{"class":35,"line":1457},[33,18441,160],{"emptyLinePlaceholder":159},[33,18443,18444],{"class":35,"line":1466},[33,18445,16473],{"class":39},[33,18447,18448,18450],{"class":35,"line":1471},[33,18449,15989],{"class":39},[33,18451,15979],{"class":47},[33,18453,18454],{"class":35,"line":1477},[33,18455,18456],{"class":60},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[33,18458,18459],{"class":35,"line":1504},[33,18460,18461],{"class":47},"    Point m_center;\n",[33,18463,18464],{"class":35,"line":1509},[33,18465,749],{"class":47},[33,18467,18468,18470,18473,18475,18478,18480,18482,18484,18486,18488,18490],{"class":35,"line":1525},[33,18469,943],{"class":39},[33,18471,18472],{"class":43}," isInCircle",[33,18474,345],{"class":47},[33,18476,18477],{"class":43},"Circle",[33,18479,11835],{"class":39},[33,18481,1902],{"class":955},[33,18483,704],{"class":47},[33,18485,18392],{"class":43},[33,18487,11835],{"class":39},[33,18489,14],{"class":955},[33,18491,884],{"class":47},[33,18493,18494],{"class":35,"line":1535},[33,18495,54],{"class":47},[33,18497,18498,18500,18503,18505,18507,18510,18513,18516,18518,18520,18522,18524],{"class":35,"line":1540},[33,18499,15989],{"class":39},[33,18501,18502],{"class":47}," dx ",[33,18504,73],{"class":39},[33,18506,17593],{"class":47},[33,18508,18509],{"class":43},"getCenter",[33,18511,18512],{"class":47},"().",[33,18514,18515],{"class":43},"getX",[33,18517,14301],{"class":47},[33,18519,1199],{"class":39},[33,18521,17139],{"class":47},[33,18523,18515],{"class":43},[33,18525,7023],{"class":47},[33,18527,18528,18530,18533,18535,18537,18539,18541,18544,18546,18548,18550,18552],{"class":35,"line":4027},[33,18529,15989],{"class":39},[33,18531,18532],{"class":47}," dy ",[33,18534,73],{"class":39},[33,18536,17593],{"class":47},[33,18538,18509],{"class":43},[33,18540,18512],{"class":47},[33,18542,18543],{"class":43},"getY",[33,18545,14301],{"class":47},[33,18547,1199],{"class":39},[33,18549,17139],{"class":47},[33,18551,18543],{"class":43},[33,18553,7023],{"class":47},[33,18555,18556,18558,18561,18563,18566,18569,18571,18573,18575,18577,18579],{"class":35,"line":4032},[33,18557,15989],{"class":39},[33,18559,18560],{"class":47}," distance ",[33,18562,73],{"class":39},[33,18564,18565],{"class":43}," sqrt",[33,18567,18568],{"class":47},"(dx ",[33,18570,2057],{"class":39},[33,18572,18502],{"class":47},[33,18574,1271],{"class":39},[33,18576,18532],{"class":47},[33,18578,2057],{"class":39},[33,18580,18581],{"class":47}," dy);\n",[33,18583,18584,18586,18589,18591,18593,18596],{"class":35,"line":9199},[33,18585,4509],{"class":39},[33,18587,18588],{"class":47}," (distance ",[33,18590,875],{"class":39},[33,18592,17593],{"class":47},[33,18594,18595],{"class":43},"getRadius",[33,18597,18598],{"class":47},"())\n",[33,18600,18601],{"class":35,"line":9223},[33,18602,889],{"class":47},[33,18604,18605,18607,18609,18612,18614],{"class":35,"line":9228},[33,18606,10920],{"class":47},[33,18608,116],{"class":39},[33,18610,18611],{"class":119}," \"点在圆内\"",[33,18613,2900],{"class":39},[33,18615,10091],{"class":47},[33,18617,18618],{"class":35,"line":9234},[33,18619,916],{"class":47},[33,18621,18622],{"class":35,"line":9261},[33,18623,18074],{"class":39},[33,18625,18626],{"class":35,"line":9266},[33,18627,889],{"class":47},[33,18629,18630,18632,18634,18637,18639],{"class":35,"line":9272},[33,18631,10920],{"class":47},[33,18633,116],{"class":39},[33,18635,18636],{"class":119}," \"点在圆外\"",[33,18638,2900],{"class":39},[33,18640,10091],{"class":47},[33,18642,18643],{"class":35,"line":9284},[33,18644,916],{"class":47},[33,18646,18647],{"class":35,"line":9296},[33,18648,231],{"class":47},[33,18650,18651,18653,18655],{"class":35,"line":9308},[33,18652,40],{"class":39},[33,18654,44],{"class":43},[33,18656,48],{"class":47},[33,18658,18659],{"class":35,"line":10967},[33,18660,54],{"class":47},[33,18662,18663],{"class":35,"line":10992},[33,18664,16304],{"class":60},[33,18666,18667],{"class":35,"line":11015},[33,18668,16051],{"class":47},[33,18670,18671],{"class":35,"line":11039},[33,18672,18673],{"class":47},"    Point p1;\n",[33,18675,18676],{"class":35,"line":11044},[33,18677,18245],{"class":60},[33,18679,18680,18682,18684,18687],{"class":35,"line":11049},[33,18681,113],{"class":47},[33,18683,116],{"class":39},[33,18685,18686],{"class":119},"\"请输入圆的半径：\"",[33,18688,80],{"class":47},[33,18690,18691,18693],{"class":35,"line":11054},[33,18692,15989],{"class":39},[33,18694,18695],{"class":47}," r;\n",[33,18697,18698,18700,18702],{"class":35,"line":11063},[33,18699,3436],{"class":47},[33,18701,2885],{"class":39},[33,18703,18704],{"class":47},"r;\n",[33,18706,18707,18709,18712],{"class":35,"line":11068},[33,18708,17846],{"class":47},[33,18710,18711],{"class":43},"setRadius",[33,18713,18714],{"class":47},"(r);\n",[33,18716,18717,18719,18721,18724],{"class":35,"line":11074},[33,18718,113],{"class":47},[33,18720,116],{"class":39},[33,18722,18723],{"class":119},"\"请输入圆心坐标：\"",[33,18725,80],{"class":47},[33,18727,18728,18730],{"class":35,"line":11095},[33,18729,15989],{"class":39},[33,18731,18732],{"class":47}," x, y;\n",[33,18734,18735,18737,18739,18741,18743],{"class":35,"line":11101},[33,18736,3436],{"class":47},[33,18738,2885],{"class":39},[33,18740,2419],{"class":47},[33,18742,2885],{"class":39},[33,18744,18745],{"class":47},"y;\n",[33,18747,18748,18751,18754],{"class":35,"line":11115},[33,18749,18750],{"class":47},"    p1.",[33,18752,18753],{"class":43},"setPoint",[33,18755,18756],{"class":47},"(x, y);\n",[33,18758,18759,18761,18764],{"class":35,"line":11121},[33,18760,17846],{"class":47},[33,18762,18763],{"class":43},"setCenter",[33,18765,18766],{"class":47},"(p1);\n",[33,18768,18769,18771,18773,18776],{"class":35,"line":11148},[33,18770,113],{"class":47},[33,18772,116],{"class":39},[33,18774,18775],{"class":119},"\"请输入测试点坐标：\"",[33,18777,80],{"class":47},[33,18779,18780,18782],{"class":35,"line":11157},[33,18781,15989],{"class":39},[33,18783,18784],{"class":47}," x1, y1;\n",[33,18786,18787,18789,18791,18794,18796],{"class":35,"line":11163},[33,18788,3436],{"class":47},[33,18790,2885],{"class":39},[33,18792,18793],{"class":47},"x1",[33,18795,2885],{"class":39},[33,18797,18798],{"class":47},"y1;\n",[33,18800,18801],{"class":35,"line":11171},[33,18802,18803],{"class":47},"    Point p2;\n",[33,18805,18806,18809,18811],{"class":35,"line":11176},[33,18807,18808],{"class":47},"    p2.",[33,18810,18753],{"class":43},[33,18812,18813],{"class":47},"(x1, y1);\n",[33,18815,18816,18819],{"class":35,"line":17855},[33,18817,18818],{"class":43},"    isInCircle",[33,18820,18821],{"class":47},"(c1, p2);\n",[33,18823,18824],{"class":35,"line":17861},[33,18825,231],{"class":47},[14,18827,18828],{},"在类中可以让另一个类作为本来的成员",[14,18830,18831],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,18833,18834],{},"创建point.h",[23,18836,18838],{"className":25,"code":18837,"language":27,"meta":28,"style":28},"#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",[30,18839,18840,18851,18857,18867,18873,18877,18882,18886,18890,18910,18914,18922,18930,18934,18938,18944,18950],{"__ignoreMap":28},[33,18841,18842,18845,18848],{"class":35,"line":36},[33,18843,18844],{"class":39},"#pragma",[33,18846,18847],{"class":43}," once",[33,18849,18850],{"class":60}," \u002F\u002F防止头文件重复包含\n",[33,18852,18853,18855],{"class":35,"line":51},[33,18854,1131],{"class":39},[33,18856,1134],{"class":119},[33,18858,18859,18861,18863,18865],{"class":35,"line":57},[33,18860,1139],{"class":39},[33,18862,1142],{"class":39},[33,18864,1145],{"class":43},[33,18866,80],{"class":47},[33,18868,18869,18871],{"class":35,"line":64},[33,18870,15945],{"class":39},[33,18872,18232],{"class":43},[33,18874,18875],{"class":35,"line":83},[33,18876,54],{"class":47},[33,18878,18879],{"class":35,"line":89},[33,18880,18881],{"class":60},"\u002F\u002F做好声明与变量定义就可以\n",[33,18883,18884],{"class":35,"line":98},[33,18885,15967],{"class":39},[33,18887,18888],{"class":35,"line":110},[33,18889,18245],{"class":60},[33,18891,18892,18894,18896,18898,18900,18902,18904,18906,18908],{"class":35,"line":134},[33,18893,16160],{"class":39},[33,18895,18252],{"class":43},[33,18897,345],{"class":47},[33,18899,15288],{"class":39},[33,18901,18259],{"class":955},[33,18903,13686],{"class":47},[33,18905,15288],{"class":39},[33,18907,18266],{"class":955},[33,18909,4130],{"class":47},[33,18911,18912],{"class":35,"line":156},[33,18913,18284],{"class":60},[33,18915,18916,18918,18920],{"class":35,"line":163},[33,18917,15989],{"class":39},[33,18919,18291],{"class":43},[33,18921,7023],{"class":47},[33,18923,18924,18926,18928],{"class":35,"line":169},[33,18925,15989],{"class":39},[33,18927,18307],{"class":43},[33,18929,7023],{"class":47},[33,18931,18932],{"class":35,"line":175},[33,18933,160],{"emptyLinePlaceholder":159},[33,18935,18936],{"class":35,"line":181},[33,18937,16473],{"class":39},[33,18939,18940,18942],{"class":35,"line":196},[33,18941,15989],{"class":39},[33,18943,18329],{"class":47},[33,18945,18946,18948],{"class":35,"line":213},[33,18947,15989],{"class":39},[33,18949,18336],{"class":47},[33,18951,18952],{"class":35,"line":228},[33,18953,749],{"class":47},[14,18955,18956],{},"创建point.cpp",[23,18958,18960],{"className":25,"code":18959,"language":27,"meta":28,"style":28},"#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",[30,18961,18962,18969,18974,19008,19012,19028],{"__ignoreMap":28},[33,18963,18964,18966],{"class":35,"line":36},[33,18965,1131],{"class":39},[33,18967,18968],{"class":119},"\u003Cpoint.h>\n",[33,18970,18971],{"class":35,"line":51},[33,18972,18973],{"class":60},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[33,18975,18976,18978,18981,18984,18986,18988,18990,18992,18994,18996,18998,19000,19002,19004,19006],{"class":35,"line":57},[33,18977,16160],{"class":39},[33,18979,18980],{"class":43}," Point",[33,18982,18983],{"class":47},"::",[33,18985,18753],{"class":43},[33,18987,345],{"class":47},[33,18989,15288],{"class":39},[33,18991,18259],{"class":955},[33,18993,13686],{"class":47},[33,18995,15288],{"class":39},[33,18997,18266],{"class":955},[33,18999,18269],{"class":47},[33,19001,73],{"class":39},[33,19003,18274],{"class":47},[33,19005,73],{"class":39},[33,19007,18279],{"class":47},[33,19009,19010],{"class":35,"line":64},[33,19011,18284],{"class":60},[33,19013,19014,19016,19018,19020,19022,19024,19026],{"class":35,"line":83},[33,19015,15989],{"class":39},[33,19017,18980],{"class":43},[33,19019,18983],{"class":47},[33,19021,18515],{"class":43},[33,19023,18294],{"class":47},[33,19025,18297],{"class":39},[33,19027,18300],{"class":47},[33,19029,19030,19032,19034,19036,19038,19040,19042],{"class":35,"line":89},[33,19031,15989],{"class":39},[33,19033,18980],{"class":43},[33,19035,18983],{"class":47},[33,19037,18543],{"class":43},[33,19039,18294],{"class":47},[33,19041,18297],{"class":39},[33,19043,18314],{"class":47},[14,19045,19046],{},"创建circle.h",[23,19048,19050],{"className":25,"code":19049,"language":27,"meta":28,"style":28},"#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",[30,19051,19052,19059,19065,19075,19081,19087,19091,19095,19099,19113,19127,19131,19139,19147,19151,19155,19161,19165,19169],{"__ignoreMap":28},[33,19053,19054,19056],{"class":35,"line":36},[33,19055,18844],{"class":39},[33,19057,19058],{"class":43}," once\n",[33,19060,19061,19063],{"class":35,"line":51},[33,19062,1131],{"class":39},[33,19064,1134],{"class":119},[33,19066,19067,19069,19071,19073],{"class":35,"line":57},[33,19068,1139],{"class":39},[33,19070,1142],{"class":39},[33,19072,1145],{"class":43},[33,19074,80],{"class":47},[33,19076,19077,19079],{"class":35,"line":64},[33,19078,1131],{"class":39},[33,19080,18968],{"class":119},[33,19082,19083,19085],{"class":35,"line":83},[33,19084,15945],{"class":39},[33,19086,15948],{"class":43},[33,19088,19089],{"class":35,"line":89},[33,19090,54],{"class":47},[33,19092,19093],{"class":35,"line":98},[33,19094,15967],{"class":39},[33,19096,19097],{"class":35,"line":110},[33,19098,18245],{"class":60},[33,19100,19101,19103,19105,19107,19109,19111],{"class":35,"line":134},[33,19102,16160],{"class":39},[33,19104,18365],{"class":43},[33,19106,345],{"class":47},[33,19108,15288],{"class":39},[33,19110,18372],{"class":955},[33,19112,4130],{"class":47},[33,19114,19115,19117,19119,19121,19123,19125],{"class":35,"line":156},[33,19116,16160],{"class":39},[33,19118,18387],{"class":43},[33,19120,345],{"class":47},[33,19122,18392],{"class":43},[33,19124,18395],{"class":955},[33,19126,4130],{"class":47},[33,19128,19129],{"class":35,"line":163},[33,19130,18408],{"class":60},[33,19132,19133,19135,19137],{"class":35,"line":169},[33,19134,15989],{"class":39},[33,19136,18415],{"class":43},[33,19138,7023],{"class":47},[33,19140,19141,19143,19145],{"class":35,"line":175},[33,19142,18427],{"class":43},[33,19144,18430],{"class":43},[33,19146,7023],{"class":47},[33,19148,19149],{"class":35,"line":181},[33,19150,160],{"emptyLinePlaceholder":159},[33,19152,19153],{"class":35,"line":196},[33,19154,16473],{"class":39},[33,19156,19157,19159],{"class":35,"line":213},[33,19158,15989],{"class":39},[33,19160,15979],{"class":47},[33,19162,19163],{"class":35,"line":228},[33,19164,18456],{"class":60},[33,19166,19167],{"class":35,"line":1345},[33,19168,18461],{"class":47},[33,19170,19171],{"class":35,"line":1350},[33,19172,749],{"class":47},[14,19174,19175],{},"创建circle.cpp",[23,19177,19179],{"className":25,"code":19178,"language":27,"meta":28,"style":28},"#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",[30,19180,19181,19188,19211,19233,19238,19254],{"__ignoreMap":28},[33,19182,19183,19185],{"class":35,"line":36},[33,19184,1131],{"class":39},[33,19186,19187],{"class":119},"\u003Ccircle.h>\n",[33,19189,19190,19192,19195,19197,19199,19201,19203,19205,19207,19209],{"class":35,"line":51},[33,19191,943],{"class":39},[33,19193,19194],{"class":43}," Circle",[33,19196,18983],{"class":47},[33,19198,18711],{"class":43},[33,19200,345],{"class":47},[33,19202,15288],{"class":39},[33,19204,18372],{"class":955},[33,19206,18375],{"class":47},[33,19208,73],{"class":39},[33,19210,18380],{"class":47},[33,19212,19213,19215,19217,19219,19221,19223,19225,19227,19229,19231],{"class":35,"line":57},[33,19214,943],{"class":39},[33,19216,19194],{"class":43},[33,19218,18983],{"class":47},[33,19220,18763],{"class":43},[33,19222,345],{"class":47},[33,19224,18392],{"class":43},[33,19226,18395],{"class":955},[33,19228,18398],{"class":47},[33,19230,73],{"class":39},[33,19232,18403],{"class":47},[33,19234,19235],{"class":35,"line":64},[33,19236,19237],{"class":60},"\u002F\u002F获取属性\n",[33,19239,19240,19242,19244,19246,19248,19250,19252],{"class":35,"line":83},[33,19241,15288],{"class":39},[33,19243,19194],{"class":43},[33,19245,18983],{"class":47},[33,19247,18595],{"class":43},[33,19249,18294],{"class":47},[33,19251,18297],{"class":39},[33,19253,18422],{"class":47},[33,19255,19256,19258,19260,19262,19264,19266,19268],{"class":35,"line":89},[33,19257,18392],{"class":43},[33,19259,19194],{"class":43},[33,19261,18983],{"class":47},[33,19263,18509],{"class":43},[33,19265,18294],{"class":47},[33,19267,18297],{"class":39},[33,19269,18437],{"class":47},[14,19271,19272],{},"使用封装的类",[23,19274,19276],{"className":25,"code":19275,"language":27,"meta":28,"style":28},"#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",[30,19277,19278,19284,19294,19300,19306,19330,19334,19360,19386,19410,19424,19428,19440,19444,19448,19452,19464,19468,19472,19480,19484,19488,19492,19496,19500,19510,19516,19524,19532,19542,19548,19560,19568,19576,19586,19592,19604,19608,19616,19622],{"__ignoreMap":28},[33,19279,19280,19282],{"class":35,"line":36},[33,19281,1131],{"class":39},[33,19283,1134],{"class":119},[33,19285,19286,19288,19290,19292],{"class":35,"line":51},[33,19287,1139],{"class":39},[33,19289,1142],{"class":39},[33,19291,1145],{"class":43},[33,19293,80],{"class":47},[33,19295,19296,19298],{"class":35,"line":57},[33,19297,1131],{"class":39},[33,19299,19187],{"class":119},[33,19301,19302,19304],{"class":35,"line":64},[33,19303,1131],{"class":39},[33,19305,18968],{"class":119},[33,19307,19308,19310,19312,19314,19316,19318,19320,19322,19324,19326,19328],{"class":35,"line":83},[33,19309,943],{"class":39},[33,19311,18472],{"class":43},[33,19313,345],{"class":47},[33,19315,18477],{"class":43},[33,19317,11835],{"class":39},[33,19319,1902],{"class":955},[33,19321,704],{"class":47},[33,19323,18392],{"class":43},[33,19325,11835],{"class":39},[33,19327,14],{"class":955},[33,19329,884],{"class":47},[33,19331,19332],{"class":35,"line":89},[33,19333,54],{"class":47},[33,19335,19336,19338,19340,19342,19344,19346,19348,19350,19352,19354,19356,19358],{"class":35,"line":98},[33,19337,15989],{"class":39},[33,19339,18502],{"class":47},[33,19341,73],{"class":39},[33,19343,17593],{"class":47},[33,19345,18509],{"class":43},[33,19347,18512],{"class":47},[33,19349,18515],{"class":43},[33,19351,14301],{"class":47},[33,19353,1199],{"class":39},[33,19355,17139],{"class":47},[33,19357,18515],{"class":43},[33,19359,7023],{"class":47},[33,19361,19362,19364,19366,19368,19370,19372,19374,19376,19378,19380,19382,19384],{"class":35,"line":110},[33,19363,15989],{"class":39},[33,19365,18532],{"class":47},[33,19367,73],{"class":39},[33,19369,17593],{"class":47},[33,19371,18509],{"class":43},[33,19373,18512],{"class":47},[33,19375,18543],{"class":43},[33,19377,14301],{"class":47},[33,19379,1199],{"class":39},[33,19381,17139],{"class":47},[33,19383,18543],{"class":43},[33,19385,7023],{"class":47},[33,19387,19388,19390,19392,19394,19396,19398,19400,19402,19404,19406,19408],{"class":35,"line":134},[33,19389,15989],{"class":39},[33,19391,18560],{"class":47},[33,19393,73],{"class":39},[33,19395,18565],{"class":43},[33,19397,18568],{"class":47},[33,19399,2057],{"class":39},[33,19401,18502],{"class":47},[33,19403,1271],{"class":39},[33,19405,18532],{"class":47},[33,19407,2057],{"class":39},[33,19409,18581],{"class":47},[33,19411,19412,19414,19416,19418,19420,19422],{"class":35,"line":156},[33,19413,4509],{"class":39},[33,19415,18588],{"class":47},[33,19417,875],{"class":39},[33,19419,17593],{"class":47},[33,19421,18595],{"class":43},[33,19423,18598],{"class":47},[33,19425,19426],{"class":35,"line":163},[33,19427,889],{"class":47},[33,19429,19430,19432,19434,19436,19438],{"class":35,"line":169},[33,19431,10920],{"class":47},[33,19433,116],{"class":39},[33,19435,18611],{"class":119},[33,19437,2900],{"class":39},[33,19439,10091],{"class":47},[33,19441,19442],{"class":35,"line":175},[33,19443,916],{"class":47},[33,19445,19446],{"class":35,"line":181},[33,19447,18074],{"class":39},[33,19449,19450],{"class":35,"line":196},[33,19451,889],{"class":47},[33,19453,19454,19456,19458,19460,19462],{"class":35,"line":213},[33,19455,10920],{"class":47},[33,19457,116],{"class":39},[33,19459,18636],{"class":119},[33,19461,2900],{"class":39},[33,19463,10091],{"class":47},[33,19465,19466],{"class":35,"line":228},[33,19467,916],{"class":47},[33,19469,19470],{"class":35,"line":1345},[33,19471,231],{"class":47},[33,19473,19474,19476,19478],{"class":35,"line":1350},[33,19475,40],{"class":39},[33,19477,44],{"class":43},[33,19479,48],{"class":47},[33,19481,19482],{"class":35,"line":1359},[33,19483,54],{"class":47},[33,19485,19486],{"class":35,"line":1364},[33,19487,16304],{"class":60},[33,19489,19490],{"class":35,"line":1370},[33,19491,16051],{"class":47},[33,19493,19494],{"class":35,"line":1425},[33,19495,18673],{"class":47},[33,19497,19498],{"class":35,"line":1438},[33,19499,18245],{"class":60},[33,19501,19502,19504,19506,19508],{"class":35,"line":1451},[33,19503,113],{"class":47},[33,19505,116],{"class":39},[33,19507,18686],{"class":119},[33,19509,80],{"class":47},[33,19511,19512,19514],{"class":35,"line":1457},[33,19513,15989],{"class":39},[33,19515,18695],{"class":47},[33,19517,19518,19520,19522],{"class":35,"line":1466},[33,19519,3436],{"class":47},[33,19521,2885],{"class":39},[33,19523,18704],{"class":47},[33,19525,19526,19528,19530],{"class":35,"line":1471},[33,19527,17846],{"class":47},[33,19529,18711],{"class":43},[33,19531,18714],{"class":47},[33,19533,19534,19536,19538,19540],{"class":35,"line":1477},[33,19535,113],{"class":47},[33,19537,116],{"class":39},[33,19539,18723],{"class":119},[33,19541,80],{"class":47},[33,19543,19544,19546],{"class":35,"line":1504},[33,19545,15989],{"class":39},[33,19547,18732],{"class":47},[33,19549,19550,19552,19554,19556,19558],{"class":35,"line":1509},[33,19551,3436],{"class":47},[33,19553,2885],{"class":39},[33,19555,2419],{"class":47},[33,19557,2885],{"class":39},[33,19559,18745],{"class":47},[33,19561,19562,19564,19566],{"class":35,"line":1525},[33,19563,18750],{"class":47},[33,19565,18753],{"class":43},[33,19567,18756],{"class":47},[33,19569,19570,19572,19574],{"class":35,"line":1535},[33,19571,17846],{"class":47},[33,19573,18763],{"class":43},[33,19575,18766],{"class":47},[33,19577,19578,19580,19582,19584],{"class":35,"line":1540},[33,19579,113],{"class":47},[33,19581,116],{"class":39},[33,19583,18775],{"class":119},[33,19585,80],{"class":47},[33,19587,19588,19590],{"class":35,"line":4027},[33,19589,15989],{"class":39},[33,19591,18784],{"class":47},[33,19593,19594,19596,19598,19600,19602],{"class":35,"line":4032},[33,19595,3436],{"class":47},[33,19597,2885],{"class":39},[33,19599,18793],{"class":47},[33,19601,2885],{"class":39},[33,19603,18798],{"class":47},[33,19605,19606],{"class":35,"line":9199},[33,19607,18803],{"class":47},[33,19609,19610,19612,19614],{"class":35,"line":9223},[33,19611,18808],{"class":47},[33,19613,18753],{"class":43},[33,19615,18813],{"class":47},[33,19617,19618,19620],{"class":35,"line":9228},[33,19619,18818],{"class":43},[33,19621,18821],{"class":47},[33,19623,19624],{"class":35,"line":9234},[33,19625,231],{"class":47},[18,19627,19629],{"id":19628},"_82对象的初始化清理","8.2对象的初始化清理",[561,19631,19632,19635],{},[564,19633,19634],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[564,19636,19637],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[1599,19639,19641],{"id":19640},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,19643,19644,19645,19648],{},"对象的",[480,19646,19647],{},"初始化和清理","也是两个非常重要的安全问题",[14,19650,19651],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,19653,19654],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,19656,19657,19658,19661,19662,19665],{},"c++利用了",[480,19659,19660],{},"构造函数","和",[480,19663,19664],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,19667,19668,19669],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[480,19670,19671],{},"我们不提供构造和析构，编译器会提供",[14,19673,19674],{},[480,19675,19676],{},"编译器提供的构造函数和析构函数是空实现。",[561,19678,19679,19682],{},[564,19680,19681],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[564,19683,19684,19685,19688],{},"析构函数：主要作用在于对象",[480,19686,19687],{},"销毁前","系统自动调用，执行一些清理工作。",[14,19690,19691,19694],{},[480,19692,19693],{},"构造函数语法：",[30,19695,19696],{},"类名(){}",[574,19698,19699,19702,19705,19708,19711],{},[564,19700,19701],{},"构造函数，没有返回值也不写void",[564,19703,19704],{},"函数名称与类名相同",[564,19706,19707],{},"构造函数可以有参数，因此可以发生重载",[564,19709,19710],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[564,19712,19713,19714,352],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[30,19715,19716],{},"Person(){}",[14,19718,19719,15046,19722],{},[480,19720,19721],{},"析构函数语法：",[30,19723,19724],{},"~类名(){}",[574,19726,19727,19730,19733,19739],{},[564,19728,19729],{},"析构函数，没有返回值也不写void",[564,19731,19732],{},"函数名称与类名相同,在名称前加上符号  ~",[564,19734,19735,19736],{},"析构函数不可以有参数，因此",[480,19737,19738],{},"不可以发生重载",[564,19740,19741],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[23,19743,19745],{"className":25,"code":19744,"language":27,"meta":28,"style":28},"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",[30,19746,19747,19753,19757,19761,19766,19773,19777,19790,19794,19799,19806,19810,19823,19827,19831,19835,19839,19847,19851,19859,19863,19867,19875,19879,19884,19888,19895,19899,19912,19916,19924],{"__ignoreMap":28},[33,19748,19749,19751],{"class":35,"line":36},[33,19750,15945],{"class":39},[33,19752,16422],{"class":43},[33,19754,19755],{"class":35,"line":51},[33,19756,54],{"class":47},[33,19758,19759],{"class":35,"line":57},[33,19760,15967],{"class":39},[33,19762,19763],{"class":35,"line":64},[33,19764,19765],{"class":60},"    \u002F\u002F构造函数\n",[33,19767,19768,19771],{"class":35,"line":83},[33,19769,19770],{"class":43},"    Person",[33,19772,48],{"class":47},[33,19774,19775],{"class":35,"line":89},[33,19776,889],{"class":47},[33,19778,19779,19781,19783,19786,19788],{"class":35,"line":98},[33,19780,10920],{"class":47},[33,19782,116],{"class":39},[33,19784,19785],{"class":119}," \"Person的构造函数调用\"",[33,19787,2900],{"class":39},[33,19789,10091],{"class":47},[33,19791,19792],{"class":35,"line":110},[33,19793,916],{"class":47},[33,19795,19796],{"class":35,"line":134},[33,19797,19798],{"class":60},"    \u002F\u002F析构函数\n",[33,19800,19801,19804],{"class":35,"line":156},[33,19802,19803],{"class":43},"    ~Person",[33,19805,48],{"class":47},[33,19807,19808],{"class":35,"line":163},[33,19809,889],{"class":47},[33,19811,19812,19814,19816,19819,19821],{"class":35,"line":169},[33,19813,10920],{"class":47},[33,19815,116],{"class":39},[33,19817,19818],{"class":119}," \"Person的析构函数调用\"",[33,19820,2900],{"class":39},[33,19822,10091],{"class":47},[33,19824,19825],{"class":35,"line":175},[33,19826,916],{"class":47},[33,19828,19829],{"class":35,"line":181},[33,19830,160],{"emptyLinePlaceholder":159},[33,19832,19833],{"class":35,"line":196},[33,19834,749],{"class":47},[33,19836,19837],{"class":35,"line":213},[33,19838,160],{"emptyLinePlaceholder":159},[33,19840,19841,19843,19845],{"class":35,"line":228},[33,19842,943],{"class":39},[33,19844,6975],{"class":43},[33,19846,48],{"class":47},[33,19848,19849],{"class":35,"line":1345},[33,19850,54],{"class":47},[33,19852,19853,19856],{"class":35,"line":1350},[33,19854,19855],{"class":47},"    Person p;",[33,19857,19858],{"class":60},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[33,19860,19861],{"class":35,"line":1359},[33,19862,231],{"class":47},[33,19864,19865],{"class":35,"line":1364},[33,19866,160],{"emptyLinePlaceholder":159},[33,19868,19869,19871,19873],{"class":35,"line":1370},[33,19870,40],{"class":39},[33,19872,44],{"class":43},[33,19874,12104],{"class":47},[33,19876,19877],{"class":35,"line":1425},[33,19878,14461],{"class":47},[33,19880,19881],{"class":35,"line":1438},[33,19882,19883],{"class":60},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[33,19885,19886],{"class":35,"line":1451},[33,19887,160],{"emptyLinePlaceholder":159},[33,19889,19890,19892],{"class":35,"line":1457},[33,19891,19855],{"class":47},[33,19893,19894],{"class":60},"\u002F\u002F只有构造函数\n",[33,19896,19897],{"class":35,"line":1466},[33,19898,160],{"emptyLinePlaceholder":159},[33,19900,19901,19903,19905,19907,19909],{"class":35,"line":1471},[33,19902,3724],{"class":43},[33,19904,345],{"class":47},[33,19906,3729],{"class":119},[33,19908,7353],{"class":47},[33,19910,19911],{"class":60},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[33,19913,19914],{"class":35,"line":1477},[33,19915,160],{"emptyLinePlaceholder":159},[33,19917,19918,19920,19922],{"class":35,"line":1504},[33,19919,5489],{"class":39},[33,19921,5492],{"class":76},[33,19923,80],{"class":47},[33,19925,19926],{"class":35,"line":1509},[33,19927,231],{"class":47},[14,19929,19930],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[1599,19932,19934],{"id":19933},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19936,19937],{},"两种分类方式：",[14,19939,19940],{},"​\t按参数分为： 有参构造和无参构造",[14,19942,19943],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19945,19946],{},"三种调用方式：",[14,19948,19949],{},"​\t括号法",[14,19951,19952],{},"​\t显示法",[14,19954,19955],{},"​\t隐式转换法",[23,19957,19959],{"className":25,"code":19958,"language":27,"meta":28,"style":28},"#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",[30,19960,19961,19967,19977,19982,19987,19992,19997,20001,20009,20013,20017,20021,20027,20031,20044,20048,20060,20064,20073,20086,20090,20094,20100,20104,20117,20121,20126,20142,20146,20151,20160,20173,20177,20183,20187,20192,20200,20204,20209,20213,20221,20225,20230,20235,20240,20245,20250,20254,20259,20264,20269,20274,20278,20283,20288,20304,20316,20321,20325,20330,20335,20340,20344,20349,20363,20376,20380,20388,20392,20398,20404,20412],{"__ignoreMap":28},[33,19962,19963,19965],{"class":35,"line":36},[33,19964,1131],{"class":39},[33,19966,1134],{"class":119},[33,19968,19969,19971,19973,19975],{"class":35,"line":51},[33,19970,1139],{"class":39},[33,19972,1142],{"class":39},[33,19974,1145],{"class":43},[33,19976,80],{"class":47},[33,19978,19979],{"class":35,"line":57},[33,19980,19981],{"class":60},"\u002F\u002F1.构造函数的分类及调用\n",[33,19983,19984],{"class":35,"line":64},[33,19985,19986],{"class":60},"\u002F\u002F分类\n",[33,19988,19989],{"class":35,"line":83},[33,19990,19991],{"class":60},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[33,19993,19994],{"class":35,"line":89},[33,19995,19996],{"class":60},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[33,19998,19999],{"class":35,"line":98},[33,20000,160],{"emptyLinePlaceholder":159},[33,20002,20003,20005,20007],{"class":35,"line":110},[33,20004,15945],{"class":39},[33,20006,16820],{"class":43},[33,20008,4085],{"class":47},[33,20010,20011],{"class":35,"line":134},[33,20012,54],{"class":47},[33,20014,20015],{"class":35,"line":156},[33,20016,15967],{"class":39},[33,20018,20019],{"class":35,"line":163},[33,20020,19765],{"class":60},[33,20022,20023,20025],{"class":35,"line":169},[33,20024,19770],{"class":43},[33,20026,48],{"class":47},[33,20028,20029],{"class":35,"line":175},[33,20030,889],{"class":47},[33,20032,20033,20035,20037,20040,20042],{"class":35,"line":181},[33,20034,894],{"class":47},[33,20036,116],{"class":39},[33,20038,20039],{"class":119},"\"Person构造函数无参构造\"",[33,20041,116],{"class":39},[33,20043,131],{"class":47},[33,20045,20046],{"class":35,"line":196},[33,20047,916],{"class":47},[33,20049,20050,20052,20054,20056,20058],{"class":35,"line":213},[33,20051,19770],{"class":43},[33,20053,345],{"class":47},[33,20055,40],{"class":39},[33,20057,70],{"class":955},[33,20059,884],{"class":47},[33,20061,20062],{"class":35,"line":228},[33,20063,889],{"class":47},[33,20065,20066,20069,20071],{"class":35,"line":1345},[33,20067,20068],{"class":47},"        age",[33,20070,73],{"class":39},[33,20072,107],{"class":47},[33,20074,20075,20077,20079,20082,20084],{"class":35,"line":1350},[33,20076,894],{"class":47},[33,20078,116],{"class":39},[33,20080,20081],{"class":119},"\"Person构造函数有参构造\"",[33,20083,116],{"class":39},[33,20085,131],{"class":47},[33,20087,20088],{"class":35,"line":1359},[33,20089,916],{"class":47},[33,20091,20092],{"class":35,"line":1364},[33,20093,19798],{"class":60},[33,20095,20096,20098],{"class":35,"line":1370},[33,20097,19803],{"class":43},[33,20099,48],{"class":47},[33,20101,20102],{"class":35,"line":1425},[33,20103,889],{"class":47},[33,20105,20106,20108,20110,20113,20115],{"class":35,"line":1438},[33,20107,894],{"class":47},[33,20109,116],{"class":39},[33,20111,20112],{"class":119},"\"Person析构函数被调用\"",[33,20114,116],{"class":39},[33,20116,131],{"class":47},[33,20118,20119],{"class":35,"line":1451},[33,20120,916],{"class":47},[33,20122,20123],{"class":35,"line":1457},[33,20124,20125],{"class":60},"    \u002F\u002F拷贝构造函数\n",[33,20127,20128,20130,20132,20134,20136,20138,20140],{"class":35,"line":1466},[33,20129,19770],{"class":43},[33,20131,345],{"class":47},[33,20133,588],{"class":39},[33,20135,16820],{"class":43},[33,20137,11835],{"class":39},[33,20139,14],{"class":955},[33,20141,884],{"class":47},[33,20143,20144],{"class":35,"line":1471},[33,20145,889],{"class":47},[33,20147,20148],{"class":35,"line":1477},[33,20149,20150],{"class":60},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[33,20152,20153,20155,20157],{"class":35,"line":1504},[33,20154,20068],{"class":47},[33,20156,73],{"class":39},[33,20158,20159],{"class":47},"p.age;\n",[33,20161,20162,20164,20166,20169,20171],{"class":35,"line":1509},[33,20163,894],{"class":47},[33,20165,116],{"class":39},[33,20167,20168],{"class":119},"\"Person拷贝构造函数被调用\"",[33,20170,116],{"class":39},[33,20172,131],{"class":47},[33,20174,20175],{"class":35,"line":1525},[33,20176,916],{"class":47},[33,20178,20179,20181],{"class":35,"line":1535},[33,20180,67],{"class":39},[33,20182,9048],{"class":47},[33,20184,20185],{"class":35,"line":1540},[33,20186,749],{"class":47},[33,20188,20189],{"class":35,"line":4027},[33,20190,20191],{"class":60},"\u002F\u002F调用\n",[33,20193,20194,20196,20198],{"class":35,"line":4032},[33,20195,943],{"class":39},[33,20197,6975],{"class":43},[33,20199,48],{"class":47},[33,20201,20202],{"class":35,"line":9199},[33,20203,54],{"class":47},[33,20205,20206],{"class":35,"line":9223},[33,20207,20208],{"class":60},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[33,20210,20211],{"class":35,"line":9228},[33,20212,231],{"class":47},[33,20214,20215,20217,20219],{"class":35,"line":9234},[33,20216,943],{"class":39},[33,20218,7044],{"class":43},[33,20220,48],{"class":47},[33,20222,20223],{"class":35,"line":9261},[33,20224,54],{"class":47},[33,20226,20227],{"class":35,"line":9266},[33,20228,20229],{"class":60},"    \u002F\u002F1.括号法\n",[33,20231,20232],{"class":35,"line":9272},[33,20233,20234],{"class":60},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[33,20236,20237],{"class":35,"line":9284},[33,20238,20239],{"class":60},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[33,20241,20242],{"class":35,"line":9296},[33,20243,20244],{"class":60},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[33,20246,20247],{"class":35,"line":9308},[33,20248,20249],{"class":60},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[33,20251,20252],{"class":35,"line":10967},[33,20253,160],{"emptyLinePlaceholder":159},[33,20255,20256],{"class":35,"line":10992},[33,20257,20258],{"class":60},"    \u002F\u002F注意事项\n",[33,20260,20261],{"class":35,"line":11015},[33,20262,20263],{"class":60},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[33,20265,20266],{"class":35,"line":11039},[33,20267,20268],{"class":60},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[33,20270,20271],{"class":35,"line":11044},[33,20272,20273],{"class":60},"    \u002F\u002F Person p4();\n",[33,20275,20276],{"class":35,"line":11049},[33,20277,160],{"emptyLinePlaceholder":159},[33,20279,20280],{"class":35,"line":11054},[33,20281,20282],{"class":60},"    \u002F\u002F2.显示法\n",[33,20284,20285],{"class":35,"line":11063},[33,20286,20287],{"class":47},"    Person p1;\n",[33,20289,20290,20293,20295,20298,20300,20302],{"class":35,"line":11068},[33,20291,20292],{"class":47},"    Person p2",[33,20294,73],{"class":39},[33,20296,20297],{"class":43},"Person",[33,20299,345],{"class":47},[33,20301,77],{"class":76},[33,20303,4130],{"class":47},[33,20305,20306,20309,20311,20313],{"class":35,"line":11074},[33,20307,20308],{"class":47},"    Person p3",[33,20310,73],{"class":39},[33,20312,20297],{"class":43},[33,20314,20315],{"class":47},"(p2);\n",[33,20317,20318],{"class":35,"line":11095},[33,20319,20320],{"class":60},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[33,20322,20323],{"class":35,"line":11101},[33,20324,160],{"emptyLinePlaceholder":159},[33,20326,20327],{"class":35,"line":11115},[33,20328,20329],{"class":60},"    \u002F\u002F 注意事项2\n",[33,20331,20332],{"class":35,"line":11121},[33,20333,20334],{"class":60},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[33,20336,20337],{"class":35,"line":11148},[33,20338,20339],{"class":60},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[33,20341,20342],{"class":35,"line":11157},[33,20343,160],{"emptyLinePlaceholder":159},[33,20345,20346],{"class":35,"line":11163},[33,20347,20348],{"class":60},"    \u002F\u002F3.隐士转换法\n",[33,20350,20351,20354,20356,20358,20360],{"class":35,"line":11171},[33,20352,20353],{"class":47},"    Person p4",[33,20355,73],{"class":39},[33,20357,77],{"class":76},[33,20359,460],{"class":47},[33,20361,20362],{"class":60},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[33,20364,20365,20368,20370,20373],{"class":35,"line":11176},[33,20366,20367],{"class":47},"    Person p5",[33,20369,73],{"class":39},[33,20371,20372],{"class":47},"p4;",[33,20374,20375],{"class":60}," \u002F\u002F 这里会调用拷贝构造函数\n",[33,20377,20378],{"class":35,"line":17855},[33,20379,231],{"class":47},[33,20381,20382,20384,20386],{"class":35,"line":17861},[33,20383,40],{"class":39},[33,20385,44],{"class":43},[33,20387,48],{"class":47},[33,20389,20390],{"class":35,"line":17884},[33,20391,54],{"class":47},[33,20393,20394,20396],{"class":35,"line":17890},[33,20395,7020],{"class":43},[33,20397,7023],{"class":47},[33,20399,20400,20402],{"class":35,"line":17913},[33,20401,7089],{"class":43},[33,20403,7023],{"class":47},[33,20405,20406,20408,20410],{"class":35,"line":17927},[33,20407,5489],{"class":39},[33,20409,5492],{"class":76},[33,20411,80],{"class":47},[33,20413,20414],{"class":35,"line":17947},[33,20415,231],{"class":47},[14,20417,20418,20421],{},[480,20419,20420],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[1599,20423,20425],{"id":20424},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,20427,20428],{},"C++中拷贝构造函数调用时机通常有三种情况",[561,20430,20431,20434,20437],{},[564,20432,20433],{},"使用一个已经创建完毕的对象来初始化一个新对象",[564,20435,20436],{},"值传递的方式给函数参数传值",[564,20438,20439],{},"以值方式返回局部对象",[23,20441,20443],{"className":25,"code":20442,"language":27,"meta":28,"style":28},"#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",[30,20444,20445,20451,20461,20465,20470,20474,20479,20484,20489,20495,20499,20503,20509,20513,20526,20530,20535,20547,20551,20559,20572,20576,20580,20596,20600,20609,20622,20626,20632,20636,20648,20652,20658,20662,20666,20674,20678,20691,20699,20717,20721,20726,20731,20746,20750,20763,20767,20775,20779,20783,20791,20795,20800,20809,20813,20817,20842,20852,20856,20864,20868,20879,20904,20908,20912,20916,20924,20928,20933,20938,20945,20950,20955,20960,20965,20969,20974,20978,20983,20987,20992,20997,21001,21005,21010,21015,21023],{"__ignoreMap":28},[33,20446,20447,20449],{"class":35,"line":36},[33,20448,1131],{"class":39},[33,20450,1134],{"class":119},[33,20452,20453,20455,20457,20459],{"class":35,"line":51},[33,20454,1139],{"class":39},[33,20456,1142],{"class":39},[33,20458,1145],{"class":43},[33,20460,80],{"class":47},[33,20462,20463],{"class":35,"line":57},[33,20464,160],{"emptyLinePlaceholder":159},[33,20466,20467],{"class":35,"line":64},[33,20468,20469],{"class":60},"\u002F\u002F拷贝构造函数调用时机\n",[33,20471,20472],{"class":35,"line":83},[33,20473,160],{"emptyLinePlaceholder":159},[33,20475,20476],{"class":35,"line":89},[33,20477,20478],{"class":60},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[33,20480,20481],{"class":35,"line":98},[33,20482,20483],{"class":60},"\u002F\u002F2.值传递的方式给函数参数传值\n",[33,20485,20486],{"class":35,"line":110},[33,20487,20488],{"class":60},"\u002F\u002F3.以值方式返回局部对象\n",[33,20490,20491,20493],{"class":35,"line":134},[33,20492,15945],{"class":39},[33,20494,16422],{"class":43},[33,20496,20497],{"class":35,"line":156},[33,20498,54],{"class":47},[33,20500,20501],{"class":35,"line":163},[33,20502,15967],{"class":39},[33,20504,20505,20507],{"class":35,"line":169},[33,20506,19770],{"class":43},[33,20508,48],{"class":47},[33,20510,20511],{"class":35,"line":175},[33,20512,889],{"class":47},[33,20514,20515,20517,20519,20522,20524],{"class":35,"line":181},[33,20516,10920],{"class":47},[33,20518,116],{"class":39},[33,20520,20521],{"class":119}," \"Person的默认构造函数调用\"",[33,20523,2900],{"class":39},[33,20525,10091],{"class":47},[33,20527,20528],{"class":35,"line":196},[33,20529,916],{"class":47},[33,20531,20532],{"class":35,"line":213},[33,20533,20534],{"class":60},"    \u002F\u002F有参构造\n",[33,20536,20537,20539,20541,20543,20545],{"class":35,"line":228},[33,20538,19770],{"class":43},[33,20540,345],{"class":47},[33,20542,40],{"class":39},[33,20544,16940],{"class":955},[33,20546,884],{"class":47},[33,20548,20549],{"class":35,"line":1345},[33,20550,889],{"class":47},[33,20552,20553,20555,20557],{"class":35,"line":1350},[33,20554,16994],{"class":47},[33,20556,73],{"class":39},[33,20558,9048],{"class":47},[33,20560,20561,20563,20565,20568,20570],{"class":35,"line":1359},[33,20562,10920],{"class":47},[33,20564,116],{"class":39},[33,20566,20567],{"class":119}," \"Person的有参构造函数调用\"",[33,20569,2900],{"class":39},[33,20571,10091],{"class":47},[33,20573,20574],{"class":35,"line":1364},[33,20575,916],{"class":47},[33,20577,20578],{"class":35,"line":1370},[33,20579,20125],{"class":60},[33,20581,20582,20584,20586,20588,20590,20592,20594],{"class":35,"line":1425},[33,20583,19770],{"class":43},[33,20585,345],{"class":47},[33,20587,588],{"class":39},[33,20589,16820],{"class":43},[33,20591,11835],{"class":39},[33,20593,14],{"class":955},[33,20595,884],{"class":47},[33,20597,20598],{"class":35,"line":1438},[33,20599,889],{"class":47},[33,20601,20602,20604,20606],{"class":35,"line":1451},[33,20603,16994],{"class":47},[33,20605,73],{"class":39},[33,20607,20608],{"class":47}," p.m_Age;\n",[33,20610,20611,20613,20615,20618,20620],{"class":35,"line":1457},[33,20612,10920],{"class":47},[33,20614,116],{"class":39},[33,20616,20617],{"class":119}," \"Person的拷贝构造函数调用\"",[33,20619,2900],{"class":39},[33,20621,10091],{"class":47},[33,20623,20624],{"class":35,"line":1466},[33,20625,916],{"class":47},[33,20627,20628,20630],{"class":35,"line":1471},[33,20629,19803],{"class":43},[33,20631,48],{"class":47},[33,20633,20634],{"class":35,"line":1477},[33,20635,889],{"class":47},[33,20637,20638,20640,20642,20644,20646],{"class":35,"line":1504},[33,20639,10920],{"class":47},[33,20641,116],{"class":39},[33,20643,19818],{"class":119},[33,20645,2900],{"class":39},[33,20647,10091],{"class":47},[33,20649,20650],{"class":35,"line":1509},[33,20651,916],{"class":47},[33,20653,20654,20656],{"class":35,"line":1525},[33,20655,67],{"class":39},[33,20657,16917],{"class":47},[33,20659,20660],{"class":35,"line":1535},[33,20661,749],{"class":47},[33,20663,20664],{"class":35,"line":1540},[33,20665,20478],{"class":60},[33,20667,20668,20670,20672],{"class":35,"line":4027},[33,20669,943],{"class":39},[33,20671,6975],{"class":43},[33,20673,48],{"class":47},[33,20675,20676],{"class":35,"line":4032},[33,20677,54],{"class":47},[33,20679,20680,20683,20685,20687,20689],{"class":35,"line":9199},[33,20681,20682],{"class":47},"    Person ",[33,20684,956],{"class":43},[33,20686,345],{"class":47},[33,20688,1045],{"class":76},[33,20690,4130],{"class":47},[33,20692,20693,20695,20697],{"class":35,"line":9223},[33,20694,20682],{"class":47},[33,20696,847],{"class":43},[33,20698,18766],{"class":47},[33,20700,20701,20703,20705,20708,20710,20713,20715],{"class":35,"line":9228},[33,20702,113],{"class":47},[33,20704,116],{"class":39},[33,20706,20707],{"class":119},"\"P2的年龄为：\"",[33,20709,116],{"class":39},[33,20711,20712],{"class":47},"p2.m_Age",[33,20714,116],{"class":39},[33,20716,131],{"class":47},[33,20718,20719],{"class":35,"line":9234},[33,20720,231],{"class":47},[33,20722,20723],{"class":35,"line":9261},[33,20724,20725],{"class":60},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[33,20727,20728],{"class":35,"line":9266},[33,20729,20730],{"class":60},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[33,20732,20733,20735,20738,20740,20742,20744],{"class":35,"line":9272},[33,20734,943],{"class":39},[33,20736,20737],{"class":43}," doWork",[33,20739,345],{"class":47},[33,20741,20297],{"class":43},[33,20743,622],{"class":955},[33,20745,884],{"class":47},[33,20747,20748],{"class":35,"line":9284},[33,20749,54],{"class":47},[33,20751,20752,20754,20756,20759,20761],{"class":35,"line":9296},[33,20753,314],{"class":47},[33,20755,116],{"class":39},[33,20757,20758],{"class":119}," \"doWork函数调用\"",[33,20760,2900],{"class":39},[33,20762,10091],{"class":47},[33,20764,20765],{"class":35,"line":9308},[33,20766,231],{"class":47},[33,20768,20769,20771,20773],{"class":35,"line":10967},[33,20770,943],{"class":39},[33,20772,7044],{"class":43},[33,20774,48],{"class":47},[33,20776,20777],{"class":35,"line":10992},[33,20778,54],{"class":47},[33,20780,20781],{"class":35,"line":11015},[33,20782,16564],{"class":47},[33,20784,20785,20788],{"class":35,"line":11039},[33,20786,20787],{"class":43},"    doWork",[33,20789,20790],{"class":47},"(p);\n",[33,20792,20793],{"class":35,"line":11044},[33,20794,231],{"class":47},[33,20796,20797],{"class":35,"line":11049},[33,20798,20799],{"class":60},"\u002F\u002F 3.以值方式返回局部对象\n",[33,20801,20802,20804,20807],{"class":35,"line":11054},[33,20803,20297],{"class":43},[33,20805,20806],{"class":43}," doWork2",[33,20808,48],{"class":47},[33,20810,20811],{"class":35,"line":11063},[33,20812,54],{"class":47},[33,20814,20815],{"class":35,"line":11068},[33,20816,20287],{"class":47},[33,20818,20819,20821,20823,20825,20827,20829,20831,20833,20835,20837,20839],{"class":35,"line":11074},[33,20820,113],{"class":47},[33,20822,116],{"class":39},[33,20824,345],{"class":47},[33,20826,40],{"class":39},[33,20828,303],{"class":39},[33,20830,352],{"class":47},[33,20832,1062],{"class":39},[33,20834,956],{"class":47},[33,20836,116],{"class":39},[33,20838,150],{"class":47},[33,20840,20841],{"class":60},"\u002F\u002F打印p1的地址\n",[33,20843,20844,20846,20849],{"class":35,"line":11095},[33,20845,5489],{"class":39},[33,20847,20848],{"class":47}," p1;",[33,20850,20851],{"class":60},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[33,20853,20854],{"class":35,"line":11101},[33,20855,231],{"class":47},[33,20857,20858,20860,20862],{"class":35,"line":11115},[33,20859,943],{"class":39},[33,20861,7116],{"class":43},[33,20863,48],{"class":47},[33,20865,20866],{"class":35,"line":11121},[33,20867,54],{"class":47},[33,20869,20870,20873,20875,20877],{"class":35,"line":11148},[33,20871,20872],{"class":47},"    Person p ",[33,20874,73],{"class":39},[33,20876,20806],{"class":43},[33,20878,7023],{"class":47},[33,20880,20881,20883,20885,20887,20889,20891,20893,20895,20897,20899,20901],{"class":35,"line":11157},[33,20882,113],{"class":47},[33,20884,116],{"class":39},[33,20886,345],{"class":47},[33,20888,40],{"class":39},[33,20890,303],{"class":39},[33,20892,352],{"class":47},[33,20894,1062],{"class":39},[33,20896,14],{"class":47},[33,20898,116],{"class":39},[33,20900,150],{"class":47},[33,20902,20903],{"class":60},"\u002F\u002F打印p的地址\n",[33,20905,20906],{"class":35,"line":11163},[33,20907,231],{"class":47},[33,20909,20910],{"class":35,"line":11171},[33,20911,160],{"emptyLinePlaceholder":159},[33,20913,20914],{"class":35,"line":11176},[33,20915,160],{"emptyLinePlaceholder":159},[33,20917,20918,20920,20922],{"class":35,"line":17855},[33,20919,40],{"class":39},[33,20921,44],{"class":43},[33,20923,48],{"class":47},[33,20925,20926],{"class":35,"line":17861},[33,20927,54],{"class":47},[33,20929,20930],{"class":35,"line":17884},[33,20931,20932],{"class":60},"    \u002F\u002F test01();\n",[33,20934,20935],{"class":35,"line":17890},[33,20936,20937],{"class":60},"    \u002F\u002F test02();\n",[33,20939,20940,20943],{"class":35,"line":17913},[33,20941,20942],{"class":43},"    test03",[33,20944,7023],{"class":47},[33,20946,20947],{"class":35,"line":17927},[33,20948,20949],{"class":60},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[33,20951,20952],{"class":35,"line":17947},[33,20953,20954],{"class":60},"\u002F\u002F 输出结果如下：\n",[33,20956,20957],{"class":35,"line":17953},[33,20958,20959],{"class":60},"\u002F\u002F Person的默认构造函数调用\n",[33,20961,20962],{"class":35,"line":17964},[33,20963,20964],{"class":60},"\u002F\u002F 0x7fffffffceec\n",[33,20966,20967],{"class":35,"line":17987},[33,20968,20964],{"class":60},[33,20970,20971],{"class":35,"line":18009},[33,20972,20973],{"class":60},"\u002F\u002F Person的析构函数调用\n",[33,20975,20976],{"class":35,"line":18014},[33,20977,160],{"emptyLinePlaceholder":159},[33,20979,20980],{"class":35,"line":18020},[33,20981,20982],{"class":60},"\u002F\u002F 之前的输出结果如下：\n",[33,20984,20985],{"class":35,"line":18034},[33,20986,20959],{"class":60},[33,20988,20989],{"class":35,"line":18047},[33,20990,20991],{"class":60},"\u002F\u002F 地址\n",[33,20993,20994],{"class":35,"line":18052},[33,20995,20996],{"class":60},"\u002F\u002F Person的拷贝构造函数调用\n",[33,20998,20999],{"class":35,"line":18066},[33,21000,20973],{"class":60},[33,21002,21003],{"class":35,"line":18071},[33,21004,20991],{"class":60},[33,21006,21007],{"class":35,"line":18077},[33,21008,21009],{"class":60},"\u002F\u002F (这两次输出的地址也是不同的) \n",[33,21011,21012],{"class":35,"line":18082},[33,21013,21014],{"class":60},"\u002F\u002F Person的析构函数调用     \n",[33,21016,21017,21019,21021],{"class":35,"line":18096},[33,21018,5489],{"class":39},[33,21020,5492],{"class":76},[33,21022,80],{"class":47},[33,21024,21025],{"class":35,"line":18101},[33,21026,231],{"class":47},[14,21028,21029],{},"简化版理解",[23,21031,21033],{"className":25,"code":21032,"language":27,"meta":28,"style":28},"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",[30,21034,21035,21043,21047,21053,21066,21077,21081,21093,21106,21114,21118,21134,21147,21156,21160,21165,21171,21184,21188,21192,21199,21203,21207,21212,21220,21224,21240,21253,21266,21270,21275,21283,21287,21291,21296,21301,21317,21325,21332,21338,21342,21346,21351,21359,21363,21367,21390,21397,21401,21405,21413,21417,21427,21449,21453,21457,21461,21469,21473,21478,21483,21489,21493,21503,21507,21515],{"__ignoreMap":28},[33,21036,21037,21039,21041],{"class":35,"line":36},[33,21038,15945],{"class":39},[33,21040,16820],{"class":43},[33,21042,16823],{"class":47},[33,21044,21045],{"class":35,"line":51},[33,21046,15967],{"class":39},[33,21048,21049,21051],{"class":35,"line":57},[33,21050,19770],{"class":43},[33,21052,12104],{"class":47},[33,21054,21055,21057,21059,21062,21064],{"class":35,"line":64},[33,21056,10920],{"class":47},[33,21058,116],{"class":39},[33,21060,21061],{"class":119}," \"无参构造函数!\"",[33,21063,2900],{"class":39},[33,21065,10091],{"class":47},[33,21067,21068,21071,21073,21075],{"class":35,"line":83},[33,21069,21070],{"class":47},"        mAge ",[33,21072,73],{"class":39},[33,21074,5492],{"class":76},[33,21076,80],{"class":47},[33,21078,21079],{"class":35,"line":89},[33,21080,916],{"class":47},[33,21082,21083,21085,21087,21089,21091],{"class":35,"line":98},[33,21084,19770],{"class":43},[33,21086,345],{"class":47},[33,21088,40],{"class":39},[33,21090,16940],{"class":955},[33,21092,13693],{"class":47},[33,21094,21095,21097,21099,21102,21104],{"class":35,"line":110},[33,21096,10920],{"class":47},[33,21098,116],{"class":39},[33,21100,21101],{"class":119}," \"有参构造函数!\"",[33,21103,2900],{"class":39},[33,21105,10091],{"class":47},[33,21107,21108,21110,21112],{"class":35,"line":134},[33,21109,21070],{"class":47},[33,21111,73],{"class":39},[33,21113,9048],{"class":47},[33,21115,21116],{"class":35,"line":156},[33,21117,916],{"class":47},[33,21119,21120,21122,21124,21126,21128,21130,21132],{"class":35,"line":163},[33,21121,19770],{"class":43},[33,21123,345],{"class":47},[33,21125,588],{"class":39},[33,21127,16820],{"class":43},[33,21129,1062],{"class":39},[33,21131,622],{"class":955},[33,21133,13693],{"class":47},[33,21135,21136,21138,21140,21143,21145],{"class":35,"line":169},[33,21137,10920],{"class":47},[33,21139,116],{"class":39},[33,21141,21142],{"class":119}," \"拷贝构造函数!\"",[33,21144,2900],{"class":39},[33,21146,10091],{"class":47},[33,21148,21149,21151,21153],{"class":35,"line":175},[33,21150,21070],{"class":47},[33,21152,73],{"class":39},[33,21154,21155],{"class":47}," p.mAge;\n",[33,21157,21158],{"class":35,"line":181},[33,21159,916],{"class":47},[33,21161,21162],{"class":35,"line":196},[33,21163,21164],{"class":60},"    \u002F\u002F析构函数在释放内存之前调用\n",[33,21166,21167,21169],{"class":35,"line":213},[33,21168,19803],{"class":43},[33,21170,12104],{"class":47},[33,21172,21173,21175,21177,21180,21182],{"class":35,"line":228},[33,21174,10920],{"class":47},[33,21176,116],{"class":39},[33,21178,21179],{"class":119}," \"析构函数!\"",[33,21181,2900],{"class":39},[33,21183,10091],{"class":47},[33,21185,21186],{"class":35,"line":1345},[33,21187,916],{"class":47},[33,21189,21190],{"class":35,"line":1350},[33,21191,15967],{"class":39},[33,21193,21194,21196],{"class":35,"line":1359},[33,21195,67],{"class":39},[33,21197,21198],{"class":47}," mAge;\n",[33,21200,21201],{"class":35,"line":1364},[33,21202,749],{"class":47},[33,21204,21205],{"class":35,"line":1370},[33,21206,160],{"emptyLinePlaceholder":159},[33,21208,21209],{"class":35,"line":1425},[33,21210,21211],{"class":60},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[33,21213,21214,21216,21218],{"class":35,"line":1438},[33,21215,943],{"class":39},[33,21217,6975],{"class":43},[33,21219,12104],{"class":47},[33,21221,21222],{"class":35,"line":1451},[33,21223,160],{"emptyLinePlaceholder":159},[33,21225,21226,21228,21231,21233,21235,21237],{"class":35,"line":1457},[33,21227,20682],{"class":47},[33,21229,21230],{"class":43},"man",[33,21232,345],{"class":47},[33,21234,457],{"class":76},[33,21236,7353],{"class":47},[33,21238,21239],{"class":60}," \u002F\u002Fp对象已经创建完毕\n",[33,21241,21242,21244,21247,21250],{"class":35,"line":1466},[33,21243,20682],{"class":47},[33,21245,21246],{"class":43},"newman",[33,21248,21249],{"class":47},"(man);",[33,21251,21252],{"class":60}," \u002F\u002F调用拷贝构造函数\n",[33,21254,21255,21258,21260,21263],{"class":35,"line":1471},[33,21256,21257],{"class":47},"    Person newman2 ",[33,21259,73],{"class":39},[33,21261,21262],{"class":47}," man;",[33,21264,21265],{"class":60}," \u002F\u002F拷贝构造\n",[33,21267,21268],{"class":35,"line":1477},[33,21269,160],{"emptyLinePlaceholder":159},[33,21271,21272],{"class":35,"line":1504},[33,21273,21274],{"class":60},"    \u002F\u002FPerson newman3;\n",[33,21276,21277,21280],{"class":35,"line":1509},[33,21278,21279],{"class":60},"    \u002F\u002Fnewman3 = man;",[33,21281,21282],{"class":60}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[33,21284,21285],{"class":35,"line":1525},[33,21286,231],{"class":47},[33,21288,21289],{"class":35,"line":1535},[33,21290,160],{"emptyLinePlaceholder":159},[33,21292,21293],{"class":35,"line":1540},[33,21294,21295],{"class":60},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[33,21297,21298],{"class":35,"line":4027},[33,21299,21300],{"class":60},"\u002F\u002F相当于Person p1 = p;\n",[33,21302,21303,21305,21307,21309,21311,21314],{"class":35,"line":4032},[33,21304,943],{"class":39},[33,21306,20737],{"class":43},[33,21308,345],{"class":47},[33,21310,20297],{"class":43},[33,21312,21313],{"class":955}," p1",[33,21315,21316],{"class":47},") {}\n",[33,21318,21319,21321,21323],{"class":35,"line":9199},[33,21320,943],{"class":39},[33,21322,7044],{"class":43},[33,21324,12104],{"class":47},[33,21326,21327,21329],{"class":35,"line":9223},[33,21328,19855],{"class":47},[33,21330,21331],{"class":60}," \u002F\u002F无参构造函数\n",[33,21333,21334,21336],{"class":35,"line":9228},[33,21335,20787],{"class":43},[33,21337,20790],{"class":47},[33,21339,21340],{"class":35,"line":9234},[33,21341,231],{"class":47},[33,21343,21344],{"class":35,"line":9261},[33,21345,160],{"emptyLinePlaceholder":159},[33,21347,21348],{"class":35,"line":9266},[33,21349,21350],{"class":60},"\u002F\u002F3. 以值方式返回局部对象\n",[33,21352,21353,21355,21357],{"class":35,"line":9272},[33,21354,20297],{"class":43},[33,21356,20806],{"class":43},[33,21358,48],{"class":47},[33,21360,21361],{"class":35,"line":9284},[33,21362,54],{"class":47},[33,21364,21365],{"class":35,"line":9296},[33,21366,20287],{"class":47},[33,21368,21369,21371,21373,21375,21377,21379,21381,21383,21386,21388],{"class":35,"line":9308},[33,21370,314],{"class":47},[33,21372,116],{"class":39},[33,21374,860],{"class":47},[33,21376,40],{"class":39},[33,21378,303],{"class":39},[33,21380,352],{"class":47},[33,21382,1062],{"class":39},[33,21384,21385],{"class":47},"p1 ",[33,21387,116],{"class":39},[33,21389,10091],{"class":47},[33,21391,21392,21394],{"class":35,"line":10967},[33,21393,5489],{"class":39},[33,21395,21396],{"class":47}," p1;\n",[33,21398,21399],{"class":35,"line":10992},[33,21400,231],{"class":47},[33,21402,21403],{"class":35,"line":11015},[33,21404,160],{"emptyLinePlaceholder":159},[33,21406,21407,21409,21411],{"class":35,"line":11039},[33,21408,943],{"class":39},[33,21410,7116],{"class":43},[33,21412,48],{"class":47},[33,21414,21415],{"class":35,"line":11044},[33,21416,54],{"class":47},[33,21418,21419,21421,21423,21425],{"class":35,"line":11049},[33,21420,20872],{"class":47},[33,21422,73],{"class":39},[33,21424,20806],{"class":43},[33,21426,7023],{"class":47},[33,21428,21429,21431,21433,21435,21437,21439,21441,21443,21445,21447],{"class":35,"line":11054},[33,21430,314],{"class":47},[33,21432,116],{"class":39},[33,21434,860],{"class":47},[33,21436,40],{"class":39},[33,21438,303],{"class":39},[33,21440,352],{"class":47},[33,21442,1062],{"class":39},[33,21444,12699],{"class":47},[33,21446,116],{"class":39},[33,21448,10091],{"class":47},[33,21450,21451],{"class":35,"line":11063},[33,21452,231],{"class":47},[33,21454,21455],{"class":35,"line":11068},[33,21456,160],{"emptyLinePlaceholder":159},[33,21458,21459],{"class":35,"line":11074},[33,21460,160],{"emptyLinePlaceholder":159},[33,21462,21463,21465,21467],{"class":35,"line":11095},[33,21464,40],{"class":39},[33,21466,44],{"class":43},[33,21468,12104],{"class":47},[33,21470,21471],{"class":35,"line":11101},[33,21472,160],{"emptyLinePlaceholder":159},[33,21474,21475],{"class":35,"line":11115},[33,21476,21477],{"class":60},"    \u002F\u002Ftest01();\n",[33,21479,21480],{"class":35,"line":11121},[33,21481,21482],{"class":60},"    \u002F\u002Ftest02();\n",[33,21484,21485,21487],{"class":35,"line":11148},[33,21486,20942],{"class":43},[33,21488,7023],{"class":47},[33,21490,21491],{"class":35,"line":11157},[33,21492,160],{"emptyLinePlaceholder":159},[33,21494,21495,21497,21499,21501],{"class":35,"line":11163},[33,21496,3724],{"class":43},[33,21498,345],{"class":47},[33,21500,3729],{"class":119},[33,21502,4130],{"class":47},[33,21504,21505],{"class":35,"line":11171},[33,21506,160],{"emptyLinePlaceholder":159},[33,21508,21509,21511,21513],{"class":35,"line":11176},[33,21510,5489],{"class":39},[33,21512,5492],{"class":76},[33,21514,80],{"class":47},[33,21516,21517],{"class":35,"line":17855},[33,21518,231],{"class":47},[1599,21520,21522],{"id":21521},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,21524,21525],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,21527,21528],{},"1．默认构造函数(无参，函数体为空)",[14,21530,21531],{},"2．默认析构函数(无参，函数体为空)",[14,21533,21534],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,21536,21537],{},"构造函数调用规则如下：",[561,21539,21540,21543],{},[564,21541,21542],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[564,21544,21545],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[23,21547,21549],{"className":25,"code":21548,"language":27,"meta":28,"style":28},"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",[30,21550,21551,21559,21563,21568,21574,21586,21590,21595,21607,21616,21628,21632,21636,21652,21661,21673,21677,21681,21687,21699,21703,21707,21713,21717,21721,21729,21733,21745,21750,21758,21762,21780,21784,21788,21796,21800,21805,21813,21828,21841,21845,21850,21857,21873,21886,21890,21894,21902,21906,21912,21916,21926,21930,21938],{"__ignoreMap":28},[33,21552,21553,21555,21557],{"class":35,"line":36},[33,21554,15945],{"class":39},[33,21556,16820],{"class":43},[33,21558,16823],{"class":47},[33,21560,21561],{"class":35,"line":51},[33,21562,15967],{"class":39},[33,21564,21565],{"class":35,"line":57},[33,21566,21567],{"class":60},"    \u002F\u002F无参（默认）构造函数\n",[33,21569,21570,21572],{"class":35,"line":64},[33,21571,19770],{"class":43},[33,21573,12104],{"class":47},[33,21575,21576,21578,21580,21582,21584],{"class":35,"line":83},[33,21577,10920],{"class":47},[33,21579,116],{"class":39},[33,21581,21061],{"class":119},[33,21583,2900],{"class":39},[33,21585,10091],{"class":47},[33,21587,21588],{"class":35,"line":89},[33,21589,916],{"class":47},[33,21591,21592],{"class":35,"line":98},[33,21593,21594],{"class":60},"    \u002F\u002F有参构造函数\n",[33,21596,21597,21599,21601,21603,21605],{"class":35,"line":110},[33,21598,19770],{"class":43},[33,21600,345],{"class":47},[33,21602,40],{"class":39},[33,21604,70],{"class":955},[33,21606,13693],{"class":47},[33,21608,21609,21612,21614],{"class":35,"line":134},[33,21610,21611],{"class":47},"        age ",[33,21613,73],{"class":39},[33,21615,2888],{"class":47},[33,21617,21618,21620,21622,21624,21626],{"class":35,"line":156},[33,21619,10920],{"class":47},[33,21621,116],{"class":39},[33,21623,21101],{"class":119},[33,21625,2900],{"class":39},[33,21627,10091],{"class":47},[33,21629,21630],{"class":35,"line":163},[33,21631,916],{"class":47},[33,21633,21634],{"class":35,"line":169},[33,21635,20125],{"class":60},[33,21637,21638,21640,21642,21644,21646,21648,21650],{"class":35,"line":175},[33,21639,19770],{"class":43},[33,21641,345],{"class":47},[33,21643,588],{"class":39},[33,21645,16820],{"class":43},[33,21647,1062],{"class":39},[33,21649,622],{"class":955},[33,21651,13693],{"class":47},[33,21653,21654,21656,21658],{"class":35,"line":181},[33,21655,21611],{"class":47},[33,21657,73],{"class":39},[33,21659,21660],{"class":47}," p.age;\n",[33,21662,21663,21665,21667,21669,21671],{"class":35,"line":196},[33,21664,10920],{"class":47},[33,21666,116],{"class":39},[33,21668,21142],{"class":119},[33,21670,2900],{"class":39},[33,21672,10091],{"class":47},[33,21674,21675],{"class":35,"line":213},[33,21676,916],{"class":47},[33,21678,21679],{"class":35,"line":228},[33,21680,19798],{"class":60},[33,21682,21683,21685],{"class":35,"line":1345},[33,21684,19803],{"class":43},[33,21686,12104],{"class":47},[33,21688,21689,21691,21693,21695,21697],{"class":35,"line":1350},[33,21690,10920],{"class":47},[33,21692,116],{"class":39},[33,21694,21179],{"class":119},[33,21696,2900],{"class":39},[33,21698,10091],{"class":47},[33,21700,21701],{"class":35,"line":1359},[33,21702,916],{"class":47},[33,21704,21705],{"class":35,"line":1364},[33,21706,15967],{"class":39},[33,21708,21709,21711],{"class":35,"line":1370},[33,21710,67],{"class":39},[33,21712,9048],{"class":47},[33,21714,21715],{"class":35,"line":1425},[33,21716,749],{"class":47},[33,21718,21719],{"class":35,"line":1438},[33,21720,160],{"emptyLinePlaceholder":159},[33,21722,21723,21725,21727],{"class":35,"line":1451},[33,21724,943],{"class":39},[33,21726,6975],{"class":43},[33,21728,48],{"class":47},[33,21730,21731],{"class":35,"line":1457},[33,21732,54],{"class":47},[33,21734,21735,21737,21739,21741,21743],{"class":35,"line":1466},[33,21736,20682],{"class":47},[33,21738,956],{"class":43},[33,21740,345],{"class":47},[33,21742,2250],{"class":76},[33,21744,4130],{"class":47},[33,21746,21747],{"class":35,"line":1471},[33,21748,21749],{"class":60},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[33,21751,21752,21754,21756],{"class":35,"line":1477},[33,21753,20682],{"class":47},[33,21755,847],{"class":43},[33,21757,18766],{"class":47},[33,21759,21760],{"class":35,"line":1504},[33,21761,160],{"emptyLinePlaceholder":159},[33,21763,21764,21766,21768,21771,21773,21776,21778],{"class":35,"line":1509},[33,21765,314],{"class":47},[33,21767,116],{"class":39},[33,21769,21770],{"class":119}," \"p2的年龄为： \"",[33,21772,2900],{"class":39},[33,21774,21775],{"class":47}," p2.age ",[33,21777,116],{"class":39},[33,21779,10091],{"class":47},[33,21781,21782],{"class":35,"line":1525},[33,21783,231],{"class":47},[33,21785,21786],{"class":35,"line":1535},[33,21787,160],{"emptyLinePlaceholder":159},[33,21789,21790,21792,21794],{"class":35,"line":1540},[33,21791,943],{"class":39},[33,21793,7044],{"class":43},[33,21795,48],{"class":47},[33,21797,21798],{"class":35,"line":4027},[33,21799,54],{"class":47},[33,21801,21802],{"class":35,"line":4032},[33,21803,21804],{"class":60},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[33,21806,21807,21810],{"class":35,"line":9199},[33,21808,21809],{"class":47},"    Person p1;",[33,21811,21812],{"class":60}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[33,21814,21815,21817,21819,21821,21823,21825],{"class":35,"line":9223},[33,21816,20682],{"class":47},[33,21818,847],{"class":43},[33,21820,345],{"class":47},[33,21822,77],{"class":76},[33,21824,7353],{"class":47},[33,21826,21827],{"class":60}," \u002F\u002F用户提供的有参\n",[33,21829,21830,21832,21835,21838],{"class":35,"line":9228},[33,21831,20682],{"class":47},[33,21833,21834],{"class":43},"p3",[33,21836,21837],{"class":47},"(p2);",[33,21839,21840],{"class":60}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[33,21842,21843],{"class":35,"line":9234},[33,21844,160],{"emptyLinePlaceholder":159},[33,21846,21847],{"class":35,"line":9261},[33,21848,21849],{"class":60},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[33,21851,21852,21855],{"class":35,"line":9266},[33,21853,21854],{"class":47},"    Person p4;",[33,21856,21812],{"class":60},[33,21858,21859,21861,21864,21866,21868,21870],{"class":35,"line":9272},[33,21860,20682],{"class":47},[33,21862,21863],{"class":43},"p5",[33,21865,345],{"class":47},[33,21867,77],{"class":76},[33,21869,7353],{"class":47},[33,21871,21872],{"class":60}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[33,21874,21875,21877,21880,21883],{"class":35,"line":9284},[33,21876,20682],{"class":47},[33,21878,21879],{"class":43},"p6",[33,21881,21882],{"class":47},"(p5);",[33,21884,21885],{"class":60}," \u002F\u002F用户自己提供拷贝构造\n",[33,21887,21888],{"class":35,"line":9296},[33,21889,231],{"class":47},[33,21891,21892],{"class":35,"line":9308},[33,21893,160],{"emptyLinePlaceholder":159},[33,21895,21896,21898,21900],{"class":35,"line":10967},[33,21897,40],{"class":39},[33,21899,44],{"class":43},[33,21901,12104],{"class":47},[33,21903,21904],{"class":35,"line":10992},[33,21905,160],{"emptyLinePlaceholder":159},[33,21907,21908,21910],{"class":35,"line":11015},[33,21909,7020],{"class":43},[33,21911,7023],{"class":47},[33,21913,21914],{"class":35,"line":11039},[33,21915,160],{"emptyLinePlaceholder":159},[33,21917,21918,21920,21922,21924],{"class":35,"line":11044},[33,21919,3724],{"class":43},[33,21921,345],{"class":47},[33,21923,3729],{"class":119},[33,21925,4130],{"class":47},[33,21927,21928],{"class":35,"line":11049},[33,21929,160],{"emptyLinePlaceholder":159},[33,21931,21932,21934,21936],{"class":35,"line":11054},[33,21933,5489],{"class":39},[33,21935,5492],{"class":76},[33,21937,80],{"class":47},[33,21939,21940],{"class":35,"line":11063},[33,21941,231],{"class":47},[1599,21943,21945],{"id":21944},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21947,21948],{},"浅拷贝：简单的赋值拷贝操作",[14,21950,21951],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[23,21953,21955],{"className":25,"code":21954,"language":27,"meta":28,"style":28},"#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",[30,21956,21957,21963,21973,21979,21983,21987,21992,21998,22002,22015,22019,22023,22030,22034,22044,22059,22072,22076,22081,22086,22102,22106,22119,22124,22129,22134,22143,22148,22163,22167,22171,22175,22181,22185,22190,22205,22209,22220,22234,22238,22247,22251,22257,22269,22273,22281,22285,22302,22333,22341,22369,22373,22377,22385,22389,22395],{"__ignoreMap":28},[33,21958,21959,21961],{"class":35,"line":36},[33,21960,1131],{"class":39},[33,21962,1134],{"class":119},[33,21964,21965,21967,21969,21971],{"class":35,"line":51},[33,21966,1139],{"class":39},[33,21968,1142],{"class":39},[33,21970,1145],{"class":43},[33,21972,80],{"class":47},[33,21974,21975,21977],{"class":35,"line":57},[33,21976,15945],{"class":39},[33,21978,16422],{"class":43},[33,21980,21981],{"class":35,"line":64},[33,21982,54],{"class":47},[33,21984,21985],{"class":35,"line":83},[33,21986,15967],{"class":39},[33,21988,21989],{"class":35,"line":89},[33,21990,21991],{"class":60},"    \u002F\u002F默认构造函数\n",[33,21993,21994,21996],{"class":35,"line":98},[33,21995,19770],{"class":43},[33,21997,48],{"class":47},[33,21999,22000],{"class":35,"line":110},[33,22001,889],{"class":47},[33,22003,22004,22006,22008,22011,22013],{"class":35,"line":134},[33,22005,894],{"class":47},[33,22007,116],{"class":39},[33,22009,22010],{"class":119},"\"默认构造函数\"",[33,22012,116],{"class":39},[33,22014,131],{"class":47},[33,22016,22017],{"class":35,"line":156},[33,22018,916],{"class":47},[33,22020,22021],{"class":35,"line":163},[33,22022,21594],{"class":60},[33,22024,22025,22027],{"class":35,"line":169},[33,22026,19803],{"class":43},[33,22028,22029],{"class":47},"(int age,int height)\n",[33,22031,22032],{"class":35,"line":175},[33,22033,889],{"class":47},[33,22035,22036,22039,22041],{"class":35,"line":181},[33,22037,22038],{"class":47},"        m_Age",[33,22040,73],{"class":39},[33,22042,22043],{"class":47},"age;\n",[33,22045,22046,22049,22051,22053,22056],{"class":35,"line":196},[33,22047,22048],{"class":47},"        m_Height",[33,22050,12968],{"class":39},[33,22052,591],{"class":39},[33,22054,22055],{"class":47},"(height);",[33,22057,22058],{"class":60},"\u002F\u002F放到堆区\n",[33,22060,22061,22063,22065,22068,22070],{"class":35,"line":213},[33,22062,894],{"class":47},[33,22064,116],{"class":39},[33,22066,22067],{"class":119},"\"有参构造函数\"",[33,22069,116],{"class":39},[33,22071,131],{"class":47},[33,22073,22074],{"class":35,"line":228},[33,22075,916],{"class":47},[33,22077,22078],{"class":35,"line":1345},[33,22079,22080],{"class":60},"    \u002F\u002F深拷贝解决上述问题\n",[33,22082,22083],{"class":35,"line":1350},[33,22084,22085],{"class":60},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[33,22087,22088,22090,22092,22094,22096,22098,22100],{"class":35,"line":1359},[33,22089,19770],{"class":43},[33,22091,345],{"class":47},[33,22093,588],{"class":39},[33,22095,16820],{"class":43},[33,22097,11835],{"class":39},[33,22099,14],{"class":955},[33,22101,884],{"class":47},[33,22103,22104],{"class":35,"line":1364},[33,22105,889],{"class":47},[33,22107,22108,22110,22112,22115,22117],{"class":35,"line":1370},[33,22109,894],{"class":47},[33,22111,116],{"class":39},[33,22113,22114],{"class":119},"\"拷贝构造函数\"",[33,22116,116],{"class":39},[33,22118,131],{"class":47},[33,22120,22121],{"class":35,"line":1425},[33,22122,22123],{"class":60},"        \u002F\u002F编译器默认的写如下注释部分\n",[33,22125,22126],{"class":35,"line":1438},[33,22127,22128],{"class":60},"        \u002F\u002Fm_Age=p.m_Age;\n",[33,22130,22131],{"class":35,"line":1451},[33,22132,22133],{"class":60},"        \u002F\u002Fm_Height=p.m_Height;\n",[33,22135,22136,22138,22140],{"class":35,"line":1457},[33,22137,22038],{"class":47},[33,22139,73],{"class":39},[33,22141,22142],{"class":47},"p.m_Age;\n",[33,22144,22145],{"class":35,"line":1466},[33,22146,22147],{"class":60},"        \u002F\u002F深拷贝操作\n",[33,22149,22150,22152,22154,22156,22158,22160],{"class":35,"line":1471},[33,22151,22048],{"class":47},[33,22153,12968],{"class":39},[33,22155,591],{"class":39},[33,22157,345],{"class":47},[33,22159,2057],{"class":39},[33,22161,22162],{"class":47},"p.m_Height);\n",[33,22164,22165],{"class":35,"line":1477},[33,22166,916],{"class":47},[33,22168,22169],{"class":35,"line":1504},[33,22170,160],{"emptyLinePlaceholder":159},[33,22172,22173],{"class":35,"line":1509},[33,22174,19798],{"class":60},[33,22176,22177,22179],{"class":35,"line":1525},[33,22178,19803],{"class":43},[33,22180,48],{"class":47},[33,22182,22183],{"class":35,"line":1535},[33,22184,889],{"class":47},[33,22186,22187],{"class":35,"line":1540},[33,22188,22189],{"class":60},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[33,22191,22192,22194,22197,22200,22203],{"class":35,"line":4027},[33,22193,3915],{"class":39},[33,22195,22196],{"class":47},"(m_Height ",[33,22198,22199],{"class":39},"!=",[33,22201,22202],{"class":76}," NULL",[33,22204,884],{"class":47},[33,22206,22207],{"class":35,"line":4032},[33,22208,1254],{"class":47},[33,22210,22211,22214,22217],{"class":35,"line":9199},[33,22212,22213],{"class":39},"            delete",[33,22215,22216],{"class":47}," m_Height;",[33,22218,22219],{"class":60}," \u002F\u002F释放堆区内存\n",[33,22221,22222,22225,22227,22229,22231],{"class":35,"line":9223},[33,22223,22224],{"class":47},"            m_Height",[33,22226,73],{"class":39},[33,22228,439],{"class":76},[33,22230,460],{"class":47},[33,22232,22233],{"class":60}," \u002F\u002F防止野指针\n",[33,22235,22236],{"class":35,"line":9228},[33,22237,1334],{"class":47},[33,22239,22240,22242,22244],{"class":35,"line":9234},[33,22241,894],{"class":47},[33,22243,116],{"class":39},[33,22245,22246],{"class":119},"\"Person的析构函数调用\"\n",[33,22248,22249],{"class":35,"line":9261},[33,22250,916],{"class":47},[33,22252,22253,22255],{"class":35,"line":9266},[33,22254,67],{"class":39},[33,22256,16917],{"class":47},[33,22258,22259,22261,22263,22266],{"class":35,"line":9272},[33,22260,67],{"class":39},[33,22262,303],{"class":39},[33,22264,22265],{"class":47},"m_Height;",[33,22267,22268],{"class":60}," \u002F\u002F定义一个指针，指向身高\n",[33,22270,22271],{"class":35,"line":9284},[33,22272,749],{"class":47},[33,22274,22275,22277,22279],{"class":35,"line":9296},[33,22276,943],{"class":39},[33,22278,6975],{"class":43},[33,22280,48],{"class":47},[33,22282,22283],{"class":35,"line":9308},[33,22284,54],{"class":47},[33,22286,22287,22289,22291,22293,22295,22297,22300],{"class":35,"line":10967},[33,22288,20682],{"class":47},[33,22290,956],{"class":43},[33,22292,345],{"class":47},[33,22294,2250],{"class":76},[33,22296,704],{"class":47},[33,22298,22299],{"class":76},"160",[33,22301,4130],{"class":47},[33,22303,22304,22306,22308,22311,22313,22316,22318,22321,22323,22326,22328,22330],{"class":35,"line":10992},[33,22305,113],{"class":47},[33,22307,116],{"class":39},[33,22309,22310],{"class":119},"\"p1的年龄为:\"",[33,22312,116],{"class":39},[33,22314,22315],{"class":47},"p1.m_Age",[33,22317,116],{"class":39},[33,22319,22320],{"class":119},"\"身高为：\"",[33,22322,201],{"class":39},[33,22324,22325],{"class":47},"p1.m_Height",[33,22327,116],{"class":39},[33,22329,150],{"class":47},[33,22331,22332],{"class":60},"  \u002F\u002F18\n",[33,22334,22335,22337,22339],{"class":35,"line":11015},[33,22336,20682],{"class":47},[33,22338,847],{"class":43},[33,22340,18766],{"class":47},[33,22342,22343,22345,22347,22350,22352,22354,22356,22358,22360,22363,22365,22367],{"class":35,"line":11039},[33,22344,113],{"class":47},[33,22346,116],{"class":39},[33,22348,22349],{"class":119},"\"p2的年龄为：\"",[33,22351,116],{"class":39},[33,22353,20712],{"class":47},[33,22355,116],{"class":39},[33,22357,22320],{"class":119},[33,22359,201],{"class":39},[33,22361,22362],{"class":47},"p2.m_Height",[33,22364,116],{"class":39},[33,22366,150],{"class":47},[33,22368,22332],{"class":60},[33,22370,22371],{"class":35,"line":11044},[33,22372,14461],{"class":47},[33,22374,22375],{"class":35,"line":11049},[33,22376,231],{"class":47},[33,22378,22379,22381,22383],{"class":35,"line":11054},[33,22380,40],{"class":39},[33,22382,44],{"class":43},[33,22384,48],{"class":47},[33,22386,22387],{"class":35,"line":11063},[33,22388,54],{"class":47},[33,22390,22391,22393],{"class":35,"line":11068},[33,22392,7020],{"class":43},[33,22394,7023],{"class":47},[33,22396,22397],{"class":35,"line":11074},[33,22398,231],{"class":47},[14,22400,22401],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,22403,22404],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,22406,22407],{},[2918,22408],{"alt":28,"src":22409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,22411,22412],{},"浅拷贝问题要使用深拷贝来解决",[14,22414,22415],{},[2918,22416],{"alt":28,"src":22417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,22419,22420],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[1599,22422,22424],{"id":22423},"_826初始化列表","8.2.6初始化列表",[14,22426,22427],{},"作用：初始化属性",[14,22429,6572],{},[23,22431,22434],{"className":22432,"code":22433,"language":6578},[6576],"构造函数():属性1(值1),属性2(值2).....{}\n",[30,22435,22433],{"__ignoreMap":28},[14,22437,22438],{},"例子",[23,22440,22442],{"className":25,"code":22441,"language":27,"meta":28,"style":28},"#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",[30,22443,22444,22450,22460,22466,22470,22475,22479,22484,22489,22494,22499,22504,22509,22513,22518,22523,22566,22575,22593,22611,22629,22633,22637,22644,22651,22658,22662,22666,22674,22678,22682,22702,22711,22715,22719,22729,22733,22741],{"__ignoreMap":28},[33,22445,22446,22448],{"class":35,"line":36},[33,22447,1131],{"class":39},[33,22449,1134],{"class":119},[33,22451,22452,22454,22456,22458],{"class":35,"line":51},[33,22453,1139],{"class":39},[33,22455,1142],{"class":39},[33,22457,1145],{"class":43},[33,22459,80],{"class":47},[33,22461,22462,22464],{"class":35,"line":57},[33,22463,15945],{"class":39},[33,22465,16422],{"class":43},[33,22467,22468],{"class":35,"line":64},[33,22469,54],{"class":47},[33,22471,22472],{"class":35,"line":83},[33,22473,22474],{"class":39},"    public:\n",[33,22476,22477],{"class":35,"line":89},[33,22478,160],{"emptyLinePlaceholder":159},[33,22480,22481],{"class":35,"line":98},[33,22482,22483],{"class":60},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[33,22485,22486],{"class":35,"line":110},[33,22487,22488],{"class":60},"    \u002F\u002FPerson(int a, int b, int c) {\n",[33,22490,22491],{"class":35,"line":134},[33,22492,22493],{"class":60},"    \u002F\u002F  m_A = a;\n",[33,22495,22496],{"class":35,"line":156},[33,22497,22498],{"class":60},"    \u002F\u002F  m_B = b;\n",[33,22500,22501],{"class":35,"line":163},[33,22502,22503],{"class":60},"    \u002F\u002F  m_C = c;\n",[33,22505,22506],{"class":35,"line":169},[33,22507,22508],{"class":60},"    \u002F\u002F}\n",[33,22510,22511],{"class":35,"line":175},[33,22512,160],{"emptyLinePlaceholder":159},[33,22514,22515],{"class":35,"line":181},[33,22516,22517],{"class":60},"    \u002F\u002F初始化列表方式初始化\n",[33,22519,22520],{"class":35,"line":196},[33,22521,22522],{"class":60},"    \u002F\u002F使用有参构造函数\n",[33,22524,22525,22527,22529,22531,22533,22535,22537,22539,22541,22543,22545,22548,22551,22554,22557,22560,22563],{"class":35,"line":213},[33,22526,19770],{"class":43},[33,22528,345],{"class":47},[33,22530,40],{"class":39},[33,22532,70],{"class":955},[33,22534,13686],{"class":47},[33,22536,40],{"class":39},[33,22538,1040],{"class":955},[33,22540,13686],{"class":47},[33,22542,40],{"class":39},[33,22544,4259],{"class":955},[33,22546,22547],{"class":47},") :",[33,22549,22550],{"class":43},"m_A",[33,22552,22553],{"class":47},"(a), ",[33,22555,22556],{"class":43},"m_B",[33,22558,22559],{"class":47},"(b), ",[33,22561,22562],{"class":43},"m_C",[33,22564,22565],{"class":47},"(c) {}\n",[33,22567,22568,22570,22573],{"class":35,"line":228},[33,22569,16160],{"class":39},[33,22571,22572],{"class":43}," PrintPerson",[33,22574,12104],{"class":47},[33,22576,22577,22579,22581,22584,22586,22589,22591],{"class":35,"line":1345},[33,22578,10920],{"class":47},[33,22580,116],{"class":39},[33,22582,22583],{"class":119}," \"mA:\"",[33,22585,2900],{"class":39},[33,22587,22588],{"class":47}," m_A ",[33,22590,116],{"class":39},[33,22592,10091],{"class":47},[33,22594,22595,22597,22599,22602,22604,22607,22609],{"class":35,"line":1350},[33,22596,10920],{"class":47},[33,22598,116],{"class":39},[33,22600,22601],{"class":119}," \"mB:\"",[33,22603,2900],{"class":39},[33,22605,22606],{"class":47}," m_B ",[33,22608,116],{"class":39},[33,22610,10091],{"class":47},[33,22612,22613,22615,22617,22620,22622,22625,22627],{"class":35,"line":1359},[33,22614,10920],{"class":47},[33,22616,116],{"class":39},[33,22618,22619],{"class":119}," \"mC:\"",[33,22621,2900],{"class":39},[33,22623,22624],{"class":47}," m_C ",[33,22626,116],{"class":39},[33,22628,10091],{"class":47},[33,22630,22631],{"class":35,"line":1364},[33,22632,916],{"class":47},[33,22634,22635],{"class":35,"line":1370},[33,22636,16473],{"class":39},[33,22638,22639,22641],{"class":35,"line":1425},[33,22640,67],{"class":39},[33,22642,22643],{"class":47}," m_A;\n",[33,22645,22646,22648],{"class":35,"line":1438},[33,22647,67],{"class":39},[33,22649,22650],{"class":47}," m_B;\n",[33,22652,22653,22655],{"class":35,"line":1451},[33,22654,67],{"class":39},[33,22656,22657],{"class":47}," m_C;\n",[33,22659,22660],{"class":35,"line":1457},[33,22661,749],{"class":47},[33,22663,22664],{"class":35,"line":1466},[33,22665,160],{"emptyLinePlaceholder":159},[33,22667,22668,22670,22672],{"class":35,"line":1471},[33,22669,40],{"class":39},[33,22671,44],{"class":43},[33,22673,7365],{"class":47},[33,22675,22676],{"class":35,"line":1477},[33,22677,54],{"class":47},[33,22679,22680],{"class":35,"line":1504},[33,22681,160],{"emptyLinePlaceholder":159},[33,22683,22684,22686,22688,22690,22692,22694,22696,22698,22700],{"class":35,"line":1509},[33,22685,20682],{"class":47},[33,22687,14],{"class":43},[33,22689,345],{"class":47},[33,22691,701],{"class":76},[33,22693,13686],{"class":47},[33,22695,707],{"class":76},[33,22697,13686],{"class":47},[33,22699,712],{"class":76},[33,22701,4130],{"class":47},[33,22703,22704,22706,22709],{"class":35,"line":1525},[33,22705,17117],{"class":47},[33,22707,22708],{"class":43},"PrintPerson",[33,22710,7023],{"class":47},[33,22712,22713],{"class":35,"line":1535},[33,22714,160],{"emptyLinePlaceholder":159},[33,22716,22717],{"class":35,"line":1540},[33,22718,160],{"emptyLinePlaceholder":159},[33,22720,22721,22723,22725,22727],{"class":35,"line":4027},[33,22722,3724],{"class":43},[33,22724,345],{"class":47},[33,22726,3729],{"class":119},[33,22728,4130],{"class":47},[33,22730,22731],{"class":35,"line":4032},[33,22732,160],{"emptyLinePlaceholder":159},[33,22734,22735,22737,22739],{"class":35,"line":9199},[33,22736,5489],{"class":39},[33,22738,5492],{"class":76},[33,22740,80],{"class":47},[33,22742,22743],{"class":35,"line":9223},[33,22744,231],{"class":47},[14,22746,22747,22748,22751,22752],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[480,22749,22750],{},"参数名就是定义的对象属性","，",[480,22753,22754],{},"属性后面的值为有参构造函数的形参",[23,22756,22758],{"className":25,"code":22757,"language":27,"meta":28,"style":28},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[30,22759,22760],{"__ignoreMap":28},[33,22761,22762,22764,22766,22768,22771,22773,22776,22778,22781,22783,22786,22788,22791,22793],{"class":35,"line":36},[33,22763,20297],{"class":43},[33,22765,345],{"class":47},[33,22767,40],{"class":39},[33,22769,22770],{"class":47}," a.",[33,22772,40],{"class":39},[33,22774,22775],{"class":47}," b,",[33,22777,40],{"class":39},[33,22779,22780],{"class":47}," b):",[33,22782,22550],{"class":43},[33,22784,22785],{"class":47},"(a),",[33,22787,22556],{"class":43},[33,22789,22790],{"class":47},"(c),",[33,22792,22562],{"class":43},[33,22794,22795],{"class":47},"(b) {}\n",[1599,22797,22799],{"id":22798},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,22801,22802],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,22804,15884],{},[23,22806,22808],{"className":25,"code":22807,"language":27,"meta":28,"style":28},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[30,22809,22810,22815,22820,22824,22829,22833],{"__ignoreMap":28},[33,22811,22812],{"class":35,"line":36},[33,22813,22814],{"class":47},"A{};\n",[33,22816,22817],{"class":35,"line":51},[33,22818,22819],{"class":47},"B\n",[33,22821,22822],{"class":35,"line":57},[33,22823,54],{"class":47},[33,22825,22826],{"class":35,"line":64},[33,22827,22828],{"class":47},"    A a;\n",[33,22830,22831],{"class":35,"line":83},[33,22832,231],{"class":47},[33,22834,22835],{"class":35,"line":89},[33,22836,22837],{"class":60},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,22839,22840],{},"案例",[23,22842,22844],{"className":25,"code":22843,"language":27,"meta":28,"style":28},"\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",[30,22845,22846,22851,22858,22862,22867,22872,22886,22890,22900,22911,22915,22922,22926,22939,22943,22948,22953,22957,22963,22967,22971,22975,23006,23010,23021,23025,23031,23035,23048,23052,23056,23060,23065,23070,23074,23082,23086,23103,23122,23126,23134,23138,23144],{"__ignoreMap":28},[33,22847,22848],{"class":35,"line":36},[33,22849,22850],{"class":60},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[33,22852,22853,22855],{"class":35,"line":51},[33,22854,15945],{"class":39},[33,22856,22857],{"class":43}," Phone\n",[33,22859,22860],{"class":35,"line":57},[33,22861,54],{"class":47},[33,22863,22864],{"class":35,"line":64},[33,22865,22866],{"class":47},"public：\n",[33,22868,22869],{"class":35,"line":83},[33,22870,22871],{"class":60},"    \u002F\u002F 赋值(构造函数)\n",[33,22873,22874,22877,22879,22881,22884],{"class":35,"line":89},[33,22875,22876],{"class":43},"    Phone",[33,22878,345],{"class":47},[33,22880,16168],{"class":43},[33,22882,22883],{"class":955}," pName",[33,22885,884],{"class":47},[33,22887,22888],{"class":35,"line":98},[33,22889,889],{"class":47},[33,22891,22892,22895,22897],{"class":35,"line":110},[33,22893,22894],{"class":47},"        m_pName",[33,22896,73],{"class":39},[33,22898,22899],{"class":47},"pName;\n",[33,22901,22902,22904,22906,22909],{"class":35,"line":134},[33,22903,894],{"class":47},[33,22905,116],{"class":39},[33,22907,22908],{"class":119},"\"Phone的构造函数调用\"",[33,22910,80],{"class":47},[33,22912,22913],{"class":35,"line":156},[33,22914,916],{"class":47},[33,22916,22917,22920],{"class":35,"line":163},[33,22918,22919],{"class":43},"    ~Phone",[33,22921,48],{"class":47},[33,22923,22924],{"class":35,"line":169},[33,22925,889],{"class":47},[33,22927,22928,22930,22932,22935,22937],{"class":35,"line":175},[33,22929,894],{"class":47},[33,22931,116],{"class":39},[33,22933,22934],{"class":119},"\"Phone析构函数调用\"",[33,22936,116],{"class":39},[33,22938,131],{"class":47},[33,22940,22941],{"class":35,"line":181},[33,22942,916],{"class":47},[33,22944,22945],{"class":35,"line":196},[33,22946,22947],{"class":60},"    \u002F\u002F\n",[33,22949,22950],{"class":35,"line":213},[33,22951,22952],{"class":47},"    string m_PName;\n",[33,22954,22955],{"class":35,"line":228},[33,22956,749],{"class":47},[33,22958,22959,22961],{"class":35,"line":1345},[33,22960,15945],{"class":39},[33,22962,16422],{"class":43},[33,22964,22965],{"class":35,"line":1350},[33,22966,54],{"class":47},[33,22968,22969],{"class":35,"line":1359},[33,22970,15967],{"class":39},[33,22972,22973],{"class":35,"line":1364},[33,22974,18245],{"class":60},[33,22976,22977,22979,22981,22983,22985,22987,22989,22992,22995,22997,23000,23003],{"class":35,"line":1370},[33,22978,19770],{"class":43},[33,22980,345],{"class":47},[33,22982,16168],{"class":43},[33,22984,16171],{"class":955},[33,22986,704],{"class":47},[33,22988,16168],{"class":43},[33,22990,22991],{"class":955}," pname",[33,22993,22994],{"class":47},"):",[33,22996,16261],{"class":43},[33,22998,22999],{"class":47},"(name),m_phone.",[33,23001,23002],{"class":43},"m_PName",[33,23004,23005],{"class":47},"(pname) \n",[33,23007,23008],{"class":35,"line":1425},[33,23009,889],{"class":47},[33,23011,23012,23014,23016,23019],{"class":35,"line":1438},[33,23013,894],{"class":47},[33,23015,116],{"class":39},[33,23017,23018],{"class":119},"\"Person的构造函数调用\"",[33,23020,80],{"class":47},[33,23022,23023],{"class":35,"line":1451},[33,23024,916],{"class":47},[33,23026,23027,23029],{"class":35,"line":1457},[33,23028,19803],{"class":43},[33,23030,48],{"class":47},[33,23032,23033],{"class":35,"line":1466},[33,23034,889],{"class":47},[33,23036,23037,23039,23041,23044,23046],{"class":35,"line":1471},[33,23038,894],{"class":47},[33,23040,116],{"class":39},[33,23042,23043],{"class":119},"\"Person析构函数调用\"",[33,23045,116],{"class":39},[33,23047,131],{"class":47},[33,23049,23050],{"class":35,"line":1477},[33,23051,916],{"class":47},[33,23053,23054],{"class":35,"line":1504},[33,23055,9031],{"class":60},[33,23057,23058],{"class":35,"line":1509},[33,23059,16143],{"class":47},[33,23061,23062],{"class":35,"line":1525},[33,23063,23064],{"class":60},"    \u002F\u002F手机\n",[33,23066,23067],{"class":35,"line":1535},[33,23068,23069],{"class":47},"    Phone m_Phone;\n",[33,23071,23072],{"class":35,"line":1540},[33,23073,749],{"class":47},[33,23075,23076,23078,23080],{"class":35,"line":4027},[33,23077,943],{"class":39},[33,23079,6975],{"class":43},[33,23081,48],{"class":47},[33,23083,23084],{"class":35,"line":4032},[33,23085,54],{"class":47},[33,23087,23088,23090,23092,23094,23096,23098,23101],{"class":35,"line":9199},[33,23089,20682],{"class":47},[33,23091,14],{"class":43},[33,23093,345],{"class":47},[33,23095,9167],{"class":119},[33,23097,704],{"class":47},[33,23099,23100],{"class":119},"\"安卓\"",[33,23102,4130],{"class":47},[33,23104,23105,23107,23109,23112,23114,23117,23119],{"class":35,"line":9223},[33,23106,113],{"class":47},[33,23108,116],{"class":39},[33,23110,23111],{"class":47},"p.Name",[33,23113,116],{"class":39},[33,23115,23116],{"class":119},"\"拿着：\"",[33,23118,116],{"class":39},[33,23120,23121],{"class":47},"p.m_phone.m_PName;\n",[33,23123,23124],{"class":35,"line":9228},[33,23125,231],{"class":47},[33,23127,23128,23130,23132],{"class":35,"line":9234},[33,23129,40],{"class":39},[33,23131,44],{"class":43},[33,23133,48],{"class":47},[33,23135,23136],{"class":35,"line":9261},[33,23137,54],{"class":47},[33,23139,23140,23142],{"class":35,"line":9266},[33,23141,7020],{"class":43},[33,23143,7023],{"class":47},[33,23145,23146],{"class":35,"line":9272},[33,23147,231],{"class":47},[14,23149,10276],{},[23,23151,23153],{"className":25,"code":23152,"language":27,"meta":28,"style":28},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[30,23154,23155,23160],{"__ignoreMap":28},[33,23156,23157],{"class":35,"line":36},[33,23158,23159],{"class":60},"    \u002F\u002F不需要写这个：\n",[33,23161,23162],{"class":35,"line":51},[33,23163,23164],{"class":60},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,23166,23167],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[23,23169,23171],{"className":25,"code":23170,"language":27,"meta":28,"style":28},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[30,23172,23173],{"__ignoreMap":28},[33,23174,23175,23177,23180,23182,23185,23188],{"class":35,"line":36},[33,23176,20297],{"class":43},[33,23178,23179],{"class":47},"(string name.string pname):",[33,23181,16261],{"class":43},[33,23183,23184],{"class":47},"(name),",[33,23186,23187],{"class":43},"m_phone",[33,23189,23190],{"class":47},"(pname) {}\n",[14,23192,23193,23194,73,23197],{},"采用的是隐式转换法，实际为如下：\n",[30,23195,23196],{},"m_phone(pname)",[30,23198,23199],{},"Phone m_phone=pname",[14,23201,23202,23205],{},[480,23203,23204],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,23207,23208],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[1599,23210,23212],{"id":23211},"_828静态对象","8.2.8静态对象",[14,23214,23215],{},"静态对象在成员对象前static，称为静态对象",[14,23217,23218],{},"静态对象分为两类：",[574,23220,23221],{},[564,23222,23223],{},"静态成员变量",[561,23225,23226,23229,23232],{},[564,23227,23228],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[564,23230,23231],{},"②在编译阶段分配内存",[564,23233,23234],{},"③类内声明，类外初始化",[574,23236,23237],{"start":51},[564,23238,23239],{},"静态成员函数",[561,23241,23242,23245],{},[564,23243,23244],{},"①所有对象共享同一个函数",[564,23246,23247],{},"②静态成员函数只能访问静态成员变量",[23249,23250,23252],"h4",{"id":23251},"_8281静态成员变量","8.2.8.1静态成员变量",[23,23254,23256],{"className":25,"code":23255,"language":27,"meta":28,"style":28},"#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",[30,23257,23258,23264,23274,23280,23284,23288,23293,23298,23303,23311,23315,23319,23323,23331,23335,23339,23344,23357,23361,23369,23373,23379],{"__ignoreMap":28},[33,23259,23260,23262],{"class":35,"line":36},[33,23261,1131],{"class":39},[33,23263,1134],{"class":119},[33,23265,23266,23268,23270,23272],{"class":35,"line":51},[33,23267,1139],{"class":39},[33,23269,1142],{"class":39},[33,23271,1145],{"class":43},[33,23273,80],{"class":47},[33,23275,23276,23278],{"class":35,"line":57},[33,23277,15945],{"class":39},[33,23279,16422],{"class":43},[33,23281,23282],{"class":35,"line":64},[33,23283,54],{"class":47},[33,23285,23286],{"class":35,"line":83},[33,23287,15967],{"class":39},[33,23289,23290],{"class":35,"line":89},[33,23291,23292],{"class":60},"    \u002F\u002F非静态成员变量\n",[33,23294,23295],{"class":35,"line":98},[33,23296,23297],{"class":60},"    \u002F\u002F int m_A;\n",[33,23299,23300],{"class":35,"line":110},[33,23301,23302],{"class":60},"    \u002F\u002F定义静态成员变量\n",[33,23304,23305,23307,23309],{"class":35,"line":134},[33,23306,12271],{"class":39},[33,23308,591],{"class":39},[33,23310,22643],{"class":47},[33,23312,23313],{"class":35,"line":156},[33,23314,160],{"emptyLinePlaceholder":159},[33,23316,23317],{"class":35,"line":163},[33,23318,160],{"emptyLinePlaceholder":159},[33,23320,23321],{"class":35,"line":169},[33,23322,749],{"class":47},[33,23324,23325,23327,23329],{"class":35,"line":175},[33,23326,943],{"class":39},[33,23328,6975],{"class":43},[33,23330,48],{"class":47},[33,23332,23333],{"class":35,"line":181},[33,23334,54],{"class":47},[33,23336,23337],{"class":35,"line":196},[33,23338,16564],{"class":47},[33,23340,23341],{"class":35,"line":213},[33,23342,23343],{"class":60},"    \u002F\u002F输出类成员变量这块内存\n",[33,23345,23346,23348,23350,23353,23355],{"class":35,"line":228},[33,23347,113],{"class":47},[33,23349,116],{"class":39},[33,23351,23352],{"class":47},"p.m_A",[33,23354,116],{"class":39},[33,23356,131],{"class":47},[33,23358,23359],{"class":35,"line":1345},[33,23360,231],{"class":47},[33,23362,23363,23365,23367],{"class":35,"line":1350},[33,23364,40],{"class":39},[33,23366,44],{"class":43},[33,23368,48],{"class":47},[33,23370,23371],{"class":35,"line":1359},[33,23372,54],{"class":47},[33,23374,23375,23377],{"class":35,"line":1364},[33,23376,7020],{"class":43},[33,23378,48],{"class":47},[33,23380,23381],{"class":35,"line":1370},[33,23382,231],{"class":47},[14,23384,23385],{},"此时输出是报错的：无法解析外部命令",[14,23387,23388],{},"解决这一问题：必须用到类内声明，类外初始化操作",[23,23390,23392],{"className":25,"code":23391,"language":27,"meta":28,"style":28},"#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",[30,23393,23394,23400,23410,23416,23420,23424,23429,23437,23441,23446,23461,23469,23473,23477,23482,23487,23499,23504,23515,23520,23525,23538,23542,23550,23554,23560],{"__ignoreMap":28},[33,23395,23396,23398],{"class":35,"line":36},[33,23397,1131],{"class":39},[33,23399,1134],{"class":119},[33,23401,23402,23404,23406,23408],{"class":35,"line":51},[33,23403,1139],{"class":39},[33,23405,1142],{"class":39},[33,23407,1145],{"class":43},[33,23409,80],{"class":47},[33,23411,23412,23414],{"class":35,"line":57},[33,23413,15945],{"class":39},[33,23415,16422],{"class":43},[33,23417,23418],{"class":35,"line":64},[33,23419,54],{"class":47},[33,23421,23422],{"class":35,"line":83},[33,23423,15967],{"class":39},[33,23425,23426],{"class":35,"line":89},[33,23427,23428],{"class":60},"    \u002F\u002F类内声明\n",[33,23430,23431,23433,23435],{"class":35,"line":98},[33,23432,12271],{"class":39},[33,23434,591],{"class":39},[33,23436,22643],{"class":47},[33,23438,23439],{"class":35,"line":110},[33,23440,749],{"class":47},[33,23442,23443],{"class":35,"line":134},[33,23444,23445],{"class":60},"\u002F\u002F类外初始化\n",[33,23447,23448,23450,23452,23455,23457,23459],{"class":35,"line":156},[33,23449,40],{"class":39},[33,23451,16820],{"class":43},[33,23453,23454],{"class":47},"::m_A",[33,23456,73],{"class":39},[33,23458,77],{"class":76},[33,23460,80],{"class":47},[33,23462,23463,23465,23467],{"class":35,"line":163},[33,23464,943],{"class":39},[33,23466,6975],{"class":43},[33,23468,48],{"class":47},[33,23470,23471],{"class":35,"line":169},[33,23472,54],{"class":47},[33,23474,23475],{"class":35,"line":175},[33,23476,16564],{"class":47},[33,23478,23479],{"class":35,"line":181},[33,23480,23481],{"class":60},"    \u002F\u002F访问变量的原内存空间\n",[33,23483,23484],{"class":35,"line":196},[33,23485,23486],{"class":60},"    \u002F\u002F100\n",[33,23488,23489,23491,23493,23495,23497],{"class":35,"line":213},[33,23490,113],{"class":47},[33,23492,116],{"class":39},[33,23494,23352],{"class":47},[33,23496,116],{"class":39},[33,23498,131],{"class":47},[33,23500,23501],{"class":35,"line":228},[33,23502,23503],{"class":47},"    Person p2;\n",[33,23505,23506,23509,23511,23513],{"class":35,"line":1345},[33,23507,23508],{"class":47},"    p2.m_A",[33,23510,73],{"class":39},[33,23512,3163],{"class":76},[33,23514,80],{"class":47},[33,23516,23517],{"class":35,"line":1350},[33,23518,23519],{"class":60},"    \u002F\u002F继续访问这片空间\n",[33,23521,23522],{"class":35,"line":1359},[33,23523,23524],{"class":60},"    \u002F\u002F200\n",[33,23526,23527,23529,23531,23534,23536],{"class":35,"line":1364},[33,23528,113],{"class":47},[33,23530,116],{"class":39},[33,23532,23533],{"class":47},"p2.m_A",[33,23535,116],{"class":39},[33,23537,131],{"class":47},[33,23539,23540],{"class":35,"line":1370},[33,23541,231],{"class":47},[33,23543,23544,23546,23548],{"class":35,"line":1425},[33,23545,40],{"class":39},[33,23547,44],{"class":43},[33,23549,48],{"class":47},[33,23551,23552],{"class":35,"line":1438},[33,23553,54],{"class":47},[33,23555,23556,23558],{"class":35,"line":1451},[33,23557,7020],{"class":43},[33,23559,7023],{"class":47},[33,23561,23562],{"class":35,"line":1457},[33,23563,231],{"class":47},[14,23565,23566],{},[480,23567,23568],{},"静态变量的访问",[23,23570,23572],{"className":25,"code":23571,"language":27,"meta":28,"style":28},"#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",[30,23573,23574,23580,23590,23596,23600,23604,23608,23616,23620,23625,23633,23637,23641,23655,23670,23678,23682,23687,23692,23697,23702,23714,23719,23724,23738,23755,23759,23767,23771,23777],{"__ignoreMap":28},[33,23575,23576,23578],{"class":35,"line":36},[33,23577,1131],{"class":39},[33,23579,1134],{"class":119},[33,23581,23582,23584,23586,23588],{"class":35,"line":51},[33,23583,1139],{"class":39},[33,23585,1142],{"class":39},[33,23587,1145],{"class":43},[33,23589,80],{"class":47},[33,23591,23592,23594],{"class":35,"line":57},[33,23593,15945],{"class":39},[33,23595,16422],{"class":43},[33,23597,23598],{"class":35,"line":64},[33,23599,54],{"class":47},[33,23601,23602],{"class":35,"line":83},[33,23603,15967],{"class":39},[33,23605,23606],{"class":35,"line":89},[33,23607,23428],{"class":60},[33,23609,23610,23612,23614],{"class":35,"line":98},[33,23611,12271],{"class":39},[33,23613,591],{"class":39},[33,23615,22643],{"class":47},[33,23617,23618],{"class":35,"line":110},[33,23619,16473],{"class":39},[33,23621,23622],{"class":35,"line":134},[33,23623,23624],{"class":60},"    \u002F\u002F静态成员变量也是有访问权限的\n",[33,23626,23627,23629,23631],{"class":35,"line":156},[33,23628,12271],{"class":39},[33,23630,591],{"class":39},[33,23632,22650],{"class":47},[33,23634,23635],{"class":35,"line":163},[33,23636,749],{"class":47},[33,23638,23639],{"class":35,"line":169},[33,23640,23445],{"class":60},[33,23642,23643,23645,23647,23649,23651,23653],{"class":35,"line":175},[33,23644,40],{"class":39},[33,23646,16820],{"class":43},[33,23648,23454],{"class":47},[33,23650,73],{"class":39},[33,23652,77],{"class":76},[33,23654,80],{"class":47},[33,23656,23657,23659,23661,23664,23666,23668],{"class":35,"line":181},[33,23658,40],{"class":39},[33,23660,16820],{"class":43},[33,23662,23663],{"class":47},"::m_B",[33,23665,73],{"class":39},[33,23667,1045],{"class":76},[33,23669,80],{"class":47},[33,23671,23672,23674,23676],{"class":35,"line":196},[33,23673,943],{"class":39},[33,23675,7044],{"class":43},[33,23677,48],{"class":47},[33,23679,23680],{"class":35,"line":213},[33,23681,54],{"class":47},[33,23683,23684],{"class":35,"line":228},[33,23685,23686],{"class":60},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[33,23688,23689],{"class":35,"line":1345},[33,23690,23691],{"class":60},"    \u002F\u002F静态成员变量有两种访问方式：\n",[33,23693,23694],{"class":35,"line":1350},[33,23695,23696],{"class":60},"    \u002F\u002F1.通过对象进行访问\n",[33,23698,23699],{"class":35,"line":1359},[33,23700,23701],{"class":47},"    Person p;  \n",[33,23703,23704,23706,23708,23710,23712],{"class":35,"line":1364},[33,23705,113],{"class":47},[33,23707,116],{"class":39},[33,23709,23352],{"class":47},[33,23711,116],{"class":39},[33,23713,131],{"class":47},[33,23715,23716],{"class":35,"line":1370},[33,23717,23718],{"class":60},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[33,23720,23721],{"class":35,"line":1425},[33,23722,23723],{"class":60},"    \u002F\u002F2.通过类名进行访问\n",[33,23725,23726,23728,23730,23732,23734,23736],{"class":35,"line":1438},[33,23727,113],{"class":47},[33,23729,116],{"class":39},[33,23731,20297],{"class":43},[33,23733,23454],{"class":47},[33,23735,116],{"class":39},[33,23737,131],{"class":47},[33,23739,23740,23742,23744,23746,23748,23750,23752],{"class":35,"line":1451},[33,23741,113],{"class":47},[33,23743,116],{"class":39},[33,23745,20297],{"class":43},[33,23747,23663],{"class":47},[33,23749,116],{"class":39},[33,23751,150],{"class":47},[33,23753,23754],{"class":60}," \u002F\u002F没有访问权限，报错\n",[33,23756,23757],{"class":35,"line":1457},[33,23758,231],{"class":47},[33,23760,23761,23763,23765],{"class":35,"line":1466},[33,23762,40],{"class":39},[33,23764,44],{"class":43},[33,23766,48],{"class":47},[33,23768,23769],{"class":35,"line":1471},[33,23770,54],{"class":47},[33,23772,23773,23775],{"class":35,"line":1477},[33,23774,7089],{"class":43},[33,23776,7023],{"class":47},[33,23778,23779],{"class":35,"line":1504},[33,23780,231],{"class":47},[23249,23782,23784],{"id":23783},"_8282静态成员函数","8.2.8.2静态成员函数",[14,23786,23787],{},"1.静态成员函数定义与访问",[23,23789,23791],{"className":25,"code":23790,"language":27,"meta":28,"style":28},"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",[30,23792,23793,23799,23803,23807,23812,23823,23827,23841,23845,23849,23857,23861,23866,23871,23875,23883,23888,23898],{"__ignoreMap":28},[33,23794,23795,23797],{"class":35,"line":36},[33,23796,15945],{"class":39},[33,23798,16422],{"class":43},[33,23800,23801],{"class":35,"line":51},[33,23802,54],{"class":47},[33,23804,23805],{"class":35,"line":57},[33,23806,15967],{"class":39},[33,23808,23809],{"class":35,"line":64},[33,23810,23811],{"class":60},"    \u002F\u002F在公共权限下定义静态成员函数\n",[33,23813,23814,23816,23819,23821],{"class":35,"line":83},[33,23815,12271],{"class":39},[33,23817,23818],{"class":39}," void",[33,23820,12636],{"class":43},[33,23822,48],{"class":47},[33,23824,23825],{"class":35,"line":89},[33,23826,889],{"class":47},[33,23828,23829,23832,23834,23837,23839],{"class":35,"line":98},[33,23830,23831],{"class":47},"        coout",[33,23833,116],{"class":39},[33,23835,23836],{"class":119},"\"静态成员函数的调用\"",[33,23838,116],{"class":39},[33,23840,131],{"class":47},[33,23842,23843],{"class":35,"line":110},[33,23844,916],{"class":47},[33,23846,23847],{"class":35,"line":134},[33,23848,749],{"class":47},[33,23850,23851,23853,23855],{"class":35,"line":156},[33,23852,943],{"class":39},[33,23854,6975],{"class":43},[33,23856,48],{"class":47},[33,23858,23859],{"class":35,"line":163},[33,23860,54],{"class":47},[33,23862,23863],{"class":35,"line":169},[33,23864,23865],{"class":60},"    \u002F\u002F静态成员函数的调用方式:\n",[33,23867,23868],{"class":35,"line":175},[33,23869,23870],{"class":60},"    \u002F\u002F1.通过对象访问\n",[33,23872,23873],{"class":35,"line":181},[33,23874,16564],{"class":47},[33,23876,23877,23879,23881],{"class":35,"line":196},[33,23878,17117],{"class":47},[33,23880,12802],{"class":43},[33,23882,7023],{"class":47},[33,23884,23885],{"class":35,"line":213},[33,23886,23887],{"class":60},"    \u002F\u002F2.通过类名访问\n",[33,23889,23890,23892,23894,23896],{"class":35,"line":228},[33,23891,19770],{"class":43},[33,23893,18983],{"class":47},[33,23895,12802],{"class":43},[33,23897,7023],{"class":47},[33,23899,23900],{"class":35,"line":1345},[33,23901,231],{"class":47},[574,23903,23904],{"start":51},[564,23905,23906],{},"静态成员函数只能访问静态成员变量",[23,23908,23910],{"className":25,"code":23909,"language":27,"meta":28,"style":28},"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",[30,23911,23912,23918,23922,23926,23930,23940,23944,23958,23963,23975,23979,23990,24000,24004,24008,24012,24022,24026,24039,24043,24047,24051,24055,24069,24077,24081,24085,24089,24093,24101,24105,24115,24120,24124,24132,24136,24142],{"__ignoreMap":28},[33,23913,23914,23916],{"class":35,"line":36},[33,23915,15945],{"class":39},[33,23917,16422],{"class":43},[33,23919,23920],{"class":35,"line":51},[33,23921,54],{"class":47},[33,23923,23924],{"class":35,"line":57},[33,23925,15967],{"class":39},[33,23927,23928],{"class":35,"line":64},[33,23929,23811],{"class":60},[33,23931,23932,23934,23936,23938],{"class":35,"line":83},[33,23933,12271],{"class":39},[33,23935,23818],{"class":39},[33,23937,12636],{"class":43},[33,23939,48],{"class":47},[33,23941,23942],{"class":35,"line":89},[33,23943,889],{"class":47},[33,23945,23946,23949,23951,23953,23955],{"class":35,"line":98},[33,23947,23948],{"class":47},"        m_A",[33,23950,73],{"class":39},[33,23952,457],{"class":76},[33,23954,460],{"class":47},[33,23956,23957],{"class":60}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[33,23959,23960],{"class":35,"line":110},[33,23961,23962],{"class":60},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[33,23964,23965,23967,23969,23971,23973],{"class":35,"line":134},[33,23966,23831],{"class":47},[33,23968,116],{"class":39},[33,23970,23836],{"class":119},[33,23972,116],{"class":39},[33,23974,131],{"class":47},[33,23976,23977],{"class":35,"line":156},[33,23978,916],{"class":47},[33,23980,23981,23983,23985,23987],{"class":35,"line":163},[33,23982,12271],{"class":39},[33,23984,591],{"class":39},[33,23986,16699],{"class":47},[33,23988,23989],{"class":60}," \u002F\u002F静态成员变量\n",[33,23991,23992,23994,23997],{"class":35,"line":169},[33,23993,67],{"class":39},[33,23995,23996],{"class":47}," m_B;",[33,23998,23999],{"class":60}," \u002F\u002F非静态成员变量\n",[33,24001,24002],{"class":35,"line":175},[33,24003,160],{"emptyLinePlaceholder":159},[33,24005,24006],{"class":35,"line":181},[33,24007,16473],{"class":39},[33,24009,24010],{"class":35,"line":196},[33,24011,23624],{"class":60},[33,24013,24014,24016,24018,24020],{"class":35,"line":213},[33,24015,12271],{"class":39},[33,24017,23818],{"class":39},[33,24019,14869],{"class":43},[33,24021,48],{"class":47},[33,24023,24024],{"class":35,"line":228},[33,24025,889],{"class":47},[33,24027,24028,24030,24032,24035,24037],{"class":35,"line":1345},[33,24029,894],{"class":47},[33,24031,116],{"class":39},[33,24033,24034],{"class":119},"\"这是私有权限下的静态函数调用\"",[33,24036,116],{"class":39},[33,24038,131],{"class":47},[33,24040,24041],{"class":35,"line":1350},[33,24042,916],{"class":47},[33,24044,24045],{"class":35,"line":1359},[33,24046,160],{"emptyLinePlaceholder":159},[33,24048,24049],{"class":35,"line":1364},[33,24050,160],{"emptyLinePlaceholder":159},[33,24052,24053],{"class":35,"line":1370},[33,24054,749],{"class":47},[33,24056,24057,24059,24061,24063,24065,24067],{"class":35,"line":1425},[33,24058,40],{"class":39},[33,24060,16820],{"class":43},[33,24062,23454],{"class":47},[33,24064,73],{"class":39},[33,24066,766],{"class":76},[33,24068,80],{"class":47},[33,24070,24071,24073,24075],{"class":35,"line":1438},[33,24072,943],{"class":39},[33,24074,6975],{"class":43},[33,24076,48],{"class":47},[33,24078,24079],{"class":35,"line":1451},[33,24080,54],{"class":47},[33,24082,24083],{"class":35,"line":1457},[33,24084,23865],{"class":60},[33,24086,24087],{"class":35,"line":1466},[33,24088,23870],{"class":60},[33,24090,24091],{"class":35,"line":1471},[33,24092,16564],{"class":47},[33,24094,24095,24097,24099],{"class":35,"line":1477},[33,24096,17117],{"class":47},[33,24098,12802],{"class":43},[33,24100,7023],{"class":47},[33,24102,24103],{"class":35,"line":1504},[33,24104,23887],{"class":60},[33,24106,24107,24109,24111,24113],{"class":35,"line":1509},[33,24108,19770],{"class":43},[33,24110,18983],{"class":47},[33,24112,12802],{"class":43},[33,24114,7023],{"class":47},[33,24116,24117],{"class":35,"line":1525},[33,24118,24119],{"class":60},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[33,24121,24122],{"class":35,"line":1535},[33,24123,231],{"class":47},[33,24125,24126,24128,24130],{"class":35,"line":1540},[33,24127,40],{"class":39},[33,24129,44],{"class":43},[33,24131,48],{"class":47},[33,24133,24134],{"class":35,"line":4027},[33,24135,54],{"class":47},[33,24137,24138,24140],{"class":35,"line":4032},[33,24139,7020],{"class":43},[33,24141,7023],{"class":47},[33,24143,24144],{"class":35,"line":9199},[33,24145,231],{"class":47},[1599,24147,24149],{"id":24148},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23249,24151,24153],{"id":24152},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,24155,24156],{},"在c++中，类内的成员变量和成员函数分开存储",[14,24158,24159],{},"只有非静态成员变量才属于类的对象上",[24161,24162,24164],"h5",{"id":24163},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[23,24166,24168],{"className":25,"code":24167,"language":27,"meta":28,"style":28},"#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",[30,24169,24170,24177,24187,24193,24197,24201,24205,24213,24217,24221,24244,24248,24256,24260,24266],{"__ignoreMap":28},[33,24171,24172,24174],{"class":35,"line":36},[33,24173,1131],{"class":39},[33,24175,24176],{"class":119},"\u003Ciostraem>\n",[33,24178,24179,24181,24183,24185],{"class":35,"line":51},[33,24180,1139],{"class":39},[33,24182,1142],{"class":39},[33,24184,1145],{"class":43},[33,24186,80],{"class":47},[33,24188,24189,24191],{"class":35,"line":57},[33,24190,15945],{"class":39},[33,24192,16422],{"class":43},[33,24194,24195],{"class":35,"line":64},[33,24196,54],{"class":47},[33,24198,24199],{"class":35,"line":83},[33,24200,160],{"emptyLinePlaceholder":159},[33,24202,24203],{"class":35,"line":89},[33,24204,749],{"class":47},[33,24206,24207,24209,24211],{"class":35,"line":98},[33,24208,943],{"class":39},[33,24210,6975],{"class":43},[33,24212,48],{"class":47},[33,24214,24215],{"class":35,"line":110},[33,24216,54],{"class":47},[33,24218,24219],{"class":35,"line":134},[33,24220,16564],{"class":47},[33,24222,24223,24225,24227,24230,24232,24235,24237,24239,24241],{"class":35,"line":156},[33,24224,113],{"class":47},[33,24226,116],{"class":39},[33,24228,24229],{"class":119},"\"size of p=\"",[33,24231,116],{"class":39},[33,24233,24234],{"class":43},"sizeoif",[33,24236,325],{"class":47},[33,24238,116],{"class":39},[33,24240,150],{"class":47},[33,24242,24243],{"class":60}," \u002F\u002F查看这个空类的占用的内存空间\n",[33,24245,24246],{"class":35,"line":163},[33,24247,231],{"class":47},[33,24249,24250,24252,24254],{"class":35,"line":169},[33,24251,40],{"class":39},[33,24253,44],{"class":43},[33,24255,48],{"class":47},[33,24257,24258],{"class":35,"line":175},[33,24259,54],{"class":47},[33,24261,24262,24264],{"class":35,"line":181},[33,24263,7020],{"class":43},[33,24265,7023],{"class":47},[33,24267,24268],{"class":35,"line":196},[33,24269,231],{"class":47},[14,24271,24272],{},"输出结果为：size of p=1",[14,24274,24275],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,24277,24278],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24161,24280,24282],{"id":24281},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[23,24284,24286],{"className":25,"code":24285,"language":27,"meta":28,"style":28},"#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",[30,24287,24288,24294,24304,24312,24316,24325,24329,24337,24341,24345,24364,24368,24372,24380,24384,24390],{"__ignoreMap":28},[33,24289,24290,24292],{"class":35,"line":36},[33,24291,1131],{"class":39},[33,24293,1134],{"class":119},[33,24295,24296,24298,24300,24302],{"class":35,"line":51},[33,24297,1139],{"class":39},[33,24299,1142],{"class":39},[33,24301,1145],{"class":43},[33,24303,80],{"class":47},[33,24305,24306,24308,24310],{"class":35,"line":57},[33,24307,15945],{"class":39},[33,24309,16820],{"class":43},[33,24311,4085],{"class":47},[33,24313,24314],{"class":35,"line":64},[33,24315,54],{"class":47},[33,24317,24318,24320,24322],{"class":35,"line":83},[33,24319,67],{"class":39},[33,24321,16699],{"class":47},[33,24323,24324],{"class":60},"\u002F\u002F非静态成员变量\n",[33,24326,24327],{"class":35,"line":89},[33,24328,749],{"class":47},[33,24330,24331,24333,24335],{"class":35,"line":98},[33,24332,943],{"class":39},[33,24334,6975],{"class":43},[33,24336,48],{"class":47},[33,24338,24339],{"class":35,"line":110},[33,24340,54],{"class":47},[33,24342,24343],{"class":35,"line":134},[33,24344,16564],{"class":47},[33,24346,24347,24349,24351,24353,24355,24357,24359,24361],{"class":35,"line":156},[33,24348,113],{"class":47},[33,24350,116],{"class":39},[33,24352,24229],{"class":119},[33,24354,322],{"class":39},[33,24356,325],{"class":47},[33,24358,116],{"class":39},[33,24360,150],{"class":47},[33,24362,24363],{"class":60}," \u002F\u002F查看不是空对象时占用多少内存\n",[33,24365,24366],{"class":35,"line":163},[33,24367,160],{"emptyLinePlaceholder":159},[33,24369,24370],{"class":35,"line":169},[33,24371,231],{"class":47},[33,24373,24374,24376,24378],{"class":35,"line":175},[33,24375,40],{"class":39},[33,24377,44],{"class":43},[33,24379,48],{"class":47},[33,24381,24382],{"class":35,"line":181},[33,24383,54],{"class":47},[33,24385,24386,24388],{"class":35,"line":196},[33,24387,7020],{"class":43},[33,24389,7023],{"class":47},[33,24391,24392],{"class":35,"line":213},[33,24393,231],{"class":47},[14,24395,24396],{},"输出结果：size of p=4",[14,24398,24399],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[574,24401,24402],{},[564,24403,24404],{},"如果加上非静态成员变量，Person类修改如下",[23,24406,24408],{"className":25,"code":24407,"language":27,"meta":28,"style":28},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[30,24409,24410,24416,24420,24426,24434,24438,24443],{"__ignoreMap":28},[33,24411,24412,24414],{"class":35,"line":36},[33,24413,15945],{"class":39},[33,24415,16422],{"class":43},[33,24417,24418],{"class":35,"line":51},[33,24419,54],{"class":47},[33,24421,24422,24424],{"class":35,"line":57},[33,24423,67],{"class":39},[33,24425,22643],{"class":47},[33,24427,24428,24430,24432],{"class":35,"line":64},[33,24429,12271],{"class":39},[33,24431,591],{"class":39},[33,24433,22650],{"class":47},[33,24435,24436],{"class":35,"line":83},[33,24437,749],{"class":47},[33,24439,24440],{"class":35,"line":89},[33,24441,24442],{"class":60},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[33,24444,24445,24447,24449,24451,24453,24455],{"class":35,"line":98},[33,24446,40],{"class":39},[33,24448,16820],{"class":43},[33,24450,23663],{"class":47},[33,24452,73],{"class":39},[33,24454,766],{"class":76},[33,24456,80],{"class":47},[14,24458,24459],{},"输出结果：4",[14,24461,24462],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[574,24464,24465],{"start":51},[564,24466,24467],{},"加上非静态成员函数",[23,24469,24471],{"className":25,"code":24470,"language":27,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[30,24472,24473,24480,24484,24490,24498,24502,24506,24510],{"__ignoreMap":28},[33,24474,24475,24477],{"class":35,"line":36},[33,24476,15945],{"class":39},[33,24478,24479],{"class":43},"  Person\n",[33,24481,24482],{"class":35,"line":51},[33,24483,54],{"class":47},[33,24485,24486,24488],{"class":35,"line":57},[33,24487,67],{"class":39},[33,24489,22643],{"class":47},[33,24491,24492,24494,24496],{"class":35,"line":64},[33,24493,16160],{"class":39},[33,24495,12636],{"class":43},[33,24497,48],{"class":47},[33,24499,24500],{"class":35,"line":83},[33,24501,889],{"class":47},[33,24503,24504],{"class":35,"line":89},[33,24505,160],{"emptyLinePlaceholder":159},[33,24507,24508],{"class":35,"line":98},[33,24509,916],{"class":47},[33,24511,24512],{"class":35,"line":110},[33,24513,749],{"class":47},[14,24515,24516],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[574,24518,24519],{"start":57},[564,24520,24521],{},"加上静态成员函数",[23,24523,24525],{"className":25,"code":24524,"language":27,"meta":28,"style":28},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[30,24526,24527,24533,24537,24543,24551,24555,24559,24563,24574,24578,24582,24586],{"__ignoreMap":28},[33,24528,24529,24531],{"class":35,"line":36},[33,24530,15945],{"class":39},[33,24532,24479],{"class":43},[33,24534,24535],{"class":35,"line":51},[33,24536,54],{"class":47},[33,24538,24539,24541],{"class":35,"line":57},[33,24540,67],{"class":39},[33,24542,22643],{"class":47},[33,24544,24545,24547,24549],{"class":35,"line":64},[33,24546,16160],{"class":39},[33,24548,12636],{"class":43},[33,24550,48],{"class":47},[33,24552,24553],{"class":35,"line":83},[33,24554,889],{"class":47},[33,24556,24557],{"class":35,"line":89},[33,24558,160],{"emptyLinePlaceholder":159},[33,24560,24561],{"class":35,"line":98},[33,24562,916],{"class":47},[33,24564,24565,24567,24569,24572],{"class":35,"line":110},[33,24566,12271],{"class":39},[33,24568,23818],{"class":39},[33,24570,24571],{"class":43}," func1",[33,24573,48],{"class":47},[33,24575,24576],{"class":35,"line":134},[33,24577,889],{"class":47},[33,24579,24580],{"class":35,"line":156},[33,24581,160],{"emptyLinePlaceholder":159},[33,24583,24584],{"class":35,"line":163},[33,24585,916],{"class":47},[33,24587,24588],{"class":35,"line":169},[33,24589,749],{"class":47},[14,24591,24459],{},[14,24593,24594],{},"解释：静态成员函数也不属于类上",[1544,24596,1546],{},{"title":28,"searchDepth":51,"depth":51,"links":24598},[24599,24605],{"id":15896,"depth":51,"text":15897,"children":24600},[24601,24602,24603,24604],{"id":15900,"depth":57,"text":15901},{"id":16625,"depth":57,"text":16626},{"id":16797,"depth":57,"text":16798},{"id":17256,"depth":57,"text":17257},{"id":19628,"depth":51,"text":19629,"children":24606},[24607,24608,24609,24610,24611,24612,24613,24614,24615],{"id":19640,"depth":57,"text":19641},{"id":19933,"depth":57,"text":19934},{"id":20424,"depth":57,"text":20425},{"id":21521,"depth":57,"text":21522},{"id":21944,"depth":57,"text":21945},{"id":22423,"depth":57,"text":22424},{"id":22798,"depth":57,"text":22799},{"id":23211,"depth":57,"text":23212},{"id":24148,"depth":57,"text":24149},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15861,"description":24616},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24623,"title":27,"body":24624,"description":24628,"extension":1557,"meta":24629,"navigation":159,"path":24631,"seo":24632,"stem":24633,"__hash__":24634},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24625,"toc":24626},[],{"title":28,"searchDepth":51,"depth":51,"links":24627},[],null,{"category":24630},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":27,"description":24628},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24636,"title":24637,"body":24638,"description":28,"extension":1557,"meta":25229,"navigation":159,"path":25230,"seo":25231,"stem":25232,"__hash__":25233},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24639,"toc":25211},[24640,24643,24647,24650,24653,24656,24674,24679,24682,24685,24688,24691,24696,24699,24704,24707,24710,24714,24717,24720,24726,24729,24747,24751,24755,24758,24763,24766,24770,24773,24786,24789,24793,24796,24799,24802,24827,24830,24839,24850,24865,24897,24901,24908,24916,24920,24923,24926,24931,24935,24938,24941,24946,24949,24953,24956,24959,24964,24967,24971,24976,24980,25047,25051,25054,25057,25060,25063,25066,25072,25093,25096,25110,25119,25123,25126,25129,25134,25137,25142,25147,25150,25153,25158,25163,25166,25171,25176,25179,25184,25189,25192,25195,25200,25203,25208],[10,24641,24637],{"id":24642},"_1强化学习基本认识",[18,24644,24646],{"id":24645},"_11什么是强化学习","1.1.什么是强化学习",[14,24648,24649],{},"强化学习有两部分组成：智能体和环境；",[14,24651,24652],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,24654,24655],{},"强化学习与监督学习的区别:",[574,24657,24658,24661,24664,24667],{},[564,24659,24660],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[564,24662,24663],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[564,24665,24666],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[564,24668,24669,24670,24673],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[480,24671,24672],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,24675,24676],{},[2918,24677],{"alt":28,"src":24678},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,24680,24681],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,24683,24684],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,24686,24687],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,24689,24690],{},"获取奖励",[14,24692,24693],{},[2918,24694],{"alt":28,"src":24695},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,24697,24698],{},"强化学习可以分成标准强化学习和深度强化学习",[14,24700,24701],{},[2918,24702],{"alt":28,"src":24703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,24705,24706],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,24708,24709],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[18,24711,24713],{"id":24712},"_12强化学习应用场景","1.2.强化学习应用场景",[14,24715,24716],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,24718,24719],{},"具身智能中的应用",[14,24721,24722,24725],{},[480,24723,24724],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,24727,24728],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,24730,24731,24732,24735,24736,24739,24740,24743,24744],{},"机器人是",[480,24733,24734],{},"躯体","，深度学习是",[480,24737,24738],{},"神经元****网络","，VLA是",[480,24741,24742],{},"通用的行为逻辑","，而强化学习是",[480,24745,24746],{},"教练",[18,24748,24750],{"id":24749},"_13序列决策","1.3.序列决策",[1599,24752,24754],{"id":24753},"_131智能体与环境","1.3.1.智能体与环境",[14,24756,24757],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,24759,24760],{},[2918,24761],{"alt":28,"src":24762},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,24764,24765],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[1599,24767,24769],{"id":24768},"_132奖励","1.3.2.奖励",[14,24771,24772],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,24774,24775,24776,24785],{},"取某个策略的表现如何。强化学习的目的就是",[480,24777,24778,24779,24784],{},"最大化",[480,24780,24781],{},[480,24782,24783],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,24787,24788],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[1599,24790,24792],{"id":24791},"_133序列决策","1.3.3.序列决策",[14,24794,24795],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,24797,24798],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,24800,24801],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,24803,24804,24808,24809,24811,24812,24814,24815,24817,24818,15046,24821,15046,24824],{},[24805,24806,24807],"em",{},"Ht"," = ",[24805,24810,2196],{},"1*, a",[24805,24813,701],{},", r",[24805,24816,701],{},", . . . ,* ",[24805,24819,24820],{},"ot",[24805,24822,24823],{},", at ,",[24805,24825,24826],{},"rt",[14,24828,24829],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,24831,24832,24808,24835,860,24837,352],{},[24805,24833,24834],{},"st",[24805,24836,1677],{},[24805,24838,24807],{},[14,24840,24841,24842,24845,24846,24849],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[480,24843,24844],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[480,24847,24848],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,24851,24852,24853,24856,24857,24860,24861,24864],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[480,24854,24855],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[480,24858,24859],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24805,24862,24863],{},"S, A, T, R, Ω, O, γ",")。",[14,24866,24867,24868,24870,24871,24873,24874,345,24876,24879,24880,24882,24883,345,24886,24889,24890,24892,24893,24896],{},"其中 ",[24805,24869,2289],{}," 表示状态空间，为隐变量，",[24805,24872,1848],{}," 为动作空间，",[24805,24875,2313],{},[24805,24877,24878],{},"s ′ |s, a",") 为状态转移概率，",[24805,24881,2264],{}," 为奖励函数，",[24805,24884,24885],{},"Ω",[24805,24887,24888],{},"o|s, a",") 为观测概率，",[24805,24891,2190],{}," 为观测空间，",[24805,24894,24895],{},"γ"," 为折扣因子。",[18,24898,24900],{"id":24899},"_14动作空间","1.4.动作空间",[14,24902,24903,24904,24907],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[480,24905,24906],{},"动作空间"," ，动作空间分为:",[574,24909,24910,24913],{},[564,24911,24912],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[564,24914,24915],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[18,24917,24919],{"id":24918},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24921,24922],{},"由策略、价值函数、模型三部分组成",[14,24924,24925],{},"这三者组成马尔可夫决策过程",[14,24927,24928],{},[2918,24929],{"alt":28,"src":24930},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[1599,24932,24934],{"id":24933},"_151策略","1.5.1.策略",[14,24936,24937],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24939,24940],{},"策略可分为两种：",[14,24942,24943],{},[2918,24944],{"alt":28,"src":24945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24947,24948],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[1599,24950,24952],{"id":24951},"_152价值函数","1.5.2.价值函数",[14,24954,24955],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24957,24958],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24960,24961],{},[2918,24962],{"alt":28,"src":24963},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24965,24966],{},"进入某个状态采取的最优动作可以通过Q函数得到",[1599,24968,24970],{"id":24969},"_153模型","1.5.3.模型",[14,24972,24973],{},[2918,24974],{"alt":28,"src":24975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[18,24977,24979],{"id":24978},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1756,24981,24982,24993],{},[1759,24983,24984],{},[1762,24985,24986,24990],{},[1765,24987,24989],{"align":24988},"left","类型",[1765,24991,24992],{"align":24988},"特点",[1802,24994,24995,25005,25015,25025,25037],{},[1762,24996,24997,25002],{},[1807,24998,24999],{"align":24988},[480,25000,25001],{},"基于价值的智能体",[1807,25003,25004],{"align":24988},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1762,25006,25007,25012],{},[1807,25008,25009],{"align":24988},[480,25010,25011],{},"基于策略的智能体",[1807,25013,25014],{"align":24988},"直接学习策略，没有学习价值函数",[1762,25016,25017,25022],{},[1807,25018,25019],{"align":24988},[480,25020,25021],{},"演员-评论员智能体",[1807,25023,25024],{"align":24988},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1762,25026,25027,25032],{},[1807,25028,25029],{"align":24988},[480,25030,25031],{},"有模型强化学习智能体",[1807,25033,25034],{"align":24988},[2918,25035],{"alt":28,"src":25036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1762,25038,25039,25044],{},[1807,25040,25041],{"align":24988},[480,25042,25043],{},"免模型强化学习智能体",[1807,25045,25046],{"align":24988},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[18,25048,25050],{"id":25049},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,25052,25053],{},"学习和规划是序列决策的两个基本问题",[14,25055,25056],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,25058,25059],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,25061,25062],{},"强化学习用到的库：Gym",[14,25064,25065],{},"Gym可以检验强化学习算法的优劣",[14,25067,25068,25071],{},[480,25069,25070],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[23,25073,25077],{"className":25074,"code":25075,"language":25076,"meta":28,"style":28},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[30,25078,25079],{"__ignoreMap":28},[33,25080,25081,25084,25087,25090],{"class":35,"line":36},[33,25082,25083],{"class":43},"pip",[33,25085,25086],{"class":119}," install",[33,25088,25089],{"class":119}," gym==",[33,25091,25092],{"class":76},"0.25.2\n",[14,25094,25095],{},"显示图形界面需要",[23,25097,25099],{"className":25074,"code":25098,"language":25076,"meta":28,"style":28},"pip install pygame\n",[30,25100,25101],{"__ignoreMap":28},[33,25102,25103,25105,25107],{"class":35,"line":36},[33,25104,25083],{"class":43},[33,25106,25086],{"class":119},[33,25108,25109],{"class":119}," pygame\n",[14,25111,25112,25113],{},"有关Gym库的相关文档介绍：",[126,25114,25118],{"href":25115,"rel":25116},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25117],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[18,25120,25122],{"id":25121},"_18一些补充基础概念","1.8.一些补充基础概念",[14,25124,25125],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,25127,25128],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,25130,25131],{},[2918,25132],{"alt":28,"src":25133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,25135,25136],{},"折扣率需要自己来设定",[14,25138,25139],{},[2918,25140],{"alt":28,"src":25141},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[574,25143,25144],{},[564,25145,25146],{},"状态转移函数：",[14,25148,25149],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,25151,25152],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,25154,25155],{},[2918,25156],{"alt":28,"src":25157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[574,25159,25160],{"start":51},[564,25161,25162],{},"动作价值函数：",[14,25164,25165],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,25167,25168],{},[2918,25169],{"alt":28,"src":25170},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[574,25172,25173],{"start":57},[564,25174,25175],{},"最优动作价值函数：",[14,25177,25178],{},"这个函数是对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,25180,25181],{},[2918,25182],{"alt":28,"src":25183},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[574,25185,25186],{"start":64},[564,25187,25188],{},"状态价值函数:",[14,25190,25191],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,25193,25194],{},"它衡量的是“一个具体动作”的长期价值",[14,25196,25197],{},[2918,25198],{"alt":28,"src":25199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,25201,25202],{},"几个价值函数之间的比较：",[14,25204,25205],{},[2918,25206],{"alt":28,"src":25207},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1544,25209,25210],{},"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":28,"searchDepth":51,"depth":51,"links":25212},[25213,25214,25215,25220,25221,25226,25227,25228],{"id":24645,"depth":51,"text":24646},{"id":24712,"depth":51,"text":24713},{"id":24749,"depth":51,"text":24750,"children":25216},[25217,25218,25219],{"id":24753,"depth":57,"text":24754},{"id":24768,"depth":57,"text":24769},{"id":24791,"depth":57,"text":24792},{"id":24899,"depth":51,"text":24900},{"id":24918,"depth":51,"text":24919,"children":25222},[25223,25224,25225],{"id":24933,"depth":57,"text":24934},{"id":24951,"depth":57,"text":24952},{"id":24969,"depth":57,"text":24970},{"id":24978,"depth":51,"text":24979},{"id":25049,"depth":51,"text":25050},{"id":25121,"depth":51,"text":25122},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24637,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25235,"title":25236,"body":25237,"description":25244,"extension":1557,"meta":25255,"navigation":159,"path":25256,"seo":25257,"stem":25258,"__hash__":25259},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25238,"toc":25253},[25239,25242,25245,25250],[10,25240,25236],{"id":25241},"_2马尔可夫决策过程",[14,25243,25244],{},"这是强化学习的基本框架",[14,25246,25247],{},[2918,25248],{"alt":28,"src":25249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,25251,25252],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":28,"searchDepth":51,"depth":51,"links":25254},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25236,"description":25244},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25261,"title":25262,"body":25263,"description":28,"extension":1557,"meta":25379,"navigation":159,"path":25380,"seo":25381,"stem":25382,"__hash__":25383},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25264,"toc":25374},[25265,25268,25272,25275,25280,25285,25288,25293,25296,25301,25304,25308,25313,25316,25321,25326,25331,25334,25338,25343,25346,25351,25356,25361,25366,25369],[10,25266,25262],{"id":25267},"_3动作价值函数",[18,25269,25271],{"id":25270},"_31dqn","3.1.DQN",[14,25273,25274],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,25276,25277],{},[2918,25278],{"alt":28,"src":25279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,25281,25282],{},[2918,25283],{"alt":28,"src":25284},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,25286,25287],{},"DQN算法的描述：",[14,25289,25290],{},[2918,25291],{"alt":28,"src":25292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,25294,25295],{},"这里的Dense指的是全连接层",[14,25297,25298],{},[2918,25299],{"alt":28,"src":25300},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,25302,25303],{},"当前观测的状态为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,25305,25307],{"id":25306},"_32dqn的举例","3.2.DQN的举例",[14,25309,25310],{},[2918,25311],{"alt":28,"src":25312},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,25314,25315],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,25317,25318],{},[2918,25319],{"alt":28,"src":25320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,25322,25323],{},[2918,25324],{"alt":28,"src":25325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,25327,25328],{},[2918,25329],{"alt":28,"src":25330},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,25332,25333],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[18,25335,25337],{"id":25336},"_33td算法","3.3.TD算法",[14,25339,25340],{},[2918,25341],{"alt":28,"src":25342},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,25344,25345],{},"强化学习TD算法公式的粗略解释：",[14,25347,25348],{},[2918,25349],{"alt":28,"src":25350},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,25352,25353],{},[2918,25354],{"alt":28,"src":25355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,25357,25358],{},[2918,25359],{"alt":28,"src":25360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,25362,25363],{},[2918,25364],{"alt":28,"src":25365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,25367,25368],{},"TD算法总结：",[14,25370,25371],{},[2918,25372],{"alt":28,"src":25373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":28,"searchDepth":51,"depth":51,"links":25375},[25376,25377,25378],{"id":25270,"depth":51,"text":25271},{"id":25306,"depth":51,"text":25307},{"id":25336,"depth":51,"text":25337},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25262,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25385,"title":25386,"body":25387,"description":28,"extension":1557,"meta":25620,"navigation":159,"path":25621,"seo":25622,"stem":25623,"__hash__":25624},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25388,"toc":25616},[25389,25392,25396,25399,25402,25407,25412,25415,25420,25425,25428,25433,25436,25441,25444,25449,25452,25457,25460,25465,25470,25473,25478,25481,25484,25489,25492,25497,25502,25506,25509,25512,25517,25522,25525,25530,25535,25538,25543,25546,25549,25554,25557,25562,25565,25570,25575,25578,25583,25588,25591,25596,25599,25604,25607],[10,25390,25386],{"id":25391},"_4策略学习",[18,25393,25395],{"id":25394},"_41概念描述","4.1.概念描述",[14,25397,25398],{},"用神经网络（策略网络）近似策略函数",[14,25400,25401],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,25403,25404],{},[2918,25405],{"alt":28,"src":25406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,25408,25409],{},[2918,25410],{"alt":28,"src":25411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,25413,25414],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,25416,25417],{},[2918,25418],{"alt":28,"src":25419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,25421,25422],{},[2918,25423],{"alt":28,"src":25424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,25426,25427],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,25429,25430],{},[2918,25431],{"alt":28,"src":25432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,25434,25435],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,25437,25438],{},[2918,25439],{"alt":28,"src":25440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,25442,25443],{},"改进theta要用到策略梯度算法",[14,25445,25446],{},[2918,25447],{"alt":28,"src":25448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,25450,25451],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,25453,25454],{},[2918,25455],{"alt":28,"src":25456},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,25458,25459],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,25461,25462],{},[2918,25463],{"alt":28,"src":25464},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,25466,25467],{},[2918,25468],{"alt":28,"src":25469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,25471,25472],{},"梯度公式总结：",[14,25474,25475],{},[2918,25476],{"alt":28,"src":25477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,25479,25480],{},"两个公式的分别应用场景：",[14,25482,25483],{},"对于离散的动作：",[14,25485,25486],{},[2918,25487],{"alt":28,"src":25488},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,25490,25491],{},"对于连续的动作：",[14,25493,25494],{},[2918,25495],{"alt":28,"src":25496},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,25498,25499],{},[2918,25500],{"alt":28,"src":25501},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[18,25503,25505],{"id":25504},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,25507,25508],{},"使用蒙特卡洛来近似计算策略梯度",[14,25510,25511],{},"蒙特卡洛法的解释如下：",[14,25513,25514],{},[2918,25515],{"alt":28,"src":25516},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,25518,25519],{},[2918,25520],{"alt":28,"src":25521},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,25523,25524],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[574,25526,25527],{},[564,25528,25529],{},"方法一：reinforce算法",[14,25531,25532],{},[2918,25533],{"alt":28,"src":25534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,25536,25537],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[574,25539,25540],{"start":51},[564,25541,25542],{},"方法二：actor-critic算法",[14,25544,25545],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,25547,25548],{},"两个网络的构建：",[14,25550,25551],{},[2918,25552],{"alt":28,"src":25553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,25555,25556],{},"actor网路：",[14,25558,25559],{},[2918,25560],{"alt":28,"src":25561},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,25563,25564],{},"critic网络",[14,25566,25567],{},[2918,25568],{"alt":28,"src":25569},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[574,25571,25572],{"start":57},[564,25573,25574],{},"网络的训练",[14,25576,25577],{},"网络描述",[14,25579,25580],{},[2918,25581],{"alt":28,"src":25582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,25584,25585],{},[2918,25586],{"alt":28,"src":25587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,25589,25590],{},"TD算法更新梯度：",[14,25592,25593],{},[2918,25594],{"alt":28,"src":25595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,25597,25598],{},"策略网络更新梯度：",[14,25600,25601],{},[2918,25602],{"alt":28,"src":25603},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,25605,25606],{},"训练整个流程的具体描述：",[14,25608,25609,25612,25613],{},[2918,25610],{"alt":28,"src":25611},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2918,25614],{"alt":28,"src":25615},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":28,"searchDepth":51,"depth":51,"links":25617},[25618,25619],{"id":25394,"depth":51,"text":25395},{"id":25504,"depth":51,"text":25505},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25386,"description":28},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25626,"title":25627,"body":25628,"description":25635,"extension":1557,"meta":25685,"navigation":159,"path":25686,"seo":25687,"stem":25688,"__hash__":25689},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25629,"toc":25681},[25630,25633,25636,25640,25643,25648,25652,25655,25660,25663,25668,25673,25676],[10,25631,25627],{"id":25632},"_5alphago算法",[14,25634,25635],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[18,25637,25639],{"id":25638},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,25641,25642],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,25644,25645],{},[2918,25646],{"alt":28,"src":25647},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[18,25649,25651],{"id":25650},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,25653,25654],{},"采用强化学习的方式训练策略网络",[14,25656,25657],{},[2918,25658],{"alt":28,"src":25659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,25661,25662],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,25664,25665],{},[2918,25666],{"alt":28,"src":25667},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,25669,25670],{},[2918,25671],{"alt":28,"src":25672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,25674,25675],{},"强化学习训练策略网络的总结：",[14,25677,25678],{},[2918,25679],{"alt":28,"src":25680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":28,"searchDepth":51,"depth":51,"links":25682},[25683,25684],{"id":25638,"depth":51,"text":25639},{"id":25650,"depth":51,"text":25651},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25627,"description":25635},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25691,"title":25692,"body":25693,"description":25700,"extension":1557,"meta":25703,"navigation":159,"path":25704,"seo":25705,"stem":25706,"__hash__":25707},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25694,"toc":25701},[25695,25698],[10,25696,25692],{"id":25697},"_6价值网络",[14,25699,25700],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":28,"searchDepth":51,"depth":51,"links":25702},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25692,"description":25700},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25709,"title":25710,"body":25711,"description":25715,"extension":1557,"meta":25716,"navigation":159,"path":25717,"seo":25718,"stem":25719,"__hash__":25720},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25712,"toc":25713},[],{"title":28,"searchDepth":51,"depth":51,"links":25714},[],"记录自己的强化学习笔记。",{"category":24630},"\u002Fwiki\u002F2025-12-04",{"title":25710,"description":25715},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25722,"title":25723,"body":25724,"description":24628,"extension":1557,"meta":25763,"navigation":159,"path":25764,"seo":25765,"stem":25766,"__hash__":25767},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25725,"toc":25761},[25726,25729,25732,25738,25741,25747,25750,25755,25758],[10,25727,25723],{"id":25728},"_1-项目概览与官方资源",[14,25730,25731],{},"官方文档：",[14,25733,25734],{},[126,25735,25736],{"href":25736,"rel":25737},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25117],[14,25739,25740],{},"官方代码仓库：",[14,25742,25743],{},[126,25744,25745],{"href":25745,"rel":25746},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25117],[14,25748,25749],{},"复现大体流程：",[14,25751,25752],{},[2918,25753],{"alt":28,"src":25754},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,25756,25757],{},"本教程的目标是打通这条链路：",[14,25759,25760],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":28,"searchDepth":51,"depth":51,"links":25762},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25723,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25769,"title":25770,"body":25771,"description":24628,"extension":1557,"meta":25887,"navigation":159,"path":25888,"seo":25889,"stem":25890,"__hash__":25891},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25772,"toc":25882},[25773,25776,25780,25783,25790,25794,25797,25806,25816,25820,25850,25853,25879],[10,25774,25770],{"id":25775},"_2-环境准备与设备连接",[18,25777,25779],{"id":25778},"_21-系统与环境","2.1 系统与环境",[14,25781,25782],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,25784,25785,25786,25789],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[30,25787,25788],{},"lerobot"," 依赖。",[18,25791,25793],{"id":25792},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,25795,25796],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[23,25798,25800],{"className":25074,"code":25799,"language":25076,"meta":28,"style":28},"lerobot-find-out\n",[30,25801,25802],{"__ignoreMap":28},[33,25803,25804],{"class":35,"line":36},[33,25805,25799],{"class":43},[14,25807,25808,25809,1829,25812,25815],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[30,25810,25811],{},"\u002Fdev\u002FttyACM0",[30,25813,25814],{},"\u002Fdev\u002FttyACM1","）。",[18,25817,25819],{"id":25818},"_23-串口授权","2.3 串口授权",[23,25821,25823],{"className":25074,"code":25822,"language":25076,"meta":28,"style":28},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[30,25824,25825,25839],{"__ignoreMap":28},[33,25826,25827,25830,25833,25836],{"class":35,"line":36},[33,25828,25829],{"class":43},"sudo",[33,25831,25832],{"class":119}," chmod",[33,25834,25835],{"class":76}," 666",[33,25837,25838],{"class":119}," \u002Fdev\u002FttyACM0\n",[33,25840,25841,25843,25845,25847],{"class":35,"line":51},[33,25842,25829],{"class":43},[33,25844,25832],{"class":119},[33,25846,25835],{"class":76},[33,25848,25849],{"class":119}," \u002Fdev\u002FttyACM1\n",[14,25851,25852],{},"说明：",[561,25854,25855,25860,25866,25876],{},[564,25856,25857,25859],{},[30,25858,25829],{},"：以 root 权限执行命令。",[564,25861,25862,25865],{},[30,25863,25864],{},"chmod","：修改设备节点权限。",[564,25867,25868,25871,25872,25875],{},[30,25869,25870],{},"666","：",[30,25873,25874],{},"rw-rw-rw-","，所有用户可读写。",[564,25877,25878],{},"串口号必须替换为你机器上的真实端口。",[1544,25880,25881],{},"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":28,"searchDepth":51,"depth":51,"links":25883},[25884,25885,25886],{"id":25778,"depth":51,"text":25779},{"id":25792,"depth":51,"text":25793},{"id":25818,"depth":51,"text":25819},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25770,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25893,"title":25894,"body":25895,"description":24628,"extension":1557,"meta":26056,"navigation":159,"path":26057,"seo":26058,"stem":26059,"__hash__":26060},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25896,"toc":26052},[25897,25901,25905,25911,25914,25971,25974,25978,25981,26049],[10,25898,25900],{"id":25899},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[18,25902,25904],{"id":25903},"_31-配置电机-id","3.1 配置电机 ID",[14,25906,25907,25908,25910],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[30,25909,701],{},"，需要改成机械臂链路里不冲突的编号。",[14,25912,25913],{},"方式一：用 LeRobot 命令逐步写入。",[23,25915,25917],{"className":25074,"code":25916,"language":25076,"meta":28,"style":28},"# 主臂舵机配置 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",[30,25918,25919,25924,25932,25939,25944,25948,25953,25959,25966],{"__ignoreMap":28},[33,25920,25921],{"class":35,"line":36},[33,25922,25923],{"class":60},"# 主臂舵机配置 ID\n",[33,25925,25926,25929],{"class":35,"line":51},[33,25927,25928],{"class":43},"lerobot-setup-motors",[33,25930,25931],{"class":76}," \\\n",[33,25933,25934,25937],{"class":35,"line":57},[33,25935,25936],{"class":76},"  --teleop.type=so101_leader",[33,25938,25931],{"class":76},[33,25940,25941],{"class":35,"line":64},[33,25942,25943],{"class":76},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[33,25945,25946],{"class":35,"line":83},[33,25947,160],{"emptyLinePlaceholder":159},[33,25949,25950],{"class":35,"line":89},[33,25951,25952],{"class":60},"# 从臂舵机配置 ID\n",[33,25954,25955,25957],{"class":35,"line":98},[33,25956,25928],{"class":43},[33,25958,25931],{"class":76},[33,25960,25961,25964],{"class":35,"line":110},[33,25962,25963],{"class":76},"  --robot.type=so101_follower",[33,25965,25931],{"class":76},[33,25967,25968],{"class":35,"line":134},[33,25969,25970],{"class":76},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25972,25973],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[18,25975,25977],{"id":25976},"_32-机械臂校准","3.2 机械臂校准",[14,25979,25980],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[23,25982,25984],{"className":25074,"code":25983,"language":25076,"meta":28,"style":28},"# 主臂校准\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",[30,25985,25986,25991,25998,26004,26011,26016,26020,26025,26031,26037,26044],{"__ignoreMap":28},[33,25987,25988],{"class":35,"line":36},[33,25989,25990],{"class":60},"# 主臂校准\n",[33,25992,25993,25996],{"class":35,"line":51},[33,25994,25995],{"class":43},"lerobot-calibrate",[33,25997,25931],{"class":76},[33,25999,26000,26002],{"class":35,"line":57},[33,26001,25936],{"class":76},[33,26003,25931],{"class":76},[33,26005,26006,26009],{"class":35,"line":64},[33,26007,26008],{"class":76},"  --teleop.port=\u002Fdev\u002FttyACM0",[33,26010,25931],{"class":76},[33,26012,26013],{"class":35,"line":83},[33,26014,26015],{"class":76},"  --teleop.id=my_awesome_leader_arm\n",[33,26017,26018],{"class":35,"line":89},[33,26019,160],{"emptyLinePlaceholder":159},[33,26021,26022],{"class":35,"line":98},[33,26023,26024],{"class":60},"# 从臂校准\n",[33,26026,26027,26029],{"class":35,"line":110},[33,26028,25995],{"class":43},[33,26030,25931],{"class":76},[33,26032,26033,26035],{"class":35,"line":134},[33,26034,25963],{"class":76},[33,26036,25931],{"class":76},[33,26038,26039,26042],{"class":35,"line":156},[33,26040,26041],{"class":76},"  --robot.port=\u002Fdev\u002FttyACM1",[33,26043,25931],{"class":76},[33,26045,26046],{"class":35,"line":163},[33,26047,26048],{"class":76},"  --robot.id=my_awesome_follower_arm\n",[1544,26050,26051],{},"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":28,"searchDepth":51,"depth":51,"links":26053},[26054,26055],{"id":25903,"depth":51,"text":25904},{"id":25976,"depth":51,"text":25977},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25894,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26062,"title":26063,"body":26064,"description":24628,"extension":1557,"meta":26255,"navigation":159,"path":26256,"seo":26257,"stem":26258,"__hash__":26259},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26065,"toc":26251},[26066,26069,26073,26120,26124,26137,26200,26203,26248],[10,26067,26063],{"id":26068},"_4-遥操与相机接入",[18,26070,26072],{"id":26071},"_41-不带相机遥操","4.1 不带相机遥操",[23,26074,26076],{"className":25074,"code":26075,"language":25076,"meta":28,"style":28},"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",[30,26077,26078,26085,26091,26097,26104,26110,26116],{"__ignoreMap":28},[33,26079,26080,26083],{"class":35,"line":36},[33,26081,26082],{"class":43},"lerobot-teleoperate",[33,26084,25931],{"class":76},[33,26086,26087,26089],{"class":35,"line":51},[33,26088,25963],{"class":76},[33,26090,25931],{"class":76},[33,26092,26093,26095],{"class":35,"line":57},[33,26094,26041],{"class":76},[33,26096,25931],{"class":76},[33,26098,26099,26102],{"class":35,"line":64},[33,26100,26101],{"class":76},"  --robot.id=my_awesome_follower_arm",[33,26103,25931],{"class":76},[33,26105,26106,26108],{"class":35,"line":83},[33,26107,25936],{"class":76},[33,26109,25931],{"class":76},[33,26111,26112,26114],{"class":35,"line":89},[33,26113,26008],{"class":76},[33,26115,25931],{"class":76},[33,26117,26118],{"class":35,"line":98},[33,26119,26015],{"class":76},[18,26121,26123],{"id":26122},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[23,26125,26127],{"className":25074,"code":26126,"language":25076,"meta":28,"style":28},"lerobot-find-cameras opencv\n",[30,26128,26129],{"__ignoreMap":28},[33,26130,26131,26134],{"class":35,"line":36},[33,26132,26133],{"class":43},"lerobot-find-cameras",[33,26135,26136],{"class":119}," opencv\n",[23,26138,26140],{"className":25074,"code":26139,"language":25076,"meta":28,"style":28},"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",[30,26141,26142,26148,26154,26160,26166,26176,26182,26188,26195],{"__ignoreMap":28},[33,26143,26144,26146],{"class":35,"line":36},[33,26145,26082],{"class":43},[33,26147,25931],{"class":76},[33,26149,26150,26152],{"class":35,"line":51},[33,26151,25963],{"class":76},[33,26153,25931],{"class":76},[33,26155,26156,26158],{"class":35,"line":57},[33,26157,26041],{"class":76},[33,26159,25931],{"class":76},[33,26161,26162,26164],{"class":35,"line":64},[33,26163,26101],{"class":76},[33,26165,25931],{"class":76},[33,26167,26168,26171,26174],{"class":35,"line":83},[33,26169,26170],{"class":76},"  --robot.cameras=",[33,26172,26173],{"class":119},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[33,26175,25931],{"class":76},[33,26177,26178,26180],{"class":35,"line":89},[33,26179,25936],{"class":76},[33,26181,25931],{"class":76},[33,26183,26184,26186],{"class":35,"line":98},[33,26185,26008],{"class":76},[33,26187,25931],{"class":76},[33,26189,26190,26193],{"class":35,"line":110},[33,26191,26192],{"class":76},"  --teleop.id=my_awesome_leader_arm",[33,26194,25931],{"class":76},[33,26196,26197],{"class":35,"line":134},[33,26198,26199],{"class":76},"  --display_data=true\n",[14,26201,26202],{},"相机参数说明：",[561,26204,26205,26211,26217,26226,26236,26242],{},[564,26206,26207,26210],{},[30,26208,26209],{},"front","：相机名称。",[564,26212,26213,26216],{},[30,26214,26215],{},"type: opencv","：相机驱动类型。",[564,26218,26219,26222,26223,25815],{},[30,26220,26221],{},"index_or_path","：设备编号或设备路径（如 ",[30,26224,26225],{},"\u002Fdev\u002Fvideo4",[564,26227,26228,26231,26232,26235],{},[30,26229,26230],{},"width"," \u002F ",[30,26233,26234],{},"height","：图像分辨率。",[564,26237,26238,26241],{},[30,26239,26240],{},"fps","：采样帧率。",[564,26243,26244,26247],{},[30,26245,26246],{},"--display_data=true","：启用实时可视化。",[1544,26249,26250],{},"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":28,"searchDepth":51,"depth":51,"links":26252},[26253,26254],{"id":26071,"depth":51,"text":26072},{"id":26122,"depth":51,"text":26123},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26063,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26261,"title":26262,"body":26263,"description":24628,"extension":1557,"meta":26435,"navigation":159,"path":26436,"seo":26437,"stem":26438,"__hash__":26439},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26264,"toc":26430},[26265,26269,26273,26278,26283,26286,26328,26334,26338,26387,26392,26396,26399,26407,26412,26417,26422,26427],[10,26266,26268],{"id":26267},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[18,26270,26272],{"id":26271},"_51-生成访问令牌","5.1 生成访问令牌",[14,26274,26275],{},[2918,26276],{"alt":28,"src":26277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,26279,26280],{},[2918,26281],{"alt":28,"src":26282},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,26284,26285],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[23,26287,26289],{"className":25074,"code":26288,"language":25076,"meta":28,"style":28},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[30,26290,26291,26304],{"__ignoreMap":28},[33,26292,26293,26296,26299,26301],{"class":35,"line":36},[33,26294,26295],{"class":39},"export",[33,26297,26298],{"class":47}," HF_TOKEN",[33,26300,73],{"class":39},[33,26302,26303],{"class":119},"\"your_huggingface_token\"\n",[33,26305,26306,26309,26312,26315,26318,26320,26323,26325],{"class":35,"line":51},[33,26307,26308],{"class":43},"hf",[33,26310,26311],{"class":119}," auth",[33,26313,26314],{"class":119}," login",[33,26316,26317],{"class":76}," --token",[33,26319,10975],{"class":119},[33,26321,26322],{"class":47},"$HF_TOKEN",[33,26324,1866],{"class":119},[33,26326,26327],{"class":76}," --add-to-git-credential\n",[14,26329,26330,26333],{},[30,26331,26332],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[18,26335,26337],{"id":26336},"_52-验证登录","5.2 验证登录",[23,26339,26341],{"className":25074,"code":26340,"language":25076,"meta":28,"style":28},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[30,26342,26343,26374],{"__ignoreMap":28},[33,26344,26345,26348,26350,26353,26355,26357,26360,26363,26366,26369,26372],{"class":35,"line":36},[33,26346,26347],{"class":47},"HF_USER",[33,26349,73],{"class":39},[33,26351,26352],{"class":47},"$(",[33,26354,26308],{"class":43},[33,26356,26311],{"class":119},[33,26358,26359],{"class":119}," whoami",[33,26361,26362],{"class":39}," |",[33,26364,26365],{"class":43}," head",[33,26367,26368],{"class":76}," -n",[33,26370,26371],{"class":76}," 1",[33,26373,884],{"class":47},[33,26375,26376,26379,26381,26384],{"class":35,"line":51},[33,26377,26378],{"class":76},"echo",[33,26380,10975],{"class":119},[33,26382,26383],{"class":47},"$HF_USER",[33,26385,26386],{"class":119},"\"\n",[14,26388,26389],{},[2918,26390],{"alt":28,"src":26391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[18,26393,26395],{"id":26394},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,26397,26398],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[561,26400,26401,26404],{},[564,26402,26403],{},"Dataset Repo（用于上传演示数据）",[564,26405,26406],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,26408,26409],{},[2918,26410],{"alt":28,"src":26411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,26413,26414],{},[2918,26415],{"alt":28,"src":26416},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,26418,26419],{},[2918,26420],{"alt":28,"src":26421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,26423,26424],{},[2918,26425],{"alt":28,"src":26426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1544,26428,26429],{},"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":28,"searchDepth":51,"depth":51,"links":26431},[26432,26433,26434],{"id":26271,"depth":51,"text":26272},{"id":26336,"depth":51,"text":26337},{"id":26394,"depth":51,"text":26395},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26262,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26441,"title":26442,"body":26443,"description":24628,"extension":1557,"meta":26640,"navigation":159,"path":26641,"seo":26642,"stem":26643,"__hash__":26644},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26444,"toc":26635},[26445,26449,26453,26549,26557,26562,26566,26582,26585,26589,26632],[10,26446,26448],{"id":26447},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[18,26450,26452],{"id":26451},"_61-录制示教数据","6.1 录制示教数据",[23,26454,26456],{"className":25074,"code":26455,"language":25076,"meta":28,"style":28},"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",[30,26457,26458,26465,26471,26477,26483,26492,26498,26504,26510,26517,26527,26534,26544],{"__ignoreMap":28},[33,26459,26460,26463],{"class":35,"line":36},[33,26461,26462],{"class":43},"lerobot-record",[33,26464,25931],{"class":76},[33,26466,26467,26469],{"class":35,"line":51},[33,26468,25963],{"class":76},[33,26470,25931],{"class":76},[33,26472,26473,26475],{"class":35,"line":57},[33,26474,26041],{"class":76},[33,26476,25931],{"class":76},[33,26478,26479,26481],{"class":35,"line":64},[33,26480,26101],{"class":76},[33,26482,25931],{"class":76},[33,26484,26485,26487,26490],{"class":35,"line":83},[33,26486,26170],{"class":76},[33,26488,26489],{"class":119},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[33,26491,25931],{"class":76},[33,26493,26494,26496],{"class":35,"line":89},[33,26495,25936],{"class":76},[33,26497,25931],{"class":76},[33,26499,26500,26502],{"class":35,"line":98},[33,26501,26008],{"class":76},[33,26503,25931],{"class":76},[33,26505,26506,26508],{"class":35,"line":110},[33,26507,26192],{"class":76},[33,26509,25931],{"class":76},[33,26511,26512,26515],{"class":35,"line":134},[33,26513,26514],{"class":76},"  --display_data=true",[33,26516,25931],{"class":76},[33,26518,26519,26522,26525],{"class":35,"line":156},[33,26520,26521],{"class":76},"  --dataset.repo_id=",[33,26523,26524],{"class":119},"\"Embodied-AI-6\u002Fso101_test\"",[33,26526,25931],{"class":76},[33,26528,26529,26532],{"class":35,"line":163},[33,26530,26531],{"class":76},"  --dataset.num_episodes=10",[33,26533,25931],{"class":76},[33,26535,26536,26539,26542],{"class":35,"line":169},[33,26537,26538],{"class":76},"  --dataset.single_task=",[33,26540,26541],{"class":119},"\"Grab the green cube\"",[33,26543,25931],{"class":76},[33,26545,26546],{"class":35,"line":175},[33,26547,26548],{"class":76},"  --resume=true\n",[561,26550,26551],{},[564,26552,26553,26556],{},[30,26554,26555],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,26558,26559],{},[2918,26560],{"alt":28,"src":26561},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[18,26563,26565],{"id":26564},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[23,26567,26569],{"className":25074,"code":26568,"language":25076,"meta":28,"style":28},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[30,26570,26571],{"__ignoreMap":28},[33,26572,26573,26576,26579],{"class":35,"line":36},[33,26574,26575],{"class":43},"rm",[33,26577,26578],{"class":76}," -rf",[33,26580,26581],{"class":119}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,26583,26584],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[18,26586,26588],{"id":26587},"_63-回放指定-episode","6.3 回放指定 episode",[23,26590,26592],{"className":25074,"code":26591,"language":25076,"meta":28,"style":28},"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",[30,26593,26594,26601,26607,26613,26619,26627],{"__ignoreMap":28},[33,26595,26596,26599],{"class":35,"line":36},[33,26597,26598],{"class":43},"lerobot-replay",[33,26600,25931],{"class":76},[33,26602,26603,26605],{"class":35,"line":51},[33,26604,25963],{"class":76},[33,26606,25931],{"class":76},[33,26608,26609,26611],{"class":35,"line":57},[33,26610,26041],{"class":76},[33,26612,25931],{"class":76},[33,26614,26615,26617],{"class":35,"line":64},[33,26616,26101],{"class":76},[33,26618,25931],{"class":76},[33,26620,26621,26623,26625],{"class":35,"line":83},[33,26622,26521],{"class":76},[33,26624,26524],{"class":119},[33,26626,25931],{"class":76},[33,26628,26629],{"class":35,"line":89},[33,26630,26631],{"class":76},"  --dataset.episode=0\n",[1544,26633,26634],{},"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":28,"searchDepth":51,"depth":51,"links":26636},[26637,26638,26639],{"id":26451,"depth":51,"text":26452},{"id":26564,"depth":51,"text":26565},{"id":26587,"depth":51,"text":26588},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26442,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26646,"title":26647,"body":26648,"description":24628,"extension":1557,"meta":26776,"navigation":159,"path":26777,"seo":26778,"stem":26779,"__hash__":26780},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26649,"toc":26774},[26650,26654,26717,26720,26767,26772],[10,26651,26653],{"id":26652},"_7-act-模型训练","7. ACT 模型训练",[23,26655,26657],{"className":25074,"code":26656,"language":25076,"meta":28,"style":28},"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",[30,26658,26659,26666,26674,26681,26688,26695,26702,26709],{"__ignoreMap":28},[33,26660,26661,26664],{"class":35,"line":36},[33,26662,26663],{"class":43},"lerobot-train",[33,26665,25931],{"class":76},[33,26667,26668,26670,26672],{"class":35,"line":51},[33,26669,26521],{"class":76},[33,26671,26524],{"class":119},[33,26673,25931],{"class":76},[33,26675,26676,26679],{"class":35,"line":57},[33,26677,26678],{"class":76},"  --policy.type=act",[33,26680,25931],{"class":76},[33,26682,26683,26686],{"class":35,"line":64},[33,26684,26685],{"class":76},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[33,26687,25931],{"class":76},[33,26689,26690,26693],{"class":35,"line":83},[33,26691,26692],{"class":76},"  --job_name=act_so101_test",[33,26694,25931],{"class":76},[33,26696,26697,26700],{"class":35,"line":89},[33,26698,26699],{"class":76},"  --policy.device=cuda",[33,26701,25931],{"class":76},[33,26703,26704,26707],{"class":35,"line":98},[33,26705,26706],{"class":76},"  --wandb.enable=false",[33,26708,25931],{"class":76},[33,26710,26711,26714],{"class":35,"line":110},[33,26712,26713],{"class":76},"  --policy.repo_id=",[33,26715,26716],{"class":119},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,26718,26719],{},"参数说明：",[561,26721,26722,26728,26734,26740,26746,26755,26761],{},[564,26723,26724,26727],{},[30,26725,26726],{},"--dataset.repo_id","：训练数据集仓库。",[564,26729,26730,26733],{},[30,26731,26732],{},"--policy.type=act","：策略模型类型为 ACT。",[564,26735,26736,26739],{},[30,26737,26738],{},"--output_dir","：本地训练输出目录。",[564,26741,26742,26745],{},[30,26743,26744],{},"--job_name","：训练任务名称。",[564,26747,26748,26751,26752,25815],{},[30,26749,26750],{},"--policy.device","：训练设备（如 ",[30,26753,26754],{},"cuda",[564,26756,26757,26760],{},[30,26758,26759],{},"--wandb.enable","：是否启用 WandB 可视化。",[564,26762,26763,26766],{},[30,26764,26765],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,26768,26769],{},[2918,26770],{"alt":28,"src":26771},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1544,26773,26634],{},{"title":28,"searchDepth":51,"depth":51,"links":26775},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26647,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26782,"title":26783,"body":26784,"description":24628,"extension":1557,"meta":26871,"navigation":159,"path":26872,"seo":26873,"stem":26874,"__hash__":26875},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26785,"toc":26869},[26786,26789,26792,26859,26867],[10,26787,26783],{"id":26788},"_8-策略部署与自动采集",[14,26790,26791],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[23,26793,26795],{"className":25074,"code":26794,"language":25076,"meta":28,"style":28},"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",[30,26796,26797,26803,26809,26815,26823,26829,26836,26844,26852],{"__ignoreMap":28},[33,26798,26799,26801],{"class":35,"line":36},[33,26800,26462],{"class":43},[33,26802,25931],{"class":76},[33,26804,26805,26807],{"class":35,"line":51},[33,26806,25963],{"class":76},[33,26808,25931],{"class":76},[33,26810,26811,26813],{"class":35,"line":57},[33,26812,26041],{"class":76},[33,26814,25931],{"class":76},[33,26816,26817,26819,26821],{"class":35,"line":64},[33,26818,26170],{"class":76},[33,26820,26489],{"class":119},[33,26822,25931],{"class":76},[33,26824,26825,26827],{"class":35,"line":83},[33,26826,26101],{"class":76},[33,26828,25931],{"class":76},[33,26830,26831,26834],{"class":35,"line":89},[33,26832,26833],{"class":76},"  --display_data=false",[33,26835,25931],{"class":76},[33,26837,26838,26840,26842],{"class":35,"line":98},[33,26839,26521],{"class":76},[33,26841,26524],{"class":119},[33,26843,25931],{"class":76},[33,26845,26846,26848,26850],{"class":35,"line":110},[33,26847,26538],{"class":76},[33,26849,26541],{"class":119},[33,26851,25931],{"class":76},[33,26853,26854,26857],{"class":35,"line":134},[33,26855,26856],{"class":76},"  --policy.path=",[33,26858,26716],{"class":119},[561,26860,26861],{},[564,26862,26863,26866],{},[30,26864,26865],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1544,26868,26634],{},{"title":28,"searchDepth":51,"depth":51,"links":26870},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26783,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26877,"title":26878,"body":26879,"description":24628,"extension":1557,"meta":26908,"navigation":159,"path":26909,"seo":26910,"stem":26911,"__hash__":26912},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26880,"toc":26906},[26881,26885,26888,26894,26897,26903],[10,26882,26884],{"id":26883},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,26886,26887],{},"项目地址：",[14,26889,26890],{},[126,26891,26892],{"href":26892,"rel":26893},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25117],[14,26895,26896],{},"参考教程：",[14,26898,26899],{},[126,26900,26901],{"href":26901,"rel":26902},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25117],[14,26904,26905],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":28,"searchDepth":51,"depth":51,"links":26907},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26878,"description":24628},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26914,"title":26915,"body":26916,"description":26920,"extension":1557,"meta":26921,"navigation":159,"path":26922,"seo":26923,"stem":26924,"__hash__":26925},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26917,"toc":26918},[],{"title":28,"searchDepth":51,"depth":51,"links":26919},[],"act复现",{"category":24630},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26915,"description":26920},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26927,"title":26928,"body":26929,"description":28,"extension":1557,"meta":27231,"navigation":159,"path":27232,"seo":27233,"stem":27234,"__hash__":27235},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26930,"toc":27223},[26931,26934,26938,26948,26955,26962,26965,26972,26975,26978,26982,26994,26998,27044,27047,27050,27053,27056,27059,27063,27101,27107,27111,27165,27170,27173,27176,27181,27184,27189,27192,27195,27199,27202,27205,27209],[10,26932,26928],{"id":26933},"_1简介",[1599,26935,26937],{"id":26936},"_11什么是-docker","1.1什么是 Docker？",[14,26939,26940,26941,26944,26945],{},"Docker 是一个开源的 ",[480,26942,26943],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[480,26946,26947],{},"一次构建，到处运行。",[14,26949,26950,26951,26954],{},"“ ",[480,26952,26953],{},"一次构建，到处运行"," ”也就是说：",[574,26956,26957],{},[564,26958,26959],{},[480,26960,26961],{},"之前：",[14,26963,26964],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[574,26966,26967],{},[564,26968,26969],{},[480,26970,26971],{},"使用docker后：",[14,26973,26974],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26976,26977],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[1599,26979,26981],{"id":26980},"_12它是怎么工作的","1.2.它是怎么工作的？",[561,26983,26984,26987],{},[564,26985,26986],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[564,26988,26989,26990,26993],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[480,26991,26992],{},"无论在哪运行都一样稳定"," 。",[1599,26995,26997],{"id":26996},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1756,26999,27000,27010],{},[1759,27001,27002],{},[1762,27003,27004,27007],{},[1765,27005,27006],{"align":24988},"概念",[1765,27008,27009],{"align":24988},"解释",[1802,27011,27012,27020,27028,27036],{},[1762,27013,27014,27017],{},[1807,27015,27016],{"align":24988},"镜像",[1807,27018,27019],{"align":24988},"Image，运行容器的模板，像是一个应用快照",[1762,27021,27022,27025],{},[1807,27023,27024],{"align":24988},"容器",[1807,27026,27027],{"align":24988},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1762,27029,27030,27033],{},[1807,27031,27032],{"align":24988},"Dockerfile",[1807,27034,27035],{"align":24988},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1762,27037,27038,27041],{},[1807,27039,27040],{"align":24988},"仓库",[1807,27042,27043],{"align":24988},"Registry，存放镜像的地方，比如 Docker Hub",[14,27045,27046],{},"抽象化理解:",[14,27048,27049],{},"Docker镜像≈C++类",[14,27051,27052],{},"Docker容器≈C++类实例(即对象)",[14,27054,27055],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,27057,27058],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[1599,27060,27062],{"id":27061},"_14类比理解","1.4.类比理解",[1756,27064,27065,27075],{},[1759,27066,27067],{},[1762,27068,27069,27072],{},[1765,27070,27071],{"align":24988},"传统部署",[1765,27073,27074],{"align":24988},"Docker部署",[1802,27076,27077,27085,27093],{},[1762,27078,27079,27082],{},[1807,27080,27081],{"align":24988},"手动安装依赖、调试版本不一致问题",[1807,27083,27084],{"align":24988},"一次打包环境和代码",[1762,27086,27087,27090],{},[1807,27088,27089],{"align":24988},"程序“裸奔”跑在系统上",[1807,27091,27092],{"align":24988},"程序“穿着容器”隔离运行",[1762,27094,27095,27098],{},[1807,27096,27097],{"align":24988},"容易“在我电脑上能跑”",[1807,27099,27100],{"align":24988},"保证“无论在哪都能跑”",[14,27102,27103,27104],{},"就像快递包裹： ",[480,27105,27106],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[1599,27108,27110],{"id":27109},"_15docker-的核心优势","1.5.Docker 的核心优势",[1756,27112,27113,27123],{},[1759,27114,27115],{},[1762,27116,27117,27120],{},[1765,27118,27119],{"align":24988},"优势",[1765,27121,27122],{"align":24988},"说明",[1802,27124,27125,27133,27141,27149,27157],{},[1762,27126,27127,27130],{},[1807,27128,27129],{"align":24988},"轻量级",[1807,27131,27132],{"align":24988},"基于系统内核共享，启动速度快，占资源少",[1762,27134,27135,27138],{},[1807,27136,27137],{"align":24988},"跨平台",[1807,27139,27140],{"align":24988},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1762,27142,27143,27146],{},[1807,27144,27145],{"align":24988},"易于迁移部署",[1807,27147,27148],{"align":24988},"应用和环境一起封装，不怕依赖不一致",[1762,27150,27151,27154],{},[1807,27152,27153],{"align":24988},"易于版本控制",[1807,27155,27156],{"align":24988},"镜像版本可控，支持回滚",[1762,27158,27159,27162],{},[1807,27160,27161],{"align":24988},"生态丰富",[1807,27163,27164],{"align":24988},"Docker Hub 上有成千上万的现成镜像可用",[574,27166,27167],{},[564,27168,27169],{},"在Linux上可以几乎实现无性能损失。",[14,27171,27172],{},"docker里的发行版和本机共用Linux内核。",[14,27174,27175],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[574,27177,27178],{},[564,27179,27180],{},"可以快速部署在绝大多数Linux发行版",[14,27182,27183],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[574,27185,27186],{},[564,27187,27188],{},"配置环境简单",[14,27190,27191],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,27193,27194],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[574,27196,27197],{},[564,27198,27161],{},[14,27200,27201],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,27203,27204],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[1599,27206,27208],{"id":27207},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[561,27210,27211,27214,27217,27220],{},[564,27212,27213],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[564,27215,27216],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[564,27218,27219],{},"微服务架构：每个服务一个容器，灵活组合",[564,27221,27222],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":28,"searchDepth":51,"depth":51,"links":27224},[27225,27226,27227,27228,27229,27230],{"id":26936,"depth":57,"text":26937},{"id":26980,"depth":57,"text":26981},{"id":26996,"depth":57,"text":26997},{"id":27061,"depth":57,"text":27062},{"id":27109,"depth":57,"text":27110},{"id":27207,"depth":57,"text":27208},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26928,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27237,"title":27238,"body":27239,"description":28,"extension":1557,"meta":27972,"navigation":159,"path":27973,"seo":27974,"stem":27975,"__hash__":27976},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27240,"toc":27967},[27241,27244,27248,27251,27254,27260,27266,27270,27279,27282,27339,27342,27393,27396,27479,27482,27519,27523,27534,27547,27554,27557,27637,27640,27690,27693,27716,27720,27727,27730,27746,27752,27755,27771,27777,27780,27796,27810,27816,27836,27842,27845,27857,27863,27866,27880,27886,27889,27909,27914,27917,27920,27924,27927,27930,27933,27940,27943,27946,27949,27954,27959,27964],[10,27242,27238],{"id":27243},"_2安装docker",[1599,27245,27247],{"id":27246},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,27249,27250],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,27252,27253],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,27255,27256],{},[126,27257,27258],{"href":27258,"rel":27259},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25117],[14,27261,27262],{},[126,27263,27264],{"href":27264,"rel":27265},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25117],[23249,27267,27269],{"id":27268},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,27271,27272,27273,27278],{},"以下内容根据 ",[126,27274,27277],{"href":27275,"rel":27276},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25117],"官方文档"," 修改而来。",[14,27280,27281],{},"如果你过去安装过 docker，先删掉：",[23,27283,27285],{"className":25074,"code":27284,"language":25076,"meta":28,"style":28},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[30,27286,27287],{"__ignoreMap":28},[33,27288,27289,27291,27294,27297,27300,27303,27306,27309,27312,27315,27318,27321,27324,27327,27330,27333,27336],{"class":35,"line":36},[33,27290,4435],{"class":39},[33,27292,27293],{"class":47}," pkg ",[33,27295,27296],{"class":39},"in",[33,27298,27299],{"class":119}," docker.io",[33,27301,27302],{"class":119}," docker-doc",[33,27304,27305],{"class":119}," docker-compose",[33,27307,27308],{"class":119}," docker-compose-v2",[33,27310,27311],{"class":119}," podman-docker",[33,27313,27314],{"class":119}," containerd",[33,27316,27317],{"class":119}," runc",[33,27319,27320],{"class":47},"; ",[33,27322,27323],{"class":39},"do",[33,27325,27326],{"class":43}," sudo",[33,27328,27329],{"class":119}," apt-get",[33,27331,27332],{"class":119}," remove",[33,27334,27335],{"class":47}," $pkg; ",[33,27337,27338],{"class":39},"done\n",[14,27340,27341],{},"首先安装依赖和GPG：",[23,27343,27347],{"className":27344,"code":27345,"language":27346,"meta":28,"style":28},"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",[30,27348,27349,27354,27359,27364,27369,27374,27379,27383,27388],{"__ignoreMap":28},[33,27350,27351],{"class":35,"line":36},[33,27352,27353],{},"# Add Docker's official GPG key:\n",[33,27355,27356],{"class":35,"line":51},[33,27357,27358],{},"sudo apt-get update\n",[33,27360,27361],{"class":35,"line":57},[33,27362,27363],{},"sudo apt-get install ca-certificates curl\n",[33,27365,27366],{"class":35,"line":64},[33,27367,27368],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[33,27370,27371],{"class":35,"line":83},[33,27372,27373],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[33,27375,27376],{"class":35,"line":89},[33,27377,27378],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[33,27380,27381],{"class":35,"line":98},[33,27382,160],{"emptyLinePlaceholder":159},[33,27384,27385],{"class":35,"line":110},[33,27386,27387],{},"# 如果上面这行报错就弄下面这行\n",[33,27389,27390],{"class":35,"line":134},[33,27391,27392],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,27394,27395],{},"信任 Docker 的 GPG 公钥并添加仓库：",[23,27397,27399],{"className":25074,"code":27398,"language":25076,"meta":28,"style":28},"# 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",[30,27400,27401,27406,27412,27429,27462],{"__ignoreMap":28},[33,27402,27403],{"class":35,"line":36},[33,27404,27405],{"class":60},"# Add the repository to Apt sources:\n",[33,27407,27408,27410],{"class":35,"line":51},[33,27409,26378],{"class":76},[33,27411,25931],{"class":76},[33,27413,27414,27417,27420,27423,27426],{"class":35,"line":57},[33,27415,27416],{"class":119},"  \"deb [arch=$(",[33,27418,27419],{"class":43},"dpkg",[33,27421,27422],{"class":76}," --print-architecture",[33,27424,27425],{"class":119},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[33,27427,27428],{"class":76},"\\\n",[33,27430,27431,27434,27436,27438,27441,27444,27446,27448,27451,27453,27455,27458,27460],{"class":35,"line":64},[33,27432,27433],{"class":119},"  \"",[33,27435,26352],{"class":47},[33,27437,2158],{"class":76},[33,27439,27440],{"class":119}," \u002Fetc\u002Fos-release",[33,27442,27443],{"class":47}," && ",[33,27445,26378],{"class":76},[33,27447,10975],{"class":119},[33,27449,27450],{"class":47},"$VERSION_CODENAME",[33,27452,1866],{"class":119},[33,27454,352],{"class":47},[33,27456,27457],{"class":119},"\" stable\"",[33,27459,26362],{"class":39},[33,27461,25931],{"class":76},[33,27463,27464,27467,27470,27473,27476],{"class":35,"line":83},[33,27465,27466],{"class":43},"  sudo",[33,27468,27469],{"class":119}," tee",[33,27471,27472],{"class":119}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[33,27474,27475],{"class":39}," >",[33,27477,27478],{"class":119}," \u002Fdev\u002Fnull\n",[14,27480,27481],{},"最后安装",[23,27483,27485],{"className":25074,"code":27484,"language":25076,"meta":28,"style":28},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,27486,27487,27496],{"__ignoreMap":28},[33,27488,27489,27491,27493],{"class":35,"line":36},[33,27490,25829],{"class":43},[33,27492,27329],{"class":119},[33,27494,27495],{"class":119}," update\n",[33,27497,27498,27500,27502,27504,27507,27510,27513,27516],{"class":35,"line":51},[33,27499,25829],{"class":43},[33,27501,27329],{"class":119},[33,27503,25086],{"class":119},[33,27505,27506],{"class":119}," docker-ce",[33,27508,27509],{"class":119}," docker-ce-cli",[33,27511,27512],{"class":119}," containerd.io",[33,27514,27515],{"class":119}," docker-buildx-plugin",[33,27517,27518],{"class":119}," docker-compose-plugin\n",[23249,27520,27522],{"id":27521},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,27524,27525,27526,27529,27530,27533],{},"查看自己自己包管理工具版本（dnf是 ",[480,27527,27528],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[480,27531,27532],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[23,27535,27537],{"className":25074,"code":27536,"language":25076,"meta":28,"style":28},"dnf --version\n",[30,27538,27539],{"__ignoreMap":28},[33,27540,27541,27544],{"class":35,"line":36},[33,27542,27543],{"class":43},"dnf",[33,27545,27546],{"class":76}," --version\n",[14,27548,27272,27549,27553],{},[126,27550,27277],{"href":27551,"rel":27552},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25117]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,27555,27556],{},"如果你之前安装过 docker，请先删掉",[23,27558,27560],{"className":25074,"code":27559,"language":25076,"meta":28,"style":28},"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",[30,27561,27562,27576,27583,27590,27597,27604,27611,27618,27625,27632],{"__ignoreMap":28},[33,27563,27564,27566,27569,27571,27574],{"class":35,"line":36},[33,27565,25829],{"class":43},[33,27567,27568],{"class":119}," dnf",[33,27570,27332],{"class":119},[33,27572,27573],{"class":119}," docker",[33,27575,25931],{"class":76},[33,27577,27578,27581],{"class":35,"line":51},[33,27579,27580],{"class":119},"                  docker-client",[33,27582,25931],{"class":76},[33,27584,27585,27588],{"class":35,"line":57},[33,27586,27587],{"class":119},"                  docker-client-latest",[33,27589,25931],{"class":76},[33,27591,27592,27595],{"class":35,"line":64},[33,27593,27594],{"class":119},"                  docker-common",[33,27596,25931],{"class":76},[33,27598,27599,27602],{"class":35,"line":83},[33,27600,27601],{"class":119},"                  docker-latest",[33,27603,25931],{"class":76},[33,27605,27606,27609],{"class":35,"line":89},[33,27607,27608],{"class":119},"                  docker-latest-logrotate",[33,27610,25931],{"class":76},[33,27612,27613,27616],{"class":35,"line":98},[33,27614,27615],{"class":119},"                  docker-logrotate",[33,27617,25931],{"class":76},[33,27619,27620,27623],{"class":35,"line":110},[33,27621,27622],{"class":119},"                  docker-selinux",[33,27624,25931],{"class":76},[33,27626,27627,27630],{"class":35,"line":134},[33,27628,27629],{"class":119},"                  docker-engine-selinux",[33,27631,25931],{"class":76},[33,27633,27634],{"class":35,"line":156},[33,27635,27636],{"class":119},"                  docker-engine\n",[14,27638,27639],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[23,27641,27643],{"className":25074,"code":27642,"language":25076,"meta":28,"style":28},"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",[30,27644,27645,27659,27674],{"__ignoreMap":28},[33,27646,27647,27649,27651,27654,27656],{"class":35,"line":36},[33,27648,25829],{"class":43},[33,27650,27568],{"class":119},[33,27652,27653],{"class":76}," -y",[33,27655,25086],{"class":119},[33,27657,27658],{"class":119}," dnf-plugins-core\n",[33,27660,27661,27663,27665,27668,27671],{"class":35,"line":51},[33,27662,25829],{"class":43},[33,27664,27568],{"class":119},[33,27666,27667],{"class":119}," config-manager",[33,27669,27670],{"class":119}," addrepo",[33,27672,27673],{"class":76}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[33,27675,27676,27678,27681,27684,27687],{"class":35,"line":57},[33,27677,25829],{"class":43},[33,27679,27680],{"class":119}," sed",[33,27682,27683],{"class":76}," -i",[33,27685,27686],{"class":119}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[33,27688,27689],{"class":119}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,27691,27692],{},"最后安装：",[23,27694,27696],{"className":25074,"code":27695,"language":25076,"meta":28,"style":28},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[30,27697,27698],{"__ignoreMap":28},[33,27699,27700,27702,27704,27706,27708,27710,27712,27714],{"class":35,"line":36},[33,27701,25829],{"class":43},[33,27703,27568],{"class":119},[33,27705,25086],{"class":119},[33,27707,27506],{"class":119},[33,27709,27509],{"class":119},[33,27711,27512],{"class":119},[33,27713,27515],{"class":119},[33,27715,27518],{"class":119},[1599,27717,27719],{"id":27718},"_22配置环境","2.2.配置环境",[23249,27721,27723,27726],{"id":27722},"_221检查-docker-服务状态",[480,27724,27725],{},"2.2.1.检查 Docker 服务状态"," ：",[14,27728,27729],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[23,27731,27733],{"className":25074,"code":27732,"language":25076,"meta":28,"style":28},"systemctl status docker\n",[30,27734,27735],{"__ignoreMap":28},[33,27736,27737,27740,27743],{"class":35,"line":36},[33,27738,27739],{"class":43},"systemctl",[33,27741,27742],{"class":119}," status",[33,27744,27745],{"class":119}," docker\n",[23249,27747,27749,27726],{"id":27748},"_222启动-docker-服务",[480,27750,27751],{},"2.2.2.启动 Docker 服务",[14,27753,27754],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[23,27756,27758],{"className":25074,"code":27757,"language":25076,"meta":28,"style":28},"sudo systemctl start docker\n",[30,27759,27760],{"__ignoreMap":28},[33,27761,27762,27764,27767,27769],{"class":35,"line":36},[33,27763,25829],{"class":43},[33,27765,27766],{"class":119}," systemctl",[33,27768,5583],{"class":119},[33,27770,27745],{"class":119},[23249,27772,27774,27726],{"id":27773},"_223设置-docker-开机自启",[480,27775,27776],{},"2.2.3.设置 Docker 开机自启",[14,27778,27779],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[23,27781,27783],{"className":25074,"code":27782,"language":25076,"meta":28,"style":28},"sudo systemctl enable docker\n",[30,27784,27785],{"__ignoreMap":28},[33,27786,27787,27789,27791,27794],{"class":35,"line":36},[33,27788,25829],{"class":43},[33,27790,27766],{"class":119},[33,27792,27793],{"class":119}," enable",[33,27795,27745],{"class":119},[23249,27797,27799,15046,27802,15046,27807,27726],{"id":27798},"_224将用户添加到-docker-组",[480,27800,27801],{},"2.2.4.将用户添加到",[480,27803,27804],{},[30,27805,27806],{},"docker",[480,27808,27809],{},"组",[14,27811,27812,27813,27815],{},"使用以下命令将当前用户添加到 ",[30,27814,27806],{}," 组：",[23,27817,27819],{"className":25074,"code":27818,"language":25076,"meta":28,"style":28},"sudo usermod -aG docker $USER\n",[30,27820,27821],{"__ignoreMap":28},[33,27822,27823,27825,27828,27831,27833],{"class":35,"line":36},[33,27824,25829],{"class":43},[33,27826,27827],{"class":119}," usermod",[33,27829,27830],{"class":76}," -aG",[33,27832,27573],{"class":119},[33,27834,27835],{"class":47}," $USER\n",[23249,27837,27839,27726],{"id":27838},"_225退出并重新登录",[480,27840,27841],{},"2.2.5.退出并重新登录",[14,27843,27844],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[23,27846,27848],{"className":25074,"code":27847,"language":25076,"meta":28,"style":28},"newgrp docker\n",[30,27849,27850],{"__ignoreMap":28},[33,27851,27852,27855],{"class":35,"line":36},[33,27853,27854],{"class":43},"newgrp",[33,27856,27745],{"class":119},[23249,27858,27860,27726],{"id":27859},"_226重新启动-docker-服务如果需要",[480,27861,27862],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,27864,27865],{},"确保 Docker 服务正在运行，可以使用以下命令：",[23,27867,27868],{"className":25074,"code":27757,"language":25076,"meta":28,"style":28},[30,27869,27870],{"__ignoreMap":28},[33,27871,27872,27874,27876,27878],{"class":35,"line":36},[33,27873,25829],{"class":43},[33,27875,27766],{"class":119},[33,27877,5583],{"class":119},[33,27879,27745],{"class":119},[23249,27881,27883,27726],{"id":27882},"_227重启电脑后检查-docker-服务状态",[480,27884,27885],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,27887,27888],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[23,27890,27892],{"className":25074,"code":27891,"language":25076,"meta":28,"style":28},"sudo reboot\nsystemctl status docker\n",[30,27893,27894,27901],{"__ignoreMap":28},[33,27895,27896,27898],{"class":35,"line":36},[33,27897,25829],{"class":43},[33,27899,27900],{"class":119}," reboot\n",[33,27902,27903,27905,27907],{"class":35,"line":51},[33,27904,27739],{"class":43},[33,27906,27742],{"class":119},[33,27908,27745],{"class":119},[14,27910,27911],{},[2918,27912],{"alt":28,"src":27913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27915,27916],{},"第三行显示enabled说明开机自启动成功",[14,27918,27919],{},"按q退出",[1599,27921,27923],{"id":27922},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27925,27926],{},"优先使用linux来使用docker是比较好的",[14,27928,27929],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27931,27932],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27934,27935,27936],{},"官方下载安装:",[126,27937,27938],{"href":27938,"rel":27939},"https:\u002F\u002Fwww.docker.com\u002F",[25117],[14,27941,27942],{},"Windows的Docker显卡直通与USB直通:",[14,27944,27945],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27947,27948],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27950,27951],{},[2918,27952],{"alt":28,"src":27953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27955,27956],{},[2918,27957],{"alt":28,"src":27958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27960,27961],{},[2918,27962],{"alt":28,"src":27963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1544,27965,27966],{},"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":28,"searchDepth":51,"depth":51,"links":27968},[27969,27970,27971],{"id":27246,"depth":57,"text":27247},{"id":27718,"depth":57,"text":27719},{"id":27922,"depth":57,"text":27923},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27238,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27978,"title":27979,"body":27980,"description":27987,"extension":1557,"meta":28680,"navigation":159,"path":28681,"seo":28682,"stem":28683,"__hash__":28684},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27981,"toc":28674},[27982,27985,27988,27992,27997,28002,28005,28033,28038,28047,28050,28055,28059,28066,28071,28077,28081,28084,28088,28093,28185,28190,28208,28213,28234,28239,28255,28259,28264,28293,28298,28344,28349,28393,28401,28418,28423,28439,28444,28458,28461,28464,28467,28470,28499,28502,28507,28511,28514,28517,28523,28526,28529,28532,28594,28601,28606,28609,28627,28631,28634,28651,28654,28657,28671],[10,27983,27979],{"id":27984},"_3docker直通",[14,27986,27987],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[1599,27989,27991],{"id":27990},"_31usb直通","3.1.USB直通",[14,27993,27994],{},[2918,27995],{"alt":28,"src":27996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[574,27998,27999],{},[564,28000,28001],{},"方法一(不是很推荐新手)：",[14,28003,28004],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[23,28006,28008],{"className":25074,"code":28007,"language":25076,"meta":28,"style":28},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[30,28009,28010,28018,28023],{"__ignoreMap":28},[33,28011,28012,28015],{"class":35,"line":36},[33,28013,28014],{"class":43},"ls",[33,28016,28017],{"class":119}," \u002Fdev\n",[33,28019,28020],{"class":35,"line":51},[33,28021,28022],{"class":60},"#例如\n",[33,28024,28025,28028,28030],{"class":35,"line":57},[33,28026,28027],{"class":47},"--device",[33,28029,73],{"class":39},[33,28031,28032],{"class":119},"\u002Fdev\u002Ftty_USB0\n",[574,28034,28035],{"start":51},[564,28036,28037],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[23,28039,28041],{"className":25074,"code":28040,"language":25076,"meta":28,"style":28},"--privileged\n",[30,28042,28043],{"__ignoreMap":28},[33,28044,28045],{"class":35,"line":36},[33,28046,28040],{"class":43},[14,28048,28049],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,28051,28052],{},[2918,28053],{"alt":28,"src":28054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[1599,28056,28058],{"id":28057},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,28060,28061,28062,28065],{},"NVIDIA Container Toolkit使用户 ",[480,28063,28064],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,28067,28068],{},[2918,28069],{"alt":28,"src":28070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,28072,28073],{},[126,28074,28075],{"href":28075,"rel":28076},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25117],[23249,28078,28080],{"id":28079},"_321安装","3.2.1.安装",[14,28082,28083],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24161,28085,28087],{"id":28086},"_3211ubuntu","3.2.1.1.Ubuntu",[574,28089,28090],{},[564,28091,28092],{},"配置存储库 并更新",[23,28094,28096],{"className":25074,"code":28095,"language":25076,"meta":28,"style":28},"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",[30,28097,28098,28127,28147,28159,28171,28177],{"__ignoreMap":28},[33,28099,28100,28103,28106,28109,28111,28113,28116,28119,28122,28125],{"class":35,"line":36},[33,28101,28102],{"class":43},"curl",[33,28104,28105],{"class":76}," -fsSL",[33,28107,28108],{"class":119}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[33,28110,26362],{"class":39},[33,28112,27326],{"class":43},[33,28114,28115],{"class":119}," gpg",[33,28117,28118],{"class":76}," --dearmor",[33,28120,28121],{"class":76}," -o",[33,28123,28124],{"class":119}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[33,28126,25931],{"class":76},[33,28128,28129,28132,28134,28137,28140,28143,28145],{"class":35,"line":51},[33,28130,28131],{"class":47},"  && ",[33,28133,28102],{"class":43},[33,28135,28136],{"class":76}," -s",[33,28138,28139],{"class":76}," -L",[33,28141,28142],{"class":119}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[33,28144,26362],{"class":39},[33,28146,25931],{"class":76},[33,28148,28149,28152,28155,28157],{"class":35,"line":57},[33,28150,28151],{"class":43},"    sed",[33,28153,28154],{"class":119}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[33,28156,26362],{"class":39},[33,28158,25931],{"class":76},[33,28160,28161,28164,28166,28169],{"class":35,"line":64},[33,28162,28163],{"class":43},"    sudo",[33,28165,27469],{"class":119},[33,28167,28168],{"class":119}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[33,28170,25931],{"class":76},[33,28172,28173,28175],{"class":35,"line":83},[33,28174,28131],{"class":47},[33,28176,27428],{"class":76},[33,28178,28179,28181,28183],{"class":35,"line":89},[33,28180,28163],{"class":43},[33,28182,27329],{"class":119},[33,28184,27495],{"class":119},[574,28186,28187],{"start":51},[564,28188,28189],{},"安装nvidia-docker2",[23,28191,28193],{"className":25074,"code":28192,"language":25076,"meta":28,"style":28},"sudo apt-get install -y nvidia-docker2\n",[30,28194,28195],{"__ignoreMap":28},[33,28196,28197,28199,28201,28203,28205],{"class":35,"line":36},[33,28198,25829],{"class":43},[33,28200,27329],{"class":119},[33,28202,25086],{"class":119},[33,28204,27653],{"class":76},[33,28206,28207],{"class":119}," nvidia-docker2\n",[574,28209,28210],{"start":57},[564,28211,28212],{},"使用nvidia-ctk命令配置container runtime",[23,28214,28216],{"className":25074,"code":28215,"language":25076,"meta":28,"style":28},"sudo nvidia-ctk runtime configure --runtime=docker\n",[30,28217,28218],{"__ignoreMap":28},[33,28219,28220,28222,28225,28228,28231],{"class":35,"line":36},[33,28221,25829],{"class":43},[33,28223,28224],{"class":119}," nvidia-ctk",[33,28226,28227],{"class":119}," runtime",[33,28229,28230],{"class":119}," configure",[33,28232,28233],{"class":76}," --runtime=docker\n",[574,28235,28236],{"start":64},[564,28237,28238],{},"重启docker服务:",[23,28240,28242],{"className":25074,"code":28241,"language":25076,"meta":28,"style":28},"sudo systemctl restart docker\n",[30,28243,28244],{"__ignoreMap":28},[33,28245,28246,28248,28250,28253],{"class":35,"line":36},[33,28247,25829],{"class":43},[33,28249,27766],{"class":119},[33,28251,28252],{"class":119}," restart",[33,28254,27745],{"class":119},[24161,28256,28258],{"id":28257},"_3212fedora","3.2.1.2.Fedora",[574,28260,28261],{},[564,28262,28263],{},"配置存储库",[23,28265,28267],{"className":25074,"code":28266,"language":25076,"meta":28,"style":28},"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",[30,28268,28269,28284],{"__ignoreMap":28},[33,28270,28271,28273,28275,28277,28280,28282],{"class":35,"line":36},[33,28272,28102],{"class":43},[33,28274,28136],{"class":76},[33,28276,28139],{"class":76},[33,28278,28279],{"class":119}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[33,28281,26362],{"class":39},[33,28283,25931],{"class":76},[33,28285,28286,28288,28290],{"class":35,"line":51},[33,28287,25829],{"class":43},[33,28289,27469],{"class":119},[33,28291,28292],{"class":119}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[574,28294,28295],{"start":51},[564,28296,28297],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[23,28299,28301],{"className":25074,"code":28300,"language":25076,"meta":28,"style":28},"# 如果是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",[30,28302,28303,28308,28322,28326,28331],{"__ignoreMap":28},[33,28304,28305],{"class":35,"line":36},[33,28306,28307],{"class":60},"# 如果是RHEL或者Rocky（DNF4）\n",[33,28309,28310,28312,28314,28316,28319],{"class":35,"line":51},[33,28311,25829],{"class":43},[33,28313,27568],{"class":119},[33,28315,27667],{"class":119},[33,28317,28318],{"class":76}," --add-repo",[33,28320,28321],{"class":119}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[33,28323,28324],{"class":35,"line":57},[33,28325,160],{"emptyLinePlaceholder":159},[33,28327,28328],{"class":35,"line":64},[33,28329,28330],{"class":60},"# 如果是Feodra41+（DNF5）\n",[33,28332,28333,28335,28337,28339,28341],{"class":35,"line":83},[33,28334,25829],{"class":43},[33,28336,27568],{"class":119},[33,28338,27667],{"class":119},[33,28340,27670],{"class":119},[33,28342,28343],{"class":76}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[574,28345,28346],{"start":57},[564,28347,28348],{},"安装NVIDIA Container Toolki包",[23,28350,28352],{"className":25074,"code":28351,"language":25076,"meta":28,"style":28},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[30,28353,28354,28359,28372,28376,28381],{"__ignoreMap":28},[33,28355,28356],{"class":35,"line":36},[33,28357,28358],{"class":60},"# 如果是RHEL或者Rocky\n",[33,28360,28361,28363,28365,28367,28369],{"class":35,"line":51},[33,28362,25829],{"class":43},[33,28364,27568],{"class":119},[33,28366,25086],{"class":119},[33,28368,27653],{"class":76},[33,28370,28371],{"class":119}," nvidia-container-toolkit\n",[33,28373,28374],{"class":35,"line":57},[33,28375,160],{"emptyLinePlaceholder":159},[33,28377,28378],{"class":35,"line":64},[33,28379,28380],{"class":60},"# 如果是Fedora\n",[33,28382,28383,28385,28387,28389,28391],{"class":35,"line":83},[33,28384,25829],{"class":43},[33,28386,27568],{"class":119},[33,28388,25086],{"class":119},[33,28390,27653],{"class":76},[33,28392,28371],{"class":119},[574,28394,28395],{"start":64},[564,28396,28397,28398,28400],{},"安装nvidia-docker2 ： 在Fedora上使用",[30,28399,27543],{},"进行安装",[23,28402,28404],{"className":25074,"code":28403,"language":25076,"meta":28,"style":28},"sudo dnf install -y nvidia-docker2\n",[30,28405,28406],{"__ignoreMap":28},[33,28407,28408,28410,28412,28414,28416],{"class":35,"line":36},[33,28409,25829],{"class":43},[33,28411,27568],{"class":119},[33,28413,25086],{"class":119},[33,28415,27653],{"class":76},[33,28417,28207],{"class":119},[574,28419,28420],{"start":83},[564,28421,28422],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[23,28424,28425],{"className":25074,"code":28215,"language":25076,"meta":28,"style":28},[30,28426,28427],{"__ignoreMap":28},[33,28428,28429,28431,28433,28435,28437],{"class":35,"line":36},[33,28430,25829],{"class":43},[33,28432,28224],{"class":119},[33,28434,28227],{"class":119},[33,28436,28230],{"class":119},[33,28438,28233],{"class":76},[574,28440,28441],{"start":89},[564,28442,28443],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[23,28445,28446],{"className":25074,"code":28241,"language":25076,"meta":28,"style":28},[30,28447,28448],{"__ignoreMap":28},[33,28449,28450,28452,28454,28456],{"class":35,"line":36},[33,28451,25829],{"class":43},[33,28453,27766],{"class":119},[33,28455,28252],{"class":119},[33,28457,27745],{"class":119},[14,28459,28460],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,28462,28463],{},"方法：",[14,28465,28466],{},"1️⃣nvidia-smi",[14,28468,28469],{},"2️⃣运行nvidia cuda 容器进行测试",[23,28471,28473],{"className":25074,"code":28472,"language":25076,"meta":28,"style":28},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[30,28474,28475],{"__ignoreMap":28},[33,28476,28477,28479,28481,28484,28487,28490,28493,28496],{"class":35,"line":36},[33,28478,25829],{"class":43},[33,28480,27573],{"class":119},[33,28482,28483],{"class":119}," run",[33,28485,28486],{"class":76}," --rm",[33,28488,28489],{"class":76}," --gpus",[33,28491,28492],{"class":119}," all",[33,28494,28495],{"class":119}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[33,28497,28498],{"class":119}," nvidia-smi\n",[14,28500,28501],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,28503,28504],{},[2918,28505],{"alt":28,"src":28506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[1599,28508,28510],{"id":28509},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,28512,28513],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,28515,28516],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,28518,28519],{},[126,28520,28521],{"href":28521,"rel":28522},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25117],[14,28524,28525],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,28527,28528],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,28530,28531],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1756,28533,28534,28550],{},[1759,28535,28536],{},[1762,28537,28538,28541,28544,28547],{},[1765,28539,28540],{"align":24988},"镜像类型",[1765,28542,28543],{"align":24988},"适用场景",[1765,28545,28546],{"align":24988},"示例标签",[1765,28548,28549],{"align":24988},"大小",[1802,28551,28552,28566,28580],{},[1762,28553,28554,28557,28560,28563],{},[1807,28555,28556],{"align":24988},"base",[1807,28558,28559],{"align":24988},"仅需 CUDA 运行时库",[1807,28561,28562],{"align":24988},"12.4.0-base-ubuntu22.04",[1807,28564,28565],{"align":24988},"~240MB",[1762,28567,28568,28571,28574,28577],{},[1807,28569,28570],{"align":24988},"runtime",[1807,28572,28573],{"align":24988},"部署编译后的应用（含数学库）",[1807,28575,28576],{"align":24988},"12.4.0-runtime-ubuntu22.04",[1807,28578,28579],{"align":24988},"~2GB",[1762,28581,28582,28585,28588,28591],{},[1807,28583,28584],{"align":24988},"devel",[1807,28586,28587],{"align":24988},"开发环境（含编译工具）",[1807,28589,28590],{"align":24988},"12.4.0-devel-ubuntu22.04",[1807,28592,28593],{"align":24988},"~3GB",[14,28595,28596,28597,28600],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[30,28598,28599],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,28602,28603],{},[2918,28604],{"alt":28,"src":28605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,28607,28608],{},"在dockerfile里就可以开头这么写：",[23,28610,28612],{"className":25074,"code":28611,"language":25076,"meta":28,"style":28},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[30,28613,28614,28619],{"__ignoreMap":28},[33,28615,28616],{"class":35,"line":36},[33,28617,28618],{"class":60},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[33,28620,28621,28624],{"class":35,"line":51},[33,28622,28623],{"class":43},"FROM",[33,28625,28626],{"class":119}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[1599,28628,28630],{"id":28629},"_34配置以太网","3.4.配置以太网",[14,28632,28633],{},"指定网络模式",[23,28635,28637],{"className":25074,"code":28636,"language":25076,"meta":28,"style":28},"--net=host \\\n",[30,28638,28639],{"__ignoreMap":28},[33,28640,28641,28644,28646,28649],{"class":35,"line":36},[33,28642,28643],{"class":47},"--net",[33,28645,73],{"class":39},[33,28647,28648],{"class":119},"host",[33,28650,25931],{"class":43},[14,28652,28653],{},"启动参数里加上这行即可。具体在下方",[14,28655,28656],{},"--net选项：指定网络模式，该选项有以下参数可选：",[561,28658,28659,28662,28665,28668],{},[564,28660,28661],{},"--net=bridge:默认选项，表示连接到默认的网桥",[564,28663,28664],{},"--net=host:容器使用宿主机的网络",[564,28666,28667],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[564,28669,28670],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1544,28672,28673],{},"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":28,"searchDepth":51,"depth":51,"links":28675},[28676,28677,28678,28679],{"id":27990,"depth":57,"text":27991},{"id":28057,"depth":57,"text":28058},{"id":28509,"depth":57,"text":28510},{"id":28629,"depth":57,"text":28630},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27979,"description":27987},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28686,"title":28687,"body":28688,"description":28695,"extension":1557,"meta":28701,"navigation":159,"path":28702,"seo":28703,"stem":28704,"__hash__":28705},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28689,"toc":28699},[28690,28693,28696],[10,28691,28687],{"id":28692},"_4dockerhub换源",[14,28694,28695],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,28697,28698],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":28,"searchDepth":51,"depth":51,"links":28700},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28687,"description":28695},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28707,"title":28708,"body":28709,"description":28,"extension":1557,"meta":29721,"navigation":159,"path":29722,"seo":29723,"stem":29724,"__hash__":29725},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28710,"toc":29716},[28711,28714,28718,28724,28728,28731,29071,29074,29077,29080,29085,29090,29093,29096,29099,29102,29121,29124,29135,29141,29323,29333,29349,29612,29614,29639,29654,29663,29713],[10,28712,28708],{"id":28713},"_5docker命令学习",[1599,28715,28717],{"id":28716},"_51参考文档","5.1.参考文档",[14,28719,28720],{},[126,28721,28722],{"href":28722,"rel":28723},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25117],[1599,28725,28727],{"id":28726},"_52常用命令","5.2.常用命令",[14,28729,28730],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1756,28732,28733,28746],{},[1759,28734,28735],{},[1762,28736,28737,28740,28743],{},[1765,28738,28739],{"align":24988},"命令",[1765,28741,28742],{"align":24988},"描述",[1765,28744,28745],{"align":24988},"示例",[1802,28747,28748,28759,28770,28781,28792,28803,28814,28825,28835,28846,28857,28868,28878,28889,28900,28911,28921,28931,28941,28951,28962,28973,28984,28995,29006,29017,29027,29038,29049,29060],{},[1762,28749,28750,28753,28756],{},[1807,28751,28752],{"align":24988},"docker run",[1807,28754,28755],{"align":24988},"创建并启动一个新的容器。",[1807,28757,28758],{"align":24988},"docker run -it ubuntu bash",[1762,28760,28761,28764,28767],{},[1807,28762,28763],{"align":24988},"docker build",[1807,28765,28766],{"align":24988},"通过指定的 Dockerfile 创建一个新的镜像。",[1807,28768,28769],{"align":24988},"docker build -t myimage .",[1762,28771,28772,28775,28778],{},[1807,28773,28774],{"align":24988},"docker pull",[1807,28776,28777],{"align":24988},"从 Docker 仓库拉取镜像。",[1807,28779,28780],{"align":24988},"docker pull ubuntu",[1762,28782,28783,28786,28789],{},[1807,28784,28785],{"align":24988},"docker push",[1807,28787,28788],{"align":24988},"将本地镜像推送到 Docker 仓库。",[1807,28790,28791],{"align":24988},"docker push myimage",[1762,28793,28794,28797,28800],{},[1807,28795,28796],{"align":24988},"docker stop",[1807,28798,28799],{"align":24988},"停止一个正在运行的容器。",[1807,28801,28802],{"align":24988},"docker stop container_id",[1762,28804,28805,28808,28811],{},[1807,28806,28807],{"align":24988},"docker start",[1807,28809,28810],{"align":24988},"启动一个已经存在的容器。",[1807,28812,28813],{"align":24988},"docker start container_id",[1762,28815,28816,28819,28822],{},[1807,28817,28818],{"align":24988},"docker restart",[1807,28820,28821],{"align":24988},"重新启动容器。",[1807,28823,28824],{"align":24988},"docker restart container_id",[1762,28826,28827,28830,28833],{},[1807,28828,28829],{"align":24988},"docker ps",[1807,28831,28832],{"align":24988},"列出当前正在运行的容器。",[1807,28834,28829],{"align":24988},[1762,28836,28837,28840,28843],{},[1807,28838,28839],{"align":24988},"docker rm",[1807,28841,28842],{"align":24988},"删除一个或多个停止的容器。",[1807,28844,28845],{"align":24988},"docker rm container_id",[1762,28847,28848,28851,28854],{},[1807,28849,28850],{"align":24988},"docker exec",[1807,28852,28853],{"align":24988},"在一个正在运行的容器中执行命令。",[1807,28855,28856],{"align":24988},"docker exec -it container_id bash",[1762,28858,28859,28862,28865],{},[1807,28860,28861],{"align":24988},"docker logs",[1807,28863,28864],{"align":24988},"查看容器的日志输出。",[1807,28866,28867],{"align":24988},"docker logs container_id",[1762,28869,28870,28873,28876],{},[1807,28871,28872],{"align":24988},"docker images",[1807,28874,28875],{"align":24988},"列出本地所有镜像。",[1807,28877,28872],{"align":24988},[1762,28879,28880,28883,28886],{},[1807,28881,28882],{"align":24988},"docker rmi",[1807,28884,28885],{"align":24988},"删除一个或多个镜像。",[1807,28887,28888],{"align":24988},"docker rmi myimage",[1762,28890,28891,28894,28897],{},[1807,28892,28893],{"align":24988},"docker network",[1807,28895,28896],{"align":24988},"管理 Docker 网络。",[1807,28898,28899],{"align":24988},"docker network ls",[1762,28901,28902,28905,28908],{},[1807,28903,28904],{"align":24988},"docker volume",[1807,28906,28907],{"align":24988},"管理 Docker 数据卷。",[1807,28909,28910],{"align":24988},"docker volume ls",[1762,28912,28913,28916,28919],{},[1807,28914,28915],{"align":24988},"docker-compose up",[1807,28917,28918],{"align":24988},"启动 docker-compose.yml 中定义的所有服务。",[1807,28920,28915],{"align":24988},[1762,28922,28923,28926,28929],{},[1807,28924,28925],{"align":24988},"docker-compose down",[1807,28927,28928],{"align":24988},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1807,28930,28925],{"align":24988},[1762,28932,28933,28936,28939],{},[1807,28934,28935],{"align":24988},"docker info",[1807,28937,28938],{"align":24988},"显示 Docker 系统的详细信息。",[1807,28940,28935],{"align":24988},[1762,28942,28943,28946,28949],{},[1807,28944,28945],{"align":24988},"docker stats",[1807,28947,28948],{"align":24988},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1807,28950,28945],{"align":24988},[1762,28952,28953,28956,28959],{},[1807,28954,28955],{"align":24988},"docker inspect",[1807,28957,28958],{"align":24988},"查看容器或镜像的详细信息（JSON 格式）。",[1807,28960,28961],{"align":24988},"docker inspect container_id",[1762,28963,28964,28967,28970],{},[1807,28965,28966],{"align":24988},"docker save",[1807,28968,28969],{"align":24988},"将一个镜像保存为 tar 文件。",[1807,28971,28972],{"align":24988},"docker save -o myimage.tar myimage",[1762,28974,28975,28978,28981],{},[1807,28976,28977],{"align":24988},"docker load",[1807,28979,28980],{"align":24988},"从 tar 文件中加载镜像。",[1807,28982,28983],{"align":24988},"docker load -i myimage.tar",[1762,28985,28986,28989,28992],{},[1807,28987,28988],{"align":24988},"docker tag",[1807,28990,28991],{"align":24988},"为镜像添加标签（tag）。",[1807,28993,28994],{"align":24988},"docker tag myimage myimage:v1",[1762,28996,28997,29000,29003],{},[1807,28998,28999],{"align":24988},"docker buildx build",[1807,29001,29002],{"align":24988},"使用 Buildx 构建多架构镜像。",[1807,29004,29005],{"align":24988},"docker buildx build -t myimage .",[1762,29007,29008,29011,29014],{},[1807,29009,29010],{"align":24988},"docker buildx create",[1807,29012,29013],{"align":24988},"创建一个新的 Buildx 构建实例。",[1807,29015,29016],{"align":24988},"docker buildx create –use",[1762,29018,29019,29022,29025],{},[1807,29020,29021],{"align":24988},"docker buildx ls",[1807,29023,29024],{"align":24988},"列出所有可用的 Buildx 构建实例。",[1807,29026,29021],{"align":24988},[1762,29028,29029,29032,29035],{},[1807,29030,29031],{"align":24988},"docker buildx use",[1807,29033,29034],{"align":24988},"设置当前的 Buildx 构建实例。",[1807,29036,29037],{"align":24988},"docker buildx use mybuilder",[1762,29039,29040,29043,29046],{},[1807,29041,29042],{"align":24988},"docker buildx bake",[1807,29044,29045],{"align":24988},"使用 Bake 文件批量构建镜像。",[1807,29047,29048],{"align":24988},"docker buildx bake -f bake.hcl",[1762,29050,29051,29054,29057],{},[1807,29052,29053],{"align":24988},"docker buildx build –push",[1807,29055,29056],{"align":24988},"构建镜像并推送到镜像仓库。",[1807,29058,29059],{"align":24988},"docker buildx build –push -t myimage .",[1762,29061,29062,29065,29068],{},[1807,29063,29064],{"align":24988},"docker buildx build –platform",[1807,29066,29067],{"align":24988},"构建镜像并为多个平台生成支持。",[1807,29069,29070],{"align":24988},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,29072,29073],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,29075,29076],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,29078,29079],{},"docker images 可以查看已经下载的镜像",[14,29081,29082],{},[2918,29083],{"alt":28,"src":29084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,29086,29087],{},[480,29088,29089],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,29091,29092],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,29094,29095],{},"docker container logs 查看容器日志",[14,29097,29098],{},"docker top 查看容器里的进程",[14,29100,29101],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[23,29103,29105],{"className":25074,"code":29104,"language":25076,"meta":28,"style":28},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[30,29106,29107],{"__ignoreMap":28},[33,29108,29109,29112,29115,29118],{"class":35,"line":36},[33,29110,29111],{"class":43},"如：docker",[33,29113,29114],{"class":119}," cp",[33,29116,29117],{"class":119}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[33,29119,29120],{"class":119}," \u002Fmydata\u002Fnginx\n",[14,29122,29123],{},"docker run时在启动容器的时候会有几个常用的选项：",[561,29125,29126,29129,29132],{},[564,29127,29128],{},"-d选项：表示后台运行",[564,29130,29131],{},"-P选项：随机端口映射",[564,29133,29134],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[1599,29136,29138],{"id":29137},"_53run命令的参数非常重要",[480,29139,29140],{},"5.3.run命令的参数（非常重要）",[1756,29142,29143,29156],{},[1759,29144,29145],{},[1762,29146,29147,29150,29153],{},[1765,29148,29149],{"align":24988},"参数\u002F配置",[1765,29151,29152],{"align":24988},"功能说明",[1765,29154,29155],{"align":24988},"重要性与参考依据",[1802,29157,29158,29169,29180,29191,29202,29213,29224,29235,29246,29257,29268,29279,29290,29301,29312],{},[1762,29159,29160,29163,29166],{},[1807,29161,29162],{"align":24988},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1807,29164,29165],{"align":24988},"指定容器名称，便于后续管理",[1807,29167,29168],{"align":24988},"替代随机生成的容器名。",[1762,29170,29171,29174,29177],{},[1807,29172,29173],{"align":24988},"–gpus all",[1807,29175,29176],{"align":24988},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1807,29178,29179],{"align":24988},"用于CUDA加速等GPU依赖任务。",[1762,29181,29182,29185,29188],{},[1807,29183,29184],{"align":24988},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1807,29186,29187],{"align":24988},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1807,29189,29190],{"align":24988},"确保容器内GPU功能完整67。",[1762,29192,29193,29196,29199],{},[1807,29194,29195],{"align":24988},"-dit",[1807,29197,29198],{"align":24988},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1807,29200,29201],{"align":24988},"允许容器在后台运行并支持交互操作。",[1762,29203,29204,29207,29210],{},[1807,29205,29206],{"align":24988},"–privileged",[1807,29208,29209],{"align":24988},"赋予容器完全主机权限（可访问设备、内核模块等）",[1807,29211,29212],{"align":24988},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1762,29214,29215,29218,29221],{},[1807,29216,29217],{"align":24988},"–net=host",[1807,29219,29220],{"align":24988},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1807,29222,29223],{"align":24988},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1762,29225,29226,29229,29232],{},[1807,29227,29228],{"align":24988},"–group-add audio–group-add video–group-add dialout",[1807,29230,29231],{"align":24988},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1807,29233,29234],{"align":24988},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1762,29236,29237,29240,29243],{},[1807,29238,29239],{"align":24988},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1807,29241,29242],{"align":24988},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1807,29244,29245],{"align":24988},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1762,29247,29248,29251,29254],{},[1807,29249,29250],{"align":24988},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1807,29252,29253],{"align":24988},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1807,29255,29256],{"align":24988},"实现容器内图形显示。",[1762,29258,29259,29262,29265],{},[1807,29260,29261],{"align":24988},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1807,29263,29264],{"align":24988},"挂载X11认证文件（只读）",[1807,29266,29267],{"align":24988},"确保容器有权连接宿主机显示服务。",[1762,29269,29270,29273,29276],{},[1807,29271,29272],{"align":24988},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1807,29274,29275],{"align":24988},"挂载Wayland显示协议相关目录",[1807,29277,29278],{"align":24988},"支持Wayland协议的图形显示。",[1762,29280,29281,29284,29287],{},[1807,29282,29283],{"align":24988},"–ulimit nofile=1024:524288",[1807,29285,29286],{"align":24988},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1807,29288,29289],{"align":24988},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1762,29291,29292,29295,29298],{},[1807,29293,29294],{"align":24988},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1807,29296,29297],{"align":24988},"挂载宿主机用户目录到容器内同名路径",[1807,29299,29300],{"align":24988},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1762,29302,29303,29306,29309],{},[1807,29304,29305],{"align":24988},"-w \u002Fhome\u002Ftungchiahui",[1807,29307,29308],{"align":24988},"设置容器启动后的默认工作目录",[1807,29310,29311],{"align":24988},"直接进入项目路径，方便执行命令2324。",[1762,29313,29314,29317,29320],{},[1807,29315,29316],{"align":24988},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1807,29318,29319],{"align":24988},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1807,29321,29322],{"align":24988},"提供预配置的深度学习与机器人开发环境。",[14,29324,29325,29326,29328,29329,29332],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[30,29327,25829],{},"加不加",[30,29330,29331],{},"sudo -E","都无所谓。",[14,29334,29335,29336,29338,29339,29341,29342,29345,29346,29348],{},"用户已经被加到docker组了，不用",[30,29337,25829],{},"也行跑，其次，",[30,29340,25829],{},"运行的话，你的",[30,29343,29344],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[30,29347,29344],{},"更不可能变了。",[23,29350,29352],{"className":25074,"code":29351,"language":25076,"meta":28,"style":28},"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",[30,29353,29354,29367,29377,29387,29399,29406,29413,29420,29430,29439,29448,29462,29474,29486,29495,29505,29514,29529,29562,29589,29600,29607],{"__ignoreMap":28},[33,29355,29356,29358,29360,29362,29365],{"class":35,"line":36},[33,29357,25829],{"class":43},[33,29359,27573],{"class":119},[33,29361,28483],{"class":119},[33,29363,29364],{"class":76}," --name=ros_opencv_cuda",[33,29366,25931],{"class":76},[33,29368,29369,29372,29375],{"class":35,"line":51},[33,29370,29371],{"class":47},"--gpus ",[33,29373,29374],{"class":119},"all",[33,29376,25931],{"class":76},[33,29378,29379,29382,29385],{"class":35,"line":57},[33,29380,29381],{"class":47},"-e ",[33,29383,29384],{"class":119},"NVIDIA_DRIVER_CAPABILITIES=all",[33,29386,25931],{"class":76},[33,29388,29389,29391,29394,29397],{"class":35,"line":64},[33,29390,29381],{"class":47},[33,29392,29393],{"class":119},"DISPLAY=",[33,29395,29396],{"class":47},"$DISPLAY ",[33,29398,27428],{"class":76},[33,29400,29401,29404],{"class":35,"line":83},[33,29402,29403],{"class":47},"-dit ",[33,29405,27428],{"class":76},[33,29407,29408,29411],{"class":35,"line":89},[33,29409,29410],{"class":47},"--privileged ",[33,29412,27428],{"class":76},[33,29414,29415,29418],{"class":35,"line":98},[33,29416,29417],{"class":47},"--net=host ",[33,29419,27428],{"class":76},[33,29421,29422,29425,29428],{"class":35,"line":110},[33,29423,29424],{"class":47},"--group-add ",[33,29426,29427],{"class":119},"audio",[33,29429,25931],{"class":76},[33,29431,29432,29434,29437],{"class":35,"line":134},[33,29433,29424],{"class":47},[33,29435,29436],{"class":119},"video",[33,29438,25931],{"class":76},[33,29440,29441,29443,29446],{"class":35,"line":156},[33,29442,29424],{"class":47},[33,29444,29445],{"class":119},"dialout",[33,29447,25931],{"class":76},[33,29449,29450,29452,29455,29457,29460],{"class":35,"line":163},[33,29451,29381],{"class":47},[33,29453,29454],{"class":119},"XAUTHORITY=",[33,29456,29344],{"class":47},[33,29458,29459],{"class":119},"\u002F.Xauthority",[33,29461,25931],{"class":76},[33,29463,29464,29466,29469,29472],{"class":35,"line":169},[33,29465,29381],{"class":47},[33,29467,29468],{"class":119},"WAYLAND_DISPLAY=",[33,29470,29471],{"class":47},"$WAYLAND_DISPLAY ",[33,29473,27428],{"class":76},[33,29475,29476,29478,29481,29484],{"class":35,"line":175},[33,29477,29381],{"class":47},[33,29479,29480],{"class":119},"XDG_RUNTIME_DIR=",[33,29482,29483],{"class":47},"$XDG_RUNTIME_DIR ",[33,29485,27428],{"class":76},[33,29487,29488,29490,29493],{"class":35,"line":181},[33,29489,29381],{"class":47},[33,29491,29492],{"class":119},"QT_QPA_PLATFORM=xcb",[33,29494,25931],{"class":76},[33,29496,29497,29500,29503],{"class":35,"line":196},[33,29498,29499],{"class":47},"-v ",[33,29501,29502],{"class":119},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[33,29504,25931],{"class":76},[33,29506,29507,29509,29512],{"class":35,"line":213},[33,29508,29499],{"class":47},[33,29510,29511],{"class":119},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[33,29513,25931],{"class":76},[33,29515,29516,29519,29522,29524,29527],{"class":35,"line":228},[33,29517,29518],{"class":47},"-v $HOME",[33,29520,29521],{"class":119},"\u002F.Xauthority:",[33,29523,29344],{"class":47},[33,29525,29526],{"class":119},"\u002F.Xauthority:ro",[33,29528,25931],{"class":76},[33,29530,29531,29533,29536,29538,29541,29544,29546,29549,29551,29553,29555,29557,29560],{"class":35,"line":1345},[33,29532,29499],{"class":47},[33,29534,29535],{"class":119},"\u002Frun\u002Fuser\u002F",[33,29537,26352],{"class":47},[33,29539,29540],{"class":43},"id",[33,29542,29543],{"class":76}," -u",[33,29545,352],{"class":47},[33,29547,29548],{"class":119},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[33,29550,26352],{"class":47},[33,29552,29540],{"class":43},[33,29554,29543],{"class":76},[33,29556,352],{"class":47},[33,29558,29559],{"class":119},"\u002Fwayland-0",[33,29561,25931],{"class":76},[33,29563,29564,29566,29568,29570,29572,29574,29576,29579,29581,29583,29585,29587],{"class":35,"line":1350},[33,29565,29499],{"class":47},[33,29567,29535],{"class":119},[33,29569,26352],{"class":47},[33,29571,29540],{"class":43},[33,29573,29543],{"class":76},[33,29575,352],{"class":47},[33,29577,29578],{"class":119},":\u002Frun\u002Fuser\u002F",[33,29580,26352],{"class":47},[33,29582,29540],{"class":43},[33,29584,29543],{"class":76},[33,29586,14965],{"class":47},[33,29588,27428],{"class":76},[33,29590,29591,29593,29595,29598],{"class":35,"line":1359},[33,29592,29518],{"class":47},[33,29594,2458],{"class":119},[33,29596,29597],{"class":47},"$HOME ",[33,29599,27428],{"class":76},[33,29601,29602,29605],{"class":35,"line":1364},[33,29603,29604],{"class":47},"-w $HOME ",[33,29606,27428],{"class":76},[33,29608,29609],{"class":35,"line":1370},[33,29610,29611],{"class":47},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,29613,10276],{},[574,29615,29616,29624,29627,29630],{},[564,29617,29618,15046,29620,29623],{},[30,29619,29384],{},[30,29621,29622],{},"--gpus all","没有英伟达显卡请注释。",[564,29625,29626],{},"--name后面请自己为容器起名。",[564,29628,29629],{},"最后一行仓库名称请你自己找对应的镜像填上。",[564,29631,29632,29633,29638],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24805,29634,29635],{},[480,29636,29637],{},"请不要加","。",[23,29640,29642],{"className":25074,"code":29641,"language":25076,"meta":28,"style":28},"--ulimit nofile=1024:524288 \\\n",[30,29643,29644],{"__ignoreMap":28},[33,29645,29646,29649,29652],{"class":35,"line":36},[33,29647,29648],{"class":43},"--ulimit",[33,29650,29651],{"class":119}," nofile=1024:524288",[33,29653,25931],{"class":76},[14,29655,29656,29657,29662],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24805,29658,29659],{},[480,29660,29661],{},"不建议","**.**",[23,29664,29666],{"className":25074,"code":29665,"language":25076,"meta":28,"style":28},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[30,29667,29668,29695,29704],{"__ignoreMap":28},[33,29669,29670,29673,29676,29678,29680,29682,29684,29686,29688,29691,29693],{"class":35,"line":36},[33,29671,29672],{"class":43},"--user",[33,29674,29675],{"class":47}," $(",[33,29677,29540],{"class":43},[33,29679,29543],{"class":76},[33,29681,352],{"class":47},[33,29683,2458],{"class":119},[33,29685,26352],{"class":47},[33,29687,29540],{"class":43},[33,29689,29690],{"class":76}," -g",[33,29692,14965],{"class":47},[33,29694,27428],{"class":76},[33,29696,29697,29699,29702],{"class":35,"line":51},[33,29698,29499],{"class":47},[33,29700,29701],{"class":119},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[33,29703,25931],{"class":76},[33,29705,29706,29708,29711],{"class":35,"line":57},[33,29707,29499],{"class":47},[33,29709,29710],{"class":119},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[33,29712,25931],{"class":76},[1544,29714,29715],{},"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":28,"searchDepth":51,"depth":51,"links":29717},[29718,29719,29720],{"id":28716,"depth":57,"text":28717},{"id":28726,"depth":57,"text":28727},{"id":29137,"depth":57,"text":29140},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28708,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29727,"title":29728,"body":29729,"description":28,"extension":1557,"meta":31352,"navigation":159,"path":31353,"seo":31354,"stem":31355,"__hash__":31356},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29730,"toc":31347},[29731,29734,29738,29741,29963,29967,29971,29974,30080,30085,30088,30093,30096,30101,30104,30109,30112,30124,30127,30132,30139,30167,30174,30250,30255,30258,30281,30283,30358,30363,30366,30370,30378,30383,30388,30392,30403,30409,30412,30415,30439,30442,30445,30473,30476,30479,30944,30947,30952,30957,30961,30984,30989,30993,30997,31000,31003,31006,31033,31036,31039,31057,31060,31063,31085,31093,31098,31103,31107,31110,31113,31116,31119,31164,31167,31185,31188,31193,31196,31217,31220,31276,31279,31284,31288,31291,31298,31301,31304,31309,31312,31328,31331,31344],[10,29732,29728],{"id":29733},"_6手动创建docker镜像",[1599,29735,29737],{"id":29736},"_61dockerfile","6.1.DockerFile",[14,29739,29740],{},"常用命令：",[1756,29742,29743,29754],{},[1759,29744,29745],{},[1762,29746,29747,29750,29752],{},[1765,29748,29749],{"align":24988},"指令",[1765,29751,27122],{"align":24988},[1765,29753,28745],{"align":24988},[1802,29755,29756,29766,29782,29793,29804,29815,29826,29837,29848,29862,29876,29887,29901,29912,29923,29937,29952],{},[1762,29757,29758,29760,29763],{},[1807,29759,28623],{"align":24988},[1807,29761,29762],{"align":24988},"指定基础镜像，是 Dockerfile 的起点",[1807,29764,29765],{"align":24988},"FROM ubuntu:22.04",[1762,29767,29768,29771,29774],{},[1807,29769,29770],{"align":24988},"LABEL",[1807,29772,29773],{"align":24988},"添加元数据（如作者、版本等）",[1807,29775,29776,29777,29781],{"align":24988},"LABEL maintainer=”",[126,29778,29780],{"href":29779},"mailto:you@example.com","you@example.com","”",[1762,29783,29784,29787,29790],{},[1807,29785,29786],{"align":24988},"ENV",[1807,29788,29789],{"align":24988},"设置环境变量",[1807,29791,29792],{"align":24988},"ENV PORT=8080",[1762,29794,29795,29798,29801],{},[1807,29796,29797],{"align":24988},"ARG",[1807,29799,29800],{"align":24988},"构建参数，只在构建期间可用",[1807,29802,29803],{"align":24988},"ARG VERSION=1.0",[1762,29805,29806,29809,29812],{},[1807,29807,29808],{"align":24988},"RUN",[1807,29810,29811],{"align":24988},"构建镜像时运行命令",[1807,29813,29814],{"align":24988},"RUN apt-get update && apt-get install -y curl",[1762,29816,29817,29820,29823],{},[1807,29818,29819],{"align":24988},"COPY",[1807,29821,29822],{"align":24988},"复制文件到镜像中",[1807,29824,29825],{"align":24988},"COPY . \u002Fapp",[1762,29827,29828,29831,29834],{},[1807,29829,29830],{"align":24988},"ADD",[1807,29832,29833],{"align":24988},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1807,29835,29836],{"align":24988},"ADD archive.tar.gz \u002Fdata\u002F",[1762,29838,29839,29842,29845],{},[1807,29840,29841],{"align":24988},"WORKDIR",[1807,29843,29844],{"align":24988},"设置工作目录",[1807,29846,29847],{"align":24988},"WORKDIR \u002Fopt",[1762,29849,29850,29853,29856],{},[1807,29851,29852],{"align":24988},"CMD",[1807,29854,29855],{"align":24988},"设置容器启动时默认命令（可被 docker run 覆盖）",[1807,29857,29858,29859],{"align":24988},"CMD ",[33,29860,29861],{},"“node”, “index.js”",[1762,29863,29864,29867,29870],{},[1807,29865,29866],{"align":24988},"ENTRYPOINT",[1807,29868,29869],{"align":24988},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1807,29871,29872,29873],{"align":24988},"ENTRYPOINT ",[33,29874,29875],{},"“python3”",[1762,29877,29878,29881,29884],{},[1807,29879,29880],{"align":24988},"EXPOSE",[1807,29882,29883],{"align":24988},"声明镜像内服务监听的端口（不会自动映射）",[1807,29885,29886],{"align":24988},"EXPOSE 80",[1762,29888,29889,29892,29895],{},[1807,29890,29891],{"align":24988},"VOLUME",[1807,29893,29894],{"align":24988},"声明数据卷挂载点",[1807,29896,29897,29898],{"align":24988},"VOLUME ",[33,29899,29900],{},"“\u002Fdata”",[1762,29902,29903,29906,29909],{},[1807,29904,29905],{"align":24988},"USER",[1807,29907,29908],{"align":24988},"设置后续命令执行的用户",[1807,29910,29911],{"align":24988},"USER appuser",[1762,29913,29914,29917,29920],{},[1807,29915,29916],{"align":24988},"ONBUILD",[1807,29918,29919],{"align":24988},"当镜像作为其他镜像基础镜像时触发的构建指令",[1807,29921,29922],{"align":24988},"ONBUILD COPY . \u002Fsrc",[1762,29924,29925,29928,29931],{},[1807,29926,29927],{"align":24988},"SHELL",[1807,29929,29930],{"align":24988},"更改默认 shell，比如将 sh -c 改为 bash -c",[1807,29932,29933,29934],{"align":24988},"SHELL ",[33,29935,29936],{},"“\u002Fbin\u002Fbash”, “-c”",[1762,29938,29939,29942,29945],{},[1807,29940,29941],{"align":24988},"HEALTHCHECK",[1807,29943,29944],{"align":24988},"定义容器运行时的健康检查命令",[1807,29946,29947,29948],{"align":24988},"`HEALTHCHECK CMD curl –fail ",[126,29949,29950],{"href":29950,"rel":29951},"http:\u002F\u002Flocalhost:8080",[25117],[1762,29953,29954,29957,29960],{},[1807,29955,29956],{"align":24988},"STOPSIGNAL",[1807,29958,29959],{"align":24988},"容器停止时发送的信号",[1807,29961,29962],{"align":24988},"STOPSIGNAL SIGKILL",[1599,29964,29966],{"id":29965},"_62自己创建容器","6.2.自己创建容器",[23249,29968,29970],{"id":29969},"_621手动创建","6.2.1.手动创建",[14,29972,29973],{},"在x86电脑上编译x86的：",[23,29975,29977],{"className":25074,"code":29976,"language":25076,"meta":28,"style":28},"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",[30,29978,29979,29995,29999,30012,30016,30029,30033,30046,30050,30063,30067],{"__ignoreMap":28},[33,29980,29981,29983,29986,29989,29992],{"class":35,"line":36},[33,29982,27806],{"class":43},[33,29984,29985],{"class":119}," build",[33,29987,29988],{"class":76}," -t",[33,29990,29991],{"class":119}," ros-melodic-cuda118-cudnn8-bionic:latest",[33,29993,29994],{"class":119}," .\n",[33,29996,29997],{"class":35,"line":51},[33,29998,160],{"emptyLinePlaceholder":159},[33,30000,30001,30003,30005,30007,30010],{"class":35,"line":57},[33,30002,27806],{"class":43},[33,30004,29985],{"class":119},[33,30006,29988],{"class":76},[33,30008,30009],{"class":119}," ros-noetic-focal:latest",[33,30011,29994],{"class":119},[33,30013,30014],{"class":35,"line":64},[33,30015,160],{"emptyLinePlaceholder":159},[33,30017,30018,30020,30022,30024,30027],{"class":35,"line":83},[33,30019,27806],{"class":43},[33,30021,29985],{"class":119},[33,30023,29988],{"class":76},[33,30025,30026],{"class":119}," ros-humble-jammy:latest",[33,30028,29994],{"class":119},[33,30030,30031],{"class":35,"line":89},[33,30032,160],{"emptyLinePlaceholder":159},[33,30034,30035,30037,30039,30041,30044],{"class":35,"line":98},[33,30036,27806],{"class":43},[33,30038,29985],{"class":119},[33,30040,29988],{"class":76},[33,30042,30043],{"class":119}," ros-jazzy-noble:latest",[33,30045,29994],{"class":119},[33,30047,30048],{"class":35,"line":110},[33,30049,160],{"emptyLinePlaceholder":159},[33,30051,30052,30054,30056,30058,30061],{"class":35,"line":134},[33,30053,27806],{"class":43},[33,30055,29985],{"class":119},[33,30057,29988],{"class":76},[33,30059,30060],{"class":119}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[33,30062,29994],{"class":119},[33,30064,30065],{"class":35,"line":156},[33,30066,160],{"emptyLinePlaceholder":159},[33,30068,30069,30071,30073,30075,30078],{"class":35,"line":163},[33,30070,27806],{"class":43},[33,30072,29985],{"class":119},[33,30074,29988],{"class":76},[33,30076,30077],{"class":119}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[33,30079,29994],{"class":119},[14,30081,30082],{},[2918,30083],{"alt":28,"src":30084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,30086,30087],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,30089,30090],{},[2918,30091],{"alt":28,"src":30092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,30094,30095],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[574,30097,30098],{},[564,30099,30100],{},"创建 Docker Hub 账户",[14,30102,30103],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[574,30105,30106],{"start":51},[564,30107,30108],{},"登录 Docker Hub",[14,30110,30111],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[23,30113,30115],{"className":25074,"code":30114,"language":25076,"meta":28,"style":28},"docker login\n",[30,30116,30117],{"__ignoreMap":28},[33,30118,30119,30121],{"class":35,"line":36},[33,30120,27806],{"class":43},[33,30122,30123],{"class":119}," login\n",[14,30125,30126],{},"输入你的 Docker Hub 用户名和密码进行验证。",[574,30128,30129],{},[564,30130,30131],{},"为你的镜像打标签",[14,30133,30134,30135,30138],{},"Docker Hub 使用 ",[30,30136,30137],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[23,30140,30142],{"className":25074,"code":30141,"language":25076,"meta":28,"style":28},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[30,30143,30144],{"__ignoreMap":28},[33,30145,30146,30148,30151,30153,30156,30159,30162,30164],{"class":35,"line":36},[33,30147,27806],{"class":43},[33,30149,30150],{"class":119}," tag",[33,30152,30043],{"class":119},[33,30154,30155],{"class":39}," \u003C",[33,30157,30158],{"class":119},"你的用户",[33,30160,30161],{"class":47},"名",[33,30163,1265],{"class":39},[33,30165,30166],{"class":119},"\u002Fros-jazzy-noble:latest\n",[14,30168,30169,30170,30173],{},"例如，如果你的 Docker Hub 用户名是 ",[30,30171,30172],{},"tungchiahui","，你应该执行：",[23,30175,30177],{"className":25074,"code":30176,"language":25076,"meta":28,"style":28},"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",[30,30178,30179,30190,30194,30205,30209,30220,30224,30235,30239],{"__ignoreMap":28},[33,30180,30181,30183,30185,30187],{"class":35,"line":36},[33,30182,27806],{"class":43},[33,30184,30150],{"class":119},[33,30186,30009],{"class":119},[33,30188,30189],{"class":119}," tungchiahui\u002Fros-noetic-focal:latest\n",[33,30191,30192],{"class":35,"line":51},[33,30193,160],{"emptyLinePlaceholder":159},[33,30195,30196,30198,30200,30202],{"class":35,"line":57},[33,30197,27806],{"class":43},[33,30199,30150],{"class":119},[33,30201,30026],{"class":119},[33,30203,30204],{"class":119}," tungchiahui\u002Fros-humble-jammy:latest\n",[33,30206,30207],{"class":35,"line":64},[33,30208,160],{"emptyLinePlaceholder":159},[33,30210,30211,30213,30215,30217],{"class":35,"line":83},[33,30212,27806],{"class":43},[33,30214,30150],{"class":119},[33,30216,30043],{"class":119},[33,30218,30219],{"class":119}," tungchiahui\u002Fros-jazzy-noble:latest\n",[33,30221,30222],{"class":35,"line":89},[33,30223,160],{"emptyLinePlaceholder":159},[33,30225,30226,30228,30230,30232],{"class":35,"line":98},[33,30227,27806],{"class":43},[33,30229,30150],{"class":119},[33,30231,30060],{"class":119},[33,30233,30234],{"class":119}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,30236,30237],{"class":35,"line":110},[33,30238,160],{"emptyLinePlaceholder":159},[33,30240,30241,30243,30245,30247],{"class":35,"line":134},[33,30242,27806],{"class":43},[33,30244,30150],{"class":119},[33,30246,30077],{"class":119},[33,30248,30249],{"class":119}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[574,30251,30252],{"start":51},[564,30253,30254],{},"推送镜像到 Docker Hub",[14,30256,30257],{},"使用以下命令将镜像推送到 Docker Hub：",[23,30259,30261],{"className":25074,"code":30260,"language":25076,"meta":28,"style":28},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[30,30262,30263],{"__ignoreMap":28},[33,30264,30265,30267,30270,30272,30274,30276,30278],{"class":35,"line":36},[33,30266,27806],{"class":43},[33,30268,30269],{"class":119}," push",[33,30271,30155],{"class":39},[33,30273,30158],{"class":119},[33,30275,30161],{"class":47},[33,30277,1265],{"class":39},[33,30279,30280],{"class":119},"\u002Fros-noetic-jazzy-noble:latest\n",[14,30282,15884],{},[23,30284,30286],{"className":25074,"code":30285,"language":25076,"meta":28,"style":28},"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",[30,30287,30288,30296,30300,30308,30312,30320,30324,30333,30337,30345,30349],{"__ignoreMap":28},[33,30289,30290,30292,30294],{"class":35,"line":36},[33,30291,27806],{"class":43},[33,30293,30269],{"class":119},[33,30295,30189],{"class":119},[33,30297,30298],{"class":35,"line":51},[33,30299,160],{"emptyLinePlaceholder":159},[33,30301,30302,30304,30306],{"class":35,"line":57},[33,30303,27806],{"class":43},[33,30305,30269],{"class":119},[33,30307,30204],{"class":119},[33,30309,30310],{"class":35,"line":64},[33,30311,160],{"emptyLinePlaceholder":159},[33,30313,30314,30316,30318],{"class":35,"line":83},[33,30315,27806],{"class":43},[33,30317,30269],{"class":119},[33,30319,30219],{"class":119},[33,30321,30322],{"class":35,"line":89},[33,30323,160],{"emptyLinePlaceholder":159},[33,30325,30326,30328,30330],{"class":35,"line":98},[33,30327,27806],{"class":43},[33,30329,30269],{"class":119},[33,30331,30332],{"class":119}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,30334,30335],{"class":35,"line":110},[33,30336,160],{"emptyLinePlaceholder":159},[33,30338,30339,30341,30343],{"class":35,"line":134},[33,30340,27806],{"class":43},[33,30342,30269],{"class":119},[33,30344,30249],{"class":119},[33,30346,30347],{"class":35,"line":156},[33,30348,160],{"emptyLinePlaceholder":159},[33,30350,30351,30353,30355],{"class":35,"line":163},[33,30352,27806],{"class":43},[33,30354,30269],{"class":119},[33,30356,30357],{"class":119}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[574,30359,30360],{"start":57},[564,30361,30362],{},"验证推送成功",[14,30364,30365],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,30367,30368],{},[480,30369,5186],{},[561,30371,30372,30375],{},[564,30373,30374],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[564,30376,30377],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,30379,30380],{},[2918,30381],{"alt":28,"src":30382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,30384,30385],{},[2918,30386],{"alt":28,"src":30387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23249,30389,30391],{"id":30390},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,30393,30394,30395,30398,30399,30402],{},"如果您想在 ",[480,30396,30397],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[480,30400,30401],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,30404,30405,30406],{},"1. ",[480,30407,30408],{},"启用 Docker 跨平台构建",[14,30410,30411],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,30413,30414],{},"第一步：启用 buildx（只需执行一次）",[23,30416,30418],{"className":25074,"code":30417,"language":25076,"meta":28,"style":28},"docker buildx create --name multiarch_builder --use\n",[30,30419,30420],{"__ignoreMap":28},[33,30421,30422,30424,30427,30430,30433,30436],{"class":35,"line":36},[33,30423,27806],{"class":43},[33,30425,30426],{"class":119}," buildx",[33,30428,30429],{"class":119}," create",[33,30431,30432],{"class":76}," --name",[33,30434,30435],{"class":119}," multiarch_builder",[33,30437,30438],{"class":76}," --use\n",[14,30440,30441],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,30443,30444],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[23,30446,30448],{"className":25074,"code":30447,"language":25076,"meta":28,"style":28},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[30,30449,30450],{"__ignoreMap":28},[33,30451,30452,30454,30456,30458,30461,30464,30467,30470],{"class":35,"line":36},[33,30453,27806],{"class":43},[33,30455,28483],{"class":119},[33,30457,28486],{"class":76},[33,30459,30460],{"class":76}," --privileged",[33,30462,30463],{"class":119}," multiarch\u002Fqemu-user-static",[33,30465,30466],{"class":76}," --reset",[33,30468,30469],{"class":76}," -p",[33,30471,30472],{"class":119}," yes\n",[14,30474,30475],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,30477,30478],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[23,30480,30482],{"className":25074,"code":30481,"language":25076,"meta":28,"style":28},"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",[30,30483,30484,30526,30530,30535,30545,30555,30564,30570,30574,30578,30588,30596,30605,30611,30615,30619,30629,30637,30646,30652,30656,30660,30670,30678,30687,30693,30697,30701,30711,30719,30728,30734,30738,30742,30752,30760,30769,30775,30779,30783,30793,30801,30810,30816,30820,30824,30834,30842,30851,30857,30861,30865,30875,30883,30892,30898,30902,30906,30917,30925,30934,30940],{"__ignoreMap":28},[33,30485,30486,30488,30490,30492,30495,30498,30500,30502,30505,30507,30509,30511,30513,30516,30519,30521,30524],{"class":35,"line":36},[33,30487,27806],{"class":43},[33,30489,30426],{"class":119},[33,30491,29985],{"class":119},[33,30493,30494],{"class":76}," --platform",[33,30496,30497],{"class":119}," linux\u002Famd64,linux\u002Farm64",[33,30499,29988],{"class":76},[33,30501,30155],{"class":39},[33,30503,30504],{"class":119},"你的镜像",[33,30506,30161],{"class":47},[33,30508,1265],{"class":39},[33,30510,2458],{"class":119},[33,30512,875],{"class":39},[33,30514,30515],{"class":119},"标",[33,30517,30518],{"class":47},"签",[33,30520,1265],{"class":39},[33,30522,30523],{"class":76}," --push",[33,30525,29994],{"class":119},[33,30527,30528],{"class":35,"line":51},[33,30529,160],{"emptyLinePlaceholder":159},[33,30531,30532],{"class":35,"line":57},[33,30533,30534],{"class":60},"# 例子：\n",[33,30536,30537,30539,30541,30543],{"class":35,"line":64},[33,30538,27806],{"class":43},[33,30540,30426],{"class":119},[33,30542,29985],{"class":119},[33,30544,25931],{"class":76},[33,30546,30547,30550,30553],{"class":35,"line":83},[33,30548,30549],{"class":47},"--platform ",[33,30551,30552],{"class":119},"linux\u002Famd64,linux\u002Farm64",[33,30554,25931],{"class":76},[33,30556,30557,30559,30562],{"class":35,"line":89},[33,30558,29988],{"class":76},[33,30560,30561],{"class":119}," tungchiahui\u002Fros:noetic-focal",[33,30563,25931],{"class":76},[33,30565,30566,30568],{"class":35,"line":98},[33,30567,30523],{"class":76},[33,30569,25931],{"class":76},[33,30571,30572],{"class":35,"line":110},[33,30573,29994],{"class":119},[33,30575,30576],{"class":35,"line":134},[33,30577,160],{"emptyLinePlaceholder":159},[33,30579,30580,30582,30584,30586],{"class":35,"line":156},[33,30581,27806],{"class":43},[33,30583,30426],{"class":119},[33,30585,29985],{"class":119},[33,30587,25931],{"class":76},[33,30589,30590,30592,30594],{"class":35,"line":163},[33,30591,30549],{"class":47},[33,30593,30552],{"class":119},[33,30595,25931],{"class":76},[33,30597,30598,30600,30603],{"class":35,"line":169},[33,30599,29988],{"class":76},[33,30601,30602],{"class":119}," tungchiahui\u002Fros:humble-jammy",[33,30604,25931],{"class":76},[33,30606,30607,30609],{"class":35,"line":175},[33,30608,30523],{"class":76},[33,30610,25931],{"class":76},[33,30612,30613],{"class":35,"line":181},[33,30614,29994],{"class":119},[33,30616,30617],{"class":35,"line":196},[33,30618,160],{"emptyLinePlaceholder":159},[33,30620,30621,30623,30625,30627],{"class":35,"line":213},[33,30622,27806],{"class":43},[33,30624,30426],{"class":119},[33,30626,29985],{"class":119},[33,30628,25931],{"class":76},[33,30630,30631,30633,30635],{"class":35,"line":228},[33,30632,30549],{"class":47},[33,30634,30552],{"class":119},[33,30636,25931],{"class":76},[33,30638,30639,30641,30644],{"class":35,"line":1345},[33,30640,29988],{"class":76},[33,30642,30643],{"class":119}," tungchiahui\u002Fros:jazzy-noble",[33,30645,25931],{"class":76},[33,30647,30648,30650],{"class":35,"line":1350},[33,30649,30523],{"class":76},[33,30651,25931],{"class":76},[33,30653,30654],{"class":35,"line":1359},[33,30655,29994],{"class":119},[33,30657,30658],{"class":35,"line":1364},[33,30659,160],{"emptyLinePlaceholder":159},[33,30661,30662,30664,30666,30668],{"class":35,"line":1370},[33,30663,27573],{"class":43},[33,30665,30426],{"class":119},[33,30667,29985],{"class":119},[33,30669,25931],{"class":76},[33,30671,30672,30674,30676],{"class":35,"line":1425},[33,30673,30549],{"class":47},[33,30675,30552],{"class":119},[33,30677,25931],{"class":76},[33,30679,30680,30682,30685],{"class":35,"line":1438},[33,30681,29988],{"class":76},[33,30683,30684],{"class":119}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[33,30686,25931],{"class":76},[33,30688,30689,30691],{"class":35,"line":1451},[33,30690,30523],{"class":76},[33,30692,25931],{"class":76},[33,30694,30695],{"class":35,"line":1457},[33,30696,29994],{"class":119},[33,30698,30699],{"class":35,"line":1466},[33,30700,160],{"emptyLinePlaceholder":159},[33,30702,30703,30705,30707,30709],{"class":35,"line":1471},[33,30704,27806],{"class":43},[33,30706,30426],{"class":119},[33,30708,29985],{"class":119},[33,30710,25931],{"class":76},[33,30712,30713,30715,30717],{"class":35,"line":1477},[33,30714,30549],{"class":47},[33,30716,30552],{"class":119},[33,30718,25931],{"class":76},[33,30720,30721,30723,30726],{"class":35,"line":1504},[33,30722,29988],{"class":76},[33,30724,30725],{"class":119}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[33,30727,25931],{"class":76},[33,30729,30730,30732],{"class":35,"line":1509},[33,30731,30523],{"class":76},[33,30733,25931],{"class":76},[33,30735,30736],{"class":35,"line":1525},[33,30737,29994],{"class":119},[33,30739,30740],{"class":35,"line":1535},[33,30741,160],{"emptyLinePlaceholder":159},[33,30743,30744,30746,30748,30750],{"class":35,"line":1540},[33,30745,27573],{"class":43},[33,30747,30426],{"class":119},[33,30749,29985],{"class":119},[33,30751,25931],{"class":76},[33,30753,30754,30756,30758],{"class":35,"line":4027},[33,30755,30549],{"class":47},[33,30757,30552],{"class":119},[33,30759,25931],{"class":76},[33,30761,30762,30764,30767],{"class":35,"line":4032},[33,30763,29988],{"class":76},[33,30765,30766],{"class":119}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[33,30768,25931],{"class":76},[33,30770,30771,30773],{"class":35,"line":9199},[33,30772,30523],{"class":76},[33,30774,25931],{"class":76},[33,30776,30777],{"class":35,"line":9223},[33,30778,29994],{"class":119},[33,30780,30781],{"class":35,"line":9228},[33,30782,160],{"emptyLinePlaceholder":159},[33,30784,30785,30787,30789,30791],{"class":35,"line":9234},[33,30786,27806],{"class":43},[33,30788,30426],{"class":119},[33,30790,29985],{"class":119},[33,30792,25931],{"class":76},[33,30794,30795,30797,30799],{"class":35,"line":9261},[33,30796,30549],{"class":47},[33,30798,30552],{"class":119},[33,30800,25931],{"class":76},[33,30802,30803,30805,30808],{"class":35,"line":9266},[33,30804,29988],{"class":76},[33,30806,30807],{"class":119}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[33,30809,25931],{"class":76},[33,30811,30812,30814],{"class":35,"line":9272},[33,30813,30523],{"class":76},[33,30815,25931],{"class":76},[33,30817,30818],{"class":35,"line":9284},[33,30819,29994],{"class":119},[33,30821,30822],{"class":35,"line":9296},[33,30823,160],{"emptyLinePlaceholder":159},[33,30825,30826,30828,30830,30832],{"class":35,"line":9308},[33,30827,27806],{"class":43},[33,30829,30426],{"class":119},[33,30831,29985],{"class":119},[33,30833,25931],{"class":76},[33,30835,30836,30838,30840],{"class":35,"line":10967},[33,30837,30549],{"class":47},[33,30839,30552],{"class":119},[33,30841,25931],{"class":76},[33,30843,30844,30846,30849],{"class":35,"line":10992},[33,30845,29988],{"class":76},[33,30847,30848],{"class":119}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,30850,25931],{"class":76},[33,30852,30853,30855],{"class":35,"line":11015},[33,30854,30523],{"class":76},[33,30856,25931],{"class":76},[33,30858,30859],{"class":35,"line":11039},[33,30860,29994],{"class":119},[33,30862,30863],{"class":35,"line":11044},[33,30864,160],{"emptyLinePlaceholder":159},[33,30866,30867,30869,30871,30873],{"class":35,"line":11049},[33,30868,27573],{"class":43},[33,30870,30426],{"class":119},[33,30872,29985],{"class":119},[33,30874,25931],{"class":76},[33,30876,30877,30879,30881],{"class":35,"line":11054},[33,30878,30549],{"class":47},[33,30880,30552],{"class":119},[33,30882,25931],{"class":76},[33,30884,30885,30887,30890],{"class":35,"line":11063},[33,30886,29988],{"class":76},[33,30888,30889],{"class":119}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[33,30891,25931],{"class":76},[33,30893,30894,30896],{"class":35,"line":11068},[33,30895,30523],{"class":76},[33,30897,25931],{"class":76},[33,30899,30900],{"class":35,"line":11074},[33,30901,29994],{"class":119},[33,30903,30904],{"class":35,"line":11095},[33,30905,160],{"emptyLinePlaceholder":159},[33,30907,30908,30911,30913,30915],{"class":35,"line":11101},[33,30909,30910],{"class":43},"  docker",[33,30912,30426],{"class":119},[33,30914,29985],{"class":119},[33,30916,25931],{"class":76},[33,30918,30919,30921,30923],{"class":35,"line":11115},[33,30920,30549],{"class":47},[33,30922,30552],{"class":119},[33,30924,25931],{"class":76},[33,30926,30927,30929,30932],{"class":35,"line":11121},[33,30928,29988],{"class":76},[33,30930,30931],{"class":119}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[33,30933,25931],{"class":76},[33,30935,30936,30938],{"class":35,"line":11148},[33,30937,30523],{"class":76},[33,30939,25931],{"class":76},[33,30941,30942],{"class":35,"line":11157},[33,30943,29994],{"class":119},[14,30945,30946],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30948,30949],{},[2918,30950],{"alt":28,"src":30951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30953,30954],{},[2918,30955],{"alt":28,"src":30956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23249,30958,30960],{"id":30959},"_623清除构建缓存","6.2.3.清除构建缓存",[23,30962,30964],{"className":25074,"code":30963,"language":25076,"meta":28,"style":28},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[30,30965,30966,30971],{"__ignoreMap":28},[33,30967,30968],{"class":35,"line":36},[33,30969,30970],{"class":60},"# 清理BuildKit构建缓存\n",[33,30972,30973,30975,30978,30981],{"class":35,"line":51},[33,30974,27806],{"class":43},[33,30976,30977],{"class":119}," builder",[33,30979,30980],{"class":119}," prune",[33,30982,30983],{"class":76}," -f\n",[14,30985,30986],{},[2918,30987],{"alt":28,"src":30988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[1599,30990,30992],{"id":30991},"_63补充","6.3.补充",[23249,30994,30996],{"id":30995},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30998,30999],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,31001,31002],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,31004,31005],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[23,31007,31009],{"className":25074,"code":31008,"language":25076,"meta":28,"style":28},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[30,31010,31011,31018],{"__ignoreMap":28},[33,31012,31013,31015],{"class":35,"line":36},[33,31014,28623],{"class":43},[33,31016,31017],{"class":119}," nginx\n",[33,31019,31020,31022,31025,31028,31030],{"class":35,"line":51},[33,31021,29808],{"class":43},[33,31023,31024],{"class":119}," echo",[33,31026,31027],{"class":119}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[33,31029,27475],{"class":39},[33,31031,31032],{"class":119}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,31034,31035],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,31037,31038],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[23,31040,31042],{"className":25074,"code":31041,"language":25076,"meta":28,"style":28},"docker build -t nginx:tuling .\n",[30,31043,31044],{"__ignoreMap":28},[33,31045,31046,31048,31050,31052,31055],{"class":35,"line":36},[33,31047,27806],{"class":43},[33,31049,29985],{"class":119},[33,31051,29988],{"class":76},[33,31053,31054],{"class":119}," nginx:tuling",[33,31056,29994],{"class":119},[14,31058,31059],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,31061,31062],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[23,31064,31066],{"className":25074,"code":31065,"language":25076,"meta":28,"style":28},"docker run -d -p 92:80 nginx:tuling\n",[30,31067,31068],{"__ignoreMap":28},[33,31069,31070,31072,31074,31077,31079,31082],{"class":35,"line":36},[33,31071,27806],{"class":43},[33,31073,28483],{"class":119},[33,31075,31076],{"class":76}," -d",[33,31078,30469],{"class":76},[33,31080,31081],{"class":119}," 92:80",[33,31083,31084],{"class":119}," nginx:tuling\n",[14,31086,31087,31088],{},"4、访问 ",[126,31089,31092],{"href":31090,"rel":31091},"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",[25117],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,31094,31095],{},[2918,31096],{"alt":28,"src":31097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,31099,31100],{},[2918,31101],{"alt":28,"src":31102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23249,31104,31106],{"id":31105},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,31108,31109],{},"只需要知道大体流程即可",[14,31111,31112],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,31114,31115],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,31117,31118],{},"2、在Dockerfile中添加以下内容",[23,31120,31122],{"className":27344,"code":31121,"language":27346,"meta":28,"style":28},"# 基于哪个镜像\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",[30,31123,31124,31129,31134,31139,31144,31149,31154,31159],{"__ignoreMap":28},[33,31125,31126],{"class":35,"line":36},[33,31127,31128],{},"# 基于哪个镜像\n",[33,31130,31131],{"class":35,"line":51},[33,31132,31133],{},"From java:8\n",[33,31135,31136],{"class":35,"line":57},[33,31137,31138],{},"# 复制文件到容器\n",[33,31140,31141],{"class":35,"line":64},[33,31142,31143],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[33,31145,31146],{"class":35,"line":83},[33,31147,31148],{},"# 声明需要暴露的端口\n",[33,31150,31151],{"class":35,"line":89},[33,31152,31153],{},"EXPOSE 8877\n",[33,31155,31156],{"class":35,"line":98},[33,31157,31158],{},"# 配置容器启动后执行的命令\n",[33,31160,31161],{"class":35,"line":110},[33,31162,31163],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,31165,31166],{},"3、使用docker build命令构建镜像",[23,31168,31170],{"className":25074,"code":31169,"language":25076,"meta":28,"style":28},"docker build -t tulingmall-member:0.0.5 .\n",[30,31171,31172],{"__ignoreMap":28},[33,31173,31174,31176,31178,31180,31183],{"class":35,"line":36},[33,31175,27806],{"class":43},[33,31177,29985],{"class":119},[33,31179,29988],{"class":76},[33,31181,31182],{"class":119}," tulingmall-member:0.0.5",[33,31184,29994],{"class":119},[14,31186,31187],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,31189,31190],{},[2918,31191],{"alt":28,"src":31192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,31194,31195],{},"4、启动镜像，加-d可在后台启动",[23,31197,31199],{"className":25074,"code":31198,"language":25076,"meta":28,"style":28},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[30,31200,31201],{"__ignoreMap":28},[33,31202,31203,31205,31207,31209,31211,31214],{"class":35,"line":36},[33,31204,27806],{"class":43},[33,31206,28483],{"class":119},[33,31208,31076],{"class":76},[33,31210,30469],{"class":76},[33,31212,31213],{"class":119}," 8877:8877",[33,31215,31216],{"class":119}," tulingmall-member:0.0.5\n",[14,31218,31219],{},"加上JVM参数：",[23,31221,31223],{"className":25074,"code":31222,"language":25076,"meta":28,"style":28},"# --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",[30,31224,31225,31230,31245,31255,31264,31271],{"__ignoreMap":28},[33,31226,31227],{"class":35,"line":36},[33,31228,31229],{"class":60},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[33,31231,31232,31234,31236,31239,31241,31243],{"class":35,"line":51},[33,31233,27806],{"class":43},[33,31235,28483],{"class":119},[33,31237,31238],{"class":76},"  -d",[33,31240,30469],{"class":76},[33,31242,31213],{"class":119},[33,31244,25931],{"class":76},[33,31246,31247,31249,31252],{"class":35,"line":57},[33,31248,29381],{"class":47},[33,31250,31251],{"class":119},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[33,31253,31254],{"class":76},"  \\\n",[33,31256,31257,31259,31262],{"class":35,"line":64},[33,31258,29381],{"class":47},[33,31260,31261],{"class":119},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[33,31263,31254],{"class":76},[33,31265,31266,31269],{"class":35,"line":83},[33,31267,31268],{"class":47},"--cap-add=SYS_PTRACE  ",[33,31270,27428],{"class":76},[33,31272,31273],{"class":35,"line":89},[33,31274,31275],{"class":47},"tulingmall-member:0.0.5\n",[14,31277,31278],{},"5、访问会员服务接口",[14,31280,31281],{},[2918,31282],{"alt":28,"src":31283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23249,31285,31287],{"id":31286},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,31289,31290],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,31292,31293,31294],{},"阿里云docker镜像仓库：",[126,31295,31296],{"href":31296,"rel":31297},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25117],[14,31299,31300],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,31302,31303],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,31305,31306],{},[2918,31307],{"alt":28,"src":31308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,31310,31311],{},"要把镜像推送到镜像仓库",[23,31313,31315],{"className":25074,"code":31314,"language":25076,"meta":28,"style":28},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,31316,31317],{"__ignoreMap":28},[33,31318,31319,31321,31323,31325],{"class":35,"line":36},[33,31320,27806],{"class":43},[33,31322,30150],{"class":119},[33,31324,31182],{"class":119},[33,31326,31327],{"class":119}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,31329,31330],{},"最后将镜像推送到远程仓库",[23,31332,31334],{"className":25074,"code":31333,"language":25076,"meta":28,"style":28},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[30,31335,31336],{"__ignoreMap":28},[33,31337,31338,31340,31342],{"class":35,"line":36},[33,31339,27806],{"class":43},[33,31341,30269],{"class":119},[33,31343,31327],{"class":119},[1544,31345,31346],{},"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":28,"searchDepth":51,"depth":51,"links":31348},[31349,31350,31351],{"id":29736,"depth":57,"text":29737},{"id":29965,"depth":57,"text":29966},{"id":30991,"depth":57,"text":30992},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29728,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31358,"title":31359,"body":31360,"description":28,"extension":1557,"meta":31503,"navigation":159,"path":31504,"seo":31505,"stem":31506,"__hash__":31507},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31361,"toc":31501},[31362,31365,31370,31375,31378,31383,31388,31391,31396,31401,31404,31409,31412,31415,31418,31421,31424,31427,31447,31469,31472,31475,31495,31498],[10,31363,31359],{"id":31364},"_7vscode远程开发",[574,31366,31367],{},[564,31368,31369],{},"插件1：微软Docker工具",[14,31371,31372],{},[2918,31373],{"alt":28,"src":31374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,31376,31377],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,31379,31380],{},[2918,31381],{"alt":28,"src":31382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[574,31384,31385],{"start":51},[564,31386,31387],{},"插件2：微软Docker远程开发工具",[14,31389,31390],{},"下面这是远程开发的插件。",[14,31392,31393],{},[2918,31394],{"alt":28,"src":31395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,31397,31398],{},[2918,31399],{"alt":28,"src":31400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,31402,31403],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,31405,31406],{},[2918,31407],{"alt":28,"src":31408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,31410,31411],{},"安装完拓展之后，vscode进行链接：",[14,31413,31414],{},"1.按ctrl+shift+p",[14,31416,31417],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,31419,31420],{},"3.选择目前运行的容器",[14,31422,31423],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,31425,31426],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[23,31428,31430],{"className":25074,"code":31429,"language":25076,"meta":28,"style":28},"docker run -v 主机目录:容器目录 image-name\n",[30,31431,31432],{"__ignoreMap":28},[33,31433,31434,31436,31438,31441,31444],{"class":35,"line":36},[33,31435,27806],{"class":43},[33,31437,28483],{"class":119},[33,31439,31440],{"class":76}," -v",[33,31442,31443],{"class":119}," 主机目录:容器目录",[33,31445,31446],{"class":119}," image-name\n",[23,31448,31450],{"className":25074,"code":31449,"language":25076,"meta":28,"style":28},"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",[30,31451,31452],{"__ignoreMap":28},[33,31453,31454,31456,31458,31461,31463,31466],{"class":35,"line":36},[33,31455,27806],{"class":43},[33,31457,28483],{"class":119},[33,31459,31460],{"class":76}," -it",[33,31462,31440],{"class":76},[33,31464,31465],{"class":119}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[33,31467,31468],{"class":119}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,31470,31471],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,31473,31474],{},"查看挂载情况：",[23,31476,31478],{"className":25074,"code":31477,"language":25076,"meta":28,"style":28},"mount | grep -i project\n",[30,31479,31480],{"__ignoreMap":28},[33,31481,31482,31485,31487,31490,31492],{"class":35,"line":36},[33,31483,31484],{"class":43},"mount",[33,31486,26362],{"class":39},[33,31488,31489],{"class":43}," grep",[33,31491,27683],{"class":76},[33,31493,31494],{"class":119}," project\n",[14,31496,31497],{},"也可以通过ls来进行查看",[1544,31499,31500],{},"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":28,"searchDepth":51,"depth":51,"links":31502},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31359,"description":28},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31509,"title":31510,"body":31511,"description":24628,"extension":1557,"meta":31515,"navigation":159,"path":31517,"seo":31518,"stem":31519,"__hash__":31520},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31512,"toc":31513},[],{"title":28,"searchDepth":51,"depth":51,"links":31514},[],{"category":31516},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31510,"description":24628},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31522,"title":31523,"body":31524,"description":24628,"extension":1557,"meta":31528,"navigation":159,"path":31529,"seo":31530,"stem":31531,"__hash__":31532},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31525,"toc":31526},[],{"title":28,"searchDepth":51,"depth":51,"links":31527},[],{"category":31516},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31523,"description":24628},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31534,"title":31535,"body":31536,"description":24628,"extension":1557,"meta":31829,"navigation":159,"path":31830,"seo":31831,"stem":31832,"__hash__":31833},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31537,"toc":31827},[31538,31541,31549,31564,31569,31620,31623,31629,31816,31821,31824],[10,31539,31535],{"id":31540},"_1验证深度学习环境",[14,31542,31543,31544],{},"关于环境的安装，看",[126,31545,31548],{"href":31546,"rel":31547},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25117],"Pytorch-->深度学习",[14,31550,31551,31552,31555,31556,31559,31560,31563],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[30,31553,31554],{},"pytorch-cuda=12.4"," 是一个“ ",[480,31557,31558],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[480,31561,31562],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,31565,31566],{},[2918,31567],{"alt":28,"src":31568},"\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",[23,31570,31572],{"className":25074,"code":31571,"language":25076,"meta":28,"style":28},"# 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",[30,31573,31574,31579],{"__ignoreMap":28},[33,31575,31576],{"class":35,"line":36},[33,31577,31578],{"class":60},"# CUDA 12.4\n",[33,31580,31581,31584,31586,31589,31592,31595,31598,31601,31603,31606,31609,31612,31615,31617],{"class":35,"line":51},[33,31582,31583],{"class":43},"conda",[33,31585,25086],{"class":119},[33,31587,31588],{"class":119}," pytorch==",[33,31590,31591],{"class":76},"2.5.1",[33,31593,31594],{"class":119}," torchvision==",[33,31596,31597],{"class":76},"0.20.1",[33,31599,31600],{"class":119}," torchaudio==",[33,31602,31591],{"class":76},[33,31604,31605],{"class":119}," pytorch-cuda=",[33,31607,31608],{"class":76},"12.4",[33,31610,31611],{"class":76}," -c",[33,31613,31614],{"class":119}," pytorch",[33,31616,31611],{"class":76},[33,31618,31619],{"class":119}," nvidia\n",[14,31621,31622],{},"）：",[14,31624,31625],{},[126,31626,31627],{"href":31627,"rel":31628},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25117],[23,31630,31634],{"className":31631,"code":31632,"language":31633,"meta":28,"style":28},"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",[30,31635,31636,31641,31649,31654,31664,31680,31685,31695,31732,31739,31751,31767,31772,31782,31794,31804],{"__ignoreMap":28},[33,31637,31638],{"class":35,"line":36},[33,31639,31640],{"class":60},"# 对深度学习环境进行测试\n",[33,31642,31643,31646],{"class":35,"line":51},[33,31644,31645],{"class":39},"import",[33,31647,31648],{"class":47}," torch\n",[33,31650,31651],{"class":35,"line":57},[33,31652,31653],{"class":60},"# 查看cuda是否被激活\n",[33,31655,31656,31659,31661],{"class":35,"line":64},[33,31657,31658],{"class":47},"flag",[33,31660,73],{"class":39},[33,31662,31663],{"class":47},"torch.cuda.is_available()\n",[33,31665,31666,31669,31671,31674,31677],{"class":35,"line":83},[33,31667,31668],{"class":76},"print",[33,31670,345],{"class":47},[33,31672,31673],{"class":119},"\"cuda:\"",[33,31675,31676],{"class":47},", flag)   ",[33,31678,31679],{"class":60},"#返回true的话说明被激活\n",[33,31681,31682],{"class":35,"line":89},[33,31683,31684],{"class":60},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[33,31686,31687,31690,31692],{"class":35,"line":98},[33,31688,31689],{"class":47},"ngpu",[33,31691,73],{"class":39},[33,31693,31694],{"class":76},"1\n",[33,31696,31697,31700,31702,31705,31708,31710,31713,31716,31719,31721,31723,31725,31727,31730],{"class":35,"line":110},[33,31698,31699],{"class":47},"device",[33,31701,73],{"class":39},[33,31703,31704],{"class":47},"torch.device(",[33,31706,31707],{"class":119},"\"cuda:0\"",[33,31709,3145],{"class":39},[33,31711,31712],{"class":47},"(torch.cuda.is_available() ",[33,31714,31715],{"class":39},"and",[33,31717,31718],{"class":47}," ngpu",[33,31720,1265],{"class":39},[33,31722,766],{"class":76},[33,31724,14965],{"class":47},[33,31726,3142],{"class":39},[33,31728,31729],{"class":119}," \"cpu\"",[33,31731,884],{"class":47},[33,31733,31734,31736],{"class":35,"line":134},[33,31735,31668],{"class":76},[33,31737,31738],{"class":47},"(device)\n",[33,31740,31741,31743,31746,31748],{"class":35,"line":156},[33,31742,31668],{"class":76},[33,31744,31745],{"class":47},"(torch.cuda.get_device_name(",[33,31747,766],{"class":76},[33,31749,31750],{"class":47},"))\n",[33,31752,31753,31755,31758,31760,31762,31764],{"class":35,"line":163},[33,31754,31668],{"class":76},[33,31756,31757],{"class":47},"(torch.rand(",[33,31759,712],{"class":76},[33,31761,704],{"class":47},[33,31763,712],{"class":76},[33,31765,31766],{"class":47},").cuda())\n",[33,31768,31769],{"class":35,"line":169},[33,31770,31771],{"class":60},"# 查看cuda和cudnn的版本\n",[33,31773,31774,31777,31779],{"class":35,"line":175},[33,31775,31776],{"class":47},"cuda_version",[33,31778,73],{"class":39},[33,31780,31781],{"class":47},"torch.version.cuda\n",[33,31783,31784,31786,31788,31791],{"class":35,"line":181},[33,31785,31668],{"class":76},[33,31787,345],{"class":47},[33,31789,31790],{"class":119},"\"cuda version\"",[33,31792,31793],{"class":47},",cuda_version)\n",[33,31795,31796,31799,31801],{"class":35,"line":196},[33,31797,31798],{"class":47},"cudnn_version",[33,31800,73],{"class":39},[33,31802,31803],{"class":47},"torch.backends.cudnn.version()\n",[33,31805,31806,31808,31810,31813],{"class":35,"line":213},[33,31807,31668],{"class":76},[33,31809,345],{"class":47},[33,31811,31812],{"class":119},"\"cudnn version\"",[33,31814,31815],{"class":47},",cudnn_version)\n",[14,31817,31818],{},[2918,31819],{"alt":28,"src":31820},"\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,31822,31823],{},"cuda:0 指的是一块显卡",[1544,31825,31826],{},"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":28,"searchDepth":51,"depth":51,"links":31828},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31535,"description":24628},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31835,"title":31836,"body":31837,"description":24628,"extension":1557,"meta":51641,"navigation":159,"path":51642,"seo":51643,"stem":51644,"__hash__":51645},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31838,"toc":51635},[31839,31842,31846,31850,31853,31858,31863,31866,31871,31876,31881,31884,31888,31893,31897,31902,31905,31910,31913,31916,31919,31922,31927,31930,31935,31940,31945,31950,31953,31957,31960,31965,32569,32574,32577,32582,32585,32588,33052,33055,33058,33061,33064,35115,35118,35123,35128,35923,35926,35931,36709,36713,38372,38376,39090,39094,39098,39103,39108,39113,39116,39121,39126,39131,39136,39141,39145,39150,40432,40437,40440,40443,40446,40601,40604,40607,41823,41828,42523,42527,42531,42536,42541,42544,42549,42554,42559,42564,42569,42574,42579,42584,42589,42594,42599,42604,42609,42614,42619,42624,42629,42634,42639,42644,42649,42654,42659,42664,42669,42674,42679,42684,42689,42694,42698,42702,42705,44183,44187,45834,45838,46532,46536,46539,46542,47086,47089,47093,47096,48493,48497,48500,49078,50865,50869,50872,51632],[10,31840,31836],{"id":31841},"_2经典神经网络",[1599,31843,31845],{"id":31844},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23249,31847,31849],{"id":31848},"_211原理介绍","2.1.1.原理介绍",[14,31851,31852],{},"LeNet-5",[574,31854,31855],{},[564,31856,31857],{},"原理",[14,31859,31860],{},[2918,31861],{"alt":28,"src":31862},"\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,31864,31865],{},"B是batch批次；C是channel通道",[574,31867,31868],{"start":51},[564,31869,31870],{},"网络参数详细",[14,31872,31873],{},[2918,31874],{"alt":28,"src":31875},"\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,31877,31878],{},[2918,31879],{"alt":28,"src":31880},"\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,31882,31883],{},"AlexNet",[574,31885,31886],{},[564,31887,31857],{},[14,31889,31890],{},[2918,31891],{"alt":28,"src":31892},"\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",[574,31894,31895],{"start":51},[564,31896,31870],{},[14,31898,31899],{},[2918,31900],{"alt":28,"src":31901},"\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,31903,31904],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,31906,31907],{},[2918,31908],{"alt":28,"src":31909},"\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,31911,31912],{},"数据处理中的图像增强操作:",[14,31914,31915],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31917,31918],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31920,31921],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31923,31924],{},[2918,31925],{"alt":28,"src":31926},"\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,31928,31929],{},"提升网络精确度的方法：LRN正则化",[14,31931,31932],{},[2918,31933],{"alt":28,"src":31934},"\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,31936,31937],{},[2918,31938],{"alt":28,"src":31939},"\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",[574,31941,31942],{"start":57},[564,31943,31944],{},"AlexNet的总结",[14,31946,31947],{},[2918,31948],{"alt":28,"src":31949},"\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,31951,31952],{},"比LeNet模型要深一丢丢",[23249,31954,31956],{"id":31955},"_212代码实现","2.1.2.代码实现",[14,31958,31959],{},"（1）LeNet",[574,31961,31962],{},[564,31963,31964],{},"模型搭建",[23,31966,31968],{"className":31631,"code":31967,"language":31633,"meta":28,"style":28},"# 导入库\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",[30,31969,31970,31975,31981,31986,31999,32004,32016,32020,32040,32045,32050,32061,32066,32085,32089,32094,32143,32155,32160,32189,32224,32251,32256,32268,32273,32293,32312,32331,32335,32340,32350,32367,32378,32393,32404,32415,32430,32445,32456,32463,32467,32481,32486,32509,32514,32519,32524,32528,32533,32538,32548],{"__ignoreMap":28},[33,31971,31972],{"class":35,"line":36},[33,31973,31974],{"class":60},"# 导入库\n",[33,31976,31977,31979],{"class":35,"line":51},[33,31978,31645],{"class":39},[33,31980,31648],{"class":47},[33,31982,31983],{"class":35,"line":57},[33,31984,31985],{"class":60},"# 导入神经网络层\n",[33,31987,31988,31991,31994,31996],{"class":35,"line":64},[33,31989,31990],{"class":39},"from",[33,31992,31993],{"class":47}," torch ",[33,31995,31645],{"class":39},[33,31997,31998],{"class":47}," nn\n",[33,32000,32001],{"class":35,"line":83},[33,32002,32003],{"class":60},"# 导入展示神经网络参数的包\n",[33,32005,32006,32008,32011,32013],{"class":35,"line":89},[33,32007,31990],{"class":39},[33,32009,32010],{"class":47}," torchsummary ",[33,32012,31645],{"class":39},[33,32014,32015],{"class":47}," summary\n",[33,32017,32018],{"class":35,"line":98},[33,32019,160],{"emptyLinePlaceholder":159},[33,32021,32022,32024,32027,32029,32032,32034,32037],{"class":35,"line":110},[33,32023,15945],{"class":39},[33,32025,32026],{"class":43}," LeNet",[33,32028,345],{"class":47},[33,32030,32031],{"class":43},"nn",[33,32033,2158],{"class":47},[33,32035,32036],{"class":43},"Module",[33,32038,32039],{"class":47},"):\n",[33,32041,32042],{"class":35,"line":134},[33,32043,32044],{"class":60},"    # 模型初始化:\n",[33,32046,32047],{"class":35,"line":156},[33,32048,32049],{"class":60},"    # 定义一些网络层和激活函数\n",[33,32051,32052,32055,32058],{"class":35,"line":163},[33,32053,32054],{"class":39},"    def",[33,32056,32057],{"class":76}," __init__",[33,32059,32060],{"class":47},"(self):\n",[33,32062,32063],{"class":35,"line":169},[33,32064,32065],{"class":60},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[33,32067,32068,32071,32074,32077,32080,32083],{"class":35,"line":175},[33,32069,32070],{"class":76},"        super",[33,32072,32073],{"class":47},"(LeNet,",[33,32075,32076],{"class":76},"self",[33,32078,32079],{"class":47},").",[33,32081,32082],{"class":76},"__init__",[33,32084,48],{"class":47},[33,32086,32087],{"class":35,"line":181},[33,32088,160],{"emptyLinePlaceholder":159},[33,32090,32091],{"class":35,"line":196},[33,32092,32093],{"class":60},"        # 定义网络层\n",[33,32095,32096,32099,32102,32104,32107,32110,32112,32114,32116,32119,32121,32123,32125,32128,32130,32132,32134,32137,32139,32141],{"class":35,"line":213},[33,32097,32098],{"class":76},"        self",[33,32100,32101],{"class":47},".c1",[33,32103,73],{"class":39},[33,32105,32106],{"class":47},"nn.Conv2d(",[33,32108,32109],{"class":955},"in_channels",[33,32111,73],{"class":39},[33,32113,701],{"class":76},[33,32115,704],{"class":47},[33,32117,32118],{"class":955},"out_channels",[33,32120,73],{"class":39},[33,32122,727],{"class":76},[33,32124,704],{"class":47},[33,32126,32127],{"class":955},"kernel_size",[33,32129,73],{"class":39},[33,32131,722],{"class":76},[33,32133,704],{"class":47},[33,32135,32136],{"class":955},"padding",[33,32138,73],{"class":39},[33,32140,707],{"class":76},[33,32142,884],{"class":47},[33,32144,32145,32147,32150,32152],{"class":35,"line":228},[33,32146,32098],{"class":76},[33,32148,32149],{"class":47},".sig",[33,32151,73],{"class":39},[33,32153,32154],{"class":47},"nn.Sigmoid()\n",[33,32156,32157],{"class":35,"line":1345},[33,32158,32159],{"class":60},"        # 定义池化\n",[33,32161,32162,32164,32167,32169,32172,32174,32176,32178,32180,32183,32185,32187],{"class":35,"line":1350},[33,32163,32098],{"class":76},[33,32165,32166],{"class":47},".s2",[33,32168,73],{"class":39},[33,32170,32171],{"class":47},"nn.AvgPool2d(",[33,32173,32127],{"class":955},[33,32175,73],{"class":39},[33,32177,707],{"class":76},[33,32179,704],{"class":47},[33,32181,32182],{"class":955},"stride",[33,32184,73],{"class":39},[33,32186,707],{"class":76},[33,32188,884],{"class":47},[33,32190,32191,32193,32196,32198,32200,32202,32204,32206,32208,32210,32212,32214,32216,32218,32220,32222],{"class":35,"line":1359},[33,32192,32098],{"class":76},[33,32194,32195],{"class":47},".c3",[33,32197,73],{"class":39},[33,32199,32106],{"class":47},[33,32201,32109],{"class":955},[33,32203,73],{"class":39},[33,32205,727],{"class":76},[33,32207,704],{"class":47},[33,32209,32118],{"class":955},[33,32211,73],{"class":39},[33,32213,2201],{"class":76},[33,32215,704],{"class":47},[33,32217,32127],{"class":955},[33,32219,73],{"class":39},[33,32221,722],{"class":76},[33,32223,884],{"class":47},[33,32225,32226,32228,32231,32233,32235,32237,32239,32241,32243,32245,32247,32249],{"class":35,"line":1364},[33,32227,32098],{"class":76},[33,32229,32230],{"class":47},".s4",[33,32232,73],{"class":39},[33,32234,32171],{"class":47},[33,32236,32127],{"class":955},[33,32238,73],{"class":39},[33,32240,707],{"class":76},[33,32242,704],{"class":47},[33,32244,32182],{"class":955},[33,32246,73],{"class":39},[33,32248,707],{"class":76},[33,32250,884],{"class":47},[33,32252,32253],{"class":35,"line":1370},[33,32254,32255],{"class":60},"        # 定义平展层\n",[33,32257,32258,32260,32263,32265],{"class":35,"line":1425},[33,32259,32098],{"class":76},[33,32261,32262],{"class":47},".flatten",[33,32264,73],{"class":39},[33,32266,32267],{"class":47},"nn.Flatten()\n",[33,32269,32270],{"class":35,"line":1438},[33,32271,32272],{"class":60},"        # 定义全连接层\n",[33,32274,32275,32277,32280,32282,32285,32287,32289,32291],{"class":35,"line":1451},[33,32276,32098],{"class":76},[33,32278,32279],{"class":47},".f5",[33,32281,73],{"class":39},[33,32283,32284],{"class":47},"nn.Linear(",[33,32286,5387],{"class":76},[33,32288,704],{"class":47},[33,32290,2416],{"class":76},[33,32292,884],{"class":47},[33,32294,32295,32297,32300,32302,32304,32306,32308,32310],{"class":35,"line":1457},[33,32296,32098],{"class":76},[33,32298,32299],{"class":47},".f6",[33,32301,73],{"class":39},[33,32303,32284],{"class":47},[33,32305,2416],{"class":76},[33,32307,704],{"class":47},[33,32309,2310],{"class":76},[33,32311,884],{"class":47},[33,32313,32314,32316,32319,32321,32323,32325,32327,32329],{"class":35,"line":1466},[33,32315,32098],{"class":76},[33,32317,32318],{"class":47},".f7",[33,32320,73],{"class":39},[33,32322,32284],{"class":47},[33,32324,2310],{"class":76},[33,32326,704],{"class":47},[33,32328,77],{"class":76},[33,32330,884],{"class":47},[33,32332,32333],{"class":35,"line":1471},[33,32334,160],{"emptyLinePlaceholder":159},[33,32336,32337],{"class":35,"line":1477},[33,32338,32339],{"class":60},"    # 写工具->写前向传播\n",[33,32341,32342,32344,32347],{"class":35,"line":1504},[33,32343,32054],{"class":39},[33,32345,32346],{"class":43}," forward",[33,32348,32349],{"class":47},"(self,x):\n",[33,32351,32352,32355,32357,32359,32362,32364],{"class":35,"line":1509},[33,32353,32354],{"class":47},"        x",[33,32356,73],{"class":39},[33,32358,32076],{"class":76},[33,32360,32361],{"class":47},".sig(",[33,32363,32076],{"class":76},[33,32365,32366],{"class":47},".c1(x))\n",[33,32368,32369,32371,32373,32375],{"class":35,"line":1525},[33,32370,32354],{"class":47},[33,32372,73],{"class":39},[33,32374,32076],{"class":76},[33,32376,32377],{"class":47},".s2(x)\n",[33,32379,32380,32382,32384,32386,32388,32390],{"class":35,"line":1535},[33,32381,32354],{"class":47},[33,32383,73],{"class":39},[33,32385,32076],{"class":76},[33,32387,32361],{"class":47},[33,32389,32076],{"class":76},[33,32391,32392],{"class":47},".c3(x))\n",[33,32394,32395,32397,32399,32401],{"class":35,"line":1540},[33,32396,32354],{"class":47},[33,32398,73],{"class":39},[33,32400,32076],{"class":76},[33,32402,32403],{"class":47},".s4(x)\n",[33,32405,32406,32408,32410,32412],{"class":35,"line":4027},[33,32407,32354],{"class":47},[33,32409,73],{"class":39},[33,32411,32076],{"class":76},[33,32413,32414],{"class":47},".flatten(x)\n",[33,32416,32417,32419,32421,32423,32425,32427],{"class":35,"line":4032},[33,32418,32354],{"class":47},[33,32420,73],{"class":39},[33,32422,32076],{"class":76},[33,32424,32361],{"class":47},[33,32426,32076],{"class":76},[33,32428,32429],{"class":47},".f5(x))\n",[33,32431,32432,32434,32436,32438,32440,32442],{"class":35,"line":9199},[33,32433,32354],{"class":47},[33,32435,73],{"class":39},[33,32437,32076],{"class":76},[33,32439,32361],{"class":47},[33,32441,32076],{"class":76},[33,32443,32444],{"class":47},".f6(x))\n",[33,32446,32447,32449,32451,32453],{"class":35,"line":9223},[33,32448,32354],{"class":47},[33,32450,73],{"class":39},[33,32452,32076],{"class":76},[33,32454,32455],{"class":47},".f7(x)\n",[33,32457,32458,32460],{"class":35,"line":9228},[33,32459,16003],{"class":39},[33,32461,32462],{"class":47}," x\n",[33,32464,32465],{"class":35,"line":9234},[33,32466,160],{"emptyLinePlaceholder":159},[33,32468,32469,32471,32474,32476,32479],{"class":35,"line":9261},[33,32470,2987],{"class":39},[33,32472,32473],{"class":76}," __name__",[33,32475,4359],{"class":39},[33,32477,32478],{"class":119},"\"__main__\"",[33,32480,5141],{"class":47},[33,32482,32483],{"class":35,"line":9266},[33,32484,32485],{"class":60},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[33,32487,32488,32491,32493,32495,32498,32500,32503,32505,32507],{"class":35,"line":9272},[33,32489,32490],{"class":47},"    device",[33,32492,73],{"class":39},[33,32494,31704],{"class":47},[33,32496,32497],{"class":119},"\"cuda\"",[33,32499,3145],{"class":39},[33,32501,32502],{"class":47}," torch.cuda.is_available() ",[33,32504,3142],{"class":39},[33,32506,31729],{"class":119},[33,32508,884],{"class":47},[33,32510,32511],{"class":35,"line":9284},[33,32512,32513],{"class":60},"    # 如果就是想指定用cpu用下方代码:\n",[33,32515,32516],{"class":35,"line":9296},[33,32517,32518],{"class":60},"    # device=\"cpu\"\n",[33,32520,32521],{"class":35,"line":9308},[33,32522,32523],{"class":60},"    # print(device)\n",[33,32525,32526],{"class":35,"line":10967},[33,32527,160],{"emptyLinePlaceholder":159},[33,32529,32530],{"class":35,"line":10992},[33,32531,32532],{"class":60},"    # 实例化模型\n",[33,32534,32535],{"class":35,"line":11015},[33,32536,32537],{"class":60},"    # 将模型放到设备中去运行\n",[33,32539,32540,32543,32545],{"class":35,"line":11039},[33,32541,32542],{"class":47},"    model",[33,32544,73],{"class":39},[33,32546,32547],{"class":47},"LeNet().to(device)\n",[33,32549,32550,32553,32556,32558,32560,32562,32564,32566],{"class":35,"line":11044},[33,32551,32552],{"class":76},"    print",[33,32554,32555],{"class":47},"(summary(model,(",[33,32557,701],{"class":76},[33,32559,704],{"class":47},[33,32561,2499],{"class":76},[33,32563,704],{"class":47},[33,32565,2499],{"class":76},[33,32567,32568],{"class":47},")))\n",[14,32570,32571],{},[2918,32572],{"alt":28,"src":32573},"\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,32575,32576],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[574,32578,32579],{"start":51},[564,32580,32581],{},"训练",[14,32583,32584],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,32586,32587],{},"在训练之前可以将数据展示看一下",[23,32589,32591],{"className":31631,"code":32590,"language":31633,"meta":28,"style":28},"# 建立画图的函数，用于展示数据\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",[30,32592,32593,32598,32603,32615,32627,32640,32645,32657,32662,32674,32679,32691,32695,32699,32720,32732,32737,32758,32769,32773,32778,32796,32807,32812,32823,32828,32839,32843,32848,32863,32876,32881,32886,32899,32912,32925,32930,32934,32939,32959,32976,32996,33009,33022,33032,33047],{"__ignoreMap":28},[33,32594,32595],{"class":35,"line":36},[33,32596,32597],{"class":60},"# 建立画图的函数，用于展示数据\n",[33,32599,32600],{"class":35,"line":51},[33,32601,32602],{"class":60},"# torchvision中包含很多内置的数据集\n",[33,32604,32605,32607,32610,32612],{"class":35,"line":57},[33,32606,31990],{"class":39},[33,32608,32609],{"class":47}," sklearn.externals.array_api_compat.torch ",[33,32611,31645],{"class":39},[33,32613,32614],{"class":47}," squeeze\n",[33,32616,32617,32619,32622,32624],{"class":35,"line":64},[33,32618,31990],{"class":39},[33,32620,32621],{"class":47}," torchvision.datasets ",[33,32623,31645],{"class":39},[33,32625,32626],{"class":47}," FashionMNIST\n",[33,32628,32629,32631,32634,32637],{"class":35,"line":83},[33,32630,31645],{"class":39},[33,32632,32633],{"class":47}," numpy ",[33,32635,32636],{"class":39},"as",[33,32638,32639],{"class":47}," np\n",[33,32641,32642],{"class":35,"line":89},[33,32643,32644],{"class":60},"# 引入处理数据集的包\n",[33,32646,32647,32649,32652,32654],{"class":35,"line":98},[33,32648,31990],{"class":39},[33,32650,32651],{"class":47}," torchvision ",[33,32653,31645],{"class":39},[33,32655,32656],{"class":47}," transforms\n",[33,32658,32659],{"class":35,"line":110},[33,32660,32661],{"class":60},"# 从torch库中引入数据处理的包\n",[33,32663,32664,32666,32669,32671],{"class":35,"line":134},[33,32665,31645],{"class":39},[33,32667,32668],{"class":47}," torch.utils.data ",[33,32670,32636],{"class":39},[33,32672,32673],{"class":47}," Data\n",[33,32675,32676],{"class":35,"line":156},[33,32677,32678],{"class":60},"# 导入画图的库\n",[33,32680,32681,32683,32686,32688],{"class":35,"line":163},[33,32682,31645],{"class":39},[33,32684,32685],{"class":47}," matplotlib.pyplot ",[33,32687,32636],{"class":39},[33,32689,32690],{"class":47}," plt\n",[33,32692,32693],{"class":35,"line":169},[33,32694,160],{"emptyLinePlaceholder":159},[33,32696,32697],{"class":35,"line":175},[33,32698,160],{"emptyLinePlaceholder":159},[33,32700,32701,32704,32706,32709,32712,32714,32717],{"class":35,"line":181},[33,32702,32703],{"class":47},"train_data",[33,32705,73],{"class":39},[33,32707,32708],{"class":47},"FashionMNIST(",[33,32710,32711],{"class":955},"root",[33,32713,73],{"class":39},[33,32715,32716],{"class":119},"'.\u002Fdata'",[33,32718,32719],{"class":47},",\n",[33,32721,32722,32725,32727,32730],{"class":35,"line":196},[33,32723,32724],{"class":955},"                        train",[33,32726,73],{"class":39},[33,32728,32729],{"class":76},"True",[33,32731,32719],{"class":47},[33,32733,32734],{"class":35,"line":213},[33,32735,32736],{"class":60},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[33,32738,32739,32742,32744,32747,32750,32752,32755],{"class":35,"line":228},[33,32740,32741],{"class":955},"                        transform",[33,32743,73],{"class":39},[33,32745,32746],{"class":47},"transforms.Compose([transforms.Resize(",[33,32748,32749],{"class":955},"size",[33,32751,73],{"class":39},[33,32753,32754],{"class":76},"224",[33,32756,32757],{"class":47},"),transforms.ToTensor()]),\n",[33,32759,32760,32763,32765,32767],{"class":35,"line":1345},[33,32761,32762],{"class":955},"                        download",[33,32764,73],{"class":39},[33,32766,32729],{"class":76},[33,32768,884],{"class":47},[33,32770,32771],{"class":35,"line":1350},[33,32772,160],{"emptyLinePlaceholder":159},[33,32774,32775],{"class":35,"line":1359},[33,32776,32777],{"class":60},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[33,32779,32780,32783,32785,32788,32791,32793],{"class":35,"line":1364},[33,32781,32782],{"class":47},"train_loader",[33,32784,73],{"class":39},[33,32786,32787],{"class":47},"Data.DataLoader(",[33,32789,32790],{"class":955},"dataset",[33,32792,73],{"class":39},[33,32794,32795],{"class":47},"train_data,\n",[33,32797,32798,32801,32803,32805],{"class":35,"line":1370},[33,32799,32800],{"class":955},"                             batch_size",[33,32802,73],{"class":39},[33,32804,1820],{"class":76},[33,32806,32719],{"class":47},[33,32808,32809],{"class":35,"line":1425},[33,32810,32811],{"class":60},"                             # 数据是否打乱\n",[33,32813,32814,32817,32819,32821],{"class":35,"line":1438},[33,32815,32816],{"class":955},"                             shuffle",[33,32818,73],{"class":39},[33,32820,32729],{"class":76},[33,32822,32719],{"class":47},[33,32824,32825],{"class":35,"line":1451},[33,32826,32827],{"class":60},"                             # 规定加载数据的进程\n",[33,32829,32830,32833,32835,32837],{"class":35,"line":1457},[33,32831,32832],{"class":955},"                             num_workers",[33,32834,73],{"class":39},[33,32836,766],{"class":76},[33,32838,884],{"class":47},[33,32840,32841],{"class":35,"line":1466},[33,32842,160],{"emptyLinePlaceholder":159},[33,32844,32845],{"class":35,"line":1471},[33,32846,32847],{"class":60},"# 获得一个batch的数据\n",[33,32849,32850,32852,32855,32857,32860],{"class":35,"line":1477},[33,32851,4435],{"class":39},[33,32853,32854],{"class":47}," step,(b_x,b_y) ",[33,32856,27296],{"class":39},[33,32858,32859],{"class":76}," enumerate",[33,32861,32862],{"class":47},"(train_loader):\n",[33,32864,32865,32867,32870,32872,32874],{"class":35,"line":1504},[33,32866,4509],{"class":39},[33,32868,32869],{"class":47}," step ",[33,32871,1265],{"class":39},[33,32873,5492],{"class":76},[33,32875,5141],{"class":47},[33,32877,32878],{"class":35,"line":1509},[33,32879,32880],{"class":39},"        break\n",[33,32882,32883],{"class":35,"line":1525},[33,32884,32885],{"class":60},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[33,32887,32888,32891,32893,32896],{"class":35,"line":1535},[33,32889,32890],{"class":47},"batch_x",[33,32892,73],{"class":39},[33,32894,32895],{"class":47},"b_x.squeeze().numpy()  ",[33,32897,32898],{"class":60},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[33,32900,32901,32904,32906,32909],{"class":35,"line":1540},[33,32902,32903],{"class":47},"batch_y",[33,32905,73],{"class":39},[33,32907,32908],{"class":47},"b_y.numpy()   ",[33,32910,32911],{"class":60},"#将张量转换成功numpy数组\n",[33,32913,32914,32917,32919,32922],{"class":35,"line":4027},[33,32915,32916],{"class":47},"class_label",[33,32918,73],{"class":39},[33,32920,32921],{"class":47},"train_data.classes  ",[33,32923,32924],{"class":60},"#训练集标签\n",[33,32926,32927],{"class":35,"line":4032},[33,32928,32929],{"class":60},"# print(class_label)\n",[33,32931,32932],{"class":35,"line":9199},[33,32933,160],{"emptyLinePlaceholder":159},[33,32935,32936],{"class":35,"line":9223},[33,32937,32938],{"class":60},"# 可视化一个batch的图像\n",[33,32940,32941,32944,32947,32949,32951,32953,32955,32957],{"class":35,"line":9228},[33,32942,32943],{"class":47},"plt.figure(",[33,32945,32946],{"class":955},"figsize",[33,32948,73],{"class":39},[33,32950,345],{"class":47},[33,32952,2099],{"class":76},[33,32954,704],{"class":47},[33,32956,722],{"class":76},[33,32958,31750],{"class":47},[33,32960,32961,32963,32966,32968,32971,32973],{"class":35,"line":9234},[33,32962,4435],{"class":39},[33,32964,32965],{"class":47}," ii ",[33,32967,27296],{"class":39},[33,32969,32970],{"class":47}," np.arange(",[33,32972,1196],{"class":76},[33,32974,32975],{"class":47},"(batch_y)):\n",[33,32977,32978,32981,32983,32985,32987,32990,32992,32994],{"class":35,"line":9261},[33,32979,32980],{"class":47},"    plt.subplot(",[33,32982,717],{"class":76},[33,32984,704],{"class":47},[33,32986,2201],{"class":76},[33,32988,32989],{"class":47},",ii ",[33,32991,1271],{"class":39},[33,32993,26371],{"class":76},[33,32995,884],{"class":47},[33,32997,32998,33001,33004,33006],{"class":35,"line":9266},[33,32999,33000],{"class":47},"    plt.imshow(batch_x[ii,:,:],",[33,33002,33003],{"class":955},"cmap",[33,33005,73],{"class":39},[33,33007,33008],{"class":47},"plt.cm.gray)\n",[33,33010,33011,33014,33016,33018,33020],{"class":35,"line":9272},[33,33012,33013],{"class":47},"    plt.title(class_label[batch_y[ii]],",[33,33015,32749],{"class":955},[33,33017,73],{"class":39},[33,33019,77],{"class":76},[33,33021,884],{"class":47},[33,33023,33024,33027,33030],{"class":35,"line":9284},[33,33025,33026],{"class":47},"    plt.axis(",[33,33028,33029],{"class":119},"\"off\"",[33,33031,884],{"class":47},[33,33033,33034,33037,33040,33042,33045],{"class":35,"line":9296},[33,33035,33036],{"class":47},"    plt.subplots_adjust(",[33,33038,33039],{"class":955},"wspace",[33,33041,73],{"class":39},[33,33043,33044],{"class":76},"0.05",[33,33046,884],{"class":47},[33,33048,33049],{"class":35,"line":9308},[33,33050,33051],{"class":47},"plt.show()\n",[14,33053,33054],{},"用matplotlib进行展示的过程可以后续再补",[14,33056,33057],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,33059,33060],{},"训练次数就是按照批次过整个训练集数据的次数",[14,33062,33063],{},"模型训练：",[23,33065,33067],{"className":31631,"code":33066,"language":31633,"meta":28,"style":28},"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",[30,33068,33069,33076,33083,33087,33099,33105,33116,33126,33136,33146,33156,33161,33173,33183,33187,33191,33196,33207,33220,33231,33248,33259,33298,33314,33326,33337,33342,33353,33369,33380,33391,33402,33409,33413,33418,33423,33427,33432,33442,33463,33467,33471,33476,33481,33486,33506,33510,33515,33525,33529,33534,33543,33548,33553,33558,33568,33572,33576,33581,33586,33596,33601,33611,33616,33625,33630,33639,33644,33653,33657,33662,33672,33676,33680,33685,33700,33728,33743,33747,33752,33757,33766,33771,33780,33785,33794,33799,33808,33813,33822,33827,33836,33841,33854,33859,33869,33874,33884,33890,33896,33902,33908,33919,33925,33945,33951,33962,33968,33974,33980,33986,33992,33998,34004,34024,34030,34046,34052,34066,34072,34087,34093,34102,34108,34117,34123,34129,34138,34144,34155,34161,34180,34186,34197,34203,34223,34239,34245,34259,34265,34271,34282,34288,34294,34304,34310,34321,34327,34337,34342,34348,34397,34444,34449,34455,34474,34480,34500,34506,34512,34522,34527,34533,34549,34594,34600,34606,34612,34623,34629,34635,34641,34659,34673,34682,34691,34700,34709,34715,34721,34729,34734,34740,34751,34757,34777,34783,34789,34795,34812,34818,34824,34830,34836,34842,34869,34893,34899,34905,34911,34922,34933,34939,34956,34979,35002,35008,35013,35022,35032,35038,35043,35049,35062,35068,35079,35090,35109],{"__ignoreMap":28},[33,33070,33071,33073],{"class":35,"line":36},[33,33072,31645],{"class":39},[33,33074,33075],{"class":47}," copy\n",[33,33077,33078,33080],{"class":35,"line":51},[33,33079,31645],{"class":39},[33,33081,33082],{"class":47}," time\n",[33,33084,33085],{"class":35,"line":57},[33,33086,160],{"emptyLinePlaceholder":159},[33,33088,33089,33091,33094,33096],{"class":35,"line":64},[33,33090,31645],{"class":39},[33,33092,33093],{"class":47}," pandas ",[33,33095,32636],{"class":39},[33,33097,33098],{"class":47}," pd\n",[33,33100,33101,33103],{"class":35,"line":83},[33,33102,31645],{"class":39},[33,33104,31648],{"class":47},[33,33106,33107,33109,33111,33113],{"class":35,"line":89},[33,33108,31990],{"class":39},[33,33110,32668],{"class":47},[33,33112,31645],{"class":39},[33,33114,33115],{"class":47}," Dataset\n",[33,33117,33118,33120,33122,33124],{"class":35,"line":98},[33,33119,31990],{"class":39},[33,33121,32621],{"class":47},[33,33123,31645],{"class":39},[33,33125,32626],{"class":47},[33,33127,33128,33130,33132,33134],{"class":35,"line":110},[33,33129,31990],{"class":39},[33,33131,32651],{"class":47},[33,33133,31645],{"class":39},[33,33135,32656],{"class":47},[33,33137,33138,33140,33142,33144],{"class":35,"line":134},[33,33139,31645],{"class":39},[33,33141,32668],{"class":47},[33,33143,32636],{"class":39},[33,33145,32673],{"class":47},[33,33147,33148,33150,33152,33154],{"class":35,"line":156},[33,33149,31645],{"class":39},[33,33151,32685],{"class":47},[33,33153,32636],{"class":39},[33,33155,32690],{"class":47},[33,33157,33158],{"class":35,"line":163},[33,33159,33160],{"class":60},"# 导入模型\n",[33,33162,33163,33165,33168,33170],{"class":35,"line":169},[33,33164,31990],{"class":39},[33,33166,33167],{"class":47}," model ",[33,33169,31645],{"class":39},[33,33171,33172],{"class":47}," LeNet\n",[33,33174,33175,33177,33179,33181],{"class":35,"line":175},[33,33176,31990],{"class":39},[33,33178,31993],{"class":47},[33,33180,31645],{"class":39},[33,33182,31998],{"class":47},[33,33184,33185],{"class":35,"line":181},[33,33186,160],{"emptyLinePlaceholder":159},[33,33188,33189],{"class":35,"line":196},[33,33190,160],{"emptyLinePlaceholder":159},[33,33192,33193],{"class":35,"line":213},[33,33194,33195],{"class":60},"# 处理训练集与验证集函数--->划分数据集\n",[33,33197,33198,33201,33204],{"class":35,"line":228},[33,33199,33200],{"class":39},"def",[33,33202,33203],{"class":43}," train_val_data_process",[33,33205,33206],{"class":47},"():\n",[33,33208,33209,33212,33214,33216,33218],{"class":35,"line":1345},[33,33210,33211],{"class":47},"    train_data",[33,33213,73],{"class":39},[33,33215,32708],{"class":47},[33,33217,32716],{"class":119},[33,33219,32719],{"class":47},[33,33221,33222,33225,33227,33229],{"class":35,"line":1350},[33,33223,33224],{"class":955},"                            train",[33,33226,73],{"class":39},[33,33228,32729],{"class":76},[33,33230,32719],{"class":47},[33,33232,33233,33236,33238,33240,33242,33244,33246],{"class":35,"line":1359},[33,33234,33235],{"class":955},"                            transform",[33,33237,73],{"class":39},[33,33239,32746],{"class":47},[33,33241,32749],{"class":955},[33,33243,73],{"class":39},[33,33245,2499],{"class":76},[33,33247,32757],{"class":47},[33,33249,33250,33253,33255,33257],{"class":35,"line":1364},[33,33251,33252],{"class":955},"                            download",[33,33254,73],{"class":39},[33,33256,32729],{"class":76},[33,33258,884],{"class":47},[33,33260,33261,33264,33266,33269,33272,33274,33277,33279,33281,33284,33286,33288,33291,33293,33295],{"class":35,"line":1370},[33,33262,33263],{"class":47},"    train_data,val_data",[33,33265,73],{"class":39},[33,33267,33268],{"class":47},"Data.random_split(train_data,[",[33,33270,33271],{"class":76},"round",[33,33273,345],{"class":47},[33,33275,33276],{"class":76},"0.8",[33,33278,2057],{"class":39},[33,33280,1196],{"class":76},[33,33282,33283],{"class":47},"(train_data)),",[33,33285,33271],{"class":76},[33,33287,345],{"class":47},[33,33289,33290],{"class":76},"0.2",[33,33292,2057],{"class":39},[33,33294,1196],{"class":76},[33,33296,33297],{"class":47},"(train_data))])\n",[33,33299,33300,33303,33305,33308,33310,33312],{"class":35,"line":1425},[33,33301,33302],{"class":47},"    train_dataloader ",[33,33304,73],{"class":39},[33,33306,33307],{"class":47}," Data.DataLoader(",[33,33309,32790],{"class":955},[33,33311,73],{"class":39},[33,33313,32795],{"class":47},[33,33315,33316,33319,33321,33324],{"class":35,"line":1438},[33,33317,33318],{"class":955},"                                       batch_size",[33,33320,73],{"class":39},[33,33322,33323],{"class":76},"128",[33,33325,32719],{"class":47},[33,33327,33328,33331,33333,33335],{"class":35,"line":1451},[33,33329,33330],{"class":955},"                                       shuffle",[33,33332,73],{"class":39},[33,33334,32729],{"class":76},[33,33336,32719],{"class":47},[33,33338,33339],{"class":35,"line":1457},[33,33340,33341],{"class":60},"                                       # 规定8个进程\n",[33,33343,33344,33347,33349,33351],{"class":35,"line":1466},[33,33345,33346],{"class":955},"                                       num_workers",[33,33348,73],{"class":39},[33,33350,737],{"class":76},[33,33352,884],{"class":47},[33,33354,33355,33358,33360,33362,33364,33366],{"class":35,"line":1471},[33,33356,33357],{"class":47},"    val_dataloader",[33,33359,73],{"class":39},[33,33361,32787],{"class":47},[33,33363,32790],{"class":955},[33,33365,73],{"class":39},[33,33367,33368],{"class":47},"val_data,\n",[33,33370,33371,33374,33376,33378],{"class":35,"line":1477},[33,33372,33373],{"class":955},"                                   batch_size",[33,33375,73],{"class":39},[33,33377,33323],{"class":76},[33,33379,32719],{"class":47},[33,33381,33382,33385,33387,33389],{"class":35,"line":1504},[33,33383,33384],{"class":955},"                                   shuffle",[33,33386,73],{"class":39},[33,33388,32729],{"class":76},[33,33390,32719],{"class":47},[33,33392,33393,33396,33398,33400],{"class":35,"line":1509},[33,33394,33395],{"class":955},"                                   num_workers",[33,33397,73],{"class":39},[33,33399,737],{"class":76},[33,33401,884],{"class":47},[33,33403,33404,33406],{"class":35,"line":1525},[33,33405,5489],{"class":39},[33,33407,33408],{"class":47}," train_dataloader,val_dataloader\n",[33,33410,33411],{"class":35,"line":1535},[33,33412,160],{"emptyLinePlaceholder":159},[33,33414,33415],{"class":35,"line":1540},[33,33416,33417],{"class":60},"# 验证是否出错\n",[33,33419,33420],{"class":35,"line":4027},[33,33421,33422],{"class":60},"# train_val_data_process()\n",[33,33424,33425],{"class":35,"line":4032},[33,33426,160],{"emptyLinePlaceholder":159},[33,33428,33429],{"class":35,"line":9199},[33,33430,33431],{"class":60},"# 定义模型训练函数\n",[33,33433,33434,33436,33439],{"class":35,"line":9223},[33,33435,33200],{"class":39},[33,33437,33438],{"class":43}," train_model_process",[33,33440,33441],{"class":47},"(model,train_dataloader,val_dataloader,num_epochs):\n",[33,33443,33444,33446,33448,33450,33452,33454,33456,33458,33461],{"class":35,"line":9228},[33,33445,32490],{"class":47},[33,33447,73],{"class":39},[33,33449,31704],{"class":47},[33,33451,32497],{"class":119},[33,33453,3145],{"class":39},[33,33455,32502],{"class":47},[33,33457,3142],{"class":39},[33,33459,33460],{"class":119}," 'cpu'",[33,33462,884],{"class":47},[33,33464,33465],{"class":35,"line":9234},[33,33466,160],{"emptyLinePlaceholder":159},[33,33468,33469],{"class":35,"line":9261},[33,33470,160],{"emptyLinePlaceholder":159},[33,33472,33473],{"class":35,"line":9266},[33,33474,33475],{"class":60},"    # 定义优化器\n",[33,33477,33478],{"class":35,"line":9272},[33,33479,33480],{"class":60},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[33,33482,33483],{"class":35,"line":9284},[33,33484,33485],{"class":60},"    # lr为学习率\n",[33,33487,33488,33491,33493,33496,33499,33501,33504],{"class":35,"line":9296},[33,33489,33490],{"class":47},"    optimizer",[33,33492,73],{"class":39},[33,33494,33495],{"class":47},"torch.optim.Adam(model.parameters(),",[33,33497,33498],{"class":955},"lr",[33,33500,73],{"class":39},[33,33502,33503],{"class":76},"0.001",[33,33505,884],{"class":47},[33,33507,33508],{"class":35,"line":9308},[33,33509,160],{"emptyLinePlaceholder":159},[33,33511,33512],{"class":35,"line":10967},[33,33513,33514],{"class":60},"    # 定义损失函数使用交叉熵损失函数\n",[33,33516,33517,33520,33522],{"class":35,"line":10992},[33,33518,33519],{"class":47},"    criterion",[33,33521,73],{"class":39},[33,33523,33524],{"class":47},"nn.CrossEntropyLoss()\n",[33,33526,33527],{"class":35,"line":11015},[33,33528,160],{"emptyLinePlaceholder":159},[33,33530,33531],{"class":35,"line":11039},[33,33532,33533],{"class":60},"    # 将模型放到GPU中进行训练\n",[33,33535,33536,33538,33540],{"class":35,"line":11044},[33,33537,32542],{"class":47},[33,33539,73],{"class":39},[33,33541,33542],{"class":47},"model.to(device)\n",[33,33544,33545],{"class":35,"line":11049},[33,33546,33547],{"class":60},"    # 复制当前模型的参数\n",[33,33549,33550],{"class":35,"line":11054},[33,33551,33552],{"class":60},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[33,33554,33555],{"class":35,"line":11063},[33,33556,33557],{"class":60},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[33,33559,33560,33563,33565],{"class":35,"line":11068},[33,33561,33562],{"class":47},"    best_model_wts",[33,33564,73],{"class":39},[33,33566,33567],{"class":47},"copy.deepcopy(model.state_dict())\n",[33,33569,33570],{"class":35,"line":11074},[33,33571,160],{"emptyLinePlaceholder":159},[33,33573,33574],{"class":35,"line":11095},[33,33575,160],{"emptyLinePlaceholder":159},[33,33577,33578],{"class":35,"line":11101},[33,33579,33580],{"class":60},"    # 初始化参数\n",[33,33582,33583],{"class":35,"line":11115},[33,33584,33585],{"class":60},"    # 最高准确度\n",[33,33587,33588,33591,33593],{"class":35,"line":11121},[33,33589,33590],{"class":47},"    best_acc",[33,33592,73],{"class":39},[33,33594,33595],{"class":76},"0.0\n",[33,33597,33598],{"class":35,"line":11148},[33,33599,33600],{"class":60},"    # 训练集损失列表\n",[33,33602,33603,33606,33608],{"class":35,"line":11157},[33,33604,33605],{"class":47},"    train_loss_all",[33,33607,73],{"class":39},[33,33609,33610],{"class":47},"[]\n",[33,33612,33613],{"class":35,"line":11163},[33,33614,33615],{"class":60},"    # 验证集函数列表\n",[33,33617,33618,33621,33623],{"class":35,"line":11171},[33,33619,33620],{"class":47},"    val_loss_all",[33,33622,73],{"class":39},[33,33624,33610],{"class":47},[33,33626,33627],{"class":35,"line":11176},[33,33628,33629],{"class":60},"    # 训练集准确度列表\n",[33,33631,33632,33635,33637],{"class":35,"line":17855},[33,33633,33634],{"class":47},"    train_acc_all",[33,33636,73],{"class":39},[33,33638,33610],{"class":47},[33,33640,33641],{"class":35,"line":17861},[33,33642,33643],{"class":60},"    # 验证集准确度列表\n",[33,33645,33646,33649,33651],{"class":35,"line":17884},[33,33647,33648],{"class":47},"    val_acc_all",[33,33650,73],{"class":39},[33,33652,33610],{"class":47},[33,33654,33655],{"class":35,"line":17890},[33,33656,160],{"emptyLinePlaceholder":159},[33,33658,33659],{"class":35,"line":17913},[33,33660,33661],{"class":60},"    # 保存当前时间--->方便看每轮训练的时间\n",[33,33663,33664,33667,33669],{"class":35,"line":17927},[33,33665,33666],{"class":47},"    since",[33,33668,73],{"class":39},[33,33670,33671],{"class":47},"time.time()\n",[33,33673,33674],{"class":35,"line":17947},[33,33675,160],{"emptyLinePlaceholder":159},[33,33677,33678],{"class":35,"line":17953},[33,33679,160],{"emptyLinePlaceholder":159},[33,33681,33682],{"class":35,"line":17964},[33,33683,33684],{"class":60},"    # 准备工作完成--->开始训练模型\n",[33,33686,33687,33689,33692,33694,33697],{"class":35,"line":17987},[33,33688,857],{"class":39},[33,33690,33691],{"class":47}," epoch ",[33,33693,27296],{"class":39},[33,33695,33696],{"class":76}," range",[33,33698,33699],{"class":47},"(num_epochs):\n",[33,33701,33702,33705,33707,33710,33713,33715,33717,33719,33722,33724,33726],{"class":35,"line":18009},[33,33703,33704],{"class":76},"        print",[33,33706,345],{"class":47},[33,33708,33709],{"class":119},"\"Epoch ",[33,33711,33712],{"class":76},"{}",[33,33714,2184],{"class":119},[33,33716,33712],{"class":76},[33,33718,1866],{"class":119},[33,33720,33721],{"class":47},".format(epoch,num_epochs",[33,33723,1199],{"class":39},[33,33725,701],{"class":76},[33,33727,31750],{"class":47},[33,33729,33730,33732,33734,33737,33739,33741],{"class":35,"line":18014},[33,33731,33704],{"class":76},[33,33733,345],{"class":47},[33,33735,33736],{"class":119},"\"-\"",[33,33738,2057],{"class":39},[33,33740,77],{"class":76},[33,33742,884],{"class":47},[33,33744,33745],{"class":35,"line":18020},[33,33746,160],{"emptyLinePlaceholder":159},[33,33748,33749],{"class":35,"line":18034},[33,33750,33751],{"class":60},"        # 初始化参数\n",[33,33753,33754],{"class":35,"line":18047},[33,33755,33756],{"class":60},"        # 训练集损失函数\n",[33,33758,33759,33762,33764],{"class":35,"line":18052},[33,33760,33761],{"class":47},"        train_loss",[33,33763,73],{"class":39},[33,33765,33595],{"class":76},[33,33767,33768],{"class":35,"line":18066},[33,33769,33770],{"class":60},"        # 训练集准确度\n",[33,33772,33773,33776,33778],{"class":35,"line":18071},[33,33774,33775],{"class":47},"        train_corrects",[33,33777,73],{"class":39},[33,33779,4493],{"class":76},[33,33781,33782],{"class":35,"line":18077},[33,33783,33784],{"class":60},"        # 验证集损失函数\n",[33,33786,33787,33790,33792],{"class":35,"line":18082},[33,33788,33789],{"class":47},"        val_loss",[33,33791,73],{"class":39},[33,33793,33595],{"class":76},[33,33795,33796],{"class":35,"line":18096},[33,33797,33798],{"class":60},"        # 验证集准确度\n",[33,33800,33801,33804,33806],{"class":35,"line":18101},[33,33802,33803],{"class":47},"        val_corrects",[33,33805,73],{"class":39},[33,33807,4493],{"class":76},[33,33809,33810],{"class":35,"line":18106},[33,33811,33812],{"class":60},"        # 训练集样本数量\n",[33,33814,33815,33818,33820],{"class":35,"line":18120},[33,33816,33817],{"class":47},"        train_num",[33,33819,73],{"class":39},[33,33821,4493],{"class":76},[33,33823,33824],{"class":35,"line":18132},[33,33825,33826],{"class":60},"        # 验证集样本数量\n",[33,33828,33829,33832,33834],{"class":35,"line":18137},[33,33830,33831],{"class":47},"        val_num",[33,33833,73],{"class":39},[33,33835,4493],{"class":76},[33,33837,33838],{"class":35,"line":18150},[33,33839,33840],{"class":60},"        # 将数据放到设备,并开始训练\n",[33,33842,33843,33845,33847,33849,33851],{"class":35,"line":18155},[33,33844,1216],{"class":39},[33,33846,32854],{"class":47},[33,33848,27296],{"class":39},[33,33850,32859],{"class":76},[33,33852,33853],{"class":47},"(train_dataloader):\n",[33,33855,33856],{"class":35,"line":18160},[33,33857,33858],{"class":60},"            # 将特征放入到训练设备\n",[33,33860,33861,33864,33866],{"class":35,"line":18165},[33,33862,33863],{"class":47},"            b_x",[33,33865,73],{"class":39},[33,33867,33868],{"class":47},"b_x.to(device)\n",[33,33870,33871],{"class":35,"line":18178},[33,33872,33873],{"class":60},"            # 将标签放入到训练设备当中\n",[33,33875,33876,33879,33881],{"class":35,"line":18183},[33,33877,33878],{"class":47},"            b_y",[33,33880,73],{"class":39},[33,33882,33883],{"class":47},"b_y.to(device)\n",[33,33885,33887],{"class":35,"line":33886},98,[33,33888,33889],{"class":60},"            # 设置模型为训练模式\n",[33,33891,33893],{"class":35,"line":33892},99,[33,33894,33895],{"class":47},"            model.train()\n",[33,33897,33899],{"class":35,"line":33898},100,[33,33900,33901],{"class":60},"            # 将数据放到模型当中,开始前向传播\n",[33,33903,33905],{"class":35,"line":33904},101,[33,33906,33907],{"class":60},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[33,33909,33911,33914,33916],{"class":35,"line":33910},102,[33,33912,33913],{"class":47},"            output",[33,33915,73],{"class":39},[33,33917,33918],{"class":47},"model(b_x)\n",[33,33920,33922],{"class":35,"line":33921},103,[33,33923,33924],{"class":60},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[33,33926,33928,33931,33933,33936,33939,33941,33943],{"class":35,"line":33927},104,[33,33929,33930],{"class":47},"            pre_lab",[33,33932,73],{"class":39},[33,33934,33935],{"class":47},"torch.argmax(output,",[33,33937,33938],{"class":955},"dim",[33,33940,73],{"class":39},[33,33942,701],{"class":76},[33,33944,884],{"class":47},[33,33946,33948],{"class":35,"line":33947},105,[33,33949,33950],{"class":60},"            # 计算每一个batch的损失函数\n",[33,33952,33954,33957,33959],{"class":35,"line":33953},106,[33,33955,33956],{"class":47},"            loss",[33,33958,73],{"class":39},[33,33960,33961],{"class":47},"criterion(output,b_y)\n",[33,33963,33965],{"class":35,"line":33964},107,[33,33966,33967],{"class":60},"            # 将梯度初始化为0\n",[33,33969,33971],{"class":35,"line":33970},108,[33,33972,33973],{"class":47},"            optimizer.zero_grad()\n",[33,33975,33977],{"class":35,"line":33976},109,[33,33978,33979],{"class":60},"            # 梯度置为0后再进行反向传播\n",[33,33981,33983],{"class":35,"line":33982},110,[33,33984,33985],{"class":47},"            loss.backward()\n",[33,33987,33989],{"class":35,"line":33988},111,[33,33990,33991],{"class":60},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[33,33993,33995],{"class":35,"line":33994},112,[33,33996,33997],{"class":47},"            optimizer.step()\n",[33,33999,34001],{"class":35,"line":34000},113,[33,34002,34003],{"class":60},"            # loss.item()指的是batch的平均损失\n",[33,34005,34007,34010,34012,34015,34017,34020,34022],{"class":35,"line":34006},114,[33,34008,34009],{"class":47},"            train_loss",[33,34011,10728],{"class":39},[33,34013,34014],{"class":47},"loss.item()",[33,34016,2057],{"class":39},[33,34018,34019],{"class":47},"b_x.size(",[33,34021,766],{"class":76},[33,34023,884],{"class":47},[33,34025,34027],{"class":35,"line":34026},115,[33,34028,34029],{"class":60},"            # 计算每个批次中正确预测的数量\n",[33,34031,34033,34036,34038,34041,34043],{"class":35,"line":34032},116,[33,34034,34035],{"class":47},"            train_corrects",[33,34037,10728],{"class":39},[33,34039,34040],{"class":47},"torch.sum(pre_lab",[33,34042,4359],{"class":39},[33,34044,34045],{"class":47},"b_y.data)\n",[33,34047,34049],{"class":35,"line":34048},117,[33,34050,34051],{"class":60},"            # 计算目前为止一共处理了多少样本\n",[33,34053,34055,34058,34060,34062,34064],{"class":35,"line":34054},118,[33,34056,34057],{"class":47},"            train_num",[33,34059,10728],{"class":39},[33,34061,34019],{"class":47},[33,34063,766],{"class":76},[33,34065,884],{"class":47},[33,34067,34069],{"class":35,"line":34068},119,[33,34070,34071],{"class":60},"        # 验证数据\n",[33,34073,34075,34077,34080,34082,34084],{"class":35,"line":34074},120,[33,34076,1216],{"class":39},[33,34078,34079],{"class":47}," step ,(b_x,b_y) ",[33,34081,27296],{"class":39},[33,34083,32859],{"class":76},[33,34085,34086],{"class":47},"(val_dataloader):\n",[33,34088,34090],{"class":35,"line":34089},121,[33,34091,34092],{"class":60},"            # 将特征放到验证设备当中\n",[33,34094,34096,34098,34100],{"class":35,"line":34095},122,[33,34097,33863],{"class":47},[33,34099,73],{"class":39},[33,34101,33868],{"class":47},[33,34103,34105],{"class":35,"line":34104},123,[33,34106,34107],{"class":60},"            # 将标签放到放到训练设备当中\n",[33,34109,34111,34113,34115],{"class":35,"line":34110},124,[33,34112,33878],{"class":47},[33,34114,73],{"class":39},[33,34116,33883],{"class":47},[33,34118,34120],{"class":35,"line":34119},125,[33,34121,34122],{"class":60},"            # 开启验证模式，设置模型为评估模式\n",[33,34124,34126],{"class":35,"line":34125},126,[33,34127,34128],{"class":47},"            model.eval()\n",[33,34130,34132,34135],{"class":35,"line":34131},127,[33,34133,34134],{"class":39},"            with",[33,34136,34137],{"class":47}," torch.no_grad():\n",[33,34139,34141],{"class":35,"line":34140},128,[33,34142,34143],{"class":60},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[33,34145,34147,34150,34152],{"class":35,"line":34146},129,[33,34148,34149],{"class":47},"                output ",[33,34151,73],{"class":39},[33,34153,34154],{"class":47}," model(b_x)\n",[33,34156,34158],{"class":35,"line":34157},130,[33,34159,34160],{"class":60},"                # 查找每一行中最大值对应的下标\n",[33,34162,34164,34167,34169,34172,34174,34176,34178],{"class":35,"line":34163},131,[33,34165,34166],{"class":47},"                pre_lab ",[33,34168,73],{"class":39},[33,34170,34171],{"class":47}," torch.argmax(output, ",[33,34173,33938],{"class":955},[33,34175,73],{"class":39},[33,34177,701],{"class":76},[33,34179,884],{"class":47},[33,34181,34183],{"class":35,"line":34182},132,[33,34184,34185],{"class":60},"                # 计算验证集上的当前 batch 损失\n",[33,34187,34189,34192,34194],{"class":35,"line":34188},133,[33,34190,34191],{"class":47},"                val_batch_loss ",[33,34193,73],{"class":39},[33,34195,34196],{"class":47}," criterion(output, b_y)\n",[33,34198,34200],{"class":35,"line":34199},134,[33,34201,34202],{"class":60},"                # 对损失函数进行累加（按样本数加权）\n",[33,34204,34206,34209,34211,34214,34216,34219,34221],{"class":35,"line":34205},135,[33,34207,34208],{"class":47},"                val_loss ",[33,34210,10728],{"class":39},[33,34212,34213],{"class":47}," val_batch_loss.item() ",[33,34215,2057],{"class":39},[33,34217,34218],{"class":47}," b_x.size(",[33,34220,766],{"class":76},[33,34222,884],{"class":47},[33,34224,34226,34229,34231,34234,34236],{"class":35,"line":34225},136,[33,34227,34228],{"class":47},"                val_corrects ",[33,34230,10728],{"class":39},[33,34232,34233],{"class":47}," torch.sum(pre_lab ",[33,34235,4359],{"class":39},[33,34237,34238],{"class":47}," b_y.data)\n",[33,34240,34242],{"class":35,"line":34241},137,[33,34243,34244],{"class":60},"                # 当前用于验证的样本数量\n",[33,34246,34248,34251,34253,34255,34257],{"class":35,"line":34247},138,[33,34249,34250],{"class":47},"            val_num ",[33,34252,10728],{"class":39},[33,34254,34218],{"class":47},[33,34256,766],{"class":76},[33,34258,884],{"class":47},[33,34260,34262],{"class":35,"line":34261},139,[33,34263,34264],{"class":60},"        # 计算并保存每一次迭代的loss值和准确率\n",[33,34266,34268],{"class":35,"line":34267},140,[33,34269,34270],{"class":60},"        # 计算并保存训练集的loss值\n",[33,34272,34274,34277,34279],{"class":35,"line":34273},141,[33,34275,34276],{"class":47},"        train_loss_all.append(train_loss",[33,34278,2184],{"class":39},[33,34280,34281],{"class":47},"train_num)\n",[33,34283,34285],{"class":35,"line":34284},142,[33,34286,34287],{"class":60},"        # 取双精度\n",[33,34289,34291],{"class":35,"line":34290},143,[33,34292,34293],{"class":60},"        # 计算并保存训练集的准确率\n",[33,34295,34297,34300,34302],{"class":35,"line":34296},144,[33,34298,34299],{"class":47},"        train_acc_all.append(train_corrects.double().item()",[33,34301,2184],{"class":39},[33,34303,34281],{"class":47},[33,34305,34307],{"class":35,"line":34306},145,[33,34308,34309],{"class":60},"        # 计算并保存验证集的loss值\n",[33,34311,34313,34316,34318],{"class":35,"line":34312},146,[33,34314,34315],{"class":47},"        val_loss_all.append(val_loss",[33,34317,2184],{"class":39},[33,34319,34320],{"class":47},"val_num)\n",[33,34322,34324],{"class":35,"line":34323},147,[33,34325,34326],{"class":60},"        # 计算并保存验证集的准确率\n",[33,34328,34330,34333,34335],{"class":35,"line":34329},148,[33,34331,34332],{"class":47},"        val_acc_all.append(val_corrects.double().item()",[33,34334,2184],{"class":39},[33,34336,34320],{"class":47},[33,34338,34340],{"class":35,"line":34339},149,[33,34341,160],{"emptyLinePlaceholder":159},[33,34343,34345],{"class":35,"line":34344},150,[33,34346,34347],{"class":60},"        # 打印训练一轮的loss值和准确率\n",[33,34349,34351,34353,34355,34357,34359,34362,34364,34367,34369,34372,34374,34376,34378,34380,34383,34385,34387,34390,34392,34394],{"class":35,"line":34350},151,[33,34352,33704],{"class":76},[33,34354,345],{"class":47},[33,34356,4994],{"class":119},[33,34358,33712],{"class":76},[33,34360,34361],{"class":119},"train loss:",[33,34363,698],{"class":76},[33,34365,34366],{"class":39},":.4f",[33,34368,2542],{"class":76},[33,34370,34371],{"class":119}," train acc:",[33,34373,698],{"class":76},[33,34375,34366],{"class":39},[33,34377,2542],{"class":76},[33,34379,4994],{"class":119},[33,34381,34382],{"class":47},".format(epoch,train_loss_all[",[33,34384,1199],{"class":39},[33,34386,701],{"class":76},[33,34388,34389],{"class":47},"],train_acc_all[",[33,34391,1199],{"class":39},[33,34393,701],{"class":76},[33,34395,34396],{"class":47},"]))\n",[33,34398,34400,34402,34404,34406,34408,34411,34413,34415,34417,34420,34422,34424,34426,34428,34431,34433,34435,34438,34440,34442],{"class":35,"line":34399},152,[33,34401,33704],{"class":76},[33,34403,345],{"class":47},[33,34405,4994],{"class":119},[33,34407,33712],{"class":76},[33,34409,34410],{"class":119},"val loss:",[33,34412,698],{"class":76},[33,34414,34366],{"class":39},[33,34416,2542],{"class":76},[33,34418,34419],{"class":119}," val acc:",[33,34421,698],{"class":76},[33,34423,34366],{"class":39},[33,34425,2542],{"class":76},[33,34427,4994],{"class":119},[33,34429,34430],{"class":47},".format(epoch,val_loss_all[",[33,34432,1199],{"class":39},[33,34434,701],{"class":76},[33,34436,34437],{"class":47},"],val_acc_all[",[33,34439,1199],{"class":39},[33,34441,701],{"class":76},[33,34443,34396],{"class":47},[33,34445,34447],{"class":35,"line":34446},153,[33,34448,160],{"emptyLinePlaceholder":159},[33,34450,34452],{"class":35,"line":34451},154,[33,34453,34454],{"class":60},"        # 判断准确度--->保存最优模型\n",[33,34456,34458,34460,34463,34465,34467,34469,34471],{"class":35,"line":34457},155,[33,34459,3915],{"class":39},[33,34461,34462],{"class":47}," val_acc_all[",[33,34464,1199],{"class":39},[33,34466,701],{"class":76},[33,34468,693],{"class":47},[33,34470,1265],{"class":39},[33,34472,34473],{"class":47},"best_acc:\n",[33,34475,34477],{"class":35,"line":34476},156,[33,34478,34479],{"class":60},"            # 保存当前模型准确度\n",[33,34481,34483,34486,34488,34490,34493,34495,34497],{"class":35,"line":34482},157,[33,34484,34485],{"class":47},"            best_acc:",[33,34487,1666],{"class":76},[33,34489,73],{"class":39},[33,34491,34492],{"class":47},"val_acc_all[",[33,34494,1199],{"class":39},[33,34496,701],{"class":76},[33,34498,34499],{"class":47},"]\n",[33,34501,34503],{"class":35,"line":34502},158,[33,34504,34505],{"class":60},"            # 保存当前的准确度\n",[33,34507,34509],{"class":35,"line":34508},159,[33,34510,34511],{"class":60},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[33,34513,34515,34518,34520],{"class":35,"line":34514},160,[33,34516,34517],{"class":47},"            best_model_wts",[33,34519,73],{"class":39},[33,34521,33567],{"class":47},[33,34523,34525],{"class":35,"line":34524},161,[33,34526,160],{"emptyLinePlaceholder":159},[33,34528,34530],{"class":35,"line":34529},162,[33,34531,34532],{"class":60},"        # 计算耗时\n",[33,34534,34536,34539,34541,34544,34546],{"class":35,"line":34535},163,[33,34537,34538],{"class":47},"        time_use",[33,34540,73],{"class":39},[33,34542,34543],{"class":47},"time.time()",[33,34545,1199],{"class":39},[33,34547,34548],{"class":47},"since\n",[33,34550,34552,34554,34556,34559,34561,34564,34566,34568,34570,34572,34574,34577,34580,34583,34585,34588,34590,34592],{"class":35,"line":34551},164,[33,34553,33704],{"class":76},[33,34555,345],{"class":47},[33,34557,34558],{"class":119},"'训练和验证耗费的时间",[33,34560,698],{"class":76},[33,34562,34563],{"class":39},":.0f",[33,34565,2542],{"class":76},[33,34567,2144],{"class":119},[33,34569,698],{"class":76},[33,34571,34563],{"class":39},[33,34573,2542],{"class":76},[33,34575,34576],{"class":119},"s'",[33,34578,34579],{"class":47},".format(time_use",[33,34581,34582],{"class":39},"\u002F\u002F",[33,34584,2505],{"class":76},[33,34586,34587],{"class":47},",time_use",[33,34589,1939],{"class":39},[33,34591,2505],{"class":76},[33,34593,31750],{"class":47},[33,34595,34597],{"class":35,"line":34596},165,[33,34598,34599],{"class":60},"    # 选择最优参数\n",[33,34601,34603],{"class":35,"line":34602},166,[33,34604,34605],{"class":60},"    # 加载最高准确率下的模型参数\n",[33,34607,34609],{"class":35,"line":34608},167,[33,34610,34611],{"class":60},"    # model.load_state_dict(best_model_wts)\n",[33,34613,34615,34618,34621],{"class":35,"line":34614},168,[33,34616,34617],{"class":47},"    torch.save(model.state_dict(best_model_wts), ",[33,34619,34620],{"class":119},"'.\u002Fbest_model.pth'",[33,34622,884],{"class":47},[33,34624,34626],{"class":35,"line":34625},169,[33,34627,34628],{"class":60},"    # 或者写成\n",[33,34630,34632],{"class":35,"line":34631},170,[33,34633,34634],{"class":60},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[33,34636,34638],{"class":35,"line":34637},171,[33,34639,34640],{"class":60},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[33,34642,34644,34647,34649,34652,34655,34657],{"class":35,"line":34643},172,[33,34645,34646],{"class":47},"    train_process",[33,34648,73],{"class":39},[33,34650,34651],{"class":47},"pd.DataFrame(",[33,34653,34654],{"class":955},"data",[33,34656,73],{"class":39},[33,34658,54],{"class":47},[33,34660,34662,34665,34667,34670],{"class":35,"line":34661},173,[33,34663,34664],{"class":119},"        \"epoch\"",[33,34666,2458],{"class":47},[33,34668,34669],{"class":76},"range",[33,34671,34672],{"class":47},"(num_epochs),\n",[33,34674,34676,34679],{"class":35,"line":34675},174,[33,34677,34678],{"class":119},"        \"train_loss_all\"",[33,34680,34681],{"class":47},":train_loss_all,\n",[33,34683,34685,34688],{"class":35,"line":34684},175,[33,34686,34687],{"class":119},"        \"val_loss_all\"",[33,34689,34690],{"class":47},":val_loss_all,\n",[33,34692,34694,34697],{"class":35,"line":34693},176,[33,34695,34696],{"class":119},"        \"train_acc_all\"",[33,34698,34699],{"class":47},":train_acc_all,\n",[33,34701,34703,34706],{"class":35,"line":34702},177,[33,34704,34705],{"class":119},"        \"val_acc_all\"",[33,34707,34708],{"class":47},":val_acc_all\n",[33,34710,34712],{"class":35,"line":34711},178,[33,34713,34714],{"class":47},"    })\n",[33,34716,34718],{"class":35,"line":34717},179,[33,34719,34720],{"class":60},"    # 返回训练保存的过程\n",[33,34722,34724,34726],{"class":35,"line":34723},180,[33,34725,5489],{"class":39},[33,34727,34728],{"class":47}," train_process\n",[33,34730,34732],{"class":35,"line":34731},181,[33,34733,160],{"emptyLinePlaceholder":159},[33,34735,34737],{"class":35,"line":34736},182,[33,34738,34739],{"class":60},"# 将loss值和精度按照图片的形式展示出来\n",[33,34741,34743,34745,34748],{"class":35,"line":34742},183,[33,34744,33200],{"class":39},[33,34746,34747],{"class":43}," matplot_acc_loss",[33,34749,34750],{"class":47},"(train_process):\n",[33,34752,34754],{"class":35,"line":34753},184,[33,34755,34756],{"class":60},"    # 设置图的大小\n",[33,34758,34760,34763,34765,34767,34769,34771,34773,34775],{"class":35,"line":34759},185,[33,34761,34762],{"class":47},"    plt.figure(",[33,34764,32946],{"class":955},[33,34766,73],{"class":39},[33,34768,345],{"class":47},[33,34770,2099],{"class":76},[33,34772,704],{"class":47},[33,34774,717],{"class":76},[33,34776,31750],{"class":47},[33,34778,34780],{"class":35,"line":34779},186,[33,34781,34782],{"class":60},"    # 设置图中有几张图\n",[33,34784,34786],{"class":35,"line":34785},187,[33,34787,34788],{"class":60},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[33,34790,34792],{"class":35,"line":34791},188,[33,34793,34794],{"class":60},"    # ①loss图\n",[33,34796,34798,34800,34802,34804,34806,34808,34810],{"class":35,"line":34797},189,[33,34799,32980],{"class":47},[33,34801,701],{"class":76},[33,34803,704],{"class":47},[33,34805,707],{"class":76},[33,34807,704],{"class":47},[33,34809,701],{"class":76},[33,34811,884],{"class":47},[33,34813,34815],{"class":35,"line":34814},190,[33,34816,34817],{"class":60},"    # 补充:\n",[33,34819,34821],{"class":35,"line":34820},191,[33,34822,34823],{"class":60},"    # plt.subplot(nrows, ncols, index)\n",[33,34825,34827],{"class":35,"line":34826},192,[33,34828,34829],{"class":60},"    # nrows：行数\n",[33,34831,34833],{"class":35,"line":34832},193,[33,34834,34835],{"class":60},"    # ncols：列数\n",[33,34837,34839],{"class":35,"line":34838},194,[33,34840,34841],{"class":60},"    # index：目前选中第几个子图（从1开始）\n",[33,34843,34845,34848,34851,34854,34857,34859,34862,34864,34867],{"class":35,"line":34844},195,[33,34846,34847],{"class":47},"    plt.plot(train_process[",[33,34849,34850],{"class":119},"\"epoch\"",[33,34852,34853],{"class":47},"],train_process.train_loss_all,",[33,34855,34856],{"class":119},"'ro-'",[33,34858,704],{"class":47},[33,34860,34861],{"class":955},"label",[33,34863,73],{"class":39},[33,34865,34866],{"class":119},"'train loss'",[33,34868,884],{"class":47},[33,34870,34872,34874,34876,34879,34882,34884,34886,34888,34891],{"class":35,"line":34871},196,[33,34873,34847],{"class":47},[33,34875,34850],{"class":119},[33,34877,34878],{"class":47},"],train_process.val_loss_all,",[33,34880,34881],{"class":119},"'bs--'",[33,34883,704],{"class":47},[33,34885,34861],{"class":955},[33,34887,73],{"class":39},[33,34889,34890],{"class":119},"'val loss'",[33,34892,884],{"class":47},[33,34894,34896],{"class":35,"line":34895},197,[33,34897,34898],{"class":60},"    # 添加一个图例\n",[33,34900,34902],{"class":35,"line":34901},198,[33,34903,34904],{"class":47},"    plt.legend()\n",[33,34906,34908],{"class":35,"line":34907},199,[33,34909,34910],{"class":60},"    # 给轴添加标签\n",[33,34912,34914,34917,34920],{"class":35,"line":34913},200,[33,34915,34916],{"class":47},"    plt.xlabel(",[33,34918,34919],{"class":119},"'epoch'",[33,34921,884],{"class":47},[33,34923,34925,34928,34931],{"class":35,"line":34924},201,[33,34926,34927],{"class":47},"    plt.ylabel(",[33,34929,34930],{"class":119},"'loss'",[33,34932,884],{"class":47},[33,34934,34936],{"class":35,"line":34935},202,[33,34937,34938],{"class":60},"    # ②准确度图\n",[33,34940,34942,34944,34946,34948,34950,34952,34954],{"class":35,"line":34941},203,[33,34943,32980],{"class":47},[33,34945,701],{"class":76},[33,34947,704],{"class":47},[33,34949,707],{"class":76},[33,34951,704],{"class":47},[33,34953,707],{"class":76},[33,34955,884],{"class":47},[33,34957,34959,34961,34963,34966,34968,34970,34972,34974,34977],{"class":35,"line":34958},204,[33,34960,34847],{"class":47},[33,34962,34850],{"class":119},[33,34964,34965],{"class":47},"],train_process.train_acc_all,",[33,34967,34856],{"class":119},[33,34969,704],{"class":47},[33,34971,34861],{"class":955},[33,34973,73],{"class":39},[33,34975,34976],{"class":119},"'train acc'",[33,34978,884],{"class":47},[33,34980,34982,34984,34986,34989,34991,34993,34995,34997,35000],{"class":35,"line":34981},205,[33,34983,34847],{"class":47},[33,34985,34850],{"class":119},[33,34987,34988],{"class":47},"],train_process.val_acc_all,",[33,34990,34881],{"class":119},[33,34992,704],{"class":47},[33,34994,34861],{"class":955},[33,34996,73],{"class":39},[33,34998,34999],{"class":119},"'val acc'",[33,35001,884],{"class":47},[33,35003,35005],{"class":35,"line":35004},206,[33,35006,35007],{"class":60},"    # 添加图例\n",[33,35009,35011],{"class":35,"line":35010},207,[33,35012,34904],{"class":47},[33,35014,35016,35018,35020],{"class":35,"line":35015},208,[33,35017,34916],{"class":47},[33,35019,34850],{"class":119},[33,35021,884],{"class":47},[33,35023,35025,35027,35030],{"class":35,"line":35024},209,[33,35026,34927],{"class":47},[33,35028,35029],{"class":119},"\"acc\"",[33,35031,884],{"class":47},[33,35033,35035],{"class":35,"line":35034},210,[33,35036,35037],{"class":47},"    plt.show()\n",[33,35039,35041],{"class":35,"line":35040},211,[33,35042,160],{"emptyLinePlaceholder":159},[33,35044,35046],{"class":35,"line":35045},212,[33,35047,35048],{"class":60},"# 正式开始训练:\n",[33,35050,35052,35054,35056,35058,35060],{"class":35,"line":35051},213,[33,35053,2987],{"class":39},[33,35055,32473],{"class":76},[33,35057,4359],{"class":39},[33,35059,32478],{"class":119},[33,35061,5141],{"class":47},[33,35063,35065],{"class":35,"line":35064},214,[33,35066,35067],{"class":60},"    # 将模型实例化\n",[33,35069,35071,35074,35076],{"class":35,"line":35070},215,[33,35072,35073],{"class":47},"    LeNet",[33,35075,73],{"class":39},[33,35077,35078],{"class":47},"LeNet()\n",[33,35080,35082,35085,35087],{"class":35,"line":35081},216,[33,35083,35084],{"class":47},"    train_dataloader,val_dataloader",[33,35086,73],{"class":39},[33,35088,35089],{"class":47},"train_val_data_process()\n",[33,35091,35093,35095,35097,35100,35103,35105,35107],{"class":35,"line":35092},217,[33,35094,34646],{"class":47},[33,35096,73],{"class":39},[33,35098,35099],{"class":47},"train_model_process(LeNet,train_dataloader,val_dataloader,",[33,35101,35102],{"class":955},"num_epochs",[33,35104,73],{"class":39},[33,35106,1045],{"class":76},[33,35108,884],{"class":47},[33,35110,35112],{"class":35,"line":35111},218,[33,35113,35114],{"class":47},"    matplot_acc_loss(train_process)\n",[14,35116,35117],{},"画图的补充点学习：",[14,35119,35120],{},[2918,35121],{"alt":28,"src":35122},"\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",[574,35124,35125],{"start":57},[564,35126,35127],{},"测试",[23,35129,35131],{"className":31631,"code":35130,"language":31633,"meta":28,"style":28},"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",[30,35132,35133,35139,35149,35161,35171,35176,35186,35196,35200,35205,35214,35231,35243,35260,35271,35287,35292,35303,35314,35325,35332,35336,35341,35351,35356,35373,35381,35385,35390,35399,35408,35412,35417,35422,35427,35434,35439,35451,35461,35471,35476,35480,35485,35494,35499,35515,35520,35525,35530,35544,35549,35563,35567,35572,35587,35592,35604,35608,35613,35625,35630,35638,35643,35648,35658,35663,35672,35677,35682,35686,35691,35696,35712,35720,35725,35730,35789,35795,35800,35811,35819,35827,35831,35836,35840,35845,35853,35858,35874,35879,35889,35899],{"__ignoreMap":28},[33,35134,35135,35137],{"class":35,"line":36},[33,35136,31645],{"class":39},[33,35138,31648],{"class":47},[33,35140,35141,35143,35145,35147],{"class":35,"line":51},[33,35142,31645],{"class":39},[33,35144,32668],{"class":47},[33,35146,32636],{"class":39},[33,35148,32673],{"class":47},[33,35150,35151,35153,35156,35158],{"class":35,"line":57},[33,35152,31990],{"class":39},[33,35154,35155],{"class":47}," jupyter_client.consoleapp ",[33,35157,31645],{"class":39},[33,35159,35160],{"class":47}," classes\n",[33,35162,35163,35165,35167,35169],{"class":35,"line":64},[33,35164,31990],{"class":39},[33,35166,32651],{"class":47},[33,35168,31645],{"class":39},[33,35170,32656],{"class":47},[33,35172,35173],{"class":35,"line":83},[33,35174,35175],{"class":60},"# 导入数据集\n",[33,35177,35178,35180,35182,35184],{"class":35,"line":89},[33,35179,31990],{"class":39},[33,35181,32621],{"class":47},[33,35183,31645],{"class":39},[33,35185,32626],{"class":47},[33,35187,35188,35190,35192,35194],{"class":35,"line":98},[33,35189,31990],{"class":39},[33,35191,33167],{"class":47},[33,35193,31645],{"class":39},[33,35195,33172],{"class":47},[33,35197,35198],{"class":35,"line":110},[33,35199,160],{"emptyLinePlaceholder":159},[33,35201,35202],{"class":35,"line":134},[33,35203,35204],{"class":60},"# 测试数据处理\n",[33,35206,35207,35209,35212],{"class":35,"line":156},[33,35208,33200],{"class":39},[33,35210,35211],{"class":43}," test_data_process",[33,35213,33206],{"class":47},[33,35215,35216,35219,35221,35223,35225,35227,35229],{"class":35,"line":163},[33,35217,35218],{"class":47},"    test_data",[33,35220,73],{"class":39},[33,35222,32708],{"class":47},[33,35224,32711],{"class":955},[33,35226,73],{"class":39},[33,35228,32716],{"class":119},[33,35230,32719],{"class":47},[33,35232,35233,35236,35238,35241],{"class":35,"line":169},[33,35234,35235],{"class":955},"                           train",[33,35237,73],{"class":39},[33,35239,35240],{"class":76},"False",[33,35242,32719],{"class":47},[33,35244,35245,35248,35250,35252,35254,35256,35258],{"class":35,"line":175},[33,35246,35247],{"class":955},"                           transform",[33,35249,73],{"class":39},[33,35251,32746],{"class":47},[33,35253,32749],{"class":955},[33,35255,73],{"class":39},[33,35257,2499],{"class":76},[33,35259,32757],{"class":47},[33,35261,35262,35265,35267,35269],{"class":35,"line":181},[33,35263,35264],{"class":955},"                           download",[33,35266,73],{"class":39},[33,35268,32729],{"class":76},[33,35270,884],{"class":47},[33,35272,35273,35276,35278,35280,35282,35284],{"class":35,"line":196},[33,35274,35275],{"class":47},"    test_dataloader",[33,35277,73],{"class":39},[33,35279,32787],{"class":47},[33,35281,32790],{"class":955},[33,35283,73],{"class":39},[33,35285,35286],{"class":47},"test_data,\n",[33,35288,35289],{"class":35,"line":213},[33,35290,35291],{"class":60},"                                    # 这里是一张一张进行测试\n",[33,35293,35294,35297,35299,35301],{"class":35,"line":228},[33,35295,35296],{"class":955},"                                    batch_size",[33,35298,73],{"class":39},[33,35300,701],{"class":76},[33,35302,32719],{"class":47},[33,35304,35305,35308,35310,35312],{"class":35,"line":1345},[33,35306,35307],{"class":955},"                                    shuffle",[33,35309,73],{"class":39},[33,35311,32729],{"class":76},[33,35313,32719],{"class":47},[33,35315,35316,35319,35321,35323],{"class":35,"line":1350},[33,35317,35318],{"class":955},"                                    num_workers",[33,35320,73],{"class":39},[33,35322,766],{"class":76},[33,35324,884],{"class":47},[33,35326,35327,35329],{"class":35,"line":1359},[33,35328,5489],{"class":39},[33,35330,35331],{"class":47}," test_dataloader\n",[33,35333,35334],{"class":35,"line":1364},[33,35335,160],{"emptyLinePlaceholder":159},[33,35337,35338],{"class":35,"line":1370},[33,35339,35340],{"class":60},"# 定义模型测试函数\n",[33,35342,35343,35345,35348],{"class":35,"line":1425},[33,35344,33200],{"class":39},[33,35346,35347],{"class":43}," test_model_process",[33,35349,35350],{"class":47},"(model,test_dataloader):\n",[33,35352,35353],{"class":35,"line":1438},[33,35354,35355],{"class":60},"    # 将模型放到设备当中，先进行判断\n",[33,35357,35358,35360,35362,35364,35366,35368,35370],{"class":35,"line":1451},[33,35359,32490],{"class":47},[33,35361,73],{"class":39},[33,35363,32497],{"class":119},[33,35365,3145],{"class":39},[33,35367,32502],{"class":47},[33,35369,3142],{"class":39},[33,35371,35372],{"class":119}," \"cpu\"\n",[33,35374,35375,35377,35379],{"class":35,"line":1457},[33,35376,32542],{"class":47},[33,35378,73],{"class":39},[33,35380,33542],{"class":47},[33,35382,35383],{"class":35,"line":1466},[33,35384,160],{"emptyLinePlaceholder":159},[33,35386,35387],{"class":35,"line":1471},[33,35388,35389],{"class":60},"    # 设置初始化参数\n",[33,35391,35392,35395,35397],{"class":35,"line":1477},[33,35393,35394],{"class":47},"    test_corrects",[33,35396,73],{"class":39},[33,35398,33595],{"class":76},[33,35400,35401,35404,35406],{"class":35,"line":1504},[33,35402,35403],{"class":47},"    test_num",[33,35405,73],{"class":39},[33,35407,4493],{"class":76},[33,35409,35410],{"class":35,"line":1509},[33,35411,160],{"emptyLinePlaceholder":159},[33,35413,35414],{"class":35,"line":1525},[33,35415,35416],{"class":60},"    # 进行模型测试\n",[33,35418,35419],{"class":35,"line":1535},[33,35420,35421],{"class":60},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[33,35423,35424],{"class":35,"line":1540},[33,35425,35426],{"class":60},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[33,35428,35429,35432],{"class":35,"line":4027},[33,35430,35431],{"class":39},"    with",[33,35433,34137],{"class":47},[33,35435,35436],{"class":35,"line":4032},[33,35437,35438],{"class":60},"        # 从数据中进行\n",[33,35440,35441,35443,35446,35448],{"class":35,"line":9199},[33,35442,1216],{"class":39},[33,35444,35445],{"class":47}," test_data_x,test_data_y ",[33,35447,27296],{"class":39},[33,35449,35450],{"class":47}," test_dataloader:\n",[33,35452,35453,35456,35458],{"class":35,"line":9223},[33,35454,35455],{"class":47},"            test_data_x",[33,35457,73],{"class":39},[33,35459,35460],{"class":47},"test_data_x.to(device)\n",[33,35462,35463,35466,35468],{"class":35,"line":9228},[33,35464,35465],{"class":47},"            test_data_y",[33,35467,73],{"class":39},[33,35469,35470],{"class":47},"test_data_y.to(device)\n",[33,35472,35473],{"class":35,"line":9234},[33,35474,35475],{"class":60},"            # 设置为验证模式\n",[33,35477,35478],{"class":35,"line":9261},[33,35479,34128],{"class":47},[33,35481,35482],{"class":35,"line":9266},[33,35483,35484],{"class":60},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[33,35486,35487,35489,35491],{"class":35,"line":9272},[33,35488,33913],{"class":47},[33,35490,73],{"class":39},[33,35492,35493],{"class":47},"model(test_data_x)\n",[33,35495,35496],{"class":35,"line":9284},[33,35497,35498],{"class":60},"            # 查找每一行中最大值对应的下标\n",[33,35500,35501,35503,35505,35507,35509,35511,35513],{"class":35,"line":9296},[33,35502,33930],{"class":47},[33,35504,73],{"class":39},[33,35506,33935],{"class":47},[33,35508,33938],{"class":955},[33,35510,73],{"class":39},[33,35512,701],{"class":76},[33,35514,884],{"class":47},[33,35516,35517],{"class":35,"line":9308},[33,35518,35519],{"class":60},"            # 计算正确率\n",[33,35521,35522],{"class":35,"line":10967},[33,35523,35524],{"class":60},"            # .data表示是一个不带梯度信息的tensor\n",[33,35526,35527],{"class":35,"line":10992},[33,35528,35529],{"class":60},"            # 如果预测正确，则准确度test_corrects加1\n",[33,35531,35532,35535,35537,35539,35541],{"class":35,"line":11015},[33,35533,35534],{"class":47},"            test_corrects",[33,35536,10728],{"class":39},[33,35538,34040],{"class":47},[33,35540,4359],{"class":39},[33,35542,35543],{"class":47},"test_data_y.data)\n",[33,35545,35546],{"class":35,"line":11039},[33,35547,35548],{"class":60},"            # 将所有的测试样本进行累计\n",[33,35550,35551,35554,35556,35559,35561],{"class":35,"line":11044},[33,35552,35553],{"class":47},"            test_num",[33,35555,10728],{"class":39},[33,35557,35558],{"class":47},"test_data_x.size(",[33,35560,766],{"class":76},[33,35562,884],{"class":47},[33,35564,35565],{"class":35,"line":11049},[33,35566,160],{"emptyLinePlaceholder":159},[33,35568,35569],{"class":35,"line":11054},[33,35570,35571],{"class":60},"        # 计算准确度\n",[33,35573,35574,35577,35579,35582,35584],{"class":35,"line":11063},[33,35575,35576],{"class":47},"        test_acc",[33,35578,73],{"class":39},[33,35580,35581],{"class":47},"test_corrects.double().item()",[33,35583,2184],{"class":39},[33,35585,35586],{"class":47},"test_num\n",[33,35588,35589],{"class":35,"line":11068},[33,35590,35591],{"class":60},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[33,35593,35594,35596,35598,35601],{"class":35,"line":11074},[33,35595,33704],{"class":76},[33,35597,345],{"class":47},[33,35599,35600],{"class":119},"\"测试的准确率：\"",[33,35602,35603],{"class":47},",test_acc)\n",[33,35605,35606],{"class":35,"line":11095},[33,35607,160],{"emptyLinePlaceholder":159},[33,35609,35610],{"class":35,"line":11101},[33,35611,35612],{"class":60},"# 实现模型的测试功能\n",[33,35614,35615,35617,35619,35621,35623],{"class":35,"line":11115},[33,35616,2987],{"class":39},[33,35618,32473],{"class":76},[33,35620,4359],{"class":39},[33,35622,32478],{"class":119},[33,35624,5141],{"class":47},[33,35626,35627],{"class":35,"line":11121},[33,35628,35629],{"class":60},"    # 加载模型\n",[33,35631,35632,35634,35636],{"class":35,"line":11148},[33,35633,32542],{"class":47},[33,35635,73],{"class":39},[33,35637,35078],{"class":47},[33,35639,35640],{"class":35,"line":11157},[33,35641,35642],{"class":60},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[33,35644,35645],{"class":35,"line":11163},[33,35646,35647],{"class":60},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[33,35649,35650,35653,35656],{"class":35,"line":11171},[33,35651,35652],{"class":47},"    model.load_state_dict(torch.load(",[33,35654,35655],{"class":119},"'best_model.pth'",[33,35657,31750],{"class":47},[33,35659,35660],{"class":35,"line":11176},[33,35661,35662],{"class":60},"    # 数据加载\n",[33,35664,35665,35667,35669],{"class":35,"line":17855},[33,35666,35275],{"class":47},[33,35668,73],{"class":39},[33,35670,35671],{"class":47},"test_data_process()\n",[33,35673,35674],{"class":35,"line":17861},[33,35675,35676],{"class":60},"    # 加载模型测试的函数\n",[33,35678,35679],{"class":35,"line":17884},[33,35680,35681],{"class":47},"    test_model_process(model,test_dataloader)\n",[33,35683,35684],{"class":35,"line":17890},[33,35685,160],{"emptyLinePlaceholder":159},[33,35687,35688],{"class":35,"line":17913},[33,35689,35690],{"class":60},"    # 验证集推理实现：\n",[33,35692,35693],{"class":35,"line":17927},[33,35694,35695],{"class":60},"    # 加载数据加载的更详细一些\n",[33,35697,35698,35700,35702,35704,35706,35708,35710],{"class":35,"line":17947},[33,35699,32490],{"class":47},[33,35701,73],{"class":39},[33,35703,32497],{"class":119},[33,35705,3145],{"class":39},[33,35707,32502],{"class":47},[33,35709,3142],{"class":39},[33,35711,35372],{"class":119},[33,35713,35714,35716,35718],{"class":35,"line":17953},[33,35715,32542],{"class":47},[33,35717,73],{"class":39},[33,35719,33542],{"class":47},[33,35721,35722],{"class":35,"line":17964},[33,35723,35724],{"class":60},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[33,35726,35727],{"class":35,"line":17987},[33,35728,35729],{"class":60},"    # 顺序不可改变\n",[33,35731,35732,35735,35737,35739,35742,35744,35747,35749,35752,35754,35757,35759,35762,35764,35767,35769,35772,35774,35777,35779,35782,35784,35787],{"class":35,"line":18009},[33,35733,35734],{"class":47},"    classes",[33,35736,73],{"class":39},[33,35738,2489],{"class":47},[33,35740,35741],{"class":119},"'T-shirt\u002Ftop'",[33,35743,704],{"class":47},[33,35745,35746],{"class":119},"'Trouser'",[33,35748,704],{"class":47},[33,35750,35751],{"class":119},"'Pullover'",[33,35753,704],{"class":47},[33,35755,35756],{"class":119},"'Dress'",[33,35758,704],{"class":47},[33,35760,35761],{"class":119},"'Coat'",[33,35763,704],{"class":47},[33,35765,35766],{"class":119},"'Sandal'",[33,35768,704],{"class":47},[33,35770,35771],{"class":119},"'Shirt'",[33,35773,704],{"class":47},[33,35775,35776],{"class":119},"'Sneaker'",[33,35778,704],{"class":47},[33,35780,35781],{"class":119},"'Bag'",[33,35783,704],{"class":47},[33,35785,35786],{"class":119},"'Ankle boot'",[33,35788,34499],{"class":47},[33,35790,35791,35793],{"class":35,"line":18014},[33,35792,35431],{"class":39},[33,35794,34137],{"class":47},[33,35796,35797],{"class":35,"line":18020},[33,35798,35799],{"class":60},"        # 将数据和标签都放到设备当中\n",[33,35801,35802,35804,35807,35809],{"class":35,"line":18034},[33,35803,1216],{"class":39},[33,35805,35806],{"class":47}," b_x,b_y ",[33,35808,27296],{"class":39},[33,35810,35450],{"class":47},[33,35812,35813,35815,35817],{"class":35,"line":18047},[33,35814,33863],{"class":47},[33,35816,73],{"class":39},[33,35818,33868],{"class":47},[33,35820,35821,35823,35825],{"class":35,"line":18052},[33,35822,33878],{"class":47},[33,35824,73],{"class":39},[33,35826,33883],{"class":47},[33,35828,35829],{"class":35,"line":18066},[33,35830,160],{"emptyLinePlaceholder":159},[33,35832,35833],{"class":35,"line":18071},[33,35834,35835],{"class":60},"            # 设置模型为验证模式\n",[33,35837,35838],{"class":35,"line":18077},[33,35839,34128],{"class":47},[33,35841,35842],{"class":35,"line":18082},[33,35843,35844],{"class":60},"            # 模型推理结果\n",[33,35846,35847,35849,35851],{"class":35,"line":18096},[33,35848,33913],{"class":47},[33,35850,73],{"class":39},[33,35852,33918],{"class":47},[33,35854,35855],{"class":35,"line":18101},[33,35856,35857],{"class":60},"            # 获取最大下标，最大下标就是类别号\n",[33,35859,35860,35862,35864,35866,35868,35870,35872],{"class":35,"line":18106},[33,35861,33930],{"class":47},[33,35863,73],{"class":39},[33,35865,33935],{"class":47},[33,35867,33938],{"class":955},[33,35869,73],{"class":39},[33,35871,701],{"class":76},[33,35873,884],{"class":47},[33,35875,35876],{"class":35,"line":18120},[33,35877,35878],{"class":60},"            # 取出张量中的数值\n",[33,35880,35881,35884,35886],{"class":35,"line":18132},[33,35882,35883],{"class":47},"            result",[33,35885,73],{"class":39},[33,35887,35888],{"class":47},"pre_lab.item()\n",[33,35890,35891,35894,35896],{"class":35,"line":18137},[33,35892,35893],{"class":47},"            label",[33,35895,73],{"class":39},[33,35897,35898],{"class":47},"b_y.item()\n",[33,35900,35901,35904,35906,35909,35912,35915,35917,35920],{"class":35,"line":18150},[33,35902,35903],{"class":76},"            print",[33,35905,345],{"class":47},[33,35907,35908],{"class":119},"\"预测值：\"",[33,35910,35911],{"class":47},",classes[result],",[33,35913,35914],{"class":119},"\"------\"",[33,35916,704],{"class":47},[33,35918,35919],{"class":119},"\"真实值：\"",[33,35921,35922],{"class":47},",classes[label])\n",[14,35924,35925],{},"（2）AlexNet",[574,35927,35928],{},[564,35929,35930],{},"神经网络构建",[23,35932,35934],{"className":31631,"code":35933,"language":31633,"meta":28,"style":28},"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",[30,35935,35936,35942,35952,35962,35974,35978,35995,36003,36018,36030,36072,36099,36142,36168,36212,36255,36298,36325,36329,36339,36344,36372,36391,36410,36414,36419,36427,36442,36452,36466,36476,36491,36506,36521,36532,36536,36541,36551,36566,36571,36585,36600,36612,36617,36628,36633,36639,36644,36656,36676,36681,36690],{"__ignoreMap":28},[33,35937,35938,35940],{"class":35,"line":36},[33,35939,31645],{"class":39},[33,35941,31648],{"class":47},[33,35943,35944,35946,35948,35950],{"class":35,"line":51},[33,35945,31990],{"class":39},[33,35947,31993],{"class":47},[33,35949,31645],{"class":39},[33,35951,31998],{"class":47},[33,35953,35954,35956,35958,35960],{"class":35,"line":57},[33,35955,31990],{"class":39},[33,35957,32010],{"class":47},[33,35959,31645],{"class":39},[33,35961,32015],{"class":47},[33,35963,35964,35966,35969,35971],{"class":35,"line":64},[33,35965,31645],{"class":39},[33,35967,35968],{"class":47}," torch.nn.functional ",[33,35970,32636],{"class":39},[33,35972,35973],{"class":47}," F\n",[33,35975,35976],{"class":35,"line":83},[33,35977,160],{"emptyLinePlaceholder":159},[33,35979,35980,35982,35985,35987,35989,35991,35993],{"class":35,"line":89},[33,35981,15945],{"class":39},[33,35983,35984],{"class":43}," AlexNet",[33,35986,345],{"class":47},[33,35988,32031],{"class":43},[33,35990,2158],{"class":47},[33,35992,32036],{"class":43},[33,35994,32039],{"class":47},[33,35996,35997,35999,36001],{"class":35,"line":98},[33,35998,32054],{"class":39},[33,36000,32057],{"class":76},[33,36002,32060],{"class":47},[33,36004,36005,36007,36010,36012,36014,36016],{"class":35,"line":110},[33,36006,32070],{"class":76},[33,36008,36009],{"class":47},"(AlexNet,",[33,36011,32076],{"class":76},[33,36013,32079],{"class":47},[33,36015,32082],{"class":76},[33,36017,48],{"class":47},[33,36019,36020,36022,36025,36027],{"class":35,"line":134},[33,36021,32098],{"class":76},[33,36023,36024],{"class":47},".ReLu",[33,36026,73],{"class":39},[33,36028,36029],{"class":47},"nn.ReLU()\n",[33,36031,36032,36034,36036,36038,36040,36042,36044,36046,36048,36050,36052,36054,36056,36058,36060,36062,36064,36066,36068,36070],{"class":35,"line":156},[33,36033,32098],{"class":76},[33,36035,32101],{"class":47},[33,36037,73],{"class":39},[33,36039,32106],{"class":47},[33,36041,32109],{"class":955},[33,36043,73],{"class":39},[33,36045,701],{"class":76},[33,36047,704],{"class":47},[33,36049,32118],{"class":955},[33,36051,73],{"class":39},[33,36053,1826],{"class":76},[33,36055,704],{"class":47},[33,36057,32127],{"class":955},[33,36059,73],{"class":39},[33,36061,2074],{"class":76},[33,36063,704],{"class":47},[33,36065,32182],{"class":955},[33,36067,73],{"class":39},[33,36069,717],{"class":76},[33,36071,884],{"class":47},[33,36073,36074,36076,36078,36080,36083,36085,36087,36089,36091,36093,36095,36097],{"class":35,"line":163},[33,36075,32098],{"class":76},[33,36077,32166],{"class":47},[33,36079,73],{"class":39},[33,36081,36082],{"class":47},"nn.MaxPool2d(",[33,36084,32127],{"class":955},[33,36086,73],{"class":39},[33,36088,712],{"class":76},[33,36090,704],{"class":47},[33,36092,32182],{"class":955},[33,36094,73],{"class":39},[33,36096,707],{"class":76},[33,36098,884],{"class":47},[33,36100,36101,36103,36105,36107,36109,36111,36113,36115,36117,36119,36121,36124,36126,36128,36130,36132,36134,36136,36138,36140],{"class":35,"line":169},[33,36102,32098],{"class":76},[33,36104,32195],{"class":47},[33,36106,73],{"class":39},[33,36108,32106],{"class":47},[33,36110,32109],{"class":955},[33,36112,73],{"class":39},[33,36114,1826],{"class":76},[33,36116,704],{"class":47},[33,36118,32118],{"class":955},[33,36120,73],{"class":39},[33,36122,36123],{"class":76},"256",[33,36125,704],{"class":47},[33,36127,32127],{"class":955},[33,36129,73],{"class":39},[33,36131,722],{"class":76},[33,36133,704],{"class":47},[33,36135,32136],{"class":955},[33,36137,73],{"class":39},[33,36139,707],{"class":76},[33,36141,884],{"class":47},[33,36143,36144,36146,36148,36150,36152,36154,36156,36158,36160,36162,36164,36166],{"class":35,"line":175},[33,36145,32098],{"class":76},[33,36147,32230],{"class":47},[33,36149,73],{"class":39},[33,36151,36082],{"class":47},[33,36153,32127],{"class":955},[33,36155,73],{"class":39},[33,36157,712],{"class":76},[33,36159,704],{"class":47},[33,36161,32182],{"class":955},[33,36163,73],{"class":39},[33,36165,707],{"class":76},[33,36167,884],{"class":47},[33,36169,36170,36172,36175,36177,36179,36181,36183,36185,36187,36189,36191,36194,36196,36198,36200,36202,36204,36206,36208,36210],{"class":35,"line":181},[33,36171,32098],{"class":76},[33,36173,36174],{"class":47},".c5",[33,36176,73],{"class":39},[33,36178,32106],{"class":47},[33,36180,32109],{"class":955},[33,36182,73],{"class":39},[33,36184,36123],{"class":76},[33,36186,704],{"class":47},[33,36188,32118],{"class":955},[33,36190,73],{"class":39},[33,36192,36193],{"class":76},"384",[33,36195,704],{"class":47},[33,36197,32127],{"class":955},[33,36199,73],{"class":39},[33,36201,712],{"class":76},[33,36203,704],{"class":47},[33,36205,32136],{"class":955},[33,36207,73],{"class":39},[33,36209,701],{"class":76},[33,36211,884],{"class":47},[33,36213,36214,36216,36219,36221,36223,36225,36227,36229,36231,36233,36235,36237,36239,36241,36243,36245,36247,36249,36251,36253],{"class":35,"line":196},[33,36215,32098],{"class":76},[33,36217,36218],{"class":47},".c6",[33,36220,73],{"class":39},[33,36222,32106],{"class":47},[33,36224,32109],{"class":955},[33,36226,73],{"class":39},[33,36228,36193],{"class":76},[33,36230,704],{"class":47},[33,36232,32118],{"class":955},[33,36234,73],{"class":39},[33,36236,36193],{"class":76},[33,36238,704],{"class":47},[33,36240,32127],{"class":955},[33,36242,73],{"class":39},[33,36244,712],{"class":76},[33,36246,704],{"class":47},[33,36248,32136],{"class":955},[33,36250,73],{"class":39},[33,36252,701],{"class":76},[33,36254,884],{"class":47},[33,36256,36257,36259,36262,36264,36266,36268,36270,36272,36274,36276,36278,36280,36282,36284,36286,36288,36290,36292,36294,36296],{"class":35,"line":213},[33,36258,32098],{"class":76},[33,36260,36261],{"class":47},".c7",[33,36263,73],{"class":39},[33,36265,32106],{"class":47},[33,36267,32109],{"class":955},[33,36269,73],{"class":39},[33,36271,36193],{"class":76},[33,36273,704],{"class":47},[33,36275,32118],{"class":955},[33,36277,73],{"class":39},[33,36279,36123],{"class":76},[33,36281,704],{"class":47},[33,36283,32127],{"class":955},[33,36285,73],{"class":39},[33,36287,712],{"class":76},[33,36289,704],{"class":47},[33,36291,32136],{"class":955},[33,36293,73],{"class":39},[33,36295,701],{"class":76},[33,36297,884],{"class":47},[33,36299,36300,36302,36305,36307,36309,36311,36313,36315,36317,36319,36321,36323],{"class":35,"line":228},[33,36301,32098],{"class":76},[33,36303,36304],{"class":47},".s8",[33,36306,73],{"class":39},[33,36308,36082],{"class":47},[33,36310,32127],{"class":955},[33,36312,73],{"class":39},[33,36314,712],{"class":76},[33,36316,704],{"class":47},[33,36318,32182],{"class":955},[33,36320,73],{"class":39},[33,36322,707],{"class":76},[33,36324,884],{"class":47},[33,36326,36327],{"class":35,"line":1345},[33,36328,32255],{"class":60},[33,36330,36331,36333,36335,36337],{"class":35,"line":1350},[33,36332,32098],{"class":76},[33,36334,32262],{"class":47},[33,36336,73],{"class":39},[33,36338,32267],{"class":47},[33,36340,36341],{"class":35,"line":1359},[33,36342,36343],{"class":60},"       # 定义全连接层\n",[33,36345,36346,36348,36351,36353,36355,36357,36359,36361,36363,36365,36367,36370],{"class":35,"line":1364},[33,36347,32098],{"class":76},[33,36349,36350],{"class":47},".f1",[33,36352,73],{"class":39},[33,36354,32284],{"class":47},[33,36356,727],{"class":76},[33,36358,2057],{"class":39},[33,36360,727],{"class":76},[33,36362,2057],{"class":39},[33,36364,36123],{"class":76},[33,36366,704],{"class":47},[33,36368,36369],{"class":76},"4096",[33,36371,884],{"class":47},[33,36373,36374,36376,36379,36381,36383,36385,36387,36389],{"class":35,"line":1370},[33,36375,32098],{"class":76},[33,36377,36378],{"class":47},".f2",[33,36380,73],{"class":39},[33,36382,32284],{"class":47},[33,36384,36369],{"class":76},[33,36386,704],{"class":47},[33,36388,36369],{"class":76},[33,36390,884],{"class":47},[33,36392,36393,36395,36398,36400,36402,36404,36406,36408],{"class":35,"line":1425},[33,36394,32098],{"class":76},[33,36396,36397],{"class":47},".f3",[33,36399,73],{"class":39},[33,36401,32284],{"class":47},[33,36403,36369],{"class":76},[33,36405,704],{"class":47},[33,36407,77],{"class":76},[33,36409,884],{"class":47},[33,36411,36412],{"class":35,"line":1438},[33,36413,160],{"emptyLinePlaceholder":159},[33,36415,36416],{"class":35,"line":1451},[33,36417,36418],{"class":60},"    # 定义前向传播\n",[33,36420,36421,36423,36425],{"class":35,"line":1457},[33,36422,32054],{"class":39},[33,36424,32346],{"class":43},[33,36426,32349],{"class":47},[33,36428,36429,36431,36433,36435,36438,36440],{"class":35,"line":1466},[33,36430,32354],{"class":47},[33,36432,73],{"class":39},[33,36434,32076],{"class":76},[33,36436,36437],{"class":47},".ReLu(",[33,36439,32076],{"class":76},[33,36441,32366],{"class":47},[33,36443,36444,36446,36448,36450],{"class":35,"line":1471},[33,36445,32354],{"class":47},[33,36447,73],{"class":39},[33,36449,32076],{"class":76},[33,36451,32377],{"class":47},[33,36453,36454,36456,36458,36460,36462,36464],{"class":35,"line":1477},[33,36455,32354],{"class":47},[33,36457,73],{"class":39},[33,36459,32076],{"class":76},[33,36461,36437],{"class":47},[33,36463,32076],{"class":76},[33,36465,32392],{"class":47},[33,36467,36468,36470,36472,36474],{"class":35,"line":1504},[33,36469,32354],{"class":47},[33,36471,73],{"class":39},[33,36473,32076],{"class":76},[33,36475,32403],{"class":47},[33,36477,36478,36480,36482,36484,36486,36488],{"class":35,"line":1509},[33,36479,32354],{"class":47},[33,36481,73],{"class":39},[33,36483,32076],{"class":76},[33,36485,36437],{"class":47},[33,36487,32076],{"class":76},[33,36489,36490],{"class":47},".c5(x))\n",[33,36492,36493,36495,36497,36499,36501,36503],{"class":35,"line":1525},[33,36494,32354],{"class":47},[33,36496,73],{"class":39},[33,36498,32076],{"class":76},[33,36500,36437],{"class":47},[33,36502,32076],{"class":76},[33,36504,36505],{"class":47},".c6(x))\n",[33,36507,36508,36510,36512,36514,36516,36518],{"class":35,"line":1535},[33,36509,32354],{"class":47},[33,36511,73],{"class":39},[33,36513,32076],{"class":76},[33,36515,36437],{"class":47},[33,36517,32076],{"class":76},[33,36519,36520],{"class":47},".c7(x))\n",[33,36522,36523,36525,36527,36529],{"class":35,"line":1540},[33,36524,32354],{"class":47},[33,36526,73],{"class":39},[33,36528,32076],{"class":76},[33,36530,36531],{"class":47},".s8(x)\n",[33,36533,36534],{"class":35,"line":4027},[33,36535,160],{"emptyLinePlaceholder":159},[33,36537,36538],{"class":35,"line":4032},[33,36539,36540],{"class":60},"        # 展平加线性全连接层\n",[33,36542,36543,36545,36547,36549],{"class":35,"line":9199},[33,36544,32354],{"class":47},[33,36546,73],{"class":39},[33,36548,32076],{"class":76},[33,36550,32414],{"class":47},[33,36552,36553,36555,36557,36559,36561,36563],{"class":35,"line":9223},[33,36554,32354],{"class":47},[33,36556,73],{"class":39},[33,36558,32076],{"class":76},[33,36560,36437],{"class":47},[33,36562,32076],{"class":76},[33,36564,36565],{"class":47},".f1(x))\n",[33,36567,36568],{"class":35,"line":9228},[33,36569,36570],{"class":60},"        # 还需要dropout对神经元随机进行失活\n",[33,36572,36573,36575,36577,36580,36583],{"class":35,"line":9234},[33,36574,32354],{"class":47},[33,36576,73],{"class":39},[33,36578,36579],{"class":47},"F.dropout(x,",[33,36581,36582],{"class":76},"0.5",[33,36584,884],{"class":47},[33,36586,36587,36589,36591,36593,36595,36597],{"class":35,"line":9261},[33,36588,32354],{"class":47},[33,36590,73],{"class":39},[33,36592,32076],{"class":76},[33,36594,36437],{"class":47},[33,36596,32076],{"class":76},[33,36598,36599],{"class":47},".f2(x))\n",[33,36601,36602,36604,36606,36608,36610],{"class":35,"line":9266},[33,36603,32354],{"class":47},[33,36605,73],{"class":39},[33,36607,36579],{"class":47},[33,36609,36582],{"class":76},[33,36611,884],{"class":47},[33,36613,36614],{"class":35,"line":9272},[33,36615,36616],{"class":60},"        # 直接输出\n",[33,36618,36619,36621,36623,36625],{"class":35,"line":9284},[33,36620,32354],{"class":47},[33,36622,73],{"class":39},[33,36624,32076],{"class":76},[33,36626,36627],{"class":47},".f3(x)\n",[33,36629,36630],{"class":35,"line":9296},[33,36631,36632],{"class":60},"        # 前向传播输出\n",[33,36634,36635,36637],{"class":35,"line":9308},[33,36636,16003],{"class":39},[33,36638,32462],{"class":47},[33,36640,36641],{"class":35,"line":10967},[33,36642,36643],{"class":60},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[33,36645,36646,36648,36650,36652,36654],{"class":35,"line":10992},[33,36647,2987],{"class":39},[33,36649,32473],{"class":76},[33,36651,4359],{"class":39},[33,36653,32478],{"class":119},[33,36655,5141],{"class":47},[33,36657,36658,36660,36662,36664,36666,36668,36670,36672,36674],{"class":35,"line":11015},[33,36659,32490],{"class":47},[33,36661,73],{"class":39},[33,36663,31704],{"class":47},[33,36665,32497],{"class":119},[33,36667,3145],{"class":39},[33,36669,32502],{"class":47},[33,36671,3142],{"class":39},[33,36673,31729],{"class":119},[33,36675,884],{"class":47},[33,36677,36678],{"class":35,"line":11039},[33,36679,36680],{"class":60},"    # 模型实例化，然后将实例化的模型放到设备中\n",[33,36682,36683,36685,36687],{"class":35,"line":11044},[33,36684,32542],{"class":47},[33,36686,73],{"class":39},[33,36688,36689],{"class":47},"AlexNet().to(device)\n",[33,36691,36692,36694,36696,36698,36700,36703,36705,36707],{"class":35,"line":11049},[33,36693,32552],{"class":76},[33,36695,32555],{"class":47},[33,36697,701],{"class":76},[33,36699,704],{"class":47},[33,36701,36702],{"class":76},"227",[33,36704,704],{"class":47},[33,36706,36702],{"class":76},[33,36708,32568],{"class":47},[574,36710,36711],{"start":51},[564,36712,32581],{},[23,36714,36716],{"className":31631,"code":36715,"language":31633,"meta":28,"style":28},"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",[30,36717,36718,36724,36730,36740,36746,36756,36766,36776,36786,36796,36800,36811,36821,36825,36829,36833,36841,36853,36863,36879,36889,36921,36935,36945,36955,36959,36969,36983,36993,37003,37013,37019,37023,37027,37031,37035,37039,37047,37067,37071,37075,37079,37083,37087,37103,37107,37111,37119,37123,37127,37135,37139,37143,37147,37155,37159,37163,37167,37171,37179,37183,37191,37195,37203,37207,37215,37219,37227,37231,37235,37243,37247,37251,37255,37267,37291,37305,37309,37313,37317,37325,37329,37337,37341,37349,37353,37361,37365,37373,37377,37385,37389,37401,37405,37413,37417,37425,37429,37433,37437,37441,37449,37453,37469,37473,37481,37485,37489,37493,37497,37501,37505,37509,37525,37529,37541,37545,37557,37561,37573,37577,37585,37589,37597,37601,37605,37610,37616,37620,37629,37633,37650,37654,37663,37667,37685,37698,37703,37716,37720,37724,37732,37736,37740,37748,37752,37760,37764,37772,37776,37780,37822,37864,37868,37872,37888,37892,37908,37912,37916,37924,37928,37932,37944,37982,37987,37992,38001,38005,38019,38029,38035,38041,38047,38053,38057,38061,38067,38071,38075,38083,38087,38105,38109,38113,38117,38133,38137,38141,38145,38149,38153,38173,38193,38197,38201,38205,38213,38221,38225,38241,38261,38281,38285,38289,38297,38305,38309,38313,38317,38329,38333,38343,38351,38368],{"__ignoreMap":28},[33,36719,36720,36722],{"class":35,"line":36},[33,36721,31645],{"class":39},[33,36723,33075],{"class":47},[33,36725,36726,36728],{"class":35,"line":51},[33,36727,31645],{"class":39},[33,36729,33082],{"class":47},[33,36731,36732,36734,36736,36738],{"class":35,"line":57},[33,36733,31645],{"class":39},[33,36735,33093],{"class":47},[33,36737,32636],{"class":39},[33,36739,33098],{"class":47},[33,36741,36742,36744],{"class":35,"line":64},[33,36743,31645],{"class":39},[33,36745,31648],{"class":47},[33,36747,36748,36750,36752,36754],{"class":35,"line":83},[33,36749,31990],{"class":39},[33,36751,32668],{"class":47},[33,36753,31645],{"class":39},[33,36755,33115],{"class":47},[33,36757,36758,36760,36762,36764],{"class":35,"line":89},[33,36759,31990],{"class":39},[33,36761,32621],{"class":47},[33,36763,31645],{"class":39},[33,36765,32626],{"class":47},[33,36767,36768,36770,36772,36774],{"class":35,"line":98},[33,36769,31990],{"class":39},[33,36771,32651],{"class":47},[33,36773,31645],{"class":39},[33,36775,32656],{"class":47},[33,36777,36778,36780,36782,36784],{"class":35,"line":110},[33,36779,31645],{"class":39},[33,36781,32668],{"class":47},[33,36783,32636],{"class":39},[33,36785,32673],{"class":47},[33,36787,36788,36790,36792,36794],{"class":35,"line":134},[33,36789,31645],{"class":39},[33,36791,32685],{"class":47},[33,36793,32636],{"class":39},[33,36795,32690],{"class":47},[33,36797,36798],{"class":35,"line":156},[33,36799,33160],{"class":60},[33,36801,36802,36804,36806,36808],{"class":35,"line":163},[33,36803,31990],{"class":39},[33,36805,33167],{"class":47},[33,36807,31645],{"class":39},[33,36809,36810],{"class":47}," AlexNet\n",[33,36812,36813,36815,36817,36819],{"class":35,"line":169},[33,36814,31990],{"class":39},[33,36816,31993],{"class":47},[33,36818,31645],{"class":39},[33,36820,31998],{"class":47},[33,36822,36823],{"class":35,"line":175},[33,36824,160],{"emptyLinePlaceholder":159},[33,36826,36827],{"class":35,"line":181},[33,36828,160],{"emptyLinePlaceholder":159},[33,36830,36831],{"class":35,"line":196},[33,36832,33195],{"class":60},[33,36834,36835,36837,36839],{"class":35,"line":213},[33,36836,33200],{"class":39},[33,36838,33203],{"class":43},[33,36840,33206],{"class":47},[33,36842,36843,36845,36847,36849,36851],{"class":35,"line":228},[33,36844,33211],{"class":47},[33,36846,73],{"class":39},[33,36848,32708],{"class":47},[33,36850,32716],{"class":119},[33,36852,32719],{"class":47},[33,36854,36855,36857,36859,36861],{"class":35,"line":1345},[33,36856,33224],{"class":955},[33,36858,73],{"class":39},[33,36860,32729],{"class":76},[33,36862,32719],{"class":47},[33,36864,36865,36867,36869,36871,36873,36875,36877],{"class":35,"line":1350},[33,36866,33235],{"class":955},[33,36868,73],{"class":39},[33,36870,32746],{"class":47},[33,36872,32749],{"class":955},[33,36874,73],{"class":39},[33,36876,36702],{"class":76},[33,36878,32757],{"class":47},[33,36880,36881,36883,36885,36887],{"class":35,"line":1359},[33,36882,33252],{"class":955},[33,36884,73],{"class":39},[33,36886,32729],{"class":76},[33,36888,884],{"class":47},[33,36890,36891,36893,36895,36897,36899,36901,36903,36905,36907,36909,36911,36913,36915,36917,36919],{"class":35,"line":1364},[33,36892,33263],{"class":47},[33,36894,73],{"class":39},[33,36896,33268],{"class":47},[33,36898,33271],{"class":76},[33,36900,345],{"class":47},[33,36902,33276],{"class":76},[33,36904,2057],{"class":39},[33,36906,1196],{"class":76},[33,36908,33283],{"class":47},[33,36910,33271],{"class":76},[33,36912,345],{"class":47},[33,36914,33290],{"class":76},[33,36916,2057],{"class":39},[33,36918,1196],{"class":76},[33,36920,33297],{"class":47},[33,36922,36923,36925,36927,36929,36931,36933],{"class":35,"line":1370},[33,36924,33302],{"class":47},[33,36926,73],{"class":39},[33,36928,33307],{"class":47},[33,36930,32790],{"class":955},[33,36932,73],{"class":39},[33,36934,32795],{"class":47},[33,36936,36937,36939,36941,36943],{"class":35,"line":1425},[33,36938,33318],{"class":955},[33,36940,73],{"class":39},[33,36942,33323],{"class":76},[33,36944,32719],{"class":47},[33,36946,36947,36949,36951,36953],{"class":35,"line":1438},[33,36948,33330],{"class":955},[33,36950,73],{"class":39},[33,36952,32729],{"class":76},[33,36954,32719],{"class":47},[33,36956,36957],{"class":35,"line":1451},[33,36958,33341],{"class":60},[33,36960,36961,36963,36965,36967],{"class":35,"line":1457},[33,36962,33346],{"class":955},[33,36964,73],{"class":39},[33,36966,737],{"class":76},[33,36968,884],{"class":47},[33,36970,36971,36973,36975,36977,36979,36981],{"class":35,"line":1466},[33,36972,33357],{"class":47},[33,36974,73],{"class":39},[33,36976,32787],{"class":47},[33,36978,32790],{"class":955},[33,36980,73],{"class":39},[33,36982,33368],{"class":47},[33,36984,36985,36987,36989,36991],{"class":35,"line":1471},[33,36986,33373],{"class":955},[33,36988,73],{"class":39},[33,36990,33323],{"class":76},[33,36992,32719],{"class":47},[33,36994,36995,36997,36999,37001],{"class":35,"line":1477},[33,36996,33384],{"class":955},[33,36998,73],{"class":39},[33,37000,32729],{"class":76},[33,37002,32719],{"class":47},[33,37004,37005,37007,37009,37011],{"class":35,"line":1504},[33,37006,33395],{"class":955},[33,37008,73],{"class":39},[33,37010,737],{"class":76},[33,37012,884],{"class":47},[33,37014,37015,37017],{"class":35,"line":1509},[33,37016,5489],{"class":39},[33,37018,33408],{"class":47},[33,37020,37021],{"class":35,"line":1525},[33,37022,160],{"emptyLinePlaceholder":159},[33,37024,37025],{"class":35,"line":1535},[33,37026,33417],{"class":60},[33,37028,37029],{"class":35,"line":1540},[33,37030,33422],{"class":60},[33,37032,37033],{"class":35,"line":4027},[33,37034,160],{"emptyLinePlaceholder":159},[33,37036,37037],{"class":35,"line":4032},[33,37038,33431],{"class":60},[33,37040,37041,37043,37045],{"class":35,"line":9199},[33,37042,33200],{"class":39},[33,37044,33438],{"class":43},[33,37046,33441],{"class":47},[33,37048,37049,37051,37053,37055,37057,37059,37061,37063,37065],{"class":35,"line":9223},[33,37050,32490],{"class":47},[33,37052,73],{"class":39},[33,37054,31704],{"class":47},[33,37056,32497],{"class":119},[33,37058,3145],{"class":39},[33,37060,32502],{"class":47},[33,37062,3142],{"class":39},[33,37064,33460],{"class":119},[33,37066,884],{"class":47},[33,37068,37069],{"class":35,"line":9228},[33,37070,160],{"emptyLinePlaceholder":159},[33,37072,37073],{"class":35,"line":9234},[33,37074,160],{"emptyLinePlaceholder":159},[33,37076,37077],{"class":35,"line":9261},[33,37078,33475],{"class":60},[33,37080,37081],{"class":35,"line":9266},[33,37082,33480],{"class":60},[33,37084,37085],{"class":35,"line":9272},[33,37086,33485],{"class":60},[33,37088,37089,37091,37093,37095,37097,37099,37101],{"class":35,"line":9284},[33,37090,33490],{"class":47},[33,37092,73],{"class":39},[33,37094,33495],{"class":47},[33,37096,33498],{"class":955},[33,37098,73],{"class":39},[33,37100,33503],{"class":76},[33,37102,884],{"class":47},[33,37104,37105],{"class":35,"line":9296},[33,37106,160],{"emptyLinePlaceholder":159},[33,37108,37109],{"class":35,"line":9308},[33,37110,33514],{"class":60},[33,37112,37113,37115,37117],{"class":35,"line":10967},[33,37114,33519],{"class":47},[33,37116,73],{"class":39},[33,37118,33524],{"class":47},[33,37120,37121],{"class":35,"line":10992},[33,37122,160],{"emptyLinePlaceholder":159},[33,37124,37125],{"class":35,"line":11015},[33,37126,33533],{"class":60},[33,37128,37129,37131,37133],{"class":35,"line":11039},[33,37130,32542],{"class":47},[33,37132,73],{"class":39},[33,37134,33542],{"class":47},[33,37136,37137],{"class":35,"line":11044},[33,37138,33547],{"class":60},[33,37140,37141],{"class":35,"line":11049},[33,37142,33552],{"class":60},[33,37144,37145],{"class":35,"line":11054},[33,37146,33557],{"class":60},[33,37148,37149,37151,37153],{"class":35,"line":11063},[33,37150,33562],{"class":47},[33,37152,73],{"class":39},[33,37154,33567],{"class":47},[33,37156,37157],{"class":35,"line":11068},[33,37158,160],{"emptyLinePlaceholder":159},[33,37160,37161],{"class":35,"line":11074},[33,37162,160],{"emptyLinePlaceholder":159},[33,37164,37165],{"class":35,"line":11095},[33,37166,33580],{"class":60},[33,37168,37169],{"class":35,"line":11101},[33,37170,33585],{"class":60},[33,37172,37173,37175,37177],{"class":35,"line":11115},[33,37174,33590],{"class":47},[33,37176,73],{"class":39},[33,37178,33595],{"class":76},[33,37180,37181],{"class":35,"line":11121},[33,37182,33600],{"class":60},[33,37184,37185,37187,37189],{"class":35,"line":11148},[33,37186,33605],{"class":47},[33,37188,73],{"class":39},[33,37190,33610],{"class":47},[33,37192,37193],{"class":35,"line":11157},[33,37194,33615],{"class":60},[33,37196,37197,37199,37201],{"class":35,"line":11163},[33,37198,33620],{"class":47},[33,37200,73],{"class":39},[33,37202,33610],{"class":47},[33,37204,37205],{"class":35,"line":11171},[33,37206,33629],{"class":60},[33,37208,37209,37211,37213],{"class":35,"line":11176},[33,37210,33634],{"class":47},[33,37212,73],{"class":39},[33,37214,33610],{"class":47},[33,37216,37217],{"class":35,"line":17855},[33,37218,33643],{"class":60},[33,37220,37221,37223,37225],{"class":35,"line":17861},[33,37222,33648],{"class":47},[33,37224,73],{"class":39},[33,37226,33610],{"class":47},[33,37228,37229],{"class":35,"line":17884},[33,37230,160],{"emptyLinePlaceholder":159},[33,37232,37233],{"class":35,"line":17890},[33,37234,33661],{"class":60},[33,37236,37237,37239,37241],{"class":35,"line":17913},[33,37238,33666],{"class":47},[33,37240,73],{"class":39},[33,37242,33671],{"class":47},[33,37244,37245],{"class":35,"line":17927},[33,37246,160],{"emptyLinePlaceholder":159},[33,37248,37249],{"class":35,"line":17947},[33,37250,160],{"emptyLinePlaceholder":159},[33,37252,37253],{"class":35,"line":17953},[33,37254,33684],{"class":60},[33,37256,37257,37259,37261,37263,37265],{"class":35,"line":17964},[33,37258,857],{"class":39},[33,37260,33691],{"class":47},[33,37262,27296],{"class":39},[33,37264,33696],{"class":76},[33,37266,33699],{"class":47},[33,37268,37269,37271,37273,37275,37277,37279,37281,37283,37285,37287,37289],{"class":35,"line":17987},[33,37270,33704],{"class":76},[33,37272,345],{"class":47},[33,37274,33709],{"class":119},[33,37276,33712],{"class":76},[33,37278,2184],{"class":119},[33,37280,33712],{"class":76},[33,37282,1866],{"class":119},[33,37284,33721],{"class":47},[33,37286,1199],{"class":39},[33,37288,701],{"class":76},[33,37290,31750],{"class":47},[33,37292,37293,37295,37297,37299,37301,37303],{"class":35,"line":18009},[33,37294,33704],{"class":76},[33,37296,345],{"class":47},[33,37298,33736],{"class":119},[33,37300,2057],{"class":39},[33,37302,77],{"class":76},[33,37304,884],{"class":47},[33,37306,37307],{"class":35,"line":18014},[33,37308,160],{"emptyLinePlaceholder":159},[33,37310,37311],{"class":35,"line":18020},[33,37312,33751],{"class":60},[33,37314,37315],{"class":35,"line":18034},[33,37316,33756],{"class":60},[33,37318,37319,37321,37323],{"class":35,"line":18047},[33,37320,33761],{"class":47},[33,37322,73],{"class":39},[33,37324,33595],{"class":76},[33,37326,37327],{"class":35,"line":18052},[33,37328,33770],{"class":60},[33,37330,37331,37333,37335],{"class":35,"line":18066},[33,37332,33775],{"class":47},[33,37334,73],{"class":39},[33,37336,4493],{"class":76},[33,37338,37339],{"class":35,"line":18071},[33,37340,33784],{"class":60},[33,37342,37343,37345,37347],{"class":35,"line":18077},[33,37344,33789],{"class":47},[33,37346,73],{"class":39},[33,37348,33595],{"class":76},[33,37350,37351],{"class":35,"line":18082},[33,37352,33798],{"class":60},[33,37354,37355,37357,37359],{"class":35,"line":18096},[33,37356,33803],{"class":47},[33,37358,73],{"class":39},[33,37360,4493],{"class":76},[33,37362,37363],{"class":35,"line":18101},[33,37364,33812],{"class":60},[33,37366,37367,37369,37371],{"class":35,"line":18106},[33,37368,33817],{"class":47},[33,37370,73],{"class":39},[33,37372,4493],{"class":76},[33,37374,37375],{"class":35,"line":18120},[33,37376,33826],{"class":60},[33,37378,37379,37381,37383],{"class":35,"line":18132},[33,37380,33831],{"class":47},[33,37382,73],{"class":39},[33,37384,4493],{"class":76},[33,37386,37387],{"class":35,"line":18137},[33,37388,33840],{"class":60},[33,37390,37391,37393,37395,37397,37399],{"class":35,"line":18150},[33,37392,1216],{"class":39},[33,37394,32854],{"class":47},[33,37396,27296],{"class":39},[33,37398,32859],{"class":76},[33,37400,33853],{"class":47},[33,37402,37403],{"class":35,"line":18155},[33,37404,33858],{"class":60},[33,37406,37407,37409,37411],{"class":35,"line":18160},[33,37408,33863],{"class":47},[33,37410,73],{"class":39},[33,37412,33868],{"class":47},[33,37414,37415],{"class":35,"line":18165},[33,37416,33873],{"class":60},[33,37418,37419,37421,37423],{"class":35,"line":18178},[33,37420,33878],{"class":47},[33,37422,73],{"class":39},[33,37424,33883],{"class":47},[33,37426,37427],{"class":35,"line":18183},[33,37428,33889],{"class":60},[33,37430,37431],{"class":35,"line":33886},[33,37432,33895],{"class":47},[33,37434,37435],{"class":35,"line":33892},[33,37436,33901],{"class":60},[33,37438,37439],{"class":35,"line":33898},[33,37440,33907],{"class":60},[33,37442,37443,37445,37447],{"class":35,"line":33904},[33,37444,33913],{"class":47},[33,37446,73],{"class":39},[33,37448,33918],{"class":47},[33,37450,37451],{"class":35,"line":33910},[33,37452,33924],{"class":60},[33,37454,37455,37457,37459,37461,37463,37465,37467],{"class":35,"line":33921},[33,37456,33930],{"class":47},[33,37458,73],{"class":39},[33,37460,33935],{"class":47},[33,37462,33938],{"class":955},[33,37464,73],{"class":39},[33,37466,701],{"class":76},[33,37468,884],{"class":47},[33,37470,37471],{"class":35,"line":33927},[33,37472,33950],{"class":60},[33,37474,37475,37477,37479],{"class":35,"line":33947},[33,37476,33956],{"class":47},[33,37478,73],{"class":39},[33,37480,33961],{"class":47},[33,37482,37483],{"class":35,"line":33953},[33,37484,33967],{"class":60},[33,37486,37487],{"class":35,"line":33964},[33,37488,33973],{"class":47},[33,37490,37491],{"class":35,"line":33970},[33,37492,33979],{"class":60},[33,37494,37495],{"class":35,"line":33976},[33,37496,33985],{"class":47},[33,37498,37499],{"class":35,"line":33982},[33,37500,33991],{"class":60},[33,37502,37503],{"class":35,"line":33988},[33,37504,33997],{"class":47},[33,37506,37507],{"class":35,"line":33994},[33,37508,34003],{"class":60},[33,37510,37511,37513,37515,37517,37519,37521,37523],{"class":35,"line":34000},[33,37512,34009],{"class":47},[33,37514,10728],{"class":39},[33,37516,34014],{"class":47},[33,37518,2057],{"class":39},[33,37520,34019],{"class":47},[33,37522,766],{"class":76},[33,37524,884],{"class":47},[33,37526,37527],{"class":35,"line":34006},[33,37528,34029],{"class":60},[33,37530,37531,37533,37535,37537,37539],{"class":35,"line":34026},[33,37532,34035],{"class":47},[33,37534,10728],{"class":39},[33,37536,34040],{"class":47},[33,37538,4359],{"class":39},[33,37540,34045],{"class":47},[33,37542,37543],{"class":35,"line":34032},[33,37544,34051],{"class":60},[33,37546,37547,37549,37551,37553,37555],{"class":35,"line":34048},[33,37548,34057],{"class":47},[33,37550,10728],{"class":39},[33,37552,34019],{"class":47},[33,37554,766],{"class":76},[33,37556,884],{"class":47},[33,37558,37559],{"class":35,"line":34054},[33,37560,34071],{"class":60},[33,37562,37563,37565,37567,37569,37571],{"class":35,"line":34068},[33,37564,1216],{"class":39},[33,37566,34079],{"class":47},[33,37568,27296],{"class":39},[33,37570,32859],{"class":76},[33,37572,34086],{"class":47},[33,37574,37575],{"class":35,"line":34074},[33,37576,34092],{"class":60},[33,37578,37579,37581,37583],{"class":35,"line":34089},[33,37580,33863],{"class":47},[33,37582,73],{"class":39},[33,37584,33868],{"class":47},[33,37586,37587],{"class":35,"line":34095},[33,37588,34107],{"class":60},[33,37590,37591,37593,37595],{"class":35,"line":34104},[33,37592,33878],{"class":47},[33,37594,73],{"class":39},[33,37596,33883],{"class":47},[33,37598,37599],{"class":35,"line":34110},[33,37600,34122],{"class":60},[33,37602,37603],{"class":35,"line":34119},[33,37604,34128],{"class":47},[33,37606,37607],{"class":35,"line":34125},[33,37608,37609],{"class":60},"            # 验证时不计算梯度以节省内存\u002F计算\n",[33,37611,37612,37614],{"class":35,"line":34131},[33,37613,34134],{"class":39},[33,37615,34137],{"class":47},[33,37617,37618],{"class":35,"line":34140},[33,37619,34143],{"class":60},[33,37621,37622,37625,37627],{"class":35,"line":34146},[33,37623,37624],{"class":47},"                output",[33,37626,73],{"class":39},[33,37628,33918],{"class":47},[33,37630,37631],{"class":35,"line":34157},[33,37632,34160],{"class":60},[33,37634,37635,37638,37640,37642,37644,37646,37648],{"class":35,"line":34163},[33,37636,37637],{"class":47},"                pre_lab",[33,37639,73],{"class":39},[33,37641,33935],{"class":47},[33,37643,33938],{"class":955},[33,37645,73],{"class":39},[33,37647,701],{"class":76},[33,37649,884],{"class":47},[33,37651,37652],{"class":35,"line":34182},[33,37653,34185],{"class":60},[33,37655,37656,37659,37661],{"class":35,"line":34188},[33,37657,37658],{"class":47},"                val_batch_loss",[33,37660,73],{"class":39},[33,37662,33961],{"class":47},[33,37664,37665],{"class":35,"line":34199},[33,37666,34202],{"class":60},[33,37668,37669,37672,37674,37677,37679,37681,37683],{"class":35,"line":34205},[33,37670,37671],{"class":47},"                val_loss",[33,37673,10728],{"class":39},[33,37675,37676],{"class":47},"val_batch_loss.item()",[33,37678,2057],{"class":39},[33,37680,34019],{"class":47},[33,37682,766],{"class":76},[33,37684,884],{"class":47},[33,37686,37687,37690,37692,37694,37696],{"class":35,"line":34225},[33,37688,37689],{"class":47},"                val_corrects",[33,37691,10728],{"class":39},[33,37693,34040],{"class":47},[33,37695,4359],{"class":39},[33,37697,34045],{"class":47},[33,37699,37700],{"class":35,"line":34241},[33,37701,37702],{"class":60},"            # 当前用于验证的样本数量\n",[33,37704,37705,37708,37710,37712,37714],{"class":35,"line":34247},[33,37706,37707],{"class":47},"            val_num",[33,37709,10728],{"class":39},[33,37711,34019],{"class":47},[33,37713,766],{"class":76},[33,37715,884],{"class":47},[33,37717,37718],{"class":35,"line":34261},[33,37719,34264],{"class":60},[33,37721,37722],{"class":35,"line":34267},[33,37723,34270],{"class":60},[33,37725,37726,37728,37730],{"class":35,"line":34273},[33,37727,34276],{"class":47},[33,37729,2184],{"class":39},[33,37731,34281],{"class":47},[33,37733,37734],{"class":35,"line":34284},[33,37735,34287],{"class":60},[33,37737,37738],{"class":35,"line":34290},[33,37739,34293],{"class":60},[33,37741,37742,37744,37746],{"class":35,"line":34296},[33,37743,34299],{"class":47},[33,37745,2184],{"class":39},[33,37747,34281],{"class":47},[33,37749,37750],{"class":35,"line":34306},[33,37751,34309],{"class":60},[33,37753,37754,37756,37758],{"class":35,"line":34312},[33,37755,34315],{"class":47},[33,37757,2184],{"class":39},[33,37759,34320],{"class":47},[33,37761,37762],{"class":35,"line":34323},[33,37763,34326],{"class":60},[33,37765,37766,37768,37770],{"class":35,"line":34329},[33,37767,34332],{"class":47},[33,37769,2184],{"class":39},[33,37771,34320],{"class":47},[33,37773,37774],{"class":35,"line":34339},[33,37775,160],{"emptyLinePlaceholder":159},[33,37777,37778],{"class":35,"line":34344},[33,37779,34347],{"class":60},[33,37781,37782,37784,37786,37788,37790,37792,37794,37796,37798,37800,37802,37804,37806,37808,37810,37812,37814,37816,37818,37820],{"class":35,"line":34350},[33,37783,33704],{"class":76},[33,37785,345],{"class":47},[33,37787,4994],{"class":119},[33,37789,33712],{"class":76},[33,37791,34361],{"class":119},[33,37793,698],{"class":76},[33,37795,34366],{"class":39},[33,37797,2542],{"class":76},[33,37799,34371],{"class":119},[33,37801,698],{"class":76},[33,37803,34366],{"class":39},[33,37805,2542],{"class":76},[33,37807,4994],{"class":119},[33,37809,34382],{"class":47},[33,37811,1199],{"class":39},[33,37813,701],{"class":76},[33,37815,34389],{"class":47},[33,37817,1199],{"class":39},[33,37819,701],{"class":76},[33,37821,34396],{"class":47},[33,37823,37824,37826,37828,37830,37832,37834,37836,37838,37840,37842,37844,37846,37848,37850,37852,37854,37856,37858,37860,37862],{"class":35,"line":34399},[33,37825,33704],{"class":76},[33,37827,345],{"class":47},[33,37829,4994],{"class":119},[33,37831,33712],{"class":76},[33,37833,34410],{"class":119},[33,37835,698],{"class":76},[33,37837,34366],{"class":39},[33,37839,2542],{"class":76},[33,37841,34419],{"class":119},[33,37843,698],{"class":76},[33,37845,34366],{"class":39},[33,37847,2542],{"class":76},[33,37849,4994],{"class":119},[33,37851,34430],{"class":47},[33,37853,1199],{"class":39},[33,37855,701],{"class":76},[33,37857,34437],{"class":47},[33,37859,1199],{"class":39},[33,37861,701],{"class":76},[33,37863,34396],{"class":47},[33,37865,37866],{"class":35,"line":34446},[33,37867,160],{"emptyLinePlaceholder":159},[33,37869,37870],{"class":35,"line":34451},[33,37871,34454],{"class":60},[33,37873,37874,37876,37878,37880,37882,37884,37886],{"class":35,"line":34457},[33,37875,3915],{"class":39},[33,37877,34462],{"class":47},[33,37879,1199],{"class":39},[33,37881,701],{"class":76},[33,37883,693],{"class":47},[33,37885,1265],{"class":39},[33,37887,34473],{"class":47},[33,37889,37890],{"class":35,"line":34476},[33,37891,34479],{"class":60},[33,37893,37894,37896,37898,37900,37902,37904,37906],{"class":35,"line":34482},[33,37895,34485],{"class":47},[33,37897,1666],{"class":76},[33,37899,73],{"class":39},[33,37901,34492],{"class":47},[33,37903,1199],{"class":39},[33,37905,701],{"class":76},[33,37907,34499],{"class":47},[33,37909,37910],{"class":35,"line":34502},[33,37911,34505],{"class":60},[33,37913,37914],{"class":35,"line":34508},[33,37915,34511],{"class":60},[33,37917,37918,37920,37922],{"class":35,"line":34514},[33,37919,34517],{"class":47},[33,37921,73],{"class":39},[33,37923,33567],{"class":47},[33,37925,37926],{"class":35,"line":34524},[33,37927,160],{"emptyLinePlaceholder":159},[33,37929,37930],{"class":35,"line":34529},[33,37931,34532],{"class":60},[33,37933,37934,37936,37938,37940,37942],{"class":35,"line":34535},[33,37935,34538],{"class":47},[33,37937,73],{"class":39},[33,37939,34543],{"class":47},[33,37941,1199],{"class":39},[33,37943,34548],{"class":47},[33,37945,37946,37948,37950,37952,37954,37956,37958,37960,37962,37964,37966,37968,37970,37972,37974,37976,37978,37980],{"class":35,"line":34551},[33,37947,33704],{"class":76},[33,37949,345],{"class":47},[33,37951,34558],{"class":119},[33,37953,698],{"class":76},[33,37955,34563],{"class":39},[33,37957,2542],{"class":76},[33,37959,2144],{"class":119},[33,37961,698],{"class":76},[33,37963,34563],{"class":39},[33,37965,2542],{"class":76},[33,37967,34576],{"class":119},[33,37969,34579],{"class":47},[33,37971,34582],{"class":39},[33,37973,2505],{"class":76},[33,37975,34587],{"class":47},[33,37977,1939],{"class":39},[33,37979,2505],{"class":76},[33,37981,31750],{"class":47},[33,37983,37984],{"class":35,"line":34596},[33,37985,37986],{"class":60},"    # 选择最优参数并保存\n",[33,37988,37989],{"class":35,"line":34602},[33,37990,37991],{"class":60},"    # 保存最佳模型权重字典\n",[33,37993,37994,37997,37999],{"class":35,"line":34608},[33,37995,37996],{"class":47},"    torch.save(best_model_wts,",[33,37998,34620],{"class":119},[33,38000,884],{"class":47},[33,38002,38003],{"class":35,"line":34614},[33,38004,34640],{"class":60},[33,38006,38007,38009,38011,38013,38015,38017],{"class":35,"line":34625},[33,38008,34646],{"class":47},[33,38010,73],{"class":39},[33,38012,34651],{"class":47},[33,38014,34654],{"class":955},[33,38016,73],{"class":39},[33,38018,54],{"class":47},[33,38020,38021,38023,38025,38027],{"class":35,"line":34631},[33,38022,34664],{"class":119},[33,38024,2458],{"class":47},[33,38026,34669],{"class":76},[33,38028,34672],{"class":47},[33,38030,38031,38033],{"class":35,"line":34637},[33,38032,34678],{"class":119},[33,38034,34681],{"class":47},[33,38036,38037,38039],{"class":35,"line":34643},[33,38038,34687],{"class":119},[33,38040,34690],{"class":47},[33,38042,38043,38045],{"class":35,"line":34661},[33,38044,34696],{"class":119},[33,38046,34699],{"class":47},[33,38048,38049,38051],{"class":35,"line":34675},[33,38050,34705],{"class":119},[33,38052,34708],{"class":47},[33,38054,38055],{"class":35,"line":34684},[33,38056,34714],{"class":47},[33,38058,38059],{"class":35,"line":34693},[33,38060,34720],{"class":60},[33,38062,38063,38065],{"class":35,"line":34702},[33,38064,5489],{"class":39},[33,38066,34728],{"class":47},[33,38068,38069],{"class":35,"line":34711},[33,38070,160],{"emptyLinePlaceholder":159},[33,38072,38073],{"class":35,"line":34717},[33,38074,34739],{"class":60},[33,38076,38077,38079,38081],{"class":35,"line":34723},[33,38078,33200],{"class":39},[33,38080,34747],{"class":43},[33,38082,34750],{"class":47},[33,38084,38085],{"class":35,"line":34731},[33,38086,34756],{"class":60},[33,38088,38089,38091,38093,38095,38097,38099,38101,38103],{"class":35,"line":34736},[33,38090,34762],{"class":47},[33,38092,32946],{"class":955},[33,38094,73],{"class":39},[33,38096,345],{"class":47},[33,38098,2099],{"class":76},[33,38100,704],{"class":47},[33,38102,717],{"class":76},[33,38104,31750],{"class":47},[33,38106,38107],{"class":35,"line":34742},[33,38108,34782],{"class":60},[33,38110,38111],{"class":35,"line":34753},[33,38112,34788],{"class":60},[33,38114,38115],{"class":35,"line":34759},[33,38116,34794],{"class":60},[33,38118,38119,38121,38123,38125,38127,38129,38131],{"class":35,"line":34779},[33,38120,32980],{"class":47},[33,38122,701],{"class":76},[33,38124,704],{"class":47},[33,38126,707],{"class":76},[33,38128,704],{"class":47},[33,38130,701],{"class":76},[33,38132,884],{"class":47},[33,38134,38135],{"class":35,"line":34785},[33,38136,34817],{"class":60},[33,38138,38139],{"class":35,"line":34791},[33,38140,34823],{"class":60},[33,38142,38143],{"class":35,"line":34797},[33,38144,34829],{"class":60},[33,38146,38147],{"class":35,"line":34814},[33,38148,34835],{"class":60},[33,38150,38151],{"class":35,"line":34820},[33,38152,34841],{"class":60},[33,38154,38155,38157,38159,38161,38163,38165,38167,38169,38171],{"class":35,"line":34826},[33,38156,34847],{"class":47},[33,38158,34850],{"class":119},[33,38160,34853],{"class":47},[33,38162,34856],{"class":119},[33,38164,704],{"class":47},[33,38166,34861],{"class":955},[33,38168,73],{"class":39},[33,38170,34866],{"class":119},[33,38172,884],{"class":47},[33,38174,38175,38177,38179,38181,38183,38185,38187,38189,38191],{"class":35,"line":34832},[33,38176,34847],{"class":47},[33,38178,34850],{"class":119},[33,38180,34878],{"class":47},[33,38182,34881],{"class":119},[33,38184,704],{"class":47},[33,38186,34861],{"class":955},[33,38188,73],{"class":39},[33,38190,34890],{"class":119},[33,38192,884],{"class":47},[33,38194,38195],{"class":35,"line":34838},[33,38196,34898],{"class":60},[33,38198,38199],{"class":35,"line":34844},[33,38200,34904],{"class":47},[33,38202,38203],{"class":35,"line":34871},[33,38204,34910],{"class":60},[33,38206,38207,38209,38211],{"class":35,"line":34895},[33,38208,34916],{"class":47},[33,38210,34919],{"class":119},[33,38212,884],{"class":47},[33,38214,38215,38217,38219],{"class":35,"line":34901},[33,38216,34927],{"class":47},[33,38218,34930],{"class":119},[33,38220,884],{"class":47},[33,38222,38223],{"class":35,"line":34907},[33,38224,34938],{"class":60},[33,38226,38227,38229,38231,38233,38235,38237,38239],{"class":35,"line":34913},[33,38228,32980],{"class":47},[33,38230,701],{"class":76},[33,38232,704],{"class":47},[33,38234,707],{"class":76},[33,38236,704],{"class":47},[33,38238,707],{"class":76},[33,38240,884],{"class":47},[33,38242,38243,38245,38247,38249,38251,38253,38255,38257,38259],{"class":35,"line":34924},[33,38244,34847],{"class":47},[33,38246,34850],{"class":119},[33,38248,34965],{"class":47},[33,38250,34856],{"class":119},[33,38252,704],{"class":47},[33,38254,34861],{"class":955},[33,38256,73],{"class":39},[33,38258,34976],{"class":119},[33,38260,884],{"class":47},[33,38262,38263,38265,38267,38269,38271,38273,38275,38277,38279],{"class":35,"line":34935},[33,38264,34847],{"class":47},[33,38266,34850],{"class":119},[33,38268,34988],{"class":47},[33,38270,34881],{"class":119},[33,38272,704],{"class":47},[33,38274,34861],{"class":955},[33,38276,73],{"class":39},[33,38278,34999],{"class":119},[33,38280,884],{"class":47},[33,38282,38283],{"class":35,"line":34941},[33,38284,35007],{"class":60},[33,38286,38287],{"class":35,"line":34958},[33,38288,34904],{"class":47},[33,38290,38291,38293,38295],{"class":35,"line":34981},[33,38292,34916],{"class":47},[33,38294,34850],{"class":119},[33,38296,884],{"class":47},[33,38298,38299,38301,38303],{"class":35,"line":35004},[33,38300,34927],{"class":47},[33,38302,35029],{"class":119},[33,38304,884],{"class":47},[33,38306,38307],{"class":35,"line":35010},[33,38308,35037],{"class":47},[33,38310,38311],{"class":35,"line":35015},[33,38312,160],{"emptyLinePlaceholder":159},[33,38314,38315],{"class":35,"line":35024},[33,38316,35048],{"class":60},[33,38318,38319,38321,38323,38325,38327],{"class":35,"line":35034},[33,38320,2987],{"class":39},[33,38322,32473],{"class":76},[33,38324,4359],{"class":39},[33,38326,32478],{"class":119},[33,38328,5141],{"class":47},[33,38330,38331],{"class":35,"line":35040},[33,38332,35067],{"class":60},[33,38334,38335,38338,38340],{"class":35,"line":35045},[33,38336,38337],{"class":47},"    AlexNet",[33,38339,73],{"class":39},[33,38341,38342],{"class":47},"AlexNet()\n",[33,38344,38345,38347,38349],{"class":35,"line":35051},[33,38346,35084],{"class":47},[33,38348,73],{"class":39},[33,38350,35089],{"class":47},[33,38352,38353,38355,38357,38360,38362,38364,38366],{"class":35,"line":35064},[33,38354,34646],{"class":47},[33,38356,73],{"class":39},[33,38358,38359],{"class":47},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[33,38361,35102],{"class":955},[33,38363,73],{"class":39},[33,38365,1045],{"class":76},[33,38367,884],{"class":47},[33,38369,38370],{"class":35,"line":35070},[33,38371,35114],{"class":47},[574,38373,38374],{"start":57},[564,38375,35127],{},[23,38377,38379],{"className":31631,"code":38378,"language":31633,"meta":28,"style":28},"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",[30,38380,38381,38387,38397,38407,38417,38421,38431,38441,38452,38456,38460,38464,38472,38488,38498,38514,38524,38538,38542,38552,38562,38572,38578,38582,38586,38594,38598,38614,38622,38626,38630,38638,38646,38650,38654,38658,38662,38668,38672,38682,38690,38698,38702,38706,38710,38718,38722,38738,38742,38746,38750,38762,38766,38778,38782,38786,38798,38802,38812,38816,38820,38832,38836,38844,38848,38852,38860,38864,38872,38876,38880,38884,38888,38892,38908,38916,38920,38924,38972,38978,38982,38992,39000,39008,39012,39016,39020,39024,39032,39036,39052,39056,39064,39072],{"__ignoreMap":28},[33,38382,38383,38385],{"class":35,"line":36},[33,38384,31645],{"class":39},[33,38386,31648],{"class":47},[33,38388,38389,38391,38393,38395],{"class":35,"line":51},[33,38390,31645],{"class":39},[33,38392,32668],{"class":47},[33,38394,32636],{"class":39},[33,38396,32673],{"class":47},[33,38398,38399,38401,38403,38405],{"class":35,"line":57},[33,38400,31990],{"class":39},[33,38402,35155],{"class":47},[33,38404,31645],{"class":39},[33,38406,35160],{"class":47},[33,38408,38409,38411,38413,38415],{"class":35,"line":64},[33,38410,31990],{"class":39},[33,38412,32651],{"class":47},[33,38414,31645],{"class":39},[33,38416,32656],{"class":47},[33,38418,38419],{"class":35,"line":83},[33,38420,35175],{"class":60},[33,38422,38423,38425,38427,38429],{"class":35,"line":89},[33,38424,31990],{"class":39},[33,38426,32621],{"class":47},[33,38428,31645],{"class":39},[33,38430,32626],{"class":47},[33,38432,38433,38435,38437,38439],{"class":35,"line":98},[33,38434,31990],{"class":39},[33,38436,33167],{"class":47},[33,38438,31645],{"class":39},[33,38440,36810],{"class":47},[33,38442,38443,38445,38448,38450],{"class":35,"line":110},[33,38444,31990],{"class":39},[33,38446,38447],{"class":47}," 练习.AlexNet.model ",[33,38449,31645],{"class":39},[33,38451,36810],{"class":47},[33,38453,38454],{"class":35,"line":134},[33,38455,160],{"emptyLinePlaceholder":159},[33,38457,38458],{"class":35,"line":156},[33,38459,160],{"emptyLinePlaceholder":159},[33,38461,38462],{"class":35,"line":163},[33,38463,35204],{"class":60},[33,38465,38466,38468,38470],{"class":35,"line":169},[33,38467,33200],{"class":39},[33,38469,35211],{"class":43},[33,38471,33206],{"class":47},[33,38473,38474,38476,38478,38480,38482,38484,38486],{"class":35,"line":175},[33,38475,35218],{"class":47},[33,38477,73],{"class":39},[33,38479,32708],{"class":47},[33,38481,32711],{"class":955},[33,38483,73],{"class":39},[33,38485,32716],{"class":119},[33,38487,32719],{"class":47},[33,38489,38490,38492,38494,38496],{"class":35,"line":181},[33,38491,35235],{"class":955},[33,38493,73],{"class":39},[33,38495,35240],{"class":76},[33,38497,32719],{"class":47},[33,38499,38500,38502,38504,38506,38508,38510,38512],{"class":35,"line":196},[33,38501,35247],{"class":955},[33,38503,73],{"class":39},[33,38505,32746],{"class":47},[33,38507,32749],{"class":955},[33,38509,73],{"class":39},[33,38511,36702],{"class":76},[33,38513,32757],{"class":47},[33,38515,38516,38518,38520,38522],{"class":35,"line":213},[33,38517,35264],{"class":955},[33,38519,73],{"class":39},[33,38521,32729],{"class":76},[33,38523,884],{"class":47},[33,38525,38526,38528,38530,38532,38534,38536],{"class":35,"line":228},[33,38527,35275],{"class":47},[33,38529,73],{"class":39},[33,38531,32787],{"class":47},[33,38533,32790],{"class":955},[33,38535,73],{"class":39},[33,38537,35286],{"class":47},[33,38539,38540],{"class":35,"line":1345},[33,38541,35291],{"class":60},[33,38543,38544,38546,38548,38550],{"class":35,"line":1350},[33,38545,35296],{"class":955},[33,38547,73],{"class":39},[33,38549,701],{"class":76},[33,38551,32719],{"class":47},[33,38553,38554,38556,38558,38560],{"class":35,"line":1359},[33,38555,35307],{"class":955},[33,38557,73],{"class":39},[33,38559,32729],{"class":76},[33,38561,32719],{"class":47},[33,38563,38564,38566,38568,38570],{"class":35,"line":1364},[33,38565,35318],{"class":955},[33,38567,73],{"class":39},[33,38569,766],{"class":76},[33,38571,884],{"class":47},[33,38573,38574,38576],{"class":35,"line":1370},[33,38575,5489],{"class":39},[33,38577,35331],{"class":47},[33,38579,38580],{"class":35,"line":1425},[33,38581,160],{"emptyLinePlaceholder":159},[33,38583,38584],{"class":35,"line":1438},[33,38585,35340],{"class":60},[33,38587,38588,38590,38592],{"class":35,"line":1451},[33,38589,33200],{"class":39},[33,38591,35347],{"class":43},[33,38593,35350],{"class":47},[33,38595,38596],{"class":35,"line":1457},[33,38597,35355],{"class":60},[33,38599,38600,38602,38604,38606,38608,38610,38612],{"class":35,"line":1466},[33,38601,32490],{"class":47},[33,38603,73],{"class":39},[33,38605,32497],{"class":119},[33,38607,3145],{"class":39},[33,38609,32502],{"class":47},[33,38611,3142],{"class":39},[33,38613,35372],{"class":119},[33,38615,38616,38618,38620],{"class":35,"line":1471},[33,38617,32542],{"class":47},[33,38619,73],{"class":39},[33,38621,33542],{"class":47},[33,38623,38624],{"class":35,"line":1477},[33,38625,160],{"emptyLinePlaceholder":159},[33,38627,38628],{"class":35,"line":1504},[33,38629,35389],{"class":60},[33,38631,38632,38634,38636],{"class":35,"line":1509},[33,38633,35394],{"class":47},[33,38635,73],{"class":39},[33,38637,33595],{"class":76},[33,38639,38640,38642,38644],{"class":35,"line":1525},[33,38641,35403],{"class":47},[33,38643,73],{"class":39},[33,38645,4493],{"class":76},[33,38647,38648],{"class":35,"line":1535},[33,38649,160],{"emptyLinePlaceholder":159},[33,38651,38652],{"class":35,"line":1540},[33,38653,35416],{"class":60},[33,38655,38656],{"class":35,"line":4027},[33,38657,35421],{"class":60},[33,38659,38660],{"class":35,"line":4032},[33,38661,35426],{"class":60},[33,38663,38664,38666],{"class":35,"line":9199},[33,38665,35431],{"class":39},[33,38667,34137],{"class":47},[33,38669,38670],{"class":35,"line":9223},[33,38671,35438],{"class":60},[33,38673,38674,38676,38678,38680],{"class":35,"line":9228},[33,38675,1216],{"class":39},[33,38677,35445],{"class":47},[33,38679,27296],{"class":39},[33,38681,35450],{"class":47},[33,38683,38684,38686,38688],{"class":35,"line":9234},[33,38685,35455],{"class":47},[33,38687,73],{"class":39},[33,38689,35460],{"class":47},[33,38691,38692,38694,38696],{"class":35,"line":9261},[33,38693,35465],{"class":47},[33,38695,73],{"class":39},[33,38697,35470],{"class":47},[33,38699,38700],{"class":35,"line":9266},[33,38701,35475],{"class":60},[33,38703,38704],{"class":35,"line":9272},[33,38705,34128],{"class":47},[33,38707,38708],{"class":35,"line":9284},[33,38709,35484],{"class":60},[33,38711,38712,38714,38716],{"class":35,"line":9296},[33,38713,33913],{"class":47},[33,38715,73],{"class":39},[33,38717,35493],{"class":47},[33,38719,38720],{"class":35,"line":9308},[33,38721,35498],{"class":60},[33,38723,38724,38726,38728,38730,38732,38734,38736],{"class":35,"line":10967},[33,38725,33930],{"class":47},[33,38727,73],{"class":39},[33,38729,33935],{"class":47},[33,38731,33938],{"class":955},[33,38733,73],{"class":39},[33,38735,701],{"class":76},[33,38737,884],{"class":47},[33,38739,38740],{"class":35,"line":10992},[33,38741,35519],{"class":60},[33,38743,38744],{"class":35,"line":11015},[33,38745,35524],{"class":60},[33,38747,38748],{"class":35,"line":11039},[33,38749,35529],{"class":60},[33,38751,38752,38754,38756,38758,38760],{"class":35,"line":11044},[33,38753,35534],{"class":47},[33,38755,10728],{"class":39},[33,38757,34040],{"class":47},[33,38759,4359],{"class":39},[33,38761,35543],{"class":47},[33,38763,38764],{"class":35,"line":11049},[33,38765,35548],{"class":60},[33,38767,38768,38770,38772,38774,38776],{"class":35,"line":11054},[33,38769,35553],{"class":47},[33,38771,10728],{"class":39},[33,38773,35558],{"class":47},[33,38775,766],{"class":76},[33,38777,884],{"class":47},[33,38779,38780],{"class":35,"line":11063},[33,38781,160],{"emptyLinePlaceholder":159},[33,38783,38784],{"class":35,"line":11068},[33,38785,35571],{"class":60},[33,38787,38788,38790,38792,38794,38796],{"class":35,"line":11074},[33,38789,35576],{"class":47},[33,38791,73],{"class":39},[33,38793,35581],{"class":47},[33,38795,2184],{"class":39},[33,38797,35586],{"class":47},[33,38799,38800],{"class":35,"line":11095},[33,38801,35591],{"class":60},[33,38803,38804,38806,38808,38810],{"class":35,"line":11101},[33,38805,33704],{"class":76},[33,38807,345],{"class":47},[33,38809,35600],{"class":119},[33,38811,35603],{"class":47},[33,38813,38814],{"class":35,"line":11115},[33,38815,160],{"emptyLinePlaceholder":159},[33,38817,38818],{"class":35,"line":11121},[33,38819,35612],{"class":60},[33,38821,38822,38824,38826,38828,38830],{"class":35,"line":11148},[33,38823,2987],{"class":39},[33,38825,32473],{"class":76},[33,38827,4359],{"class":39},[33,38829,32478],{"class":119},[33,38831,5141],{"class":47},[33,38833,38834],{"class":35,"line":11157},[33,38835,35629],{"class":60},[33,38837,38838,38840,38842],{"class":35,"line":11163},[33,38839,32542],{"class":47},[33,38841,73],{"class":39},[33,38843,38342],{"class":47},[33,38845,38846],{"class":35,"line":11171},[33,38847,35642],{"class":60},[33,38849,38850],{"class":35,"line":11176},[33,38851,35647],{"class":60},[33,38853,38854,38856,38858],{"class":35,"line":17855},[33,38855,35652],{"class":47},[33,38857,35655],{"class":119},[33,38859,31750],{"class":47},[33,38861,38862],{"class":35,"line":17861},[33,38863,35662],{"class":60},[33,38865,38866,38868,38870],{"class":35,"line":17884},[33,38867,35275],{"class":47},[33,38869,73],{"class":39},[33,38871,35671],{"class":47},[33,38873,38874],{"class":35,"line":17890},[33,38875,35676],{"class":60},[33,38877,38878],{"class":35,"line":17913},[33,38879,35681],{"class":47},[33,38881,38882],{"class":35,"line":17927},[33,38883,160],{"emptyLinePlaceholder":159},[33,38885,38886],{"class":35,"line":17947},[33,38887,35690],{"class":60},[33,38889,38890],{"class":35,"line":17953},[33,38891,35695],{"class":60},[33,38893,38894,38896,38898,38900,38902,38904,38906],{"class":35,"line":17964},[33,38895,32490],{"class":47},[33,38897,73],{"class":39},[33,38899,32497],{"class":119},[33,38901,3145],{"class":39},[33,38903,32502],{"class":47},[33,38905,3142],{"class":39},[33,38907,35372],{"class":119},[33,38909,38910,38912,38914],{"class":35,"line":17987},[33,38911,32542],{"class":47},[33,38913,73],{"class":39},[33,38915,33542],{"class":47},[33,38917,38918],{"class":35,"line":18009},[33,38919,35724],{"class":60},[33,38921,38922],{"class":35,"line":18014},[33,38923,35729],{"class":60},[33,38925,38926,38928,38930,38932,38934,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956,38958,38960,38962,38964,38966,38968,38970],{"class":35,"line":18020},[33,38927,35734],{"class":47},[33,38929,73],{"class":39},[33,38931,2489],{"class":47},[33,38933,35741],{"class":119},[33,38935,704],{"class":47},[33,38937,35746],{"class":119},[33,38939,704],{"class":47},[33,38941,35751],{"class":119},[33,38943,704],{"class":47},[33,38945,35756],{"class":119},[33,38947,704],{"class":47},[33,38949,35761],{"class":119},[33,38951,704],{"class":47},[33,38953,35766],{"class":119},[33,38955,704],{"class":47},[33,38957,35771],{"class":119},[33,38959,704],{"class":47},[33,38961,35776],{"class":119},[33,38963,704],{"class":47},[33,38965,35781],{"class":119},[33,38967,704],{"class":47},[33,38969,35786],{"class":119},[33,38971,34499],{"class":47},[33,38973,38974,38976],{"class":35,"line":18034},[33,38975,35431],{"class":39},[33,38977,34137],{"class":47},[33,38979,38980],{"class":35,"line":18047},[33,38981,35799],{"class":60},[33,38983,38984,38986,38988,38990],{"class":35,"line":18052},[33,38985,1216],{"class":39},[33,38987,35806],{"class":47},[33,38989,27296],{"class":39},[33,38991,35450],{"class":47},[33,38993,38994,38996,38998],{"class":35,"line":18066},[33,38995,33863],{"class":47},[33,38997,73],{"class":39},[33,38999,33868],{"class":47},[33,39001,39002,39004,39006],{"class":35,"line":18071},[33,39003,33878],{"class":47},[33,39005,73],{"class":39},[33,39007,33883],{"class":47},[33,39009,39010],{"class":35,"line":18077},[33,39011,160],{"emptyLinePlaceholder":159},[33,39013,39014],{"class":35,"line":18082},[33,39015,35835],{"class":60},[33,39017,39018],{"class":35,"line":18096},[33,39019,34128],{"class":47},[33,39021,39022],{"class":35,"line":18101},[33,39023,35844],{"class":60},[33,39025,39026,39028,39030],{"class":35,"line":18106},[33,39027,33913],{"class":47},[33,39029,73],{"class":39},[33,39031,33918],{"class":47},[33,39033,39034],{"class":35,"line":18120},[33,39035,35857],{"class":60},[33,39037,39038,39040,39042,39044,39046,39048,39050],{"class":35,"line":18132},[33,39039,33930],{"class":47},[33,39041,73],{"class":39},[33,39043,33935],{"class":47},[33,39045,33938],{"class":955},[33,39047,73],{"class":39},[33,39049,701],{"class":76},[33,39051,884],{"class":47},[33,39053,39054],{"class":35,"line":18137},[33,39055,35878],{"class":60},[33,39057,39058,39060,39062],{"class":35,"line":18150},[33,39059,35883],{"class":47},[33,39061,73],{"class":39},[33,39063,35888],{"class":47},[33,39065,39066,39068,39070],{"class":35,"line":18155},[33,39067,35893],{"class":47},[33,39069,73],{"class":39},[33,39071,35898],{"class":47},[33,39073,39074,39076,39078,39080,39082,39084,39086,39088],{"class":35,"line":18160},[33,39075,35903],{"class":76},[33,39077,345],{"class":47},[33,39079,35908],{"class":119},[33,39081,35911],{"class":47},[33,39083,35914],{"class":119},[33,39085,704],{"class":47},[33,39087,35919],{"class":119},[33,39089,35922],{"class":47},[1599,39091,39093],{"id":39092},"_22vgg","2.2.VGG",[23249,39095,39097],{"id":39096},"_221原理","2.2.1.原理",[14,39099,39100],{},[2918,39101],{"alt":28,"src":39102},"\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,39104,39105],{},[2918,39106],{"alt":28,"src":39107},"\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,39109,39110],{},[2918,39111],{"alt":28,"src":39112},"\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,39114,39115],{},"参数详细描述：",[14,39117,39118],{},[2918,39119],{"alt":28,"src":39120},"\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,39122,39123],{},[2918,39124],{"alt":28,"src":39125},"\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,39127,39128],{},[2918,39129],{"alt":28,"src":39130},"\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,39132,39133],{},[2918,39134],{"alt":28,"src":39135},"\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,39137,39138],{},[2918,39139],{"alt":28,"src":39140},"\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",[23249,39142,39144],{"id":39143},"_222代码实现","2.2.2.代码实现",[574,39146,39147],{},[564,39148,39149],{},"网络搭建",[23,39151,39153],{"className":31631,"code":39152,"language":31633,"meta":28,"style":28},"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",[30,39154,39155,39161,39173,39183,39193,39197,39214,39222,39241,39246,39251,39263,39301,39306,39342,39346,39375,39380,39385,39396,39432,39436,39472,39476,39504,39508,39513,39524,39560,39564,39600,39604,39640,39644,39672,39676,39681,39692,39729,39733,39769,39773,39809,39813,39841,39845,39850,39861,39897,39901,39937,39941,39977,39981,40009,40013,40018,40029,40034,40039,40044,40065,40069,40081,40085,40097,40101,40105,40110,40115,40130,40135,40145,40150,40165,40170,40189,40194,40203,40208,40218,40223,40228,40242,40247,40261,40269,40273,40277,40285,40296,40307,40318,40329,40340,40351,40357,40361,40366,40379,40399,40405,40414],{"__ignoreMap":28},[33,39156,39157,39159],{"class":35,"line":36},[33,39158,31645],{"class":39},[33,39160,31648],{"class":47},[33,39162,39163,39165,39168,39170],{"class":35,"line":51},[33,39164,31990],{"class":39},[33,39166,39167],{"class":47}," sympy.core.sympify ",[33,39169,31645],{"class":39},[33,39171,39172],{"class":47}," kernS\n",[33,39174,39175,39177,39179,39181],{"class":35,"line":57},[33,39176,31990],{"class":39},[33,39178,31993],{"class":47},[33,39180,31645],{"class":39},[33,39182,31998],{"class":47},[33,39184,39185,39187,39189,39191],{"class":35,"line":64},[33,39186,31990],{"class":39},[33,39188,32010],{"class":47},[33,39190,31645],{"class":39},[33,39192,32015],{"class":47},[33,39194,39195],{"class":35,"line":83},[33,39196,160],{"emptyLinePlaceholder":159},[33,39198,39199,39201,39204,39206,39208,39210,39212],{"class":35,"line":89},[33,39200,15945],{"class":39},[33,39202,39203],{"class":43}," VGG16",[33,39205,345],{"class":47},[33,39207,32031],{"class":43},[33,39209,2158],{"class":47},[33,39211,32036],{"class":43},[33,39213,32039],{"class":47},[33,39215,39216,39218,39220],{"class":35,"line":98},[33,39217,32054],{"class":39},[33,39219,32057],{"class":76},[33,39221,32060],{"class":47},[33,39223,39224,39226,39228,39231,39233,39235,39237,39239],{"class":35,"line":110},[33,39225,32070],{"class":76},[33,39227,345],{"class":47},[33,39229,39230],{"class":76},"VGG16",[33,39232,13686],{"class":47},[33,39234,32076],{"class":76},[33,39236,32079],{"class":47},[33,39238,32082],{"class":76},[33,39240,48],{"class":47},[33,39242,39243],{"class":35,"line":134},[33,39244,39245],{"class":60},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[33,39247,39248],{"class":35,"line":156},[33,39249,39250],{"class":60},"        # 这里用的是灰度图\n",[33,39252,39253,39255,39258,39260],{"class":35,"line":163},[33,39254,32098],{"class":76},[33,39256,39257],{"class":47},".block1",[33,39259,73],{"class":39},[33,39261,39262],{"class":47},"nn.Sequential(\n",[33,39264,39265,39268,39270,39272,39274,39276,39278,39280,39282,39284,39286,39288,39290,39292,39294,39296,39298],{"class":35,"line":169},[33,39266,39267],{"class":47},"            nn.Conv2d(",[33,39269,32109],{"class":955},[33,39271,73],{"class":39},[33,39273,701],{"class":76},[33,39275,704],{"class":47},[33,39277,32118],{"class":955},[33,39279,73],{"class":39},[33,39281,1820],{"class":76},[33,39283,704],{"class":47},[33,39285,32127],{"class":955},[33,39287,73],{"class":39},[33,39289,712],{"class":76},[33,39291,704],{"class":47},[33,39293,32136],{"class":955},[33,39295,73],{"class":39},[33,39297,701],{"class":76},[33,39299,39300],{"class":47},"),\n",[33,39302,39303],{"class":35,"line":175},[33,39304,39305],{"class":47},"            nn.ReLU(),\n",[33,39307,39308,39310,39312,39314,39316,39318,39320,39322,39324,39326,39328,39330,39332,39334,39336,39338,39340],{"class":35,"line":181},[33,39309,39267],{"class":47},[33,39311,32109],{"class":955},[33,39313,73],{"class":39},[33,39315,1820],{"class":76},[33,39317,704],{"class":47},[33,39319,32118],{"class":955},[33,39321,73],{"class":39},[33,39323,1820],{"class":76},[33,39325,704],{"class":47},[33,39327,32127],{"class":955},[33,39329,73],{"class":39},[33,39331,712],{"class":76},[33,39333,704],{"class":47},[33,39335,32136],{"class":955},[33,39337,73],{"class":39},[33,39339,701],{"class":76},[33,39341,39300],{"class":47},[33,39343,39344],{"class":35,"line":196},[33,39345,39305],{"class":47},[33,39347,39348,39351,39353,39355,39357,39359,39361,39363,39365,39367,39369,39371,39373],{"class":35,"line":213},[33,39349,39350],{"class":47},"            nn.MaxPool2d(",[33,39352,32127],{"class":955},[33,39354,73],{"class":39},[33,39356,707],{"class":76},[33,39358,704],{"class":47},[33,39360,32182],{"class":955},[33,39362,73],{"class":39},[33,39364,707],{"class":76},[33,39366,704],{"class":47},[33,39368,32136],{"class":955},[33,39370,73],{"class":39},[33,39372,766],{"class":76},[33,39374,884],{"class":47},[33,39376,39377],{"class":35,"line":228},[33,39378,39379],{"class":47},"        )\n",[33,39381,39382],{"class":35,"line":1345},[33,39383,39384],{"class":60},"        # 第二层\n",[33,39386,39387,39389,39392,39394],{"class":35,"line":1350},[33,39388,32098],{"class":76},[33,39390,39391],{"class":47},".block2",[33,39393,73],{"class":39},[33,39395,39262],{"class":47},[33,39397,39398,39400,39402,39404,39406,39408,39410,39412,39414,39416,39418,39420,39422,39424,39426,39428,39430],{"class":35,"line":1359},[33,39399,39267],{"class":47},[33,39401,32109],{"class":955},[33,39403,73],{"class":39},[33,39405,1820],{"class":76},[33,39407,704],{"class":47},[33,39409,32118],{"class":955},[33,39411,73],{"class":39},[33,39413,33323],{"class":76},[33,39415,704],{"class":47},[33,39417,32127],{"class":955},[33,39419,73],{"class":39},[33,39421,712],{"class":76},[33,39423,704],{"class":47},[33,39425,32136],{"class":955},[33,39427,73],{"class":39},[33,39429,701],{"class":76},[33,39431,39300],{"class":47},[33,39433,39434],{"class":35,"line":1364},[33,39435,39305],{"class":47},[33,39437,39438,39440,39442,39444,39446,39448,39450,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470],{"class":35,"line":1370},[33,39439,39267],{"class":47},[33,39441,32109],{"class":955},[33,39443,73],{"class":39},[33,39445,33323],{"class":76},[33,39447,704],{"class":47},[33,39449,32118],{"class":955},[33,39451,73],{"class":39},[33,39453,33323],{"class":76},[33,39455,704],{"class":47},[33,39457,32127],{"class":955},[33,39459,73],{"class":39},[33,39461,712],{"class":76},[33,39463,704],{"class":47},[33,39465,32136],{"class":955},[33,39467,73],{"class":39},[33,39469,701],{"class":76},[33,39471,39300],{"class":47},[33,39473,39474],{"class":35,"line":1425},[33,39475,39305],{"class":47},[33,39477,39478,39480,39482,39484,39486,39488,39490,39492,39494,39496,39498,39500,39502],{"class":35,"line":1438},[33,39479,39350],{"class":47},[33,39481,32127],{"class":955},[33,39483,73],{"class":39},[33,39485,707],{"class":76},[33,39487,704],{"class":47},[33,39489,32182],{"class":955},[33,39491,73],{"class":39},[33,39493,707],{"class":76},[33,39495,704],{"class":47},[33,39497,32136],{"class":955},[33,39499,73],{"class":39},[33,39501,766],{"class":76},[33,39503,884],{"class":47},[33,39505,39506],{"class":35,"line":1451},[33,39507,39379],{"class":47},[33,39509,39510],{"class":35,"line":1457},[33,39511,39512],{"class":60},"        # 第三层\n",[33,39514,39515,39517,39520,39522],{"class":35,"line":1466},[33,39516,32098],{"class":76},[33,39518,39519],{"class":47},".block3",[33,39521,73],{"class":39},[33,39523,39262],{"class":47},[33,39525,39526,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554,39556,39558],{"class":35,"line":1471},[33,39527,39267],{"class":47},[33,39529,32109],{"class":955},[33,39531,73],{"class":39},[33,39533,33323],{"class":76},[33,39535,704],{"class":47},[33,39537,32118],{"class":955},[33,39539,73],{"class":39},[33,39541,36123],{"class":76},[33,39543,704],{"class":47},[33,39545,32127],{"class":955},[33,39547,73],{"class":39},[33,39549,712],{"class":76},[33,39551,704],{"class":47},[33,39553,32136],{"class":955},[33,39555,73],{"class":39},[33,39557,701],{"class":76},[33,39559,39300],{"class":47},[33,39561,39562],{"class":35,"line":1477},[33,39563,39305],{"class":47},[33,39565,39566,39568,39570,39572,39574,39576,39578,39580,39582,39584,39586,39588,39590,39592,39594,39596,39598],{"class":35,"line":1504},[33,39567,39267],{"class":47},[33,39569,32109],{"class":955},[33,39571,73],{"class":39},[33,39573,36123],{"class":76},[33,39575,704],{"class":47},[33,39577,32118],{"class":955},[33,39579,73],{"class":39},[33,39581,36123],{"class":76},[33,39583,704],{"class":47},[33,39585,32127],{"class":955},[33,39587,73],{"class":39},[33,39589,712],{"class":76},[33,39591,704],{"class":47},[33,39593,32136],{"class":955},[33,39595,73],{"class":39},[33,39597,701],{"class":76},[33,39599,39300],{"class":47},[33,39601,39602],{"class":35,"line":1509},[33,39603,39305],{"class":47},[33,39605,39606,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638],{"class":35,"line":1525},[33,39607,39267],{"class":47},[33,39609,32109],{"class":955},[33,39611,73],{"class":39},[33,39613,36123],{"class":76},[33,39615,704],{"class":47},[33,39617,32118],{"class":955},[33,39619,73],{"class":39},[33,39621,36123],{"class":76},[33,39623,704],{"class":47},[33,39625,32127],{"class":955},[33,39627,73],{"class":39},[33,39629,712],{"class":76},[33,39631,704],{"class":47},[33,39633,32136],{"class":955},[33,39635,73],{"class":39},[33,39637,701],{"class":76},[33,39639,39300],{"class":47},[33,39641,39642],{"class":35,"line":1535},[33,39643,39305],{"class":47},[33,39645,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670],{"class":35,"line":1540},[33,39647,39350],{"class":47},[33,39649,32127],{"class":955},[33,39651,73],{"class":39},[33,39653,707],{"class":76},[33,39655,704],{"class":47},[33,39657,32182],{"class":955},[33,39659,73],{"class":39},[33,39661,707],{"class":76},[33,39663,704],{"class":47},[33,39665,32136],{"class":955},[33,39667,73],{"class":39},[33,39669,766],{"class":76},[33,39671,884],{"class":47},[33,39673,39674],{"class":35,"line":4027},[33,39675,39379],{"class":47},[33,39677,39678],{"class":35,"line":4032},[33,39679,39680],{"class":60},"        # 第四层\n",[33,39682,39683,39685,39688,39690],{"class":35,"line":9199},[33,39684,32098],{"class":76},[33,39686,39687],{"class":47},".block4",[33,39689,73],{"class":39},[33,39691,39262],{"class":47},[33,39693,39694,39696,39698,39700,39702,39704,39706,39708,39711,39713,39715,39717,39719,39721,39723,39725,39727],{"class":35,"line":9223},[33,39695,39267],{"class":47},[33,39697,32109],{"class":955},[33,39699,73],{"class":39},[33,39701,36123],{"class":76},[33,39703,704],{"class":47},[33,39705,32118],{"class":955},[33,39707,73],{"class":39},[33,39709,39710],{"class":76},"512",[33,39712,704],{"class":47},[33,39714,32127],{"class":955},[33,39716,73],{"class":39},[33,39718,712],{"class":76},[33,39720,704],{"class":47},[33,39722,32136],{"class":955},[33,39724,73],{"class":39},[33,39726,701],{"class":76},[33,39728,39300],{"class":47},[33,39730,39731],{"class":35,"line":9228},[33,39732,39305],{"class":47},[33,39734,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767],{"class":35,"line":9234},[33,39736,39267],{"class":47},[33,39738,32109],{"class":955},[33,39740,73],{"class":39},[33,39742,39710],{"class":76},[33,39744,704],{"class":47},[33,39746,32118],{"class":955},[33,39748,73],{"class":39},[33,39750,39710],{"class":76},[33,39752,704],{"class":47},[33,39754,32127],{"class":955},[33,39756,73],{"class":39},[33,39758,712],{"class":76},[33,39760,704],{"class":47},[33,39762,32136],{"class":955},[33,39764,73],{"class":39},[33,39766,701],{"class":76},[33,39768,39300],{"class":47},[33,39770,39771],{"class":35,"line":9261},[33,39772,39305],{"class":47},[33,39774,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807],{"class":35,"line":9266},[33,39776,39267],{"class":47},[33,39778,32109],{"class":955},[33,39780,73],{"class":39},[33,39782,39710],{"class":76},[33,39784,704],{"class":47},[33,39786,32118],{"class":955},[33,39788,73],{"class":39},[33,39790,39710],{"class":76},[33,39792,704],{"class":47},[33,39794,32127],{"class":955},[33,39796,73],{"class":39},[33,39798,712],{"class":76},[33,39800,704],{"class":47},[33,39802,32136],{"class":955},[33,39804,73],{"class":39},[33,39806,701],{"class":76},[33,39808,39300],{"class":47},[33,39810,39811],{"class":35,"line":9272},[33,39812,39305],{"class":47},[33,39814,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839],{"class":35,"line":9284},[33,39816,39350],{"class":47},[33,39818,32127],{"class":955},[33,39820,73],{"class":39},[33,39822,707],{"class":76},[33,39824,704],{"class":47},[33,39826,32182],{"class":955},[33,39828,73],{"class":39},[33,39830,707],{"class":76},[33,39832,704],{"class":47},[33,39834,32136],{"class":955},[33,39836,73],{"class":39},[33,39838,766],{"class":76},[33,39840,884],{"class":47},[33,39842,39843],{"class":35,"line":9296},[33,39844,39379],{"class":47},[33,39846,39847],{"class":35,"line":9308},[33,39848,39849],{"class":60},"        # 第五层\n",[33,39851,39852,39854,39857,39859],{"class":35,"line":10967},[33,39853,32098],{"class":76},[33,39855,39856],{"class":47},".block5",[33,39858,73],{"class":39},[33,39860,39262],{"class":47},[33,39862,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895],{"class":35,"line":10992},[33,39864,39267],{"class":47},[33,39866,32109],{"class":955},[33,39868,73],{"class":39},[33,39870,39710],{"class":76},[33,39872,704],{"class":47},[33,39874,32118],{"class":955},[33,39876,73],{"class":39},[33,39878,39710],{"class":76},[33,39880,704],{"class":47},[33,39882,32127],{"class":955},[33,39884,73],{"class":39},[33,39886,712],{"class":76},[33,39888,704],{"class":47},[33,39890,32136],{"class":955},[33,39892,73],{"class":39},[33,39894,701],{"class":76},[33,39896,39300],{"class":47},[33,39898,39899],{"class":35,"line":11015},[33,39900,39305],{"class":47},[33,39902,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935],{"class":35,"line":11039},[33,39904,39267],{"class":47},[33,39906,32109],{"class":955},[33,39908,73],{"class":39},[33,39910,39710],{"class":76},[33,39912,704],{"class":47},[33,39914,32118],{"class":955},[33,39916,73],{"class":39},[33,39918,39710],{"class":76},[33,39920,704],{"class":47},[33,39922,32127],{"class":955},[33,39924,73],{"class":39},[33,39926,712],{"class":76},[33,39928,704],{"class":47},[33,39930,32136],{"class":955},[33,39932,73],{"class":39},[33,39934,701],{"class":76},[33,39936,39300],{"class":47},[33,39938,39939],{"class":35,"line":11044},[33,39940,39305],{"class":47},[33,39942,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975],{"class":35,"line":11049},[33,39944,39267],{"class":47},[33,39946,32109],{"class":955},[33,39948,73],{"class":39},[33,39950,39710],{"class":76},[33,39952,704],{"class":47},[33,39954,32118],{"class":955},[33,39956,73],{"class":39},[33,39958,39710],{"class":76},[33,39960,704],{"class":47},[33,39962,32127],{"class":955},[33,39964,73],{"class":39},[33,39966,712],{"class":76},[33,39968,704],{"class":47},[33,39970,32136],{"class":955},[33,39972,73],{"class":39},[33,39974,701],{"class":76},[33,39976,39300],{"class":47},[33,39978,39979],{"class":35,"line":11054},[33,39980,39305],{"class":47},[33,39982,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007],{"class":35,"line":11063},[33,39984,39350],{"class":47},[33,39986,32127],{"class":955},[33,39988,73],{"class":39},[33,39990,707],{"class":76},[33,39992,704],{"class":47},[33,39994,32182],{"class":955},[33,39996,73],{"class":39},[33,39998,707],{"class":76},[33,40000,704],{"class":47},[33,40002,32136],{"class":955},[33,40004,73],{"class":39},[33,40006,766],{"class":76},[33,40008,884],{"class":47},[33,40010,40011],{"class":35,"line":11068},[33,40012,39379],{"class":47},[33,40014,40015],{"class":35,"line":11074},[33,40016,40017],{"class":60},"        # 全连接层\n",[33,40019,40020,40022,40025,40027],{"class":35,"line":11095},[33,40021,32098],{"class":76},[33,40023,40024],{"class":47},".block6",[33,40026,73],{"class":39},[33,40028,39262],{"class":47},[33,40030,40031],{"class":35,"line":11101},[33,40032,40033],{"class":60},"            # 平展操作\n",[33,40035,40036],{"class":35,"line":11115},[33,40037,40038],{"class":60},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[33,40040,40041],{"class":35,"line":11121},[33,40042,40043],{"class":47},"            nn.Flatten(),\n",[33,40045,40046,40049,40051,40053,40055,40057,40059,40061,40063],{"class":35,"line":11148},[33,40047,40048],{"class":47},"            nn.Linear(",[33,40050,732],{"class":76},[33,40052,2057],{"class":39},[33,40054,732],{"class":76},[33,40056,2057],{"class":39},[33,40058,39710],{"class":76},[33,40060,704],{"class":47},[33,40062,36123],{"class":76},[33,40064,39300],{"class":47},[33,40066,40067],{"class":35,"line":11157},[33,40068,39305],{"class":47},[33,40070,40071,40073,40075,40077,40079],{"class":35,"line":11163},[33,40072,40048],{"class":47},[33,40074,36123],{"class":76},[33,40076,704],{"class":47},[33,40078,33323],{"class":76},[33,40080,39300],{"class":47},[33,40082,40083],{"class":35,"line":11171},[33,40084,39305],{"class":47},[33,40086,40087,40089,40091,40093,40095],{"class":35,"line":11176},[33,40088,40048],{"class":47},[33,40090,33323],{"class":76},[33,40092,704],{"class":47},[33,40094,77],{"class":76},[33,40096,884],{"class":47},[33,40098,40099],{"class":35,"line":17855},[33,40100,39379],{"class":47},[33,40102,40103],{"class":35,"line":17861},[33,40104,160],{"emptyLinePlaceholder":159},[33,40106,40107],{"class":35,"line":17884},[33,40108,40109],{"class":60},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,40111,40112],{"class":35,"line":17890},[33,40113,40114],{"class":60},"        # 循环遍历模型\n",[33,40116,40117,40119,40122,40124,40127],{"class":35,"line":17913},[33,40118,1216],{"class":39},[33,40120,40121],{"class":47}," m ",[33,40123,27296],{"class":39},[33,40125,40126],{"class":76}," self",[33,40128,40129],{"class":47},".modules():\n",[33,40131,40132],{"class":35,"line":17927},[33,40133,40134],{"class":60},"            # print(m)\n",[33,40136,40137,40139,40142],{"class":35,"line":17947},[33,40138,1259],{"class":39},[33,40140,40141],{"class":76}," isinstance",[33,40143,40144],{"class":47},"(m,nn.Conv2d):\n",[33,40146,40147],{"class":35,"line":17953},[33,40148,40149],{"class":60},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,40151,40152,40155,40158,40160,40163],{"class":35,"line":17964},[33,40153,40154],{"class":47},"                nn.init.kaiming_normal_(m.weight,",[33,40156,40157],{"class":955},"nonlinearity",[33,40159,73],{"class":39},[33,40161,40162],{"class":119},"'relu'",[33,40164,884],{"class":47},[33,40166,40167],{"class":35,"line":17987},[33,40168,40169],{"class":60},"                # 判断b参数是否存在\n",[33,40171,40172,40175,40178,40181,40184,40187],{"class":35,"line":18009},[33,40173,40174],{"class":39},"                if",[33,40176,40177],{"class":47}," m.bias ",[33,40179,40180],{"class":39},"is",[33,40182,40183],{"class":39}," not",[33,40185,40186],{"class":76}," None",[33,40188,5141],{"class":47},[33,40190,40191],{"class":35,"line":18014},[33,40192,40193],{"class":60},"                    # 如果参数不存在的化初始化b=0\n",[33,40195,40196,40199,40201],{"class":35,"line":18020},[33,40197,40198],{"class":47},"                    nn.init.constant_(m.bias,",[33,40200,766],{"class":76},[33,40202,884],{"class":47},[33,40204,40205],{"class":35,"line":18034},[33,40206,40207],{"class":60},"            # 全连接层初始化\n",[33,40209,40210,40213,40215],{"class":35,"line":18047},[33,40211,40212],{"class":39},"            elif",[33,40214,40141],{"class":76},[33,40216,40217],{"class":47},"(m,nn.Linear):\n",[33,40219,40220],{"class":35,"line":18052},[33,40221,40222],{"class":60},"                # 这个初始化方法是利用的是正太分布的方式\n",[33,40224,40225],{"class":35,"line":18066},[33,40226,40227],{"class":60},"                # 均值为0，方差为0.01\n",[33,40229,40230,40233,40235,40237,40240],{"class":35,"line":18071},[33,40231,40232],{"class":47},"                nn.init.normal_(m.weight,",[33,40234,766],{"class":76},[33,40236,704],{"class":47},[33,40238,40239],{"class":76},"0.01",[33,40241,884],{"class":47},[33,40243,40244],{"class":35,"line":18077},[33,40245,40246],{"class":60},"                # 初始化b参数\n",[33,40248,40249,40251,40253,40255,40257,40259],{"class":35,"line":18082},[33,40250,40174],{"class":39},[33,40252,40177],{"class":47},[33,40254,40180],{"class":39},[33,40256,40183],{"class":39},[33,40258,40186],{"class":76},[33,40260,5141],{"class":47},[33,40262,40263,40265,40267],{"class":35,"line":18096},[33,40264,40198],{"class":47},[33,40266,766],{"class":76},[33,40268,884],{"class":47},[33,40270,40271],{"class":35,"line":18101},[33,40272,160],{"emptyLinePlaceholder":159},[33,40274,40275],{"class":35,"line":18106},[33,40276,36418],{"class":60},[33,40278,40279,40281,40283],{"class":35,"line":18120},[33,40280,32054],{"class":39},[33,40282,32346],{"class":43},[33,40284,32349],{"class":47},[33,40286,40287,40289,40291,40293],{"class":35,"line":18132},[33,40288,32354],{"class":47},[33,40290,73],{"class":39},[33,40292,32076],{"class":76},[33,40294,40295],{"class":47},".block1(x)\n",[33,40297,40298,40300,40302,40304],{"class":35,"line":18137},[33,40299,32354],{"class":47},[33,40301,73],{"class":39},[33,40303,32076],{"class":76},[33,40305,40306],{"class":47},".block2(x)\n",[33,40308,40309,40311,40313,40315],{"class":35,"line":18150},[33,40310,32354],{"class":47},[33,40312,73],{"class":39},[33,40314,32076],{"class":76},[33,40316,40317],{"class":47},".block3(x)\n",[33,40319,40320,40322,40324,40326],{"class":35,"line":18155},[33,40321,32354],{"class":47},[33,40323,73],{"class":39},[33,40325,32076],{"class":76},[33,40327,40328],{"class":47},".block4(x)\n",[33,40330,40331,40333,40335,40337],{"class":35,"line":18160},[33,40332,32354],{"class":47},[33,40334,73],{"class":39},[33,40336,32076],{"class":76},[33,40338,40339],{"class":47},".block5(x)\n",[33,40341,40342,40344,40346,40348],{"class":35,"line":18165},[33,40343,32354],{"class":47},[33,40345,73],{"class":39},[33,40347,32076],{"class":76},[33,40349,40350],{"class":47},".block6(x)\n",[33,40352,40353,40355],{"class":35,"line":18178},[33,40354,16003],{"class":39},[33,40356,32462],{"class":47},[33,40358,40359],{"class":35,"line":18183},[33,40360,160],{"emptyLinePlaceholder":159},[33,40362,40363],{"class":35,"line":33886},[33,40364,40365],{"class":60},"# 验证模型\n",[33,40367,40368,40370,40372,40374,40377],{"class":35,"line":33892},[33,40369,2987],{"class":39},[33,40371,32473],{"class":76},[33,40373,4359],{"class":39},[33,40375,40376],{"class":119},"'__main__'",[33,40378,5141],{"class":47},[33,40380,40381,40383,40385,40387,40389,40391,40393,40395,40397],{"class":35,"line":33898},[33,40382,32490],{"class":47},[33,40384,73],{"class":39},[33,40386,31704],{"class":47},[33,40388,32497],{"class":119},[33,40390,3145],{"class":39},[33,40392,32502],{"class":47},[33,40394,3142],{"class":39},[33,40396,31729],{"class":119},[33,40398,884],{"class":47},[33,40400,40401,40403],{"class":35,"line":33904},[33,40402,32552],{"class":76},[33,40404,31738],{"class":47},[33,40406,40407,40409,40411],{"class":35,"line":33910},[33,40408,32542],{"class":47},[33,40410,73],{"class":39},[33,40412,40413],{"class":47},"VGG16().to(device)\n",[33,40415,40416,40418,40420,40422,40424,40426,40428,40430],{"class":35,"line":33921},[33,40417,32552],{"class":76},[33,40419,32555],{"class":47},[33,40421,701],{"class":76},[33,40423,704],{"class":47},[33,40425,32754],{"class":76},[33,40427,704],{"class":47},[33,40429,32754],{"class":76},[33,40431,32568],{"class":47},[574,40433,40434],{"start":51},[564,40435,40436],{},"训练代码",[14,40438,40439],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,40441,40442],{},"解决方式:",[14,40444,40445],{},"①权重初始化",[23,40447,40449],{"className":31631,"code":40448,"language":31633,"meta":28,"style":28},"# 权重初始化,保证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",[30,40450,40451,40456,40461,40473,40478,40486,40491,40504,40509,40523,40528,40537,40542,40551,40556,40561,40574,40579,40593],{"__ignoreMap":28},[33,40452,40453],{"class":35,"line":36},[33,40454,40455],{"class":60},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[33,40457,40458],{"class":35,"line":51},[33,40459,40460],{"class":60},"# 循环遍历模型\n",[33,40462,40463,40465,40467,40469,40471],{"class":35,"line":57},[33,40464,4435],{"class":39},[33,40466,40121],{"class":47},[33,40468,27296],{"class":39},[33,40470,40126],{"class":76},[33,40472,40129],{"class":47},[33,40474,40475],{"class":35,"line":64},[33,40476,40477],{"class":60},"    # print(m)\n",[33,40479,40480,40482,40484],{"class":35,"line":83},[33,40481,4509],{"class":39},[33,40483,40141],{"class":76},[33,40485,40144],{"class":47},[33,40487,40488],{"class":35,"line":89},[33,40489,40490],{"class":60},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[33,40492,40493,40496,40498,40500,40502],{"class":35,"line":98},[33,40494,40495],{"class":47},"        nn.init.kaiming_normal_(m.weight,",[33,40497,40157],{"class":955},[33,40499,73],{"class":39},[33,40501,40162],{"class":119},[33,40503,884],{"class":47},[33,40505,40506],{"class":35,"line":110},[33,40507,40508],{"class":60},"        # 判断b参数是否存在\n",[33,40510,40511,40513,40515,40517,40519,40521],{"class":35,"line":134},[33,40512,3915],{"class":39},[33,40514,40177],{"class":47},[33,40516,40180],{"class":39},[33,40518,40183],{"class":39},[33,40520,40186],{"class":76},[33,40522,5141],{"class":47},[33,40524,40525],{"class":35,"line":156},[33,40526,40527],{"class":60},"            # 如果参数不存在的化初始化b=0\n",[33,40529,40530,40533,40535],{"class":35,"line":163},[33,40531,40532],{"class":47},"            nn.init.constant_(m.bias,",[33,40534,766],{"class":76},[33,40536,884],{"class":47},[33,40538,40539],{"class":35,"line":169},[33,40540,40541],{"class":60},"    # 全连接层初始化\n",[33,40543,40544,40547,40549],{"class":35,"line":175},[33,40545,40546],{"class":39},"    elif",[33,40548,40141],{"class":76},[33,40550,40217],{"class":47},[33,40552,40553],{"class":35,"line":181},[33,40554,40555],{"class":60},"        # 这个初始化方法是利用的是正太分布的方式\n",[33,40557,40558],{"class":35,"line":196},[33,40559,40560],{"class":60},"        # 均值为0，方差为0.01\n",[33,40562,40563,40566,40568,40570,40572],{"class":35,"line":213},[33,40564,40565],{"class":47},"        nn.init.normal_(m.weight,",[33,40567,766],{"class":76},[33,40569,704],{"class":47},[33,40571,40239],{"class":76},[33,40573,884],{"class":47},[33,40575,40576],{"class":35,"line":228},[33,40577,40578],{"class":60},"        # 初始化b参数\n",[33,40580,40581,40583,40585,40587,40589,40591],{"class":35,"line":1345},[33,40582,3915],{"class":39},[33,40584,40177],{"class":47},[33,40586,40180],{"class":39},[33,40588,40183],{"class":39},[33,40590,40186],{"class":76},[33,40592,5141],{"class":47},[33,40594,40595,40597,40599],{"class":35,"line":1350},[33,40596,40532],{"class":47},[33,40598,766],{"class":76},[33,40600,884],{"class":47},[14,40602,40603],{},"②尽可能地增加批次",[14,40605,40606],{},"训练完整代码：",[23,40608,40609],{"className":31631,"code":39152,"language":31633,"meta":28,"style":28},[30,40610,40611,40617,40627,40637,40647,40651,40667,40675,40693,40697,40701,40711,40747,40751,40787,40791,40819,40823,40827,40837,40873,40877,40913,40917,40945,40949,40953,40963,40999,41003,41039,41043,41079,41083,41111,41115,41119,41129,41165,41169,41205,41209,41245,41249,41277,41281,41285,41295,41331,41335,41371,41375,41411,41415,41443,41447,41451,41461,41465,41469,41473,41493,41497,41509,41513,41525,41529,41533,41537,41541,41553,41557,41565,41569,41581,41585,41599,41603,41611,41615,41623,41627,41631,41643,41647,41661,41669,41673,41677,41685,41695,41705,41715,41725,41735,41745,41751,41755,41759,41771,41791,41797,41805],{"__ignoreMap":28},[33,40612,40613,40615],{"class":35,"line":36},[33,40614,31645],{"class":39},[33,40616,31648],{"class":47},[33,40618,40619,40621,40623,40625],{"class":35,"line":51},[33,40620,31990],{"class":39},[33,40622,39167],{"class":47},[33,40624,31645],{"class":39},[33,40626,39172],{"class":47},[33,40628,40629,40631,40633,40635],{"class":35,"line":57},[33,40630,31990],{"class":39},[33,40632,31993],{"class":47},[33,40634,31645],{"class":39},[33,40636,31998],{"class":47},[33,40638,40639,40641,40643,40645],{"class":35,"line":64},[33,40640,31990],{"class":39},[33,40642,32010],{"class":47},[33,40644,31645],{"class":39},[33,40646,32015],{"class":47},[33,40648,40649],{"class":35,"line":83},[33,40650,160],{"emptyLinePlaceholder":159},[33,40652,40653,40655,40657,40659,40661,40663,40665],{"class":35,"line":89},[33,40654,15945],{"class":39},[33,40656,39203],{"class":43},[33,40658,345],{"class":47},[33,40660,32031],{"class":43},[33,40662,2158],{"class":47},[33,40664,32036],{"class":43},[33,40666,32039],{"class":47},[33,40668,40669,40671,40673],{"class":35,"line":98},[33,40670,32054],{"class":39},[33,40672,32057],{"class":76},[33,40674,32060],{"class":47},[33,40676,40677,40679,40681,40683,40685,40687,40689,40691],{"class":35,"line":110},[33,40678,32070],{"class":76},[33,40680,345],{"class":47},[33,40682,39230],{"class":76},[33,40684,13686],{"class":47},[33,40686,32076],{"class":76},[33,40688,32079],{"class":47},[33,40690,32082],{"class":76},[33,40692,48],{"class":47},[33,40694,40695],{"class":35,"line":134},[33,40696,39245],{"class":60},[33,40698,40699],{"class":35,"line":156},[33,40700,39250],{"class":60},[33,40702,40703,40705,40707,40709],{"class":35,"line":163},[33,40704,32098],{"class":76},[33,40706,39257],{"class":47},[33,40708,73],{"class":39},[33,40710,39262],{"class":47},[33,40712,40713,40715,40717,40719,40721,40723,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745],{"class":35,"line":169},[33,40714,39267],{"class":47},[33,40716,32109],{"class":955},[33,40718,73],{"class":39},[33,40720,701],{"class":76},[33,40722,704],{"class":47},[33,40724,32118],{"class":955},[33,40726,73],{"class":39},[33,40728,1820],{"class":76},[33,40730,704],{"class":47},[33,40732,32127],{"class":955},[33,40734,73],{"class":39},[33,40736,712],{"class":76},[33,40738,704],{"class":47},[33,40740,32136],{"class":955},[33,40742,73],{"class":39},[33,40744,701],{"class":76},[33,40746,39300],{"class":47},[33,40748,40749],{"class":35,"line":175},[33,40750,39305],{"class":47},[33,40752,40753,40755,40757,40759,40761,40763,40765,40767,40769,40771,40773,40775,40777,40779,40781,40783,40785],{"class":35,"line":181},[33,40754,39267],{"class":47},[33,40756,32109],{"class":955},[33,40758,73],{"class":39},[33,40760,1820],{"class":76},[33,40762,704],{"class":47},[33,40764,32118],{"class":955},[33,40766,73],{"class":39},[33,40768,1820],{"class":76},[33,40770,704],{"class":47},[33,40772,32127],{"class":955},[33,40774,73],{"class":39},[33,40776,712],{"class":76},[33,40778,704],{"class":47},[33,40780,32136],{"class":955},[33,40782,73],{"class":39},[33,40784,701],{"class":76},[33,40786,39300],{"class":47},[33,40788,40789],{"class":35,"line":196},[33,40790,39305],{"class":47},[33,40792,40793,40795,40797,40799,40801,40803,40805,40807,40809,40811,40813,40815,40817],{"class":35,"line":213},[33,40794,39350],{"class":47},[33,40796,32127],{"class":955},[33,40798,73],{"class":39},[33,40800,707],{"class":76},[33,40802,704],{"class":47},[33,40804,32182],{"class":955},[33,40806,73],{"class":39},[33,40808,707],{"class":76},[33,40810,704],{"class":47},[33,40812,32136],{"class":955},[33,40814,73],{"class":39},[33,40816,766],{"class":76},[33,40818,884],{"class":47},[33,40820,40821],{"class":35,"line":228},[33,40822,39379],{"class":47},[33,40824,40825],{"class":35,"line":1345},[33,40826,39384],{"class":60},[33,40828,40829,40831,40833,40835],{"class":35,"line":1350},[33,40830,32098],{"class":76},[33,40832,39391],{"class":47},[33,40834,73],{"class":39},[33,40836,39262],{"class":47},[33,40838,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865,40867,40869,40871],{"class":35,"line":1359},[33,40840,39267],{"class":47},[33,40842,32109],{"class":955},[33,40844,73],{"class":39},[33,40846,1820],{"class":76},[33,40848,704],{"class":47},[33,40850,32118],{"class":955},[33,40852,73],{"class":39},[33,40854,33323],{"class":76},[33,40856,704],{"class":47},[33,40858,32127],{"class":955},[33,40860,73],{"class":39},[33,40862,712],{"class":76},[33,40864,704],{"class":47},[33,40866,32136],{"class":955},[33,40868,73],{"class":39},[33,40870,701],{"class":76},[33,40872,39300],{"class":47},[33,40874,40875],{"class":35,"line":1364},[33,40876,39305],{"class":47},[33,40878,40879,40881,40883,40885,40887,40889,40891,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911],{"class":35,"line":1370},[33,40880,39267],{"class":47},[33,40882,32109],{"class":955},[33,40884,73],{"class":39},[33,40886,33323],{"class":76},[33,40888,704],{"class":47},[33,40890,32118],{"class":955},[33,40892,73],{"class":39},[33,40894,33323],{"class":76},[33,40896,704],{"class":47},[33,40898,32127],{"class":955},[33,40900,73],{"class":39},[33,40902,712],{"class":76},[33,40904,704],{"class":47},[33,40906,32136],{"class":955},[33,40908,73],{"class":39},[33,40910,701],{"class":76},[33,40912,39300],{"class":47},[33,40914,40915],{"class":35,"line":1425},[33,40916,39305],{"class":47},[33,40918,40919,40921,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943],{"class":35,"line":1438},[33,40920,39350],{"class":47},[33,40922,32127],{"class":955},[33,40924,73],{"class":39},[33,40926,707],{"class":76},[33,40928,704],{"class":47},[33,40930,32182],{"class":955},[33,40932,73],{"class":39},[33,40934,707],{"class":76},[33,40936,704],{"class":47},[33,40938,32136],{"class":955},[33,40940,73],{"class":39},[33,40942,766],{"class":76},[33,40944,884],{"class":47},[33,40946,40947],{"class":35,"line":1451},[33,40948,39379],{"class":47},[33,40950,40951],{"class":35,"line":1457},[33,40952,39512],{"class":60},[33,40954,40955,40957,40959,40961],{"class":35,"line":1466},[33,40956,32098],{"class":76},[33,40958,39519],{"class":47},[33,40960,73],{"class":39},[33,40962,39262],{"class":47},[33,40964,40965,40967,40969,40971,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995,40997],{"class":35,"line":1471},[33,40966,39267],{"class":47},[33,40968,32109],{"class":955},[33,40970,73],{"class":39},[33,40972,33323],{"class":76},[33,40974,704],{"class":47},[33,40976,32118],{"class":955},[33,40978,73],{"class":39},[33,40980,36123],{"class":76},[33,40982,704],{"class":47},[33,40984,32127],{"class":955},[33,40986,73],{"class":39},[33,40988,712],{"class":76},[33,40990,704],{"class":47},[33,40992,32136],{"class":955},[33,40994,73],{"class":39},[33,40996,701],{"class":76},[33,40998,39300],{"class":47},[33,41000,41001],{"class":35,"line":1477},[33,41002,39305],{"class":47},[33,41004,41005,41007,41009,41011,41013,41015,41017,41019,41021,41023,41025,41027,41029,41031,41033,41035,41037],{"class":35,"line":1504},[33,41006,39267],{"class":47},[33,41008,32109],{"class":955},[33,41010,73],{"class":39},[33,41012,36123],{"class":76},[33,41014,704],{"class":47},[33,41016,32118],{"class":955},[33,41018,73],{"class":39},[33,41020,36123],{"class":76},[33,41022,704],{"class":47},[33,41024,32127],{"class":955},[33,41026,73],{"class":39},[33,41028,712],{"class":76},[33,41030,704],{"class":47},[33,41032,32136],{"class":955},[33,41034,73],{"class":39},[33,41036,701],{"class":76},[33,41038,39300],{"class":47},[33,41040,41041],{"class":35,"line":1509},[33,41042,39305],{"class":47},[33,41044,41045,41047,41049,41051,41053,41055,41057,41059,41061,41063,41065,41067,41069,41071,41073,41075,41077],{"class":35,"line":1525},[33,41046,39267],{"class":47},[33,41048,32109],{"class":955},[33,41050,73],{"class":39},[33,41052,36123],{"class":76},[33,41054,704],{"class":47},[33,41056,32118],{"class":955},[33,41058,73],{"class":39},[33,41060,36123],{"class":76},[33,41062,704],{"class":47},[33,41064,32127],{"class":955},[33,41066,73],{"class":39},[33,41068,712],{"class":76},[33,41070,704],{"class":47},[33,41072,32136],{"class":955},[33,41074,73],{"class":39},[33,41076,701],{"class":76},[33,41078,39300],{"class":47},[33,41080,41081],{"class":35,"line":1535},[33,41082,39305],{"class":47},[33,41084,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109],{"class":35,"line":1540},[33,41086,39350],{"class":47},[33,41088,32127],{"class":955},[33,41090,73],{"class":39},[33,41092,707],{"class":76},[33,41094,704],{"class":47},[33,41096,32182],{"class":955},[33,41098,73],{"class":39},[33,41100,707],{"class":76},[33,41102,704],{"class":47},[33,41104,32136],{"class":955},[33,41106,73],{"class":39},[33,41108,766],{"class":76},[33,41110,884],{"class":47},[33,41112,41113],{"class":35,"line":4027},[33,41114,39379],{"class":47},[33,41116,41117],{"class":35,"line":4032},[33,41118,39680],{"class":60},[33,41120,41121,41123,41125,41127],{"class":35,"line":9199},[33,41122,32098],{"class":76},[33,41124,39687],{"class":47},[33,41126,73],{"class":39},[33,41128,39262],{"class":47},[33,41130,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161,41163],{"class":35,"line":9223},[33,41132,39267],{"class":47},[33,41134,32109],{"class":955},[33,41136,73],{"class":39},[33,41138,36123],{"class":76},[33,41140,704],{"class":47},[33,41142,32118],{"class":955},[33,41144,73],{"class":39},[33,41146,39710],{"class":76},[33,41148,704],{"class":47},[33,41150,32127],{"class":955},[33,41152,73],{"class":39},[33,41154,712],{"class":76},[33,41156,704],{"class":47},[33,41158,32136],{"class":955},[33,41160,73],{"class":39},[33,41162,701],{"class":76},[33,41164,39300],{"class":47},[33,41166,41167],{"class":35,"line":9228},[33,41168,39305],{"class":47},[33,41170,41171,41173,41175,41177,41179,41181,41183,41185,41187,41189,41191,41193,41195,41197,41199,41201,41203],{"class":35,"line":9234},[33,41172,39267],{"class":47},[33,41174,32109],{"class":955},[33,41176,73],{"class":39},[33,41178,39710],{"class":76},[33,41180,704],{"class":47},[33,41182,32118],{"class":955},[33,41184,73],{"class":39},[33,41186,39710],{"class":76},[33,41188,704],{"class":47},[33,41190,32127],{"class":955},[33,41192,73],{"class":39},[33,41194,712],{"class":76},[33,41196,704],{"class":47},[33,41198,32136],{"class":955},[33,41200,73],{"class":39},[33,41202,701],{"class":76},[33,41204,39300],{"class":47},[33,41206,41207],{"class":35,"line":9261},[33,41208,39305],{"class":47},[33,41210,41211,41213,41215,41217,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241,41243],{"class":35,"line":9266},[33,41212,39267],{"class":47},[33,41214,32109],{"class":955},[33,41216,73],{"class":39},[33,41218,39710],{"class":76},[33,41220,704],{"class":47},[33,41222,32118],{"class":955},[33,41224,73],{"class":39},[33,41226,39710],{"class":76},[33,41228,704],{"class":47},[33,41230,32127],{"class":955},[33,41232,73],{"class":39},[33,41234,712],{"class":76},[33,41236,704],{"class":47},[33,41238,32136],{"class":955},[33,41240,73],{"class":39},[33,41242,701],{"class":76},[33,41244,39300],{"class":47},[33,41246,41247],{"class":35,"line":9272},[33,41248,39305],{"class":47},[33,41250,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275],{"class":35,"line":9284},[33,41252,39350],{"class":47},[33,41254,32127],{"class":955},[33,41256,73],{"class":39},[33,41258,707],{"class":76},[33,41260,704],{"class":47},[33,41262,32182],{"class":955},[33,41264,73],{"class":39},[33,41266,707],{"class":76},[33,41268,704],{"class":47},[33,41270,32136],{"class":955},[33,41272,73],{"class":39},[33,41274,766],{"class":76},[33,41276,884],{"class":47},[33,41278,41279],{"class":35,"line":9296},[33,41280,39379],{"class":47},[33,41282,41283],{"class":35,"line":9308},[33,41284,39849],{"class":60},[33,41286,41287,41289,41291,41293],{"class":35,"line":10967},[33,41288,32098],{"class":76},[33,41290,39856],{"class":47},[33,41292,73],{"class":39},[33,41294,39262],{"class":47},[33,41296,41297,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327,41329],{"class":35,"line":10992},[33,41298,39267],{"class":47},[33,41300,32109],{"class":955},[33,41302,73],{"class":39},[33,41304,39710],{"class":76},[33,41306,704],{"class":47},[33,41308,32118],{"class":955},[33,41310,73],{"class":39},[33,41312,39710],{"class":76},[33,41314,704],{"class":47},[33,41316,32127],{"class":955},[33,41318,73],{"class":39},[33,41320,712],{"class":76},[33,41322,704],{"class":47},[33,41324,32136],{"class":955},[33,41326,73],{"class":39},[33,41328,701],{"class":76},[33,41330,39300],{"class":47},[33,41332,41333],{"class":35,"line":11015},[33,41334,39305],{"class":47},[33,41336,41337,41339,41341,41343,41345,41347,41349,41351,41353,41355,41357,41359,41361,41363,41365,41367,41369],{"class":35,"line":11039},[33,41338,39267],{"class":47},[33,41340,32109],{"class":955},[33,41342,73],{"class":39},[33,41344,39710],{"class":76},[33,41346,704],{"class":47},[33,41348,32118],{"class":955},[33,41350,73],{"class":39},[33,41352,39710],{"class":76},[33,41354,704],{"class":47},[33,41356,32127],{"class":955},[33,41358,73],{"class":39},[33,41360,712],{"class":76},[33,41362,704],{"class":47},[33,41364,32136],{"class":955},[33,41366,73],{"class":39},[33,41368,701],{"class":76},[33,41370,39300],{"class":47},[33,41372,41373],{"class":35,"line":11044},[33,41374,39305],{"class":47},[33,41376,41377,41379,41381,41383,41385,41387,41389,41391,41393,41395,41397,41399,41401,41403,41405,41407,41409],{"class":35,"line":11049},[33,41378,39267],{"class":47},[33,41380,32109],{"class":955},[33,41382,73],{"class":39},[33,41384,39710],{"class":76},[33,41386,704],{"class":47},[33,41388,32118],{"class":955},[33,41390,73],{"class":39},[33,41392,39710],{"class":76},[33,41394,704],{"class":47},[33,41396,32127],{"class":955},[33,41398,73],{"class":39},[33,41400,712],{"class":76},[33,41402,704],{"class":47},[33,41404,32136],{"class":955},[33,41406,73],{"class":39},[33,41408,701],{"class":76},[33,41410,39300],{"class":47},[33,41412,41413],{"class":35,"line":11054},[33,41414,39305],{"class":47},[33,41416,41417,41419,41421,41423,41425,41427,41429,41431,41433,41435,41437,41439,41441],{"class":35,"line":11063},[33,41418,39350],{"class":47},[33,41420,32127],{"class":955},[33,41422,73],{"class":39},[33,41424,707],{"class":76},[33,41426,704],{"class":47},[33,41428,32182],{"class":955},[33,41430,73],{"class":39},[33,41432,707],{"class":76},[33,41434,704],{"class":47},[33,41436,32136],{"class":955},[33,41438,73],{"class":39},[33,41440,766],{"class":76},[33,41442,884],{"class":47},[33,41444,41445],{"class":35,"line":11068},[33,41446,39379],{"class":47},[33,41448,41449],{"class":35,"line":11074},[33,41450,40017],{"class":60},[33,41452,41453,41455,41457,41459],{"class":35,"line":11095},[33,41454,32098],{"class":76},[33,41456,40024],{"class":47},[33,41458,73],{"class":39},[33,41460,39262],{"class":47},[33,41462,41463],{"class":35,"line":11101},[33,41464,40033],{"class":60},[33,41466,41467],{"class":35,"line":11115},[33,41468,40038],{"class":60},[33,41470,41471],{"class":35,"line":11121},[33,41472,40043],{"class":47},[33,41474,41475,41477,41479,41481,41483,41485,41487,41489,41491],{"class":35,"line":11148},[33,41476,40048],{"class":47},[33,41478,732],{"class":76},[33,41480,2057],{"class":39},[33,41482,732],{"class":76},[33,41484,2057],{"class":39},[33,41486,39710],{"class":76},[33,41488,704],{"class":47},[33,41490,36123],{"class":76},[33,41492,39300],{"class":47},[33,41494,41495],{"class":35,"line":11157},[33,41496,39305],{"class":47},[33,41498,41499,41501,41503,41505,41507],{"class":35,"line":11163},[33,41500,40048],{"class":47},[33,41502,36123],{"class":76},[33,41504,704],{"class":47},[33,41506,33323],{"class":76},[33,41508,39300],{"class":47},[33,41510,41511],{"class":35,"line":11171},[33,41512,39305],{"class":47},[33,41514,41515,41517,41519,41521,41523],{"class":35,"line":11176},[33,41516,40048],{"class":47},[33,41518,33323],{"class":76},[33,41520,704],{"class":47},[33,41522,77],{"class":76},[33,41524,884],{"class":47},[33,41526,41527],{"class":35,"line":17855},[33,41528,39379],{"class":47},[33,41530,41531],{"class":35,"line":17861},[33,41532,160],{"emptyLinePlaceholder":159},[33,41534,41535],{"class":35,"line":17884},[33,41536,40109],{"class":60},[33,41538,41539],{"class":35,"line":17890},[33,41540,40114],{"class":60},[33,41542,41543,41545,41547,41549,41551],{"class":35,"line":17913},[33,41544,1216],{"class":39},[33,41546,40121],{"class":47},[33,41548,27296],{"class":39},[33,41550,40126],{"class":76},[33,41552,40129],{"class":47},[33,41554,41555],{"class":35,"line":17927},[33,41556,40134],{"class":60},[33,41558,41559,41561,41563],{"class":35,"line":17947},[33,41560,1259],{"class":39},[33,41562,40141],{"class":76},[33,41564,40144],{"class":47},[33,41566,41567],{"class":35,"line":17953},[33,41568,40149],{"class":60},[33,41570,41571,41573,41575,41577,41579],{"class":35,"line":17964},[33,41572,40154],{"class":47},[33,41574,40157],{"class":955},[33,41576,73],{"class":39},[33,41578,40162],{"class":119},[33,41580,884],{"class":47},[33,41582,41583],{"class":35,"line":17987},[33,41584,40169],{"class":60},[33,41586,41587,41589,41591,41593,41595,41597],{"class":35,"line":18009},[33,41588,40174],{"class":39},[33,41590,40177],{"class":47},[33,41592,40180],{"class":39},[33,41594,40183],{"class":39},[33,41596,40186],{"class":76},[33,41598,5141],{"class":47},[33,41600,41601],{"class":35,"line":18014},[33,41602,40193],{"class":60},[33,41604,41605,41607,41609],{"class":35,"line":18020},[33,41606,40198],{"class":47},[33,41608,766],{"class":76},[33,41610,884],{"class":47},[33,41612,41613],{"class":35,"line":18034},[33,41614,40207],{"class":60},[33,41616,41617,41619,41621],{"class":35,"line":18047},[33,41618,40212],{"class":39},[33,41620,40141],{"class":76},[33,41622,40217],{"class":47},[33,41624,41625],{"class":35,"line":18052},[33,41626,40222],{"class":60},[33,41628,41629],{"class":35,"line":18066},[33,41630,40227],{"class":60},[33,41632,41633,41635,41637,41639,41641],{"class":35,"line":18071},[33,41634,40232],{"class":47},[33,41636,766],{"class":76},[33,41638,704],{"class":47},[33,41640,40239],{"class":76},[33,41642,884],{"class":47},[33,41644,41645],{"class":35,"line":18077},[33,41646,40246],{"class":60},[33,41648,41649,41651,41653,41655,41657,41659],{"class":35,"line":18082},[33,41650,40174],{"class":39},[33,41652,40177],{"class":47},[33,41654,40180],{"class":39},[33,41656,40183],{"class":39},[33,41658,40186],{"class":76},[33,41660,5141],{"class":47},[33,41662,41663,41665,41667],{"class":35,"line":18096},[33,41664,40198],{"class":47},[33,41666,766],{"class":76},[33,41668,884],{"class":47},[33,41670,41671],{"class":35,"line":18101},[33,41672,160],{"emptyLinePlaceholder":159},[33,41674,41675],{"class":35,"line":18106},[33,41676,36418],{"class":60},[33,41678,41679,41681,41683],{"class":35,"line":18120},[33,41680,32054],{"class":39},[33,41682,32346],{"class":43},[33,41684,32349],{"class":47},[33,41686,41687,41689,41691,41693],{"class":35,"line":18132},[33,41688,32354],{"class":47},[33,41690,73],{"class":39},[33,41692,32076],{"class":76},[33,41694,40295],{"class":47},[33,41696,41697,41699,41701,41703],{"class":35,"line":18137},[33,41698,32354],{"class":47},[33,41700,73],{"class":39},[33,41702,32076],{"class":76},[33,41704,40306],{"class":47},[33,41706,41707,41709,41711,41713],{"class":35,"line":18150},[33,41708,32354],{"class":47},[33,41710,73],{"class":39},[33,41712,32076],{"class":76},[33,41714,40317],{"class":47},[33,41716,41717,41719,41721,41723],{"class":35,"line":18155},[33,41718,32354],{"class":47},[33,41720,73],{"class":39},[33,41722,32076],{"class":76},[33,41724,40328],{"class":47},[33,41726,41727,41729,41731,41733],{"class":35,"line":18160},[33,41728,32354],{"class":47},[33,41730,73],{"class":39},[33,41732,32076],{"class":76},[33,41734,40339],{"class":47},[33,41736,41737,41739,41741,41743],{"class":35,"line":18165},[33,41738,32354],{"class":47},[33,41740,73],{"class":39},[33,41742,32076],{"class":76},[33,41744,40350],{"class":47},[33,41746,41747,41749],{"class":35,"line":18178},[33,41748,16003],{"class":39},[33,41750,32462],{"class":47},[33,41752,41753],{"class":35,"line":18183},[33,41754,160],{"emptyLinePlaceholder":159},[33,41756,41757],{"class":35,"line":33886},[33,41758,40365],{"class":60},[33,41760,41761,41763,41765,41767,41769],{"class":35,"line":33892},[33,41762,2987],{"class":39},[33,41764,32473],{"class":76},[33,41766,4359],{"class":39},[33,41768,40376],{"class":119},[33,41770,5141],{"class":47},[33,41772,41773,41775,41777,41779,41781,41783,41785,41787,41789],{"class":35,"line":33898},[33,41774,32490],{"class":47},[33,41776,73],{"class":39},[33,41778,31704],{"class":47},[33,41780,32497],{"class":119},[33,41782,3145],{"class":39},[33,41784,32502],{"class":47},[33,41786,3142],{"class":39},[33,41788,31729],{"class":119},[33,41790,884],{"class":47},[33,41792,41793,41795],{"class":35,"line":33904},[33,41794,32552],{"class":76},[33,41796,31738],{"class":47},[33,41798,41799,41801,41803],{"class":35,"line":33910},[33,41800,32542],{"class":47},[33,41802,73],{"class":39},[33,41804,40413],{"class":47},[33,41806,41807,41809,41811,41813,41815,41817,41819,41821],{"class":35,"line":33921},[33,41808,32552],{"class":76},[33,41810,32555],{"class":47},[33,41812,701],{"class":76},[33,41814,704],{"class":47},[33,41816,32754],{"class":76},[33,41818,704],{"class":47},[33,41820,32754],{"class":76},[33,41822,32568],{"class":47},[574,41824,41825],{"start":57},[564,41826,41827],{},"测试代码",[23,41829,41831],{"className":31631,"code":41830,"language":31633,"meta":28,"style":28},"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",[30,41832,41833,41839,41849,41859,41863,41873,41884,41888,41892,41896,41904,41920,41930,41946,41956,41970,41974,41984,41994,42004,42010,42014,42018,42026,42030,42046,42054,42058,42062,42070,42078,42082,42086,42090,42094,42100,42104,42114,42122,42130,42134,42138,42142,42150,42154,42170,42174,42178,42182,42194,42198,42210,42214,42218,42230,42234,42244,42248,42252,42264,42268,42277,42281,42285,42293,42297,42305,42309,42313,42317,42321,42325,42341,42349,42353,42357,42405,42411,42415,42425,42433,42441,42445,42449,42453,42457,42465,42469,42485,42489,42497,42505],{"__ignoreMap":28},[33,41834,41835,41837],{"class":35,"line":36},[33,41836,31645],{"class":39},[33,41838,31648],{"class":47},[33,41840,41841,41843,41845,41847],{"class":35,"line":51},[33,41842,31645],{"class":39},[33,41844,32668],{"class":47},[33,41846,32636],{"class":39},[33,41848,32673],{"class":47},[33,41850,41851,41853,41855,41857],{"class":35,"line":57},[33,41852,31990],{"class":39},[33,41854,32651],{"class":47},[33,41856,31645],{"class":39},[33,41858,32656],{"class":47},[33,41860,41861],{"class":35,"line":64},[33,41862,35175],{"class":60},[33,41864,41865,41867,41869,41871],{"class":35,"line":83},[33,41866,31990],{"class":39},[33,41868,32621],{"class":47},[33,41870,31645],{"class":39},[33,41872,32626],{"class":47},[33,41874,41875,41877,41879,41881],{"class":35,"line":89},[33,41876,31990],{"class":39},[33,41878,33167],{"class":47},[33,41880,31645],{"class":39},[33,41882,41883],{"class":76}," VGG16\n",[33,41885,41886],{"class":35,"line":98},[33,41887,160],{"emptyLinePlaceholder":159},[33,41889,41890],{"class":35,"line":110},[33,41891,160],{"emptyLinePlaceholder":159},[33,41893,41894],{"class":35,"line":134},[33,41895,35204],{"class":60},[33,41897,41898,41900,41902],{"class":35,"line":156},[33,41899,33200],{"class":39},[33,41901,35211],{"class":43},[33,41903,33206],{"class":47},[33,41905,41906,41908,41910,41912,41914,41916,41918],{"class":35,"line":163},[33,41907,35218],{"class":47},[33,41909,73],{"class":39},[33,41911,32708],{"class":47},[33,41913,32711],{"class":955},[33,41915,73],{"class":39},[33,41917,32716],{"class":119},[33,41919,32719],{"class":47},[33,41921,41922,41924,41926,41928],{"class":35,"line":169},[33,41923,35235],{"class":955},[33,41925,73],{"class":39},[33,41927,35240],{"class":76},[33,41929,32719],{"class":47},[33,41931,41932,41934,41936,41938,41940,41942,41944],{"class":35,"line":175},[33,41933,35247],{"class":955},[33,41935,73],{"class":39},[33,41937,32746],{"class":47},[33,41939,32749],{"class":955},[33,41941,73],{"class":39},[33,41943,32754],{"class":76},[33,41945,32757],{"class":47},[33,41947,41948,41950,41952,41954],{"class":35,"line":181},[33,41949,35264],{"class":955},[33,41951,73],{"class":39},[33,41953,32729],{"class":76},[33,41955,884],{"class":47},[33,41957,41958,41960,41962,41964,41966,41968],{"class":35,"line":196},[33,41959,35275],{"class":47},[33,41961,73],{"class":39},[33,41963,32787],{"class":47},[33,41965,32790],{"class":955},[33,41967,73],{"class":39},[33,41969,35286],{"class":47},[33,41971,41972],{"class":35,"line":213},[33,41973,35291],{"class":60},[33,41975,41976,41978,41980,41982],{"class":35,"line":228},[33,41977,35296],{"class":955},[33,41979,73],{"class":39},[33,41981,701],{"class":76},[33,41983,32719],{"class":47},[33,41985,41986,41988,41990,41992],{"class":35,"line":1345},[33,41987,35307],{"class":955},[33,41989,73],{"class":39},[33,41991,32729],{"class":76},[33,41993,32719],{"class":47},[33,41995,41996,41998,42000,42002],{"class":35,"line":1350},[33,41997,35318],{"class":955},[33,41999,73],{"class":39},[33,42001,766],{"class":76},[33,42003,884],{"class":47},[33,42005,42006,42008],{"class":35,"line":1359},[33,42007,5489],{"class":39},[33,42009,35331],{"class":47},[33,42011,42012],{"class":35,"line":1364},[33,42013,160],{"emptyLinePlaceholder":159},[33,42015,42016],{"class":35,"line":1370},[33,42017,35340],{"class":60},[33,42019,42020,42022,42024],{"class":35,"line":1425},[33,42021,33200],{"class":39},[33,42023,35347],{"class":43},[33,42025,35350],{"class":47},[33,42027,42028],{"class":35,"line":1438},[33,42029,35355],{"class":60},[33,42031,42032,42034,42036,42038,42040,42042,42044],{"class":35,"line":1451},[33,42033,32490],{"class":47},[33,42035,73],{"class":39},[33,42037,32497],{"class":119},[33,42039,3145],{"class":39},[33,42041,32502],{"class":47},[33,42043,3142],{"class":39},[33,42045,35372],{"class":119},[33,42047,42048,42050,42052],{"class":35,"line":1457},[33,42049,32542],{"class":47},[33,42051,73],{"class":39},[33,42053,33542],{"class":47},[33,42055,42056],{"class":35,"line":1466},[33,42057,160],{"emptyLinePlaceholder":159},[33,42059,42060],{"class":35,"line":1471},[33,42061,35389],{"class":60},[33,42063,42064,42066,42068],{"class":35,"line":1477},[33,42065,35394],{"class":47},[33,42067,73],{"class":39},[33,42069,33595],{"class":76},[33,42071,42072,42074,42076],{"class":35,"line":1504},[33,42073,35403],{"class":47},[33,42075,73],{"class":39},[33,42077,4493],{"class":76},[33,42079,42080],{"class":35,"line":1509},[33,42081,160],{"emptyLinePlaceholder":159},[33,42083,42084],{"class":35,"line":1525},[33,42085,35416],{"class":60},[33,42087,42088],{"class":35,"line":1535},[33,42089,35421],{"class":60},[33,42091,42092],{"class":35,"line":1540},[33,42093,35426],{"class":60},[33,42095,42096,42098],{"class":35,"line":4027},[33,42097,35431],{"class":39},[33,42099,34137],{"class":47},[33,42101,42102],{"class":35,"line":4032},[33,42103,35438],{"class":60},[33,42105,42106,42108,42110,42112],{"class":35,"line":9199},[33,42107,1216],{"class":39},[33,42109,35445],{"class":47},[33,42111,27296],{"class":39},[33,42113,35450],{"class":47},[33,42115,42116,42118,42120],{"class":35,"line":9223},[33,42117,35455],{"class":47},[33,42119,73],{"class":39},[33,42121,35460],{"class":47},[33,42123,42124,42126,42128],{"class":35,"line":9228},[33,42125,35465],{"class":47},[33,42127,73],{"class":39},[33,42129,35470],{"class":47},[33,42131,42132],{"class":35,"line":9234},[33,42133,35475],{"class":60},[33,42135,42136],{"class":35,"line":9261},[33,42137,34128],{"class":47},[33,42139,42140],{"class":35,"line":9266},[33,42141,35484],{"class":60},[33,42143,42144,42146,42148],{"class":35,"line":9272},[33,42145,33913],{"class":47},[33,42147,73],{"class":39},[33,42149,35493],{"class":47},[33,42151,42152],{"class":35,"line":9284},[33,42153,35498],{"class":60},[33,42155,42156,42158,42160,42162,42164,42166,42168],{"class":35,"line":9296},[33,42157,33930],{"class":47},[33,42159,73],{"class":39},[33,42161,33935],{"class":47},[33,42163,33938],{"class":955},[33,42165,73],{"class":39},[33,42167,701],{"class":76},[33,42169,884],{"class":47},[33,42171,42172],{"class":35,"line":9308},[33,42173,35519],{"class":60},[33,42175,42176],{"class":35,"line":10967},[33,42177,35524],{"class":60},[33,42179,42180],{"class":35,"line":10992},[33,42181,35529],{"class":60},[33,42183,42184,42186,42188,42190,42192],{"class":35,"line":11015},[33,42185,35534],{"class":47},[33,42187,10728],{"class":39},[33,42189,34040],{"class":47},[33,42191,4359],{"class":39},[33,42193,35543],{"class":47},[33,42195,42196],{"class":35,"line":11039},[33,42197,35548],{"class":60},[33,42199,42200,42202,42204,42206,42208],{"class":35,"line":11044},[33,42201,35553],{"class":47},[33,42203,10728],{"class":39},[33,42205,35558],{"class":47},[33,42207,766],{"class":76},[33,42209,884],{"class":47},[33,42211,42212],{"class":35,"line":11049},[33,42213,160],{"emptyLinePlaceholder":159},[33,42215,42216],{"class":35,"line":11054},[33,42217,35571],{"class":60},[33,42219,42220,42222,42224,42226,42228],{"class":35,"line":11063},[33,42221,35576],{"class":47},[33,42223,73],{"class":39},[33,42225,35581],{"class":47},[33,42227,2184],{"class":39},[33,42229,35586],{"class":47},[33,42231,42232],{"class":35,"line":11068},[33,42233,35591],{"class":60},[33,42235,42236,42238,42240,42242],{"class":35,"line":11074},[33,42237,33704],{"class":76},[33,42239,345],{"class":47},[33,42241,35600],{"class":119},[33,42243,35603],{"class":47},[33,42245,42246],{"class":35,"line":11095},[33,42247,160],{"emptyLinePlaceholder":159},[33,42249,42250],{"class":35,"line":11101},[33,42251,35612],{"class":60},[33,42253,42254,42256,42258,42260,42262],{"class":35,"line":11115},[33,42255,2987],{"class":39},[33,42257,32473],{"class":76},[33,42259,4359],{"class":39},[33,42261,32478],{"class":119},[33,42263,5141],{"class":47},[33,42265,42266],{"class":35,"line":11121},[33,42267,35629],{"class":60},[33,42269,42270,42272,42274],{"class":35,"line":11148},[33,42271,32542],{"class":47},[33,42273,73],{"class":39},[33,42275,42276],{"class":47},"VGG16()\n",[33,42278,42279],{"class":35,"line":11157},[33,42280,35642],{"class":60},[33,42282,42283],{"class":35,"line":11163},[33,42284,35647],{"class":60},[33,42286,42287,42289,42291],{"class":35,"line":11171},[33,42288,35652],{"class":47},[33,42290,35655],{"class":119},[33,42292,31750],{"class":47},[33,42294,42295],{"class":35,"line":11176},[33,42296,35662],{"class":60},[33,42298,42299,42301,42303],{"class":35,"line":17855},[33,42300,35275],{"class":47},[33,42302,73],{"class":39},[33,42304,35671],{"class":47},[33,42306,42307],{"class":35,"line":17861},[33,42308,35676],{"class":60},[33,42310,42311],{"class":35,"line":17884},[33,42312,35681],{"class":47},[33,42314,42315],{"class":35,"line":17890},[33,42316,160],{"emptyLinePlaceholder":159},[33,42318,42319],{"class":35,"line":17913},[33,42320,35690],{"class":60},[33,42322,42323],{"class":35,"line":17927},[33,42324,35695],{"class":60},[33,42326,42327,42329,42331,42333,42335,42337,42339],{"class":35,"line":17947},[33,42328,32490],{"class":47},[33,42330,73],{"class":39},[33,42332,32497],{"class":119},[33,42334,3145],{"class":39},[33,42336,32502],{"class":47},[33,42338,3142],{"class":39},[33,42340,35372],{"class":119},[33,42342,42343,42345,42347],{"class":35,"line":17953},[33,42344,32542],{"class":47},[33,42346,73],{"class":39},[33,42348,33542],{"class":47},[33,42350,42351],{"class":35,"line":17964},[33,42352,35724],{"class":60},[33,42354,42355],{"class":35,"line":17987},[33,42356,35729],{"class":60},[33,42358,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403],{"class":35,"line":18009},[33,42360,35734],{"class":47},[33,42362,73],{"class":39},[33,42364,2489],{"class":47},[33,42366,35741],{"class":119},[33,42368,704],{"class":47},[33,42370,35746],{"class":119},[33,42372,704],{"class":47},[33,42374,35751],{"class":119},[33,42376,704],{"class":47},[33,42378,35756],{"class":119},[33,42380,704],{"class":47},[33,42382,35761],{"class":119},[33,42384,704],{"class":47},[33,42386,35766],{"class":119},[33,42388,704],{"class":47},[33,42390,35771],{"class":119},[33,42392,704],{"class":47},[33,42394,35776],{"class":119},[33,42396,704],{"class":47},[33,42398,35781],{"class":119},[33,42400,704],{"class":47},[33,42402,35786],{"class":119},[33,42404,34499],{"class":47},[33,42406,42407,42409],{"class":35,"line":18014},[33,42408,35431],{"class":39},[33,42410,34137],{"class":47},[33,42412,42413],{"class":35,"line":18020},[33,42414,35799],{"class":60},[33,42416,42417,42419,42421,42423],{"class":35,"line":18034},[33,42418,1216],{"class":39},[33,42420,35806],{"class":47},[33,42422,27296],{"class":39},[33,42424,35450],{"class":47},[33,42426,42427,42429,42431],{"class":35,"line":18047},[33,42428,33863],{"class":47},[33,42430,73],{"class":39},[33,42432,33868],{"class":47},[33,42434,42435,42437,42439],{"class":35,"line":18052},[33,42436,33878],{"class":47},[33,42438,73],{"class":39},[33,42440,33883],{"class":47},[33,42442,42443],{"class":35,"line":18066},[33,42444,160],{"emptyLinePlaceholder":159},[33,42446,42447],{"class":35,"line":18071},[33,42448,35835],{"class":60},[33,42450,42451],{"class":35,"line":18077},[33,42452,34128],{"class":47},[33,42454,42455],{"class":35,"line":18082},[33,42456,35844],{"class":60},[33,42458,42459,42461,42463],{"class":35,"line":18096},[33,42460,33913],{"class":47},[33,42462,73],{"class":39},[33,42464,33918],{"class":47},[33,42466,42467],{"class":35,"line":18101},[33,42468,35857],{"class":60},[33,42470,42471,42473,42475,42477,42479,42481,42483],{"class":35,"line":18106},[33,42472,33930],{"class":47},[33,42474,73],{"class":39},[33,42476,33935],{"class":47},[33,42478,33938],{"class":955},[33,42480,73],{"class":39},[33,42482,701],{"class":76},[33,42484,884],{"class":47},[33,42486,42487],{"class":35,"line":18120},[33,42488,35878],{"class":60},[33,42490,42491,42493,42495],{"class":35,"line":18132},[33,42492,35883],{"class":47},[33,42494,73],{"class":39},[33,42496,35888],{"class":47},[33,42498,42499,42501,42503],{"class":35,"line":18137},[33,42500,35893],{"class":47},[33,42502,73],{"class":39},[33,42504,35898],{"class":47},[33,42506,42507,42509,42511,42513,42515,42517,42519,42521],{"class":35,"line":18150},[33,42508,35903],{"class":76},[33,42510,345],{"class":47},[33,42512,35908],{"class":119},[33,42514,35911],{"class":47},[33,42516,35914],{"class":119},[33,42518,704],{"class":47},[33,42520,35919],{"class":119},[33,42522,35922],{"class":47},[1599,42524,42526],{"id":42525},"_23googlenet","2.3.GoogLeNet",[23249,42528,42530],{"id":42529},"_231原理","2.3.1.原理",[574,42532,42533],{},[564,42534,42535],{},"网络结构",[14,42537,42538],{},[2918,42539],{"alt":28,"src":42540},"\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,42542,42543],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,42545,42546],{},[2918,42547],{"alt":28,"src":42548},"\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,42550,42551],{},[2918,42552],{"alt":28,"src":42553},"\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,42555,42556],{},[2918,42557],{"alt":28,"src":42558},"\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",[574,42560,42561],{"start":51},[564,42562,42563],{},"1x1卷积的优点",[14,42565,42566],{},[2918,42567],{"alt":28,"src":42568},"\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",[574,42570,42571],{"start":57},[564,42572,42573],{},"全局平均池化层优点",[14,42575,42576],{},[2918,42577],{"alt":28,"src":42578},"\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,42580,42581],{},[2918,42582],{"alt":28,"src":42583},"\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",[574,42585,42586],{"start":64},[564,42587,42588],{},"参数详细描述",[14,42590,42591],{},[2918,42592],{"alt":28,"src":42593},"\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,42595,42596],{},[2918,42597],{"alt":28,"src":42598},"\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,42600,42601],{},[2918,42602],{"alt":28,"src":42603},"\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,42605,42606],{},[2918,42607],{"alt":28,"src":42608},"\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,42610,42611],{},[2918,42612],{"alt":28,"src":42613},"\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,42615,42616],{},[2918,42617],{"alt":28,"src":42618},"\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,42620,42621],{},[2918,42622],{"alt":28,"src":42623},"\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,42625,42626],{},[2918,42627],{"alt":28,"src":42628},"\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,42630,42631],{},[2918,42632],{"alt":28,"src":42633},"\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,42635,42636],{},[2918,42637],{"alt":28,"src":42638},"\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,42640,42641],{},[2918,42642],{"alt":28,"src":42643},"\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,42645,42646],{},[2918,42647],{"alt":28,"src":42648},"\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,42650,42651],{},[2918,42652],{"alt":28,"src":42653},"\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,42655,42656],{},[2918,42657],{"alt":28,"src":42658},"\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,42660,42661],{},[2918,42662],{"alt":28,"src":42663},"\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,42665,42666],{},[2918,42667],{"alt":28,"src":42668},"\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,42670,42671],{},[2918,42672],{"alt":28,"src":42673},"\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,42675,42676],{},[2918,42677],{"alt":28,"src":42678},"\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,42680,42681],{},[2918,42682],{"alt":28,"src":42683},"\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,42685,42686],{},[2918,42687],{"alt":28,"src":42688},"\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,42690,42691],{},[2918,42692],{"alt":28,"src":42693},"\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",[23249,42695,42697],{"id":42696},"_232代码实现","2.3.2.代码实现",[574,42699,42700],{},[564,42701,31964],{},[14,42703,42704],{},"根据原理一步一步搭建即可",[23,42706,42708],{"className":31631,"code":42707,"language":31633,"meta":28,"style":28},"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",[30,42709,42710,42716,42726,42736,42740,42757,42766,42781,42791,42796,42829,42834,42871,42918,42923,42959,43006,43011,43016,43051,43083,43087,43095,43111,43135,43160,43181,43186,43201,43205,43209,43214,43231,43236,43245,43260,43271,43315,43319,43347,43351,43362,43390,43394,43431,43435,43463,43467,43478,43514,43546,43574,43578,43589,43623,43655,43687,43720,43754,43782,43786,43797,43830,43862,43876,43880,43893,43897,43902,43914,43922,43944,43949,43954,43959,43964,43969,43974,43988,43996,44005,44018,44033,44042,44046,44054,44065,44076,44087,44098,44109,44115,44119,44124,44136,44156,44165],{"__ignoreMap":28},[33,42711,42712,42714],{"class":35,"line":36},[33,42713,31645],{"class":39},[33,42715,31648],{"class":47},[33,42717,42718,42720,42722,42724],{"class":35,"line":51},[33,42719,31990],{"class":39},[33,42721,31993],{"class":47},[33,42723,31645],{"class":39},[33,42725,31998],{"class":47},[33,42727,42728,42730,42732,42734],{"class":35,"line":57},[33,42729,31990],{"class":39},[33,42731,32010],{"class":47},[33,42733,31645],{"class":39},[33,42735,32015],{"class":47},[33,42737,42738],{"class":35,"line":64},[33,42739,160],{"emptyLinePlaceholder":159},[33,42741,42742,42744,42747,42749,42751,42753,42755],{"class":35,"line":83},[33,42743,15945],{"class":39},[33,42745,42746],{"class":43}," Inception",[33,42748,345],{"class":47},[33,42750,32031],{"class":43},[33,42752,2158],{"class":47},[33,42754,32036],{"class":43},[33,42756,32039],{"class":47},[33,42758,42759,42761,42763],{"class":35,"line":89},[33,42760,32054],{"class":39},[33,42762,32057],{"class":76},[33,42764,42765],{"class":47},"(self,in_channels,c1,c2,c3,c4):\n",[33,42767,42768,42770,42773,42775,42777,42779],{"class":35,"line":98},[33,42769,32070],{"class":76},[33,42771,42772],{"class":47},"(Inception,",[33,42774,32076],{"class":76},[33,42776,32079],{"class":47},[33,42778,32082],{"class":76},[33,42780,48],{"class":47},[33,42782,42783,42785,42787,42789],{"class":35,"line":110},[33,42784,32098],{"class":76},[33,42786,36024],{"class":47},[33,42788,73],{"class":39},[33,42790,36029],{"class":47},[33,42792,42793],{"class":35,"line":134},[33,42794,42795],{"class":60},"        # 路线1：定义1*1卷积\n",[33,42797,42798,42800,42803,42805,42807,42809,42811,42814,42816,42818,42821,42823,42825,42827],{"class":35,"line":156},[33,42799,32098],{"class":76},[33,42801,42802],{"class":47},".p1_1",[33,42804,73],{"class":39},[33,42806,32106],{"class":47},[33,42808,32109],{"class":955},[33,42810,73],{"class":39},[33,42812,42813],{"class":47},"in_channels,",[33,42815,32118],{"class":955},[33,42817,73],{"class":39},[33,42819,42820],{"class":47},"c1,",[33,42822,32127],{"class":955},[33,42824,73],{"class":39},[33,42826,701],{"class":76},[33,42828,884],{"class":47},[33,42830,42831],{"class":35,"line":163},[33,42832,42833],{"class":60},"        # 路线2：定义1*1卷积和3*3\n",[33,42835,42836,42838,42841,42843,42845,42847,42849,42851,42853,42855,42858,42860,42863,42865,42867,42869],{"class":35,"line":169},[33,42837,32098],{"class":76},[33,42839,42840],{"class":47},".p2_1",[33,42842,73],{"class":39},[33,42844,32106],{"class":47},[33,42846,32109],{"class":955},[33,42848,73],{"class":39},[33,42850,42813],{"class":47},[33,42852,32118],{"class":955},[33,42854,73],{"class":39},[33,42856,42857],{"class":47},"c2[",[33,42859,766],{"class":76},[33,42861,42862],{"class":47},"],",[33,42864,32127],{"class":955},[33,42866,73],{"class":39},[33,42868,701],{"class":76},[33,42870,884],{"class":47},[33,42872,42873,42875,42878,42880,42882,42884,42886,42888,42890,42892,42894,42896,42898,42900,42902,42904,42906,42908,42910,42912,42914,42916],{"class":35,"line":175},[33,42874,32098],{"class":76},[33,42876,42877],{"class":47},".p2_2",[33,42879,73],{"class":39},[33,42881,32106],{"class":47},[33,42883,32109],{"class":955},[33,42885,73],{"class":39},[33,42887,42857],{"class":47},[33,42889,766],{"class":76},[33,42891,42862],{"class":47},[33,42893,32118],{"class":955},[33,42895,73],{"class":39},[33,42897,42857],{"class":47},[33,42899,701],{"class":76},[33,42901,42862],{"class":47},[33,42903,32127],{"class":955},[33,42905,73],{"class":39},[33,42907,712],{"class":76},[33,42909,704],{"class":47},[33,42911,32136],{"class":955},[33,42913,73],{"class":39},[33,42915,701],{"class":76},[33,42917,884],{"class":47},[33,42919,42920],{"class":35,"line":181},[33,42921,42922],{"class":60},"        # 路线3：定义1*1卷积和5*5\n",[33,42924,42925,42927,42930,42932,42934,42936,42938,42940,42942,42944,42947,42949,42951,42953,42955,42957],{"class":35,"line":196},[33,42926,32098],{"class":76},[33,42928,42929],{"class":47},".p3_1",[33,42931,73],{"class":39},[33,42933,32106],{"class":47},[33,42935,32109],{"class":955},[33,42937,73],{"class":39},[33,42939,42813],{"class":47},[33,42941,32118],{"class":955},[33,42943,73],{"class":39},[33,42945,42946],{"class":47},"c3[",[33,42948,766],{"class":76},[33,42950,42862],{"class":47},[33,42952,32127],{"class":955},[33,42954,73],{"class":39},[33,42956,701],{"class":76},[33,42958,884],{"class":47},[33,42960,42961,42963,42966,42968,42970,42972,42974,42976,42978,42980,42982,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004],{"class":35,"line":213},[33,42962,32098],{"class":76},[33,42964,42965],{"class":47},".p3_2",[33,42967,73],{"class":39},[33,42969,32106],{"class":47},[33,42971,32109],{"class":955},[33,42973,73],{"class":39},[33,42975,42946],{"class":47},[33,42977,766],{"class":76},[33,42979,42862],{"class":47},[33,42981,32118],{"class":955},[33,42983,73],{"class":39},[33,42985,42946],{"class":47},[33,42987,701],{"class":76},[33,42989,42862],{"class":47},[33,42991,32127],{"class":955},[33,42993,73],{"class":39},[33,42995,722],{"class":76},[33,42997,704],{"class":47},[33,42999,32136],{"class":955},[33,43001,73],{"class":39},[33,43003,707],{"class":76},[33,43005,884],{"class":47},[33,43007,43008],{"class":35,"line":228},[33,43009,43010],{"class":60},"        # 路线4：定义3*3最大池化和1*1卷积\n",[33,43012,43013],{"class":35,"line":1345},[33,43014,43015],{"class":60},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[33,43017,43018,43020,43023,43025,43027,43029,43031,43033,43035,43037,43039,43041,43043,43045,43047,43049],{"class":35,"line":1350},[33,43019,32098],{"class":76},[33,43021,43022],{"class":47},".p4_1",[33,43024,73],{"class":39},[33,43026,36082],{"class":47},[33,43028,32127],{"class":955},[33,43030,73],{"class":39},[33,43032,712],{"class":76},[33,43034,704],{"class":47},[33,43036,32182],{"class":955},[33,43038,73],{"class":39},[33,43040,701],{"class":76},[33,43042,704],{"class":47},[33,43044,32136],{"class":955},[33,43046,73],{"class":39},[33,43048,701],{"class":76},[33,43050,884],{"class":47},[33,43052,43053,43055,43058,43060,43062,43064,43066,43068,43070,43072,43075,43077,43079,43081],{"class":35,"line":1359},[33,43054,32098],{"class":76},[33,43056,43057],{"class":47},".p4_2",[33,43059,73],{"class":39},[33,43061,32106],{"class":47},[33,43063,32109],{"class":955},[33,43065,73],{"class":39},[33,43067,42813],{"class":47},[33,43069,32118],{"class":955},[33,43071,73],{"class":39},[33,43073,43074],{"class":47},"c4,",[33,43076,32127],{"class":955},[33,43078,73],{"class":39},[33,43080,701],{"class":76},[33,43082,884],{"class":47},[33,43084,43085],{"class":35,"line":1364},[33,43086,160],{"emptyLinePlaceholder":159},[33,43088,43089,43091,43093],{"class":35,"line":1370},[33,43090,32054],{"class":39},[33,43092,32346],{"class":43},[33,43094,32349],{"class":47},[33,43096,43097,43100,43102,43104,43106,43108],{"class":35,"line":1425},[33,43098,43099],{"class":47},"        p1",[33,43101,73],{"class":39},[33,43103,32076],{"class":76},[33,43105,36437],{"class":47},[33,43107,32076],{"class":76},[33,43109,43110],{"class":47},".p1_1(x))\n",[33,43112,43113,43115,43117,43119,43121,43123,43126,43128,43130,43132],{"class":35,"line":1438},[33,43114,907],{"class":47},[33,43116,73],{"class":39},[33,43118,32076],{"class":76},[33,43120,36437],{"class":47},[33,43122,32076],{"class":76},[33,43124,43125],{"class":47},".p2_2(",[33,43127,32076],{"class":76},[33,43129,36437],{"class":47},[33,43131,32076],{"class":76},[33,43133,43134],{"class":47},".p2_1(x))))\n",[33,43136,43137,43140,43142,43144,43146,43148,43151,43153,43155,43157],{"class":35,"line":1451},[33,43138,43139],{"class":47},"        p3",[33,43141,73],{"class":39},[33,43143,32076],{"class":76},[33,43145,36437],{"class":47},[33,43147,32076],{"class":76},[33,43149,43150],{"class":47},".p3_2(",[33,43152,32076],{"class":76},[33,43154,36437],{"class":47},[33,43156,32076],{"class":76},[33,43158,43159],{"class":47},".p3_1(x))))\n",[33,43161,43162,43165,43167,43169,43171,43173,43176,43178],{"class":35,"line":1457},[33,43163,43164],{"class":47},"        p4",[33,43166,73],{"class":39},[33,43168,32076],{"class":76},[33,43170,36437],{"class":47},[33,43172,32076],{"class":76},[33,43174,43175],{"class":47},".p4_2(",[33,43177,32076],{"class":76},[33,43179,43180],{"class":47},".p4_1(x)))\n",[33,43182,43183],{"class":35,"line":1466},[33,43184,43185],{"class":60},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[33,43187,43188,43190,43193,43195,43197,43199],{"class":35,"line":1471},[33,43189,16003],{"class":39},[33,43191,43192],{"class":47}," torch.cat((p1,p2,p3,p4),",[33,43194,33938],{"class":955},[33,43196,73],{"class":39},[33,43198,701],{"class":76},[33,43200,884],{"class":47},[33,43202,43203],{"class":35,"line":1477},[33,43204,160],{"emptyLinePlaceholder":159},[33,43206,43207],{"class":35,"line":1504},[33,43208,160],{"emptyLinePlaceholder":159},[33,43210,43211],{"class":35,"line":1509},[33,43212,43213],{"class":60},"# 搭建GoogLeNet网络\n",[33,43215,43216,43218,43221,43223,43225,43227,43229],{"class":35,"line":1525},[33,43217,15945],{"class":39},[33,43219,43220],{"class":43}," GoogLeNet",[33,43222,345],{"class":47},[33,43224,32031],{"class":43},[33,43226,2158],{"class":47},[33,43228,32036],{"class":43},[33,43230,32039],{"class":47},[33,43232,43233],{"class":35,"line":1535},[33,43234,43235],{"class":60},"    # 必须把Inception导入到里边\n",[33,43237,43238,43240,43242],{"class":35,"line":1540},[33,43239,32054],{"class":39},[33,43241,32057],{"class":76},[33,43243,43244],{"class":47},"(self,Inception):\n",[33,43246,43247,43249,43252,43254,43256,43258],{"class":35,"line":4027},[33,43248,32070],{"class":76},[33,43250,43251],{"class":47},"(GoogLeNet,",[33,43253,32076],{"class":76},[33,43255,32079],{"class":47},[33,43257,32082],{"class":76},[33,43259,48],{"class":47},[33,43261,43262,43264,43267,43269],{"class":35,"line":4032},[33,43263,32098],{"class":76},[33,43265,43266],{"class":47},".b1",[33,43268,73],{"class":39},[33,43270,39262],{"class":47},[33,43272,43273,43275,43277,43279,43281,43283,43285,43287,43289,43291,43293,43295,43297,43299,43301,43303,43305,43307,43309,43311,43313],{"class":35,"line":9199},[33,43274,39267],{"class":47},[33,43276,32109],{"class":955},[33,43278,73],{"class":39},[33,43280,701],{"class":76},[33,43282,704],{"class":47},[33,43284,32118],{"class":955},[33,43286,73],{"class":39},[33,43288,1820],{"class":76},[33,43290,704],{"class":47},[33,43292,32127],{"class":955},[33,43294,73],{"class":39},[33,43296,732],{"class":76},[33,43298,704],{"class":47},[33,43300,32182],{"class":955},[33,43302,73],{"class":39},[33,43304,707],{"class":76},[33,43306,704],{"class":47},[33,43308,32136],{"class":955},[33,43310,73],{"class":39},[33,43312,712],{"class":76},[33,43314,39300],{"class":47},[33,43316,43317],{"class":35,"line":9223},[33,43318,39305],{"class":47},[33,43320,43321,43323,43325,43327,43329,43331,43333,43335,43337,43339,43341,43343,43345],{"class":35,"line":9228},[33,43322,39350],{"class":47},[33,43324,32127],{"class":955},[33,43326,73],{"class":39},[33,43328,712],{"class":76},[33,43330,704],{"class":47},[33,43332,32182],{"class":955},[33,43334,73],{"class":39},[33,43336,707],{"class":76},[33,43338,704],{"class":47},[33,43340,32136],{"class":955},[33,43342,73],{"class":39},[33,43344,701],{"class":76},[33,43346,884],{"class":47},[33,43348,43349],{"class":35,"line":9234},[33,43350,39379],{"class":47},[33,43352,43353,43355,43358,43360],{"class":35,"line":9261},[33,43354,32098],{"class":76},[33,43356,43357],{"class":47},".b2",[33,43359,73],{"class":39},[33,43361,39262],{"class":47},[33,43363,43364,43366,43368,43370,43372,43374,43376,43378,43380,43382,43384,43386,43388],{"class":35,"line":9266},[33,43365,39267],{"class":47},[33,43367,32109],{"class":955},[33,43369,73],{"class":39},[33,43371,1820],{"class":76},[33,43373,704],{"class":47},[33,43375,32118],{"class":955},[33,43377,73],{"class":39},[33,43379,1820],{"class":76},[33,43381,704],{"class":47},[33,43383,32127],{"class":955},[33,43385,73],{"class":39},[33,43387,701],{"class":76},[33,43389,39300],{"class":47},[33,43391,43392],{"class":35,"line":9272},[33,43393,39305],{"class":47},[33,43395,43396,43398,43400,43402,43404,43406,43408,43410,43413,43415,43417,43419,43421,43423,43425,43427,43429],{"class":35,"line":9284},[33,43397,39267],{"class":47},[33,43399,32109],{"class":955},[33,43401,73],{"class":39},[33,43403,1820],{"class":76},[33,43405,704],{"class":47},[33,43407,32118],{"class":955},[33,43409,73],{"class":39},[33,43411,43412],{"class":76},"192",[33,43414,704],{"class":47},[33,43416,32127],{"class":955},[33,43418,73],{"class":39},[33,43420,712],{"class":76},[33,43422,704],{"class":47},[33,43424,32136],{"class":955},[33,43426,73],{"class":39},[33,43428,701],{"class":76},[33,43430,39300],{"class":47},[33,43432,43433],{"class":35,"line":9296},[33,43434,39305],{"class":47},[33,43436,43437,43439,43441,43443,43445,43447,43449,43451,43453,43455,43457,43459,43461],{"class":35,"line":9308},[33,43438,39350],{"class":47},[33,43440,32127],{"class":955},[33,43442,73],{"class":39},[33,43444,712],{"class":76},[33,43446,704],{"class":47},[33,43448,32182],{"class":955},[33,43450,73],{"class":39},[33,43452,707],{"class":76},[33,43454,704],{"class":47},[33,43456,32136],{"class":955},[33,43458,73],{"class":39},[33,43460,701],{"class":76},[33,43462,884],{"class":47},[33,43464,43465],{"class":35,"line":10967},[33,43466,39379],{"class":47},[33,43468,43469,43471,43474,43476],{"class":35,"line":10992},[33,43470,32098],{"class":76},[33,43472,43473],{"class":47},".b3",[33,43475,73],{"class":39},[33,43477,39262],{"class":47},[33,43479,43480,43483,43485,43487,43489,43492,43494,43496,43498,43501,43503,43505,43507,43510,43512],{"class":35,"line":11015},[33,43481,43482],{"class":47},"            Inception(",[33,43484,43412],{"class":76},[33,43486,704],{"class":47},[33,43488,1820],{"class":76},[33,43490,43491],{"class":47},",(",[33,43493,1826],{"class":76},[33,43495,704],{"class":47},[33,43497,33323],{"class":76},[33,43499,43500],{"class":47},"),(",[33,43502,2201],{"class":76},[33,43504,704],{"class":47},[33,43506,1814],{"class":76},[33,43508,43509],{"class":47},"),",[33,43511,1814],{"class":76},[33,43513,39300],{"class":47},[33,43515,43516,43518,43520,43522,43524,43526,43528,43530,43532,43534,43536,43538,43540,43542,43544],{"class":35,"line":11039},[33,43517,43482],{"class":47},[33,43519,36123],{"class":76},[33,43521,704],{"class":47},[33,43523,33323],{"class":76},[33,43525,43491],{"class":47},[33,43527,33323],{"class":76},[33,43529,704],{"class":47},[33,43531,43412],{"class":76},[33,43533,43500],{"class":47},[33,43535,1814],{"class":76},[33,43537,704],{"class":47},[33,43539,1826],{"class":76},[33,43541,43509],{"class":47},[33,43543,1820],{"class":76},[33,43545,39300],{"class":47},[33,43547,43548,43550,43552,43554,43556,43558,43560,43562,43564,43566,43568,43570,43572],{"class":35,"line":11044},[33,43549,39350],{"class":47},[33,43551,32127],{"class":955},[33,43553,73],{"class":39},[33,43555,712],{"class":76},[33,43557,704],{"class":47},[33,43559,32182],{"class":955},[33,43561,73],{"class":39},[33,43563,707],{"class":76},[33,43565,704],{"class":47},[33,43567,32136],{"class":955},[33,43569,73],{"class":39},[33,43571,701],{"class":76},[33,43573,884],{"class":47},[33,43575,43576],{"class":35,"line":11049},[33,43577,39379],{"class":47},[33,43579,43580,43582,43585,43587],{"class":35,"line":11054},[33,43581,32098],{"class":76},[33,43583,43584],{"class":47},".b4",[33,43586,73],{"class":39},[33,43588,39262],{"class":47},[33,43590,43591,43593,43596,43598,43600,43602,43604,43606,43609,43611,43613,43615,43617,43619,43621],{"class":35,"line":11063},[33,43592,43482],{"class":47},[33,43594,43595],{"class":76},"480",[33,43597,704],{"class":47},[33,43599,43412],{"class":76},[33,43601,43491],{"class":47},[33,43603,1826],{"class":76},[33,43605,704],{"class":47},[33,43607,43608],{"class":76},"208",[33,43610,43500],{"class":47},[33,43612,2201],{"class":76},[33,43614,704],{"class":47},[33,43616,2207],{"class":76},[33,43618,43509],{"class":47},[33,43620,1820],{"class":76},[33,43622,39300],{"class":47},[33,43624,43625,43627,43629,43631,43633,43635,43637,43639,43641,43643,43645,43647,43649,43651,43653],{"class":35,"line":11068},[33,43626,43482],{"class":47},[33,43628,39710],{"class":76},[33,43630,704],{"class":47},[33,43632,22299],{"class":76},[33,43634,43491],{"class":47},[33,43636,2218],{"class":76},[33,43638,704],{"class":47},[33,43640,32754],{"class":76},[33,43642,43500],{"class":47},[33,43644,2399],{"class":76},[33,43646,704],{"class":47},[33,43648,1820],{"class":76},[33,43650,43509],{"class":47},[33,43652,1820],{"class":76},[33,43654,39300],{"class":47},[33,43656,43657,43659,43661,43663,43665,43667,43669,43671,43673,43675,43677,43679,43681,43683,43685],{"class":35,"line":11074},[33,43658,43482],{"class":47},[33,43660,39710],{"class":76},[33,43662,704],{"class":47},[33,43664,33323],{"class":76},[33,43666,43491],{"class":47},[33,43668,33323],{"class":76},[33,43670,704],{"class":47},[33,43672,36123],{"class":76},[33,43674,43500],{"class":47},[33,43676,2399],{"class":76},[33,43678,704],{"class":47},[33,43680,1820],{"class":76},[33,43682,43509],{"class":47},[33,43684,1820],{"class":76},[33,43686,39300],{"class":47},[33,43688,43689,43691,43693,43695,43697,43699,43701,43703,43706,43708,43710,43712,43714,43716,43718],{"class":35,"line":11095},[33,43690,43482],{"class":47},[33,43692,39710],{"class":76},[33,43694,704],{"class":47},[33,43696,2218],{"class":76},[33,43698,43491],{"class":47},[33,43700,33323],{"class":76},[33,43702,704],{"class":47},[33,43704,43705],{"class":76},"288",[33,43707,43500],{"class":47},[33,43709,1814],{"class":76},[33,43711,704],{"class":47},[33,43713,1820],{"class":76},[33,43715,43509],{"class":47},[33,43717,1820],{"class":76},[33,43719,39300],{"class":47},[33,43721,43722,43724,43727,43729,43731,43733,43735,43737,43740,43742,43744,43746,43748,43750,43752],{"class":35,"line":11101},[33,43723,43482],{"class":47},[33,43725,43726],{"class":76},"528",[33,43728,704],{"class":47},[33,43730,36123],{"class":76},[33,43732,43491],{"class":47},[33,43734,22299],{"class":76},[33,43736,704],{"class":47},[33,43738,43739],{"class":76},"320",[33,43741,43500],{"class":47},[33,43743,1814],{"class":76},[33,43745,704],{"class":47},[33,43747,33323],{"class":76},[33,43749,43509],{"class":47},[33,43751,33323],{"class":76},[33,43753,39300],{"class":47},[33,43755,43756,43758,43760,43762,43764,43766,43768,43770,43772,43774,43776,43778,43780],{"class":35,"line":11115},[33,43757,39350],{"class":47},[33,43759,32127],{"class":955},[33,43761,73],{"class":39},[33,43763,712],{"class":76},[33,43765,704],{"class":47},[33,43767,32182],{"class":955},[33,43769,73],{"class":39},[33,43771,707],{"class":76},[33,43773,704],{"class":47},[33,43775,32136],{"class":955},[33,43777,73],{"class":39},[33,43779,701],{"class":76},[33,43781,884],{"class":47},[33,43783,43784],{"class":35,"line":11121},[33,43785,39379],{"class":47},[33,43787,43788,43790,43793,43795],{"class":35,"line":11148},[33,43789,32098],{"class":76},[33,43791,43792],{"class":47},".b5",[33,43794,73],{"class":39},[33,43796,39262],{"class":47},[33,43798,43799,43801,43804,43806,43808,43810,43812,43814,43816,43818,43820,43822,43824,43826,43828],{"class":35,"line":11157},[33,43800,43482],{"class":47},[33,43802,43803],{"class":76},"832",[33,43805,704],{"class":47},[33,43807,36123],{"class":76},[33,43809,43491],{"class":47},[33,43811,22299],{"class":76},[33,43813,704],{"class":47},[33,43815,43739],{"class":76},[33,43817,43500],{"class":47},[33,43819,1814],{"class":76},[33,43821,704],{"class":47},[33,43823,33323],{"class":76},[33,43825,43509],{"class":47},[33,43827,33323],{"class":76},[33,43829,39300],{"class":47},[33,43831,43832,43834,43836,43838,43840,43842,43844,43846,43848,43850,43852,43854,43856,43858,43860],{"class":35,"line":11163},[33,43833,43482],{"class":47},[33,43835,43803],{"class":76},[33,43837,704],{"class":47},[33,43839,36193],{"class":76},[33,43841,43491],{"class":47},[33,43843,43412],{"class":76},[33,43845,704],{"class":47},[33,43847,36193],{"class":76},[33,43849,43500],{"class":47},[33,43851,2207],{"class":76},[33,43853,704],{"class":47},[33,43855,33323],{"class":76},[33,43857,43509],{"class":47},[33,43859,33323],{"class":76},[33,43861,39300],{"class":47},[33,43863,43864,43867,43869,43871,43873],{"class":35,"line":11171},[33,43865,43866],{"class":47},"            nn.AdaptiveAvgPool2d((",[33,43868,701],{"class":76},[33,43870,704],{"class":47},[33,43872,701],{"class":76},[33,43874,43875],{"class":47},")),\n",[33,43877,43878],{"class":35,"line":11176},[33,43879,40043],{"class":47},[33,43881,43882,43884,43887,43889,43891],{"class":35,"line":17855},[33,43883,40048],{"class":47},[33,43885,43886],{"class":76},"1024",[33,43888,704],{"class":47},[33,43890,77],{"class":76},[33,43892,884],{"class":47},[33,43894,43895],{"class":35,"line":17861},[33,43896,39379],{"class":47},[33,43898,43899],{"class":35,"line":17884},[33,43900,43901],{"class":60},"        # 对模型参数初始化\n",[33,43903,43904,43906,43908,43910,43912],{"class":35,"line":17890},[33,43905,1216],{"class":39},[33,43907,40121],{"class":47},[33,43909,27296],{"class":39},[33,43911,40126],{"class":76},[33,43913,40129],{"class":47},[33,43915,43916,43918,43920],{"class":35,"line":17913},[33,43917,1259],{"class":39},[33,43919,40141],{"class":76},[33,43921,40144],{"class":47},[33,43923,43924,43926,43929,43931,43934,43936,43938,43940,43942],{"class":35,"line":17927},[33,43925,40154],{"class":47},[33,43927,43928],{"class":955},"mode",[33,43930,73],{"class":39},[33,43932,43933],{"class":119},"'fan_out'",[33,43935,704],{"class":47},[33,43937,40157],{"class":955},[33,43939,73],{"class":39},[33,43941,40162],{"class":119},[33,43943,884],{"class":47},[33,43945,43946],{"class":35,"line":17947},[33,43947,43948],{"class":60},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[33,43950,43951],{"class":35,"line":17953},[33,43952,43953],{"class":60},"                # ② mode = 'fan_out'决定使用的fan值：\n",[33,43955,43956],{"class":35,"line":17964},[33,43957,43958],{"class":60},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[33,43960,43961],{"class":35,"line":17987},[33,43962,43963],{"class":60},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[33,43965,43966],{"class":35,"line":18009},[33,43967,43968],{"class":60},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[33,43970,43971],{"class":35,"line":18014},[33,43972,43973],{"class":60},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[33,43975,43976,43978,43980,43982,43984,43986],{"class":35,"line":18020},[33,43977,40174],{"class":39},[33,43979,40177],{"class":47},[33,43981,40180],{"class":39},[33,43983,40183],{"class":39},[33,43985,40186],{"class":76},[33,43987,5141],{"class":47},[33,43989,43990,43992,43994],{"class":35,"line":18034},[33,43991,40198],{"class":47},[33,43993,766],{"class":76},[33,43995,884],{"class":47},[33,43997,43998,44001,44003],{"class":35,"line":18047},[33,43999,44000],{"class":39},"                elif",[33,44002,40141],{"class":76},[33,44004,40217],{"class":47},[33,44006,44007,44010,44012,44014,44016],{"class":35,"line":18052},[33,44008,44009],{"class":47},"                    nn.init.normal_(m.weight,",[33,44011,766],{"class":76},[33,44013,704],{"class":47},[33,44015,40239],{"class":76},[33,44017,884],{"class":47},[33,44019,44020,44023,44025,44027,44029,44031],{"class":35,"line":18066},[33,44021,44022],{"class":39},"                    if",[33,44024,40177],{"class":47},[33,44026,40180],{"class":39},[33,44028,40183],{"class":39},[33,44030,40186],{"class":76},[33,44032,5141],{"class":47},[33,44034,44035,44038,44040],{"class":35,"line":18071},[33,44036,44037],{"class":47},"                        nn.init.constant_(m.bias,",[33,44039,766],{"class":76},[33,44041,884],{"class":47},[33,44043,44044],{"class":35,"line":18077},[33,44045,36418],{"class":60},[33,44047,44048,44050,44052],{"class":35,"line":18082},[33,44049,32054],{"class":39},[33,44051,32346],{"class":43},[33,44053,32349],{"class":47},[33,44055,44056,44058,44060,44062],{"class":35,"line":18096},[33,44057,32354],{"class":47},[33,44059,73],{"class":39},[33,44061,32076],{"class":76},[33,44063,44064],{"class":47},".b1(x)\n",[33,44066,44067,44069,44071,44073],{"class":35,"line":18101},[33,44068,32354],{"class":47},[33,44070,73],{"class":39},[33,44072,32076],{"class":76},[33,44074,44075],{"class":47},".b2(x)\n",[33,44077,44078,44080,44082,44084],{"class":35,"line":18106},[33,44079,32354],{"class":47},[33,44081,73],{"class":39},[33,44083,32076],{"class":76},[33,44085,44086],{"class":47},".b3(x)\n",[33,44088,44089,44091,44093,44095],{"class":35,"line":18120},[33,44090,32354],{"class":47},[33,44092,73],{"class":39},[33,44094,32076],{"class":76},[33,44096,44097],{"class":47},".b4(x)\n",[33,44099,44100,44102,44104,44106],{"class":35,"line":18132},[33,44101,32354],{"class":47},[33,44103,73],{"class":39},[33,44105,32076],{"class":76},[33,44107,44108],{"class":47},".b5(x)\n",[33,44110,44111,44113],{"class":35,"line":18137},[33,44112,16003],{"class":39},[33,44114,32462],{"class":47},[33,44116,44117],{"class":35,"line":18150},[33,44118,160],{"emptyLinePlaceholder":159},[33,44120,44121],{"class":35,"line":18155},[33,44122,44123],{"class":60},"# 模型展示\n",[33,44125,44126,44128,44130,44132,44134],{"class":35,"line":18160},[33,44127,2987],{"class":39},[33,44129,32473],{"class":76},[33,44131,4359],{"class":39},[33,44133,32478],{"class":119},[33,44135,5141],{"class":47},[33,44137,44138,44140,44142,44144,44146,44148,44150,44152,44154],{"class":35,"line":18165},[33,44139,32490],{"class":47},[33,44141,73],{"class":39},[33,44143,31704],{"class":47},[33,44145,32497],{"class":119},[33,44147,3145],{"class":39},[33,44149,32502],{"class":47},[33,44151,3142],{"class":39},[33,44153,31729],{"class":119},[33,44155,884],{"class":47},[33,44157,44158,44160,44162],{"class":35,"line":18178},[33,44159,32542],{"class":47},[33,44161,73],{"class":39},[33,44163,44164],{"class":47},"GoogLeNet(Inception).to(device)\n",[33,44166,44167,44169,44171,44173,44175,44177,44179,44181],{"class":35,"line":18183},[33,44168,32552],{"class":76},[33,44170,32555],{"class":47},[33,44172,701],{"class":76},[33,44174,704],{"class":47},[33,44176,32754],{"class":76},[33,44178,704],{"class":47},[33,44180,32754],{"class":76},[33,44182,32568],{"class":47},[574,44184,44185],{"start":51},[564,44186,40436],{},[23,44188,44190],{"className":31631,"code":44189,"language":31633,"meta":28,"style":28},"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",[30,44191,44192,44198,44204,44214,44220,44230,44240,44250,44260,44270,44274,44285,44295,44299,44303,44307,44315,44327,44337,44353,44363,44395,44409,44419,44429,44433,44443,44457,44467,44477,44487,44493,44497,44501,44505,44509,44513,44521,44541,44545,44549,44553,44557,44561,44577,44581,44585,44593,44597,44601,44609,44613,44617,44621,44629,44633,44637,44641,44645,44653,44657,44665,44669,44677,44681,44689,44693,44701,44705,44709,44717,44721,44725,44729,44741,44765,44779,44783,44787,44791,44799,44803,44811,44815,44823,44827,44835,44839,44847,44851,44859,44863,44875,44879,44887,44891,44899,44903,44907,44911,44915,44923,44927,44943,44947,44955,44959,44963,44967,44971,44975,44979,44983,44999,45003,45015,45019,45031,45035,45047,45051,45059,45063,45071,45075,45079,45083,45089,45093,45101,45105,45121,45125,45133,45137,45153,45165,45169,45181,45185,45189,45197,45201,45205,45213,45217,45225,45229,45237,45241,45245,45287,45329,45333,45337,45353,45357,45373,45377,45381,45389,45393,45397,45409,45447,45451,45455,45463,45467,45481,45491,45497,45503,45509,45515,45519,45523,45529,45533,45537,45545,45549,45567,45571,45575,45579,45595,45599,45603,45607,45611,45615,45635,45655,45659,45663,45667,45675,45683,45687,45703,45723,45743,45747,45751,45759,45767,45771,45775,45779,45791,45795,45805,45813,45830],{"__ignoreMap":28},[33,44193,44194,44196],{"class":35,"line":36},[33,44195,31645],{"class":39},[33,44197,33075],{"class":47},[33,44199,44200,44202],{"class":35,"line":51},[33,44201,31645],{"class":39},[33,44203,33082],{"class":47},[33,44205,44206,44208,44210,44212],{"class":35,"line":57},[33,44207,31645],{"class":39},[33,44209,33093],{"class":47},[33,44211,32636],{"class":39},[33,44213,33098],{"class":47},[33,44215,44216,44218],{"class":35,"line":64},[33,44217,31645],{"class":39},[33,44219,31648],{"class":47},[33,44221,44222,44224,44226,44228],{"class":35,"line":83},[33,44223,31990],{"class":39},[33,44225,32668],{"class":47},[33,44227,31645],{"class":39},[33,44229,33115],{"class":47},[33,44231,44232,44234,44236,44238],{"class":35,"line":89},[33,44233,31990],{"class":39},[33,44235,32621],{"class":47},[33,44237,31645],{"class":39},[33,44239,32626],{"class":47},[33,44241,44242,44244,44246,44248],{"class":35,"line":98},[33,44243,31990],{"class":39},[33,44245,32651],{"class":47},[33,44247,31645],{"class":39},[33,44249,32656],{"class":47},[33,44251,44252,44254,44256,44258],{"class":35,"line":110},[33,44253,31645],{"class":39},[33,44255,32668],{"class":47},[33,44257,32636],{"class":39},[33,44259,32673],{"class":47},[33,44261,44262,44264,44266,44268],{"class":35,"line":134},[33,44263,31645],{"class":39},[33,44265,32685],{"class":47},[33,44267,32636],{"class":39},[33,44269,32690],{"class":47},[33,44271,44272],{"class":35,"line":156},[33,44273,33160],{"class":60},[33,44275,44276,44278,44280,44282],{"class":35,"line":163},[33,44277,31990],{"class":39},[33,44279,33167],{"class":47},[33,44281,31645],{"class":39},[33,44283,44284],{"class":47}," GoogLeNet, Inception\n",[33,44286,44287,44289,44291,44293],{"class":35,"line":169},[33,44288,31990],{"class":39},[33,44290,31993],{"class":47},[33,44292,31645],{"class":39},[33,44294,31998],{"class":47},[33,44296,44297],{"class":35,"line":175},[33,44298,160],{"emptyLinePlaceholder":159},[33,44300,44301],{"class":35,"line":181},[33,44302,160],{"emptyLinePlaceholder":159},[33,44304,44305],{"class":35,"line":196},[33,44306,33195],{"class":60},[33,44308,44309,44311,44313],{"class":35,"line":213},[33,44310,33200],{"class":39},[33,44312,33203],{"class":43},[33,44314,33206],{"class":47},[33,44316,44317,44319,44321,44323,44325],{"class":35,"line":228},[33,44318,33211],{"class":47},[33,44320,73],{"class":39},[33,44322,32708],{"class":47},[33,44324,32716],{"class":119},[33,44326,32719],{"class":47},[33,44328,44329,44331,44333,44335],{"class":35,"line":1345},[33,44330,33224],{"class":955},[33,44332,73],{"class":39},[33,44334,32729],{"class":76},[33,44336,32719],{"class":47},[33,44338,44339,44341,44343,44345,44347,44349,44351],{"class":35,"line":1350},[33,44340,33235],{"class":955},[33,44342,73],{"class":39},[33,44344,32746],{"class":47},[33,44346,32749],{"class":955},[33,44348,73],{"class":39},[33,44350,36702],{"class":76},[33,44352,32757],{"class":47},[33,44354,44355,44357,44359,44361],{"class":35,"line":1359},[33,44356,33252],{"class":955},[33,44358,73],{"class":39},[33,44360,32729],{"class":76},[33,44362,884],{"class":47},[33,44364,44365,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389,44391,44393],{"class":35,"line":1364},[33,44366,33263],{"class":47},[33,44368,73],{"class":39},[33,44370,33268],{"class":47},[33,44372,33271],{"class":76},[33,44374,345],{"class":47},[33,44376,33276],{"class":76},[33,44378,2057],{"class":39},[33,44380,1196],{"class":76},[33,44382,33283],{"class":47},[33,44384,33271],{"class":76},[33,44386,345],{"class":47},[33,44388,33290],{"class":76},[33,44390,2057],{"class":39},[33,44392,1196],{"class":76},[33,44394,33297],{"class":47},[33,44396,44397,44399,44401,44403,44405,44407],{"class":35,"line":1370},[33,44398,33302],{"class":47},[33,44400,73],{"class":39},[33,44402,33307],{"class":47},[33,44404,32790],{"class":955},[33,44406,73],{"class":39},[33,44408,32795],{"class":47},[33,44410,44411,44413,44415,44417],{"class":35,"line":1425},[33,44412,33318],{"class":955},[33,44414,73],{"class":39},[33,44416,1814],{"class":76},[33,44418,32719],{"class":47},[33,44420,44421,44423,44425,44427],{"class":35,"line":1438},[33,44422,33330],{"class":955},[33,44424,73],{"class":39},[33,44426,32729],{"class":76},[33,44428,32719],{"class":47},[33,44430,44431],{"class":35,"line":1451},[33,44432,33341],{"class":60},[33,44434,44435,44437,44439,44441],{"class":35,"line":1457},[33,44436,33346],{"class":955},[33,44438,73],{"class":39},[33,44440,737],{"class":76},[33,44442,884],{"class":47},[33,44444,44445,44447,44449,44451,44453,44455],{"class":35,"line":1466},[33,44446,33357],{"class":47},[33,44448,73],{"class":39},[33,44450,32787],{"class":47},[33,44452,32790],{"class":955},[33,44454,73],{"class":39},[33,44456,33368],{"class":47},[33,44458,44459,44461,44463,44465],{"class":35,"line":1471},[33,44460,33373],{"class":955},[33,44462,73],{"class":39},[33,44464,1814],{"class":76},[33,44466,32719],{"class":47},[33,44468,44469,44471,44473,44475],{"class":35,"line":1477},[33,44470,33384],{"class":955},[33,44472,73],{"class":39},[33,44474,32729],{"class":76},[33,44476,32719],{"class":47},[33,44478,44479,44481,44483,44485],{"class":35,"line":1504},[33,44480,33395],{"class":955},[33,44482,73],{"class":39},[33,44484,737],{"class":76},[33,44486,884],{"class":47},[33,44488,44489,44491],{"class":35,"line":1509},[33,44490,5489],{"class":39},[33,44492,33408],{"class":47},[33,44494,44495],{"class":35,"line":1525},[33,44496,160],{"emptyLinePlaceholder":159},[33,44498,44499],{"class":35,"line":1535},[33,44500,33417],{"class":60},[33,44502,44503],{"class":35,"line":1540},[33,44504,33422],{"class":60},[33,44506,44507],{"class":35,"line":4027},[33,44508,160],{"emptyLinePlaceholder":159},[33,44510,44511],{"class":35,"line":4032},[33,44512,33431],{"class":60},[33,44514,44515,44517,44519],{"class":35,"line":9199},[33,44516,33200],{"class":39},[33,44518,33438],{"class":43},[33,44520,33441],{"class":47},[33,44522,44523,44525,44527,44529,44531,44533,44535,44537,44539],{"class":35,"line":9223},[33,44524,32490],{"class":47},[33,44526,73],{"class":39},[33,44528,31704],{"class":47},[33,44530,32497],{"class":119},[33,44532,3145],{"class":39},[33,44534,32502],{"class":47},[33,44536,3142],{"class":39},[33,44538,33460],{"class":119},[33,44540,884],{"class":47},[33,44542,44543],{"class":35,"line":9228},[33,44544,160],{"emptyLinePlaceholder":159},[33,44546,44547],{"class":35,"line":9234},[33,44548,160],{"emptyLinePlaceholder":159},[33,44550,44551],{"class":35,"line":9261},[33,44552,33475],{"class":60},[33,44554,44555],{"class":35,"line":9266},[33,44556,33480],{"class":60},[33,44558,44559],{"class":35,"line":9272},[33,44560,33485],{"class":60},[33,44562,44563,44565,44567,44569,44571,44573,44575],{"class":35,"line":9284},[33,44564,33490],{"class":47},[33,44566,73],{"class":39},[33,44568,33495],{"class":47},[33,44570,33498],{"class":955},[33,44572,73],{"class":39},[33,44574,33503],{"class":76},[33,44576,884],{"class":47},[33,44578,44579],{"class":35,"line":9296},[33,44580,160],{"emptyLinePlaceholder":159},[33,44582,44583],{"class":35,"line":9308},[33,44584,33514],{"class":60},[33,44586,44587,44589,44591],{"class":35,"line":10967},[33,44588,33519],{"class":47},[33,44590,73],{"class":39},[33,44592,33524],{"class":47},[33,44594,44595],{"class":35,"line":10992},[33,44596,160],{"emptyLinePlaceholder":159},[33,44598,44599],{"class":35,"line":11015},[33,44600,33533],{"class":60},[33,44602,44603,44605,44607],{"class":35,"line":11039},[33,44604,32542],{"class":47},[33,44606,73],{"class":39},[33,44608,33542],{"class":47},[33,44610,44611],{"class":35,"line":11044},[33,44612,33547],{"class":60},[33,44614,44615],{"class":35,"line":11049},[33,44616,33552],{"class":60},[33,44618,44619],{"class":35,"line":11054},[33,44620,33557],{"class":60},[33,44622,44623,44625,44627],{"class":35,"line":11063},[33,44624,33562],{"class":47},[33,44626,73],{"class":39},[33,44628,33567],{"class":47},[33,44630,44631],{"class":35,"line":11068},[33,44632,160],{"emptyLinePlaceholder":159},[33,44634,44635],{"class":35,"line":11074},[33,44636,160],{"emptyLinePlaceholder":159},[33,44638,44639],{"class":35,"line":11095},[33,44640,33580],{"class":60},[33,44642,44643],{"class":35,"line":11101},[33,44644,33585],{"class":60},[33,44646,44647,44649,44651],{"class":35,"line":11115},[33,44648,33590],{"class":47},[33,44650,73],{"class":39},[33,44652,33595],{"class":76},[33,44654,44655],{"class":35,"line":11121},[33,44656,33600],{"class":60},[33,44658,44659,44661,44663],{"class":35,"line":11148},[33,44660,33605],{"class":47},[33,44662,73],{"class":39},[33,44664,33610],{"class":47},[33,44666,44667],{"class":35,"line":11157},[33,44668,33615],{"class":60},[33,44670,44671,44673,44675],{"class":35,"line":11163},[33,44672,33620],{"class":47},[33,44674,73],{"class":39},[33,44676,33610],{"class":47},[33,44678,44679],{"class":35,"line":11171},[33,44680,33629],{"class":60},[33,44682,44683,44685,44687],{"class":35,"line":11176},[33,44684,33634],{"class":47},[33,44686,73],{"class":39},[33,44688,33610],{"class":47},[33,44690,44691],{"class":35,"line":17855},[33,44692,33643],{"class":60},[33,44694,44695,44697,44699],{"class":35,"line":17861},[33,44696,33648],{"class":47},[33,44698,73],{"class":39},[33,44700,33610],{"class":47},[33,44702,44703],{"class":35,"line":17884},[33,44704,160],{"emptyLinePlaceholder":159},[33,44706,44707],{"class":35,"line":17890},[33,44708,33661],{"class":60},[33,44710,44711,44713,44715],{"class":35,"line":17913},[33,44712,33666],{"class":47},[33,44714,73],{"class":39},[33,44716,33671],{"class":47},[33,44718,44719],{"class":35,"line":17927},[33,44720,160],{"emptyLinePlaceholder":159},[33,44722,44723],{"class":35,"line":17947},[33,44724,160],{"emptyLinePlaceholder":159},[33,44726,44727],{"class":35,"line":17953},[33,44728,33684],{"class":60},[33,44730,44731,44733,44735,44737,44739],{"class":35,"line":17964},[33,44732,857],{"class":39},[33,44734,33691],{"class":47},[33,44736,27296],{"class":39},[33,44738,33696],{"class":76},[33,44740,33699],{"class":47},[33,44742,44743,44745,44747,44749,44751,44753,44755,44757,44759,44761,44763],{"class":35,"line":17987},[33,44744,33704],{"class":76},[33,44746,345],{"class":47},[33,44748,33709],{"class":119},[33,44750,33712],{"class":76},[33,44752,2184],{"class":119},[33,44754,33712],{"class":76},[33,44756,1866],{"class":119},[33,44758,33721],{"class":47},[33,44760,1199],{"class":39},[33,44762,701],{"class":76},[33,44764,31750],{"class":47},[33,44766,44767,44769,44771,44773,44775,44777],{"class":35,"line":18009},[33,44768,33704],{"class":76},[33,44770,345],{"class":47},[33,44772,33736],{"class":119},[33,44774,2057],{"class":39},[33,44776,77],{"class":76},[33,44778,884],{"class":47},[33,44780,44781],{"class":35,"line":18014},[33,44782,160],{"emptyLinePlaceholder":159},[33,44784,44785],{"class":35,"line":18020},[33,44786,33751],{"class":60},[33,44788,44789],{"class":35,"line":18034},[33,44790,33756],{"class":60},[33,44792,44793,44795,44797],{"class":35,"line":18047},[33,44794,33761],{"class":47},[33,44796,73],{"class":39},[33,44798,33595],{"class":76},[33,44800,44801],{"class":35,"line":18052},[33,44802,33770],{"class":60},[33,44804,44805,44807,44809],{"class":35,"line":18066},[33,44806,33775],{"class":47},[33,44808,73],{"class":39},[33,44810,4493],{"class":76},[33,44812,44813],{"class":35,"line":18071},[33,44814,33784],{"class":60},[33,44816,44817,44819,44821],{"class":35,"line":18077},[33,44818,33789],{"class":47},[33,44820,73],{"class":39},[33,44822,33595],{"class":76},[33,44824,44825],{"class":35,"line":18082},[33,44826,33798],{"class":60},[33,44828,44829,44831,44833],{"class":35,"line":18096},[33,44830,33803],{"class":47},[33,44832,73],{"class":39},[33,44834,4493],{"class":76},[33,44836,44837],{"class":35,"line":18101},[33,44838,33812],{"class":60},[33,44840,44841,44843,44845],{"class":35,"line":18106},[33,44842,33817],{"class":47},[33,44844,73],{"class":39},[33,44846,4493],{"class":76},[33,44848,44849],{"class":35,"line":18120},[33,44850,33826],{"class":60},[33,44852,44853,44855,44857],{"class":35,"line":18132},[33,44854,33831],{"class":47},[33,44856,73],{"class":39},[33,44858,4493],{"class":76},[33,44860,44861],{"class":35,"line":18137},[33,44862,33840],{"class":60},[33,44864,44865,44867,44869,44871,44873],{"class":35,"line":18150},[33,44866,1216],{"class":39},[33,44868,32854],{"class":47},[33,44870,27296],{"class":39},[33,44872,32859],{"class":76},[33,44874,33853],{"class":47},[33,44876,44877],{"class":35,"line":18155},[33,44878,33858],{"class":60},[33,44880,44881,44883,44885],{"class":35,"line":18160},[33,44882,33863],{"class":47},[33,44884,73],{"class":39},[33,44886,33868],{"class":47},[33,44888,44889],{"class":35,"line":18165},[33,44890,33873],{"class":60},[33,44892,44893,44895,44897],{"class":35,"line":18178},[33,44894,33878],{"class":47},[33,44896,73],{"class":39},[33,44898,33883],{"class":47},[33,44900,44901],{"class":35,"line":18183},[33,44902,33889],{"class":60},[33,44904,44905],{"class":35,"line":33886},[33,44906,33895],{"class":47},[33,44908,44909],{"class":35,"line":33892},[33,44910,33901],{"class":60},[33,44912,44913],{"class":35,"line":33898},[33,44914,33907],{"class":60},[33,44916,44917,44919,44921],{"class":35,"line":33904},[33,44918,33913],{"class":47},[33,44920,73],{"class":39},[33,44922,33918],{"class":47},[33,44924,44925],{"class":35,"line":33910},[33,44926,33924],{"class":60},[33,44928,44929,44931,44933,44935,44937,44939,44941],{"class":35,"line":33921},[33,44930,33930],{"class":47},[33,44932,73],{"class":39},[33,44934,33935],{"class":47},[33,44936,33938],{"class":955},[33,44938,73],{"class":39},[33,44940,701],{"class":76},[33,44942,884],{"class":47},[33,44944,44945],{"class":35,"line":33927},[33,44946,33950],{"class":60},[33,44948,44949,44951,44953],{"class":35,"line":33947},[33,44950,33956],{"class":47},[33,44952,73],{"class":39},[33,44954,33961],{"class":47},[33,44956,44957],{"class":35,"line":33953},[33,44958,33967],{"class":60},[33,44960,44961],{"class":35,"line":33964},[33,44962,33973],{"class":47},[33,44964,44965],{"class":35,"line":33970},[33,44966,33979],{"class":60},[33,44968,44969],{"class":35,"line":33976},[33,44970,33985],{"class":47},[33,44972,44973],{"class":35,"line":33982},[33,44974,33991],{"class":60},[33,44976,44977],{"class":35,"line":33988},[33,44978,33997],{"class":47},[33,44980,44981],{"class":35,"line":33994},[33,44982,34003],{"class":60},[33,44984,44985,44987,44989,44991,44993,44995,44997],{"class":35,"line":34000},[33,44986,34009],{"class":47},[33,44988,10728],{"class":39},[33,44990,34014],{"class":47},[33,44992,2057],{"class":39},[33,44994,34019],{"class":47},[33,44996,766],{"class":76},[33,44998,884],{"class":47},[33,45000,45001],{"class":35,"line":34006},[33,45002,34029],{"class":60},[33,45004,45005,45007,45009,45011,45013],{"class":35,"line":34026},[33,45006,34035],{"class":47},[33,45008,10728],{"class":39},[33,45010,34040],{"class":47},[33,45012,4359],{"class":39},[33,45014,34045],{"class":47},[33,45016,45017],{"class":35,"line":34032},[33,45018,34051],{"class":60},[33,45020,45021,45023,45025,45027,45029],{"class":35,"line":34048},[33,45022,34057],{"class":47},[33,45024,10728],{"class":39},[33,45026,34019],{"class":47},[33,45028,766],{"class":76},[33,45030,884],{"class":47},[33,45032,45033],{"class":35,"line":34054},[33,45034,34071],{"class":60},[33,45036,45037,45039,45041,45043,45045],{"class":35,"line":34068},[33,45038,1216],{"class":39},[33,45040,34079],{"class":47},[33,45042,27296],{"class":39},[33,45044,32859],{"class":76},[33,45046,34086],{"class":47},[33,45048,45049],{"class":35,"line":34074},[33,45050,34092],{"class":60},[33,45052,45053,45055,45057],{"class":35,"line":34089},[33,45054,33863],{"class":47},[33,45056,73],{"class":39},[33,45058,33868],{"class":47},[33,45060,45061],{"class":35,"line":34095},[33,45062,34107],{"class":60},[33,45064,45065,45067,45069],{"class":35,"line":34104},[33,45066,33878],{"class":47},[33,45068,73],{"class":39},[33,45070,33883],{"class":47},[33,45072,45073],{"class":35,"line":34110},[33,45074,34122],{"class":60},[33,45076,45077],{"class":35,"line":34119},[33,45078,34128],{"class":47},[33,45080,45081],{"class":35,"line":34125},[33,45082,37609],{"class":60},[33,45084,45085,45087],{"class":35,"line":34131},[33,45086,34134],{"class":39},[33,45088,34137],{"class":47},[33,45090,45091],{"class":35,"line":34140},[33,45092,34143],{"class":60},[33,45094,45095,45097,45099],{"class":35,"line":34146},[33,45096,37624],{"class":47},[33,45098,73],{"class":39},[33,45100,33918],{"class":47},[33,45102,45103],{"class":35,"line":34157},[33,45104,34160],{"class":60},[33,45106,45107,45109,45111,45113,45115,45117,45119],{"class":35,"line":34163},[33,45108,37637],{"class":47},[33,45110,73],{"class":39},[33,45112,33935],{"class":47},[33,45114,33938],{"class":955},[33,45116,73],{"class":39},[33,45118,701],{"class":76},[33,45120,884],{"class":47},[33,45122,45123],{"class":35,"line":34182},[33,45124,34185],{"class":60},[33,45126,45127,45129,45131],{"class":35,"line":34188},[33,45128,37658],{"class":47},[33,45130,73],{"class":39},[33,45132,33961],{"class":47},[33,45134,45135],{"class":35,"line":34199},[33,45136,34202],{"class":60},[33,45138,45139,45141,45143,45145,45147,45149,45151],{"class":35,"line":34205},[33,45140,37671],{"class":47},[33,45142,10728],{"class":39},[33,45144,37676],{"class":47},[33,45146,2057],{"class":39},[33,45148,34019],{"class":47},[33,45150,766],{"class":76},[33,45152,884],{"class":47},[33,45154,45155,45157,45159,45161,45163],{"class":35,"line":34225},[33,45156,37689],{"class":47},[33,45158,10728],{"class":39},[33,45160,34040],{"class":47},[33,45162,4359],{"class":39},[33,45164,34045],{"class":47},[33,45166,45167],{"class":35,"line":34241},[33,45168,37702],{"class":60},[33,45170,45171,45173,45175,45177,45179],{"class":35,"line":34247},[33,45172,37707],{"class":47},[33,45174,10728],{"class":39},[33,45176,34019],{"class":47},[33,45178,766],{"class":76},[33,45180,884],{"class":47},[33,45182,45183],{"class":35,"line":34261},[33,45184,34264],{"class":60},[33,45186,45187],{"class":35,"line":34267},[33,45188,34270],{"class":60},[33,45190,45191,45193,45195],{"class":35,"line":34273},[33,45192,34276],{"class":47},[33,45194,2184],{"class":39},[33,45196,34281],{"class":47},[33,45198,45199],{"class":35,"line":34284},[33,45200,34287],{"class":60},[33,45202,45203],{"class":35,"line":34290},[33,45204,34293],{"class":60},[33,45206,45207,45209,45211],{"class":35,"line":34296},[33,45208,34299],{"class":47},[33,45210,2184],{"class":39},[33,45212,34281],{"class":47},[33,45214,45215],{"class":35,"line":34306},[33,45216,34309],{"class":60},[33,45218,45219,45221,45223],{"class":35,"line":34312},[33,45220,34315],{"class":47},[33,45222,2184],{"class":39},[33,45224,34320],{"class":47},[33,45226,45227],{"class":35,"line":34323},[33,45228,34326],{"class":60},[33,45230,45231,45233,45235],{"class":35,"line":34329},[33,45232,34332],{"class":47},[33,45234,2184],{"class":39},[33,45236,34320],{"class":47},[33,45238,45239],{"class":35,"line":34339},[33,45240,160],{"emptyLinePlaceholder":159},[33,45242,45243],{"class":35,"line":34344},[33,45244,34347],{"class":60},[33,45246,45247,45249,45251,45253,45255,45257,45259,45261,45263,45265,45267,45269,45271,45273,45275,45277,45279,45281,45283,45285],{"class":35,"line":34350},[33,45248,33704],{"class":76},[33,45250,345],{"class":47},[33,45252,4994],{"class":119},[33,45254,33712],{"class":76},[33,45256,34361],{"class":119},[33,45258,698],{"class":76},[33,45260,34366],{"class":39},[33,45262,2542],{"class":76},[33,45264,34371],{"class":119},[33,45266,698],{"class":76},[33,45268,34366],{"class":39},[33,45270,2542],{"class":76},[33,45272,4994],{"class":119},[33,45274,34382],{"class":47},[33,45276,1199],{"class":39},[33,45278,701],{"class":76},[33,45280,34389],{"class":47},[33,45282,1199],{"class":39},[33,45284,701],{"class":76},[33,45286,34396],{"class":47},[33,45288,45289,45291,45293,45295,45297,45299,45301,45303,45305,45307,45309,45311,45313,45315,45317,45319,45321,45323,45325,45327],{"class":35,"line":34399},[33,45290,33704],{"class":76},[33,45292,345],{"class":47},[33,45294,4994],{"class":119},[33,45296,33712],{"class":76},[33,45298,34410],{"class":119},[33,45300,698],{"class":76},[33,45302,34366],{"class":39},[33,45304,2542],{"class":76},[33,45306,34419],{"class":119},[33,45308,698],{"class":76},[33,45310,34366],{"class":39},[33,45312,2542],{"class":76},[33,45314,4994],{"class":119},[33,45316,34430],{"class":47},[33,45318,1199],{"class":39},[33,45320,701],{"class":76},[33,45322,34437],{"class":47},[33,45324,1199],{"class":39},[33,45326,701],{"class":76},[33,45328,34396],{"class":47},[33,45330,45331],{"class":35,"line":34446},[33,45332,160],{"emptyLinePlaceholder":159},[33,45334,45335],{"class":35,"line":34451},[33,45336,34454],{"class":60},[33,45338,45339,45341,45343,45345,45347,45349,45351],{"class":35,"line":34457},[33,45340,3915],{"class":39},[33,45342,34462],{"class":47},[33,45344,1199],{"class":39},[33,45346,701],{"class":76},[33,45348,693],{"class":47},[33,45350,1265],{"class":39},[33,45352,34473],{"class":47},[33,45354,45355],{"class":35,"line":34476},[33,45356,34479],{"class":60},[33,45358,45359,45361,45363,45365,45367,45369,45371],{"class":35,"line":34482},[33,45360,34485],{"class":47},[33,45362,1666],{"class":76},[33,45364,73],{"class":39},[33,45366,34492],{"class":47},[33,45368,1199],{"class":39},[33,45370,701],{"class":76},[33,45372,34499],{"class":47},[33,45374,45375],{"class":35,"line":34502},[33,45376,34505],{"class":60},[33,45378,45379],{"class":35,"line":34508},[33,45380,34511],{"class":60},[33,45382,45383,45385,45387],{"class":35,"line":34514},[33,45384,34517],{"class":47},[33,45386,73],{"class":39},[33,45388,33567],{"class":47},[33,45390,45391],{"class":35,"line":34524},[33,45392,160],{"emptyLinePlaceholder":159},[33,45394,45395],{"class":35,"line":34529},[33,45396,34532],{"class":60},[33,45398,45399,45401,45403,45405,45407],{"class":35,"line":34535},[33,45400,34538],{"class":47},[33,45402,73],{"class":39},[33,45404,34543],{"class":47},[33,45406,1199],{"class":39},[33,45408,34548],{"class":47},[33,45410,45411,45413,45415,45417,45419,45421,45423,45425,45427,45429,45431,45433,45435,45437,45439,45441,45443,45445],{"class":35,"line":34551},[33,45412,33704],{"class":76},[33,45414,345],{"class":47},[33,45416,34558],{"class":119},[33,45418,698],{"class":76},[33,45420,34563],{"class":39},[33,45422,2542],{"class":76},[33,45424,2144],{"class":119},[33,45426,698],{"class":76},[33,45428,34563],{"class":39},[33,45430,2542],{"class":76},[33,45432,34576],{"class":119},[33,45434,34579],{"class":47},[33,45436,34582],{"class":39},[33,45438,2505],{"class":76},[33,45440,34587],{"class":47},[33,45442,1939],{"class":39},[33,45444,2505],{"class":76},[33,45446,31750],{"class":47},[33,45448,45449],{"class":35,"line":34596},[33,45450,37986],{"class":60},[33,45452,45453],{"class":35,"line":34602},[33,45454,37991],{"class":60},[33,45456,45457,45459,45461],{"class":35,"line":34608},[33,45458,37996],{"class":47},[33,45460,34620],{"class":119},[33,45462,884],{"class":47},[33,45464,45465],{"class":35,"line":34614},[33,45466,34640],{"class":60},[33,45468,45469,45471,45473,45475,45477,45479],{"class":35,"line":34625},[33,45470,34646],{"class":47},[33,45472,73],{"class":39},[33,45474,34651],{"class":47},[33,45476,34654],{"class":955},[33,45478,73],{"class":39},[33,45480,54],{"class":47},[33,45482,45483,45485,45487,45489],{"class":35,"line":34631},[33,45484,34664],{"class":119},[33,45486,2458],{"class":47},[33,45488,34669],{"class":76},[33,45490,34672],{"class":47},[33,45492,45493,45495],{"class":35,"line":34637},[33,45494,34678],{"class":119},[33,45496,34681],{"class":47},[33,45498,45499,45501],{"class":35,"line":34643},[33,45500,34687],{"class":119},[33,45502,34690],{"class":47},[33,45504,45505,45507],{"class":35,"line":34661},[33,45506,34696],{"class":119},[33,45508,34699],{"class":47},[33,45510,45511,45513],{"class":35,"line":34675},[33,45512,34705],{"class":119},[33,45514,34708],{"class":47},[33,45516,45517],{"class":35,"line":34684},[33,45518,34714],{"class":47},[33,45520,45521],{"class":35,"line":34693},[33,45522,34720],{"class":60},[33,45524,45525,45527],{"class":35,"line":34702},[33,45526,5489],{"class":39},[33,45528,34728],{"class":47},[33,45530,45531],{"class":35,"line":34711},[33,45532,160],{"emptyLinePlaceholder":159},[33,45534,45535],{"class":35,"line":34717},[33,45536,34739],{"class":60},[33,45538,45539,45541,45543],{"class":35,"line":34723},[33,45540,33200],{"class":39},[33,45542,34747],{"class":43},[33,45544,34750],{"class":47},[33,45546,45547],{"class":35,"line":34731},[33,45548,34756],{"class":60},[33,45550,45551,45553,45555,45557,45559,45561,45563,45565],{"class":35,"line":34736},[33,45552,34762],{"class":47},[33,45554,32946],{"class":955},[33,45556,73],{"class":39},[33,45558,345],{"class":47},[33,45560,2099],{"class":76},[33,45562,704],{"class":47},[33,45564,717],{"class":76},[33,45566,31750],{"class":47},[33,45568,45569],{"class":35,"line":34742},[33,45570,34782],{"class":60},[33,45572,45573],{"class":35,"line":34753},[33,45574,34788],{"class":60},[33,45576,45577],{"class":35,"line":34759},[33,45578,34794],{"class":60},[33,45580,45581,45583,45585,45587,45589,45591,45593],{"class":35,"line":34779},[33,45582,32980],{"class":47},[33,45584,701],{"class":76},[33,45586,704],{"class":47},[33,45588,707],{"class":76},[33,45590,704],{"class":47},[33,45592,701],{"class":76},[33,45594,884],{"class":47},[33,45596,45597],{"class":35,"line":34785},[33,45598,34817],{"class":60},[33,45600,45601],{"class":35,"line":34791},[33,45602,34823],{"class":60},[33,45604,45605],{"class":35,"line":34797},[33,45606,34829],{"class":60},[33,45608,45609],{"class":35,"line":34814},[33,45610,34835],{"class":60},[33,45612,45613],{"class":35,"line":34820},[33,45614,34841],{"class":60},[33,45616,45617,45619,45621,45623,45625,45627,45629,45631,45633],{"class":35,"line":34826},[33,45618,34847],{"class":47},[33,45620,34850],{"class":119},[33,45622,34853],{"class":47},[33,45624,34856],{"class":119},[33,45626,704],{"class":47},[33,45628,34861],{"class":955},[33,45630,73],{"class":39},[33,45632,34866],{"class":119},[33,45634,884],{"class":47},[33,45636,45637,45639,45641,45643,45645,45647,45649,45651,45653],{"class":35,"line":34832},[33,45638,34847],{"class":47},[33,45640,34850],{"class":119},[33,45642,34878],{"class":47},[33,45644,34881],{"class":119},[33,45646,704],{"class":47},[33,45648,34861],{"class":955},[33,45650,73],{"class":39},[33,45652,34890],{"class":119},[33,45654,884],{"class":47},[33,45656,45657],{"class":35,"line":34838},[33,45658,34898],{"class":60},[33,45660,45661],{"class":35,"line":34844},[33,45662,34904],{"class":47},[33,45664,45665],{"class":35,"line":34871},[33,45666,34910],{"class":60},[33,45668,45669,45671,45673],{"class":35,"line":34895},[33,45670,34916],{"class":47},[33,45672,34919],{"class":119},[33,45674,884],{"class":47},[33,45676,45677,45679,45681],{"class":35,"line":34901},[33,45678,34927],{"class":47},[33,45680,34930],{"class":119},[33,45682,884],{"class":47},[33,45684,45685],{"class":35,"line":34907},[33,45686,34938],{"class":60},[33,45688,45689,45691,45693,45695,45697,45699,45701],{"class":35,"line":34913},[33,45690,32980],{"class":47},[33,45692,701],{"class":76},[33,45694,704],{"class":47},[33,45696,707],{"class":76},[33,45698,704],{"class":47},[33,45700,707],{"class":76},[33,45702,884],{"class":47},[33,45704,45705,45707,45709,45711,45713,45715,45717,45719,45721],{"class":35,"line":34924},[33,45706,34847],{"class":47},[33,45708,34850],{"class":119},[33,45710,34965],{"class":47},[33,45712,34856],{"class":119},[33,45714,704],{"class":47},[33,45716,34861],{"class":955},[33,45718,73],{"class":39},[33,45720,34976],{"class":119},[33,45722,884],{"class":47},[33,45724,45725,45727,45729,45731,45733,45735,45737,45739,45741],{"class":35,"line":34935},[33,45726,34847],{"class":47},[33,45728,34850],{"class":119},[33,45730,34988],{"class":47},[33,45732,34881],{"class":119},[33,45734,704],{"class":47},[33,45736,34861],{"class":955},[33,45738,73],{"class":39},[33,45740,34999],{"class":119},[33,45742,884],{"class":47},[33,45744,45745],{"class":35,"line":34941},[33,45746,35007],{"class":60},[33,45748,45749],{"class":35,"line":34958},[33,45750,34904],{"class":47},[33,45752,45753,45755,45757],{"class":35,"line":34981},[33,45754,34916],{"class":47},[33,45756,34850],{"class":119},[33,45758,884],{"class":47},[33,45760,45761,45763,45765],{"class":35,"line":35004},[33,45762,34927],{"class":47},[33,45764,35029],{"class":119},[33,45766,884],{"class":47},[33,45768,45769],{"class":35,"line":35010},[33,45770,35037],{"class":47},[33,45772,45773],{"class":35,"line":35015},[33,45774,160],{"emptyLinePlaceholder":159},[33,45776,45777],{"class":35,"line":35024},[33,45778,35048],{"class":60},[33,45780,45781,45783,45785,45787,45789],{"class":35,"line":35034},[33,45782,2987],{"class":39},[33,45784,32473],{"class":76},[33,45786,4359],{"class":39},[33,45788,32478],{"class":119},[33,45790,5141],{"class":47},[33,45792,45793],{"class":35,"line":35040},[33,45794,35067],{"class":60},[33,45796,45797,45800,45802],{"class":35,"line":35045},[33,45798,45799],{"class":47},"    GoogLeNet",[33,45801,73],{"class":39},[33,45803,45804],{"class":47},"GoogLeNet(Inception)\n",[33,45806,45807,45809,45811],{"class":35,"line":35051},[33,45808,35084],{"class":47},[33,45810,73],{"class":39},[33,45812,35089],{"class":47},[33,45814,45815,45817,45819,45822,45824,45826,45828],{"class":35,"line":35064},[33,45816,34646],{"class":47},[33,45818,73],{"class":39},[33,45820,45821],{"class":47},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[33,45823,35102],{"class":955},[33,45825,73],{"class":39},[33,45827,2547],{"class":76},[33,45829,884],{"class":47},[33,45831,45832],{"class":35,"line":35070},[33,45833,35114],{"class":47},[574,45835,45836],{"start":57},[564,45837,41827],{},[23,45839,45841],{"className":31631,"code":45840,"language":31633,"meta":28,"style":28},"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",[30,45842,45843,45849,45859,45869,45873,45883,45894,45898,45902,45906,45914,45930,45940,45956,45966,45980,45984,45994,46004,46014,46020,46024,46028,46036,46040,46056,46064,46068,46072,46080,46088,46092,46096,46100,46104,46110,46114,46124,46132,46140,46144,46148,46152,46160,46164,46180,46184,46188,46192,46204,46208,46220,46224,46228,46240,46244,46254,46258,46262,46274,46278,46286,46290,46294,46302,46306,46314,46318,46322,46326,46330,46334,46350,46358,46362,46366,46414,46420,46424,46434,46442,46450,46454,46458,46462,46466,46474,46478,46494,46498,46506,46514],{"__ignoreMap":28},[33,45844,45845,45847],{"class":35,"line":36},[33,45846,31645],{"class":39},[33,45848,31648],{"class":47},[33,45850,45851,45853,45855,45857],{"class":35,"line":51},[33,45852,31645],{"class":39},[33,45854,32668],{"class":47},[33,45856,32636],{"class":39},[33,45858,32673],{"class":47},[33,45860,45861,45863,45865,45867],{"class":35,"line":57},[33,45862,31990],{"class":39},[33,45864,32651],{"class":47},[33,45866,31645],{"class":39},[33,45868,32656],{"class":47},[33,45870,45871],{"class":35,"line":64},[33,45872,35175],{"class":60},[33,45874,45875,45877,45879,45881],{"class":35,"line":83},[33,45876,31990],{"class":39},[33,45878,32621],{"class":47},[33,45880,31645],{"class":39},[33,45882,32626],{"class":47},[33,45884,45885,45887,45889,45891],{"class":35,"line":89},[33,45886,31990],{"class":39},[33,45888,33167],{"class":47},[33,45890,31645],{"class":39},[33,45892,45893],{"class":47}," GoogLeNet,Inception\n",[33,45895,45896],{"class":35,"line":98},[33,45897,160],{"emptyLinePlaceholder":159},[33,45899,45900],{"class":35,"line":110},[33,45901,160],{"emptyLinePlaceholder":159},[33,45903,45904],{"class":35,"line":134},[33,45905,35204],{"class":60},[33,45907,45908,45910,45912],{"class":35,"line":156},[33,45909,33200],{"class":39},[33,45911,35211],{"class":43},[33,45913,33206],{"class":47},[33,45915,45916,45918,45920,45922,45924,45926,45928],{"class":35,"line":163},[33,45917,35218],{"class":47},[33,45919,73],{"class":39},[33,45921,32708],{"class":47},[33,45923,32711],{"class":955},[33,45925,73],{"class":39},[33,45927,32716],{"class":119},[33,45929,32719],{"class":47},[33,45931,45932,45934,45936,45938],{"class":35,"line":169},[33,45933,35235],{"class":955},[33,45935,73],{"class":39},[33,45937,35240],{"class":76},[33,45939,32719],{"class":47},[33,45941,45942,45944,45946,45948,45950,45952,45954],{"class":35,"line":175},[33,45943,35247],{"class":955},[33,45945,73],{"class":39},[33,45947,32746],{"class":47},[33,45949,32749],{"class":955},[33,45951,73],{"class":39},[33,45953,36702],{"class":76},[33,45955,32757],{"class":47},[33,45957,45958,45960,45962,45964],{"class":35,"line":181},[33,45959,35264],{"class":955},[33,45961,73],{"class":39},[33,45963,32729],{"class":76},[33,45965,884],{"class":47},[33,45967,45968,45970,45972,45974,45976,45978],{"class":35,"line":196},[33,45969,35275],{"class":47},[33,45971,73],{"class":39},[33,45973,32787],{"class":47},[33,45975,32790],{"class":955},[33,45977,73],{"class":39},[33,45979,35286],{"class":47},[33,45981,45982],{"class":35,"line":213},[33,45983,35291],{"class":60},[33,45985,45986,45988,45990,45992],{"class":35,"line":228},[33,45987,35296],{"class":955},[33,45989,73],{"class":39},[33,45991,701],{"class":76},[33,45993,32719],{"class":47},[33,45995,45996,45998,46000,46002],{"class":35,"line":1345},[33,45997,35307],{"class":955},[33,45999,73],{"class":39},[33,46001,32729],{"class":76},[33,46003,32719],{"class":47},[33,46005,46006,46008,46010,46012],{"class":35,"line":1350},[33,46007,35318],{"class":955},[33,46009,73],{"class":39},[33,46011,766],{"class":76},[33,46013,884],{"class":47},[33,46015,46016,46018],{"class":35,"line":1359},[33,46017,5489],{"class":39},[33,46019,35331],{"class":47},[33,46021,46022],{"class":35,"line":1364},[33,46023,160],{"emptyLinePlaceholder":159},[33,46025,46026],{"class":35,"line":1370},[33,46027,35340],{"class":60},[33,46029,46030,46032,46034],{"class":35,"line":1425},[33,46031,33200],{"class":39},[33,46033,35347],{"class":43},[33,46035,35350],{"class":47},[33,46037,46038],{"class":35,"line":1438},[33,46039,35355],{"class":60},[33,46041,46042,46044,46046,46048,46050,46052,46054],{"class":35,"line":1451},[33,46043,32490],{"class":47},[33,46045,73],{"class":39},[33,46047,32497],{"class":119},[33,46049,3145],{"class":39},[33,46051,32502],{"class":47},[33,46053,3142],{"class":39},[33,46055,35372],{"class":119},[33,46057,46058,46060,46062],{"class":35,"line":1457},[33,46059,32542],{"class":47},[33,46061,73],{"class":39},[33,46063,33542],{"class":47},[33,46065,46066],{"class":35,"line":1466},[33,46067,160],{"emptyLinePlaceholder":159},[33,46069,46070],{"class":35,"line":1471},[33,46071,35389],{"class":60},[33,46073,46074,46076,46078],{"class":35,"line":1477},[33,46075,35394],{"class":47},[33,46077,73],{"class":39},[33,46079,33595],{"class":76},[33,46081,46082,46084,46086],{"class":35,"line":1504},[33,46083,35403],{"class":47},[33,46085,73],{"class":39},[33,46087,4493],{"class":76},[33,46089,46090],{"class":35,"line":1509},[33,46091,160],{"emptyLinePlaceholder":159},[33,46093,46094],{"class":35,"line":1525},[33,46095,35416],{"class":60},[33,46097,46098],{"class":35,"line":1535},[33,46099,35421],{"class":60},[33,46101,46102],{"class":35,"line":1540},[33,46103,35426],{"class":60},[33,46105,46106,46108],{"class":35,"line":4027},[33,46107,35431],{"class":39},[33,46109,34137],{"class":47},[33,46111,46112],{"class":35,"line":4032},[33,46113,35438],{"class":60},[33,46115,46116,46118,46120,46122],{"class":35,"line":9199},[33,46117,1216],{"class":39},[33,46119,35445],{"class":47},[33,46121,27296],{"class":39},[33,46123,35450],{"class":47},[33,46125,46126,46128,46130],{"class":35,"line":9223},[33,46127,35455],{"class":47},[33,46129,73],{"class":39},[33,46131,35460],{"class":47},[33,46133,46134,46136,46138],{"class":35,"line":9228},[33,46135,35465],{"class":47},[33,46137,73],{"class":39},[33,46139,35470],{"class":47},[33,46141,46142],{"class":35,"line":9234},[33,46143,35475],{"class":60},[33,46145,46146],{"class":35,"line":9261},[33,46147,34128],{"class":47},[33,46149,46150],{"class":35,"line":9266},[33,46151,35484],{"class":60},[33,46153,46154,46156,46158],{"class":35,"line":9272},[33,46155,33913],{"class":47},[33,46157,73],{"class":39},[33,46159,35493],{"class":47},[33,46161,46162],{"class":35,"line":9284},[33,46163,35498],{"class":60},[33,46165,46166,46168,46170,46172,46174,46176,46178],{"class":35,"line":9296},[33,46167,33930],{"class":47},[33,46169,73],{"class":39},[33,46171,33935],{"class":47},[33,46173,33938],{"class":955},[33,46175,73],{"class":39},[33,46177,701],{"class":76},[33,46179,884],{"class":47},[33,46181,46182],{"class":35,"line":9308},[33,46183,35519],{"class":60},[33,46185,46186],{"class":35,"line":10967},[33,46187,35524],{"class":60},[33,46189,46190],{"class":35,"line":10992},[33,46191,35529],{"class":60},[33,46193,46194,46196,46198,46200,46202],{"class":35,"line":11015},[33,46195,35534],{"class":47},[33,46197,10728],{"class":39},[33,46199,34040],{"class":47},[33,46201,4359],{"class":39},[33,46203,35543],{"class":47},[33,46205,46206],{"class":35,"line":11039},[33,46207,35548],{"class":60},[33,46209,46210,46212,46214,46216,46218],{"class":35,"line":11044},[33,46211,35553],{"class":47},[33,46213,10728],{"class":39},[33,46215,35558],{"class":47},[33,46217,766],{"class":76},[33,46219,884],{"class":47},[33,46221,46222],{"class":35,"line":11049},[33,46223,160],{"emptyLinePlaceholder":159},[33,46225,46226],{"class":35,"line":11054},[33,46227,35571],{"class":60},[33,46229,46230,46232,46234,46236,46238],{"class":35,"line":11063},[33,46231,35576],{"class":47},[33,46233,73],{"class":39},[33,46235,35581],{"class":47},[33,46237,2184],{"class":39},[33,46239,35586],{"class":47},[33,46241,46242],{"class":35,"line":11068},[33,46243,35591],{"class":60},[33,46245,46246,46248,46250,46252],{"class":35,"line":11074},[33,46247,33704],{"class":76},[33,46249,345],{"class":47},[33,46251,35600],{"class":119},[33,46253,35603],{"class":47},[33,46255,46256],{"class":35,"line":11095},[33,46257,160],{"emptyLinePlaceholder":159},[33,46259,46260],{"class":35,"line":11101},[33,46261,35612],{"class":60},[33,46263,46264,46266,46268,46270,46272],{"class":35,"line":11115},[33,46265,2987],{"class":39},[33,46267,32473],{"class":76},[33,46269,4359],{"class":39},[33,46271,32478],{"class":119},[33,46273,5141],{"class":47},[33,46275,46276],{"class":35,"line":11121},[33,46277,35629],{"class":60},[33,46279,46280,46282,46284],{"class":35,"line":11148},[33,46281,32542],{"class":47},[33,46283,73],{"class":39},[33,46285,45804],{"class":47},[33,46287,46288],{"class":35,"line":11157},[33,46289,35642],{"class":60},[33,46291,46292],{"class":35,"line":11163},[33,46293,35647],{"class":60},[33,46295,46296,46298,46300],{"class":35,"line":11171},[33,46297,35652],{"class":47},[33,46299,35655],{"class":119},[33,46301,31750],{"class":47},[33,46303,46304],{"class":35,"line":11176},[33,46305,35662],{"class":60},[33,46307,46308,46310,46312],{"class":35,"line":17855},[33,46309,35275],{"class":47},[33,46311,73],{"class":39},[33,46313,35671],{"class":47},[33,46315,46316],{"class":35,"line":17861},[33,46317,35676],{"class":60},[33,46319,46320],{"class":35,"line":17884},[33,46321,35681],{"class":47},[33,46323,46324],{"class":35,"line":17890},[33,46325,160],{"emptyLinePlaceholder":159},[33,46327,46328],{"class":35,"line":17913},[33,46329,35690],{"class":60},[33,46331,46332],{"class":35,"line":17927},[33,46333,35695],{"class":60},[33,46335,46336,46338,46340,46342,46344,46346,46348],{"class":35,"line":17947},[33,46337,32490],{"class":47},[33,46339,73],{"class":39},[33,46341,32497],{"class":119},[33,46343,3145],{"class":39},[33,46345,32502],{"class":47},[33,46347,3142],{"class":39},[33,46349,35372],{"class":119},[33,46351,46352,46354,46356],{"class":35,"line":17953},[33,46353,32542],{"class":47},[33,46355,73],{"class":39},[33,46357,33542],{"class":47},[33,46359,46360],{"class":35,"line":17964},[33,46361,35724],{"class":60},[33,46363,46364],{"class":35,"line":17987},[33,46365,35729],{"class":60},[33,46367,46368,46370,46372,46374,46376,46378,46380,46382,46384,46386,46388,46390,46392,46394,46396,46398,46400,46402,46404,46406,46408,46410,46412],{"class":35,"line":18009},[33,46369,35734],{"class":47},[33,46371,73],{"class":39},[33,46373,2489],{"class":47},[33,46375,35741],{"class":119},[33,46377,704],{"class":47},[33,46379,35746],{"class":119},[33,46381,704],{"class":47},[33,46383,35751],{"class":119},[33,46385,704],{"class":47},[33,46387,35756],{"class":119},[33,46389,704],{"class":47},[33,46391,35761],{"class":119},[33,46393,704],{"class":47},[33,46395,35766],{"class":119},[33,46397,704],{"class":47},[33,46399,35771],{"class":119},[33,46401,704],{"class":47},[33,46403,35776],{"class":119},[33,46405,704],{"class":47},[33,46407,35781],{"class":119},[33,46409,704],{"class":47},[33,46411,35786],{"class":119},[33,46413,34499],{"class":47},[33,46415,46416,46418],{"class":35,"line":18014},[33,46417,35431],{"class":39},[33,46419,34137],{"class":47},[33,46421,46422],{"class":35,"line":18020},[33,46423,35799],{"class":60},[33,46425,46426,46428,46430,46432],{"class":35,"line":18034},[33,46427,1216],{"class":39},[33,46429,35806],{"class":47},[33,46431,27296],{"class":39},[33,46433,35450],{"class":47},[33,46435,46436,46438,46440],{"class":35,"line":18047},[33,46437,33863],{"class":47},[33,46439,73],{"class":39},[33,46441,33868],{"class":47},[33,46443,46444,46446,46448],{"class":35,"line":18052},[33,46445,33878],{"class":47},[33,46447,73],{"class":39},[33,46449,33883],{"class":47},[33,46451,46452],{"class":35,"line":18066},[33,46453,160],{"emptyLinePlaceholder":159},[33,46455,46456],{"class":35,"line":18071},[33,46457,35835],{"class":60},[33,46459,46460],{"class":35,"line":18077},[33,46461,34128],{"class":47},[33,46463,46464],{"class":35,"line":18082},[33,46465,35844],{"class":60},[33,46467,46468,46470,46472],{"class":35,"line":18096},[33,46469,33913],{"class":47},[33,46471,73],{"class":39},[33,46473,33918],{"class":47},[33,46475,46476],{"class":35,"line":18101},[33,46477,35857],{"class":60},[33,46479,46480,46482,46484,46486,46488,46490,46492],{"class":35,"line":18106},[33,46481,33930],{"class":47},[33,46483,73],{"class":39},[33,46485,33935],{"class":47},[33,46487,33938],{"class":955},[33,46489,73],{"class":39},[33,46491,701],{"class":76},[33,46493,884],{"class":47},[33,46495,46496],{"class":35,"line":18120},[33,46497,35878],{"class":60},[33,46499,46500,46502,46504],{"class":35,"line":18132},[33,46501,35883],{"class":47},[33,46503,73],{"class":39},[33,46505,35888],{"class":47},[33,46507,46508,46510,46512],{"class":35,"line":18137},[33,46509,35893],{"class":47},[33,46511,73],{"class":39},[33,46513,35898],{"class":47},[33,46515,46516,46518,46520,46522,46524,46526,46528,46530],{"class":35,"line":18150},[33,46517,35903],{"class":76},[33,46519,345],{"class":47},[33,46521,35908],{"class":119},[33,46523,35911],{"class":47},[33,46525,35914],{"class":119},[33,46527,704],{"class":47},[33,46529,35919],{"class":119},[33,46531,35922],{"class":47},[1599,46533,46535],{"id":46534},"_24训练自己的数据集","2.4.训练自己的数据集",[14,46537,46538],{},"猫狗分类任务",[14,46540,46541],{},"划分数据集和验证集",[23,46543,46545],{"className":31631,"code":46544,"language":31633,"meta":28,"style":28},"# 创建脚本，用于划分数据集和验证集\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",[30,46546,46547,46552,46559,46564,46575,46582,46586,46596,46610,46619,46623,46628,46638,46658,46662,46667,46677,46688,46701,46705,46710,46719,46729,46740,46744,46749,46759,46763,46768,46773,46778,46783,46788,46792,46802,46829,46842,46854,46881,46886,46891,46905,46910,46922,46937,46952,46960,46964,46969,46975,46987,47000,47005,47010,47015,47065,47071,47075],{"__ignoreMap":28},[33,46548,46549],{"class":35,"line":36},[33,46550,46551],{"class":60},"# 创建脚本，用于划分数据集和验证集\n",[33,46553,46554,46556],{"class":35,"line":51},[33,46555,31645],{"class":39},[33,46557,46558],{"class":47}," os\n",[33,46560,46561],{"class":35,"line":57},[33,46562,46563],{"class":60},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[33,46565,46566,46568,46571,46573],{"class":35,"line":64},[33,46567,31990],{"class":39},[33,46569,46570],{"class":47}," shutil ",[33,46572,31645],{"class":39},[33,46574,33075],{"class":47},[33,46576,46577,46579],{"class":35,"line":83},[33,46578,31645],{"class":39},[33,46580,46581],{"class":47}," random\n",[33,46583,46584],{"class":35,"line":89},[33,46585,160],{"emptyLinePlaceholder":159},[33,46587,46588,46590,46593],{"class":35,"line":98},[33,46589,33200],{"class":39},[33,46591,46592],{"class":43}," mkfile",[33,46594,46595],{"class":47},"(file):\n",[33,46597,46598,46600,46602,46605,46608],{"class":35,"line":110},[33,46599,4509],{"class":39},[33,46601,40183],{"class":39},[33,46603,46604],{"class":47}," os.path.exists(",[33,46606,46607],{"class":955},"file",[33,46609,32039],{"class":47},[33,46611,46612,46615,46617],{"class":35,"line":134},[33,46613,46614],{"class":47},"        os.makedirs(",[33,46616,46607],{"class":955},[33,46618,884],{"class":47},[33,46620,46621],{"class":35,"line":156},[33,46622,160],{"emptyLinePlaceholder":159},[33,46624,46625],{"class":35,"line":163},[33,46626,46627],{"class":60},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[33,46629,46630,46633,46635],{"class":35,"line":169},[33,46631,46632],{"class":47},"file_path",[33,46634,73],{"class":39},[33,46636,46637],{"class":119},"'data_cat_dog'\n",[33,46639,46640,46643,46645,46648,46650,46653,46655],{"class":35,"line":175},[33,46641,46642],{"class":47},"flower_class",[33,46644,73],{"class":39},[33,46646,46647],{"class":47},"[cla ",[33,46649,4435],{"class":39},[33,46651,46652],{"class":47}," cla ",[33,46654,27296],{"class":39},[33,46656,46657],{"class":47}," os.listdir(file_path)]\n",[33,46659,46660],{"class":35,"line":181},[33,46661,160],{"emptyLinePlaceholder":159},[33,46663,46664],{"class":35,"line":196},[33,46665,46666],{"class":60},"# 创建训练集train文件夹\n",[33,46668,46669,46672,46675],{"class":35,"line":213},[33,46670,46671],{"class":47},"mkfile(",[33,46673,46674],{"class":119},"'data\u002Ftrain'",[33,46676,884],{"class":47},[33,46678,46679,46681,46683,46685],{"class":35,"line":228},[33,46680,4435],{"class":39},[33,46682,46652],{"class":47},[33,46684,27296],{"class":39},[33,46686,46687],{"class":47}," flower_class:\n",[33,46689,46690,46693,46696,46698],{"class":35,"line":1345},[33,46691,46692],{"class":47},"    mkfile(",[33,46694,46695],{"class":119},"'data\u002Ftrain\u002F'",[33,46697,1271],{"class":39},[33,46699,46700],{"class":47},"cla)\n",[33,46702,46703],{"class":35,"line":1350},[33,46704,160],{"emptyLinePlaceholder":159},[33,46706,46707],{"class":35,"line":1359},[33,46708,46709],{"class":60},"# 创建验证集val文件夹\n",[33,46711,46712,46714,46717],{"class":35,"line":1364},[33,46713,46671],{"class":47},[33,46715,46716],{"class":119},"'data\u002Ftest'",[33,46718,884],{"class":47},[33,46720,46721,46723,46725,46727],{"class":35,"line":1370},[33,46722,4435],{"class":39},[33,46724,46652],{"class":47},[33,46726,27296],{"class":39},[33,46728,46687],{"class":47},[33,46730,46731,46733,46736,46738],{"class":35,"line":1425},[33,46732,46692],{"class":47},[33,46734,46735],{"class":119},"'data\u002Ftest\u002F'",[33,46737,1271],{"class":39},[33,46739,46700],{"class":47},[33,46741,46742],{"class":35,"line":1438},[33,46743,160],{"emptyLinePlaceholder":159},[33,46745,46746],{"class":35,"line":1451},[33,46747,46748],{"class":60},"# 划分比例，训练集：测试集=9：1\n",[33,46750,46751,46754,46756],{"class":35,"line":1457},[33,46752,46753],{"class":47},"split_rate",[33,46755,73],{"class":39},[33,46757,46758],{"class":76},"0.1\n",[33,46760,46761],{"class":35,"line":1466},[33,46762,160],{"emptyLinePlaceholder":159},[33,46764,46765],{"class":35,"line":1471},[33,46766,46767],{"class":60},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[33,46769,46770],{"class":35,"line":1477},[33,46771,46772],{"class":60},"# cla_path：当前类别的原始图片路径\n",[33,46774,46775],{"class":35,"line":1504},[33,46776,46777],{"class":60},"# images：当前类别下所有图片的文件名列表\n",[33,46779,46780],{"class":35,"line":1509},[33,46781,46782],{"class":60},"# num：该类别图片总数\n",[33,46784,46785],{"class":35,"line":1525},[33,46786,46787],{"class":60},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[33,46789,46790],{"class":35,"line":1535},[33,46791,160],{"emptyLinePlaceholder":159},[33,46793,46794,46796,46798,46800],{"class":35,"line":1540},[33,46795,4435],{"class":39},[33,46797,46652],{"class":47},[33,46799,27296],{"class":39},[33,46801,46687],{"class":47},[33,46803,46804,46807,46809,46812,46814,46817,46820,46822,46824,46826],{"class":35,"line":4027},[33,46805,46806],{"class":47},"    cla_path ",[33,46808,73],{"class":39},[33,46810,46811],{"class":47}," file_path ",[33,46813,1271],{"class":39},[33,46815,46816],{"class":119}," '\u002F'",[33,46818,46819],{"class":39}," +",[33,46821,46652],{"class":47},[33,46823,1271],{"class":39},[33,46825,46816],{"class":119},[33,46827,46828],{"class":60},"  # 某一类别的子目录\n",[33,46830,46831,46834,46836,46839],{"class":35,"line":4032},[33,46832,46833],{"class":47},"    images ",[33,46835,73],{"class":39},[33,46837,46838],{"class":47}," os.listdir(cla_path)  ",[33,46840,46841],{"class":60},"# iamges 列表存储了该目录下所有图像的名称\n",[33,46843,46844,46847,46849,46851],{"class":35,"line":9199},[33,46845,46846],{"class":47},"    num ",[33,46848,73],{"class":39},[33,46850,1169],{"class":76},[33,46852,46853],{"class":47},"(images)\n",[33,46855,46856,46859,46861,46864,46866,46868,46870,46873,46875,46878],{"class":35,"line":9223},[33,46857,46858],{"class":47},"    eval_index ",[33,46860,73],{"class":39},[33,46862,46863],{"class":47}," random.sample(images, ",[33,46865,2094],{"class":955},[33,46867,73],{"class":39},[33,46869,40],{"class":76},[33,46871,46872],{"class":47},"(num ",[33,46874,2057],{"class":39},[33,46876,46877],{"class":47}," split_rate))  ",[33,46879,46880],{"class":60},"# 从images列表中随机抽取 k 个图像名称\n",[33,46882,46883],{"class":35,"line":9228},[33,46884,46885],{"class":60},"    # 遍历该类别下的所有图片\n",[33,46887,46888],{"class":35,"line":9234},[33,46889,46890],{"class":60},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[33,46892,46893,46895,46898,46900,46902],{"class":35,"line":9261},[33,46894,857],{"class":39},[33,46896,46897],{"class":47}," index, image ",[33,46899,27296],{"class":39},[33,46901,32859],{"class":76},[33,46903,46904],{"class":47},"(images):\n",[33,46906,46907],{"class":35,"line":9266},[33,46908,46909],{"class":60},"        # eval_index 中保存验证集val的图像名称\n",[33,46911,46912,46914,46917,46919],{"class":35,"line":9272},[33,46913,3915],{"class":39},[33,46915,46916],{"class":47}," image ",[33,46918,27296],{"class":39},[33,46920,46921],{"class":47}," eval_index:\n",[33,46923,46924,46927,46929,46932,46934],{"class":35,"line":9284},[33,46925,46926],{"class":47},"            image_path ",[33,46928,73],{"class":39},[33,46930,46931],{"class":47}," cla_path ",[33,46933,1271],{"class":39},[33,46935,46936],{"class":47}," image\n",[33,46938,46939,46942,46944,46947,46949],{"class":35,"line":9296},[33,46940,46941],{"class":47},"            new_path ",[33,46943,73],{"class":39},[33,46945,46946],{"class":119}," 'data\u002Ftest\u002F'",[33,46948,46819],{"class":39},[33,46950,46951],{"class":47}," cla\n",[33,46953,46954,46957],{"class":35,"line":9308},[33,46955,46956],{"class":47},"            copy(image_path, new_path)  ",[33,46958,46959],{"class":60},"# 将选中的图像复制到新路径\n",[33,46961,46962],{"class":35,"line":10967},[33,46963,160],{"emptyLinePlaceholder":159},[33,46965,46966],{"class":35,"line":10992},[33,46967,46968],{"class":60},"        # 其余的图像保存在训练集train中\n",[33,46970,46971,46973],{"class":35,"line":11015},[33,46972,3950],{"class":39},[33,46974,5141],{"class":47},[33,46976,46977,46979,46981,46983,46985],{"class":35,"line":11039},[33,46978,46926],{"class":47},[33,46980,73],{"class":39},[33,46982,46931],{"class":47},[33,46984,1271],{"class":39},[33,46986,46936],{"class":47},[33,46988,46989,46991,46993,46996,46998],{"class":35,"line":11044},[33,46990,46941],{"class":47},[33,46992,73],{"class":39},[33,46994,46995],{"class":119}," 'data\u002Ftrain\u002F'",[33,46997,46819],{"class":39},[33,46999,46951],{"class":47},[33,47001,47002],{"class":35,"line":11049},[33,47003,47004],{"class":47},"            copy(image_path, new_path)\n",[33,47006,47007],{"class":35,"line":11054},[33,47008,47009],{"class":60},"            # 打印进度条信息\n",[33,47011,47012],{"class":35,"line":11063},[33,47013,47014],{"class":60},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[33,47016,47017,47019,47021,47023,47026,47028,47030,47033,47035,47037,47039,47042,47045,47047,47049,47052,47055,47057,47059,47062],{"class":35,"line":11068},[33,47018,33704],{"class":76},[33,47020,345],{"class":47},[33,47022,1866],{"class":119},[33,47024,47025],{"class":76},"\\r",[33,47027,2489],{"class":119},[33,47029,33712],{"class":76},[33,47031,47032],{"class":119},"] processing [",[33,47034,33712],{"class":76},[33,47036,2184],{"class":119},[33,47038,33712],{"class":76},[33,47040,47041],{"class":119},"]\"",[33,47043,47044],{"class":47},".format(cla, index ",[33,47046,1271],{"class":39},[33,47048,26371],{"class":76},[33,47050,47051],{"class":47},", num), ",[33,47053,47054],{"class":955},"end",[33,47056,73],{"class":39},[33,47058,1520],{"class":119},[33,47060,47061],{"class":47},")  ",[33,47063,47064],{"class":60},"# processing bar\n",[33,47066,47067,47069],{"class":35,"line":11074},[33,47068,32552],{"class":76},[33,47070,48],{"class":47},[33,47072,47073],{"class":35,"line":11095},[33,47074,160],{"emptyLinePlaceholder":159},[33,47076,47077,47079,47081,47084],{"class":35,"line":11101},[33,47078,31668],{"class":76},[33,47080,345],{"class":47},[33,47082,47083],{"class":119},"\"processing done!\"",[33,47085,884],{"class":47},[14,47087,47088],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23249,47090,47092],{"id":47091},"_242模型代码","2.4.2.模型代码",[14,47094,47095],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[23,47097,47099],{"className":31631,"code":47098,"language":31633,"meta":28,"style":28},"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",[30,47100,47101,47107,47117,47127,47131,47147,47155,47169,47179,47183,47213,47217,47251,47297,47301,47335,47381,47385,47389,47423,47453,47457,47465,47479,47501,47523,47541,47545,47559,47563,47567,47583,47587,47595,47609,47619,47663,47667,47695,47699,47709,47737,47741,47777,47781,47809,47813,47823,47855,47887,47915,47919,47929,47961,47993,48025,48057,48089,48117,48121,48131,48163,48195,48207,48211,48223,48227,48231,48243,48251,48271,48275,48279,48283,48287,48291,48295,48309,48317,48325,48337,48351,48359,48363,48371,48381,48391,48401,48411,48421,48427,48431,48435,48447,48467,48475],{"__ignoreMap":28},[33,47102,47103,47105],{"class":35,"line":36},[33,47104,31645],{"class":39},[33,47106,31648],{"class":47},[33,47108,47109,47111,47113,47115],{"class":35,"line":51},[33,47110,31990],{"class":39},[33,47112,31993],{"class":47},[33,47114,31645],{"class":39},[33,47116,31998],{"class":47},[33,47118,47119,47121,47123,47125],{"class":35,"line":57},[33,47120,31990],{"class":39},[33,47122,32010],{"class":47},[33,47124,31645],{"class":39},[33,47126,32015],{"class":47},[33,47128,47129],{"class":35,"line":64},[33,47130,160],{"emptyLinePlaceholder":159},[33,47132,47133,47135,47137,47139,47141,47143,47145],{"class":35,"line":83},[33,47134,15945],{"class":39},[33,47136,42746],{"class":43},[33,47138,345],{"class":47},[33,47140,32031],{"class":43},[33,47142,2158],{"class":47},[33,47144,32036],{"class":43},[33,47146,32039],{"class":47},[33,47148,47149,47151,47153],{"class":35,"line":89},[33,47150,32054],{"class":39},[33,47152,32057],{"class":76},[33,47154,42765],{"class":47},[33,47156,47157,47159,47161,47163,47165,47167],{"class":35,"line":98},[33,47158,32070],{"class":76},[33,47160,42772],{"class":47},[33,47162,32076],{"class":76},[33,47164,32079],{"class":47},[33,47166,32082],{"class":76},[33,47168,48],{"class":47},[33,47170,47171,47173,47175,47177],{"class":35,"line":110},[33,47172,32098],{"class":76},[33,47174,36024],{"class":47},[33,47176,73],{"class":39},[33,47178,36029],{"class":47},[33,47180,47181],{"class":35,"line":134},[33,47182,42795],{"class":60},[33,47184,47185,47187,47189,47191,47193,47195,47197,47199,47201,47203,47205,47207,47209,47211],{"class":35,"line":156},[33,47186,32098],{"class":76},[33,47188,42802],{"class":47},[33,47190,73],{"class":39},[33,47192,32106],{"class":47},[33,47194,32109],{"class":955},[33,47196,73],{"class":39},[33,47198,42813],{"class":47},[33,47200,32118],{"class":955},[33,47202,73],{"class":39},[33,47204,42820],{"class":47},[33,47206,32127],{"class":955},[33,47208,73],{"class":39},[33,47210,701],{"class":76},[33,47212,884],{"class":47},[33,47214,47215],{"class":35,"line":163},[33,47216,42833],{"class":60},[33,47218,47219,47221,47223,47225,47227,47229,47231,47233,47235,47237,47239,47241,47243,47245,47247,47249],{"class":35,"line":169},[33,47220,32098],{"class":76},[33,47222,42840],{"class":47},[33,47224,73],{"class":39},[33,47226,32106],{"class":47},[33,47228,32109],{"class":955},[33,47230,73],{"class":39},[33,47232,42813],{"class":47},[33,47234,32118],{"class":955},[33,47236,73],{"class":39},[33,47238,42857],{"class":47},[33,47240,766],{"class":76},[33,47242,42862],{"class":47},[33,47244,32127],{"class":955},[33,47246,73],{"class":39},[33,47248,701],{"class":76},[33,47250,884],{"class":47},[33,47252,47253,47255,47257,47259,47261,47263,47265,47267,47269,47271,47273,47275,47277,47279,47281,47283,47285,47287,47289,47291,47293,47295],{"class":35,"line":175},[33,47254,32098],{"class":76},[33,47256,42877],{"class":47},[33,47258,73],{"class":39},[33,47260,32106],{"class":47},[33,47262,32109],{"class":955},[33,47264,73],{"class":39},[33,47266,42857],{"class":47},[33,47268,766],{"class":76},[33,47270,42862],{"class":47},[33,47272,32118],{"class":955},[33,47274,73],{"class":39},[33,47276,42857],{"class":47},[33,47278,701],{"class":76},[33,47280,42862],{"class":47},[33,47282,32127],{"class":955},[33,47284,73],{"class":39},[33,47286,712],{"class":76},[33,47288,704],{"class":47},[33,47290,32136],{"class":955},[33,47292,73],{"class":39},[33,47294,701],{"class":76},[33,47296,884],{"class":47},[33,47298,47299],{"class":35,"line":181},[33,47300,42922],{"class":60},[33,47302,47303,47305,47307,47309,47311,47313,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333],{"class":35,"line":196},[33,47304,32098],{"class":76},[33,47306,42929],{"class":47},[33,47308,73],{"class":39},[33,47310,32106],{"class":47},[33,47312,32109],{"class":955},[33,47314,73],{"class":39},[33,47316,42813],{"class":47},[33,47318,32118],{"class":955},[33,47320,73],{"class":39},[33,47322,42946],{"class":47},[33,47324,766],{"class":76},[33,47326,42862],{"class":47},[33,47328,32127],{"class":955},[33,47330,73],{"class":39},[33,47332,701],{"class":76},[33,47334,884],{"class":47},[33,47336,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373,47375,47377,47379],{"class":35,"line":213},[33,47338,32098],{"class":76},[33,47340,42965],{"class":47},[33,47342,73],{"class":39},[33,47344,32106],{"class":47},[33,47346,32109],{"class":955},[33,47348,73],{"class":39},[33,47350,42946],{"class":47},[33,47352,766],{"class":76},[33,47354,42862],{"class":47},[33,47356,32118],{"class":955},[33,47358,73],{"class":39},[33,47360,42946],{"class":47},[33,47362,701],{"class":76},[33,47364,42862],{"class":47},[33,47366,32127],{"class":955},[33,47368,73],{"class":39},[33,47370,722],{"class":76},[33,47372,704],{"class":47},[33,47374,32136],{"class":955},[33,47376,73],{"class":39},[33,47378,707],{"class":76},[33,47380,884],{"class":47},[33,47382,47383],{"class":35,"line":228},[33,47384,43010],{"class":60},[33,47386,47387],{"class":35,"line":1345},[33,47388,43015],{"class":60},[33,47390,47391,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411,47413,47415,47417,47419,47421],{"class":35,"line":1350},[33,47392,32098],{"class":76},[33,47394,43022],{"class":47},[33,47396,73],{"class":39},[33,47398,36082],{"class":47},[33,47400,32127],{"class":955},[33,47402,73],{"class":39},[33,47404,712],{"class":76},[33,47406,704],{"class":47},[33,47408,32182],{"class":955},[33,47410,73],{"class":39},[33,47412,701],{"class":76},[33,47414,704],{"class":47},[33,47416,32136],{"class":955},[33,47418,73],{"class":39},[33,47420,701],{"class":76},[33,47422,884],{"class":47},[33,47424,47425,47427,47429,47431,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451],{"class":35,"line":1359},[33,47426,32098],{"class":76},[33,47428,43057],{"class":47},[33,47430,73],{"class":39},[33,47432,32106],{"class":47},[33,47434,32109],{"class":955},[33,47436,73],{"class":39},[33,47438,42813],{"class":47},[33,47440,32118],{"class":955},[33,47442,73],{"class":39},[33,47444,43074],{"class":47},[33,47446,32127],{"class":955},[33,47448,73],{"class":39},[33,47450,701],{"class":76},[33,47452,884],{"class":47},[33,47454,47455],{"class":35,"line":1364},[33,47456,160],{"emptyLinePlaceholder":159},[33,47458,47459,47461,47463],{"class":35,"line":1370},[33,47460,32054],{"class":39},[33,47462,32346],{"class":43},[33,47464,32349],{"class":47},[33,47466,47467,47469,47471,47473,47475,47477],{"class":35,"line":1425},[33,47468,43099],{"class":47},[33,47470,73],{"class":39},[33,47472,32076],{"class":76},[33,47474,36437],{"class":47},[33,47476,32076],{"class":76},[33,47478,43110],{"class":47},[33,47480,47481,47483,47485,47487,47489,47491,47493,47495,47497,47499],{"class":35,"line":1438},[33,47482,907],{"class":47},[33,47484,73],{"class":39},[33,47486,32076],{"class":76},[33,47488,36437],{"class":47},[33,47490,32076],{"class":76},[33,47492,43125],{"class":47},[33,47494,32076],{"class":76},[33,47496,36437],{"class":47},[33,47498,32076],{"class":76},[33,47500,43134],{"class":47},[33,47502,47503,47505,47507,47509,47511,47513,47515,47517,47519,47521],{"class":35,"line":1451},[33,47504,43139],{"class":47},[33,47506,73],{"class":39},[33,47508,32076],{"class":76},[33,47510,36437],{"class":47},[33,47512,32076],{"class":76},[33,47514,43150],{"class":47},[33,47516,32076],{"class":76},[33,47518,36437],{"class":47},[33,47520,32076],{"class":76},[33,47522,43159],{"class":47},[33,47524,47525,47527,47529,47531,47533,47535,47537,47539],{"class":35,"line":1457},[33,47526,43164],{"class":47},[33,47528,73],{"class":39},[33,47530,32076],{"class":76},[33,47532,36437],{"class":47},[33,47534,32076],{"class":76},[33,47536,43175],{"class":47},[33,47538,32076],{"class":76},[33,47540,43180],{"class":47},[33,47542,47543],{"class":35,"line":1466},[33,47544,43185],{"class":60},[33,47546,47547,47549,47551,47553,47555,47557],{"class":35,"line":1471},[33,47548,16003],{"class":39},[33,47550,43192],{"class":47},[33,47552,33938],{"class":955},[33,47554,73],{"class":39},[33,47556,701],{"class":76},[33,47558,884],{"class":47},[33,47560,47561],{"class":35,"line":1477},[33,47562,160],{"emptyLinePlaceholder":159},[33,47564,47565],{"class":35,"line":1504},[33,47566,43213],{"class":60},[33,47568,47569,47571,47573,47575,47577,47579,47581],{"class":35,"line":1509},[33,47570,15945],{"class":39},[33,47572,43220],{"class":43},[33,47574,345],{"class":47},[33,47576,32031],{"class":43},[33,47578,2158],{"class":47},[33,47580,32036],{"class":43},[33,47582,32039],{"class":47},[33,47584,47585],{"class":35,"line":1525},[33,47586,43235],{"class":60},[33,47588,47589,47591,47593],{"class":35,"line":1535},[33,47590,32054],{"class":39},[33,47592,32057],{"class":76},[33,47594,43244],{"class":47},[33,47596,47597,47599,47601,47603,47605,47607],{"class":35,"line":1540},[33,47598,32070],{"class":76},[33,47600,43251],{"class":47},[33,47602,32076],{"class":76},[33,47604,32079],{"class":47},[33,47606,32082],{"class":76},[33,47608,48],{"class":47},[33,47610,47611,47613,47615,47617],{"class":35,"line":4027},[33,47612,32098],{"class":76},[33,47614,43266],{"class":47},[33,47616,73],{"class":39},[33,47618,39262],{"class":47},[33,47620,47621,47623,47625,47627,47629,47631,47633,47635,47637,47639,47641,47643,47645,47647,47649,47651,47653,47655,47657,47659,47661],{"class":35,"line":4032},[33,47622,39267],{"class":47},[33,47624,32109],{"class":955},[33,47626,73],{"class":39},[33,47628,712],{"class":76},[33,47630,704],{"class":47},[33,47632,32118],{"class":955},[33,47634,73],{"class":39},[33,47636,1820],{"class":76},[33,47638,704],{"class":47},[33,47640,32127],{"class":955},[33,47642,73],{"class":39},[33,47644,732],{"class":76},[33,47646,704],{"class":47},[33,47648,32182],{"class":955},[33,47650,73],{"class":39},[33,47652,707],{"class":76},[33,47654,704],{"class":47},[33,47656,32136],{"class":955},[33,47658,73],{"class":39},[33,47660,712],{"class":76},[33,47662,39300],{"class":47},[33,47664,47665],{"class":35,"line":9199},[33,47666,39305],{"class":47},[33,47668,47669,47671,47673,47675,47677,47679,47681,47683,47685,47687,47689,47691,47693],{"class":35,"line":9223},[33,47670,39350],{"class":47},[33,47672,32127],{"class":955},[33,47674,73],{"class":39},[33,47676,712],{"class":76},[33,47678,704],{"class":47},[33,47680,32182],{"class":955},[33,47682,73],{"class":39},[33,47684,707],{"class":76},[33,47686,704],{"class":47},[33,47688,32136],{"class":955},[33,47690,73],{"class":39},[33,47692,701],{"class":76},[33,47694,884],{"class":47},[33,47696,47697],{"class":35,"line":9228},[33,47698,39379],{"class":47},[33,47700,47701,47703,47705,47707],{"class":35,"line":9234},[33,47702,32098],{"class":76},[33,47704,43357],{"class":47},[33,47706,73],{"class":39},[33,47708,39262],{"class":47},[33,47710,47711,47713,47715,47717,47719,47721,47723,47725,47727,47729,47731,47733,47735],{"class":35,"line":9261},[33,47712,39267],{"class":47},[33,47714,32109],{"class":955},[33,47716,73],{"class":39},[33,47718,1820],{"class":76},[33,47720,704],{"class":47},[33,47722,32118],{"class":955},[33,47724,73],{"class":39},[33,47726,1820],{"class":76},[33,47728,704],{"class":47},[33,47730,32127],{"class":955},[33,47732,73],{"class":39},[33,47734,701],{"class":76},[33,47736,39300],{"class":47},[33,47738,47739],{"class":35,"line":9266},[33,47740,39305],{"class":47},[33,47742,47743,47745,47747,47749,47751,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775],{"class":35,"line":9272},[33,47744,39267],{"class":47},[33,47746,32109],{"class":955},[33,47748,73],{"class":39},[33,47750,1820],{"class":76},[33,47752,704],{"class":47},[33,47754,32118],{"class":955},[33,47756,73],{"class":39},[33,47758,43412],{"class":76},[33,47760,704],{"class":47},[33,47762,32127],{"class":955},[33,47764,73],{"class":39},[33,47766,712],{"class":76},[33,47768,704],{"class":47},[33,47770,32136],{"class":955},[33,47772,73],{"class":39},[33,47774,701],{"class":76},[33,47776,39300],{"class":47},[33,47778,47779],{"class":35,"line":9284},[33,47780,39305],{"class":47},[33,47782,47783,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807],{"class":35,"line":9296},[33,47784,39350],{"class":47},[33,47786,32127],{"class":955},[33,47788,73],{"class":39},[33,47790,712],{"class":76},[33,47792,704],{"class":47},[33,47794,32182],{"class":955},[33,47796,73],{"class":39},[33,47798,707],{"class":76},[33,47800,704],{"class":47},[33,47802,32136],{"class":955},[33,47804,73],{"class":39},[33,47806,701],{"class":76},[33,47808,884],{"class":47},[33,47810,47811],{"class":35,"line":9308},[33,47812,39379],{"class":47},[33,47814,47815,47817,47819,47821],{"class":35,"line":10967},[33,47816,32098],{"class":76},[33,47818,43473],{"class":47},[33,47820,73],{"class":39},[33,47822,39262],{"class":47},[33,47824,47825,47827,47829,47831,47833,47835,47837,47839,47841,47843,47845,47847,47849,47851,47853],{"class":35,"line":10992},[33,47826,43482],{"class":47},[33,47828,43412],{"class":76},[33,47830,704],{"class":47},[33,47832,1820],{"class":76},[33,47834,43491],{"class":47},[33,47836,1826],{"class":76},[33,47838,704],{"class":47},[33,47840,33323],{"class":76},[33,47842,43500],{"class":47},[33,47844,2201],{"class":76},[33,47846,704],{"class":47},[33,47848,1814],{"class":76},[33,47850,43509],{"class":47},[33,47852,1814],{"class":76},[33,47854,39300],{"class":47},[33,47856,47857,47859,47861,47863,47865,47867,47869,47871,47873,47875,47877,47879,47881,47883,47885],{"class":35,"line":11015},[33,47858,43482],{"class":47},[33,47860,36123],{"class":76},[33,47862,704],{"class":47},[33,47864,33323],{"class":76},[33,47866,43491],{"class":47},[33,47868,33323],{"class":76},[33,47870,704],{"class":47},[33,47872,43412],{"class":76},[33,47874,43500],{"class":47},[33,47876,1814],{"class":76},[33,47878,704],{"class":47},[33,47880,1826],{"class":76},[33,47882,43509],{"class":47},[33,47884,1820],{"class":76},[33,47886,39300],{"class":47},[33,47888,47889,47891,47893,47895,47897,47899,47901,47903,47905,47907,47909,47911,47913],{"class":35,"line":11039},[33,47890,39350],{"class":47},[33,47892,32127],{"class":955},[33,47894,73],{"class":39},[33,47896,712],{"class":76},[33,47898,704],{"class":47},[33,47900,32182],{"class":955},[33,47902,73],{"class":39},[33,47904,707],{"class":76},[33,47906,704],{"class":47},[33,47908,32136],{"class":955},[33,47910,73],{"class":39},[33,47912,701],{"class":76},[33,47914,884],{"class":47},[33,47916,47917],{"class":35,"line":11044},[33,47918,39379],{"class":47},[33,47920,47921,47923,47925,47927],{"class":35,"line":11049},[33,47922,32098],{"class":76},[33,47924,43584],{"class":47},[33,47926,73],{"class":39},[33,47928,39262],{"class":47},[33,47930,47931,47933,47935,47937,47939,47941,47943,47945,47947,47949,47951,47953,47955,47957,47959],{"class":35,"line":11054},[33,47932,43482],{"class":47},[33,47934,43595],{"class":76},[33,47936,704],{"class":47},[33,47938,43412],{"class":76},[33,47940,43491],{"class":47},[33,47942,1826],{"class":76},[33,47944,704],{"class":47},[33,47946,43608],{"class":76},[33,47948,43500],{"class":47},[33,47950,2201],{"class":76},[33,47952,704],{"class":47},[33,47954,2207],{"class":76},[33,47956,43509],{"class":47},[33,47958,1820],{"class":76},[33,47960,39300],{"class":47},[33,47962,47963,47965,47967,47969,47971,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991],{"class":35,"line":11063},[33,47964,43482],{"class":47},[33,47966,39710],{"class":76},[33,47968,704],{"class":47},[33,47970,22299],{"class":76},[33,47972,43491],{"class":47},[33,47974,2218],{"class":76},[33,47976,704],{"class":47},[33,47978,32754],{"class":76},[33,47980,43500],{"class":47},[33,47982,2399],{"class":76},[33,47984,704],{"class":47},[33,47986,1820],{"class":76},[33,47988,43509],{"class":47},[33,47990,1820],{"class":76},[33,47992,39300],{"class":47},[33,47994,47995,47997,47999,48001,48003,48005,48007,48009,48011,48013,48015,48017,48019,48021,48023],{"class":35,"line":11068},[33,47996,43482],{"class":47},[33,47998,39710],{"class":76},[33,48000,704],{"class":47},[33,48002,33323],{"class":76},[33,48004,43491],{"class":47},[33,48006,33323],{"class":76},[33,48008,704],{"class":47},[33,48010,36123],{"class":76},[33,48012,43500],{"class":47},[33,48014,2399],{"class":76},[33,48016,704],{"class":47},[33,48018,1820],{"class":76},[33,48020,43509],{"class":47},[33,48022,1820],{"class":76},[33,48024,39300],{"class":47},[33,48026,48027,48029,48031,48033,48035,48037,48039,48041,48043,48045,48047,48049,48051,48053,48055],{"class":35,"line":11074},[33,48028,43482],{"class":47},[33,48030,39710],{"class":76},[33,48032,704],{"class":47},[33,48034,2218],{"class":76},[33,48036,43491],{"class":47},[33,48038,33323],{"class":76},[33,48040,704],{"class":47},[33,48042,43705],{"class":76},[33,48044,43500],{"class":47},[33,48046,1814],{"class":76},[33,48048,704],{"class":47},[33,48050,1820],{"class":76},[33,48052,43509],{"class":47},[33,48054,1820],{"class":76},[33,48056,39300],{"class":47},[33,48058,48059,48061,48063,48065,48067,48069,48071,48073,48075,48077,48079,48081,48083,48085,48087],{"class":35,"line":11095},[33,48060,43482],{"class":47},[33,48062,43726],{"class":76},[33,48064,704],{"class":47},[33,48066,36123],{"class":76},[33,48068,43491],{"class":47},[33,48070,22299],{"class":76},[33,48072,704],{"class":47},[33,48074,43739],{"class":76},[33,48076,43500],{"class":47},[33,48078,1814],{"class":76},[33,48080,704],{"class":47},[33,48082,33323],{"class":76},[33,48084,43509],{"class":47},[33,48086,33323],{"class":76},[33,48088,39300],{"class":47},[33,48090,48091,48093,48095,48097,48099,48101,48103,48105,48107,48109,48111,48113,48115],{"class":35,"line":11101},[33,48092,39350],{"class":47},[33,48094,32127],{"class":955},[33,48096,73],{"class":39},[33,48098,712],{"class":76},[33,48100,704],{"class":47},[33,48102,32182],{"class":955},[33,48104,73],{"class":39},[33,48106,707],{"class":76},[33,48108,704],{"class":47},[33,48110,32136],{"class":955},[33,48112,73],{"class":39},[33,48114,701],{"class":76},[33,48116,884],{"class":47},[33,48118,48119],{"class":35,"line":11115},[33,48120,39379],{"class":47},[33,48122,48123,48125,48127,48129],{"class":35,"line":11121},[33,48124,32098],{"class":76},[33,48126,43792],{"class":47},[33,48128,73],{"class":39},[33,48130,39262],{"class":47},[33,48132,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161],{"class":35,"line":11148},[33,48134,43482],{"class":47},[33,48136,43803],{"class":76},[33,48138,704],{"class":47},[33,48140,36123],{"class":76},[33,48142,43491],{"class":47},[33,48144,22299],{"class":76},[33,48146,704],{"class":47},[33,48148,43739],{"class":76},[33,48150,43500],{"class":47},[33,48152,1814],{"class":76},[33,48154,704],{"class":47},[33,48156,33323],{"class":76},[33,48158,43509],{"class":47},[33,48160,33323],{"class":76},[33,48162,39300],{"class":47},[33,48164,48165,48167,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193],{"class":35,"line":11157},[33,48166,43482],{"class":47},[33,48168,43803],{"class":76},[33,48170,704],{"class":47},[33,48172,36193],{"class":76},[33,48174,43491],{"class":47},[33,48176,43412],{"class":76},[33,48178,704],{"class":47},[33,48180,36193],{"class":76},[33,48182,43500],{"class":47},[33,48184,2207],{"class":76},[33,48186,704],{"class":47},[33,48188,33323],{"class":76},[33,48190,43509],{"class":47},[33,48192,33323],{"class":76},[33,48194,39300],{"class":47},[33,48196,48197,48199,48201,48203,48205],{"class":35,"line":11163},[33,48198,43866],{"class":47},[33,48200,701],{"class":76},[33,48202,704],{"class":47},[33,48204,701],{"class":76},[33,48206,43875],{"class":47},[33,48208,48209],{"class":35,"line":11171},[33,48210,40043],{"class":47},[33,48212,48213,48215,48217,48219,48221],{"class":35,"line":11176},[33,48214,40048],{"class":47},[33,48216,43886],{"class":76},[33,48218,704],{"class":47},[33,48220,707],{"class":76},[33,48222,884],{"class":47},[33,48224,48225],{"class":35,"line":17855},[33,48226,39379],{"class":47},[33,48228,48229],{"class":35,"line":17861},[33,48230,43901],{"class":60},[33,48232,48233,48235,48237,48239,48241],{"class":35,"line":17884},[33,48234,1216],{"class":39},[33,48236,40121],{"class":47},[33,48238,27296],{"class":39},[33,48240,40126],{"class":76},[33,48242,40129],{"class":47},[33,48244,48245,48247,48249],{"class":35,"line":17890},[33,48246,1259],{"class":39},[33,48248,40141],{"class":76},[33,48250,40144],{"class":47},[33,48252,48253,48255,48257,48259,48261,48263,48265,48267,48269],{"class":35,"line":17913},[33,48254,40154],{"class":47},[33,48256,43928],{"class":955},[33,48258,73],{"class":39},[33,48260,43933],{"class":119},[33,48262,704],{"class":47},[33,48264,40157],{"class":955},[33,48266,73],{"class":39},[33,48268,40162],{"class":119},[33,48270,884],{"class":47},[33,48272,48273],{"class":35,"line":17927},[33,48274,43948],{"class":60},[33,48276,48277],{"class":35,"line":17947},[33,48278,43953],{"class":60},[33,48280,48281],{"class":35,"line":17953},[33,48282,43958],{"class":60},[33,48284,48285],{"class":35,"line":17964},[33,48286,43963],{"class":60},[33,48288,48289],{"class":35,"line":17987},[33,48290,43968],{"class":60},[33,48292,48293],{"class":35,"line":18009},[33,48294,43973],{"class":60},[33,48296,48297,48299,48301,48303,48305,48307],{"class":35,"line":18014},[33,48298,40174],{"class":39},[33,48300,40177],{"class":47},[33,48302,40180],{"class":39},[33,48304,40183],{"class":39},[33,48306,40186],{"class":76},[33,48308,5141],{"class":47},[33,48310,48311,48313,48315],{"class":35,"line":18020},[33,48312,40198],{"class":47},[33,48314,766],{"class":76},[33,48316,884],{"class":47},[33,48318,48319,48321,48323],{"class":35,"line":18034},[33,48320,44000],{"class":39},[33,48322,40141],{"class":76},[33,48324,40217],{"class":47},[33,48326,48327,48329,48331,48333,48335],{"class":35,"line":18047},[33,48328,44009],{"class":47},[33,48330,766],{"class":76},[33,48332,704],{"class":47},[33,48334,40239],{"class":76},[33,48336,884],{"class":47},[33,48338,48339,48341,48343,48345,48347,48349],{"class":35,"line":18052},[33,48340,44022],{"class":39},[33,48342,40177],{"class":47},[33,48344,40180],{"class":39},[33,48346,40183],{"class":39},[33,48348,40186],{"class":76},[33,48350,5141],{"class":47},[33,48352,48353,48355,48357],{"class":35,"line":18066},[33,48354,44037],{"class":47},[33,48356,766],{"class":76},[33,48358,884],{"class":47},[33,48360,48361],{"class":35,"line":18071},[33,48362,36418],{"class":60},[33,48364,48365,48367,48369],{"class":35,"line":18077},[33,48366,32054],{"class":39},[33,48368,32346],{"class":43},[33,48370,32349],{"class":47},[33,48372,48373,48375,48377,48379],{"class":35,"line":18082},[33,48374,32354],{"class":47},[33,48376,73],{"class":39},[33,48378,32076],{"class":76},[33,48380,44064],{"class":47},[33,48382,48383,48385,48387,48389],{"class":35,"line":18096},[33,48384,32354],{"class":47},[33,48386,73],{"class":39},[33,48388,32076],{"class":76},[33,48390,44075],{"class":47},[33,48392,48393,48395,48397,48399],{"class":35,"line":18101},[33,48394,32354],{"class":47},[33,48396,73],{"class":39},[33,48398,32076],{"class":76},[33,48400,44086],{"class":47},[33,48402,48403,48405,48407,48409],{"class":35,"line":18106},[33,48404,32354],{"class":47},[33,48406,73],{"class":39},[33,48408,32076],{"class":76},[33,48410,44097],{"class":47},[33,48412,48413,48415,48417,48419],{"class":35,"line":18120},[33,48414,32354],{"class":47},[33,48416,73],{"class":39},[33,48418,32076],{"class":76},[33,48420,44108],{"class":47},[33,48422,48423,48425],{"class":35,"line":18132},[33,48424,16003],{"class":39},[33,48426,32462],{"class":47},[33,48428,48429],{"class":35,"line":18137},[33,48430,160],{"emptyLinePlaceholder":159},[33,48432,48433],{"class":35,"line":18150},[33,48434,44123],{"class":60},[33,48436,48437,48439,48441,48443,48445],{"class":35,"line":18155},[33,48438,2987],{"class":39},[33,48440,32473],{"class":76},[33,48442,4359],{"class":39},[33,48444,32478],{"class":119},[33,48446,5141],{"class":47},[33,48448,48449,48451,48453,48455,48457,48459,48461,48463,48465],{"class":35,"line":18160},[33,48450,32490],{"class":47},[33,48452,73],{"class":39},[33,48454,31704],{"class":47},[33,48456,32497],{"class":119},[33,48458,3145],{"class":39},[33,48460,32502],{"class":47},[33,48462,3142],{"class":39},[33,48464,31729],{"class":119},[33,48466,884],{"class":47},[33,48468,48469,48471,48473],{"class":35,"line":18165},[33,48470,32542],{"class":47},[33,48472,73],{"class":39},[33,48474,44164],{"class":47},[33,48476,48477,48479,48481,48483,48485,48487,48489,48491],{"class":35,"line":18178},[33,48478,32552],{"class":76},[33,48480,32555],{"class":47},[33,48482,701],{"class":76},[33,48484,704],{"class":47},[33,48486,32754],{"class":76},[33,48488,704],{"class":47},[33,48490,32754],{"class":76},[33,48492,32568],{"class":47},[23249,48494,48496],{"id":48495},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,48498,48499],{},"计算图片的均值与方差，用于训练中归一化处理操作",[23,48501,48503],{"className":31631,"code":48502,"language":31633,"meta":28,"style":28},"# 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",[30,48504,48505,48510,48523,48528,48534,48539,48549,48553,48558,48568,48572,48577,48587,48604,48608,48613,48625,48637,48668,48677,48687,48697,48701,48706,48721,48725,48730,48735,48740,48750,48755,48780,48784,48789,48804,48808,48821,48825,48830,48835,48840,48845,48850,48860,48870,48893,48901,48909,48917,48921,48933,48937,48942,48946,48950,48957,48977,49001,49008,49022,49027,49032,49036,49050,49054,49066],{"__ignoreMap":28},[33,48506,48507],{"class":35,"line":36},[33,48508,48509],{"class":60},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[33,48511,48512,48514,48517,48520],{"class":35,"line":51},[33,48513,31990],{"class":39},[33,48515,48516],{"class":76}," PIL",[33,48518,48519],{"class":39}," import",[33,48521,48522],{"class":47}," Image\n",[33,48524,48525],{"class":35,"line":57},[33,48526,48527],{"class":60},"# os 用来处理文件夹和文件路径\n",[33,48529,48530,48532],{"class":35,"line":64},[33,48531,31645],{"class":39},[33,48533,46558],{"class":47},[33,48535,48536],{"class":35,"line":83},[33,48537,48538],{"class":60},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[33,48540,48541,48543,48545,48547],{"class":35,"line":89},[33,48542,31645],{"class":39},[33,48544,32633],{"class":47},[33,48546,32636],{"class":39},[33,48548,32639],{"class":47},[33,48550,48551],{"class":35,"line":98},[33,48552,160],{"emptyLinePlaceholder":159},[33,48554,48555],{"class":35,"line":110},[33,48556,48557],{"class":60},"# 文件夹路径，包含所有图片文件\n",[33,48559,48560,48563,48565],{"class":35,"line":134},[33,48561,48562],{"class":47},"folder_path ",[33,48564,73],{"class":39},[33,48566,48567],{"class":119}," 'data_cat_dog'\n",[33,48569,48570],{"class":35,"line":156},[33,48571,160],{"emptyLinePlaceholder":159},[33,48573,48574],{"class":35,"line":163},[33,48575,48576],{"class":60},"# 初始化累积变量\n",[33,48578,48579,48582,48584],{"class":35,"line":169},[33,48580,48581],{"class":47},"total_pixels ",[33,48583,73],{"class":39},[33,48585,48586],{"class":76}," 0\n",[33,48588,48589,48592,48594,48597,48599,48601],{"class":35,"line":175},[33,48590,48591],{"class":47},"sum_normalized_pixel_values ",[33,48593,73],{"class":39},[33,48595,48596],{"class":47}," np.zeros(",[33,48598,712],{"class":76},[33,48600,47061],{"class":47},[33,48602,48603],{"class":60},"# 如果是RGB图像，需要三个通道的均值和方差\n",[33,48605,48606],{"class":35,"line":181},[33,48607,160],{"emptyLinePlaceholder":159},[33,48609,48610],{"class":35,"line":196},[33,48611,48612],{"class":60},"# 遍历文件夹中的图片文件\n",[33,48614,48615,48617,48620,48622],{"class":35,"line":213},[33,48616,4435],{"class":39},[33,48618,48619],{"class":47}," root, dirs, files ",[33,48621,27296],{"class":39},[33,48623,48624],{"class":47}," os.walk(folder_path):\n",[33,48626,48627,48629,48632,48634],{"class":35,"line":228},[33,48628,857],{"class":39},[33,48630,48631],{"class":47}," filename ",[33,48633,27296],{"class":39},[33,48635,48636],{"class":47}," files:\n",[33,48638,48639,48641,48644,48647,48649,48652,48654,48657,48659,48662,48665],{"class":35,"line":1345},[33,48640,3915],{"class":39},[33,48642,48643],{"class":47}," filename.endswith((",[33,48645,48646],{"class":119},"'.jpg'",[33,48648,13686],{"class":47},[33,48650,48651],{"class":119},"'.jpeg'",[33,48653,13686],{"class":47},[33,48655,48656],{"class":119},"'.png'",[33,48658,13686],{"class":47},[33,48660,48661],{"class":119},"'.bmp'",[33,48663,48664],{"class":47},")):  ",[33,48666,48667],{"class":60},"# 可根据实际情况添加其他格式\n",[33,48669,48670,48672,48674],{"class":35,"line":1350},[33,48671,46926],{"class":47},[33,48673,73],{"class":39},[33,48675,48676],{"class":47}," os.path.join(root, filename)\n",[33,48678,48679,48682,48684],{"class":35,"line":1359},[33,48680,48681],{"class":47},"            image ",[33,48683,73],{"class":39},[33,48685,48686],{"class":47}," Image.open(image_path)\n",[33,48688,48689,48692,48694],{"class":35,"line":1364},[33,48690,48691],{"class":47},"            image_array ",[33,48693,73],{"class":39},[33,48695,48696],{"class":47}," np.array(image)\n",[33,48698,48699],{"class":35,"line":1370},[33,48700,160],{"emptyLinePlaceholder":159},[33,48702,48703],{"class":35,"line":1425},[33,48704,48705],{"class":60},"            # 归一化像素值到0-1之间\n",[33,48707,48708,48711,48713,48716,48718],{"class":35,"line":1438},[33,48709,48710],{"class":47},"            normalized_image_array ",[33,48712,73],{"class":39},[33,48714,48715],{"class":47}," image_array ",[33,48717,2184],{"class":39},[33,48719,48720],{"class":76}," 255.0\n",[33,48722,48723],{"class":35,"line":1451},[33,48724,160],{"emptyLinePlaceholder":159},[33,48726,48727],{"class":35,"line":1457},[33,48728,48729],{"class":60},"            # print(image_path)\n",[33,48731,48732],{"class":35,"line":1466},[33,48733,48734],{"class":60},"            # print(normalized_image_array.shape)\n",[33,48736,48737],{"class":35,"line":1471},[33,48738,48739],{"class":60},"            # 累积归一化后的像素值和像素数量\n",[33,48741,48742,48745,48747],{"class":35,"line":1477},[33,48743,48744],{"class":47},"            total_pixels ",[33,48746,10728],{"class":39},[33,48748,48749],{"class":47}," normalized_image_array.size\n",[33,48751,48752],{"class":35,"line":1504},[33,48753,48754],{"class":60},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[33,48756,48757,48760,48762,48765,48768,48770,48772,48774,48776,48778],{"class":35,"line":1509},[33,48758,48759],{"class":47},"            sum_normalized_pixel_values ",[33,48761,10728],{"class":39},[33,48763,48764],{"class":47}," np.sum(normalized_image_array, ",[33,48766,48767],{"class":955},"axis",[33,48769,73],{"class":39},[33,48771,345],{"class":47},[33,48773,766],{"class":76},[33,48775,13686],{"class":47},[33,48777,701],{"class":76},[33,48779,31750],{"class":47},[33,48781,48782],{"class":35,"line":1525},[33,48783,160],{"emptyLinePlaceholder":159},[33,48785,48786],{"class":35,"line":1535},[33,48787,48788],{"class":60},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[33,48790,48791,48794,48796,48799,48801],{"class":35,"line":1540},[33,48792,48793],{"class":47},"mean ",[33,48795,73],{"class":39},[33,48797,48798],{"class":47}," sum_normalized_pixel_values ",[33,48800,2184],{"class":39},[33,48802,48803],{"class":47}," total_pixels\n",[33,48805,48806],{"class":35,"line":4027},[33,48807,160],{"emptyLinePlaceholder":159},[33,48809,48810,48813,48815,48817,48819],{"class":35,"line":4032},[33,48811,48812],{"class":47},"sum_squared_diff ",[33,48814,73],{"class":39},[33,48816,48596],{"class":47},[33,48818,712],{"class":76},[33,48820,884],{"class":47},[33,48822,48823],{"class":35,"line":9199},[33,48824,160],{"emptyLinePlaceholder":159},[33,48826,48827],{"class":35,"line":9223},[33,48828,48829],{"class":60},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[33,48831,48832],{"class":35,"line":9228},[33,48833,48834],{"class":60},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[33,48836,48837],{"class":35,"line":9234},[33,48838,48839],{"class":60},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[33,48841,48842],{"class":35,"line":9261},[33,48843,48844],{"class":60},"# Image.open(image_path)：打开图片\n",[33,48846,48847],{"class":35,"line":9266},[33,48848,48849],{"class":60},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[33,48851,48852,48854,48856,48858],{"class":35,"line":9272},[33,48853,4435],{"class":39},[33,48855,48619],{"class":47},[33,48857,27296],{"class":39},[33,48859,48624],{"class":47},[33,48861,48862,48864,48866,48868],{"class":35,"line":9284},[33,48863,857],{"class":39},[33,48865,48631],{"class":47},[33,48867,27296],{"class":39},[33,48869,48636],{"class":47},[33,48871,48872,48874,48876,48878,48880,48882,48884,48886,48888,48890],{"class":35,"line":9296},[33,48873,3915],{"class":39},[33,48875,48643],{"class":47},[33,48877,48646],{"class":119},[33,48879,13686],{"class":47},[33,48881,48651],{"class":119},[33,48883,13686],{"class":47},[33,48885,48656],{"class":119},[33,48887,13686],{"class":47},[33,48889,48661],{"class":119},[33,48891,48892],{"class":47},")):\n",[33,48894,48895,48897,48899],{"class":35,"line":9308},[33,48896,46926],{"class":47},[33,48898,73],{"class":39},[33,48900,48676],{"class":47},[33,48902,48903,48905,48907],{"class":35,"line":10967},[33,48904,48681],{"class":47},[33,48906,73],{"class":39},[33,48908,48686],{"class":47},[33,48910,48911,48913,48915],{"class":35,"line":10992},[33,48912,48691],{"class":47},[33,48914,73],{"class":39},[33,48916,48696],{"class":47},[33,48918,48919],{"class":35,"line":11015},[33,48920,48705],{"class":60},[33,48922,48923,48925,48927,48929,48931],{"class":35,"line":11039},[33,48924,48710],{"class":47},[33,48926,73],{"class":39},[33,48928,48715],{"class":47},[33,48930,2184],{"class":39},[33,48932,48720],{"class":76},[33,48934,48935],{"class":35,"line":11044},[33,48936,48734],{"class":60},[33,48938,48939],{"class":35,"line":11049},[33,48940,48941],{"class":60},"            # print(mean.shape)\n",[33,48943,48944],{"class":35,"line":11054},[33,48945,48729],{"class":60},[33,48947,48948],{"class":35,"line":11063},[33,48949,160],{"emptyLinePlaceholder":159},[33,48951,48952,48955],{"class":35,"line":11068},[33,48953,48954],{"class":39},"            try",[33,48956,5141],{"class":47},[33,48958,48959,48962,48964,48967,48969,48972,48974],{"class":35,"line":11074},[33,48960,48961],{"class":47},"                diff ",[33,48963,73],{"class":39},[33,48965,48966],{"class":47}," (normalized_image_array ",[33,48968,1199],{"class":39},[33,48970,48971],{"class":47}," mean) ",[33,48973,11912],{"class":39},[33,48975,48976],{"class":76}," 2\n",[33,48978,48979,48982,48984,48987,48989,48991,48993,48995,48997,48999],{"class":35,"line":11095},[33,48980,48981],{"class":47},"                sum_squared_diff ",[33,48983,10728],{"class":39},[33,48985,48986],{"class":47}," np.sum(diff, ",[33,48988,48767],{"class":955},[33,48990,73],{"class":39},[33,48992,345],{"class":47},[33,48994,766],{"class":76},[33,48996,13686],{"class":47},[33,48998,701],{"class":76},[33,49000,31750],{"class":47},[33,49002,49003,49006],{"class":35,"line":11101},[33,49004,49005],{"class":39},"            except",[33,49007,5141],{"class":47},[33,49009,49010,49013,49015,49017,49020],{"class":35,"line":11115},[33,49011,49012],{"class":76},"                print",[33,49014,345],{"class":47},[33,49016,1677],{"class":39},[33,49018,49019],{"class":119},"\"捕获到自定义异常\"",[33,49021,884],{"class":47},[33,49023,49024],{"class":35,"line":11121},[33,49025,49026],{"class":60},"            # diff = (normalized_image_array - mean) ** 2\n",[33,49028,49029],{"class":35,"line":11148},[33,49030,49031],{"class":60},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[33,49033,49034],{"class":35,"line":11157},[33,49035,160],{"emptyLinePlaceholder":159},[33,49037,49038,49041,49043,49046,49048],{"class":35,"line":11163},[33,49039,49040],{"class":47},"variance ",[33,49042,73],{"class":39},[33,49044,49045],{"class":47}," sum_squared_diff ",[33,49047,2184],{"class":39},[33,49049,48803],{"class":47},[33,49051,49052],{"class":35,"line":11171},[33,49053,160],{"emptyLinePlaceholder":159},[33,49055,49056,49058,49060,49063],{"class":35,"line":11176},[33,49057,31668],{"class":76},[33,49059,345],{"class":47},[33,49061,49062],{"class":119},"\"Mean:\"",[33,49064,49065],{"class":47},", mean)\n",[33,49067,49068,49070,49072,49075],{"class":35,"line":17855},[33,49069,31668],{"class":76},[33,49071,345],{"class":47},[33,49073,49074],{"class":119},"\"Variance:\"",[33,49076,49077],{"class":47},", variance)\n",[23,49079,49081],{"className":31631,"code":49080,"language":31633,"meta":28,"style":28},"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",[30,49082,49083,49089,49095,49105,49111,49121,49135,49145,49155,49165,49169,49179,49189,49193,49197,49205,49210,49215,49234,49238,49243,49248,49253,49258,49299,49304,49314,49319,49332,49337,49342,49347,49352,49357,49361,49366,49371,49393,49397,49429,49443,49453,49463,49467,49477,49491,49501,49511,49521,49527,49531,49535,49539,49543,49547,49555,49575,49579,49583,49587,49591,49607,49611,49615,49623,49627,49631,49639,49643,49647,49651,49659,49663,49667,49671,49679,49683,49691,49695,49703,49707,49715,49719,49727,49731,49735,49743,49747,49751,49763,49787,49801,49805,49809,49813,49821,49825,49833,49837,49845,49849,49857,49861,49869,49873,49881,49885,49897,49901,49909,49913,49921,49925,49929,49933,49937,49945,49949,49965,49969,49977,49981,49985,49989,49993,49997,50001,50005,50021,50025,50037,50041,50053,50057,50069,50073,50081,50085,50093,50097,50101,50105,50111,50115,50123,50127,50143,50147,50155,50159,50175,50187,50191,50203,50207,50211,50219,50223,50227,50235,50239,50247,50251,50259,50263,50267,50309,50351,50355,50359,50375,50379,50395,50399,50403,50411,50415,50419,50431,50469,50473,50477,50485,50489,50503,50513,50519,50525,50531,50537,50541,50545,50551,50555,50559,50567,50571,50589,50593,50597,50601,50617,50621,50625,50629,50633,50637,50657,50677,50681,50685,50689,50697,50705,50709,50725,50745,50765,50769,50774,50783,50792,50797,50802,50807,50820,50825,50834,50843,50860],{"__ignoreMap":28},[33,49084,49085,49087],{"class":35,"line":36},[33,49086,31645],{"class":39},[33,49088,33075],{"class":47},[33,49090,49091,49093],{"class":35,"line":51},[33,49092,31645],{"class":39},[33,49094,33082],{"class":47},[33,49096,49097,49099,49101,49103],{"class":35,"line":57},[33,49098,31645],{"class":39},[33,49100,33093],{"class":47},[33,49102,32636],{"class":39},[33,49104,33098],{"class":47},[33,49106,49107,49109],{"class":35,"line":64},[33,49108,31645],{"class":39},[33,49110,31648],{"class":47},[33,49112,49113,49115,49117,49119],{"class":35,"line":83},[33,49114,31990],{"class":39},[33,49116,32668],{"class":47},[33,49118,31645],{"class":39},[33,49120,33115],{"class":47},[33,49122,49123,49125,49127,49129,49132],{"class":35,"line":89},[33,49124,31990],{"class":39},[33,49126,32621],{"class":47},[33,49128,31645],{"class":39},[33,49130,49131],{"class":47}," ImageFolder ",[33,49133,49134],{"class":60},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[33,49136,49137,49139,49141,49143],{"class":35,"line":98},[33,49138,31990],{"class":39},[33,49140,32651],{"class":47},[33,49142,31645],{"class":39},[33,49144,32656],{"class":47},[33,49146,49147,49149,49151,49153],{"class":35,"line":110},[33,49148,31645],{"class":39},[33,49150,32668],{"class":47},[33,49152,32636],{"class":39},[33,49154,32673],{"class":47},[33,49156,49157,49159,49161,49163],{"class":35,"line":134},[33,49158,31645],{"class":39},[33,49160,32685],{"class":47},[33,49162,32636],{"class":39},[33,49164,32690],{"class":47},[33,49166,49167],{"class":35,"line":156},[33,49168,33160],{"class":60},[33,49170,49171,49173,49175,49177],{"class":35,"line":163},[33,49172,31990],{"class":39},[33,49174,33167],{"class":47},[33,49176,31645],{"class":39},[33,49178,44284],{"class":47},[33,49180,49181,49183,49185,49187],{"class":35,"line":169},[33,49182,31990],{"class":39},[33,49184,31993],{"class":47},[33,49186,31645],{"class":39},[33,49188,31998],{"class":47},[33,49190,49191],{"class":35,"line":175},[33,49192,160],{"emptyLinePlaceholder":159},[33,49194,49195],{"class":35,"line":181},[33,49196,33195],{"class":60},[33,49198,49199,49201,49203],{"class":35,"line":196},[33,49200,33200],{"class":39},[33,49202,33203],{"class":43},[33,49204,33206],{"class":47},[33,49206,49207],{"class":35,"line":213},[33,49208,49209],{"class":60},"    # 导入自己的数据集，并进行数据处理\n",[33,49211,49212],{"class":35,"line":228},[33,49213,49214],{"class":60},"    # 定义数据集的路径\n",[33,49216,49217,49220,49222,49224,49226,49228,49232],{"class":35,"line":1345},[33,49218,49219],{"class":76},"    ROOT_PATH",[33,49221,73],{"class":39},[33,49223,2270],{"class":39},[33,49225,1866],{"class":119},[33,49227,2158],{"class":76},[33,49229,49231],{"class":49230},"sA_wV","\u002Fdata\u002Ftrain",[33,49233,26386],{"class":119},[33,49235,49236],{"class":35,"line":1350},[33,49237,160],{"emptyLinePlaceholder":159},[33,49239,49240],{"class":35,"line":1359},[33,49241,49242],{"class":60},"    # 定义归一化方法\n",[33,49244,49245],{"class":35,"line":1364},[33,49246,49247],{"class":60},"    # 这里需要先计算一下数据集的均值和方差\n",[33,49249,49250],{"class":35,"line":1370},[33,49251,49252],{"class":60},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[33,49254,49255],{"class":35,"line":1425},[33,49256,49257],{"class":60},"    # 第一个参数是均值，第二个参数是方差\n",[33,49259,49260,49263,49265,49268,49271,49273,49276,49278,49281,49284,49287,49289,49292,49294,49297],{"class":35,"line":1438},[33,49261,49262],{"class":47},"    normalize",[33,49264,73],{"class":39},[33,49266,49267],{"class":47},"transforms.Normalize([",[33,49269,49270],{"class":76},"0.162",[33,49272,704],{"class":47},[33,49274,49275],{"class":76},"0.151",[33,49277,704],{"class":47},[33,49279,49280],{"class":76},"0.138",[33,49282,49283],{"class":47},"],[",[33,49285,49286],{"class":76},"0.058",[33,49288,704],{"class":47},[33,49290,49291],{"class":76},"0.052",[33,49293,704],{"class":47},[33,49295,49296],{"class":76},"0.048",[33,49298,1276],{"class":47},[33,49300,49301],{"class":35,"line":1451},[33,49302,49303],{"class":60},"    # 定义数据集处理方法变量\n",[33,49305,49306,49309,49311],{"class":35,"line":1457},[33,49307,49308],{"class":47},"    train_transform",[33,49310,73],{"class":39},[33,49312,49313],{"class":47},"transforms.Compose([\n",[33,49315,49316],{"class":35,"line":1466},[33,49317,49318],{"class":60},"        # 调整图像大小为224*224\n",[33,49320,49321,49324,49326,49328,49330],{"class":35,"line":1471},[33,49322,49323],{"class":47},"        transforms.Resize((",[33,49325,32754],{"class":76},[33,49327,704],{"class":47},[33,49329,32754],{"class":76},[33,49331,43875],{"class":47},[33,49333,49334],{"class":35,"line":1477},[33,49335,49336],{"class":60},"        # 将图像转换为张量\n",[33,49338,49339],{"class":35,"line":1504},[33,49340,49341],{"class":47},"        transforms.ToTensor(),\n",[33,49343,49344],{"class":35,"line":1509},[33,49345,49346],{"class":47},"        normalize])\n",[33,49348,49349],{"class":35,"line":1525},[33,49350,49351],{"class":60},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[33,49353,49354],{"class":35,"line":1535},[33,49355,49356],{"class":60},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[33,49358,49359],{"class":35,"line":1540},[33,49360,160],{"emptyLinePlaceholder":159},[33,49362,49363],{"class":35,"line":4027},[33,49364,49365],{"class":60},"    # 加载数据集\n",[33,49367,49368],{"class":35,"line":4032},[33,49369,49370],{"class":60},"    # 传入数据集路径与处理方法\n",[33,49372,49373,49375,49377,49380,49383,49385,49388,49390],{"class":35,"line":9199},[33,49374,33211],{"class":47},[33,49376,73],{"class":39},[33,49378,49379],{"class":47},"ImageFolder(",[33,49381,49382],{"class":76},"ROOT_PATH",[33,49384,704],{"class":47},[33,49386,49387],{"class":955},"transform",[33,49389,73],{"class":39},[33,49391,49392],{"class":47},"train_transform)\n",[33,49394,49395],{"class":35,"line":9223},[33,49396,160],{"emptyLinePlaceholder":159},[33,49398,49399,49401,49403,49405,49407,49409,49411,49413,49415,49417,49419,49421,49423,49425,49427],{"class":35,"line":9228},[33,49400,33263],{"class":47},[33,49402,73],{"class":39},[33,49404,33268],{"class":47},[33,49406,33271],{"class":76},[33,49408,345],{"class":47},[33,49410,33276],{"class":76},[33,49412,2057],{"class":39},[33,49414,1196],{"class":76},[33,49416,33283],{"class":47},[33,49418,33271],{"class":76},[33,49420,345],{"class":47},[33,49422,33290],{"class":76},[33,49424,2057],{"class":39},[33,49426,1196],{"class":76},[33,49428,33297],{"class":47},[33,49430,49431,49433,49435,49437,49439,49441],{"class":35,"line":9234},[33,49432,33302],{"class":47},[33,49434,73],{"class":39},[33,49436,33307],{"class":47},[33,49438,32790],{"class":955},[33,49440,73],{"class":39},[33,49442,32795],{"class":47},[33,49444,49445,49447,49449,49451],{"class":35,"line":9261},[33,49446,33318],{"class":955},[33,49448,73],{"class":39},[33,49450,1814],{"class":76},[33,49452,32719],{"class":47},[33,49454,49455,49457,49459,49461],{"class":35,"line":9266},[33,49456,33330],{"class":955},[33,49458,73],{"class":39},[33,49460,32729],{"class":76},[33,49462,32719],{"class":47},[33,49464,49465],{"class":35,"line":9272},[33,49466,33341],{"class":60},[33,49468,49469,49471,49473,49475],{"class":35,"line":9284},[33,49470,33346],{"class":955},[33,49472,73],{"class":39},[33,49474,737],{"class":76},[33,49476,884],{"class":47},[33,49478,49479,49481,49483,49485,49487,49489],{"class":35,"line":9296},[33,49480,33357],{"class":47},[33,49482,73],{"class":39},[33,49484,32787],{"class":47},[33,49486,32790],{"class":955},[33,49488,73],{"class":39},[33,49490,33368],{"class":47},[33,49492,49493,49495,49497,49499],{"class":35,"line":9308},[33,49494,33373],{"class":955},[33,49496,73],{"class":39},[33,49498,1814],{"class":76},[33,49500,32719],{"class":47},[33,49502,49503,49505,49507,49509],{"class":35,"line":10967},[33,49504,33384],{"class":955},[33,49506,73],{"class":39},[33,49508,32729],{"class":76},[33,49510,32719],{"class":47},[33,49512,49513,49515,49517,49519],{"class":35,"line":10992},[33,49514,33395],{"class":955},[33,49516,73],{"class":39},[33,49518,737],{"class":76},[33,49520,884],{"class":47},[33,49522,49523,49525],{"class":35,"line":11015},[33,49524,5489],{"class":39},[33,49526,33408],{"class":47},[33,49528,49529],{"class":35,"line":11039},[33,49530,160],{"emptyLinePlaceholder":159},[33,49532,49533],{"class":35,"line":11044},[33,49534,33417],{"class":60},[33,49536,49537],{"class":35,"line":11049},[33,49538,33422],{"class":60},[33,49540,49541],{"class":35,"line":11054},[33,49542,160],{"emptyLinePlaceholder":159},[33,49544,49545],{"class":35,"line":11063},[33,49546,33431],{"class":60},[33,49548,49549,49551,49553],{"class":35,"line":11068},[33,49550,33200],{"class":39},[33,49552,33438],{"class":43},[33,49554,33441],{"class":47},[33,49556,49557,49559,49561,49563,49565,49567,49569,49571,49573],{"class":35,"line":11074},[33,49558,32490],{"class":47},[33,49560,73],{"class":39},[33,49562,31704],{"class":47},[33,49564,32497],{"class":119},[33,49566,3145],{"class":39},[33,49568,32502],{"class":47},[33,49570,3142],{"class":39},[33,49572,33460],{"class":119},[33,49574,884],{"class":47},[33,49576,49577],{"class":35,"line":11095},[33,49578,160],{"emptyLinePlaceholder":159},[33,49580,49581],{"class":35,"line":11101},[33,49582,33475],{"class":60},[33,49584,49585],{"class":35,"line":11115},[33,49586,33480],{"class":60},[33,49588,49589],{"class":35,"line":11121},[33,49590,33485],{"class":60},[33,49592,49593,49595,49597,49599,49601,49603,49605],{"class":35,"line":11148},[33,49594,33490],{"class":47},[33,49596,73],{"class":39},[33,49598,33495],{"class":47},[33,49600,33498],{"class":955},[33,49602,73],{"class":39},[33,49604,33503],{"class":76},[33,49606,884],{"class":47},[33,49608,49609],{"class":35,"line":11157},[33,49610,160],{"emptyLinePlaceholder":159},[33,49612,49613],{"class":35,"line":11163},[33,49614,33514],{"class":60},[33,49616,49617,49619,49621],{"class":35,"line":11171},[33,49618,33519],{"class":47},[33,49620,73],{"class":39},[33,49622,33524],{"class":47},[33,49624,49625],{"class":35,"line":11176},[33,49626,160],{"emptyLinePlaceholder":159},[33,49628,49629],{"class":35,"line":17855},[33,49630,33533],{"class":60},[33,49632,49633,49635,49637],{"class":35,"line":17861},[33,49634,32542],{"class":47},[33,49636,73],{"class":39},[33,49638,33542],{"class":47},[33,49640,49641],{"class":35,"line":17884},[33,49642,33547],{"class":60},[33,49644,49645],{"class":35,"line":17890},[33,49646,33552],{"class":60},[33,49648,49649],{"class":35,"line":17913},[33,49650,33557],{"class":60},[33,49652,49653,49655,49657],{"class":35,"line":17927},[33,49654,33562],{"class":47},[33,49656,73],{"class":39},[33,49658,33567],{"class":47},[33,49660,49661],{"class":35,"line":17947},[33,49662,160],{"emptyLinePlaceholder":159},[33,49664,49665],{"class":35,"line":17953},[33,49666,33580],{"class":60},[33,49668,49669],{"class":35,"line":17964},[33,49670,33585],{"class":60},[33,49672,49673,49675,49677],{"class":35,"line":17987},[33,49674,33590],{"class":47},[33,49676,73],{"class":39},[33,49678,33595],{"class":76},[33,49680,49681],{"class":35,"line":18009},[33,49682,33600],{"class":60},[33,49684,49685,49687,49689],{"class":35,"line":18014},[33,49686,33605],{"class":47},[33,49688,73],{"class":39},[33,49690,33610],{"class":47},[33,49692,49693],{"class":35,"line":18020},[33,49694,33615],{"class":60},[33,49696,49697,49699,49701],{"class":35,"line":18034},[33,49698,33620],{"class":47},[33,49700,73],{"class":39},[33,49702,33610],{"class":47},[33,49704,49705],{"class":35,"line":18047},[33,49706,33629],{"class":60},[33,49708,49709,49711,49713],{"class":35,"line":18052},[33,49710,33634],{"class":47},[33,49712,73],{"class":39},[33,49714,33610],{"class":47},[33,49716,49717],{"class":35,"line":18066},[33,49718,33643],{"class":60},[33,49720,49721,49723,49725],{"class":35,"line":18071},[33,49722,33648],{"class":47},[33,49724,73],{"class":39},[33,49726,33610],{"class":47},[33,49728,49729],{"class":35,"line":18077},[33,49730,160],{"emptyLinePlaceholder":159},[33,49732,49733],{"class":35,"line":18082},[33,49734,33661],{"class":60},[33,49736,49737,49739,49741],{"class":35,"line":18096},[33,49738,33666],{"class":47},[33,49740,73],{"class":39},[33,49742,33671],{"class":47},[33,49744,49745],{"class":35,"line":18101},[33,49746,160],{"emptyLinePlaceholder":159},[33,49748,49749],{"class":35,"line":18106},[33,49750,33684],{"class":60},[33,49752,49753,49755,49757,49759,49761],{"class":35,"line":18120},[33,49754,857],{"class":39},[33,49756,33691],{"class":47},[33,49758,27296],{"class":39},[33,49760,33696],{"class":76},[33,49762,33699],{"class":47},[33,49764,49765,49767,49769,49771,49773,49775,49777,49779,49781,49783,49785],{"class":35,"line":18132},[33,49766,33704],{"class":76},[33,49768,345],{"class":47},[33,49770,33709],{"class":119},[33,49772,33712],{"class":76},[33,49774,2184],{"class":119},[33,49776,33712],{"class":76},[33,49778,1866],{"class":119},[33,49780,33721],{"class":47},[33,49782,1199],{"class":39},[33,49784,701],{"class":76},[33,49786,31750],{"class":47},[33,49788,49789,49791,49793,49795,49797,49799],{"class":35,"line":18137},[33,49790,33704],{"class":76},[33,49792,345],{"class":47},[33,49794,33736],{"class":119},[33,49796,2057],{"class":39},[33,49798,77],{"class":76},[33,49800,884],{"class":47},[33,49802,49803],{"class":35,"line":18150},[33,49804,160],{"emptyLinePlaceholder":159},[33,49806,49807],{"class":35,"line":18155},[33,49808,33751],{"class":60},[33,49810,49811],{"class":35,"line":18160},[33,49812,33756],{"class":60},[33,49814,49815,49817,49819],{"class":35,"line":18165},[33,49816,33761],{"class":47},[33,49818,73],{"class":39},[33,49820,33595],{"class":76},[33,49822,49823],{"class":35,"line":18178},[33,49824,33770],{"class":60},[33,49826,49827,49829,49831],{"class":35,"line":18183},[33,49828,33775],{"class":47},[33,49830,73],{"class":39},[33,49832,4493],{"class":76},[33,49834,49835],{"class":35,"line":33886},[33,49836,33784],{"class":60},[33,49838,49839,49841,49843],{"class":35,"line":33892},[33,49840,33789],{"class":47},[33,49842,73],{"class":39},[33,49844,33595],{"class":76},[33,49846,49847],{"class":35,"line":33898},[33,49848,33798],{"class":60},[33,49850,49851,49853,49855],{"class":35,"line":33904},[33,49852,33803],{"class":47},[33,49854,73],{"class":39},[33,49856,4493],{"class":76},[33,49858,49859],{"class":35,"line":33910},[33,49860,33812],{"class":60},[33,49862,49863,49865,49867],{"class":35,"line":33921},[33,49864,33817],{"class":47},[33,49866,73],{"class":39},[33,49868,4493],{"class":76},[33,49870,49871],{"class":35,"line":33927},[33,49872,33826],{"class":60},[33,49874,49875,49877,49879],{"class":35,"line":33947},[33,49876,33831],{"class":47},[33,49878,73],{"class":39},[33,49880,4493],{"class":76},[33,49882,49883],{"class":35,"line":33953},[33,49884,33840],{"class":60},[33,49886,49887,49889,49891,49893,49895],{"class":35,"line":33964},[33,49888,1216],{"class":39},[33,49890,32854],{"class":47},[33,49892,27296],{"class":39},[33,49894,32859],{"class":76},[33,49896,33853],{"class":47},[33,49898,49899],{"class":35,"line":33970},[33,49900,33858],{"class":60},[33,49902,49903,49905,49907],{"class":35,"line":33976},[33,49904,33863],{"class":47},[33,49906,73],{"class":39},[33,49908,33868],{"class":47},[33,49910,49911],{"class":35,"line":33982},[33,49912,33873],{"class":60},[33,49914,49915,49917,49919],{"class":35,"line":33988},[33,49916,33878],{"class":47},[33,49918,73],{"class":39},[33,49920,33883],{"class":47},[33,49922,49923],{"class":35,"line":33994},[33,49924,33889],{"class":60},[33,49926,49927],{"class":35,"line":34000},[33,49928,33895],{"class":47},[33,49930,49931],{"class":35,"line":34006},[33,49932,33901],{"class":60},[33,49934,49935],{"class":35,"line":34026},[33,49936,33907],{"class":60},[33,49938,49939,49941,49943],{"class":35,"line":34032},[33,49940,33913],{"class":47},[33,49942,73],{"class":39},[33,49944,33918],{"class":47},[33,49946,49947],{"class":35,"line":34048},[33,49948,33924],{"class":60},[33,49950,49951,49953,49955,49957,49959,49961,49963],{"class":35,"line":34054},[33,49952,33930],{"class":47},[33,49954,73],{"class":39},[33,49956,33935],{"class":47},[33,49958,33938],{"class":955},[33,49960,73],{"class":39},[33,49962,701],{"class":76},[33,49964,884],{"class":47},[33,49966,49967],{"class":35,"line":34068},[33,49968,33950],{"class":60},[33,49970,49971,49973,49975],{"class":35,"line":34074},[33,49972,33956],{"class":47},[33,49974,73],{"class":39},[33,49976,33961],{"class":47},[33,49978,49979],{"class":35,"line":34089},[33,49980,33967],{"class":60},[33,49982,49983],{"class":35,"line":34095},[33,49984,33973],{"class":47},[33,49986,49987],{"class":35,"line":34104},[33,49988,33979],{"class":60},[33,49990,49991],{"class":35,"line":34110},[33,49992,33985],{"class":47},[33,49994,49995],{"class":35,"line":34119},[33,49996,33991],{"class":60},[33,49998,49999],{"class":35,"line":34125},[33,50000,33997],{"class":47},[33,50002,50003],{"class":35,"line":34131},[33,50004,34003],{"class":60},[33,50006,50007,50009,50011,50013,50015,50017,50019],{"class":35,"line":34140},[33,50008,34009],{"class":47},[33,50010,10728],{"class":39},[33,50012,34014],{"class":47},[33,50014,2057],{"class":39},[33,50016,34019],{"class":47},[33,50018,766],{"class":76},[33,50020,884],{"class":47},[33,50022,50023],{"class":35,"line":34146},[33,50024,34029],{"class":60},[33,50026,50027,50029,50031,50033,50035],{"class":35,"line":34157},[33,50028,34035],{"class":47},[33,50030,10728],{"class":39},[33,50032,34040],{"class":47},[33,50034,4359],{"class":39},[33,50036,34045],{"class":47},[33,50038,50039],{"class":35,"line":34163},[33,50040,34051],{"class":60},[33,50042,50043,50045,50047,50049,50051],{"class":35,"line":34182},[33,50044,34057],{"class":47},[33,50046,10728],{"class":39},[33,50048,34019],{"class":47},[33,50050,766],{"class":76},[33,50052,884],{"class":47},[33,50054,50055],{"class":35,"line":34188},[33,50056,34071],{"class":60},[33,50058,50059,50061,50063,50065,50067],{"class":35,"line":34199},[33,50060,1216],{"class":39},[33,50062,34079],{"class":47},[33,50064,27296],{"class":39},[33,50066,32859],{"class":76},[33,50068,34086],{"class":47},[33,50070,50071],{"class":35,"line":34205},[33,50072,34092],{"class":60},[33,50074,50075,50077,50079],{"class":35,"line":34225},[33,50076,33863],{"class":47},[33,50078,73],{"class":39},[33,50080,33868],{"class":47},[33,50082,50083],{"class":35,"line":34241},[33,50084,34107],{"class":60},[33,50086,50087,50089,50091],{"class":35,"line":34247},[33,50088,33878],{"class":47},[33,50090,73],{"class":39},[33,50092,33883],{"class":47},[33,50094,50095],{"class":35,"line":34261},[33,50096,34122],{"class":60},[33,50098,50099],{"class":35,"line":34267},[33,50100,34128],{"class":47},[33,50102,50103],{"class":35,"line":34273},[33,50104,37609],{"class":60},[33,50106,50107,50109],{"class":35,"line":34284},[33,50108,34134],{"class":39},[33,50110,34137],{"class":47},[33,50112,50113],{"class":35,"line":34290},[33,50114,34143],{"class":60},[33,50116,50117,50119,50121],{"class":35,"line":34296},[33,50118,37624],{"class":47},[33,50120,73],{"class":39},[33,50122,33918],{"class":47},[33,50124,50125],{"class":35,"line":34306},[33,50126,34160],{"class":60},[33,50128,50129,50131,50133,50135,50137,50139,50141],{"class":35,"line":34312},[33,50130,37637],{"class":47},[33,50132,73],{"class":39},[33,50134,33935],{"class":47},[33,50136,33938],{"class":955},[33,50138,73],{"class":39},[33,50140,701],{"class":76},[33,50142,884],{"class":47},[33,50144,50145],{"class":35,"line":34323},[33,50146,34185],{"class":60},[33,50148,50149,50151,50153],{"class":35,"line":34329},[33,50150,37658],{"class":47},[33,50152,73],{"class":39},[33,50154,33961],{"class":47},[33,50156,50157],{"class":35,"line":34339},[33,50158,34202],{"class":60},[33,50160,50161,50163,50165,50167,50169,50171,50173],{"class":35,"line":34344},[33,50162,37671],{"class":47},[33,50164,10728],{"class":39},[33,50166,37676],{"class":47},[33,50168,2057],{"class":39},[33,50170,34019],{"class":47},[33,50172,766],{"class":76},[33,50174,884],{"class":47},[33,50176,50177,50179,50181,50183,50185],{"class":35,"line":34350},[33,50178,37689],{"class":47},[33,50180,10728],{"class":39},[33,50182,34040],{"class":47},[33,50184,4359],{"class":39},[33,50186,34045],{"class":47},[33,50188,50189],{"class":35,"line":34399},[33,50190,37702],{"class":60},[33,50192,50193,50195,50197,50199,50201],{"class":35,"line":34446},[33,50194,37707],{"class":47},[33,50196,10728],{"class":39},[33,50198,34019],{"class":47},[33,50200,766],{"class":76},[33,50202,884],{"class":47},[33,50204,50205],{"class":35,"line":34451},[33,50206,34264],{"class":60},[33,50208,50209],{"class":35,"line":34457},[33,50210,34270],{"class":60},[33,50212,50213,50215,50217],{"class":35,"line":34476},[33,50214,34276],{"class":47},[33,50216,2184],{"class":39},[33,50218,34281],{"class":47},[33,50220,50221],{"class":35,"line":34482},[33,50222,34287],{"class":60},[33,50224,50225],{"class":35,"line":34502},[33,50226,34293],{"class":60},[33,50228,50229,50231,50233],{"class":35,"line":34508},[33,50230,34299],{"class":47},[33,50232,2184],{"class":39},[33,50234,34281],{"class":47},[33,50236,50237],{"class":35,"line":34514},[33,50238,34309],{"class":60},[33,50240,50241,50243,50245],{"class":35,"line":34524},[33,50242,34315],{"class":47},[33,50244,2184],{"class":39},[33,50246,34320],{"class":47},[33,50248,50249],{"class":35,"line":34529},[33,50250,34326],{"class":60},[33,50252,50253,50255,50257],{"class":35,"line":34535},[33,50254,34332],{"class":47},[33,50256,2184],{"class":39},[33,50258,34320],{"class":47},[33,50260,50261],{"class":35,"line":34551},[33,50262,160],{"emptyLinePlaceholder":159},[33,50264,50265],{"class":35,"line":34596},[33,50266,34347],{"class":60},[33,50268,50269,50271,50273,50275,50277,50279,50281,50283,50285,50287,50289,50291,50293,50295,50297,50299,50301,50303,50305,50307],{"class":35,"line":34602},[33,50270,33704],{"class":76},[33,50272,345],{"class":47},[33,50274,4994],{"class":119},[33,50276,33712],{"class":76},[33,50278,34361],{"class":119},[33,50280,698],{"class":76},[33,50282,34366],{"class":39},[33,50284,2542],{"class":76},[33,50286,34371],{"class":119},[33,50288,698],{"class":76},[33,50290,34366],{"class":39},[33,50292,2542],{"class":76},[33,50294,4994],{"class":119},[33,50296,34382],{"class":47},[33,50298,1199],{"class":39},[33,50300,701],{"class":76},[33,50302,34389],{"class":47},[33,50304,1199],{"class":39},[33,50306,701],{"class":76},[33,50308,34396],{"class":47},[33,50310,50311,50313,50315,50317,50319,50321,50323,50325,50327,50329,50331,50333,50335,50337,50339,50341,50343,50345,50347,50349],{"class":35,"line":34608},[33,50312,33704],{"class":76},[33,50314,345],{"class":47},[33,50316,4994],{"class":119},[33,50318,33712],{"class":76},[33,50320,34410],{"class":119},[33,50322,698],{"class":76},[33,50324,34366],{"class":39},[33,50326,2542],{"class":76},[33,50328,34419],{"class":119},[33,50330,698],{"class":76},[33,50332,34366],{"class":39},[33,50334,2542],{"class":76},[33,50336,4994],{"class":119},[33,50338,34430],{"class":47},[33,50340,1199],{"class":39},[33,50342,701],{"class":76},[33,50344,34437],{"class":47},[33,50346,1199],{"class":39},[33,50348,701],{"class":76},[33,50350,34396],{"class":47},[33,50352,50353],{"class":35,"line":34614},[33,50354,160],{"emptyLinePlaceholder":159},[33,50356,50357],{"class":35,"line":34625},[33,50358,34454],{"class":60},[33,50360,50361,50363,50365,50367,50369,50371,50373],{"class":35,"line":34631},[33,50362,3915],{"class":39},[33,50364,34462],{"class":47},[33,50366,1199],{"class":39},[33,50368,701],{"class":76},[33,50370,693],{"class":47},[33,50372,1265],{"class":39},[33,50374,34473],{"class":47},[33,50376,50377],{"class":35,"line":34637},[33,50378,34479],{"class":60},[33,50380,50381,50383,50385,50387,50389,50391,50393],{"class":35,"line":34643},[33,50382,34485],{"class":47},[33,50384,1666],{"class":76},[33,50386,73],{"class":39},[33,50388,34492],{"class":47},[33,50390,1199],{"class":39},[33,50392,701],{"class":76},[33,50394,34499],{"class":47},[33,50396,50397],{"class":35,"line":34661},[33,50398,34505],{"class":60},[33,50400,50401],{"class":35,"line":34675},[33,50402,34511],{"class":60},[33,50404,50405,50407,50409],{"class":35,"line":34684},[33,50406,34517],{"class":47},[33,50408,73],{"class":39},[33,50410,33567],{"class":47},[33,50412,50413],{"class":35,"line":34693},[33,50414,160],{"emptyLinePlaceholder":159},[33,50416,50417],{"class":35,"line":34702},[33,50418,34532],{"class":60},[33,50420,50421,50423,50425,50427,50429],{"class":35,"line":34711},[33,50422,34538],{"class":47},[33,50424,73],{"class":39},[33,50426,34543],{"class":47},[33,50428,1199],{"class":39},[33,50430,34548],{"class":47},[33,50432,50433,50435,50437,50439,50441,50443,50445,50447,50449,50451,50453,50455,50457,50459,50461,50463,50465,50467],{"class":35,"line":34717},[33,50434,33704],{"class":76},[33,50436,345],{"class":47},[33,50438,34558],{"class":119},[33,50440,698],{"class":76},[33,50442,34563],{"class":39},[33,50444,2542],{"class":76},[33,50446,2144],{"class":119},[33,50448,698],{"class":76},[33,50450,34563],{"class":39},[33,50452,2542],{"class":76},[33,50454,34576],{"class":119},[33,50456,34579],{"class":47},[33,50458,34582],{"class":39},[33,50460,2505],{"class":76},[33,50462,34587],{"class":47},[33,50464,1939],{"class":39},[33,50466,2505],{"class":76},[33,50468,31750],{"class":47},[33,50470,50471],{"class":35,"line":34723},[33,50472,37986],{"class":60},[33,50474,50475],{"class":35,"line":34731},[33,50476,37991],{"class":60},[33,50478,50479,50481,50483],{"class":35,"line":34736},[33,50480,37996],{"class":47},[33,50482,34620],{"class":119},[33,50484,884],{"class":47},[33,50486,50487],{"class":35,"line":34742},[33,50488,34640],{"class":60},[33,50490,50491,50493,50495,50497,50499,50501],{"class":35,"line":34753},[33,50492,34646],{"class":47},[33,50494,73],{"class":39},[33,50496,34651],{"class":47},[33,50498,34654],{"class":955},[33,50500,73],{"class":39},[33,50502,54],{"class":47},[33,50504,50505,50507,50509,50511],{"class":35,"line":34759},[33,50506,34664],{"class":119},[33,50508,2458],{"class":47},[33,50510,34669],{"class":76},[33,50512,34672],{"class":47},[33,50514,50515,50517],{"class":35,"line":34779},[33,50516,34678],{"class":119},[33,50518,34681],{"class":47},[33,50520,50521,50523],{"class":35,"line":34785},[33,50522,34687],{"class":119},[33,50524,34690],{"class":47},[33,50526,50527,50529],{"class":35,"line":34791},[33,50528,34696],{"class":119},[33,50530,34699],{"class":47},[33,50532,50533,50535],{"class":35,"line":34797},[33,50534,34705],{"class":119},[33,50536,34708],{"class":47},[33,50538,50539],{"class":35,"line":34814},[33,50540,34714],{"class":47},[33,50542,50543],{"class":35,"line":34820},[33,50544,34720],{"class":60},[33,50546,50547,50549],{"class":35,"line":34826},[33,50548,5489],{"class":39},[33,50550,34728],{"class":47},[33,50552,50553],{"class":35,"line":34832},[33,50554,160],{"emptyLinePlaceholder":159},[33,50556,50557],{"class":35,"line":34838},[33,50558,34739],{"class":60},[33,50560,50561,50563,50565],{"class":35,"line":34844},[33,50562,33200],{"class":39},[33,50564,34747],{"class":43},[33,50566,34750],{"class":47},[33,50568,50569],{"class":35,"line":34871},[33,50570,34756],{"class":60},[33,50572,50573,50575,50577,50579,50581,50583,50585,50587],{"class":35,"line":34895},[33,50574,34762],{"class":47},[33,50576,32946],{"class":955},[33,50578,73],{"class":39},[33,50580,345],{"class":47},[33,50582,2099],{"class":76},[33,50584,704],{"class":47},[33,50586,717],{"class":76},[33,50588,31750],{"class":47},[33,50590,50591],{"class":35,"line":34901},[33,50592,34782],{"class":60},[33,50594,50595],{"class":35,"line":34907},[33,50596,34788],{"class":60},[33,50598,50599],{"class":35,"line":34913},[33,50600,34794],{"class":60},[33,50602,50603,50605,50607,50609,50611,50613,50615],{"class":35,"line":34924},[33,50604,32980],{"class":47},[33,50606,701],{"class":76},[33,50608,704],{"class":47},[33,50610,707],{"class":76},[33,50612,704],{"class":47},[33,50614,701],{"class":76},[33,50616,884],{"class":47},[33,50618,50619],{"class":35,"line":34935},[33,50620,34817],{"class":60},[33,50622,50623],{"class":35,"line":34941},[33,50624,34823],{"class":60},[33,50626,50627],{"class":35,"line":34958},[33,50628,34829],{"class":60},[33,50630,50631],{"class":35,"line":34981},[33,50632,34835],{"class":60},[33,50634,50635],{"class":35,"line":35004},[33,50636,34841],{"class":60},[33,50638,50639,50641,50643,50645,50647,50649,50651,50653,50655],{"class":35,"line":35010},[33,50640,34847],{"class":47},[33,50642,34850],{"class":119},[33,50644,34853],{"class":47},[33,50646,34856],{"class":119},[33,50648,704],{"class":47},[33,50650,34861],{"class":955},[33,50652,73],{"class":39},[33,50654,34866],{"class":119},[33,50656,884],{"class":47},[33,50658,50659,50661,50663,50665,50667,50669,50671,50673,50675],{"class":35,"line":35015},[33,50660,34847],{"class":47},[33,50662,34850],{"class":119},[33,50664,34878],{"class":47},[33,50666,34881],{"class":119},[33,50668,704],{"class":47},[33,50670,34861],{"class":955},[33,50672,73],{"class":39},[33,50674,34890],{"class":119},[33,50676,884],{"class":47},[33,50678,50679],{"class":35,"line":35024},[33,50680,34898],{"class":60},[33,50682,50683],{"class":35,"line":35034},[33,50684,34904],{"class":47},[33,50686,50687],{"class":35,"line":35040},[33,50688,34910],{"class":60},[33,50690,50691,50693,50695],{"class":35,"line":35045},[33,50692,34916],{"class":47},[33,50694,34919],{"class":119},[33,50696,884],{"class":47},[33,50698,50699,50701,50703],{"class":35,"line":35051},[33,50700,34927],{"class":47},[33,50702,34930],{"class":119},[33,50704,884],{"class":47},[33,50706,50707],{"class":35,"line":35064},[33,50708,34938],{"class":60},[33,50710,50711,50713,50715,50717,50719,50721,50723],{"class":35,"line":35070},[33,50712,32980],{"class":47},[33,50714,701],{"class":76},[33,50716,704],{"class":47},[33,50718,707],{"class":76},[33,50720,704],{"class":47},[33,50722,707],{"class":76},[33,50724,884],{"class":47},[33,50726,50727,50729,50731,50733,50735,50737,50739,50741,50743],{"class":35,"line":35081},[33,50728,34847],{"class":47},[33,50730,34850],{"class":119},[33,50732,34965],{"class":47},[33,50734,34856],{"class":119},[33,50736,704],{"class":47},[33,50738,34861],{"class":955},[33,50740,73],{"class":39},[33,50742,34976],{"class":119},[33,50744,884],{"class":47},[33,50746,50747,50749,50751,50753,50755,50757,50759,50761,50763],{"class":35,"line":35092},[33,50748,34847],{"class":47},[33,50750,34850],{"class":119},[33,50752,34988],{"class":47},[33,50754,34881],{"class":119},[33,50756,704],{"class":47},[33,50758,34861],{"class":955},[33,50760,73],{"class":39},[33,50762,34999],{"class":119},[33,50764,884],{"class":47},[33,50766,50767],{"class":35,"line":35111},[33,50768,35007],{"class":60},[33,50770,50772],{"class":35,"line":50771},219,[33,50773,34904],{"class":47},[33,50775,50777,50779,50781],{"class":35,"line":50776},220,[33,50778,34916],{"class":47},[33,50780,34850],{"class":119},[33,50782,884],{"class":47},[33,50784,50786,50788,50790],{"class":35,"line":50785},221,[33,50787,34927],{"class":47},[33,50789,35029],{"class":119},[33,50791,884],{"class":47},[33,50793,50795],{"class":35,"line":50794},222,[33,50796,35037],{"class":47},[33,50798,50800],{"class":35,"line":50799},223,[33,50801,160],{"emptyLinePlaceholder":159},[33,50803,50805],{"class":35,"line":50804},224,[33,50806,35048],{"class":60},[33,50808,50810,50812,50814,50816,50818],{"class":35,"line":50809},225,[33,50811,2987],{"class":39},[33,50813,32473],{"class":76},[33,50815,4359],{"class":39},[33,50817,32478],{"class":119},[33,50819,5141],{"class":47},[33,50821,50823],{"class":35,"line":50822},226,[33,50824,35067],{"class":60},[33,50826,50828,50830,50832],{"class":35,"line":50827},227,[33,50829,45799],{"class":47},[33,50831,73],{"class":39},[33,50833,45804],{"class":47},[33,50835,50837,50839,50841],{"class":35,"line":50836},228,[33,50838,35084],{"class":47},[33,50840,73],{"class":39},[33,50842,35089],{"class":47},[33,50844,50846,50848,50850,50852,50854,50856,50858],{"class":35,"line":50845},229,[33,50847,34646],{"class":47},[33,50849,73],{"class":39},[33,50851,45821],{"class":47},[33,50853,35102],{"class":955},[33,50855,73],{"class":39},[33,50857,2505],{"class":76},[33,50859,884],{"class":47},[33,50861,50863],{"class":35,"line":50862},230,[33,50864,35114],{"class":47},[23249,50866,50868],{"id":50867},"_242测试代码","2.4.2.测试代码",[14,50870,50871],{},"使用测试集进行测试与推理",[23,50873,50875],{"className":31631,"code":50874,"language":31633,"meta":28,"style":28},"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",[30,50876,50877,50883,50893,50903,50914,50924,50928,50932,50940,50945,50949,50966,50970,50974,50978,50982,50986,51018,51022,51030,51034,51046,51050,51054,51058,51062,51066,51070,51074,51078,51096,51110,51114,51124,51134,51144,51150,51154,51158,51166,51170,51186,51194,51198,51202,51210,51218,51222,51226,51230,51234,51240,51244,51254,51262,51270,51274,51278,51282,51290,51294,51310,51314,51318,51322,51334,51338,51350,51354,51358,51370,51374,51384,51388,51392,51404,51408,51416,51420,51424,51432,51436,51444,51448,51452,51456,51460,51464,51480,51488,51492,51496,51514,51520,51524,51534,51542,51550,51554,51558,51562,51566,51574,51578,51594,51598,51606,51614],{"__ignoreMap":28},[33,50878,50879,50881],{"class":35,"line":36},[33,50880,31645],{"class":39},[33,50882,31648],{"class":47},[33,50884,50885,50887,50889,50891],{"class":35,"line":51},[33,50886,31645],{"class":39},[33,50888,32668],{"class":47},[33,50890,32636],{"class":39},[33,50892,32673],{"class":47},[33,50894,50895,50897,50899,50901],{"class":35,"line":57},[33,50896,31990],{"class":39},[33,50898,32651],{"class":47},[33,50900,31645],{"class":39},[33,50902,32656],{"class":47},[33,50904,50905,50907,50909,50911],{"class":35,"line":64},[33,50906,31990],{"class":39},[33,50908,32621],{"class":47},[33,50910,31645],{"class":39},[33,50912,50913],{"class":47}," ImageFolder\n",[33,50915,50916,50918,50920,50922],{"class":35,"line":83},[33,50917,31990],{"class":39},[33,50919,33167],{"class":47},[33,50921,31645],{"class":39},[33,50923,45893],{"class":47},[33,50925,50926],{"class":35,"line":89},[33,50927,160],{"emptyLinePlaceholder":159},[33,50929,50930],{"class":35,"line":98},[33,50931,35204],{"class":60},[33,50933,50934,50936,50938],{"class":35,"line":110},[33,50935,33200],{"class":39},[33,50937,35211],{"class":43},[33,50939,33206],{"class":47},[33,50941,50942],{"class":35,"line":134},[33,50943,50944],{"class":60},"   # 导入自己的数据集，并进行数据处理\n",[33,50946,50947],{"class":35,"line":156},[33,50948,49214],{"class":60},[33,50950,50951,50953,50955,50957,50959,50961,50964],{"class":35,"line":163},[33,50952,49219],{"class":76},[33,50954,73],{"class":39},[33,50956,2270],{"class":39},[33,50958,1866],{"class":119},[33,50960,2158],{"class":76},[33,50962,50963],{"class":49230},"\u002Fdata\u002Ftest",[33,50965,26386],{"class":119},[33,50967,50968],{"class":35,"line":169},[33,50969,160],{"emptyLinePlaceholder":159},[33,50971,50972],{"class":35,"line":175},[33,50973,49242],{"class":60},[33,50975,50976],{"class":35,"line":181},[33,50977,49247],{"class":60},[33,50979,50980],{"class":35,"line":196},[33,50981,49252],{"class":60},[33,50983,50984],{"class":35,"line":213},[33,50985,49257],{"class":60},[33,50987,50988,50990,50992,50994,50996,50998,51000,51002,51004,51006,51008,51010,51012,51014,51016],{"class":35,"line":228},[33,50989,49262],{"class":47},[33,50991,73],{"class":39},[33,50993,49267],{"class":47},[33,50995,49270],{"class":76},[33,50997,704],{"class":47},[33,50999,49275],{"class":76},[33,51001,704],{"class":47},[33,51003,49280],{"class":76},[33,51005,49283],{"class":47},[33,51007,49286],{"class":76},[33,51009,704],{"class":47},[33,51011,49291],{"class":76},[33,51013,704],{"class":47},[33,51015,49296],{"class":76},[33,51017,1276],{"class":47},[33,51019,51020],{"class":35,"line":1345},[33,51021,49303],{"class":60},[33,51023,51024,51026,51028],{"class":35,"line":1350},[33,51025,49308],{"class":47},[33,51027,73],{"class":39},[33,51029,49313],{"class":47},[33,51031,51032],{"class":35,"line":1359},[33,51033,49318],{"class":60},[33,51035,51036,51038,51040,51042,51044],{"class":35,"line":1364},[33,51037,49323],{"class":47},[33,51039,32754],{"class":76},[33,51041,704],{"class":47},[33,51043,32754],{"class":76},[33,51045,43875],{"class":47},[33,51047,51048],{"class":35,"line":1370},[33,51049,49336],{"class":60},[33,51051,51052],{"class":35,"line":1425},[33,51053,49341],{"class":47},[33,51055,51056],{"class":35,"line":1438},[33,51057,49346],{"class":47},[33,51059,51060],{"class":35,"line":1451},[33,51061,49351],{"class":60},[33,51063,51064],{"class":35,"line":1457},[33,51065,49356],{"class":60},[33,51067,51068],{"class":35,"line":1466},[33,51069,160],{"emptyLinePlaceholder":159},[33,51071,51072],{"class":35,"line":1471},[33,51073,49365],{"class":60},[33,51075,51076],{"class":35,"line":1477},[33,51077,49370],{"class":60},[33,51079,51080,51082,51084,51086,51088,51090,51092,51094],{"class":35,"line":1504},[33,51081,35218],{"class":47},[33,51083,73],{"class":39},[33,51085,49379],{"class":47},[33,51087,49382],{"class":76},[33,51089,704],{"class":47},[33,51091,49387],{"class":955},[33,51093,73],{"class":39},[33,51095,49392],{"class":47},[33,51097,51098,51100,51102,51104,51106,51108],{"class":35,"line":1509},[33,51099,35275],{"class":47},[33,51101,73],{"class":39},[33,51103,32787],{"class":47},[33,51105,32790],{"class":955},[33,51107,73],{"class":39},[33,51109,35286],{"class":47},[33,51111,51112],{"class":35,"line":1525},[33,51113,35291],{"class":60},[33,51115,51116,51118,51120,51122],{"class":35,"line":1535},[33,51117,35296],{"class":955},[33,51119,73],{"class":39},[33,51121,701],{"class":76},[33,51123,32719],{"class":47},[33,51125,51126,51128,51130,51132],{"class":35,"line":1540},[33,51127,35307],{"class":955},[33,51129,73],{"class":39},[33,51131,32729],{"class":76},[33,51133,32719],{"class":47},[33,51135,51136,51138,51140,51142],{"class":35,"line":4027},[33,51137,35318],{"class":955},[33,51139,73],{"class":39},[33,51141,766],{"class":76},[33,51143,884],{"class":47},[33,51145,51146,51148],{"class":35,"line":4032},[33,51147,5489],{"class":39},[33,51149,35331],{"class":47},[33,51151,51152],{"class":35,"line":9199},[33,51153,160],{"emptyLinePlaceholder":159},[33,51155,51156],{"class":35,"line":9223},[33,51157,35340],{"class":60},[33,51159,51160,51162,51164],{"class":35,"line":9228},[33,51161,33200],{"class":39},[33,51163,35347],{"class":43},[33,51165,35350],{"class":47},[33,51167,51168],{"class":35,"line":9234},[33,51169,35355],{"class":60},[33,51171,51172,51174,51176,51178,51180,51182,51184],{"class":35,"line":9261},[33,51173,32490],{"class":47},[33,51175,73],{"class":39},[33,51177,32497],{"class":119},[33,51179,3145],{"class":39},[33,51181,32502],{"class":47},[33,51183,3142],{"class":39},[33,51185,35372],{"class":119},[33,51187,51188,51190,51192],{"class":35,"line":9266},[33,51189,32542],{"class":47},[33,51191,73],{"class":39},[33,51193,33542],{"class":47},[33,51195,51196],{"class":35,"line":9272},[33,51197,160],{"emptyLinePlaceholder":159},[33,51199,51200],{"class":35,"line":9284},[33,51201,35389],{"class":60},[33,51203,51204,51206,51208],{"class":35,"line":9296},[33,51205,35394],{"class":47},[33,51207,73],{"class":39},[33,51209,33595],{"class":76},[33,51211,51212,51214,51216],{"class":35,"line":9308},[33,51213,35403],{"class":47},[33,51215,73],{"class":39},[33,51217,4493],{"class":76},[33,51219,51220],{"class":35,"line":10967},[33,51221,160],{"emptyLinePlaceholder":159},[33,51223,51224],{"class":35,"line":10992},[33,51225,35416],{"class":60},[33,51227,51228],{"class":35,"line":11015},[33,51229,35421],{"class":60},[33,51231,51232],{"class":35,"line":11039},[33,51233,35426],{"class":60},[33,51235,51236,51238],{"class":35,"line":11044},[33,51237,35431],{"class":39},[33,51239,34137],{"class":47},[33,51241,51242],{"class":35,"line":11049},[33,51243,35438],{"class":60},[33,51245,51246,51248,51250,51252],{"class":35,"line":11054},[33,51247,1216],{"class":39},[33,51249,35445],{"class":47},[33,51251,27296],{"class":39},[33,51253,35450],{"class":47},[33,51255,51256,51258,51260],{"class":35,"line":11063},[33,51257,35455],{"class":47},[33,51259,73],{"class":39},[33,51261,35460],{"class":47},[33,51263,51264,51266,51268],{"class":35,"line":11068},[33,51265,35465],{"class":47},[33,51267,73],{"class":39},[33,51269,35470],{"class":47},[33,51271,51272],{"class":35,"line":11074},[33,51273,35475],{"class":60},[33,51275,51276],{"class":35,"line":11095},[33,51277,34128],{"class":47},[33,51279,51280],{"class":35,"line":11101},[33,51281,35484],{"class":60},[33,51283,51284,51286,51288],{"class":35,"line":11115},[33,51285,33913],{"class":47},[33,51287,73],{"class":39},[33,51289,35493],{"class":47},[33,51291,51292],{"class":35,"line":11121},[33,51293,35498],{"class":60},[33,51295,51296,51298,51300,51302,51304,51306,51308],{"class":35,"line":11148},[33,51297,33930],{"class":47},[33,51299,73],{"class":39},[33,51301,33935],{"class":47},[33,51303,33938],{"class":955},[33,51305,73],{"class":39},[33,51307,701],{"class":76},[33,51309,884],{"class":47},[33,51311,51312],{"class":35,"line":11157},[33,51313,35519],{"class":60},[33,51315,51316],{"class":35,"line":11163},[33,51317,35524],{"class":60},[33,51319,51320],{"class":35,"line":11171},[33,51321,35529],{"class":60},[33,51323,51324,51326,51328,51330,51332],{"class":35,"line":11176},[33,51325,35534],{"class":47},[33,51327,10728],{"class":39},[33,51329,34040],{"class":47},[33,51331,4359],{"class":39},[33,51333,35543],{"class":47},[33,51335,51336],{"class":35,"line":17855},[33,51337,35548],{"class":60},[33,51339,51340,51342,51344,51346,51348],{"class":35,"line":17861},[33,51341,35553],{"class":47},[33,51343,10728],{"class":39},[33,51345,35558],{"class":47},[33,51347,766],{"class":76},[33,51349,884],{"class":47},[33,51351,51352],{"class":35,"line":17884},[33,51353,160],{"emptyLinePlaceholder":159},[33,51355,51356],{"class":35,"line":17890},[33,51357,35571],{"class":60},[33,51359,51360,51362,51364,51366,51368],{"class":35,"line":17913},[33,51361,35576],{"class":47},[33,51363,73],{"class":39},[33,51365,35581],{"class":47},[33,51367,2184],{"class":39},[33,51369,35586],{"class":47},[33,51371,51372],{"class":35,"line":17927},[33,51373,35591],{"class":60},[33,51375,51376,51378,51380,51382],{"class":35,"line":17947},[33,51377,33704],{"class":76},[33,51379,345],{"class":47},[33,51381,35600],{"class":119},[33,51383,35603],{"class":47},[33,51385,51386],{"class":35,"line":17953},[33,51387,160],{"emptyLinePlaceholder":159},[33,51389,51390],{"class":35,"line":17964},[33,51391,35612],{"class":60},[33,51393,51394,51396,51398,51400,51402],{"class":35,"line":17987},[33,51395,2987],{"class":39},[33,51397,32473],{"class":76},[33,51399,4359],{"class":39},[33,51401,32478],{"class":119},[33,51403,5141],{"class":47},[33,51405,51406],{"class":35,"line":18009},[33,51407,35629],{"class":60},[33,51409,51410,51412,51414],{"class":35,"line":18014},[33,51411,32542],{"class":47},[33,51413,73],{"class":39},[33,51415,45804],{"class":47},[33,51417,51418],{"class":35,"line":18020},[33,51419,35642],{"class":60},[33,51421,51422],{"class":35,"line":18034},[33,51423,35647],{"class":60},[33,51425,51426,51428,51430],{"class":35,"line":18047},[33,51427,35652],{"class":47},[33,51429,35655],{"class":119},[33,51431,31750],{"class":47},[33,51433,51434],{"class":35,"line":18052},[33,51435,35662],{"class":60},[33,51437,51438,51440,51442],{"class":35,"line":18066},[33,51439,35275],{"class":47},[33,51441,73],{"class":39},[33,51443,35671],{"class":47},[33,51445,51446],{"class":35,"line":18071},[33,51447,35676],{"class":60},[33,51449,51450],{"class":35,"line":18077},[33,51451,35681],{"class":47},[33,51453,51454],{"class":35,"line":18082},[33,51455,160],{"emptyLinePlaceholder":159},[33,51457,51458],{"class":35,"line":18096},[33,51459,35690],{"class":60},[33,51461,51462],{"class":35,"line":18101},[33,51463,35695],{"class":60},[33,51465,51466,51468,51470,51472,51474,51476,51478],{"class":35,"line":18106},[33,51467,32490],{"class":47},[33,51469,73],{"class":39},[33,51471,32497],{"class":119},[33,51473,3145],{"class":39},[33,51475,32502],{"class":47},[33,51477,3142],{"class":39},[33,51479,35372],{"class":119},[33,51481,51482,51484,51486],{"class":35,"line":18120},[33,51483,32542],{"class":47},[33,51485,73],{"class":39},[33,51487,33542],{"class":47},[33,51489,51490],{"class":35,"line":18132},[33,51491,35724],{"class":60},[33,51493,51494],{"class":35,"line":18137},[33,51495,35729],{"class":60},[33,51497,51498,51500,51502,51504,51507,51509,51512],{"class":35,"line":18150},[33,51499,35734],{"class":47},[33,51501,73],{"class":39},[33,51503,2489],{"class":47},[33,51505,51506],{"class":119},"'猫'",[33,51508,704],{"class":47},[33,51510,51511],{"class":119},"'狗'",[33,51513,34499],{"class":47},[33,51515,51516,51518],{"class":35,"line":18155},[33,51517,35431],{"class":39},[33,51519,34137],{"class":47},[33,51521,51522],{"class":35,"line":18160},[33,51523,35799],{"class":60},[33,51525,51526,51528,51530,51532],{"class":35,"line":18165},[33,51527,1216],{"class":39},[33,51529,35806],{"class":47},[33,51531,27296],{"class":39},[33,51533,35450],{"class":47},[33,51535,51536,51538,51540],{"class":35,"line":18178},[33,51537,33863],{"class":47},[33,51539,73],{"class":39},[33,51541,33868],{"class":47},[33,51543,51544,51546,51548],{"class":35,"line":18183},[33,51545,33878],{"class":47},[33,51547,73],{"class":39},[33,51549,33883],{"class":47},[33,51551,51552],{"class":35,"line":33886},[33,51553,160],{"emptyLinePlaceholder":159},[33,51555,51556],{"class":35,"line":33892},[33,51557,35835],{"class":60},[33,51559,51560],{"class":35,"line":33898},[33,51561,34128],{"class":47},[33,51563,51564],{"class":35,"line":33904},[33,51565,35844],{"class":60},[33,51567,51568,51570,51572],{"class":35,"line":33910},[33,51569,33913],{"class":47},[33,51571,73],{"class":39},[33,51573,33918],{"class":47},[33,51575,51576],{"class":35,"line":33921},[33,51577,35857],{"class":60},[33,51579,51580,51582,51584,51586,51588,51590,51592],{"class":35,"line":33927},[33,51581,33930],{"class":47},[33,51583,73],{"class":39},[33,51585,33935],{"class":47},[33,51587,33938],{"class":955},[33,51589,73],{"class":39},[33,51591,701],{"class":76},[33,51593,884],{"class":47},[33,51595,51596],{"class":35,"line":33947},[33,51597,35878],{"class":60},[33,51599,51600,51602,51604],{"class":35,"line":33953},[33,51601,35883],{"class":47},[33,51603,73],{"class":39},[33,51605,35888],{"class":47},[33,51607,51608,51610,51612],{"class":35,"line":33964},[33,51609,35893],{"class":47},[33,51611,73],{"class":39},[33,51613,35898],{"class":47},[33,51615,51616,51618,51620,51622,51624,51626,51628,51630],{"class":35,"line":33970},[33,51617,35903],{"class":76},[33,51619,345],{"class":47},[33,51621,35908],{"class":119},[33,51623,35911],{"class":47},[33,51625,35914],{"class":119},[33,51627,704],{"class":47},[33,51629,35919],{"class":119},[33,51631,35922],{"class":47},[1544,51633,51634],{},"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":28,"searchDepth":51,"depth":51,"links":51636},[51637,51638,51639,51640],{"id":31844,"depth":57,"text":31845},{"id":39092,"depth":57,"text":39093},{"id":42525,"depth":57,"text":42526},{"id":46534,"depth":57,"text":46535},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31836,"description":24628},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51647,"title":51648,"body":51649,"description":24628,"extension":1557,"meta":51656,"navigation":159,"path":51657,"seo":51658,"stem":51659,"__hash__":51660},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51650,"toc":51654},[51651],[10,51652,51648],{"id":51653},"_3yolo模型学习",{"title":28,"searchDepth":51,"depth":51,"links":51655},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51648,"description":24628},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51662,"title":51663,"body":51664,"description":51671,"extension":1557,"meta":51672,"navigation":159,"path":51674,"seo":51675,"stem":51676,"__hash__":51677},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51665,"toc":51669},[51666],[14,51667,51668],{},"yolo模型还未补充",{"title":28,"searchDepth":51,"depth":51,"links":51670},[],"深度学习学习",{"category":51673},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51663,"description":51671},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51679,"title":51680,"body":51681,"description":24628,"extension":1557,"meta":51706,"navigation":159,"path":51707,"seo":51708,"stem":51709,"__hash__":51710},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51682,"toc":51704},[51683,51686,51689,51694,51701],[10,51684,51680],{"id":51685},"_1工具",[14,51687,51688],{},"提示错误插件：有问题会提前报错",[14,51690,51691],{},[2918,51692],{"alt":28,"src":51693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,51695,51696],{},[126,51697,51700],{"href":51698,"rel":51699},"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",[25117],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,51702,51703],{},"alt键加上下箭头可以实现语句的移动",{"title":28,"searchDepth":51,"depth":51,"links":51705},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51680,"description":24628},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51712,"title":51713,"body":51714,"description":24628,"extension":1557,"meta":54578,"navigation":159,"path":54579,"seo":54580,"stem":54581,"__hash__":54582},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51715,"toc":54529},[51716,51719,51723,51727,51732,51735,51740,51744,51751,51756,51763,51768,51775,51780,51784,51789,51792,51796,51801,51805,51810,51813,51816,51819,51822,51825,51828,51831,51834,51839,51844,51849,51853,51856,51859,51863,51868,51871,51879,51884,51901,51909,51914,51919,51924,51929,51934,51937,51942,51947,51951,51960,51965,51970,51974,51979,51982,51986,51991,51999,52004,52009,52012,52017,52022,52027,52030,52033,52036,52041,52046,52049,52054,52057,52062,52065,52068,52071,52076,52079,52082,52097,52102,52107,52112,52115,52118,52121,52135,52138,52143,52148,52151,52154,52157,52160,52163,52166,52169,52173,52177,52182,52186,52189,52194,52199,52202,52207,52210,52214,52219,52222,52225,52228,52231,52234,52237,52240,52243,52246,52250,52255,52260,52265,52268,52271,52275,52280,52283,52287,52290,52293,52298,52301,52304,52308,52312,52315,52320,52325,52328,52357,52362,52367,52372,52377,52381,52386,52390,52395,52398,52402,52406,52411,52415,52420,52425,52429,52434,52437,52439,52442,52447,52451,52456,52460,52464,52469,52474,52479,52484,52488,52493,52498,52503,52506,52509,52514,52517,52522,52527,52532,52537,52541,53348,53352,53695,53700,53703,53706,53709,53712,53715,53718,53721,53724,53726,53729,53731,53734,53738,53743,53746,53749,53752,53756,53761,53766,53786,53789,53793,53798,53803,53820,53824,53853,53857,53879,53881,53920,53928,53934,53938,53941,53944,53949,53954,53957,53960,53963,53968,53973,53976,53979,53982,53985,53988,53991,53994,53997,54000,54003,54006,54008,54011,54014,54017,54020,54023,54026,54029,54032,54036,54041,54044,54049,54052,54055,54058,54061,54064,54067,54070,54072,54075,54078,54081,54084,54087,54090,54094,54097,54106,54109,54114,54117,54122,54125,54128,54131,54134,54137,54140,54143,54147,54151,54154,54157,54162,54167,54172,54176,54181,54186,54189,54192,54195,54198,54201,54206,54209,54214,54216,54221,54224,54228,54233,54236,54239,54244,54248,54251,54256,54259,54262,54291,54296,54299,54302,54305,54308,54311,54315,54318,54404,54408,54411,54416,54421,54428,54431,54434,54437,54440,54443,54448,54453,54456,54459,54462,54465,54468,54471,54474,54477,54480,54482,54485,54489,54494,54499,54504,54507,54512,54517,54520,54523,54526],[10,51717,51713],{"id":51718},"_2基础语法",[18,51720,51722],{"id":51721},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[1599,51724,51726],{"id":51725},"_211-js组成","2.1.1 js组成",[574,51728,51729],{},[564,51730,51731],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,51733,51734],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[574,51736,51737],{"start":51},[564,51738,51739],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[1599,51741,51743],{"id":51742},"_212-js书写位置","2.1.2 js书写位置",[574,51745,51746],{},[564,51747,51748],{},[480,51749,51750],{},"内部 JavaScript",[14,51752,51753],{},[2918,51754],{"alt":28,"src":51755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[574,51757,51758],{"start":51},[564,51759,51760],{},[480,51761,51762],{},"外部 JavaScript",[14,51764,51765],{},[2918,51766],{"alt":28,"src":51767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[574,51769,51770],{"start":57},[564,51771,51772],{},[480,51773,51774],{},"内联 JavaScript",[14,51776,51777],{},[2918,51778],{"alt":28,"src":51779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[1599,51781,51783],{"id":51782},"_213-javascript注释","2.1.3 JavaScript注释",[14,51785,51786],{},[2918,51787],{"alt":28,"src":51788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,51790,51791],{},"alt+shift+a一定要记住！",[1599,51793,51795],{"id":51794},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,51797,51798],{},[2918,51799],{"alt":28,"src":51800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[1599,51802,51804],{"id":51803},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[574,51806,51807],{},[564,51808,51809],{},"输出语法：",[14,51811,51812],{},"①document.write('要出的内容')",[14,51814,51815],{},"向body内输出内容；",[14,51817,51818],{},"如果输出的内容写的是标签，也会被解析cheng",[14,51820,51821],{},"②alert('要出的内容')",[14,51823,51824],{},"页面弹出警告对话框",[14,51826,51827],{},"③console.log('控制台打印')",[14,51829,51830],{},"控制台输出语法，程序员调试使用",[14,51832,51833],{},"输入log就行，自动生成：",[14,51835,51836],{},[2918,51837],{"alt":28,"src":51838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[574,51840,51841],{"start":51},[564,51842,51843],{},"输入语法：",[14,51845,51846],{},[2918,51847],{"alt":28,"src":51848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[1599,51850,51852],{"id":51851},"_2116-字面量","21.1.6 字面量",[14,51854,51855],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,51857,51858],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[18,51860,51862],{"id":51861},"_22-变量","2.2 变量",[574,51864,51865],{},[564,51866,51867],{},"变量声明",[14,51869,51870],{},"let 变量名",[561,51872,51873,51876],{},[564,51874,51875],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[564,51877,51878],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[574,51880,51881],{"start":51},[564,51882,51883],{},"变量赋值",[23,51885,51889],{"className":51886,"code":51887,"language":51888,"meta":28,"style":28},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[30,51890,51891,51896],{"__ignoreMap":28},[33,51892,51893],{"class":35,"line":36},[33,51894,51895],{"class":47},"let age\n",[33,51897,51898],{"class":35,"line":51},[33,51899,51900],{"class":47},"age=18\n",[574,51902,51903,51906],{"start":57},[564,51904,51905],{},"连这些（变量的初始化）：let age=18",[564,51907,51908],{},"更新变量",[14,51910,51911],{},[2918,51912],{"alt":28,"src":51913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[574,51915,51916],{"start":83},[564,51917,51918],{},"声明多个变量",[14,51920,51921],{},[2918,51922],{"alt":28,"src":51923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[574,51925,51926],{"start":89},[564,51927,51928],{},"变量命名规则与规范",[14,51930,51931],{},[2918,51932],{"alt":28,"src":51933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51935,51936],{},"遵守小驼峰！",[574,51938,51939],{"start":98},[564,51940,51941],{},"变量拓展-let和var的区别",[14,51943,51944],{},[2918,51945],{"alt":28,"src":51946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[18,51948,51950],{"id":51949},"_23-数组","2.3 数组",[23,51952,51954],{"className":51886,"code":51953,"language":51888,"meta":28,"style":28},"let arr = []\n",[30,51955,51956],{"__ignoreMap":28},[33,51957,51958],{"class":35,"line":36},[33,51959,51953],{"class":47},[14,51961,51962],{},[2918,51963],{"alt":28,"src":51964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51966,51967],{},[2918,51968],{"alt":28,"src":51969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[18,51971,51973],{"id":51972},"_24-常量","2.4 常量",[14,51975,51976],{},[2918,51977],{"alt":28,"src":51978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51980,51981],{},"const — 类似于 let ，但是变量的值无法被修改",[18,51983,51985],{"id":51984},"_25-数据类型","2.5 数据类型",[14,51987,51988],{},[2918,51989],{"alt":28,"src":51990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[574,51992,51993,51996],{},[564,51994,51995],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[564,51997,51998],{},"算数运算符：",[14,52000,52001],{},[2918,52002],{"alt":28,"src":52003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[574,52005,52006],{"start":57},[564,52007,52008],{},"数字类型（Number）",[14,52010,52011],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,52013,52014],{},[2918,52015],{"alt":28,"src":52016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[574,52018,52019],{"start":64},[564,52020,52021],{},"字符串类型（string）",[14,52023,52024],{},[2918,52025],{"alt":28,"src":52026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,52028,52029],{},"反引号也是可以使用的",[14,52031,52032],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,52034,52035],{},"例如：document.write(\"我今年\"+age+\"岁\")",[574,52037,52038],{"start":83},[564,52039,52040],{},"模板字符串",[14,52042,52043],{},[2918,52044],{"alt":28,"src":52045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,52047,52048],{},"类似于python的字符串格式化",[574,52050,52051],{"start":89},[564,52052,52053],{},"布尔类型",[14,52055,52056],{},"true 和 false",[574,52058,52059],{"start":98},[564,52060,52061],{},"未定义类型（underfined）",[14,52063,52064],{},"表示没有赋值",[14,52066,52067],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,52069,52070],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[574,52072,52073],{"start":110},[564,52074,52075],{},"null（空类型）",[14,52077,52078],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,52080,52081],{},"赋值了，但是内容为空",[23,52083,52085],{"className":51886,"code":52084,"language":51888,"meta":28,"style":28},"typeof null\n输出的是'object'，是一个对象数据类型\n",[30,52086,52087,52092],{"__ignoreMap":28},[33,52088,52089],{"class":35,"line":36},[33,52090,52091],{"class":47},"typeof null\n",[33,52093,52094],{"class":35,"line":51},[33,52095,52096],{"class":47},"输出的是'object'，是一个对象数据类型\n",[574,52098,52099],{"start":134},[564,52100,52101],{},"控制台检测数据类型",[14,52103,52104],{},[2918,52105],{"alt":28,"src":52106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[574,52108,52109],{"start":156},[564,52110,52111],{},"类型转换",[14,52113,52114],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,52116,52117],{},"转换方式：隐式转换和显示转换",[14,52119,52120],{},"①隐式转换",[561,52122,52123,52126,52129,52132],{},[564,52124,52125],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[564,52127,52128],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[564,52130,52131],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[564,52133,52134],{},"任何数据和字符串相加结果都是字符串",[14,52136,52137],{},"②显示转换",[14,52139,52140],{},[2918,52141],{"alt":28,"src":52142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,52144,52145],{},[2918,52146],{"alt":28,"src":52147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,52149,52150],{},"在输入的时候要用好隐式转换，简单写起来",[14,52152,52153],{},"let num = +prompt(’请输入数字：‘)",[14,52155,52156],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,52158,52159],{},"console.log(parseInt('12.333px'))",[14,52161,52162],{},"输出为：12",[14,52164,52165],{},"console.log(parseInt('a'a'a12.333px'))",[14,52167,52168],{},"输出：NaN",[18,52170,52172],{"id":52171},"_26-运算符","2.6 运算符",[1599,52174,52176],{"id":52175},"_261-赋值运算符","2.6.1 赋值运算符",[14,52178,52179],{},[2918,52180],{"alt":28,"src":52181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[1599,52183,52185],{"id":52184},"_262-一元运算符","2.6.2 一元运算符",[14,52187,52188],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,52190,52191],{},[2918,52192],{"alt":28,"src":52193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,52195,52196],{},[2918,52197],{"alt":28,"src":52198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,52200,52201],{},"两者的区别：",[14,52203,52204],{},[2918,52205],{"alt":28,"src":52206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,52208,52209],{},"前置先自加；后置后加，代码执行完之后再加",[1599,52211,52213],{"id":52212},"_263-比较运算符","2.6.3 比较运算符",[14,52215,52216],{},[2918,52217],{"alt":28,"src":52218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,52220,52221],{},"比较运算符也有隐式转换",[14,52223,52224],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,52226,52227],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,52229,52230],{},"要使用三等，开发的时候",[14,52232,52233],{},"NaN不等于任何人，包括它自己",[14,52235,52236],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,52238,52239],{},"7\u002F10=0.7",[14,52241,52242],{},"最后：0.5+0.2=0.7",[14,52244,52245],{},"字符串比较，比较的是字符对应的ASCII码",[1599,52247,52249],{"id":52248},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,52251,52252],{},[2918,52253],{"alt":28,"src":52254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,52256,52257],{},[2918,52258],{"alt":28,"src":52259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,52261,52262],{},[2918,52263],{"alt":28,"src":52264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,52266,52267],{},"上述题目选D",[14,52269,52270],{},"与真2假1；或真1假2",[1599,52272,52274],{"id":52273},"_265-运算符优先级","2.6.5 运算符优先级",[14,52276,52277],{},[2918,52278],{"alt":28,"src":52279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,52281,52282],{},"先算逻辑与，后算逻辑或",[18,52284,52286],{"id":52285},"_27-语句","2.7 语句",[14,52288,52289],{},"表达式：是可以被求值的代码，会有结果给我们",[14,52291,52292],{},"语句：语句是可以被执行的代码，例如prompt()",[14,52294,52295],{},[2918,52296],{"alt":28,"src":52297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,52299,52300],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,52302,52303],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[1599,52305,52307],{"id":52306},"_271-分支语句","2.7.1 分支语句",[23249,52309,52311],{"id":52310},"_2711-if分支语句","2.7.1.1 if分支语句",[14,52313,52314],{},"if语句单行简单的话，可以不写{}，写在一行就行",[574,52316,52317],{},[564,52318,52319],{},"单分支语句",[14,52321,52322],{},[2918,52323],{"alt":28,"src":52324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,52326,52327],{},"除了0，所有数字都为真",[23,52329,52331],{"className":51886,"code":52330,"language":51888,"meta":28,"style":28},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[30,52332,52333,52338,52343,52348,52352],{"__ignoreMap":28},[33,52334,52335],{"class":35,"line":36},[33,52336,52337],{"class":47},"if（0) {\n",[33,52339,52340],{"class":35,"line":51},[33,52341,52342],{"class":47},"    let a=1\n",[33,52344,52345],{"class":35,"line":57},[33,52346,52347],{"class":47},"    alert(typeof a)\n",[33,52349,52350],{"class":35,"line":64},[33,52351,231],{"class":47},[33,52353,52354],{"class":35,"line":83},[33,52355,52356],{"class":47},"不输出，括号为假\n",[574,52358,52359],{"start":51},[564,52360,52361],{},"双分支语句",[14,52363,52364],{},[2918,52365],{"alt":28,"src":52366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[574,52368,52369],{"start":57},[564,52370,52371],{},"多分支语句",[14,52373,52374],{},[2918,52375],{"alt":28,"src":52376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23249,52378,52380],{"id":52379},"_2712-三元运算符","2.7.1.2 三元运算符",[14,52382,52383],{},[2918,52384],{"alt":28,"src":52385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23249,52387,52389],{"id":52388},"_2713-switch语句","2.7.1.3 switch语句",[14,52391,52392],{},[2918,52393],{"alt":28,"src":52394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,52396,52397],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[1599,52399,52401],{"id":52400},"_272-循环语句","2.7.2 循环语句",[23249,52403,52405],{"id":52404},"_2721-断点演示","2.7.2.1 断点演示",[14,52407,52408],{},[2918,52409],{"alt":28,"src":52410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23249,52412,52414],{"id":52413},"_2722-while循环","2.7.2.2 while循环",[14,52416,52417],{},[2918,52418],{"alt":28,"src":52419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,52421,52422],{},[2918,52423],{"alt":28,"src":52424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23249,52426,52428],{"id":52427},"_2723-for循环","2.7.2.3 for循环",[14,52430,52431],{},[2918,52432],{"alt":28,"src":52433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,52435,52436],{},"for(;;) {",[14,52438,2542],{},[14,52440,52441],{},"表示无限循环",[14,52443,52444],{},[2918,52445],{"alt":28,"src":52446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23249,52448,52450],{"id":52449},"_2724-循环的退出","2.7.2.4 循环的退出",[14,52452,52453],{},[2918,52454],{"alt":28,"src":52455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[18,52457,52459],{"id":52458},"_28-数组","2.8 数组",[1599,52461,52463],{"id":52462},"_281-基础认识","2.8.1 基础认识",[14,52465,52466],{},[2918,52467],{"alt":28,"src":52468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,52470,52471],{},[2918,52472],{"alt":28,"src":52473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,52475,52476],{},[2918,52477],{"alt":28,"src":52478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,52480,52481],{},[2918,52482],{"alt":28,"src":52483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[1599,52485,52487],{"id":52486},"_282-操作数组","2.8.2 操作数组",[14,52489,52490],{},[2918,52491],{"alt":28,"src":52492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[574,52494,52495],{},[564,52496,52497],{},"添加元素",[14,52499,52500],{},[2918,52501],{"alt":28,"src":52502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,52504,52505],{},"console.log(arr.push('green'))",[14,52507,52508],{},"输出结果：为新数组的长度",[14,52510,52511],{},[2918,52512],{"alt":28,"src":52513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,52515,52516],{},"push用的非常多，一定要记住",[574,52518,52519],{},[564,52520,52521],{},"删除元素",[14,52523,52524],{},[2918,52525],{"alt":28,"src":52526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,52528,52529],{},[2918,52530],{"alt":28,"src":52531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,52533,52534],{},[2918,52535],{"alt":28,"src":52536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[1599,52538,52540],{"id":52539},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[23,52542,52544],{"className":51886,"code":52543,"language":51888,"meta":28,"style":28},"\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",[30,52545,52546,52561,52577,52581,52590,52608,52632,52654,52668,52676,52683,52695,52706,52710,52714,52721,52733,52748,52761,52780,52797,52812,52824,52836,52848,52852,52856,52867,52877,52889,52901,52913,52924,52928,52932,52944,52948,52962,52966,52970,52981,52995,53007,53021,53025,53034,53043,53047,53056,53060,53069,53074,53079,53092,53120,53125,53130,53155,53160,53164,53169,53174,53189,53193,53198,53228,53240,53256,53272,53286,53291,53298,53302,53307,53320,53328,53336,53340],{"__ignoreMap":28},[33,52547,52548,52551,52555,52558],{"class":35,"line":36},[33,52549,52550],{"class":47},"\u003C!",[33,52552,52554],{"class":52553},"s9eBZ","DOCTYPE",[33,52556,52557],{"class":43}," html",[33,52559,52560],{"class":47},">\n",[33,52562,52563,52565,52567,52570,52572,52575],{"class":35,"line":51},[33,52564,875],{"class":47},[33,52566,51888],{"class":52553},[33,52568,52569],{"class":43}," lang",[33,52571,73],{"class":47},[33,52573,52574],{"class":119},"\"en\"",[33,52576,52560],{"class":47},[33,52578,52579],{"class":35,"line":57},[33,52580,160],{"emptyLinePlaceholder":159},[33,52582,52583,52585,52588],{"class":35,"line":64},[33,52584,875],{"class":47},[33,52586,52587],{"class":52553},"head",[33,52589,52560],{"class":47},[33,52591,52592,52595,52598,52601,52603,52606],{"class":35,"line":83},[33,52593,52594],{"class":47},"    \u003C",[33,52596,52597],{"class":52553},"meta",[33,52599,52600],{"class":43}," charset",[33,52602,73],{"class":47},[33,52604,52605],{"class":119},"\"UTF-8\"",[33,52607,52560],{"class":47},[33,52609,52610,52612,52614,52617,52619,52622,52625,52627,52630],{"class":35,"line":89},[33,52611,52594],{"class":47},[33,52613,52597],{"class":52553},[33,52615,52616],{"class":43}," http-equiv",[33,52618,73],{"class":47},[33,52620,52621],{"class":119},"\"X-UA-Compatible\"",[33,52623,52624],{"class":43}," content",[33,52626,73],{"class":47},[33,52628,52629],{"class":119},"\"IE=edge\"",[33,52631,52560],{"class":47},[33,52633,52634,52636,52638,52640,52642,52645,52647,52649,52652],{"class":35,"line":98},[33,52635,52594],{"class":47},[33,52637,52597],{"class":52553},[33,52639,16171],{"class":43},[33,52641,73],{"class":47},[33,52643,52644],{"class":119},"\"viewport\"",[33,52646,52624],{"class":43},[33,52648,73],{"class":47},[33,52650,52651],{"class":119},"\"width=device-width, initial-scale=1.0\"",[33,52653,52560],{"class":47},[33,52655,52656,52658,52661,52664,52666],{"class":35,"line":110},[33,52657,52594],{"class":47},[33,52659,52660],{"class":52553},"title",[33,52662,52663],{"class":47},">Document\u003C\u002F",[33,52665,52660],{"class":52553},[33,52667,52560],{"class":47},[33,52669,52670,52672,52674],{"class":35,"line":134},[33,52671,52594],{"class":47},[33,52673,1544],{"class":52553},[33,52675,52560],{"class":47},[33,52677,52678,52681],{"class":35,"line":156},[33,52679,52680],{"class":52553},"        *",[33,52682,16823],{"class":47},[33,52684,52685,52688,52691,52693],{"class":35,"line":163},[33,52686,52687],{"class":76},"            margin",[33,52689,52690],{"class":47},": ",[33,52692,766],{"class":76},[33,52694,80],{"class":47},[33,52696,52697,52700,52702,52704],{"class":35,"line":169},[33,52698,52699],{"class":76},"            padding",[33,52701,52690],{"class":47},[33,52703,766],{"class":76},[33,52705,80],{"class":47},[33,52707,52708],{"class":35,"line":175},[33,52709,1334],{"class":47},[33,52711,52712],{"class":35,"line":181},[33,52713,160],{"emptyLinePlaceholder":159},[33,52715,52716,52719],{"class":35,"line":196},[33,52717,52718],{"class":43},"        .box",[33,52720,16823],{"class":47},[33,52722,52723,52726,52728,52731],{"class":35,"line":213},[33,52724,52725],{"class":76},"            display",[33,52727,52690],{"class":47},[33,52729,52730],{"class":76},"flex",[33,52732,80],{"class":47},[33,52734,52735,52738,52740,52743,52746],{"class":35,"line":228},[33,52736,52737],{"class":76},"            width",[33,52739,52690],{"class":47},[33,52741,52742],{"class":76},"700",[33,52744,52745],{"class":39},"px",[33,52747,80],{"class":47},[33,52749,52750,52753,52755,52757,52759],{"class":35,"line":1345},[33,52751,52752],{"class":76},"            height",[33,52754,52690],{"class":47},[33,52756,5373],{"class":76},[33,52758,52745],{"class":39},[33,52760,80],{"class":47},[33,52762,52763,52766,52768,52770,52772,52775,52778],{"class":35,"line":1350},[33,52764,52765],{"class":76},"            border-left",[33,52767,52690],{"class":47},[33,52769,701],{"class":76},[33,52771,52745],{"class":39},[33,52773,52774],{"class":76}," solid",[33,52776,52777],{"class":76}," pink",[33,52779,80],{"class":47},[33,52781,52782,52785,52787,52789,52791,52793,52795],{"class":35,"line":1359},[33,52783,52784],{"class":76},"            border-bottom",[33,52786,52690],{"class":47},[33,52788,701],{"class":76},[33,52790,52745],{"class":39},[33,52792,52774],{"class":76},[33,52794,52777],{"class":76},[33,52796,80],{"class":47},[33,52798,52799,52801,52803,52805,52807,52810],{"class":35,"line":1364},[33,52800,52687],{"class":76},[33,52802,52690],{"class":47},[33,52804,2256],{"class":76},[33,52806,52745],{"class":39},[33,52808,52809],{"class":76}," auto",[33,52811,80],{"class":47},[33,52813,52814,52817,52819,52822],{"class":35,"line":1370},[33,52815,52816],{"class":76},"            justify-content",[33,52818,52690],{"class":47},[33,52820,52821],{"class":76},"space-around",[33,52823,80],{"class":47},[33,52825,52826,52829,52831,52834],{"class":35,"line":1425},[33,52827,52828],{"class":76},"            align-items",[33,52830,52690],{"class":47},[33,52832,52833],{"class":76},"flex-end",[33,52835,80],{"class":47},[33,52837,52838,52841,52843,52846],{"class":35,"line":1438},[33,52839,52840],{"class":76},"            text-align",[33,52842,52690],{"class":47},[33,52844,52845],{"class":76},"center",[33,52847,80],{"class":47},[33,52849,52850],{"class":35,"line":1451},[33,52851,1334],{"class":47},[33,52853,52854],{"class":35,"line":1457},[33,52855,160],{"emptyLinePlaceholder":159},[33,52857,52858,52860,52862,52865],{"class":35,"line":1466},[33,52859,52718],{"class":43},[33,52861,1265],{"class":39},[33,52863,52864],{"class":52553},"div",[33,52866,16823],{"class":47},[33,52868,52869,52871,52873,52875],{"class":35,"line":1471},[33,52870,52725],{"class":76},[33,52872,52690],{"class":47},[33,52874,52730],{"class":76},[33,52876,80],{"class":47},[33,52878,52879,52881,52883,52885,52887],{"class":35,"line":1477},[33,52880,52737],{"class":76},[33,52882,52690],{"class":47},[33,52884,2256],{"class":76},[33,52886,52745],{"class":39},[33,52888,80],{"class":47},[33,52890,52891,52894,52896,52899],{"class":35,"line":1504},[33,52892,52893],{"class":76},"            background-color",[33,52895,52690],{"class":47},[33,52897,52898],{"class":76},"pink",[33,52900,80],{"class":47},[33,52902,52903,52906,52908,52911],{"class":35,"line":1509},[33,52904,52905],{"class":76},"            flex-direction",[33,52907,52690],{"class":47},[33,52909,52910],{"class":76},"column",[33,52912,80],{"class":47},[33,52914,52915,52917,52919,52922],{"class":35,"line":1525},[33,52916,52816],{"class":76},[33,52918,52690],{"class":47},[33,52920,52921],{"class":76},"space-between",[33,52923,80],{"class":47},[33,52925,52926],{"class":35,"line":1535},[33,52927,1334],{"class":47},[33,52929,52930],{"class":35,"line":1540},[33,52931,160],{"emptyLinePlaceholder":159},[33,52933,52934,52936,52939,52942],{"class":35,"line":4027},[33,52935,52718],{"class":43},[33,52937,52938],{"class":52553}," div",[33,52940,52941],{"class":52553}," span",[33,52943,16823],{"class":47},[33,52945,52946],{"class":35,"line":4032},[33,52947,160],{"emptyLinePlaceholder":159},[33,52949,52950,52953,52955,52958,52960],{"class":35,"line":9199},[33,52951,52952],{"class":76},"            margin-top",[33,52954,52690],{"class":47},[33,52956,52957],{"class":76},"-20",[33,52959,52745],{"class":39},[33,52961,80],{"class":47},[33,52963,52964],{"class":35,"line":9223},[33,52965,1334],{"class":47},[33,52967,52968],{"class":35,"line":9228},[33,52969,160],{"emptyLinePlaceholder":159},[33,52971,52972,52974,52976,52979],{"class":35,"line":9234},[33,52973,52718],{"class":43},[33,52975,52938],{"class":52553},[33,52977,52978],{"class":52553}," h4",[33,52980,16823],{"class":47},[33,52982,52983,52986,52988,52991,52993],{"class":35,"line":9261},[33,52984,52985],{"class":76},"            margin-bottom",[33,52987,52690],{"class":47},[33,52989,52990],{"class":76},"-35",[33,52992,52745],{"class":39},[33,52994,80],{"class":47},[33,52996,52997,52999,53001,53003,53005],{"class":35,"line":9266},[33,52998,52737],{"class":76},[33,53000,52690],{"class":47},[33,53002,1965],{"class":76},[33,53004,52745],{"class":39},[33,53006,80],{"class":47},[33,53008,53009,53012,53014,53017,53019],{"class":35,"line":9272},[33,53010,53011],{"class":76},"            margin-left",[33,53013,52690],{"class":47},[33,53015,53016],{"class":76},"-10",[33,53018,52745],{"class":39},[33,53020,80],{"class":47},[33,53022,53023],{"class":35,"line":9284},[33,53024,1334],{"class":47},[33,53026,53027,53030,53032],{"class":35,"line":9296},[33,53028,53029],{"class":47},"    \u003C\u002F",[33,53031,1544],{"class":52553},[33,53033,52560],{"class":47},[33,53035,53036,53039,53041],{"class":35,"line":9308},[33,53037,53038],{"class":47},"\u003C\u002F",[33,53040,52587],{"class":52553},[33,53042,52560],{"class":47},[33,53044,53045],{"class":35,"line":10967},[33,53046,160],{"emptyLinePlaceholder":159},[33,53048,53049,53051,53054],{"class":35,"line":10992},[33,53050,875],{"class":47},[33,53052,53053],{"class":52553},"body",[33,53055,52560],{"class":47},[33,53057,53058],{"class":35,"line":11015},[33,53059,160],{"emptyLinePlaceholder":159},[33,53061,53062,53064,53067],{"class":35,"line":11039},[33,53063,52594],{"class":47},[33,53065,53066],{"class":52553},"script",[33,53068,52560],{"class":47},[33,53070,53071],{"class":35,"line":11044},[33,53072,53073],{"class":60},"        \u002F\u002F 1. 四次弹框效果\n",[33,53075,53076],{"class":35,"line":11049},[33,53077,53078],{"class":60},"        \u002F\u002F 声明一个新的数组\n",[33,53080,53081,53084,53087,53089],{"class":35,"line":11054},[33,53082,53083],{"class":39},"        let",[33,53085,53086],{"class":47}," arr ",[33,53088,73],{"class":39},[33,53090,53091],{"class":47}," []\n",[33,53093,53094,53096,53098,53101,53103,53105,53107,53109,53111,53114,53116,53118],{"class":35,"line":11063},[33,53095,1216],{"class":39},[33,53097,860],{"class":47},[33,53099,53100],{"class":39},"let",[33,53102,10689],{"class":47},[33,53104,73],{"class":39},[33,53106,26371],{"class":76},[33,53108,10696],{"class":47},[33,53110,3041],{"class":39},[33,53112,53113],{"class":76}," 4",[33,53115,1492],{"class":47},[33,53117,811],{"class":39},[33,53119,13693],{"class":47},[33,53121,53122],{"class":35,"line":11068},[33,53123,53124],{"class":60},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[33,53126,53127],{"class":35,"line":11074},[33,53128,53129],{"class":60},"            \u002F\u002F arr.push(num)\n",[33,53131,53132,53135,53138,53140,53143,53145,53148,53150,53153],{"class":35,"line":11095},[33,53133,53134],{"class":47},"            arr.",[33,53136,53137],{"class":43},"push",[33,53139,345],{"class":47},[33,53141,53142],{"class":43},"prompt",[33,53144,345],{"class":47},[33,53146,53147],{"class":119},"`请输入第${",[33,53149,1239],{"class":47},[33,53151,53152],{"class":119},"}季度的数据:`",[33,53154,31750],{"class":47},[33,53156,53157],{"class":35,"line":11101},[33,53158,53159],{"class":60},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[33,53161,53162],{"class":35,"line":11115},[33,53163,1334],{"class":47},[33,53165,53166],{"class":35,"line":11121},[33,53167,53168],{"class":60},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[33,53170,53171],{"class":35,"line":11148},[33,53172,53173],{"class":60},"        \u002F\u002F 盒子开头\n",[33,53175,53176,53179,53182,53184,53187],{"class":35,"line":11157},[33,53177,53178],{"class":47},"        document.",[33,53180,53181],{"class":43},"write",[33,53183,345],{"class":47},[33,53185,53186],{"class":119},"` \u003Cdiv class=\"box\">`",[33,53188,884],{"class":47},[33,53190,53191],{"class":35,"line":11163},[33,53192,160],{"emptyLinePlaceholder":159},[33,53194,53195],{"class":35,"line":11171},[33,53196,53197],{"class":60},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[33,53199,53200,53202,53204,53206,53208,53210,53212,53214,53216,53219,53222,53224,53226],{"class":35,"line":11176},[33,53201,1216],{"class":39},[33,53203,860],{"class":47},[33,53205,53100],{"class":39},[33,53207,10689],{"class":47},[33,53209,73],{"class":39},[33,53211,5492],{"class":76},[33,53213,10696],{"class":47},[33,53215,875],{"class":39},[33,53217,53218],{"class":47}," arr.",[33,53220,53221],{"class":76},"length",[33,53223,1492],{"class":47},[33,53225,811],{"class":39},[33,53227,13693],{"class":47},[33,53229,53230,53233,53235,53237],{"class":35,"line":17855},[33,53231,53232],{"class":47},"            document.",[33,53234,53181],{"class":43},[33,53236,345],{"class":47},[33,53238,53239],{"class":119},"`\n",[33,53241,53242,53245,53247,53249,53251,53253],{"class":35,"line":17861},[33,53243,53244],{"class":119},"              \u003Cdiv style=\"height: ${",[33,53246,5282],{"class":47},[33,53248,2489],{"class":119},[33,53250,1239],{"class":47},[33,53252,693],{"class":119},[33,53254,53255],{"class":119},"}px;\">\n",[33,53257,53258,53261,53263,53265,53267,53269],{"class":35,"line":17884},[33,53259,53260],{"class":119},"                \u003Cspan>${",[33,53262,5282],{"class":47},[33,53264,2489],{"class":119},[33,53266,1239],{"class":47},[33,53268,693],{"class":119},[33,53270,53271],{"class":119},"}\u003C\u002Fspan>\n",[33,53273,53274,53277,53279,53281,53283],{"class":35,"line":17890},[33,53275,53276],{"class":119},"                \u003Ch4>第${",[33,53278,1239],{"class":47},[33,53280,46819],{"class":39},[33,53282,26371],{"class":76},[33,53284,53285],{"class":119},"}季度\u003C\u002Fh4>\n",[33,53287,53288],{"class":35,"line":17913},[33,53289,53290],{"class":119},"              \u003C\u002Fdiv>          \n",[33,53292,53293,53296],{"class":35,"line":17927},[33,53294,53295],{"class":119},"            `",[33,53297,884],{"class":47},[33,53299,53300],{"class":35,"line":17947},[33,53301,1334],{"class":47},[33,53303,53304],{"class":35,"line":17953},[33,53305,53306],{"class":60},"        \u002F\u002F 盒子结尾\n",[33,53308,53309,53311,53313,53315,53318],{"class":35,"line":17964},[33,53310,53178],{"class":47},[33,53312,53181],{"class":43},[33,53314,345],{"class":47},[33,53316,53317],{"class":119},"` \u003C\u002Fdiv>`",[33,53319,884],{"class":47},[33,53321,53322,53324,53326],{"class":35,"line":17987},[33,53323,53029],{"class":47},[33,53325,53066],{"class":52553},[33,53327,52560],{"class":47},[33,53329,53330,53332,53334],{"class":35,"line":18009},[33,53331,53038],{"class":47},[33,53333,53053],{"class":52553},[33,53335,52560],{"class":47},[33,53337,53338],{"class":35,"line":18014},[33,53339,160],{"emptyLinePlaceholder":159},[33,53341,53342,53344,53346],{"class":35,"line":18020},[33,53343,53038],{"class":47},[33,53345,51888],{"class":52553},[33,53347,52560],{"class":47},[1599,53349,53351],{"id":53350},"_284-冒泡排序","2.8.4 冒泡排序",[23,53353,53355],{"className":51886,"code":53354,"language":51888,"meta":28,"style":28},"\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",[30,53356,53357,53367,53381,53385,53393,53408,53428,53440,53448,53452,53460,53468,53500,53533,53570,53575,53594,53599,53612,53627,53643,53647,53652,53656,53666,53675,53683,53687],{"__ignoreMap":28},[33,53358,53359,53361,53363,53365],{"class":35,"line":36},[33,53360,52550],{"class":47},[33,53362,52554],{"class":52553},[33,53364,52557],{"class":43},[33,53366,52560],{"class":47},[33,53368,53369,53371,53373,53375,53377,53379],{"class":35,"line":51},[33,53370,875],{"class":47},[33,53372,51888],{"class":52553},[33,53374,52569],{"class":43},[33,53376,73],{"class":47},[33,53378,52574],{"class":119},[33,53380,52560],{"class":47},[33,53382,53383],{"class":35,"line":57},[33,53384,160],{"emptyLinePlaceholder":159},[33,53386,53387,53389,53391],{"class":35,"line":64},[33,53388,875],{"class":47},[33,53390,52587],{"class":52553},[33,53392,52560],{"class":47},[33,53394,53395,53398,53400,53402,53404,53406],{"class":35,"line":83},[33,53396,53397],{"class":47},"  \u003C",[33,53399,52597],{"class":52553},[33,53401,52600],{"class":43},[33,53403,73],{"class":47},[33,53405,52605],{"class":119},[33,53407,52560],{"class":47},[33,53409,53410,53412,53414,53416,53418,53420,53422,53424,53426],{"class":35,"line":89},[33,53411,53397],{"class":47},[33,53413,52597],{"class":52553},[33,53415,16171],{"class":43},[33,53417,73],{"class":47},[33,53419,52644],{"class":119},[33,53421,52624],{"class":43},[33,53423,73],{"class":47},[33,53425,52651],{"class":119},[33,53427,52560],{"class":47},[33,53429,53430,53432,53434,53436,53438],{"class":35,"line":98},[33,53431,53397],{"class":47},[33,53433,52660],{"class":52553},[33,53435,52663],{"class":47},[33,53437,52660],{"class":52553},[33,53439,52560],{"class":47},[33,53441,53442,53444,53446],{"class":35,"line":110},[33,53443,53038],{"class":47},[33,53445,52587],{"class":52553},[33,53447,52560],{"class":47},[33,53449,53450],{"class":35,"line":134},[33,53451,160],{"emptyLinePlaceholder":159},[33,53453,53454,53456,53458],{"class":35,"line":156},[33,53455,875],{"class":47},[33,53457,53053],{"class":52553},[33,53459,52560],{"class":47},[33,53461,53462,53464,53466],{"class":35,"line":163},[33,53463,53397],{"class":47},[33,53465,53066],{"class":52553},[33,53467,52560],{"class":47},[33,53469,53470,53473,53475,53477,53480,53482,53484,53486,53488,53490,53492,53494,53496,53498],{"class":35,"line":169},[33,53471,53472],{"class":39},"    let",[33,53474,53086],{"class":47},[33,53476,73],{"class":39},[33,53478,53479],{"class":47}," [",[33,53481,722],{"class":76},[33,53483,13686],{"class":47},[33,53485,717],{"class":76},[33,53487,13686],{"class":47},[33,53489,712],{"class":76},[33,53491,13686],{"class":47},[33,53493,707],{"class":76},[33,53495,13686],{"class":47},[33,53497,701],{"class":76},[33,53499,34499],{"class":47},[33,53501,53502,53504,53506,53508,53510,53512,53514,53516,53518,53520,53522,53525,53527,53529,53531],{"class":35,"line":175},[33,53503,857],{"class":39},[33,53505,860],{"class":47},[33,53507,53100],{"class":39},[33,53509,10689],{"class":47},[33,53511,73],{"class":39},[33,53513,5492],{"class":76},[33,53515,10696],{"class":47},[33,53517,875],{"class":39},[33,53519,53218],{"class":47},[33,53521,53221],{"class":76},[33,53523,53524],{"class":39}," -",[33,53526,26371],{"class":76},[33,53528,1492],{"class":47},[33,53530,811],{"class":39},[33,53532,13693],{"class":47},[33,53534,53535,53538,53540,53542,53544,53546,53548,53550,53552,53554,53556,53558,53560,53562,53564,53566,53568],{"class":35,"line":181},[33,53536,53537],{"class":39},"      for",[33,53539,860],{"class":47},[33,53541,53100],{"class":39},[33,53543,10751],{"class":47},[33,53545,73],{"class":39},[33,53547,5492],{"class":76},[33,53549,10758],{"class":47},[33,53551,875],{"class":39},[33,53553,53218],{"class":47},[33,53555,53221],{"class":76},[33,53557,53524],{"class":39},[33,53559,10689],{"class":47},[33,53561,1199],{"class":39},[33,53563,26371],{"class":76},[33,53565,10765],{"class":47},[33,53567,811],{"class":39},[33,53569,13693],{"class":47},[33,53571,53572],{"class":35,"line":196},[33,53573,53574],{"class":60},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[33,53576,53577,53579,53582,53584,53587,53589,53591],{"class":35,"line":213},[33,53578,3915],{"class":39},[33,53580,53581],{"class":47}," (arr[j] ",[33,53583,1265],{"class":39},[33,53585,53586],{"class":47}," arr[j ",[33,53588,1271],{"class":39},[33,53590,26371],{"class":76},[33,53592,53593],{"class":47},"]) {\n",[33,53595,53596],{"class":35,"line":228},[33,53597,53598],{"class":60},"          \u002F\u002F 交换两个变量\n",[33,53600,53601,53604,53607,53609],{"class":35,"line":1345},[33,53602,53603],{"class":39},"          let",[33,53605,53606],{"class":47}," tmp ",[33,53608,73],{"class":39},[33,53610,53611],{"class":47}," arr[j]\n",[33,53613,53614,53617,53619,53621,53623,53625],{"class":35,"line":1350},[33,53615,53616],{"class":47},"          arr[j] ",[33,53618,73],{"class":39},[33,53620,53586],{"class":47},[33,53622,1271],{"class":39},[33,53624,26371],{"class":76},[33,53626,34499],{"class":47},[33,53628,53629,53632,53634,53636,53638,53640],{"class":35,"line":1359},[33,53630,53631],{"class":47},"          arr[j ",[33,53633,1271],{"class":39},[33,53635,26371],{"class":76},[33,53637,5840],{"class":47},[33,53639,73],{"class":39},[33,53641,53642],{"class":47}," tmp\n",[33,53644,53645],{"class":35,"line":1364},[33,53646,1334],{"class":47},[33,53648,53649],{"class":35,"line":1370},[33,53650,53651],{"class":47},"      }\n",[33,53653,53654],{"class":35,"line":1425},[33,53655,916],{"class":47},[33,53657,53658,53661,53663],{"class":35,"line":1438},[33,53659,53660],{"class":47},"    document.",[33,53662,53181],{"class":43},[33,53664,53665],{"class":47},"(arr)\n",[33,53667,53668,53671,53673],{"class":35,"line":1451},[33,53669,53670],{"class":47},"  \u003C\u002F",[33,53672,53066],{"class":52553},[33,53674,52560],{"class":47},[33,53676,53677,53679,53681],{"class":35,"line":1457},[33,53678,53038],{"class":47},[33,53680,53053],{"class":52553},[33,53682,52560],{"class":47},[33,53684,53685],{"class":35,"line":1466},[33,53686,160],{"emptyLinePlaceholder":159},[33,53688,53689,53691,53693],{"class":35,"line":1471},[33,53690,53038],{"class":47},[33,53692,51888],{"class":52553},[33,53694,52560],{"class":47},[14,53696,53697],{},[2918,53698],{"alt":28,"src":53699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,53701,53702],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,53704,53705],{},"let arr = [4, 2, 5, 1, 3]",[14,53707,53708],{},"\u002F\u002F 1.升序排列写法",[14,53710,53711],{},"arr.sort(function (a, b) {",[14,53713,53714],{},"return a - b",[14,53716,53717],{},"})",[14,53719,53720],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,53722,53723],{},"\u002F\u002F 降序排列写法",[14,53725,53711],{},[14,53727,53728],{},"return b - a",[14,53730,53717],{},[14,53732,53733],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[18,53735,53737],{"id":53736},"_29-函数","2.9 函数",[14,53739,53740],{},[2918,53741],{"alt":28,"src":53742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,53744,53745],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,53747,53748],{},"函数的声明用function",[14,53750,53751],{},"函数里边可以嵌套函数",[1599,53753,53755],{"id":53754},"_291-函数传参","2.9.1 函数传参",[14,53757,53758],{},[2918,53759],{"alt":28,"src":53760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,53762,53763],{},[2918,53764],{"alt":28,"src":53765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[561,53767,53768,53771,53774,53777,53780,53783],{},[564,53769,53770],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[564,53772,53773],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[564,53775,53776],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[564,53778,53779],{},"开发中尽量保持形参和实参个数一致",[564,53781,53782],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[564,53784,53785],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,53787,53788],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[1599,53790,53792],{"id":53791},"_292-函数的返回值","2.9.2 函数的返回值",[14,53794,53795],{},[2918,53796],{"alt":28,"src":53797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,53799,53800],{},[2918,53801],{"alt":28,"src":53802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[561,53804,53805,53808,53811,53814,53817],{},[564,53806,53807],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[564,53809,53810],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[564,53812,53813],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[564,53815,53816],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[564,53818,53819],{},"断点调试:进入函数内部看执行过程F11",[1599,53821,53823],{"id":53822},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[23,53825,53827],{"className":51886,"code":53826,"language":51888,"meta":28,"style":28},"    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",[30,53828,53829,53834,53839,53843,53848],{"__ignoreMap":28},[33,53830,53831],{"class":35,"line":36},[33,53832,53833],{"class":47},"    function fn(a, b) {\n",[33,53835,53836],{"class":35,"line":51},[33,53837,53838],{"class":47},"      console.log(a + b);\n",[33,53840,53841],{"class":35,"line":57},[33,53842,916],{"class":47},[33,53844,53845],{"class":35,"line":64},[33,53846,53847],{"class":47},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[33,53849,53850],{"class":35,"line":83},[33,53851,53852],{"class":47},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[1599,53854,53856],{"id":53855},"_294-作用域","2.9.4 作用域",[561,53858,53859,53865,53870,53873,53876],{},[564,53860,53861,53862],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[480,53863,53864],{},"作用域",[564,53866,53867],{},[480,53868,53869],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[564,53871,53872],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[564,53874,53875],{},"函数内部可以直接所使用全局变量",[564,53877,53878],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,53880,15884],{},[23,53882,53884],{"className":51886,"code":53883,"language":51888,"meta":28,"style":28},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[30,53885,53886,53891,53896,53900,53905,53910,53915],{"__ignoreMap":28},[33,53887,53888],{"class":35,"line":36},[33,53889,53890],{"class":47},"    function fun() {\n",[33,53892,53893],{"class":35,"line":51},[33,53894,53895],{"class":47},"      num = 10\n",[33,53897,53898],{"class":35,"line":57},[33,53899,916],{"class":47},[33,53901,53902],{"class":35,"line":64},[33,53903,53904],{"class":47},"    fun()\n",[33,53906,53907],{"class":35,"line":83},[33,53908,53909],{"class":47},"    console.log(num)\n",[33,53911,53912],{"class":35,"line":89},[33,53913,53914],{"class":47},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[33,53916,53917],{"class":35,"line":98},[33,53918,53919],{"class":47},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[561,53921,53922,53925],{},[564,53923,53924],{},"函数内部的形参可以看做是局部变量",[564,53926,53927],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53929,53930,53931],{},"变量访问原则： ",[480,53932,53933],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[1599,53935,53937],{"id":53936},"_295-匿名函数","2.9.5 匿名函数",[14,53939,53940],{},"函数可以分为具名函数和匿名函数",[14,53942,53943],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[574,53945,53946],{},[564,53947,53948],{},"函数表达式",[14,53950,53951],{},[2918,53952],{"alt":28,"src":53953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53955,53956],{},"里边也可以写参数",[14,53958,53959],{},"具名函数调用位置可以随意调整；",[14,53961,53962],{},"匿名函数函数表达式形式只能在声明后才可以使用",[574,53964,53965],{"start":51},[564,53966,53967],{},"立即执行函数",[14,53969,53970],{},[2918,53971],{"alt":28,"src":53972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53974,53975],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53977,53978],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53980,53981],{},"(function () {})();",[14,53983,53984],{},"不要落下最后的;",[14,53986,53987],{},"立即执行函数必须要加;",[14,53989,53990],{},"分号写前写后都没问题",[14,53992,53993],{},"写前：",[14,53995,53996],{},"(function() {})()",[14,53998,53999],{},";(function () {})();",[14,54001,54002],{},"写后:",[14,54004,54005],{},"(function() {})();",[14,54007,53981],{},[14,54009,54010],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,54012,54013],{},"还有一种写法：",[14,54015,54016],{},"(function(){}());",[14,54018,54019],{},"或者:",[14,54021,54022],{},"!function(){}();",[14,54024,54025],{},"立即执行函数有时候也是可以加名字的：",[14,54027,54028],{},"(function flexible(window,document) {}(window,document));",[14,54030,54031],{},"省一些调用方法",[1599,54033,54035],{"id":54034},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,54037,54038],{},[2918,54039],{"alt":28,"src":54040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,54042,54043],{},"这样就不用非得给x,y初始化了",[14,54045,54046],{},[2918,54047],{"alt":28,"src":54048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,54050,54051],{},"代码执行时先看左边",[14,54053,54054],{},"例如：console.log(false && 3+5)",[14,54056,54057],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,54059,54060],{},"&&都是真时，就返回最后一个真值",[14,54062,54063],{},"console.log(11 && 22)",[14,54065,54066],{},"输出22",[14,54068,54069],{},"逻辑与：遇真则真",[14,54071,15884],{},[14,54073,54074],{},"let age=1",[14,54076,54077],{},"console.log(11 || age++)",[14,54079,54080],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,54082,54083],{},"console.log(11 || 22)",[14,54085,54086],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,54088,54089],{},"||如果都是假的话，就取最后一个假的值了",[1599,54091,54093],{"id":54092},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,54095,54096],{},"显示转换：",[14,54098,54099,54102,54103],{},[480,54100,54101],{},"记忆","： ",[480,54104,54105],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,54107,54108],{},"空字符串为假，其他字符串全为真",[14,54110,54111],{},[2918,54112],{"alt":28,"src":54113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,54115,54116],{},"隐式转换：",[14,54118,54119],{},[2918,54120],{"alt":28,"src":54121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,54123,54124],{},"隐式转换:",[14,54126,54127],{},"null+3=3",[14,54129,54130],{},"undefined+3=NaN",[14,54132,54133],{},"null==undefined 输出true,他两个都当0看",[14,54135,54136],{},"null===undefined 输出false",[14,54138,54139],{},"undefined做任何操作都是NaN",[14,54141,54142],{},"NaN不等于NaN，NaN表示计算错误",[18,54144,54146],{"id":54145},"_210-对象","2.10 对象",[1599,54148,54150],{"id":54149},"_2101-对象的介绍","2.10.1 对象的介绍",[14,54152,54153],{},"对象也是一种数据类型，里边的数据是无序的",[14,54155,54156],{},"对象由属性和方法组成",[14,54158,54159],{},[2918,54160],{"alt":28,"src":54161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,54163,54164],{},[2918,54165],{"alt":28,"src":54166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,54168,54169],{},[2918,54170],{"alt":28,"src":54171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[1599,54173,54175],{"id":54174},"_2102-对象属性","2.10.2 对象属性",[14,54177,54178],{},[2918,54179],{"alt":28,"src":54180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[574,54182,54183],{},[564,54184,54185],{},"查询对象",[14,54187,54188],{},"对象名.属性 goods.uname",[14,54190,54191],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,54193,54194],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,54196,54197],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,54199,54200],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[574,54202,54203],{"start":51},[564,54204,54205],{},"重新赋值",[14,54207,54208],{},"对象名.属性=新值",[574,54210,54211],{"start":57},[564,54212,54213],{},"增加新数据",[14,54215,54208],{},[574,54217,54218],{"start":64},[564,54219,54220],{},"删除对象中的属性",[14,54222,54223],{},"delete 对象名.属性",[1599,54225,54227],{"id":54226},"_2103-对象方法","2.10.3 对象方法",[14,54229,54230],{},[2918,54231],{"alt":28,"src":54232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,54234,54235],{},"后边跟的是匿名函数",[14,54237,54238],{},"对象外面的叫函数；对象内部的叫方法",[14,54240,54241],{},[2918,54242],{"alt":28,"src":54243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[1599,54245,54247],{"id":54246},"_2104-遍历对象","2.10.4 遍历对象",[14,54249,54250],{},"理解为加括号的python字典遍历",[14,54252,54253],{},[2918,54254],{"alt":28,"src":54255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,54257,54258],{},"k是字符串类型",[14,54260,54261],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[23,54263,54265],{"className":51886,"code":54264,"language":51888,"meta":28,"style":28},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[30,54266,54267,54272,54277,54282,54287],{"__ignoreMap":28},[33,54268,54269],{"class":35,"line":36},[33,54270,54271],{"class":47},"   let arr = [1, 2, 3]\n",[33,54273,54274],{"class":35,"line":51},[33,54275,54276],{"class":47},"    for (let k in arr) {\n",[33,54278,54279],{"class":35,"line":57},[33,54280,54281],{"class":47},"      console.log(k)\n",[33,54283,54284],{"class":35,"line":64},[33,54285,54286],{"class":47},"      console.log(arr[k])\n",[33,54288,54289],{"class":35,"line":83},[33,54290,916],{"class":47},[14,54292,54293],{},[2918,54294],{"alt":28,"src":54295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,54297,54298],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,54300,54301],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,54303,54304],{},"for in 得到的k是属性名",[53066,54306,54307],{},"\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,54309,54310],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[1599,54312,54314],{"id":54313},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,54316,54317],{},"数组中放对象信息",[23,54319,54323],{"className":54320,"code":54321,"language":54322,"meta":28,"style":28},"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",[30,54324,54325,54333,54338,54343,54348,54353,54358,54363,54368,54373,54378,54383,54388,54392,54396],{"__ignoreMap":28},[33,54326,54327,54329,54331],{"class":35,"line":36},[33,54328,875],{"class":47},[33,54330,53066],{"class":52553},[33,54332,52560],{"class":47},[33,54334,54335],{"class":35,"line":51},[33,54336,54337],{"class":47},"    let students = [\n",[33,54339,54340],{"class":35,"line":57},[33,54341,54342],{"class":47},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[33,54344,54345],{"class":35,"line":64},[33,54346,54347],{"class":47},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[33,54349,54350],{"class":35,"line":83},[33,54351,54352],{"class":47},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[33,54354,54355],{"class":35,"line":89},[33,54356,54357],{"class":47},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[33,54359,54360],{"class":35,"line":98},[33,54361,54362],{"class":47},"    ]\n",[33,54364,54365],{"class":35,"line":110},[33,54366,54367],{"class":47},"    for (let i = 0; i \u003C students.length; i++) {\n",[33,54369,54370],{"class":35,"line":134},[33,54371,54372],{"class":47},"      for (let k in students[i]) {\n",[33,54374,54375],{"class":35,"line":156},[33,54376,54377],{"class":47},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[33,54379,54380],{"class":35,"line":163},[33,54381,54382],{"class":47},"        \u002F\u002F输出每个人的名字：\n",[33,54384,54385],{"class":35,"line":169},[33,54386,54387],{"class":47},"        \u002F\u002Fconsole.log(students[i].name)\n",[33,54389,54390],{"class":35,"line":175},[33,54391,53651],{"class":47},[33,54393,54394],{"class":35,"line":181},[33,54395,916],{"class":47},[33,54397,54398,54400,54402],{"class":35,"line":196},[33,54399,53670],{"class":47},[33,54401,53066],{"class":52553},[33,54403,52560],{"class":47},[1599,54405,54407],{"id":54406},"_2106-内置对象","2.10.6 内置对象",[14,54409,54410],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[574,54412,54413],{},[564,54414,54415],{},"数学对象Math",[14,54417,54418],{},[2918,54419],{"alt":28,"src":54420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,54422,54423],{},[126,54424,54427],{"href":54425,"rel":54426},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25117],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,54429,54430],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,54432,54433],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,54435,54436],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,54438,54439],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,54441,54442],{},"null属于对象数据类型",[574,54444,54445],{"start":51},[564,54446,54447],{},"生成任意范围随机数",[14,54449,54450],{},[2918,54451],{"alt":28,"src":54452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,54454,54455],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,54457,54458],{},"乘以几就取不到几",[14,54460,54461],{},"取数组中的随机元素：",[14,54463,54464],{},"let arr = ['red', 'green', 'blue']",[14,54466,54467],{},"let random = Math.floor(Math.random() * arr.length)",[14,54469,54470],{},"console.log(arr[random])",[14,54472,54473],{},"这个函数得到的是全闭区间",[14,54475,54476],{},"function getRandom(N, M) {",[14,54478,54479],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,54481,2542],{},[14,54483,54484],{},"console.log(getRandom(4, 8))",[1599,54486,54488],{"id":54487},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,54490,54491],{},[2918,54492],{"alt":28,"src":54493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,54495,54496],{},[2918,54497],{"alt":28,"src":54498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,54500,54501],{},[2918,54502],{"alt":28,"src":54503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,54505,54506],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,54508,54509],{},[2918,54510],{"alt":28,"src":54511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,54513,54514],{},[2918,54515],{"alt":28,"src":54516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,54518,54519],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,54521,54522],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,54524,54525],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1544,54527,54528],{},"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":28,"searchDepth":51,"depth":51,"links":54530},[54531,54539,54540,54541,54542,54543,54550,54554,54560,54569],{"id":51721,"depth":51,"text":51722,"children":54532},[54533,54534,54535,54536,54537,54538],{"id":51725,"depth":57,"text":51726},{"id":51742,"depth":57,"text":51743},{"id":51782,"depth":57,"text":51783},{"id":51794,"depth":57,"text":51795},{"id":51803,"depth":57,"text":51804},{"id":51851,"depth":57,"text":51852},{"id":51861,"depth":51,"text":51862},{"id":51949,"depth":51,"text":51950},{"id":51972,"depth":51,"text":51973},{"id":51984,"depth":51,"text":51985},{"id":52171,"depth":51,"text":52172,"children":54544},[54545,54546,54547,54548,54549],{"id":52175,"depth":57,"text":52176},{"id":52184,"depth":57,"text":52185},{"id":52212,"depth":57,"text":52213},{"id":52248,"depth":57,"text":52249},{"id":52273,"depth":57,"text":52274},{"id":52285,"depth":51,"text":52286,"children":54551},[54552,54553],{"id":52306,"depth":57,"text":52307},{"id":52400,"depth":57,"text":52401},{"id":52458,"depth":51,"text":52459,"children":54555},[54556,54557,54558,54559],{"id":52462,"depth":57,"text":52463},{"id":52486,"depth":57,"text":52487},{"id":52539,"depth":57,"text":52540},{"id":53350,"depth":57,"text":53351},{"id":53736,"depth":51,"text":53737,"children":54561},[54562,54563,54564,54565,54566,54567,54568],{"id":53754,"depth":57,"text":53755},{"id":53791,"depth":57,"text":53792},{"id":53822,"depth":57,"text":53823},{"id":53855,"depth":57,"text":53856},{"id":53936,"depth":57,"text":53937},{"id":54034,"depth":57,"text":54035},{"id":54092,"depth":57,"text":54093},{"id":54145,"depth":51,"text":54146,"children":54570},[54571,54572,54573,54574,54575,54576,54577],{"id":54149,"depth":57,"text":54150},{"id":54174,"depth":57,"text":54175},{"id":54226,"depth":57,"text":54227},{"id":54246,"depth":57,"text":54247},{"id":54313,"depth":57,"text":54314},{"id":54406,"depth":57,"text":54407},{"id":54487,"depth":57,"text":54488},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51713,"description":24628},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54584,"title":54585,"body":54586,"description":24628,"extension":1557,"meta":77926,"navigation":159,"path":77927,"seo":77928,"stem":77929,"__hash__":77930},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54587,"toc":77866},[54588,54591,54594,54597,54602,54605,54608,54611,54615,54619,54625,54630,54638,54645,54648,54652,54657,54662,54667,54670,54673,54684,54687,54691,54694,54697,54702,54707,54712,54715,54718,54810,54813,54818,54821,54826,54829,54832,54837,54840,54845,54849,54852,54866,54870,54875,54878,54881,54885,54890,54893,54897,54901,54906,54910,54915,54918,54921,54924,54927,54930,54933,54938,54943,54971,54974,54977,54980,54985,54988,54991,54994,54997,55001,55030,55034,55039,55044,55047,55050,55053,55058,55173,55178,55183,55344,55349,55352,55356,55361,55366,55369,55372,55375,55378,55381,55384,55387,55390,55393,55396,55399,55402,55405,55408,55410,55413,55416,55419,55424,55428,55825,55828,55834,55838,55843,57125,57130,57133,57136,57139,57144,58340,58344,58350,58355,58358,58363,58368,58372,58376,58381,58384,58389,58392,58395,58399,59307,59310,59314,59535,59538,59541,59544,59770,59773,59997,60000,60004,60009,60012,60015,60243,60246,60279,60282,60286,60291,60295,60298,60301,60304,60307,60310,60313,60316,60321,61601,61605,61608,62701,62705,62708,62711,62714,62717,62721,62724,62727,62729,62737,64218,64222,64225,64228,64231,64440,64443,64447,64451,64456,64461,64464,64467,64472,64476,64481,64484,64593,64597,64602,64607,64610,64613,64617,64622,64627,64632,64635,64638,64649,64652,64657,64662,64665,64668,64741,64745,64750,64753,64755,64766,64770,64775,66101,66104,66107,66110,66112,66115,66118,66121,66124,66127,66130,66133,66136,66139,66142,66145,66148,66150,66152,66155,66159,67253,67256,67259,67275,67289,67292,67297,67303,67308,67312,67316,67321,67325,67330,67772,67777,67780,67784,67789,67792,67795,67799,67804,67808,67813,67818,67822,67827,67832,67835,67840,67845,67849,67854,67859,67963,67966,67970,67975,68341,68344,68347,68350,68353,68356,68359,68362,68365,69661,69665,69670,69675,69678,69681,69684,69687,69689,69694,69699,69702,69706,69711,69716,69721,69724,69727,69730,69733,69736,69741,69744,69748,69753,69758,69762,69767,69770,69775,69778,69781,69784,69787,69790,69795,69798,69801,69804,69807,69811,69816,69819,69823,69828,69831,69834,69838,69867,69870,69874,69878,69883,69887,69892,69895,69898,69901,69904,69907,69910,69913,69916,69919,69922,69925,69928,69931,69934,69938,69943,69948,69951,69955,69959,69964,69967,69971,69974,69977,69982,69987,69992,69997,70002,70005,70008,70013,70018,70022,70027,70030,70035,70038,70041,70044,70047,70052,70055,70064,70068,70073,70076,70079,70083,70086,70091,70095,70098,70104,70110,70114,70140,70143,71704,71707,72203,72206,72211,72216,72221,72225,72230,72235,72240,72244,72249,72252,72255,72258,72261,72265,72268,72273,72276,72281,72285,72290,72293,72298,72303,72308,72311,72314,72319,72324,72327,72330,72334,72337,72342,72345,72350,72353,72358,72363,72368,72371,72376,72441,72444,72455,72459,72464,72636,72640,72645,72648,72651,72654,72658,72669,72673,72676,72681,72686,72689,72692,72695,72698,72701,72703,72706,72709,72712,72717,72720,72725,72728,72732,72735,72738,72752,72756,72759,72814,72819,72822,72825,72830,72833,72837,72842,72972,72976,72981,72986,73067,73072,73076,73079,73084,73089,73095,73098,73101,73104,73108,73113,73116,73127,73131,73148,76195,76199,76202,76205,76208,76229,76233,76236,76244,76247,76252,76255,76258,76263,76268,76272,76293,76297,76302,76305,76308,76311,76314,76318,76323,76326,76330,76335,76338,76343,76346,76351,76354,76359,77562,77566,77571,77574,77579,77863],[10,54589,54585],{"id":54590},"_3web-apis",[14,54592,54593],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,54595,54596],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,54598,54599],{},[2918,54600],{"alt":28,"src":54601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,54603,54604],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,54606,54607],{},"建议数组和对象使用 const 来声明",[14,54609,54610],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[18,54612,54614],{"id":54613},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[1599,54616,54618],{"id":54617},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,54620,54621,54624],{},[30,54622,54623],{},"document"," = HTML 文件解析后的对象化表示；",[14,54626,54627,54629],{},[30,54628,54623],{}," ≠ HTML 文件本身",[14,54631,54632,54637],{},[480,54633,54634],{},[30,54635,54636],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,54639,54640,54644],{},[480,54641,54642],{},[30,54643,54623],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,54646,54647],{},"document实际上为window.document的简写",[1599,54649,54651],{"id":54650},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,54653,54654],{},[2918,54655],{"alt":28,"src":54656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,54658,54659],{},[2918,54660],{"alt":28,"src":54661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,54663,54664],{},[2918,54665],{"alt":28,"src":54666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,54668,54669],{},"console.dir()",[14,54671,54672],{},"dir用来打印对象",[561,54674,54675,54678,54681],{},[564,54676,54677],{},"任何一个标签，都是一个对象",[564,54679,54680],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[564,54682,54683],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,54685,54686],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[1599,54688,54690],{"id":54689},"_312-获取dom对象","3.1.2 获取DoM对象",[14,54692,54693],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,54695,54696],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,54698,54699],{},[480,54700,54701],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[574,54703,54704],{},[564,54705,54706],{},"利用CSS选择器来获取标签元素",[14,54708,54709],{},[2918,54710],{"alt":28,"src":54711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,54713,54714],{},"里边的选择器必须必须加引号！！！",[14,54716,54717],{},"只选择第一个元素",[23,54719,54721],{"className":54320,"code":54720,"language":54322,"meta":28,"style":28},"\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",[30,54722,54723,54731,54752,54771,54779,54784,54789,54794,54802],{"__ignoreMap":28},[33,54724,54725,54727,54729],{"class":35,"line":36},[33,54726,875],{"class":47},[33,54728,53053],{"class":52553},[33,54730,52560],{"class":47},[33,54732,54733,54735,54737,54740,54742,54745,54748,54750],{"class":35,"line":51},[33,54734,53397],{"class":47},[33,54736,52864],{"class":52553},[33,54738,54739],{"class":43}," class",[33,54741,73],{"class":47},[33,54743,54744],{"class":119},"\"box\"",[33,54746,54747],{"class":47},">123\u003C\u002F",[33,54749,52864],{"class":52553},[33,54751,52560],{"class":47},[33,54753,54754,54756,54758,54760,54762,54764,54767,54769],{"class":35,"line":57},[33,54755,53397],{"class":47},[33,54757,52864],{"class":52553},[33,54759,54739],{"class":43},[33,54761,73],{"class":47},[33,54763,54744],{"class":119},[33,54765,54766],{"class":47},">456\u003C\u002F",[33,54768,52864],{"class":52553},[33,54770,52560],{"class":47},[33,54772,54773,54775,54777],{"class":35,"line":64},[33,54774,53397],{"class":47},[33,54776,53066],{"class":52553},[33,54778,52560],{"class":47},[33,54780,54781],{"class":35,"line":83},[33,54782,54783],{"class":47},"    \u002F\u002F 1.获取匹配的第一个元素\n",[33,54785,54786],{"class":35,"line":89},[33,54787,54788],{"class":47},"    const box = document.querySelector('div')\n",[33,54790,54791],{"class":35,"line":98},[33,54792,54793],{"class":47},"    console.dir(box)\n",[33,54795,54796,54798,54800],{"class":35,"line":110},[33,54797,53670],{"class":47},[33,54799,53066],{"class":52553},[33,54801,52560],{"class":47},[33,54803,54804,54806,54808],{"class":35,"line":134},[33,54805,53038],{"class":47},[33,54807,53053],{"class":52553},[33,54809,52560],{"class":47},[14,54811,54812],{},"只选123，不选456",[14,54814,54815],{},[2918,54816],{"alt":28,"src":54817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,54819,54820],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,54822,54823],{},[2918,54824],{"alt":28,"src":54825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,54827,54828],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,54830,54831],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[574,54833,54834],{"start":51},[564,54835,54836],{},"其他方法来获取标签元素",[14,54838,54839],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,54841,54842],{},[2918,54843],{"alt":28,"src":54844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[1599,54846,54848],{"id":54847},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,54850,54851],{},"设置修改DOM元素内容有两种方式：",[561,54853,54854,54857,54860,54863],{},[564,54855,54856],{},"元素.innerText=''",[564,54858,54859],{},"元素.innerHTML=''",[564,54861,54862],{},"不写字符串输出数字也是可以的",[564,54864,54865],{},"元素.innerHtml=1",[23249,54867,54869],{"id":54868},"_3131-innertext","3.1.3.1 innerText",[14,54871,54872],{},[2918,54873],{"alt":28,"src":54874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,54876,54877],{},"思路：实现了修改盒子中的内容！",[14,54879,54880],{},"它只显示纯文本，不解析标签",[23249,54882,54884],{"id":54883},"_3132-innerhtml","3.1.3.2 innerHTML",[14,54886,54887],{},[2918,54888],{"alt":28,"src":54889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,54891,54892],{},"相比于innerText，他的强大之处在于可以解析标签",[1599,54894,54896],{"id":54895},"_314-操作元素属性","3.1.4 操作元素属性",[23249,54898,54900],{"id":54899},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,54902,54903],{},[2918,54904],{"alt":28,"src":54905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23249,54907,54909],{"id":54908},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,54911,54912],{},[2918,54913],{"alt":28,"src":54914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,54916,54917],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54919,54920],{},"div.style.backgroundColor = 'hotpink'",[14,54922,54923],{},"如果按照css的写法，-表示减，就会出错",[14,54925,54926],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54928,54929],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54931,54932],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54934,54935],{},[2918,54936],{"alt":28,"src":54937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54939,54940],{},[2918,54941],{"alt":28,"src":54942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[574,54944,54945,54948,54951,54954,54957,54960],{},[564,54946,54947],{},"className这个方式就是修改很多样式的时候来使用的！",[564,54949,54950],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[564,54952,54953],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[564,54955,54956],{},"className为属性名，如果还用class的话就导致与关键字冲突",[564,54958,54959],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[564,54961,54962,54963,54968],{},"解析标签的时候就变为了",[52864,54964],{"className":54965},[54966,54967],"nav","box",[54969,54970],"br",{},[14,54972,54973],{},"例子：",[52864,54975],{"className":54976},[54966],[53066,54978,54979],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54981,54982],{},[2918,54983],{"alt":28,"src":54984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54986,54987],{},"追加和删除类名用classList",[14,54989,54990],{},"常用于类似于开关的操作",[14,54992,54993],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54995,54996],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23249,54998,55000],{"id":54999},"_3143-牢记点","3.1.4.3 牢记点",[574,55002,55003,55006,55009,55012,55015,55018,55021,55024,55027],{},[564,55004,55005],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[564,55007,55008],{},"使用style属性操作css时不要忘记引号",[564,55010,55011],{},"使用className或者classList时也不要忘记引号",[564,55013,55014],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[564,55016,55017],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[564,55019,55020],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[564,55022,55023],{},"若： let arr=['1','2',3] arr[0]=1",[564,55025,55026],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[564,55028,55029],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[1599,55031,55033],{"id":55032},"_315-操作表单元素","3.1.5 操作表单元素",[574,55035,55036],{},[564,55037,55038],{},"天生的属性",[14,55040,55041],{},[2918,55042],{"alt":28,"src":55043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,55045,55046],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,55048,55049],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,55051,55052],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,55054,55055],{},[2918,55056],{"alt":28,"src":55057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[23,55059,55061],{"className":51886,"code":55060,"language":51888,"meta":28,"style":28},"在复选框中如果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",[30,55062,55063,55068,55100,55105,55110,55115,55120,55124,55129,55134,55151,55163,55168],{"__ignoreMap":28},[33,55064,55065],{"class":35,"line":36},[33,55066,55067],{"class":47},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[33,55069,55070,55072,55075,55078,55080,55083,55085,55087,55089,55091,55093,55095,55098],{"class":35,"line":51},[33,55071,875],{"class":47},[33,55073,55074],{"class":52553},"input",[33,55076,55077],{"class":43}," type",[33,55079,73],{"class":47},[33,55081,55082],{"class":119},"\"checkbox\"",[33,55084,16171],{"class":43},[33,55086,73],{"class":47},[33,55088,1520],{"class":119},[33,55090,16210],{"class":43},[33,55092,73],{"class":47},[33,55094,1520],{"class":119},[33,55096,55097],{"class":43}," checked",[33,55099,52560],{"class":47},[33,55101,55102],{"class":35,"line":57},[33,55103,55104],{"class":47},"不选的话：\n",[33,55106,55107],{"class":35,"line":64},[33,55108,55109],{"class":47},"const input = document.querySelector('input')\n",[33,55111,55112],{"class":35,"line":83},[33,55113,55114],{"class":47},"input.checked=false\n",[33,55116,55117],{"class":35,"line":89},[33,55118,55119],{"class":47},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[33,55121,55122],{"class":35,"line":98},[33,55123,160],{"emptyLinePlaceholder":159},[33,55125,55126],{"class":35,"line":110},[33,55127,55128],{"class":47},"禁用按钮：\n",[33,55130,55131],{"class":35,"line":134},[33,55132,55133],{"class":47},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[33,55135,55136,55138,55141,55144,55147,55149],{"class":35,"line":156},[33,55137,875],{"class":47},[33,55139,55140],{"class":52553},"button",[33,55142,55143],{"class":43}," disabled",[33,55145,55146],{"class":47},">点击\u003C\u002F",[33,55148,55140],{"class":52553},[33,55150,52560],{"class":47},[33,55152,55153,55155,55157,55159,55161],{"class":35,"line":163},[33,55154,875],{"class":47},[33,55156,55140],{"class":52553},[33,55158,55146],{"class":47},[33,55160,55140],{"class":52553},[33,55162,52560],{"class":47},[33,55164,55165],{"class":35,"line":169},[33,55166,55167],{"class":47},"const bt = document.querySelector('button')\n",[33,55169,55170],{"class":35,"line":175},[33,55171,55172],{"class":47},"bt.disabled = false\n",[574,55174,55175],{"start":51},[564,55176,55177],{},"自定义属性",[14,55179,55180],{},[2918,55181],{"alt":28,"src":55182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[23,55184,55186],{"className":54320,"code":55185,"language":54322,"meta":28,"style":28},"\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",[30,55187,55188,55196,55224,55243,55262,55281,55300,55308,55313,55318,55323,55328,55336],{"__ignoreMap":28},[33,55189,55190,55192,55194],{"class":35,"line":36},[33,55191,875],{"class":47},[33,55193,53053],{"class":52553},[33,55195,52560],{"class":47},[33,55197,55198,55200,55202,55205,55207,55209,55212,55214,55217,55220,55222],{"class":35,"line":51},[33,55199,53397],{"class":47},[33,55201,52864],{"class":52553},[33,55203,55204],{"class":43}," data-id",[33,55206,73],{"class":47},[33,55208,5080],{"class":119},[33,55210,55211],{"class":43}," data-spm",[33,55213,73],{"class":47},[33,55215,55216],{"class":119},"\"我不知道\"",[33,55218,55219],{"class":47},">1\u003C\u002F",[33,55221,52864],{"class":52553},[33,55223,52560],{"class":47},[33,55225,55226,55228,55230,55232,55234,55236,55239,55241],{"class":35,"line":57},[33,55227,53397],{"class":47},[33,55229,52864],{"class":52553},[33,55231,55204],{"class":43},[33,55233,73],{"class":47},[33,55235,5103],{"class":119},[33,55237,55238],{"class":47},">2\u003C\u002F",[33,55240,52864],{"class":52553},[33,55242,52560],{"class":47},[33,55244,55245,55247,55249,55251,55253,55255,55258,55260],{"class":35,"line":64},[33,55246,53397],{"class":47},[33,55248,52864],{"class":52553},[33,55250,55204],{"class":43},[33,55252,73],{"class":47},[33,55254,5116],{"class":119},[33,55256,55257],{"class":47},">3\u003C\u002F",[33,55259,52864],{"class":52553},[33,55261,52560],{"class":47},[33,55263,55264,55266,55268,55270,55272,55274,55277,55279],{"class":35,"line":83},[33,55265,53397],{"class":47},[33,55267,52864],{"class":52553},[33,55269,55204],{"class":43},[33,55271,73],{"class":47},[33,55273,5129],{"class":119},[33,55275,55276],{"class":47},">4\u003C\u002F",[33,55278,52864],{"class":52553},[33,55280,52560],{"class":47},[33,55282,55283,55285,55287,55289,55291,55293,55296,55298],{"class":35,"line":89},[33,55284,53397],{"class":47},[33,55286,52864],{"class":52553},[33,55288,55204],{"class":43},[33,55290,73],{"class":47},[33,55292,5150],{"class":119},[33,55294,55295],{"class":47},">5\u003C\u002F",[33,55297,52864],{"class":52553},[33,55299,52560],{"class":47},[33,55301,55302,55304,55306],{"class":35,"line":98},[33,55303,53397],{"class":47},[33,55305,53066],{"class":52553},[33,55307,52560],{"class":47},[33,55309,55310],{"class":35,"line":110},[33,55311,55312],{"class":47},"    const one = document.querySelector('div')\n",[33,55314,55315],{"class":35,"line":134},[33,55316,55317],{"class":47},"    console.log(one.dataset)\n",[33,55319,55320],{"class":35,"line":156},[33,55321,55322],{"class":47},"    console.log(one.dataset.id)\n",[33,55324,55325],{"class":35,"line":163},[33,55326,55327],{"class":47},"    console.log(one.dataset.spm)\n",[33,55329,55330,55332,55334],{"class":35,"line":169},[33,55331,53670],{"class":47},[33,55333,53066],{"class":52553},[33,55335,52560],{"class":47},[33,55337,55338,55340,55342],{"class":35,"line":175},[33,55339,53038],{"class":47},[33,55341,53053],{"class":52553},[33,55343,52560],{"class":47},[14,55345,55346],{},[2918,55347],{"alt":28,"src":55348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,55350,55351],{},"document.querySelector选择的是第一个对象（元素）",[1599,55353,55355],{"id":55354},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,55357,55358],{},[2918,55359],{"alt":28,"src":55360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,55362,55363],{},[2918,55364],{"alt":28,"src":55365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,55367,55368],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53066,55370,55371],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,55373,55374],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53066,55376,55377],{},"\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,55379,55380],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,55382,55383],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,55385,55386],{},"单位为毫秒！！！",[14,55388,55389],{},"可以搭配匿名函数来用！！！",[14,55391,55392],{},"setInterval(function () {",[14,55394,55395],{},"alert('两秒执行一次')",[14,55397,55398],{},"}, 2000)",[14,55400,55401],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,55403,55404],{},"function fn() {",[14,55406,55407],{},"document.write(1)",[14,55409,2542],{},[14,55411,55412],{},"setInterval(fn, 1000)",[14,55414,55415],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,55417,55418],{},"setInterval('fn()', 1000)",[14,55420,55421],{},[2918,55422],{"alt":28,"src":55423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23249,55425,55427],{"id":55426},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[23,55429,55431],{"className":51886,"code":55430,"language":51888,"meta":28,"style":28},"\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",[30,55432,55433,55443,55457,55461,55469,55483,55503,55515,55523,55527,55535,55572,55577,55582,55587,55595,55603,55625,55633,55638,55660,55665,55670,55681,55686,55706,55714,55729,55744,55755,55760,55770,55780,55784,55793,55797,55805,55813,55817],{"__ignoreMap":28},[33,55434,55435,55437,55439,55441],{"class":35,"line":36},[33,55436,52550],{"class":47},[33,55438,52554],{"class":52553},[33,55440,52557],{"class":43},[33,55442,52560],{"class":47},[33,55444,55445,55447,55449,55451,55453,55455],{"class":35,"line":51},[33,55446,875],{"class":47},[33,55448,51888],{"class":52553},[33,55450,52569],{"class":43},[33,55452,73],{"class":47},[33,55454,52574],{"class":119},[33,55456,52560],{"class":47},[33,55458,55459],{"class":35,"line":57},[33,55460,160],{"emptyLinePlaceholder":159},[33,55462,55463,55465,55467],{"class":35,"line":64},[33,55464,875],{"class":47},[33,55466,52587],{"class":52553},[33,55468,52560],{"class":47},[33,55470,55471,55473,55475,55477,55479,55481],{"class":35,"line":83},[33,55472,53397],{"class":47},[33,55474,52597],{"class":52553},[33,55476,52600],{"class":43},[33,55478,73],{"class":47},[33,55480,52605],{"class":119},[33,55482,52560],{"class":47},[33,55484,55485,55487,55489,55491,55493,55495,55497,55499,55501],{"class":35,"line":89},[33,55486,53397],{"class":47},[33,55488,52597],{"class":52553},[33,55490,16171],{"class":43},[33,55492,73],{"class":47},[33,55494,52644],{"class":119},[33,55496,52624],{"class":43},[33,55498,73],{"class":47},[33,55500,52651],{"class":119},[33,55502,52560],{"class":47},[33,55504,55505,55507,55509,55511,55513],{"class":35,"line":98},[33,55506,53397],{"class":47},[33,55508,52660],{"class":52553},[33,55510,52663],{"class":47},[33,55512,52660],{"class":52553},[33,55514,52560],{"class":47},[33,55516,55517,55519,55521],{"class":35,"line":110},[33,55518,53038],{"class":47},[33,55520,52587],{"class":52553},[33,55522,52560],{"class":47},[33,55524,55525],{"class":35,"line":134},[33,55526,160],{"emptyLinePlaceholder":159},[33,55528,55529,55531,55533],{"class":35,"line":156},[33,55530,875],{"class":47},[33,55532,53053],{"class":52553},[33,55534,52560],{"class":47},[33,55536,55537,55539,55542,55544,55546,55548,55550,55552,55554,55557,55559,55562,55565,55567,55570],{"class":35,"line":163},[33,55538,53397],{"class":47},[33,55540,55541],{"class":52553},"textarea",[33,55543,16171],{"class":43},[33,55545,73],{"class":47},[33,55547,1520],{"class":119},[33,55549,16210],{"class":43},[33,55551,73],{"class":47},[33,55553,1520],{"class":119},[33,55555,55556],{"class":43}," cols",[33,55558,73],{"class":47},[33,55560,55561],{"class":119},"\"30\"",[33,55563,55564],{"class":43}," rows",[33,55566,73],{"class":47},[33,55568,55569],{"class":119},"\"10\"",[33,55571,52560],{"class":47},[33,55573,55574],{"class":35,"line":169},[33,55575,55576],{"class":47},"        用户注册协议\n",[33,55578,55579],{"class":35,"line":175},[33,55580,55581],{"class":47},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[33,55583,55584],{"class":35,"line":181},[33,55585,55586],{"class":47},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[33,55588,55589,55591,55593],{"class":35,"line":196},[33,55590,53029],{"class":47},[33,55592,55541],{"class":52553},[33,55594,52560],{"class":47},[33,55596,55597,55599,55601],{"class":35,"line":213},[33,55598,53397],{"class":47},[33,55600,54969],{"class":52553},[33,55602,52560],{"class":47},[33,55604,55605,55607,55609,55611,55613,55616,55618,55621,55623],{"class":35,"line":228},[33,55606,53397],{"class":47},[33,55608,55140],{"class":52553},[33,55610,54739],{"class":43},[33,55612,73],{"class":47},[33,55614,55615],{"class":119},"\"btn\"",[33,55617,55143],{"class":43},[33,55619,55620],{"class":47},">我已经阅读用户协议(5)\u003C\u002F",[33,55622,55140],{"class":52553},[33,55624,52560],{"class":47},[33,55626,55627,55629,55631],{"class":35,"line":1345},[33,55628,53397],{"class":47},[33,55630,53066],{"class":52553},[33,55632,52560],{"class":47},[33,55634,55635],{"class":35,"line":1350},[33,55636,55637],{"class":60},"    \u002F\u002F 1. 获取元素\n",[33,55639,55640,55642,55645,55647,55650,55653,55655,55658],{"class":35,"line":1359},[33,55641,12472],{"class":39},[33,55643,55644],{"class":76}," btn",[33,55646,14815],{"class":39},[33,55648,55649],{"class":47}," document.",[33,55651,55652],{"class":43},"querySelector",[33,55654,345],{"class":47},[33,55656,55657],{"class":119},"'.btn'",[33,55659,884],{"class":47},[33,55661,55662],{"class":35,"line":1364},[33,55663,55664],{"class":60},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[33,55666,55667],{"class":35,"line":1370},[33,55668,55669],{"class":60},"    \u002F\u002F 2. 倒计时\n",[33,55671,55672,55674,55676,55678],{"class":35,"line":1425},[33,55673,53472],{"class":39},[33,55675,10689],{"class":47},[33,55677,73],{"class":39},[33,55679,55680],{"class":76}," 5\n",[33,55682,55683],{"class":35,"line":1438},[33,55684,55685],{"class":60},"    \u002F\u002F 2.1 开启定时器\n",[33,55687,55688,55690,55693,55695,55698,55700,55703],{"class":35,"line":1451},[33,55689,53472],{"class":39},[33,55691,55692],{"class":47}," n ",[33,55694,73],{"class":39},[33,55696,55697],{"class":43}," setInterval",[33,55699,345],{"class":47},[33,55701,55702],{"class":39},"function",[33,55704,55705],{"class":47}," () {\n",[33,55707,55708,55711],{"class":35,"line":1457},[33,55709,55710],{"class":47},"      i",[33,55712,55713],{"class":39},"--\n",[33,55715,55716,55719,55721,55724,55726],{"class":35,"line":1466},[33,55717,55718],{"class":47},"      btn.innerHTML ",[33,55720,73],{"class":39},[33,55722,55723],{"class":119}," `我已经阅读用户协议(${",[33,55725,1239],{"class":47},[33,55727,55728],{"class":119},"})`\n",[33,55730,55731,55734,55737,55740,55742],{"class":35,"line":1471},[33,55732,55733],{"class":39},"      if",[33,55735,55736],{"class":47}," (i ",[33,55738,55739],{"class":39},"===",[33,55741,5492],{"class":76},[33,55743,13693],{"class":47},[33,55745,55746,55749,55752],{"class":35,"line":1477},[33,55747,55748],{"class":43},"        clearInterval",[33,55750,55751],{"class":47},"(n)  ",[33,55753,55754],{"class":60},"\u002F\u002F 关闭定时器\n",[33,55756,55757],{"class":35,"line":1504},[33,55758,55759],{"class":60},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[33,55761,55762,55765,55767],{"class":35,"line":1509},[33,55763,55764],{"class":47},"        btn.disabled ",[33,55766,73],{"class":39},[33,55768,55769],{"class":76}," false\n",[33,55771,55772,55775,55777],{"class":35,"line":1525},[33,55773,55774],{"class":47},"        btn.innerHTML ",[33,55776,73],{"class":39},[33,55778,55779],{"class":119}," '同意'\n",[33,55781,55782],{"class":35,"line":1535},[33,55783,53651],{"class":47},[33,55785,55786,55789,55791],{"class":35,"line":1540},[33,55787,55788],{"class":47},"    }, ",[33,55790,191],{"class":76},[33,55792,884],{"class":47},[33,55794,55795],{"class":35,"line":4027},[33,55796,160],{"emptyLinePlaceholder":159},[33,55798,55799,55801,55803],{"class":35,"line":4032},[33,55800,53670],{"class":47},[33,55802,53066],{"class":52553},[33,55804,52560],{"class":47},[33,55806,55807,55809,55811],{"class":35,"line":9199},[33,55808,53038],{"class":47},[33,55810,53053],{"class":52553},[33,55812,52560],{"class":47},[33,55814,55815],{"class":35,"line":9223},[33,55816,160],{"emptyLinePlaceholder":159},[33,55818,55819,55821,55823],{"class":35,"line":9228},[33,55820,53038],{"class":47},[33,55822,51888],{"class":52553},[33,55824,52560],{"class":47},[14,55826,55827],{},"不要一直想着用死循环,避免死循环",[14,55829,55830,55833],{},[30,55831,55832],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23249,55835,55837],{"id":55836},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[574,55839,55840],{},[564,55841,55842],{},"法1",[23,55844,55846],{"className":51886,"code":55845,"language":51888,"meta":28,"style":28},"\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",[30,55847,55848,55858,55872,55876,55884,55898,55918,55930,55938,55944,55955,55966,55970,55974,55981,55993,55997,56001,56008,56020,56034,56047,56061,56065,56069,56076,56087,56098,56109,56121,56133,56145,56149,56153,56161,56171,56184,56196,56209,56213,56217,56224,56234,56246,56258,56269,56280,56290,56302,56314,56318,56322,56331,56343,56355,56383,56396,56400,56404,56411,56422,56426,56434,56442,56446,56454,56468,56483,56507,56515,56530,56543,56551,56572,56584,56596,56608,56620,56632,56644,56656,56665,56673,56681,56689,56701,56724,56743,56762,56781,56800,56819,56838,56858,56862,56882,56901,56921,56942,56953,56970,56980,56990,57000,57005,57010,57015,57020,57045,57058,57062,57085,57089,57097,57105,57113,57117],{"__ignoreMap":28},[33,55849,55850,55852,55854,55856],{"class":35,"line":36},[33,55851,52550],{"class":47},[33,55853,52554],{"class":52553},[33,55855,52557],{"class":43},[33,55857,52560],{"class":47},[33,55859,55860,55862,55864,55866,55868,55870],{"class":35,"line":51},[33,55861,875],{"class":47},[33,55863,51888],{"class":52553},[33,55865,52569],{"class":43},[33,55867,73],{"class":47},[33,55869,52574],{"class":119},[33,55871,52560],{"class":47},[33,55873,55874],{"class":35,"line":57},[33,55875,160],{"emptyLinePlaceholder":159},[33,55877,55878,55880,55882],{"class":35,"line":64},[33,55879,875],{"class":47},[33,55881,52587],{"class":52553},[33,55883,52560],{"class":47},[33,55885,55886,55888,55890,55892,55894,55896],{"class":35,"line":83},[33,55887,53397],{"class":47},[33,55889,52597],{"class":52553},[33,55891,52600],{"class":43},[33,55893,73],{"class":47},[33,55895,52605],{"class":119},[33,55897,52560],{"class":47},[33,55899,55900,55902,55904,55906,55908,55910,55912,55914,55916],{"class":35,"line":89},[33,55901,53397],{"class":47},[33,55903,52597],{"class":52553},[33,55905,16171],{"class":43},[33,55907,73],{"class":47},[33,55909,52644],{"class":119},[33,55911,52624],{"class":43},[33,55913,73],{"class":47},[33,55915,52651],{"class":119},[33,55917,52560],{"class":47},[33,55919,55920,55922,55924,55926,55928],{"class":35,"line":98},[33,55921,53397],{"class":47},[33,55923,52660],{"class":52553},[33,55925,52663],{"class":47},[33,55927,52660],{"class":52553},[33,55929,52560],{"class":47},[33,55931,55932,55934,55936],{"class":35,"line":110},[33,55933,53397],{"class":47},[33,55935,1544],{"class":52553},[33,55937,52560],{"class":47},[33,55939,55940,55942],{"class":35,"line":134},[33,55941,184],{"class":52553},[33,55943,16823],{"class":47},[33,55945,55946,55949,55951,55953],{"class":35,"line":156},[33,55947,55948],{"class":76},"      padding",[33,55950,52690],{"class":47},[33,55952,766],{"class":76},[33,55954,80],{"class":47},[33,55956,55957,55960,55962,55964],{"class":35,"line":163},[33,55958,55959],{"class":76},"      margin",[33,55961,52690],{"class":47},[33,55963,766],{"class":76},[33,55965,80],{"class":47},[33,55967,55968],{"class":35,"line":169},[33,55969,916],{"class":47},[33,55971,55972],{"class":35,"line":175},[33,55973,160],{"emptyLinePlaceholder":159},[33,55975,55976,55979],{"class":35,"line":181},[33,55977,55978],{"class":52553},"    li",[33,55980,16823],{"class":47},[33,55982,55983,55986,55988,55991],{"class":35,"line":196},[33,55984,55985],{"class":76},"      list-style",[33,55987,52690],{"class":47},[33,55989,55990],{"class":76},"none",[33,55992,80],{"class":47},[33,55994,55995],{"class":35,"line":213},[33,55996,916],{"class":47},[33,55998,55999],{"class":35,"line":228},[33,56000,160],{"emptyLinePlaceholder":159},[33,56002,56003,56006],{"class":35,"line":1345},[33,56004,56005],{"class":43},"    .box",[33,56007,16823],{"class":47},[33,56009,56010,56013,56015,56018],{"class":35,"line":1350},[33,56011,56012],{"class":76},"      position",[33,56014,52690],{"class":47},[33,56016,56017],{"class":76},"relative",[33,56019,80],{"class":47},[33,56021,56022,56025,56027,56030,56032],{"class":35,"line":1359},[33,56023,56024],{"class":76},"      width",[33,56026,52690],{"class":47},[33,56028,56029],{"class":76},"976",[33,56031,52745],{"class":39},[33,56033,80],{"class":47},[33,56035,56036,56039,56041,56043,56045],{"class":35,"line":1364},[33,56037,56038],{"class":76},"      height",[33,56040,52690],{"class":47},[33,56042,2995],{"class":76},[33,56044,52745],{"class":39},[33,56046,80],{"class":47},[33,56048,56049,56051,56053,56055,56057,56059],{"class":35,"line":1370},[33,56050,55959],{"class":76},[33,56052,52690],{"class":47},[33,56054,457],{"class":76},[33,56056,52745],{"class":39},[33,56058,52809],{"class":76},[33,56060,80],{"class":47},[33,56062,56063],{"class":35,"line":1425},[33,56064,916],{"class":47},[33,56066,56067],{"class":35,"line":1438},[33,56068,160],{"emptyLinePlaceholder":159},[33,56070,56071,56074],{"class":35,"line":1451},[33,56072,56073],{"class":43},"    .slider-footer",[33,56075,16823],{"class":47},[33,56077,56078,56080,56082,56085],{"class":35,"line":1457},[33,56079,56012],{"class":76},[33,56081,52690],{"class":47},[33,56083,56084],{"class":76},"absolute",[33,56086,80],{"class":47},[33,56088,56089,56092,56094,56096],{"class":35,"line":1466},[33,56090,56091],{"class":76},"      left",[33,56093,52690],{"class":47},[33,56095,766],{"class":76},[33,56097,80],{"class":47},[33,56099,56100,56103,56105,56107],{"class":35,"line":1471},[33,56101,56102],{"class":76},"      bottom",[33,56104,52690],{"class":47},[33,56106,766],{"class":76},[33,56108,80],{"class":47},[33,56110,56111,56113,56115,56117,56119],{"class":35,"line":1477},[33,56112,56024],{"class":76},[33,56114,52690],{"class":47},[33,56116,457],{"class":76},[33,56118,1939],{"class":39},[33,56120,80],{"class":47},[33,56122,56123,56125,56127,56129,56131],{"class":35,"line":1504},[33,56124,56038],{"class":76},[33,56126,52690],{"class":47},[33,56128,2175],{"class":76},[33,56130,1939],{"class":39},[33,56132,80],{"class":47},[33,56134,56135,56138,56140,56143],{"class":35,"line":1509},[33,56136,56137],{"class":76},"      background-color",[33,56139,52690],{"class":47},[33,56141,56142],{"class":76},"skyblue",[33,56144,80],{"class":47},[33,56146,56147],{"class":35,"line":1525},[33,56148,916],{"class":47},[33,56150,56151],{"class":35,"line":1535},[33,56152,160],{"emptyLinePlaceholder":159},[33,56154,56155,56157,56159],{"class":35,"line":1540},[33,56156,56073],{"class":43},[33,56158,622],{"class":52553},[33,56160,16823],{"class":47},[33,56162,56163,56165,56167,56169],{"class":35,"line":4027},[33,56164,56012],{"class":76},[33,56166,52690],{"class":47},[33,56168,56084],{"class":76},[33,56170,80],{"class":47},[33,56172,56173,56176,56178,56180,56182],{"class":35,"line":4032},[33,56174,56175],{"class":76},"      font-size",[33,56177,52690],{"class":47},[33,56179,2499],{"class":76},[33,56181,52745],{"class":39},[33,56183,80],{"class":47},[33,56185,56186,56188,56190,56192,56194],{"class":35,"line":9199},[33,56187,56091],{"class":76},[33,56189,52690],{"class":47},[33,56191,1045],{"class":76},[33,56193,52745],{"class":39},[33,56195,80],{"class":47},[33,56197,56198,56201,56203,56205,56207],{"class":35,"line":9223},[33,56199,56200],{"class":76},"      top",[33,56202,52690],{"class":47},[33,56204,722],{"class":76},[33,56206,52745],{"class":39},[33,56208,80],{"class":47},[33,56210,56211],{"class":35,"line":9228},[33,56212,916],{"class":47},[33,56214,56215],{"class":35,"line":9234},[33,56216,160],{"emptyLinePlaceholder":159},[33,56218,56219,56222],{"class":35,"line":9261},[33,56220,56221],{"class":52553},"    ul",[33,56223,16823],{"class":47},[33,56225,56226,56228,56230,56232],{"class":35,"line":9266},[33,56227,56012],{"class":76},[33,56229,52690],{"class":47},[33,56231,56084],{"class":76},[33,56233,80],{"class":47},[33,56235,56236,56238,56240,56242,56244],{"class":35,"line":9272},[33,56237,56200],{"class":76},[33,56239,52690],{"class":47},[33,56241,2380],{"class":76},[33,56243,52745],{"class":39},[33,56245,80],{"class":47},[33,56247,56248,56250,56252,56254,56256],{"class":35,"line":9284},[33,56249,56091],{"class":76},[33,56251,52690],{"class":47},[33,56253,1045],{"class":76},[33,56255,52745],{"class":39},[33,56257,80],{"class":47},[33,56259,56260,56263,56265,56267],{"class":35,"line":9296},[33,56261,56262],{"class":76},"      display",[33,56264,52690],{"class":47},[33,56266,52730],{"class":76},[33,56268,80],{"class":47},[33,56270,56271,56274,56276,56278],{"class":35,"line":9308},[33,56272,56273],{"class":76},"      justify-content",[33,56275,52690],{"class":47},[33,56277,52921],{"class":76},[33,56279,80],{"class":47},[33,56281,56282,56284,56286,56288],{"class":35,"line":10967},[33,56283,56012],{"class":76},[33,56285,52690],{"class":47},[33,56287,56084],{"class":76},[33,56289,80],{"class":47},[33,56291,56292,56294,56296,56298,56300],{"class":35,"line":10992},[33,56293,56024],{"class":76},[33,56295,52690],{"class":47},[33,56297,5392],{"class":76},[33,56299,52745],{"class":39},[33,56301,80],{"class":47},[33,56303,56304,56306,56308,56310,56312],{"class":35,"line":11015},[33,56305,56038],{"class":76},[33,56307,52690],{"class":47},[33,56309,1045],{"class":76},[33,56311,52745],{"class":39},[33,56313,80],{"class":47},[33,56315,56316],{"class":35,"line":11039},[33,56317,916],{"class":47},[33,56319,56320],{"class":35,"line":11044},[33,56321,160],{"emptyLinePlaceholder":159},[33,56323,56324,56326,56329],{"class":35,"line":11049},[33,56325,56221],{"class":52553},[33,56327,56328],{"class":52553}," li",[33,56330,16823],{"class":47},[33,56332,56333,56335,56337,56339,56341],{"class":35,"line":11054},[33,56334,56024],{"class":76},[33,56336,52690],{"class":47},[33,56338,1045],{"class":76},[33,56340,52745],{"class":39},[33,56342,80],{"class":47},[33,56344,56345,56347,56349,56351,56353],{"class":35,"line":11063},[33,56346,56038],{"class":76},[33,56348,52690],{"class":47},[33,56350,1045],{"class":76},[33,56352,52745],{"class":39},[33,56354,80],{"class":47},[33,56356,56357,56359,56361,56364,56366,56368,56370,56372,56374,56376,56378,56381],{"class":35,"line":11068},[33,56358,56137],{"class":76},[33,56360,52690],{"class":47},[33,56362,56363],{"class":76},"rgba",[33,56365,345],{"class":47},[33,56367,766],{"class":76},[33,56369,13686],{"class":47},[33,56371,766],{"class":76},[33,56373,13686],{"class":47},[33,56375,766],{"class":76},[33,56377,13686],{"class":47},[33,56379,56380],{"class":76},".4",[33,56382,4130],{"class":47},[33,56384,56385,56388,56390,56392,56394],{"class":35,"line":11074},[33,56386,56387],{"class":76},"      border-radius",[33,56389,52690],{"class":47},[33,56391,77],{"class":76},[33,56393,52745],{"class":39},[33,56395,80],{"class":47},[33,56397,56398],{"class":35,"line":11095},[33,56399,916],{"class":47},[33,56401,56402],{"class":35,"line":11101},[33,56403,160],{"emptyLinePlaceholder":159},[33,56405,56406,56409],{"class":35,"line":11115},[33,56407,56408],{"class":43},"    .activate",[33,56410,16823],{"class":47},[33,56412,56413,56415,56417,56420],{"class":35,"line":11121},[33,56414,56137],{"class":76},[33,56416,52690],{"class":47},[33,56418,56419],{"class":76},"#f7f7f7",[33,56421,80],{"class":47},[33,56423,56424],{"class":35,"line":11148},[33,56425,916],{"class":47},[33,56427,56428,56430,56432],{"class":35,"line":11157},[33,56429,53670],{"class":47},[33,56431,1544],{"class":52553},[33,56433,52560],{"class":47},[33,56435,56436,56438,56440],{"class":35,"line":11163},[33,56437,53038],{"class":47},[33,56439,52587],{"class":52553},[33,56441,52560],{"class":47},[33,56443,56444],{"class":35,"line":11171},[33,56445,160],{"emptyLinePlaceholder":159},[33,56447,56448,56450,56452],{"class":35,"line":11176},[33,56449,875],{"class":47},[33,56451,53053],{"class":52553},[33,56453,52560],{"class":47},[33,56455,56456,56458,56460,56462,56464,56466],{"class":35,"line":17855},[33,56457,53397],{"class":47},[33,56459,52864],{"class":52553},[33,56461,54739],{"class":43},[33,56463,73],{"class":47},[33,56465,54744],{"class":119},[33,56467,52560],{"class":47},[33,56469,56470,56472,56474,56476,56478,56481],{"class":35,"line":17861},[33,56471,52594],{"class":47},[33,56473,52864],{"class":52553},[33,56475,54739],{"class":43},[33,56477,73],{"class":47},[33,56479,56480],{"class":119},"\"slider-wrapper\"",[33,56482,52560],{"class":47},[33,56484,56485,56488,56490,56493,56495,56498,56501,56503,56505],{"class":35,"line":17884},[33,56486,56487],{"class":47},"      \u003C",[33,56489,2918],{"class":52553},[33,56491,56492],{"class":43}," src",[33,56494,73],{"class":47},[33,56496,56497],{"class":119},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,56499,56500],{"class":43}," alt",[33,56502,73],{"class":47},[33,56504,1520],{"class":119},[33,56506,52560],{"class":47},[33,56508,56509,56511,56513],{"class":35,"line":17890},[33,56510,53029],{"class":47},[33,56512,52864],{"class":52553},[33,56514,52560],{"class":47},[33,56516,56517,56519,56521,56523,56525,56528],{"class":35,"line":17913},[33,56518,52594],{"class":47},[33,56520,52864],{"class":52553},[33,56522,54739],{"class":43},[33,56524,73],{"class":47},[33,56526,56527],{"class":119},"\"slider-footer\"",[33,56529,52560],{"class":47},[33,56531,56532,56534,56536,56539,56541],{"class":35,"line":17927},[33,56533,56487],{"class":47},[33,56535,14],{"class":52553},[33,56537,56538],{"class":47},">对人类来说会不会太超前了?\u003C\u002F",[33,56540,14],{"class":52553},[33,56542,52560],{"class":47},[33,56544,56545,56547,56549],{"class":35,"line":17947},[33,56546,56487],{"class":47},[33,56548,561],{"class":52553},[33,56550,52560],{"class":47},[33,56552,56553,56556,56558,56560,56562,56565,56568,56570],{"class":35,"line":17953},[33,56554,56555],{"class":47},"        \u003C",[33,56557,564],{"class":52553},[33,56559,54739],{"class":43},[33,56561,73],{"class":47},[33,56563,56564],{"class":119},"\"activate\"",[33,56566,56567],{"class":47},">\u003C\u002F",[33,56569,564],{"class":52553},[33,56571,52560],{"class":47},[33,56573,56574,56576,56578,56580,56582],{"class":35,"line":17964},[33,56575,56555],{"class":47},[33,56577,564],{"class":52553},[33,56579,56567],{"class":47},[33,56581,564],{"class":52553},[33,56583,52560],{"class":47},[33,56585,56586,56588,56590,56592,56594],{"class":35,"line":17987},[33,56587,56555],{"class":47},[33,56589,564],{"class":52553},[33,56591,56567],{"class":47},[33,56593,564],{"class":52553},[33,56595,52560],{"class":47},[33,56597,56598,56600,56602,56604,56606],{"class":35,"line":18009},[33,56599,56555],{"class":47},[33,56601,564],{"class":52553},[33,56603,56567],{"class":47},[33,56605,564],{"class":52553},[33,56607,52560],{"class":47},[33,56609,56610,56612,56614,56616,56618],{"class":35,"line":18014},[33,56611,56555],{"class":47},[33,56613,564],{"class":52553},[33,56615,56567],{"class":47},[33,56617,564],{"class":52553},[33,56619,52560],{"class":47},[33,56621,56622,56624,56626,56628,56630],{"class":35,"line":18020},[33,56623,56555],{"class":47},[33,56625,564],{"class":52553},[33,56627,56567],{"class":47},[33,56629,564],{"class":52553},[33,56631,52560],{"class":47},[33,56633,56634,56636,56638,56640,56642],{"class":35,"line":18034},[33,56635,56555],{"class":47},[33,56637,564],{"class":52553},[33,56639,56567],{"class":47},[33,56641,564],{"class":52553},[33,56643,52560],{"class":47},[33,56645,56646,56648,56650,56652,56654],{"class":35,"line":18047},[33,56647,56555],{"class":47},[33,56649,564],{"class":52553},[33,56651,56567],{"class":47},[33,56653,564],{"class":52553},[33,56655,52560],{"class":47},[33,56657,56658,56661,56663],{"class":35,"line":18052},[33,56659,56660],{"class":47},"      \u003C\u002F",[33,56662,561],{"class":52553},[33,56664,52560],{"class":47},[33,56666,56667,56669,56671],{"class":35,"line":18066},[33,56668,53029],{"class":47},[33,56670,52864],{"class":52553},[33,56672,52560],{"class":47},[33,56674,56675,56677,56679],{"class":35,"line":18071},[33,56676,53670],{"class":47},[33,56678,52864],{"class":52553},[33,56680,52560],{"class":47},[33,56682,56683,56685,56687],{"class":35,"line":18077},[33,56684,53397],{"class":47},[33,56686,53066],{"class":52553},[33,56688,52560],{"class":47},[33,56690,56691,56693,56696,56698],{"class":35,"line":18082},[33,56692,12472],{"class":39},[33,56694,56695],{"class":76}," arrImage",[33,56697,14815],{"class":39},[33,56699,56700],{"class":47}," [\n",[33,56702,56703,56706,56709,56712,56715,56718,56721],{"class":35,"line":18096},[33,56704,56705],{"class":47},"      { url: ",[33,56707,56708],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[33,56710,56711],{"class":47},", title: ",[33,56713,56714],{"class":119},"'对人类来说会不会太超前了?'",[33,56716,56717],{"class":47},", color: ",[33,56719,56720],{"class":119},"'rgba(100,67,68)'",[33,56722,56723],{"class":47}," },\n",[33,56725,56726,56728,56731,56733,56736,56738,56741],{"class":35,"line":18101},[33,56727,56705],{"class":47},[33,56729,56730],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[33,56732,56711],{"class":47},[33,56734,56735],{"class":119},"'开启剑与雪的黑暗传说!'",[33,56737,56717],{"class":47},[33,56739,56740],{"class":119},"'rgba(43,35,26)'",[33,56742,56723],{"class":47},[33,56744,56745,56747,56750,56752,56755,56757,56760],{"class":35,"line":18106},[33,56746,56705],{"class":47},[33,56748,56749],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[33,56751,56711],{"class":47},[33,56753,56754],{"class":119},"'真正的jo厨出现了!'",[33,56756,56717],{"class":47},[33,56758,56759],{"class":119},"'rgba(36,31,33)'",[33,56761,56723],{"class":47},[33,56763,56764,56766,56769,56771,56774,56776,56779],{"class":35,"line":18120},[33,56765,56705],{"class":47},[33,56767,56768],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[33,56770,56711],{"class":47},[33,56772,56773],{"class":119},"'李玉刚:让世界通过b站看到东方大国文化'",[33,56775,56717],{"class":47},[33,56777,56778],{"class":119},"'rgba(139,98,66)'",[33,56780,56723],{"class":47},[33,56782,56783,56785,56788,56790,56793,56795,56798],{"class":35,"line":18132},[33,56784,56705],{"class":47},[33,56786,56787],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[33,56789,56711],{"class":47},[33,56791,56792],{"class":119},"'快来分享你的寒假日常吧'",[33,56794,56717],{"class":47},[33,56796,56797],{"class":119},"'rgba(67,90,92)'",[33,56799,56723],{"class":47},[33,56801,56802,56804,56807,56809,56812,56814,56817],{"class":35,"line":18137},[33,56803,56705],{"class":47},[33,56805,56806],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[33,56808,56711],{"class":47},[33,56810,56811],{"class":119},"'哔哩哔哩小年YEAR'",[33,56813,56717],{"class":47},[33,56815,56816],{"class":119},"'rgba(166,131,143)'",[33,56818,56723],{"class":47},[33,56820,56821,56823,56826,56828,56831,56833,56836],{"class":35,"line":18150},[33,56822,56705],{"class":47},[33,56824,56825],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[33,56827,56711],{"class":47},[33,56829,56830],{"class":119},"'一站式解决你的电脑配置问题'",[33,56832,56717],{"class":47},[33,56834,56835],{"class":119},"'rgba(53,29,25)'",[33,56837,56723],{"class":47},[33,56839,56840,56842,56845,56847,56850,56852,56855],{"class":35,"line":18155},[33,56841,56705],{"class":47},[33,56843,56844],{"class":119},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[33,56846,56711],{"class":47},[33,56848,56849],{"class":119},"'谁不想和小猫咪贴贴呢?'",[33,56851,56717],{"class":47},[33,56853,56854],{"class":119},"'rgba(99,72,114)'",[33,56856,56857],{"class":47}," }\n",[33,56859,56860],{"class":35,"line":18160},[33,56861,54362],{"class":47},[33,56863,56864,56866,56869,56871,56873,56875,56877,56880],{"class":35,"line":18165},[33,56865,12472],{"class":39},[33,56867,56868],{"class":76}," img",[33,56870,14815],{"class":39},[33,56872,55649],{"class":47},[33,56874,55652],{"class":43},[33,56876,345],{"class":47},[33,56878,56879],{"class":119},"'.slider-wrapper img'",[33,56881,884],{"class":47},[33,56883,56884,56886,56888,56890,56892,56894,56896,56899],{"class":35,"line":18178},[33,56885,12472],{"class":39},[33,56887,622],{"class":76},[33,56889,14815],{"class":39},[33,56891,55649],{"class":47},[33,56893,55652],{"class":43},[33,56895,345],{"class":47},[33,56897,56898],{"class":119},"'.slider-footer p'",[33,56900,884],{"class":47},[33,56902,56903,56905,56908,56910,56912,56914,56916,56919],{"class":35,"line":18183},[33,56904,12472],{"class":39},[33,56906,56907],{"class":76}," color",[33,56909,14815],{"class":39},[33,56911,55649],{"class":47},[33,56913,55652],{"class":43},[33,56915,345],{"class":47},[33,56917,56918],{"class":119},"'.slider-footer'",[33,56920,884],{"class":47},[33,56922,56923,56925,56928,56930,56932,56935,56937,56940],{"class":35,"line":33886},[33,56924,12472],{"class":39},[33,56926,56927],{"class":76}," lis",[33,56929,14815],{"class":39},[33,56931,55649],{"class":47},[33,56933,56934],{"class":43},"querySelectorAll",[33,56936,345],{"class":47},[33,56938,56939],{"class":119},"'.slider-footer ul li'",[33,56941,884],{"class":47},[33,56943,56944,56946,56948,56950],{"class":35,"line":33892},[33,56945,53472],{"class":39},[33,56947,10689],{"class":47},[33,56949,73],{"class":39},[33,56951,56952],{"class":76}," 1\n",[33,56954,56955,56957,56960,56962,56964,56966,56968],{"class":35,"line":33898},[33,56956,53472],{"class":39},[33,56958,56959],{"class":47}," timer ",[33,56961,73],{"class":39},[33,56963,55697],{"class":43},[33,56965,345],{"class":47},[33,56967,55702],{"class":39},[33,56969,55705],{"class":47},[33,56971,56972,56975,56977],{"class":35,"line":33904},[33,56973,56974],{"class":47},"      img.src ",[33,56976,73],{"class":39},[33,56978,56979],{"class":47}," arrImage[i].url\n",[33,56981,56982,56985,56987],{"class":35,"line":33910},[33,56983,56984],{"class":47},"      p.innerHTML ",[33,56986,73],{"class":39},[33,56988,56989],{"class":47}," arrImage[i].title\n",[33,56991,56992,56995,56997],{"class":35,"line":33921},[33,56993,56994],{"class":47},"      color.style.backgroundColor ",[33,56996,73],{"class":39},[33,56998,56999],{"class":47}," arrImage[i].color\n",[33,57001,57002],{"class":35,"line":33927},[33,57003,57004],{"class":60},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[33,57006,57007],{"class":35,"line":33947},[33,57008,57009],{"class":60},"      \u002F\u002F li.classList.add('activate')\n",[33,57011,57012],{"class":35,"line":33953},[33,57013,57014],{"class":60},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[33,57016,57017],{"class":35,"line":33964},[33,57018,57019],{"class":60},"      \u002F\u002F lis[i].classList.remove('activate')\n",[33,57021,57022,57025,57027,57029,57032,57035,57038,57040,57043],{"class":35,"line":33970},[33,57023,57024],{"class":47},"      document.",[33,57026,55652],{"class":43},[33,57028,345],{"class":47},[33,57030,57031],{"class":119},"'.activate'",[33,57033,57034],{"class":47},")?.classList.",[33,57036,57037],{"class":43},"toggle",[33,57039,345],{"class":47},[33,57041,57042],{"class":119},"'activate'",[33,57044,884],{"class":47},[33,57046,57047,57050,57052,57054,57056],{"class":35,"line":33976},[33,57048,57049],{"class":47},"      lis[i].classList.",[33,57051,6724],{"class":43},[33,57053,345],{"class":47},[33,57055,57042],{"class":119},[33,57057,884],{"class":47},[33,57059,57060],{"class":35,"line":33982},[33,57061,160],{"emptyLinePlaceholder":159},[33,57063,57064,57067,57069,57071,57073,57075,57077,57079,57082],{"class":35,"line":33988},[33,57065,57066],{"class":47},"      i ",[33,57068,73],{"class":39},[33,57070,55736],{"class":47},[33,57072,1271],{"class":39},[33,57074,26371],{"class":76},[33,57076,14965],{"class":47},[33,57078,1939],{"class":39},[33,57080,57081],{"class":47}," arrImage.",[33,57083,57084],{"class":76},"length\n",[33,57086,57087],{"class":35,"line":33994},[33,57088,160],{"emptyLinePlaceholder":159},[33,57090,57091,57093,57095],{"class":35,"line":34000},[33,57092,55788],{"class":47},[33,57094,191],{"class":76},[33,57096,884],{"class":47},[33,57098,57099,57101,57103],{"class":35,"line":34006},[33,57100,53670],{"class":47},[33,57102,53066],{"class":52553},[33,57104,52560],{"class":47},[33,57106,57107,57109,57111],{"class":35,"line":34026},[33,57108,53038],{"class":47},[33,57110,53053],{"class":52553},[33,57112,52560],{"class":47},[33,57114,57115],{"class":35,"line":34032},[33,57116,160],{"emptyLinePlaceholder":159},[33,57118,57119,57121,57123],{"class":35,"line":34048},[33,57120,53038],{"class":47},[33,57122,51888],{"class":52553},[33,57124,52560],{"class":47},[14,57126,57127],{},[2918,57128],{"alt":28,"src":57129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,57131,57132],{},"?.就是短路保护,确保输出正常进行",[14,57134,57135],{},"不要忘记取余%,有时候可以用",[14,57137,57138],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[574,57140,57141],{"start":51},[564,57142,57143],{},"法2",[23,57145,57147],{"className":51886,"code":57146,"language":51888,"meta":28,"style":28},"\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",[30,57148,57149,57159,57173,57177,57185,57199,57219,57231,57239,57245,57255,57265,57269,57273,57279,57289,57293,57297,57303,57313,57325,57337,57351,57355,57359,57365,57375,57385,57395,57407,57419,57429,57433,57437,57445,57455,57467,57479,57491,57495,57499,57505,57515,57527,57539,57549,57559,57569,57581,57593,57597,57601,57609,57621,57633,57659,57671,57675,57679,57685,57695,57699,57707,57715,57719,57727,57741,57755,57775,57783,57797,57809,57817,57835,57847,57859,57871,57883,57895,57907,57919,57927,57935,57943,57951,57962,57978,57994,58010,58026,58042,58058,58074,58090,58094,58099,58117,58135,58145,58150,58155,58166,58172,58187,58196,58200,58205,58214,58219,58228,58233,58238,58243,58266,58296,58300,58308,58312,58320,58328,58332],{"__ignoreMap":28},[33,57150,57151,57153,57155,57157],{"class":35,"line":36},[33,57152,52550],{"class":47},[33,57154,52554],{"class":52553},[33,57156,52557],{"class":43},[33,57158,52560],{"class":47},[33,57160,57161,57163,57165,57167,57169,57171],{"class":35,"line":51},[33,57162,875],{"class":47},[33,57164,51888],{"class":52553},[33,57166,52569],{"class":43},[33,57168,73],{"class":47},[33,57170,52574],{"class":119},[33,57172,52560],{"class":47},[33,57174,57175],{"class":35,"line":57},[33,57176,160],{"emptyLinePlaceholder":159},[33,57178,57179,57181,57183],{"class":35,"line":64},[33,57180,875],{"class":47},[33,57182,52587],{"class":52553},[33,57184,52560],{"class":47},[33,57186,57187,57189,57191,57193,57195,57197],{"class":35,"line":83},[33,57188,53397],{"class":47},[33,57190,52597],{"class":52553},[33,57192,52600],{"class":43},[33,57194,73],{"class":47},[33,57196,52605],{"class":119},[33,57198,52560],{"class":47},[33,57200,57201,57203,57205,57207,57209,57211,57213,57215,57217],{"class":35,"line":89},[33,57202,53397],{"class":47},[33,57204,52597],{"class":52553},[33,57206,16171],{"class":43},[33,57208,73],{"class":47},[33,57210,52644],{"class":119},[33,57212,52624],{"class":43},[33,57214,73],{"class":47},[33,57216,52651],{"class":119},[33,57218,52560],{"class":47},[33,57220,57221,57223,57225,57227,57229],{"class":35,"line":98},[33,57222,53397],{"class":47},[33,57224,52660],{"class":52553},[33,57226,52663],{"class":47},[33,57228,52660],{"class":52553},[33,57230,52560],{"class":47},[33,57232,57233,57235,57237],{"class":35,"line":110},[33,57234,53397],{"class":47},[33,57236,1544],{"class":52553},[33,57238,52560],{"class":47},[33,57240,57241,57243],{"class":35,"line":134},[33,57242,184],{"class":52553},[33,57244,16823],{"class":47},[33,57246,57247,57249,57251,57253],{"class":35,"line":156},[33,57248,55948],{"class":76},[33,57250,52690],{"class":47},[33,57252,766],{"class":76},[33,57254,80],{"class":47},[33,57256,57257,57259,57261,57263],{"class":35,"line":163},[33,57258,55959],{"class":76},[33,57260,52690],{"class":47},[33,57262,766],{"class":76},[33,57264,80],{"class":47},[33,57266,57267],{"class":35,"line":169},[33,57268,916],{"class":47},[33,57270,57271],{"class":35,"line":175},[33,57272,160],{"emptyLinePlaceholder":159},[33,57274,57275,57277],{"class":35,"line":181},[33,57276,55978],{"class":52553},[33,57278,16823],{"class":47},[33,57280,57281,57283,57285,57287],{"class":35,"line":196},[33,57282,55985],{"class":76},[33,57284,52690],{"class":47},[33,57286,55990],{"class":76},[33,57288,80],{"class":47},[33,57290,57291],{"class":35,"line":213},[33,57292,916],{"class":47},[33,57294,57295],{"class":35,"line":228},[33,57296,160],{"emptyLinePlaceholder":159},[33,57298,57299,57301],{"class":35,"line":1345},[33,57300,56005],{"class":43},[33,57302,16823],{"class":47},[33,57304,57305,57307,57309,57311],{"class":35,"line":1350},[33,57306,56012],{"class":76},[33,57308,52690],{"class":47},[33,57310,56017],{"class":76},[33,57312,80],{"class":47},[33,57314,57315,57317,57319,57321,57323],{"class":35,"line":1359},[33,57316,56024],{"class":76},[33,57318,52690],{"class":47},[33,57320,56029],{"class":76},[33,57322,52745],{"class":39},[33,57324,80],{"class":47},[33,57326,57327,57329,57331,57333,57335],{"class":35,"line":1364},[33,57328,56038],{"class":76},[33,57330,52690],{"class":47},[33,57332,2995],{"class":76},[33,57334,52745],{"class":39},[33,57336,80],{"class":47},[33,57338,57339,57341,57343,57345,57347,57349],{"class":35,"line":1370},[33,57340,55959],{"class":76},[33,57342,52690],{"class":47},[33,57344,457],{"class":76},[33,57346,52745],{"class":39},[33,57348,52809],{"class":76},[33,57350,80],{"class":47},[33,57352,57353],{"class":35,"line":1425},[33,57354,916],{"class":47},[33,57356,57357],{"class":35,"line":1438},[33,57358,160],{"emptyLinePlaceholder":159},[33,57360,57361,57363],{"class":35,"line":1451},[33,57362,56073],{"class":43},[33,57364,16823],{"class":47},[33,57366,57367,57369,57371,57373],{"class":35,"line":1457},[33,57368,56012],{"class":76},[33,57370,52690],{"class":47},[33,57372,56084],{"class":76},[33,57374,80],{"class":47},[33,57376,57377,57379,57381,57383],{"class":35,"line":1466},[33,57378,56091],{"class":76},[33,57380,52690],{"class":47},[33,57382,766],{"class":76},[33,57384,80],{"class":47},[33,57386,57387,57389,57391,57393],{"class":35,"line":1471},[33,57388,56102],{"class":76},[33,57390,52690],{"class":47},[33,57392,766],{"class":76},[33,57394,80],{"class":47},[33,57396,57397,57399,57401,57403,57405],{"class":35,"line":1477},[33,57398,56024],{"class":76},[33,57400,52690],{"class":47},[33,57402,457],{"class":76},[33,57404,1939],{"class":39},[33,57406,80],{"class":47},[33,57408,57409,57411,57413,57415,57417],{"class":35,"line":1504},[33,57410,56038],{"class":76},[33,57412,52690],{"class":47},[33,57414,2175],{"class":76},[33,57416,1939],{"class":39},[33,57418,80],{"class":47},[33,57420,57421,57423,57425,57427],{"class":35,"line":1509},[33,57422,56137],{"class":76},[33,57424,52690],{"class":47},[33,57426,56142],{"class":76},[33,57428,80],{"class":47},[33,57430,57431],{"class":35,"line":1525},[33,57432,916],{"class":47},[33,57434,57435],{"class":35,"line":1535},[33,57436,160],{"emptyLinePlaceholder":159},[33,57438,57439,57441,57443],{"class":35,"line":1540},[33,57440,56073],{"class":43},[33,57442,622],{"class":52553},[33,57444,16823],{"class":47},[33,57446,57447,57449,57451,57453],{"class":35,"line":4027},[33,57448,56012],{"class":76},[33,57450,52690],{"class":47},[33,57452,56084],{"class":76},[33,57454,80],{"class":47},[33,57456,57457,57459,57461,57463,57465],{"class":35,"line":4032},[33,57458,56175],{"class":76},[33,57460,52690],{"class":47},[33,57462,2499],{"class":76},[33,57464,52745],{"class":39},[33,57466,80],{"class":47},[33,57468,57469,57471,57473,57475,57477],{"class":35,"line":9199},[33,57470,56091],{"class":76},[33,57472,52690],{"class":47},[33,57474,1045],{"class":76},[33,57476,52745],{"class":39},[33,57478,80],{"class":47},[33,57480,57481,57483,57485,57487,57489],{"class":35,"line":9223},[33,57482,56200],{"class":76},[33,57484,52690],{"class":47},[33,57486,722],{"class":76},[33,57488,52745],{"class":39},[33,57490,80],{"class":47},[33,57492,57493],{"class":35,"line":9228},[33,57494,916],{"class":47},[33,57496,57497],{"class":35,"line":9234},[33,57498,160],{"emptyLinePlaceholder":159},[33,57500,57501,57503],{"class":35,"line":9261},[33,57502,56221],{"class":52553},[33,57504,16823],{"class":47},[33,57506,57507,57509,57511,57513],{"class":35,"line":9266},[33,57508,56012],{"class":76},[33,57510,52690],{"class":47},[33,57512,56084],{"class":76},[33,57514,80],{"class":47},[33,57516,57517,57519,57521,57523,57525],{"class":35,"line":9272},[33,57518,56200],{"class":76},[33,57520,52690],{"class":47},[33,57522,2380],{"class":76},[33,57524,52745],{"class":39},[33,57526,80],{"class":47},[33,57528,57529,57531,57533,57535,57537],{"class":35,"line":9284},[33,57530,56091],{"class":76},[33,57532,52690],{"class":47},[33,57534,1045],{"class":76},[33,57536,52745],{"class":39},[33,57538,80],{"class":47},[33,57540,57541,57543,57545,57547],{"class":35,"line":9296},[33,57542,56262],{"class":76},[33,57544,52690],{"class":47},[33,57546,52730],{"class":76},[33,57548,80],{"class":47},[33,57550,57551,57553,57555,57557],{"class":35,"line":9308},[33,57552,56273],{"class":76},[33,57554,52690],{"class":47},[33,57556,52921],{"class":76},[33,57558,80],{"class":47},[33,57560,57561,57563,57565,57567],{"class":35,"line":10967},[33,57562,56012],{"class":76},[33,57564,52690],{"class":47},[33,57566,56084],{"class":76},[33,57568,80],{"class":47},[33,57570,57571,57573,57575,57577,57579],{"class":35,"line":10992},[33,57572,56024],{"class":76},[33,57574,52690],{"class":47},[33,57576,5392],{"class":76},[33,57578,52745],{"class":39},[33,57580,80],{"class":47},[33,57582,57583,57585,57587,57589,57591],{"class":35,"line":11015},[33,57584,56038],{"class":76},[33,57586,52690],{"class":47},[33,57588,1045],{"class":76},[33,57590,52745],{"class":39},[33,57592,80],{"class":47},[33,57594,57595],{"class":35,"line":11039},[33,57596,916],{"class":47},[33,57598,57599],{"class":35,"line":11044},[33,57600,160],{"emptyLinePlaceholder":159},[33,57602,57603,57605,57607],{"class":35,"line":11049},[33,57604,56221],{"class":52553},[33,57606,56328],{"class":52553},[33,57608,16823],{"class":47},[33,57610,57611,57613,57615,57617,57619],{"class":35,"line":11054},[33,57612,56024],{"class":76},[33,57614,52690],{"class":47},[33,57616,1045],{"class":76},[33,57618,52745],{"class":39},[33,57620,80],{"class":47},[33,57622,57623,57625,57627,57629,57631],{"class":35,"line":11063},[33,57624,56038],{"class":76},[33,57626,52690],{"class":47},[33,57628,1045],{"class":76},[33,57630,52745],{"class":39},[33,57632,80],{"class":47},[33,57634,57635,57637,57639,57641,57643,57645,57647,57649,57651,57653,57655,57657],{"class":35,"line":11068},[33,57636,56137],{"class":76},[33,57638,52690],{"class":47},[33,57640,56363],{"class":76},[33,57642,345],{"class":47},[33,57644,766],{"class":76},[33,57646,13686],{"class":47},[33,57648,766],{"class":76},[33,57650,13686],{"class":47},[33,57652,766],{"class":76},[33,57654,13686],{"class":47},[33,57656,56380],{"class":76},[33,57658,4130],{"class":47},[33,57660,57661,57663,57665,57667,57669],{"class":35,"line":11074},[33,57662,56387],{"class":76},[33,57664,52690],{"class":47},[33,57666,77],{"class":76},[33,57668,52745],{"class":39},[33,57670,80],{"class":47},[33,57672,57673],{"class":35,"line":11095},[33,57674,916],{"class":47},[33,57676,57677],{"class":35,"line":11101},[33,57678,160],{"emptyLinePlaceholder":159},[33,57680,57681,57683],{"class":35,"line":11115},[33,57682,56408],{"class":43},[33,57684,16823],{"class":47},[33,57686,57687,57689,57691,57693],{"class":35,"line":11121},[33,57688,56137],{"class":76},[33,57690,52690],{"class":47},[33,57692,56419],{"class":76},[33,57694,80],{"class":47},[33,57696,57697],{"class":35,"line":11148},[33,57698,916],{"class":47},[33,57700,57701,57703,57705],{"class":35,"line":11157},[33,57702,53670],{"class":47},[33,57704,1544],{"class":52553},[33,57706,52560],{"class":47},[33,57708,57709,57711,57713],{"class":35,"line":11163},[33,57710,53038],{"class":47},[33,57712,52587],{"class":52553},[33,57714,52560],{"class":47},[33,57716,57717],{"class":35,"line":11171},[33,57718,160],{"emptyLinePlaceholder":159},[33,57720,57721,57723,57725],{"class":35,"line":11176},[33,57722,875],{"class":47},[33,57724,53053],{"class":52553},[33,57726,52560],{"class":47},[33,57728,57729,57731,57733,57735,57737,57739],{"class":35,"line":17855},[33,57730,53397],{"class":47},[33,57732,52864],{"class":52553},[33,57734,54739],{"class":43},[33,57736,73],{"class":47},[33,57738,54744],{"class":119},[33,57740,52560],{"class":47},[33,57742,57743,57745,57747,57749,57751,57753],{"class":35,"line":17861},[33,57744,52594],{"class":47},[33,57746,52864],{"class":52553},[33,57748,54739],{"class":43},[33,57750,73],{"class":47},[33,57752,56480],{"class":119},[33,57754,52560],{"class":47},[33,57756,57757,57759,57761,57763,57765,57767,57769,57771,57773],{"class":35,"line":17884},[33,57758,56487],{"class":47},[33,57760,2918],{"class":52553},[33,57762,56492],{"class":43},[33,57764,73],{"class":47},[33,57766,56497],{"class":119},[33,57768,56500],{"class":43},[33,57770,73],{"class":47},[33,57772,1520],{"class":119},[33,57774,52560],{"class":47},[33,57776,57777,57779,57781],{"class":35,"line":17890},[33,57778,53029],{"class":47},[33,57780,52864],{"class":52553},[33,57782,52560],{"class":47},[33,57784,57785,57787,57789,57791,57793,57795],{"class":35,"line":17913},[33,57786,52594],{"class":47},[33,57788,52864],{"class":52553},[33,57790,54739],{"class":43},[33,57792,73],{"class":47},[33,57794,56527],{"class":119},[33,57796,52560],{"class":47},[33,57798,57799,57801,57803,57805,57807],{"class":35,"line":17927},[33,57800,56487],{"class":47},[33,57802,14],{"class":52553},[33,57804,56538],{"class":47},[33,57806,14],{"class":52553},[33,57808,52560],{"class":47},[33,57810,57811,57813,57815],{"class":35,"line":17947},[33,57812,56487],{"class":47},[33,57814,561],{"class":52553},[33,57816,52560],{"class":47},[33,57818,57819,57821,57823,57825,57827,57829,57831,57833],{"class":35,"line":17953},[33,57820,56555],{"class":47},[33,57822,564],{"class":52553},[33,57824,54739],{"class":43},[33,57826,73],{"class":47},[33,57828,56564],{"class":119},[33,57830,56567],{"class":47},[33,57832,564],{"class":52553},[33,57834,52560],{"class":47},[33,57836,57837,57839,57841,57843,57845],{"class":35,"line":17964},[33,57838,56555],{"class":47},[33,57840,564],{"class":52553},[33,57842,56567],{"class":47},[33,57844,564],{"class":52553},[33,57846,52560],{"class":47},[33,57848,57849,57851,57853,57855,57857],{"class":35,"line":17987},[33,57850,56555],{"class":47},[33,57852,564],{"class":52553},[33,57854,56567],{"class":47},[33,57856,564],{"class":52553},[33,57858,52560],{"class":47},[33,57860,57861,57863,57865,57867,57869],{"class":35,"line":18009},[33,57862,56555],{"class":47},[33,57864,564],{"class":52553},[33,57866,56567],{"class":47},[33,57868,564],{"class":52553},[33,57870,52560],{"class":47},[33,57872,57873,57875,57877,57879,57881],{"class":35,"line":18014},[33,57874,56555],{"class":47},[33,57876,564],{"class":52553},[33,57878,56567],{"class":47},[33,57880,564],{"class":52553},[33,57882,52560],{"class":47},[33,57884,57885,57887,57889,57891,57893],{"class":35,"line":18020},[33,57886,56555],{"class":47},[33,57888,564],{"class":52553},[33,57890,56567],{"class":47},[33,57892,564],{"class":52553},[33,57894,52560],{"class":47},[33,57896,57897,57899,57901,57903,57905],{"class":35,"line":18034},[33,57898,56555],{"class":47},[33,57900,564],{"class":52553},[33,57902,56567],{"class":47},[33,57904,564],{"class":52553},[33,57906,52560],{"class":47},[33,57908,57909,57911,57913,57915,57917],{"class":35,"line":18047},[33,57910,56555],{"class":47},[33,57912,564],{"class":52553},[33,57914,56567],{"class":47},[33,57916,564],{"class":52553},[33,57918,52560],{"class":47},[33,57920,57921,57923,57925],{"class":35,"line":18052},[33,57922,56660],{"class":47},[33,57924,561],{"class":52553},[33,57926,52560],{"class":47},[33,57928,57929,57931,57933],{"class":35,"line":18066},[33,57930,53029],{"class":47},[33,57932,52864],{"class":52553},[33,57934,52560],{"class":47},[33,57936,57937,57939,57941],{"class":35,"line":18071},[33,57938,53670],{"class":47},[33,57940,52864],{"class":52553},[33,57942,52560],{"class":47},[33,57944,57945,57947,57949],{"class":35,"line":18077},[33,57946,53397],{"class":47},[33,57948,53066],{"class":52553},[33,57950,52560],{"class":47},[33,57952,57953,57955,57958,57960],{"class":35,"line":18082},[33,57954,12472],{"class":39},[33,57956,57957],{"class":76}," sliderData",[33,57959,14815],{"class":39},[33,57961,56700],{"class":47},[33,57963,57964,57966,57968,57970,57972,57974,57976],{"class":35,"line":18096},[33,57965,56705],{"class":47},[33,57967,56708],{"class":119},[33,57969,56711],{"class":47},[33,57971,56714],{"class":119},[33,57973,56717],{"class":47},[33,57975,56720],{"class":119},[33,57977,56723],{"class":47},[33,57979,57980,57982,57984,57986,57988,57990,57992],{"class":35,"line":18101},[33,57981,56705],{"class":47},[33,57983,56730],{"class":119},[33,57985,56711],{"class":47},[33,57987,56735],{"class":119},[33,57989,56717],{"class":47},[33,57991,56740],{"class":119},[33,57993,56723],{"class":47},[33,57995,57996,57998,58000,58002,58004,58006,58008],{"class":35,"line":18106},[33,57997,56705],{"class":47},[33,57999,56749],{"class":119},[33,58001,56711],{"class":47},[33,58003,56754],{"class":119},[33,58005,56717],{"class":47},[33,58007,56759],{"class":119},[33,58009,56723],{"class":47},[33,58011,58012,58014,58016,58018,58020,58022,58024],{"class":35,"line":18120},[33,58013,56705],{"class":47},[33,58015,56768],{"class":119},[33,58017,56711],{"class":47},[33,58019,56773],{"class":119},[33,58021,56717],{"class":47},[33,58023,56778],{"class":119},[33,58025,56723],{"class":47},[33,58027,58028,58030,58032,58034,58036,58038,58040],{"class":35,"line":18132},[33,58029,56705],{"class":47},[33,58031,56787],{"class":119},[33,58033,56711],{"class":47},[33,58035,56792],{"class":119},[33,58037,56717],{"class":47},[33,58039,56797],{"class":119},[33,58041,56723],{"class":47},[33,58043,58044,58046,58048,58050,58052,58054,58056],{"class":35,"line":18137},[33,58045,56705],{"class":47},[33,58047,56806],{"class":119},[33,58049,56711],{"class":47},[33,58051,56811],{"class":119},[33,58053,56717],{"class":47},[33,58055,56816],{"class":119},[33,58057,56723],{"class":47},[33,58059,58060,58062,58064,58066,58068,58070,58072],{"class":35,"line":18150},[33,58061,56705],{"class":47},[33,58063,56825],{"class":119},[33,58065,56711],{"class":47},[33,58067,56830],{"class":119},[33,58069,56717],{"class":47},[33,58071,56835],{"class":119},[33,58073,56723],{"class":47},[33,58075,58076,58078,58080,58082,58084,58086,58088],{"class":35,"line":18155},[33,58077,56705],{"class":47},[33,58079,56844],{"class":119},[33,58081,56711],{"class":47},[33,58083,56849],{"class":119},[33,58085,56717],{"class":47},[33,58087,56854],{"class":119},[33,58089,56857],{"class":47},[33,58091,58092],{"class":35,"line":18160},[33,58093,54362],{"class":47},[33,58095,58096],{"class":35,"line":18165},[33,58097,58098],{"class":60},"    \u002F\u002F 1.获取元素\n",[33,58100,58101,58103,58105,58107,58109,58111,58113,58115],{"class":35,"line":18178},[33,58102,12472],{"class":39},[33,58104,56868],{"class":76},[33,58106,14815],{"class":39},[33,58108,55649],{"class":47},[33,58110,55652],{"class":43},[33,58112,345],{"class":47},[33,58114,56879],{"class":119},[33,58116,884],{"class":47},[33,58118,58119,58121,58123,58125,58127,58129,58131,58133],{"class":35,"line":18183},[33,58120,12472],{"class":39},[33,58122,622],{"class":76},[33,58124,14815],{"class":39},[33,58126,55649],{"class":47},[33,58128,55652],{"class":43},[33,58130,345],{"class":47},[33,58132,56898],{"class":119},[33,58134,884],{"class":47},[33,58136,58137,58139,58141,58143],{"class":35,"line":33886},[33,58138,53472],{"class":39},[33,58140,10689],{"class":47},[33,58142,73],{"class":39},[33,58144,48586],{"class":76},[33,58146,58147],{"class":35,"line":33892},[33,58148,58149],{"class":60},"    \u002F\u002F 2.开启定时器\n",[33,58151,58152],{"class":35,"line":33898},[33,58153,58154],{"class":60},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[33,58156,58157,58160,58162,58164],{"class":35,"line":33904},[33,58158,58159],{"class":43},"    setInterval",[33,58161,345],{"class":47},[33,58163,55702],{"class":39},[33,58165,55705],{"class":47},[33,58167,58168,58170],{"class":35,"line":33910},[33,58169,55710],{"class":47},[33,58171,4113],{"class":39},[33,58173,58174,58176,58178,58180,58183,58185],{"class":35,"line":33921},[33,58175,55733],{"class":39},[33,58177,55736],{"class":47},[33,58179,3151],{"class":39},[33,58181,58182],{"class":47}," sliderData.",[33,58184,53221],{"class":76},[33,58186,13693],{"class":47},[33,58188,58189,58192,58194],{"class":35,"line":33927},[33,58190,58191],{"class":47},"        i ",[33,58193,73],{"class":39},[33,58195,48586],{"class":76},[33,58197,58198],{"class":35,"line":33947},[33,58199,53651],{"class":47},[33,58201,58202],{"class":35,"line":33953},[33,58203,58204],{"class":60},"      \u002F\u002F 更换图片路径\n",[33,58206,58207,58209,58211],{"class":35,"line":33964},[33,58208,56974],{"class":47},[33,58210,73],{"class":39},[33,58212,58213],{"class":47}," sliderData[i].url\n",[33,58215,58216],{"class":35,"line":33970},[33,58217,58218],{"class":60},"      \u002F\u002F 把文字写到p里面\n",[33,58220,58221,58223,58225],{"class":35,"line":33976},[33,58222,56984],{"class":47},[33,58224,73],{"class":39},[33,58226,58227],{"class":47}," sliderData[i].title\n",[33,58229,58230],{"class":35,"line":33982},[33,58231,58232],{"class":60},"      \u002F\u002F 小圆点\n",[33,58234,58235],{"class":35,"line":33988},[33,58236,58237],{"class":60},"      \u002F\u002F 先删除以前的active\n",[33,58239,58240],{"class":35,"line":33994},[33,58241,58242],{"class":60},"      \u002F\u002F 只让当前li添加active\n",[33,58244,58245,58247,58249,58251,58254,58257,58260,58262,58264],{"class":35,"line":34000},[33,58246,57024],{"class":47},[33,58248,55652],{"class":43},[33,58250,345],{"class":47},[33,58252,58253],{"class":119},"'.slider-footer .activate'",[33,58255,58256],{"class":47},").classList.",[33,58258,58259],{"class":43},"remove",[33,58261,345],{"class":47},[33,58263,57042],{"class":119},[33,58265,884],{"class":47},[33,58267,58268,58270,58272,58274,58277,58279,58281,58283,58286,58288,58290,58292,58294],{"class":35,"line":34006},[33,58269,57024],{"class":47},[33,58271,55652],{"class":43},[33,58273,345],{"class":47},[33,58275,58276],{"class":119},"`.slider-footer ul li:nth-child(${",[33,58278,1239],{"class":47},[33,58280,46819],{"class":39},[33,58282,26371],{"class":76},[33,58284,58285],{"class":119},"})`",[33,58287,58256],{"class":47},[33,58289,6724],{"class":43},[33,58291,345],{"class":47},[33,58293,57042],{"class":119},[33,58295,884],{"class":47},[33,58297,58298],{"class":35,"line":34026},[33,58299,160],{"emptyLinePlaceholder":159},[33,58301,58302,58304,58306],{"class":35,"line":34032},[33,58303,55788],{"class":47},[33,58305,191],{"class":76},[33,58307,884],{"class":47},[33,58309,58310],{"class":35,"line":34048},[33,58311,160],{"emptyLinePlaceholder":159},[33,58313,58314,58316,58318],{"class":35,"line":34054},[33,58315,53670],{"class":47},[33,58317,53066],{"class":52553},[33,58319,52560],{"class":47},[33,58321,58322,58324,58326],{"class":35,"line":34068},[33,58323,53038],{"class":47},[33,58325,53053],{"class":52553},[33,58327,52560],{"class":47},[33,58329,58330],{"class":35,"line":34074},[33,58331,160],{"emptyLinePlaceholder":159},[33,58333,58334,58336,58338],{"class":35,"line":34089},[33,58335,53038],{"class":47},[33,58337,51888],{"class":52553},[33,58339,52560],{"class":47},[1599,58341,58343],{"id":58342},"_317-重要知识点","3.1.7 重要知识点",[14,58345,58346,58347],{},"浏览器在渲染文本时， ",[480,58348,58349],{},"没有空格或换行符就没有“断行点”",[14,58351,58352],{},[2918,58353],{"alt":28,"src":58354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,58356,58357],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,58359,58360],{},[2918,58361],{"alt":28,"src":58362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,58364,58365],{},[2918,58366],{"alt":28,"src":58367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[18,58369,58371],{"id":58370},"_32-dom事件基础","3.2 DOM事件基础",[1599,58373,58375],{"id":58374},"_321-事件监听","3.2.1 事件监听",[14,58377,58378],{},[2918,58379],{"alt":28,"src":58380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,58382,58383],{},"事件监听有响应的发生",[14,58385,58386],{},[2918,58387],{"alt":28,"src":58388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,58390,58391],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,58393,58394],{},"对于有名函数,要执行的函数名后边不要加()",[1599,58396,58398],{"id":58397},"_322-随机点名案例","3.2.2 随机点名案例",[23,58400,58402],{"className":51886,"code":58401,"language":51888,"meta":28,"style":28},"\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",[30,58403,58404,58414,58428,58432,58440,58454,58474,58486,58494,58500,58510,58520,58524,58528,58535,58546,58550,58554,58560,58572,58586,58596,58608,58621,58625,58629,58636,58640,58653,58665,58677,58681,58685,58689,58696,58706,58710,58714,58723,58735,58747,58762,58766,58774,58782,58786,58794,58807,58821,58834,58854,58862,58877,58897,58917,58925,58929,58937,58942,58978,58998,59003,59022,59027,59038,59043,59054,59059,59078,59093,59098,59124,59134,59143,59148,59164,59169,59174,59179,59194,59198,59202,59207,59226,59243,59251,59256,59271,59275,59279,59287,59295,59299],{"__ignoreMap":28},[33,58405,58406,58408,58410,58412],{"class":35,"line":36},[33,58407,52550],{"class":47},[33,58409,52554],{"class":52553},[33,58411,52557],{"class":43},[33,58413,52560],{"class":47},[33,58415,58416,58418,58420,58422,58424,58426],{"class":35,"line":51},[33,58417,875],{"class":47},[33,58419,51888],{"class":52553},[33,58421,52569],{"class":43},[33,58423,73],{"class":47},[33,58425,52574],{"class":119},[33,58427,52560],{"class":47},[33,58429,58430],{"class":35,"line":57},[33,58431,160],{"emptyLinePlaceholder":159},[33,58433,58434,58436,58438],{"class":35,"line":64},[33,58435,875],{"class":47},[33,58437,52587],{"class":52553},[33,58439,52560],{"class":47},[33,58441,58442,58444,58446,58448,58450,58452],{"class":35,"line":83},[33,58443,53397],{"class":47},[33,58445,52597],{"class":52553},[33,58447,52600],{"class":43},[33,58449,73],{"class":47},[33,58451,52605],{"class":119},[33,58453,52560],{"class":47},[33,58455,58456,58458,58460,58462,58464,58466,58468,58470,58472],{"class":35,"line":89},[33,58457,53397],{"class":47},[33,58459,52597],{"class":52553},[33,58461,16171],{"class":43},[33,58463,73],{"class":47},[33,58465,52644],{"class":119},[33,58467,52624],{"class":43},[33,58469,73],{"class":47},[33,58471,52651],{"class":119},[33,58473,52560],{"class":47},[33,58475,58476,58478,58480,58482,58484],{"class":35,"line":98},[33,58477,53397],{"class":47},[33,58479,52660],{"class":52553},[33,58481,52663],{"class":47},[33,58483,52660],{"class":52553},[33,58485,52560],{"class":47},[33,58487,58488,58490,58492],{"class":35,"line":110},[33,58489,53397],{"class":47},[33,58491,1544],{"class":52553},[33,58493,52560],{"class":47},[33,58495,58496,58498],{"class":35,"line":134},[33,58497,184],{"class":52553},[33,58499,16823],{"class":47},[33,58501,58502,58504,58506,58508],{"class":35,"line":156},[33,58503,55959],{"class":76},[33,58505,52690],{"class":47},[33,58507,766],{"class":76},[33,58509,80],{"class":47},[33,58511,58512,58514,58516,58518],{"class":35,"line":163},[33,58513,55948],{"class":76},[33,58515,52690],{"class":47},[33,58517,766],{"class":76},[33,58519,80],{"class":47},[33,58521,58522],{"class":35,"line":169},[33,58523,916],{"class":47},[33,58525,58526],{"class":35,"line":175},[33,58527,160],{"emptyLinePlaceholder":159},[33,58529,58530,58533],{"class":35,"line":181},[33,58531,58532],{"class":52553},"    h2",[33,58534,16823],{"class":47},[33,58536,58537,58540,58542,58544],{"class":35,"line":196},[33,58538,58539],{"class":76},"      text-align",[33,58541,52690],{"class":47},[33,58543,52845],{"class":76},[33,58545,80],{"class":47},[33,58547,58548],{"class":35,"line":213},[33,58549,916],{"class":47},[33,58551,58552],{"class":35,"line":228},[33,58553,160],{"emptyLinePlaceholder":159},[33,58555,58556,58558],{"class":35,"line":1345},[33,58557,56005],{"class":43},[33,58559,16823],{"class":47},[33,58561,58562,58564,58566,58568,58570],{"class":35,"line":1350},[33,58563,56024],{"class":76},[33,58565,52690],{"class":47},[33,58567,2995],{"class":76},[33,58569,52745],{"class":39},[33,58571,80],{"class":47},[33,58573,58574,58576,58578,58580,58582,58584],{"class":35,"line":1359},[33,58575,55959],{"class":76},[33,58577,52690],{"class":47},[33,58579,2256],{"class":76},[33,58581,52745],{"class":39},[33,58583,52809],{"class":76},[33,58585,80],{"class":47},[33,58587,58588,58590,58592,58594],{"class":35,"line":1364},[33,58589,56262],{"class":76},[33,58591,52690],{"class":47},[33,58593,52730],{"class":76},[33,58595,80],{"class":47},[33,58597,58598,58600,58602,58604,58606],{"class":35,"line":1370},[33,58599,56175],{"class":76},[33,58601,52690],{"class":47},[33,58603,2424],{"class":76},[33,58605,52745],{"class":39},[33,58607,80],{"class":47},[33,58609,58610,58613,58615,58617,58619],{"class":35,"line":1425},[33,58611,58612],{"class":76},"      line-height",[33,58614,52690],{"class":47},[33,58616,2007],{"class":76},[33,58618,52745],{"class":39},[33,58620,80],{"class":47},[33,58622,58623],{"class":35,"line":1438},[33,58624,916],{"class":47},[33,58626,58627],{"class":35,"line":1451},[33,58628,160],{"emptyLinePlaceholder":159},[33,58630,58631,58634],{"class":35,"line":1457},[33,58632,58633],{"class":43},"    .qs",[33,58635,16823],{"class":47},[33,58637,58638],{"class":35,"line":1466},[33,58639,160],{"emptyLinePlaceholder":159},[33,58641,58642,58644,58646,58649,58651],{"class":35,"line":1471},[33,58643,56024],{"class":76},[33,58645,52690],{"class":47},[33,58647,58648],{"class":76},"450",[33,58650,52745],{"class":39},[33,58652,80],{"class":47},[33,58654,58655,58657,58659,58661,58663],{"class":35,"line":1477},[33,58656,56038],{"class":76},[33,58658,52690],{"class":47},[33,58660,2007],{"class":76},[33,58662,52745],{"class":39},[33,58664,80],{"class":47},[33,58666,58667,58670,58672,58675],{"class":35,"line":1504},[33,58668,58669],{"class":76},"      color",[33,58671,52690],{"class":47},[33,58673,58674],{"class":76},"red",[33,58676,80],{"class":47},[33,58678,58679],{"class":35,"line":1509},[33,58680,160],{"emptyLinePlaceholder":159},[33,58682,58683],{"class":35,"line":1525},[33,58684,916],{"class":47},[33,58686,58687],{"class":35,"line":1535},[33,58688,160],{"emptyLinePlaceholder":159},[33,58690,58691,58694],{"class":35,"line":1540},[33,58692,58693],{"class":43},"    .btns",[33,58695,16823],{"class":47},[33,58697,58698,58700,58702,58704],{"class":35,"line":4027},[33,58699,58539],{"class":76},[33,58701,52690],{"class":47},[33,58703,52845],{"class":76},[33,58705,80],{"class":47},[33,58707,58708],{"class":35,"line":4032},[33,58709,916],{"class":47},[33,58711,58712],{"class":35,"line":9199},[33,58713,160],{"emptyLinePlaceholder":159},[33,58715,58716,58718,58721],{"class":35,"line":9223},[33,58717,58693],{"class":43},[33,58719,58720],{"class":52553}," button",[33,58722,16823],{"class":47},[33,58724,58725,58727,58729,58731,58733],{"class":35,"line":9228},[33,58726,56024],{"class":76},[33,58728,52690],{"class":47},[33,58730,2416],{"class":76},[33,58732,52745],{"class":39},[33,58734,80],{"class":47},[33,58736,58737,58739,58741,58743,58745],{"class":35,"line":9234},[33,58738,56038],{"class":76},[33,58740,52690],{"class":47},[33,58742,1887],{"class":76},[33,58744,52745],{"class":39},[33,58746,80],{"class":47},[33,58748,58749,58751,58753,58755,58758,58760],{"class":35,"line":9261},[33,58750,55959],{"class":76},[33,58752,52690],{"class":47},[33,58754,766],{"class":76},[33,58756,58757],{"class":76}," 50",[33,58759,52745],{"class":39},[33,58761,80],{"class":47},[33,58763,58764],{"class":35,"line":9266},[33,58765,916],{"class":47},[33,58767,58768,58770,58772],{"class":35,"line":9272},[33,58769,53670],{"class":47},[33,58771,1544],{"class":52553},[33,58773,52560],{"class":47},[33,58775,58776,58778,58780],{"class":35,"line":9284},[33,58777,53038],{"class":47},[33,58779,52587],{"class":52553},[33,58781,52560],{"class":47},[33,58783,58784],{"class":35,"line":9296},[33,58785,160],{"emptyLinePlaceholder":159},[33,58787,58788,58790,58792],{"class":35,"line":9308},[33,58789,875],{"class":47},[33,58791,53053],{"class":52553},[33,58793,52560],{"class":47},[33,58795,58796,58798,58800,58803,58805],{"class":35,"line":10967},[33,58797,53397],{"class":47},[33,58799,18],{"class":52553},[33,58801,58802],{"class":47},">随机点名\u003C\u002F",[33,58804,18],{"class":52553},[33,58806,52560],{"class":47},[33,58808,58809,58811,58813,58815,58817,58819],{"class":35,"line":10992},[33,58810,53397],{"class":47},[33,58812,52864],{"class":52553},[33,58814,54739],{"class":43},[33,58816,73],{"class":47},[33,58818,54744],{"class":119},[33,58820,52560],{"class":47},[33,58822,58823,58825,58827,58830,58832],{"class":35,"line":11015},[33,58824,52594],{"class":47},[33,58826,33],{"class":52553},[33,58828,58829],{"class":47},">名字是：\u003C\u002F",[33,58831,33],{"class":52553},[33,58833,52560],{"class":47},[33,58835,58836,58838,58840,58842,58844,58847,58850,58852],{"class":35,"line":11039},[33,58837,52594],{"class":47},[33,58839,52864],{"class":52553},[33,58841,54739],{"class":43},[33,58843,73],{"class":47},[33,58845,58846],{"class":119},"\"qs\"",[33,58848,58849],{"class":47},">这里显示姓名\u003C\u002F",[33,58851,52864],{"class":52553},[33,58853,52560],{"class":47},[33,58855,58856,58858,58860],{"class":35,"line":11044},[33,58857,53670],{"class":47},[33,58859,52864],{"class":52553},[33,58861,52560],{"class":47},[33,58863,58864,58866,58868,58870,58872,58875],{"class":35,"line":11049},[33,58865,53397],{"class":47},[33,58867,52864],{"class":52553},[33,58869,54739],{"class":43},[33,58871,73],{"class":47},[33,58873,58874],{"class":119},"\"btns\"",[33,58876,52560],{"class":47},[33,58878,58879,58881,58883,58885,58887,58890,58893,58895],{"class":35,"line":11054},[33,58880,52594],{"class":47},[33,58882,55140],{"class":52553},[33,58884,54739],{"class":43},[33,58886,73],{"class":47},[33,58888,58889],{"class":119},"\"start\"",[33,58891,58892],{"class":47},">开始\u003C\u002F",[33,58894,55140],{"class":52553},[33,58896,52560],{"class":47},[33,58898,58899,58901,58903,58905,58907,58910,58913,58915],{"class":35,"line":11063},[33,58900,52594],{"class":47},[33,58902,55140],{"class":52553},[33,58904,54739],{"class":43},[33,58906,73],{"class":47},[33,58908,58909],{"class":119},"\"end\"",[33,58911,58912],{"class":47},">结束\u003C\u002F",[33,58914,55140],{"class":52553},[33,58916,52560],{"class":47},[33,58918,58919,58921,58923],{"class":35,"line":11068},[33,58920,53670],{"class":47},[33,58922,52864],{"class":52553},[33,58924,52560],{"class":47},[33,58926,58927],{"class":35,"line":11074},[33,58928,160],{"emptyLinePlaceholder":159},[33,58930,58931,58933,58935],{"class":35,"line":11095},[33,58932,53397],{"class":47},[33,58934,53066],{"class":52553},[33,58936,52560],{"class":47},[33,58938,58939],{"class":35,"line":11101},[33,58940,58941],{"class":60},"    \u002F\u002F 数据数组\n",[33,58943,58944,58946,58949,58951,58953,58956,58958,58961,58963,58966,58968,58971,58973,58976],{"class":35,"line":11115},[33,58945,12472],{"class":39},[33,58947,58948],{"class":76}," arr",[33,58950,14815],{"class":39},[33,58952,53479],{"class":47},[33,58954,58955],{"class":119},"'马超'",[33,58957,13686],{"class":47},[33,58959,58960],{"class":119},"'黄忠'",[33,58962,13686],{"class":47},[33,58964,58965],{"class":119},"'赵云'",[33,58967,13686],{"class":47},[33,58969,58970],{"class":119},"'关羽'",[33,58972,13686],{"class":47},[33,58974,58975],{"class":119},"'张飞'",[33,58977,34499],{"class":47},[33,58979,58980,58982,58985,58987,58989,58991,58993,58996],{"class":35,"line":11121},[33,58981,12472],{"class":39},[33,58983,58984],{"class":76}," qs",[33,58986,14815],{"class":39},[33,58988,55649],{"class":47},[33,58990,55652],{"class":43},[33,58992,345],{"class":47},[33,58994,58995],{"class":119},"'.qs'",[33,58997,884],{"class":47},[33,58999,59000],{"class":35,"line":11148},[33,59001,59002],{"class":60},"    \u002F\u002F 1.业务1.开始按钮模块\n",[33,59004,59005,59007,59009,59011,59013,59015,59017,59020],{"class":35,"line":11157},[33,59006,12472],{"class":39},[33,59008,5583],{"class":76},[33,59010,14815],{"class":39},[33,59012,55649],{"class":47},[33,59014,55652],{"class":43},[33,59016,345],{"class":47},[33,59018,59019],{"class":119},"'.start'",[33,59021,884],{"class":47},[33,59023,59024],{"class":35,"line":11163},[33,59025,59026],{"class":60},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[33,59028,59029,59031,59034,59036],{"class":35,"line":11171},[33,59030,53472],{"class":39},[33,59032,59033],{"class":47}," timerId ",[33,59035,73],{"class":39},[33,59037,48586],{"class":76},[33,59039,59040],{"class":35,"line":11176},[33,59041,59042],{"class":60},"    \u002F\u002F 随机号要全局变量\n",[33,59044,59045,59047,59050,59052],{"class":35,"line":17855},[33,59046,53472],{"class":39},[33,59048,59049],{"class":47}," random ",[33,59051,73],{"class":39},[33,59053,48586],{"class":76},[33,59055,59056],{"class":35,"line":17861},[33,59057,59058],{"class":60},"    \u002F\u002F 1.1 添加点击事件\n",[33,59060,59061,59064,59067,59069,59072,59074,59076],{"class":35,"line":17884},[33,59062,59063],{"class":47},"    start.",[33,59065,59066],{"class":43},"addEventListener",[33,59068,345],{"class":47},[33,59070,59071],{"class":119},"'click'",[33,59073,13686],{"class":47},[33,59075,55702],{"class":39},[33,59077,55705],{"class":47},[33,59079,59080,59083,59085,59087,59089,59091],{"class":35,"line":17890},[33,59081,59082],{"class":47},"      timerId ",[33,59084,73],{"class":39},[33,59086,55697],{"class":43},[33,59088,345],{"class":47},[33,59090,55702],{"class":39},[33,59092,55705],{"class":47},[33,59094,59095],{"class":35,"line":17913},[33,59096,59097],{"class":60},"        \u002F\u002F 随机数\n",[33,59099,59100,59103,59105,59108,59111,59114,59116,59118,59120,59122],{"class":35,"line":17927},[33,59101,59102],{"class":47},"        random ",[33,59104,73],{"class":39},[33,59106,59107],{"class":43}," parseInt",[33,59109,59110],{"class":47},"(Math.",[33,59112,59113],{"class":43},"random",[33,59115,14301],{"class":47},[33,59117,2057],{"class":39},[33,59119,53218],{"class":47},[33,59121,53221],{"class":76},[33,59123,884],{"class":47},[33,59125,59126,59129,59131],{"class":35,"line":17947},[33,59127,59128],{"class":47},"        qs.innerHTML ",[33,59130,73],{"class":39},[33,59132,59133],{"class":47}," arr[random]\n",[33,59135,59136,59139,59141],{"class":35,"line":17953},[33,59137,59138],{"class":47},"      }, ",[33,59140,1887],{"class":76},[33,59142,884],{"class":47},[33,59144,59145],{"class":35,"line":17964},[33,59146,59147],{"class":60},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[33,59149,59150,59152,59155,59157,59160,59162],{"class":35,"line":17987},[33,59151,55733],{"class":39},[33,59153,59154],{"class":47}," (arr.",[33,59156,53221],{"class":76},[33,59158,59159],{"class":39}," ===",[33,59161,26371],{"class":76},[33,59163,13693],{"class":47},[33,59165,59166],{"class":35,"line":18009},[33,59167,59168],{"class":60},"        \u002F\u002F start.disabled = true\n",[33,59170,59171],{"class":35,"line":18014},[33,59172,59173],{"class":60},"        \u002F\u002F end.disabled = true\n",[33,59175,59176],{"class":35,"line":18020},[33,59177,59178],{"class":60},"        \u002F\u002F 可以合起来写\n",[33,59180,59181,59184,59186,59189,59191],{"class":35,"line":18034},[33,59182,59183],{"class":47},"        start.disabled ",[33,59185,73],{"class":39},[33,59187,59188],{"class":47}," end.disabled ",[33,59190,73],{"class":39},[33,59192,59193],{"class":76}," true\n",[33,59195,59196],{"class":35,"line":18047},[33,59197,53651],{"class":47},[33,59199,59200],{"class":35,"line":18052},[33,59201,34714],{"class":47},[33,59203,59204],{"class":35,"line":18066},[33,59205,59206],{"class":60},"    \u002F\u002F 1.2 关闭按钮模块\n",[33,59208,59209,59211,59213,59215,59217,59219,59221,59224],{"class":35,"line":18071},[33,59210,12472],{"class":39},[33,59212,5599],{"class":76},[33,59214,14815],{"class":39},[33,59216,55649],{"class":47},[33,59218,55652],{"class":43},[33,59220,345],{"class":47},[33,59222,59223],{"class":119},"'.end'",[33,59225,884],{"class":47},[33,59227,59228,59231,59233,59235,59237,59239,59241],{"class":35,"line":18077},[33,59229,59230],{"class":47},"    end.",[33,59232,59066],{"class":43},[33,59234,345],{"class":47},[33,59236,59071],{"class":119},[33,59238,13686],{"class":47},[33,59240,55702],{"class":39},[33,59242,55705],{"class":47},[33,59244,59245,59248],{"class":35,"line":18082},[33,59246,59247],{"class":43},"      clearInterval",[33,59249,59250],{"class":47},"(timerId)\n",[33,59252,59253],{"class":35,"line":18096},[33,59254,59255],{"class":60},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[33,59257,59258,59261,59264,59267,59269],{"class":35,"line":18101},[33,59259,59260],{"class":47},"      arr.",[33,59262,59263],{"class":43},"splice",[33,59265,59266],{"class":47},"(random, ",[33,59268,701],{"class":76},[33,59270,884],{"class":47},[33,59272,59273],{"class":35,"line":18106},[33,59274,34714],{"class":47},[33,59276,59277],{"class":35,"line":18120},[33,59278,160],{"emptyLinePlaceholder":159},[33,59280,59281,59283,59285],{"class":35,"line":18132},[33,59282,53670],{"class":47},[33,59284,53066],{"class":52553},[33,59286,52560],{"class":47},[33,59288,59289,59291,59293],{"class":35,"line":18137},[33,59290,53038],{"class":47},[33,59292,53053],{"class":52553},[33,59294,52560],{"class":47},[33,59296,59297],{"class":35,"line":18150},[33,59298,160],{"emptyLinePlaceholder":159},[33,59300,59301,59303,59305],{"class":35,"line":18155},[33,59302,53038],{"class":47},[33,59304,51888],{"class":52553},[33,59306,52560],{"class":47},[14,59308,59309],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[1599,59311,59313],{"id":59312},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[23,59315,59317],{"className":51886,"code":59316,"language":51888,"meta":28,"style":28},"\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",[30,59318,59319,59329,59343,59347,59355,59369,59389,59401,59409,59413,59421,59433,59441,59460,59477,59493,59503,59507,59515,59523,59527],{"__ignoreMap":28},[33,59320,59321,59323,59325,59327],{"class":35,"line":36},[33,59322,52550],{"class":47},[33,59324,52554],{"class":52553},[33,59326,52557],{"class":43},[33,59328,52560],{"class":47},[33,59330,59331,59333,59335,59337,59339,59341],{"class":35,"line":51},[33,59332,875],{"class":47},[33,59334,51888],{"class":52553},[33,59336,52569],{"class":43},[33,59338,73],{"class":47},[33,59340,52574],{"class":119},[33,59342,52560],{"class":47},[33,59344,59345],{"class":35,"line":57},[33,59346,160],{"emptyLinePlaceholder":159},[33,59348,59349,59351,59353],{"class":35,"line":64},[33,59350,875],{"class":47},[33,59352,52587],{"class":52553},[33,59354,52560],{"class":47},[33,59356,59357,59359,59361,59363,59365,59367],{"class":35,"line":83},[33,59358,53397],{"class":47},[33,59360,52597],{"class":52553},[33,59362,52600],{"class":43},[33,59364,73],{"class":47},[33,59366,52605],{"class":119},[33,59368,52560],{"class":47},[33,59370,59371,59373,59375,59377,59379,59381,59383,59385,59387],{"class":35,"line":89},[33,59372,53397],{"class":47},[33,59374,52597],{"class":52553},[33,59376,16171],{"class":43},[33,59378,73],{"class":47},[33,59380,52644],{"class":119},[33,59382,52624],{"class":43},[33,59384,73],{"class":47},[33,59386,52651],{"class":119},[33,59388,52560],{"class":47},[33,59390,59391,59393,59395,59397,59399],{"class":35,"line":98},[33,59392,53397],{"class":47},[33,59394,52660],{"class":52553},[33,59396,52663],{"class":47},[33,59398,52660],{"class":52553},[33,59400,52560],{"class":47},[33,59402,59403,59405,59407],{"class":35,"line":110},[33,59404,53038],{"class":47},[33,59406,52587],{"class":52553},[33,59408,52560],{"class":47},[33,59410,59411],{"class":35,"line":134},[33,59412,160],{"emptyLinePlaceholder":159},[33,59414,59415,59417,59419],{"class":35,"line":156},[33,59416,875],{"class":47},[33,59418,53053],{"class":52553},[33,59420,52560],{"class":47},[33,59422,59423,59425,59427,59429,59431],{"class":35,"line":163},[33,59424,53397],{"class":47},[33,59426,55140],{"class":52553},[33,59428,55146],{"class":47},[33,59430,55140],{"class":52553},[33,59432,52560],{"class":47},[33,59434,59435,59437,59439],{"class":35,"line":169},[33,59436,53397],{"class":47},[33,59438,53066],{"class":52553},[33,59440,52560],{"class":47},[33,59442,59443,59445,59447,59449,59451,59453,59455,59458],{"class":35,"line":175},[33,59444,12472],{"class":39},[33,59446,55644],{"class":76},[33,59448,14815],{"class":39},[33,59450,55649],{"class":47},[33,59452,55652],{"class":43},[33,59454,345],{"class":47},[33,59456,59457],{"class":119},"'button'",[33,59459,884],{"class":47},[33,59461,59462,59465,59467,59469,59471,59473,59475],{"class":35,"line":181},[33,59463,59464],{"class":47},"    btn.",[33,59466,59066],{"class":43},[33,59468,345],{"class":47},[33,59470,59071],{"class":119},[33,59472,13686],{"class":47},[33,59474,55702],{"class":39},[33,59476,55705],{"class":47},[33,59478,59479,59482,59484,59486,59489,59491],{"class":35,"line":196},[33,59480,59481],{"class":39},"      const",[33,59483,3662],{"class":76},[33,59485,14815],{"class":39},[33,59487,59488],{"class":47}," Math.",[33,59490,59113],{"class":43},[33,59492,48],{"class":47},[33,59494,59495,59498,59501],{"class":35,"line":213},[33,59496,59497],{"class":47},"      console.",[33,59499,59500],{"class":43},"log",[33,59502,1640],{"class":47},[33,59504,59505],{"class":35,"line":228},[33,59506,34714],{"class":47},[33,59508,59509,59511,59513],{"class":35,"line":1345},[33,59510,53670],{"class":47},[33,59512,53066],{"class":52553},[33,59514,52560],{"class":47},[33,59516,59517,59519,59521],{"class":35,"line":1350},[33,59518,53038],{"class":47},[33,59520,53053],{"class":52553},[33,59522,52560],{"class":47},[33,59524,59525],{"class":35,"line":1359},[33,59526,160],{"emptyLinePlaceholder":159},[33,59528,59529,59531,59533],{"class":35,"line":1364},[33,59530,53038],{"class":47},[33,59532,51888],{"class":52553},[33,59534,52560],{"class":47},[14,59536,59537],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,59539,59540],{},"常量不可以重新赋值",[14,59542,59543],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[23,59545,59547],{"className":51886,"code":59546,"language":51888,"meta":28,"style":28},"\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",[30,59548,59549,59559,59573,59577,59585,59599,59619,59631,59639,59643,59651,59663,59671,59682,59700,59716,59730,59738,59742,59750,59758,59762],{"__ignoreMap":28},[33,59550,59551,59553,59555,59557],{"class":35,"line":36},[33,59552,52550],{"class":47},[33,59554,52554],{"class":52553},[33,59556,52557],{"class":43},[33,59558,52560],{"class":47},[33,59560,59561,59563,59565,59567,59569,59571],{"class":35,"line":51},[33,59562,875],{"class":47},[33,59564,51888],{"class":52553},[33,59566,52569],{"class":43},[33,59568,73],{"class":47},[33,59570,52574],{"class":119},[33,59572,52560],{"class":47},[33,59574,59575],{"class":35,"line":57},[33,59576,160],{"emptyLinePlaceholder":159},[33,59578,59579,59581,59583],{"class":35,"line":64},[33,59580,875],{"class":47},[33,59582,52587],{"class":52553},[33,59584,52560],{"class":47},[33,59586,59587,59589,59591,59593,59595,59597],{"class":35,"line":83},[33,59588,53397],{"class":47},[33,59590,52597],{"class":52553},[33,59592,52600],{"class":43},[33,59594,73],{"class":47},[33,59596,52605],{"class":119},[33,59598,52560],{"class":47},[33,59600,59601,59603,59605,59607,59609,59611,59613,59615,59617],{"class":35,"line":89},[33,59602,53397],{"class":47},[33,59604,52597],{"class":52553},[33,59606,16171],{"class":43},[33,59608,73],{"class":47},[33,59610,52644],{"class":119},[33,59612,52624],{"class":43},[33,59614,73],{"class":47},[33,59616,52651],{"class":119},[33,59618,52560],{"class":47},[33,59620,59621,59623,59625,59627,59629],{"class":35,"line":98},[33,59622,53397],{"class":47},[33,59624,52660],{"class":52553},[33,59626,52663],{"class":47},[33,59628,52660],{"class":52553},[33,59630,52560],{"class":47},[33,59632,59633,59635,59637],{"class":35,"line":110},[33,59634,53038],{"class":47},[33,59636,52587],{"class":52553},[33,59638,52560],{"class":47},[33,59640,59641],{"class":35,"line":134},[33,59642,160],{"emptyLinePlaceholder":159},[33,59644,59645,59647,59649],{"class":35,"line":156},[33,59646,875],{"class":47},[33,59648,53053],{"class":52553},[33,59650,52560],{"class":47},[33,59652,59653,59655,59657,59659,59661],{"class":35,"line":163},[33,59654,53397],{"class":47},[33,59656,55140],{"class":52553},[33,59658,55146],{"class":47},[33,59660,55140],{"class":52553},[33,59662,52560],{"class":47},[33,59664,59665,59667,59669],{"class":35,"line":169},[33,59666,53397],{"class":47},[33,59668,53066],{"class":52553},[33,59670,52560],{"class":47},[33,59672,59673,59675,59677,59679],{"class":35,"line":175},[33,59674,12472],{"class":39},[33,59676,3662],{"class":76},[33,59678,14815],{"class":39},[33,59680,59681],{"class":76}," 10\n",[33,59683,59684,59686,59688,59690,59692,59694,59696,59698],{"class":35,"line":181},[33,59685,12472],{"class":39},[33,59687,55644],{"class":76},[33,59689,14815],{"class":39},[33,59691,55649],{"class":47},[33,59693,55652],{"class":43},[33,59695,345],{"class":47},[33,59697,59457],{"class":119},[33,59699,884],{"class":47},[33,59701,59702,59704,59706,59708,59710,59712,59714],{"class":35,"line":196},[33,59703,59464],{"class":47},[33,59705,59066],{"class":43},[33,59707,345],{"class":47},[33,59709,59071],{"class":119},[33,59711,13686],{"class":47},[33,59713,55702],{"class":39},[33,59715,55705],{"class":47},[33,59717,59718,59720,59722,59724,59726,59728],{"class":35,"line":213},[33,59719,59481],{"class":39},[33,59721,3662],{"class":76},[33,59723,14815],{"class":39},[33,59725,59488],{"class":47},[33,59727,59113],{"class":43},[33,59729,48],{"class":47},[33,59731,59732,59734,59736],{"class":35,"line":228},[33,59733,59497],{"class":47},[33,59735,59500],{"class":43},[33,59737,1640],{"class":47},[33,59739,59740],{"class":35,"line":1345},[33,59741,34714],{"class":47},[33,59743,59744,59746,59748],{"class":35,"line":1350},[33,59745,53670],{"class":47},[33,59747,53066],{"class":52553},[33,59749,52560],{"class":47},[33,59751,59752,59754,59756],{"class":35,"line":1359},[33,59753,53038],{"class":47},[33,59755,53053],{"class":52553},[33,59757,52560],{"class":47},[33,59759,59760],{"class":35,"line":1364},[33,59761,160],{"emptyLinePlaceholder":159},[33,59763,59764,59766,59768],{"class":35,"line":1370},[33,59765,53038],{"class":47},[33,59767,51888],{"class":52553},[33,59769,52560],{"class":47},[14,59771,59772],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[23,59774,59776],{"className":51886,"code":59775,"language":51888,"meta":28,"style":28},"\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",[30,59777,59778,59788,59802,59806,59814,59828,59848,59860,59868,59872,59880,59892,59900,59910,59928,59944,59957,59965,59969,59977,59985,59989],{"__ignoreMap":28},[33,59779,59780,59782,59784,59786],{"class":35,"line":36},[33,59781,52550],{"class":47},[33,59783,52554],{"class":52553},[33,59785,52557],{"class":43},[33,59787,52560],{"class":47},[33,59789,59790,59792,59794,59796,59798,59800],{"class":35,"line":51},[33,59791,875],{"class":47},[33,59793,51888],{"class":52553},[33,59795,52569],{"class":43},[33,59797,73],{"class":47},[33,59799,52574],{"class":119},[33,59801,52560],{"class":47},[33,59803,59804],{"class":35,"line":57},[33,59805,160],{"emptyLinePlaceholder":159},[33,59807,59808,59810,59812],{"class":35,"line":64},[33,59809,875],{"class":47},[33,59811,52587],{"class":52553},[33,59813,52560],{"class":47},[33,59815,59816,59818,59820,59822,59824,59826],{"class":35,"line":83},[33,59817,53397],{"class":47},[33,59819,52597],{"class":52553},[33,59821,52600],{"class":43},[33,59823,73],{"class":47},[33,59825,52605],{"class":119},[33,59827,52560],{"class":47},[33,59829,59830,59832,59834,59836,59838,59840,59842,59844,59846],{"class":35,"line":89},[33,59831,53397],{"class":47},[33,59833,52597],{"class":52553},[33,59835,16171],{"class":43},[33,59837,73],{"class":47},[33,59839,52644],{"class":119},[33,59841,52624],{"class":43},[33,59843,73],{"class":47},[33,59845,52651],{"class":119},[33,59847,52560],{"class":47},[33,59849,59850,59852,59854,59856,59858],{"class":35,"line":98},[33,59851,53397],{"class":47},[33,59853,52660],{"class":52553},[33,59855,52663],{"class":47},[33,59857,52660],{"class":52553},[33,59859,52560],{"class":47},[33,59861,59862,59864,59866],{"class":35,"line":110},[33,59863,53038],{"class":47},[33,59865,52587],{"class":52553},[33,59867,52560],{"class":47},[33,59869,59870],{"class":35,"line":134},[33,59871,160],{"emptyLinePlaceholder":159},[33,59873,59874,59876,59878],{"class":35,"line":156},[33,59875,875],{"class":47},[33,59877,53053],{"class":52553},[33,59879,52560],{"class":47},[33,59881,59882,59884,59886,59888,59890],{"class":35,"line":163},[33,59883,53397],{"class":47},[33,59885,55140],{"class":52553},[33,59887,55146],{"class":47},[33,59889,55140],{"class":52553},[33,59891,52560],{"class":47},[33,59893,59894,59896,59898],{"class":35,"line":169},[33,59895,53397],{"class":47},[33,59897,53066],{"class":52553},[33,59899,52560],{"class":47},[33,59901,59902,59904,59906,59908],{"class":35,"line":175},[33,59903,12472],{"class":39},[33,59905,3662],{"class":76},[33,59907,14815],{"class":39},[33,59909,59681],{"class":76},[33,59911,59912,59914,59916,59918,59920,59922,59924,59926],{"class":35,"line":181},[33,59913,12472],{"class":39},[33,59915,55644],{"class":76},[33,59917,14815],{"class":39},[33,59919,55649],{"class":47},[33,59921,55652],{"class":43},[33,59923,345],{"class":47},[33,59925,59457],{"class":119},[33,59927,884],{"class":47},[33,59929,59930,59932,59934,59936,59938,59940,59942],{"class":35,"line":196},[33,59931,59464],{"class":47},[33,59933,59066],{"class":43},[33,59935,345],{"class":47},[33,59937,59071],{"class":119},[33,59939,13686],{"class":47},[33,59941,55702],{"class":39},[33,59943,55705],{"class":47},[33,59945,59946,59949,59951,59953,59955],{"class":35,"line":213},[33,59947,59948],{"class":47},"      num ",[33,59950,73],{"class":39},[33,59952,59488],{"class":47},[33,59954,59113],{"class":43},[33,59956,48],{"class":47},[33,59958,59959,59961,59963],{"class":35,"line":228},[33,59960,59497],{"class":47},[33,59962,59500],{"class":43},[33,59964,1640],{"class":47},[33,59966,59967],{"class":35,"line":1345},[33,59968,34714],{"class":47},[33,59970,59971,59973,59975],{"class":35,"line":1350},[33,59972,53670],{"class":47},[33,59974,53066],{"class":52553},[33,59976,52560],{"class":47},[33,59978,59979,59981,59983],{"class":35,"line":1359},[33,59980,53038],{"class":47},[33,59982,53053],{"class":52553},[33,59984,52560],{"class":47},[33,59986,59987],{"class":35,"line":1364},[33,59988,160],{"emptyLinePlaceholder":159},[33,59990,59991,59993,59995],{"class":35,"line":1370},[33,59992,53038],{"class":47},[33,59994,51888],{"class":52553},[33,59996,52560],{"class":47},[14,59998,59999],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[1599,60001,60003],{"id":60002},"_324-事件监听版本","3.2.4 事件监听版本",[14,60005,60006],{},[2918,60007],{"alt":28,"src":60008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,60010,60011],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,60013,60014],{},"这种方式会覆盖前边的事件监听:",[23,60016,60018],{"className":51886,"code":60017,"language":51888,"meta":28,"style":28},"\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",[30,60019,60020,60030,60044,60048,60056,60070,60090,60102,60110,60114,60122,60134,60142,60160,60174,60185,60189,60201,60211,60215,60223,60231,60235],{"__ignoreMap":28},[33,60021,60022,60024,60026,60028],{"class":35,"line":36},[33,60023,52550],{"class":47},[33,60025,52554],{"class":52553},[33,60027,52557],{"class":43},[33,60029,52560],{"class":47},[33,60031,60032,60034,60036,60038,60040,60042],{"class":35,"line":51},[33,60033,875],{"class":47},[33,60035,51888],{"class":52553},[33,60037,52569],{"class":43},[33,60039,73],{"class":47},[33,60041,52574],{"class":119},[33,60043,52560],{"class":47},[33,60045,60046],{"class":35,"line":57},[33,60047,160],{"emptyLinePlaceholder":159},[33,60049,60050,60052,60054],{"class":35,"line":64},[33,60051,875],{"class":47},[33,60053,52587],{"class":52553},[33,60055,52560],{"class":47},[33,60057,60058,60060,60062,60064,60066,60068],{"class":35,"line":83},[33,60059,53397],{"class":47},[33,60061,52597],{"class":52553},[33,60063,52600],{"class":43},[33,60065,73],{"class":47},[33,60067,52605],{"class":119},[33,60069,52560],{"class":47},[33,60071,60072,60074,60076,60078,60080,60082,60084,60086,60088],{"class":35,"line":89},[33,60073,53397],{"class":47},[33,60075,52597],{"class":52553},[33,60077,16171],{"class":43},[33,60079,73],{"class":47},[33,60081,52644],{"class":119},[33,60083,52624],{"class":43},[33,60085,73],{"class":47},[33,60087,52651],{"class":119},[33,60089,52560],{"class":47},[33,60091,60092,60094,60096,60098,60100],{"class":35,"line":98},[33,60093,53397],{"class":47},[33,60095,52660],{"class":52553},[33,60097,52663],{"class":47},[33,60099,52660],{"class":52553},[33,60101,52560],{"class":47},[33,60103,60104,60106,60108],{"class":35,"line":110},[33,60105,53038],{"class":47},[33,60107,52587],{"class":52553},[33,60109,52560],{"class":47},[33,60111,60112],{"class":35,"line":134},[33,60113,160],{"emptyLinePlaceholder":159},[33,60115,60116,60118,60120],{"class":35,"line":156},[33,60117,875],{"class":47},[33,60119,53053],{"class":52553},[33,60121,52560],{"class":47},[33,60123,60124,60126,60128,60130,60132],{"class":35,"line":163},[33,60125,53397],{"class":47},[33,60127,55140],{"class":52553},[33,60129,55146],{"class":47},[33,60131,55140],{"class":52553},[33,60133,52560],{"class":47},[33,60135,60136,60138,60140],{"class":35,"line":169},[33,60137,53397],{"class":47},[33,60139,53066],{"class":52553},[33,60141,52560],{"class":47},[33,60143,60144,60146,60148,60150,60152,60154,60156,60158],{"class":35,"line":175},[33,60145,12472],{"class":39},[33,60147,55644],{"class":76},[33,60149,14815],{"class":39},[33,60151,55649],{"class":47},[33,60153,55652],{"class":43},[33,60155,345],{"class":47},[33,60157,59457],{"class":119},[33,60159,884],{"class":47},[33,60161,60162,60164,60167,60169,60172],{"class":35,"line":181},[33,60163,59464],{"class":47},[33,60165,60166],{"class":43},"onclick",[33,60168,14815],{"class":39},[33,60170,60171],{"class":39}," function",[33,60173,55705],{"class":47},[33,60175,60176,60179,60181,60183],{"class":35,"line":196},[33,60177,60178],{"class":43},"      alert",[33,60180,345],{"class":47},[33,60182,2074],{"class":76},[33,60184,884],{"class":47},[33,60186,60187],{"class":35,"line":213},[33,60188,916],{"class":47},[33,60190,60191,60193,60195,60197,60199],{"class":35,"line":228},[33,60192,59464],{"class":47},[33,60194,60166],{"class":43},[33,60196,14815],{"class":39},[33,60198,60171],{"class":39},[33,60200,55705],{"class":47},[33,60202,60203,60205,60207,60209],{"class":35,"line":1345},[33,60204,60178],{"class":43},[33,60206,345],{"class":47},[33,60208,2349],{"class":76},[33,60210,884],{"class":47},[33,60212,60213],{"class":35,"line":1350},[33,60214,916],{"class":47},[33,60216,60217,60219,60221],{"class":35,"line":1359},[33,60218,53670],{"class":47},[33,60220,53066],{"class":52553},[33,60222,52560],{"class":47},[33,60224,60225,60227,60229],{"class":35,"line":1364},[33,60226,53038],{"class":47},[33,60228,53053],{"class":52553},[33,60230,52560],{"class":47},[33,60232,60233],{"class":35,"line":1370},[33,60234,160],{"emptyLinePlaceholder":159},[33,60236,60237,60239,60241],{"class":35,"line":1425},[33,60238,53038],{"class":47},[33,60240,51888],{"class":52553},[33,60242,52560],{"class":47},[14,60244,60245],{},"只要点击就输出结果为22,前边11被覆盖了",[23,60247,60249],{"className":51886,"code":60248,"language":51888,"meta":28,"style":28},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[30,60250,60251,60256,60261,60265,60270,60275],{"__ignoreMap":28},[33,60252,60253],{"class":35,"line":36},[33,60254,60255],{"class":47},"  btn.addEventListener('click', function () {\n",[33,60257,60258],{"class":35,"line":51},[33,60259,60260],{"class":47},"      alert(11)\n",[33,60262,60263],{"class":35,"line":57},[33,60264,34714],{"class":47},[33,60266,60267],{"class":35,"line":64},[33,60268,60269],{"class":47},"    btn.addEventListener('click', function () {\n",[33,60271,60272],{"class":35,"line":83},[33,60273,60274],{"class":47},"      alert(22)\n",[33,60276,60277],{"class":35,"line":89},[33,60278,34714],{"class":47},[14,60280,60281],{},"点击第一次输出11,第二次点击为22",[1599,60283,60285],{"id":60284},"_325-事件类型","3.2.5 事件类型",[14,60287,60288],{},[2918,60289],{"alt":28,"src":60290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23249,60292,60294],{"id":60293},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,60296,60297],{},"补充知识:",[14,60299,60300],{},"轮播图自动播放模块,可以使用",[14,60302,60303],{},"let timerId = setInterval(function () {",[14,60305,60306],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,60308,60309],{},"用js方法模拟进行点击事件,click必须加()",[14,60311,60312],{},"next.click()",[14,60314,60315],{},"}, 1000)",[14,60317,60318],{},[2918,60319],{"alt":28,"src":60320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[23,60322,60324],{"className":54320,"code":60323,"language":54322,"meta":28,"style":28},"\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",[30,60325,60326,60330,60340,60354,60358,60366,60381,60401,60421,60434,60442,60447,60452,60456,60460,60465,60470,60475,60480,60484,60488,60493,60498,60503,60507,60511,60516,60520,60525,60530,60534,60538,60543,60548,60553,60558,60563,60567,60571,60576,60581,60586,60591,60596,60600,60604,60609,60614,60619,60624,60629,60634,60639,60644,60649,60654,60658,60662,60667,60672,60676,60680,60685,60690,60694,60699,60704,60708,60712,60717,60721,60726,60731,60735,60740,60744,60748,60753,60758,60763,60768,60773,60778,60783,60787,60791,60795,60800,60805,60810,60815,60819,60827,60835,60839,60847,60862,60876,60897,60905,60919,60932,60947,60966,60978,60990,61002,61014,61026,61038,61050,61058,61073,61097,61121,61129,61137,61145,61153,61158,61163,61168,61173,61178,61183,61188,61193,61198,61203,61207,61212,61217,61222,61227,61232,61237,61242,61247,61252,61256,61261,61266,61271,61276,61281,61286,61291,61296,61301,61306,61311,61316,61320,61324,61329,61334,61339,61343,61348,61353,61358,61363,61368,61372,61377,61381,61385,61389,61393,61397,61401,61406,61411,61416,61421,61426,61431,61436,61441,61446,61450,61454,61459,61464,61469,61474,61479,61483,61488,61493,61498,61503,61508,61513,61517,61521,61526,61530,61535,61539,61544,61549,61554,61559,61564,61569,61573,61581,61589,61593],{"__ignoreMap":28},[33,60327,60328],{"class":35,"line":36},[33,60329,160],{"emptyLinePlaceholder":159},[33,60331,60332,60334,60336,60338],{"class":35,"line":51},[33,60333,52550],{"class":47},[33,60335,52554],{"class":39},[33,60337,52557],{"class":76},[33,60339,52560],{"class":47},[33,60341,60342,60344,60346,60348,60350,60352],{"class":35,"line":57},[33,60343,875],{"class":47},[33,60345,51888],{"class":52553},[33,60347,52569],{"class":43},[33,60349,73],{"class":47},[33,60351,52574],{"class":119},[33,60353,52560],{"class":47},[33,60355,60356],{"class":35,"line":64},[33,60357,160],{"emptyLinePlaceholder":159},[33,60359,60360,60362,60364],{"class":35,"line":83},[33,60361,875],{"class":47},[33,60363,52587],{"class":52553},[33,60365,52560],{"class":47},[33,60367,60368,60370,60372,60374,60376,60378],{"class":35,"line":89},[33,60369,53397],{"class":47},[33,60371,52597],{"class":52553},[33,60373,52600],{"class":43},[33,60375,73],{"class":47},[33,60377,52605],{"class":119},[33,60379,60380],{"class":47}," \u002F>\n",[33,60382,60383,60385,60387,60389,60391,60393,60395,60397,60399],{"class":35,"line":98},[33,60384,53397],{"class":47},[33,60386,52597],{"class":52553},[33,60388,52616],{"class":43},[33,60390,73],{"class":47},[33,60392,52621],{"class":119},[33,60394,52624],{"class":43},[33,60396,73],{"class":47},[33,60398,52629],{"class":119},[33,60400,60380],{"class":47},[33,60402,60403,60405,60407,60409,60411,60413,60415,60417,60419],{"class":35,"line":110},[33,60404,53397],{"class":47},[33,60406,52597],{"class":52553},[33,60408,16171],{"class":43},[33,60410,73],{"class":47},[33,60412,52644],{"class":119},[33,60414,52624],{"class":43},[33,60416,73],{"class":47},[33,60418,52651],{"class":119},[33,60420,60380],{"class":47},[33,60422,60423,60425,60427,60430,60432],{"class":35,"line":134},[33,60424,53397],{"class":47},[33,60426,52660],{"class":52553},[33,60428,60429],{"class":47},">轮播图点击切换\u003C\u002F",[33,60431,52660],{"class":52553},[33,60433,52560],{"class":47},[33,60435,60436,60438,60440],{"class":35,"line":156},[33,60437,53397],{"class":47},[33,60439,1544],{"class":52553},[33,60441,52560],{"class":47},[33,60443,60444],{"class":35,"line":163},[33,60445,60446],{"class":47},"    * {\n",[33,60448,60449],{"class":35,"line":169},[33,60450,60451],{"class":47},"      box-sizing: border-box;\n",[33,60453,60454],{"class":35,"line":175},[33,60455,916],{"class":47},[33,60457,60458],{"class":35,"line":181},[33,60459,160],{"emptyLinePlaceholder":159},[33,60461,60462],{"class":35,"line":196},[33,60463,60464],{"class":47},"    .slider {\n",[33,60466,60467],{"class":35,"line":213},[33,60468,60469],{"class":47},"      width: 560px;\n",[33,60471,60472],{"class":35,"line":228},[33,60473,60474],{"class":47},"      height: 400px;\n",[33,60476,60477],{"class":35,"line":1345},[33,60478,60479],{"class":47},"      overflow: hidden;\n",[33,60481,60482],{"class":35,"line":1350},[33,60483,916],{"class":47},[33,60485,60486],{"class":35,"line":1359},[33,60487,160],{"emptyLinePlaceholder":159},[33,60489,60490],{"class":35,"line":1364},[33,60491,60492],{"class":47},"    .slider-wrapper {\n",[33,60494,60495],{"class":35,"line":1370},[33,60496,60497],{"class":47},"      width: 100%;\n",[33,60499,60500],{"class":35,"line":1425},[33,60501,60502],{"class":47},"      height: 320px;\n",[33,60504,60505],{"class":35,"line":1438},[33,60506,916],{"class":47},[33,60508,60509],{"class":35,"line":1451},[33,60510,160],{"emptyLinePlaceholder":159},[33,60512,60513],{"class":35,"line":1457},[33,60514,60515],{"class":47},"    .slider-wrapper img {\n",[33,60517,60518],{"class":35,"line":1466},[33,60519,60497],{"class":47},[33,60521,60522],{"class":35,"line":1471},[33,60523,60524],{"class":47},"      height: 100%;\n",[33,60526,60527],{"class":35,"line":1477},[33,60528,60529],{"class":47},"      display: block;\n",[33,60531,60532],{"class":35,"line":1504},[33,60533,916],{"class":47},[33,60535,60536],{"class":35,"line":1509},[33,60537,160],{"emptyLinePlaceholder":159},[33,60539,60540],{"class":35,"line":1525},[33,60541,60542],{"class":47},"    .slider-footer {\n",[33,60544,60545],{"class":35,"line":1535},[33,60546,60547],{"class":47},"      height: 80px;\n",[33,60549,60550],{"class":35,"line":1540},[33,60551,60552],{"class":47},"      background-color: rgb(100, 67, 68);\n",[33,60554,60555],{"class":35,"line":4027},[33,60556,60557],{"class":47},"      padding: 12px 12px 0 12px;\n",[33,60559,60560],{"class":35,"line":4032},[33,60561,60562],{"class":47},"      position: relative;\n",[33,60564,60565],{"class":35,"line":9199},[33,60566,916],{"class":47},[33,60568,60569],{"class":35,"line":9223},[33,60570,160],{"emptyLinePlaceholder":159},[33,60572,60573],{"class":35,"line":9228},[33,60574,60575],{"class":47},"    .slider-footer .toggle {\n",[33,60577,60578],{"class":35,"line":9234},[33,60579,60580],{"class":47},"      position: absolute;\n",[33,60582,60583],{"class":35,"line":9261},[33,60584,60585],{"class":47},"      right: 0;\n",[33,60587,60588],{"class":35,"line":9266},[33,60589,60590],{"class":47},"      top: 12px;\n",[33,60592,60593],{"class":35,"line":9272},[33,60594,60595],{"class":47},"      display: flex;\n",[33,60597,60598],{"class":35,"line":9284},[33,60599,916],{"class":47},[33,60601,60602],{"class":35,"line":9296},[33,60603,160],{"emptyLinePlaceholder":159},[33,60605,60606],{"class":35,"line":9308},[33,60607,60608],{"class":47},"    .slider-footer .toggle button {\n",[33,60610,60611],{"class":35,"line":10967},[33,60612,60613],{"class":47},"      margin-right: 12px;\n",[33,60615,60616],{"class":35,"line":10992},[33,60617,60618],{"class":47},"      width: 28px;\n",[33,60620,60621],{"class":35,"line":11015},[33,60622,60623],{"class":47},"      height: 28px;\n",[33,60625,60626],{"class":35,"line":11039},[33,60627,60628],{"class":47},"      appearance: none;\n",[33,60630,60631],{"class":35,"line":11044},[33,60632,60633],{"class":47},"      border: none;\n",[33,60635,60636],{"class":35,"line":11049},[33,60637,60638],{"class":47},"      background: rgba(255, 255, 255, 0.1);\n",[33,60640,60641],{"class":35,"line":11054},[33,60642,60643],{"class":47},"      color: #fff;\n",[33,60645,60646],{"class":35,"line":11063},[33,60647,60648],{"class":47},"      border-radius: 4px;\n",[33,60650,60651],{"class":35,"line":11068},[33,60652,60653],{"class":47},"      cursor: pointer;\n",[33,60655,60656],{"class":35,"line":11074},[33,60657,916],{"class":47},[33,60659,60660],{"class":35,"line":11095},[33,60661,160],{"emptyLinePlaceholder":159},[33,60663,60664],{"class":35,"line":11101},[33,60665,60666],{"class":47},"    .slider-footer .toggle button:hover {\n",[33,60668,60669],{"class":35,"line":11115},[33,60670,60671],{"class":47},"      background: rgba(255, 255, 255, 0.2);\n",[33,60673,60674],{"class":35,"line":11121},[33,60675,916],{"class":47},[33,60677,60678],{"class":35,"line":11148},[33,60679,160],{"emptyLinePlaceholder":159},[33,60681,60682],{"class":35,"line":11157},[33,60683,60684],{"class":47},"    .slider-footer p {\n",[33,60686,60687],{"class":35,"line":11163},[33,60688,60689],{"class":47},"      margin: 0;\n",[33,60691,60692],{"class":35,"line":11171},[33,60693,60643],{"class":47},[33,60695,60696],{"class":35,"line":11176},[33,60697,60698],{"class":47},"      font-size: 18px;\n",[33,60700,60701],{"class":35,"line":17855},[33,60702,60703],{"class":47},"      margin-bottom: 10px;\n",[33,60705,60706],{"class":35,"line":17861},[33,60707,916],{"class":47},[33,60709,60710],{"class":35,"line":17884},[33,60711,160],{"emptyLinePlaceholder":159},[33,60713,60714],{"class":35,"line":17890},[33,60715,60716],{"class":47},"    .slider-indicator {\n",[33,60718,60719],{"class":35,"line":17913},[33,60720,60689],{"class":47},[33,60722,60723],{"class":35,"line":17927},[33,60724,60725],{"class":47},"      padding: 0;\n",[33,60727,60728],{"class":35,"line":17947},[33,60729,60730],{"class":47},"      list-style: none;\n",[33,60732,60733],{"class":35,"line":17953},[33,60734,60595],{"class":47},[33,60736,60737],{"class":35,"line":17964},[33,60738,60739],{"class":47},"      align-items: center;\n",[33,60741,60742],{"class":35,"line":17987},[33,60743,916],{"class":47},[33,60745,60746],{"class":35,"line":18009},[33,60747,160],{"emptyLinePlaceholder":159},[33,60749,60750],{"class":35,"line":18014},[33,60751,60752],{"class":47},"    .slider-indicator li {\n",[33,60754,60755],{"class":35,"line":18020},[33,60756,60757],{"class":47},"      width: 8px;\n",[33,60759,60760],{"class":35,"line":18034},[33,60761,60762],{"class":47},"      height: 8px;\n",[33,60764,60765],{"class":35,"line":18047},[33,60766,60767],{"class":47},"      margin: 4px;\n",[33,60769,60770],{"class":35,"line":18052},[33,60771,60772],{"class":47},"      border-radius: 50%;\n",[33,60774,60775],{"class":35,"line":18066},[33,60776,60777],{"class":47},"      background: #fff;\n",[33,60779,60780],{"class":35,"line":18071},[33,60781,60782],{"class":47},"      opacity: 0.4;\n",[33,60784,60785],{"class":35,"line":18077},[33,60786,60653],{"class":47},[33,60788,60789],{"class":35,"line":18082},[33,60790,916],{"class":47},[33,60792,60793],{"class":35,"line":18096},[33,60794,160],{"emptyLinePlaceholder":159},[33,60796,60797],{"class":35,"line":18101},[33,60798,60799],{"class":47},"    .slider-indicator li.active {\n",[33,60801,60802],{"class":35,"line":18106},[33,60803,60804],{"class":47},"      width: 12px;\n",[33,60806,60807],{"class":35,"line":18120},[33,60808,60809],{"class":47},"      height: 12px;\n",[33,60811,60812],{"class":35,"line":18132},[33,60813,60814],{"class":47},"      opacity: 1;\n",[33,60816,60817],{"class":35,"line":18137},[33,60818,916],{"class":47},[33,60820,60821,60823,60825],{"class":35,"line":18150},[33,60822,53670],{"class":47},[33,60824,1544],{"class":52553},[33,60826,52560],{"class":47},[33,60828,60829,60831,60833],{"class":35,"line":18155},[33,60830,53038],{"class":47},[33,60832,52587],{"class":52553},[33,60834,52560],{"class":47},[33,60836,60837],{"class":35,"line":18160},[33,60838,160],{"emptyLinePlaceholder":159},[33,60840,60841,60843,60845],{"class":35,"line":18165},[33,60842,875],{"class":47},[33,60844,53053],{"class":52553},[33,60846,52560],{"class":47},[33,60848,60849,60851,60853,60855,60857,60860],{"class":35,"line":18178},[33,60850,53397],{"class":47},[33,60852,52864],{"class":52553},[33,60854,54739],{"class":43},[33,60856,73],{"class":47},[33,60858,60859],{"class":119},"\"slider\"",[33,60861,52560],{"class":47},[33,60863,60864,60866,60868,60870,60872,60874],{"class":35,"line":18183},[33,60865,52594],{"class":47},[33,60867,52864],{"class":52553},[33,60869,54739],{"class":43},[33,60871,73],{"class":47},[33,60873,56480],{"class":119},[33,60875,52560],{"class":47},[33,60877,60878,60880,60882,60884,60886,60889,60891,60893,60895],{"class":35,"line":33886},[33,60879,56487],{"class":47},[33,60881,2918],{"class":52553},[33,60883,56492],{"class":43},[33,60885,73],{"class":47},[33,60887,60888],{"class":119},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[33,60890,56500],{"class":43},[33,60892,73],{"class":47},[33,60894,1520],{"class":119},[33,60896,60380],{"class":47},[33,60898,60899,60901,60903],{"class":35,"line":33892},[33,60900,53029],{"class":47},[33,60902,52864],{"class":52553},[33,60904,52560],{"class":47},[33,60906,60907,60909,60911,60913,60915,60917],{"class":35,"line":33898},[33,60908,52594],{"class":47},[33,60910,52864],{"class":52553},[33,60912,54739],{"class":43},[33,60914,73],{"class":47},[33,60916,56527],{"class":119},[33,60918,52560],{"class":47},[33,60920,60921,60923,60925,60928,60930],{"class":35,"line":33904},[33,60922,56487],{"class":47},[33,60924,14],{"class":52553},[33,60926,60927],{"class":47},">对人类来说会不会太超前了？\u003C\u002F",[33,60929,14],{"class":52553},[33,60931,52560],{"class":47},[33,60933,60934,60936,60938,60940,60942,60945],{"class":35,"line":33910},[33,60935,56487],{"class":47},[33,60937,561],{"class":52553},[33,60939,54739],{"class":43},[33,60941,73],{"class":47},[33,60943,60944],{"class":119},"\"slider-indicator\"",[33,60946,52560],{"class":47},[33,60948,60949,60951,60953,60955,60957,60960,60962,60964],{"class":35,"line":33921},[33,60950,56555],{"class":47},[33,60952,564],{"class":52553},[33,60954,54739],{"class":43},[33,60956,73],{"class":47},[33,60958,60959],{"class":119},"\"active\"",[33,60961,56567],{"class":47},[33,60963,564],{"class":52553},[33,60965,52560],{"class":47},[33,60967,60968,60970,60972,60974,60976],{"class":35,"line":33927},[33,60969,56555],{"class":47},[33,60971,564],{"class":52553},[33,60973,56567],{"class":47},[33,60975,564],{"class":52553},[33,60977,52560],{"class":47},[33,60979,60980,60982,60984,60986,60988],{"class":35,"line":33947},[33,60981,56555],{"class":47},[33,60983,564],{"class":52553},[33,60985,56567],{"class":47},[33,60987,564],{"class":52553},[33,60989,52560],{"class":47},[33,60991,60992,60994,60996,60998,61000],{"class":35,"line":33953},[33,60993,56555],{"class":47},[33,60995,564],{"class":52553},[33,60997,56567],{"class":47},[33,60999,564],{"class":52553},[33,61001,52560],{"class":47},[33,61003,61004,61006,61008,61010,61012],{"class":35,"line":33964},[33,61005,56555],{"class":47},[33,61007,564],{"class":52553},[33,61009,56567],{"class":47},[33,61011,564],{"class":52553},[33,61013,52560],{"class":47},[33,61015,61016,61018,61020,61022,61024],{"class":35,"line":33970},[33,61017,56555],{"class":47},[33,61019,564],{"class":52553},[33,61021,56567],{"class":47},[33,61023,564],{"class":52553},[33,61025,52560],{"class":47},[33,61027,61028,61030,61032,61034,61036],{"class":35,"line":33976},[33,61029,56555],{"class":47},[33,61031,564],{"class":52553},[33,61033,56567],{"class":47},[33,61035,564],{"class":52553},[33,61037,52560],{"class":47},[33,61039,61040,61042,61044,61046,61048],{"class":35,"line":33982},[33,61041,56555],{"class":47},[33,61043,564],{"class":52553},[33,61045,56567],{"class":47},[33,61047,564],{"class":52553},[33,61049,52560],{"class":47},[33,61051,61052,61054,61056],{"class":35,"line":33988},[33,61053,56660],{"class":47},[33,61055,561],{"class":52553},[33,61057,52560],{"class":47},[33,61059,61060,61062,61064,61066,61068,61071],{"class":35,"line":33994},[33,61061,56487],{"class":47},[33,61063,52864],{"class":52553},[33,61065,54739],{"class":43},[33,61067,73],{"class":47},[33,61069,61070],{"class":119},"\"toggle\"",[33,61072,52560],{"class":47},[33,61074,61075,61077,61079,61081,61083,61086,61088,61091,61093,61095],{"class":35,"line":34000},[33,61076,56555],{"class":47},[33,61078,55140],{"class":52553},[33,61080,54739],{"class":43},[33,61082,73],{"class":47},[33,61084,61085],{"class":119},"\"prev\"",[33,61087,1265],{"class":47},[33,61089,61090],{"class":76},"&lt;",[33,61092,53038],{"class":47},[33,61094,55140],{"class":52553},[33,61096,52560],{"class":47},[33,61098,61099,61101,61103,61105,61107,61110,61112,61115,61117,61119],{"class":35,"line":34006},[33,61100,56555],{"class":47},[33,61102,55140],{"class":52553},[33,61104,54739],{"class":43},[33,61106,73],{"class":47},[33,61108,61109],{"class":119},"\"next\"",[33,61111,1265],{"class":47},[33,61113,61114],{"class":76},"&gt;",[33,61116,53038],{"class":47},[33,61118,55140],{"class":52553},[33,61120,52560],{"class":47},[33,61122,61123,61125,61127],{"class":35,"line":34026},[33,61124,56660],{"class":47},[33,61126,52864],{"class":52553},[33,61128,52560],{"class":47},[33,61130,61131,61133,61135],{"class":35,"line":34032},[33,61132,53029],{"class":47},[33,61134,52864],{"class":52553},[33,61136,52560],{"class":47},[33,61138,61139,61141,61143],{"class":35,"line":34048},[33,61140,53670],{"class":47},[33,61142,52864],{"class":52553},[33,61144,52560],{"class":47},[33,61146,61147,61149,61151],{"class":35,"line":34054},[33,61148,53397],{"class":47},[33,61150,53066],{"class":52553},[33,61152,52560],{"class":47},[33,61154,61155],{"class":35,"line":34068},[33,61156,61157],{"class":47},"    \u002F\u002F 1. 初始数据\n",[33,61159,61160],{"class":35,"line":34074},[33,61161,61162],{"class":47},"    const data = [\n",[33,61164,61165],{"class":35,"line":34089},[33,61166,61167],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[33,61169,61170],{"class":35,"line":34095},[33,61171,61172],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[33,61174,61175],{"class":35,"line":34104},[33,61176,61177],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[33,61179,61180],{"class":35,"line":34110},[33,61181,61182],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[33,61184,61185],{"class":35,"line":34119},[33,61186,61187],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[33,61189,61190],{"class":35,"line":34125},[33,61191,61192],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[33,61194,61195],{"class":35,"line":34131},[33,61196,61197],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[33,61199,61200],{"class":35,"line":34140},[33,61201,61202],{"class":47},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[33,61204,61205],{"class":35,"line":34146},[33,61206,54362],{"class":47},[33,61208,61209],{"class":35,"line":34157},[33,61210,61211],{"class":47},"    \u002F\u002F 获取元素\n",[33,61213,61214],{"class":35,"line":34163},[33,61215,61216],{"class":47},"    const img = document.querySelector('.slider-wrapper img')\n",[33,61218,61219],{"class":35,"line":34182},[33,61220,61221],{"class":47},"    const p = document.querySelector('.slider-footer p')\n",[33,61223,61224],{"class":35,"line":34188},[33,61225,61226],{"class":47},"    const footer = document.querySelector('.slider-footer')\n",[33,61228,61229],{"class":35,"line":34199},[33,61230,61231],{"class":47},"    \u002F\u002F 1. 右按钮业务\n",[33,61233,61234],{"class":35,"line":34205},[33,61235,61236],{"class":47},"    \u002F\u002F 1.1 获取右侧按钮 \n",[33,61238,61239],{"class":35,"line":34225},[33,61240,61241],{"class":47},"    const next = document.querySelector('.next')\n",[33,61243,61244],{"class":35,"line":34241},[33,61245,61246],{"class":47},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[33,61248,61249],{"class":35,"line":34247},[33,61250,61251],{"class":47},"    \u002F\u002F 1.2 注册点击事件\n",[33,61253,61254],{"class":35,"line":34261},[33,61255,160],{"emptyLinePlaceholder":159},[33,61257,61258],{"class":35,"line":34267},[33,61259,61260],{"class":47},"    next.addEventListener('click', function () {\n",[33,61262,61263],{"class":35,"line":34273},[33,61264,61265],{"class":47},"      \u002F\u002F console.log(11)\n",[33,61267,61268],{"class":35,"line":34284},[33,61269,61270],{"class":47},"      i++\n",[33,61272,61273],{"class":35,"line":34290},[33,61274,61275],{"class":47},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[33,61277,61278],{"class":35,"line":34296},[33,61279,61280],{"class":47},"      \u002F\u002F if (i >= 8) {\n",[33,61282,61283],{"class":35,"line":34306},[33,61284,61285],{"class":47},"      \u002F\u002F   i = 0\n",[33,61287,61288],{"class":35,"line":34312},[33,61289,61290],{"class":47},"      \u002F\u002F }\n",[33,61292,61293],{"class":35,"line":34323},[33,61294,61295],{"class":47},"      i = i >= data.length ? 0 : i\n",[33,61297,61298],{"class":35,"line":34329},[33,61299,61300],{"class":47},"      \u002F\u002F 1.3 得到对应的对象\n",[33,61302,61303],{"class":35,"line":34339},[33,61304,61305],{"class":47},"      \u002F\u002F console.log(data[i])\n",[33,61307,61308],{"class":35,"line":34344},[33,61309,61310],{"class":47},"      \u002F\u002F 调用函数\n",[33,61312,61313],{"class":35,"line":34350},[33,61314,61315],{"class":47},"      toggle()\n",[33,61317,61318],{"class":35,"line":34399},[33,61319,34714],{"class":47},[33,61321,61322],{"class":35,"line":34446},[33,61323,160],{"emptyLinePlaceholder":159},[33,61325,61326],{"class":35,"line":34451},[33,61327,61328],{"class":47},"    \u002F\u002F 2. 左侧按钮业务\n",[33,61330,61331],{"class":35,"line":34457},[33,61332,61333],{"class":47},"    \u002F\u002F 2.1 获取左侧按钮 \n",[33,61335,61336],{"class":35,"line":34476},[33,61337,61338],{"class":47},"    const prev = document.querySelector('.prev')\n",[33,61340,61341],{"class":35,"line":34482},[33,61342,61251],{"class":47},[33,61344,61345],{"class":35,"line":34502},[33,61346,61347],{"class":47},"    prev.addEventListener('click', function () {\n",[33,61349,61350],{"class":35,"line":34508},[33,61351,61352],{"class":47},"      i--\n",[33,61354,61355],{"class":35,"line":34514},[33,61356,61357],{"class":47},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[33,61359,61360],{"class":35,"line":34524},[33,61361,61362],{"class":47},"      \u002F\u002F if (i \u003C 0) {\n",[33,61364,61365],{"class":35,"line":34529},[33,61366,61367],{"class":47},"      \u002F\u002F   i = 7\n",[33,61369,61370],{"class":35,"line":34535},[33,61371,61290],{"class":47},[33,61373,61374],{"class":35,"line":34551},[33,61375,61376],{"class":47},"      i = i \u003C 0 ? data.length - 1 : i\n",[33,61378,61379],{"class":35,"line":34596},[33,61380,61300],{"class":47},[33,61382,61383],{"class":35,"line":34602},[33,61384,61305],{"class":47},[33,61386,61387],{"class":35,"line":34608},[33,61388,61310],{"class":47},[33,61390,61391],{"class":35,"line":34614},[33,61392,61315],{"class":47},[33,61394,61395],{"class":35,"line":34625},[33,61396,34714],{"class":47},[33,61398,61399],{"class":35,"line":34631},[33,61400,160],{"emptyLinePlaceholder":159},[33,61402,61403],{"class":35,"line":34637},[33,61404,61405],{"class":47},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[33,61407,61408],{"class":35,"line":34643},[33,61409,61410],{"class":47},"    function toggle() {\n",[33,61412,61413],{"class":35,"line":34661},[33,61414,61415],{"class":47},"      \u002F\u002F 1.4 渲染对应的数据\n",[33,61417,61418],{"class":35,"line":34675},[33,61419,61420],{"class":47},"      img.src = data[i].url\n",[33,61422,61423],{"class":35,"line":34684},[33,61424,61425],{"class":47},"      p.innerHTML = data[i].title\n",[33,61427,61428],{"class":35,"line":34693},[33,61429,61430],{"class":47},"      footer.style.backgroundColor = data[i].color\n",[33,61432,61433],{"class":35,"line":34702},[33,61434,61435],{"class":47},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[33,61437,61438],{"class":35,"line":34711},[33,61439,61440],{"class":47},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[33,61442,61443],{"class":35,"line":34717},[33,61444,61445],{"class":47},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[33,61447,61448],{"class":35,"line":34723},[33,61449,916],{"class":47},[33,61451,61452],{"class":35,"line":34731},[33,61453,160],{"emptyLinePlaceholder":159},[33,61455,61456],{"class":35,"line":34736},[33,61457,61458],{"class":47},"    \u002F\u002F 3. 自动播放模块\n",[33,61460,61461],{"class":35,"line":34742},[33,61462,61463],{"class":47},"    let timerId = setInterval(function () {\n",[33,61465,61466],{"class":35,"line":34753},[33,61467,61468],{"class":47},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,61470,61471],{"class":35,"line":34759},[33,61472,61473],{"class":47},"      next.click()\n",[33,61475,61476],{"class":35,"line":34779},[33,61477,61478],{"class":47},"    }, 1000)\n",[33,61480,61481],{"class":35,"line":34785},[33,61482,160],{"emptyLinePlaceholder":159},[33,61484,61485],{"class":35,"line":34791},[33,61486,61487],{"class":47},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[33,61489,61490],{"class":35,"line":34797},[33,61491,61492],{"class":47},"    const slider = document.querySelector('.slider')\n",[33,61494,61495],{"class":35,"line":34814},[33,61496,61497],{"class":47},"    \u002F\u002F 注册事件\n",[33,61499,61500],{"class":35,"line":34820},[33,61501,61502],{"class":47},"    slider.addEventListener('mouseenter', function () {\n",[33,61504,61505],{"class":35,"line":34826},[33,61506,61507],{"class":47},"      \u002F\u002F 停止定时器\n",[33,61509,61510],{"class":35,"line":34832},[33,61511,61512],{"class":47},"      clearInterval(timerId)\n",[33,61514,61515],{"class":35,"line":34838},[33,61516,34714],{"class":47},[33,61518,61519],{"class":35,"line":34844},[33,61520,160],{"emptyLinePlaceholder":159},[33,61522,61523],{"class":35,"line":34871},[33,61524,61525],{"class":47},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[33,61527,61528],{"class":35,"line":34895},[33,61529,61497],{"class":47},[33,61531,61532],{"class":35,"line":34901},[33,61533,61534],{"class":47},"    slider.addEventListener('mouseleave', function () {\n",[33,61536,61537],{"class":35,"line":34907},[33,61538,61507],{"class":47},[33,61540,61541],{"class":35,"line":34913},[33,61542,61543],{"class":47},"      if (timerId) clearInterval(timerId)\n",[33,61545,61546],{"class":35,"line":34924},[33,61547,61548],{"class":47},"      \u002F\u002F 开启定时器\n",[33,61550,61551],{"class":35,"line":34935},[33,61552,61553],{"class":47},"      timerId = setInterval(function () {\n",[33,61555,61556],{"class":35,"line":34941},[33,61557,61558],{"class":47},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[33,61560,61561],{"class":35,"line":34958},[33,61562,61563],{"class":47},"        next.click()\n",[33,61565,61566],{"class":35,"line":34981},[33,61567,61568],{"class":47},"      }, 1000)\n",[33,61570,61571],{"class":35,"line":35004},[33,61572,34714],{"class":47},[33,61574,61575,61577,61579],{"class":35,"line":35010},[33,61576,53670],{"class":47},[33,61578,53066],{"class":52553},[33,61580,52560],{"class":47},[33,61582,61583,61585,61587],{"class":35,"line":35015},[33,61584,53038],{"class":47},[33,61586,53053],{"class":52553},[33,61588,52560],{"class":47},[33,61590,61591],{"class":35,"line":35024},[33,61592,160],{"emptyLinePlaceholder":159},[33,61594,61595,61597,61599],{"class":35,"line":35034},[33,61596,53038],{"class":47},[33,61598,51888],{"class":52553},[33,61600,52560],{"class":47},[23249,61602,61604],{"id":61603},"_3252-焦点事件","3.2.5.2 焦点事件",[14,61606,61607],{},"小米搜索框案例：",[23,61609,61611],{"className":51886,"code":61610,"language":51888,"meta":28,"style":28},"\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",[30,61612,61613,61623,61637,61641,61649,61663,61683,61703,61715,61723,61729,61739,61749,61761,61765,61769,61776,61780,61791,61795,61799,61806,61817,61830,61844,61848,61852,61861,61873,61885,61899,61912,61925,61943,61954,61958,61962,61971,61988,61992,61996,62003,62013,62023,62034,62047,62059,62075,62086,62098,62102,62106,62114,62125,62142,62154,62166,62177,62181,62185,62196,62207,62211,62219,62223,62231,62235,62243,62258,62281,62296,62327,62354,62381,62408,62435,62462,62489,62498,62506,62514,62519,62539,62559,62564,62569,62587,62592,62602,62607,62621,62626,62631,62648,62657,62669,62673,62681,62689,62693],{"__ignoreMap":28},[33,61614,61615,61617,61619,61621],{"class":35,"line":36},[33,61616,52550],{"class":47},[33,61618,52554],{"class":52553},[33,61620,52557],{"class":43},[33,61622,52560],{"class":47},[33,61624,61625,61627,61629,61631,61633,61635],{"class":35,"line":51},[33,61626,875],{"class":47},[33,61628,51888],{"class":52553},[33,61630,52569],{"class":43},[33,61632,73],{"class":47},[33,61634,52574],{"class":119},[33,61636,52560],{"class":47},[33,61638,61639],{"class":35,"line":57},[33,61640,160],{"emptyLinePlaceholder":159},[33,61642,61643,61645,61647],{"class":35,"line":64},[33,61644,875],{"class":47},[33,61646,52587],{"class":52553},[33,61648,52560],{"class":47},[33,61650,61651,61653,61655,61657,61659,61661],{"class":35,"line":83},[33,61652,52594],{"class":47},[33,61654,52597],{"class":52553},[33,61656,52600],{"class":43},[33,61658,73],{"class":47},[33,61660,52605],{"class":119},[33,61662,52560],{"class":47},[33,61664,61665,61667,61669,61671,61673,61675,61677,61679,61681],{"class":35,"line":89},[33,61666,52594],{"class":47},[33,61668,52597],{"class":52553},[33,61670,52616],{"class":43},[33,61672,73],{"class":47},[33,61674,52621],{"class":119},[33,61676,52624],{"class":43},[33,61678,73],{"class":47},[33,61680,52629],{"class":119},[33,61682,52560],{"class":47},[33,61684,61685,61687,61689,61691,61693,61695,61697,61699,61701],{"class":35,"line":98},[33,61686,52594],{"class":47},[33,61688,52597],{"class":52553},[33,61690,16171],{"class":43},[33,61692,73],{"class":47},[33,61694,52644],{"class":119},[33,61696,52624],{"class":43},[33,61698,73],{"class":47},[33,61700,52651],{"class":119},[33,61702,52560],{"class":47},[33,61704,61705,61707,61709,61711,61713],{"class":35,"line":110},[33,61706,52594],{"class":47},[33,61708,52660],{"class":52553},[33,61710,52663],{"class":47},[33,61712,52660],{"class":52553},[33,61714,52560],{"class":47},[33,61716,61717,61719,61721],{"class":35,"line":134},[33,61718,52594],{"class":47},[33,61720,1544],{"class":52553},[33,61722,52560],{"class":47},[33,61724,61725,61727],{"class":35,"line":156},[33,61726,52680],{"class":52553},[33,61728,16823],{"class":47},[33,61730,61731,61733,61735,61737],{"class":35,"line":163},[33,61732,52687],{"class":76},[33,61734,52690],{"class":47},[33,61736,766],{"class":76},[33,61738,80],{"class":47},[33,61740,61741,61743,61745,61747],{"class":35,"line":169},[33,61742,52699],{"class":76},[33,61744,52690],{"class":47},[33,61746,766],{"class":76},[33,61748,80],{"class":47},[33,61750,61751,61754,61756,61759],{"class":35,"line":175},[33,61752,61753],{"class":76},"            box-sizing",[33,61755,52690],{"class":47},[33,61757,61758],{"class":76},"border-box",[33,61760,80],{"class":47},[33,61762,61763],{"class":35,"line":181},[33,61764,1334],{"class":47},[33,61766,61767],{"class":35,"line":196},[33,61768,160],{"emptyLinePlaceholder":159},[33,61770,61771,61774],{"class":35,"line":213},[33,61772,61773],{"class":52553},"        ul",[33,61775,16823],{"class":47},[33,61777,61778],{"class":35,"line":228},[33,61779,160],{"emptyLinePlaceholder":159},[33,61781,61782,61785,61787,61789],{"class":35,"line":1345},[33,61783,61784],{"class":76},"            list-style",[33,61786,52690],{"class":47},[33,61788,55990],{"class":76},[33,61790,80],{"class":47},[33,61792,61793],{"class":35,"line":1350},[33,61794,1334],{"class":47},[33,61796,61797],{"class":35,"line":1359},[33,61798,160],{"emptyLinePlaceholder":159},[33,61800,61801,61804],{"class":35,"line":1364},[33,61802,61803],{"class":43},"        .mi",[33,61805,16823],{"class":47},[33,61807,61808,61811,61813,61815],{"class":35,"line":1370},[33,61809,61810],{"class":76},"            position",[33,61812,52690],{"class":47},[33,61814,56017],{"class":76},[33,61816,80],{"class":47},[33,61818,61819,61821,61823,61826,61828],{"class":35,"line":1425},[33,61820,52737],{"class":76},[33,61822,52690],{"class":47},[33,61824,61825],{"class":76},"223",[33,61827,52745],{"class":39},[33,61829,80],{"class":47},[33,61831,61832,61834,61836,61838,61840,61842],{"class":35,"line":1438},[33,61833,52687],{"class":76},[33,61835,52690],{"class":47},[33,61837,457],{"class":76},[33,61839,52745],{"class":39},[33,61841,52809],{"class":76},[33,61843,80],{"class":47},[33,61845,61846],{"class":35,"line":1451},[33,61847,1334],{"class":47},[33,61849,61850],{"class":35,"line":1457},[33,61851,160],{"emptyLinePlaceholder":159},[33,61853,61854,61856,61859],{"class":35,"line":1466},[33,61855,61803],{"class":43},[33,61857,61858],{"class":52553}," input",[33,61860,16823],{"class":47},[33,61862,61863,61865,61867,61869,61871],{"class":35,"line":1471},[33,61864,52737],{"class":76},[33,61866,52690],{"class":47},[33,61868,61825],{"class":76},[33,61870,52745],{"class":39},[33,61872,80],{"class":47},[33,61874,61875,61877,61879,61881,61883],{"class":35,"line":1477},[33,61876,52752],{"class":76},[33,61878,52690],{"class":47},[33,61880,2207],{"class":76},[33,61882,52745],{"class":39},[33,61884,80],{"class":47},[33,61886,61887,61889,61891,61893,61895,61897],{"class":35,"line":1504},[33,61888,52699],{"class":76},[33,61890,52690],{"class":47},[33,61892,766],{"class":76},[33,61894,3461],{"class":76},[33,61896,52745],{"class":39},[33,61898,80],{"class":47},[33,61900,61901,61904,61906,61908,61910],{"class":35,"line":1509},[33,61902,61903],{"class":76},"            font-size",[33,61905,52690],{"class":47},[33,61907,2149],{"class":76},[33,61909,52745],{"class":39},[33,61911,80],{"class":47},[33,61913,61914,61917,61919,61921,61923],{"class":35,"line":1525},[33,61915,61916],{"class":76},"            line-height",[33,61918,52690],{"class":47},[33,61920,2207],{"class":76},[33,61922,52745],{"class":39},[33,61924,80],{"class":47},[33,61926,61927,61930,61932,61934,61936,61938,61941],{"class":35,"line":1535},[33,61928,61929],{"class":76},"            border",[33,61931,52690],{"class":47},[33,61933,701],{"class":76},[33,61935,52745],{"class":39},[33,61937,52774],{"class":76},[33,61939,61940],{"class":76}," #e0e0e0",[33,61942,80],{"class":47},[33,61944,61945,61948,61950,61952],{"class":35,"line":1540},[33,61946,61947],{"class":76},"            outline",[33,61949,52690],{"class":47},[33,61951,55990],{"class":76},[33,61953,80],{"class":47},[33,61955,61956],{"class":35,"line":4027},[33,61957,1334],{"class":47},[33,61959,61960],{"class":35,"line":4032},[33,61961,160],{"emptyLinePlaceholder":159},[33,61963,61964,61966,61969],{"class":35,"line":9199},[33,61965,61803],{"class":43},[33,61967,61968],{"class":43}," .search",[33,61970,16823],{"class":47},[33,61972,61973,61975,61977,61979,61981,61983,61986],{"class":35,"line":9223},[33,61974,61929],{"class":76},[33,61976,52690],{"class":47},[33,61978,701],{"class":76},[33,61980,52745],{"class":39},[33,61982,52774],{"class":76},[33,61984,61985],{"class":76}," #ff6700",[33,61987,80],{"class":47},[33,61989,61990],{"class":35,"line":9228},[33,61991,1334],{"class":47},[33,61993,61994],{"class":35,"line":9234},[33,61995,160],{"emptyLinePlaceholder":159},[33,61997,61998,62001],{"class":35,"line":9261},[33,61999,62000],{"class":43},"        .result-list",[33,62002,16823],{"class":47},[33,62004,62005,62007,62009,62011],{"class":35,"line":9266},[33,62006,52725],{"class":76},[33,62008,52690],{"class":47},[33,62010,55990],{"class":76},[33,62012,80],{"class":47},[33,62014,62015,62017,62019,62021],{"class":35,"line":9272},[33,62016,61810],{"class":76},[33,62018,52690],{"class":47},[33,62020,56084],{"class":76},[33,62022,80],{"class":47},[33,62024,62025,62028,62030,62032],{"class":35,"line":9284},[33,62026,62027],{"class":76},"            left",[33,62029,52690],{"class":47},[33,62031,766],{"class":76},[33,62033,80],{"class":47},[33,62035,62036,62039,62041,62043,62045],{"class":35,"line":9296},[33,62037,62038],{"class":76},"            top",[33,62040,52690],{"class":47},[33,62042,2207],{"class":76},[33,62044,52745],{"class":39},[33,62046,80],{"class":47},[33,62048,62049,62051,62053,62055,62057],{"class":35,"line":9308},[33,62050,52737],{"class":76},[33,62052,52690],{"class":47},[33,62054,61825],{"class":76},[33,62056,52745],{"class":39},[33,62058,80],{"class":47},[33,62060,62061,62063,62065,62067,62069,62071,62073],{"class":35,"line":10967},[33,62062,61929],{"class":76},[33,62064,52690],{"class":47},[33,62066,701],{"class":76},[33,62068,52745],{"class":39},[33,62070,52774],{"class":76},[33,62072,61985],{"class":76},[33,62074,80],{"class":47},[33,62076,62077,62080,62082,62084],{"class":35,"line":10992},[33,62078,62079],{"class":76},"            border-top",[33,62081,52690],{"class":47},[33,62083,766],{"class":76},[33,62085,80],{"class":47},[33,62087,62088,62091,62093,62096],{"class":35,"line":11015},[33,62089,62090],{"class":76},"            background",[33,62092,52690],{"class":47},[33,62094,62095],{"class":76},"#fff",[33,62097,80],{"class":47},[33,62099,62100],{"class":35,"line":11039},[33,62101,1334],{"class":47},[33,62103,62104],{"class":35,"line":11044},[33,62105,160],{"emptyLinePlaceholder":159},[33,62107,62108,62110,62112],{"class":35,"line":11049},[33,62109,62000],{"class":43},[33,62111,70],{"class":52553},[33,62113,16823],{"class":47},[33,62115,62116,62118,62120,62123],{"class":35,"line":11054},[33,62117,52725],{"class":76},[33,62119,52690],{"class":47},[33,62121,62122],{"class":76},"block",[33,62124,80],{"class":47},[33,62126,62127,62129,62131,62133,62135,62138,62140],{"class":35,"line":11063},[33,62128,52699],{"class":76},[33,62130,52690],{"class":47},[33,62132,727],{"class":76},[33,62134,52745],{"class":39},[33,62136,62137],{"class":76}," 15",[33,62139,52745],{"class":39},[33,62141,80],{"class":47},[33,62143,62144,62146,62148,62150,62152],{"class":35,"line":11068},[33,62145,61903],{"class":76},[33,62147,52690],{"class":47},[33,62149,2099],{"class":76},[33,62151,52745],{"class":39},[33,62153,80],{"class":47},[33,62155,62156,62159,62161,62164],{"class":35,"line":11074},[33,62157,62158],{"class":76},"            color",[33,62160,52690],{"class":47},[33,62162,62163],{"class":76},"#424242",[33,62165,80],{"class":47},[33,62167,62168,62171,62173,62175],{"class":35,"line":11095},[33,62169,62170],{"class":76},"            text-decoration",[33,62172,52690],{"class":47},[33,62174,55990],{"class":76},[33,62176,80],{"class":47},[33,62178,62179],{"class":35,"line":11101},[33,62180,1334],{"class":47},[33,62182,62183],{"class":35,"line":11115},[33,62184,160],{"emptyLinePlaceholder":159},[33,62186,62187,62189,62191,62194],{"class":35,"line":11121},[33,62188,62000],{"class":43},[33,62190,70],{"class":52553},[33,62192,62193],{"class":43},":hover",[33,62195,16823],{"class":47},[33,62197,62198,62200,62202,62205],{"class":35,"line":11148},[33,62199,52893],{"class":76},[33,62201,52690],{"class":47},[33,62203,62204],{"class":76},"#eee",[33,62206,80],{"class":47},[33,62208,62209],{"class":35,"line":11157},[33,62210,1334],{"class":47},[33,62212,62213,62215,62217],{"class":35,"line":11163},[33,62214,53029],{"class":47},[33,62216,1544],{"class":52553},[33,62218,52560],{"class":47},[33,62220,62221],{"class":35,"line":11171},[33,62222,160],{"emptyLinePlaceholder":159},[33,62224,62225,62227,62229],{"class":35,"line":11176},[33,62226,53038],{"class":47},[33,62228,52587],{"class":52553},[33,62230,52560],{"class":47},[33,62232,62233],{"class":35,"line":17855},[33,62234,160],{"emptyLinePlaceholder":159},[33,62236,62237,62239,62241],{"class":35,"line":17861},[33,62238,875],{"class":47},[33,62240,53053],{"class":52553},[33,62242,52560],{"class":47},[33,62244,62245,62247,62249,62251,62253,62256],{"class":35,"line":17884},[33,62246,52594],{"class":47},[33,62248,52864],{"class":52553},[33,62250,54739],{"class":43},[33,62252,73],{"class":47},[33,62254,62255],{"class":119},"\"mi\"",[33,62257,52560],{"class":47},[33,62259,62260,62262,62264,62266,62268,62271,62274,62276,62279],{"class":35,"line":17890},[33,62261,56555],{"class":47},[33,62263,55074],{"class":52553},[33,62265,55077],{"class":43},[33,62267,73],{"class":47},[33,62269,62270],{"class":119},"\"search\"",[33,62272,62273],{"class":43}," placeholder",[33,62275,73],{"class":47},[33,62277,62278],{"class":119},"\"小米笔记本\"",[33,62280,52560],{"class":47},[33,62282,62283,62285,62287,62289,62291,62294],{"class":35,"line":17913},[33,62284,56555],{"class":47},[33,62286,561],{"class":52553},[33,62288,54739],{"class":43},[33,62290,73],{"class":47},[33,62292,62293],{"class":119},"\"result-list\"",[33,62295,52560],{"class":47},[33,62297,62298,62301,62303,62306,62308,62311,62313,62316,62319,62321,62323,62325],{"class":35,"line":17927},[33,62299,62300],{"class":47},"            \u003C",[33,62302,564],{"class":52553},[33,62304,62305],{"class":47},">\u003C",[33,62307,126],{"class":52553},[33,62309,62310],{"class":43}," href",[33,62312,73],{"class":47},[33,62314,62315],{"class":119},"\"#\"",[33,62317,62318],{"class":47},">全部商品\u003C\u002F",[33,62320,126],{"class":52553},[33,62322,56567],{"class":47},[33,62324,564],{"class":52553},[33,62326,52560],{"class":47},[33,62328,62329,62331,62333,62335,62337,62339,62341,62343,62346,62348,62350,62352],{"class":35,"line":17947},[33,62330,62300],{"class":47},[33,62332,564],{"class":52553},[33,62334,62305],{"class":47},[33,62336,126],{"class":52553},[33,62338,62310],{"class":43},[33,62340,73],{"class":47},[33,62342,62315],{"class":119},[33,62344,62345],{"class":47},">小米11\u003C\u002F",[33,62347,126],{"class":52553},[33,62349,56567],{"class":47},[33,62351,564],{"class":52553},[33,62353,52560],{"class":47},[33,62355,62356,62358,62360,62362,62364,62366,62368,62370,62373,62375,62377,62379],{"class":35,"line":17953},[33,62357,62300],{"class":47},[33,62359,564],{"class":52553},[33,62361,62305],{"class":47},[33,62363,126],{"class":52553},[33,62365,62310],{"class":43},[33,62367,73],{"class":47},[33,62369,62315],{"class":119},[33,62371,62372],{"class":47},">小米10S\u003C\u002F",[33,62374,126],{"class":52553},[33,62376,56567],{"class":47},[33,62378,564],{"class":52553},[33,62380,52560],{"class":47},[33,62382,62383,62385,62387,62389,62391,62393,62395,62397,62400,62402,62404,62406],{"class":35,"line":17964},[33,62384,62300],{"class":47},[33,62386,564],{"class":52553},[33,62388,62305],{"class":47},[33,62390,126],{"class":52553},[33,62392,62310],{"class":43},[33,62394,73],{"class":47},[33,62396,62315],{"class":119},[33,62398,62399],{"class":47},">小米笔记本\u003C\u002F",[33,62401,126],{"class":52553},[33,62403,56567],{"class":47},[33,62405,564],{"class":52553},[33,62407,52560],{"class":47},[33,62409,62410,62412,62414,62416,62418,62420,62422,62424,62427,62429,62431,62433],{"class":35,"line":17987},[33,62411,62300],{"class":47},[33,62413,564],{"class":52553},[33,62415,62305],{"class":47},[33,62417,126],{"class":52553},[33,62419,62310],{"class":43},[33,62421,73],{"class":47},[33,62423,62315],{"class":119},[33,62425,62426],{"class":47},">小米手机\u003C\u002F",[33,62428,126],{"class":52553},[33,62430,56567],{"class":47},[33,62432,564],{"class":52553},[33,62434,52560],{"class":47},[33,62436,62437,62439,62441,62443,62445,62447,62449,62451,62454,62456,62458,62460],{"class":35,"line":18009},[33,62438,62300],{"class":47},[33,62440,564],{"class":52553},[33,62442,62305],{"class":47},[33,62444,126],{"class":52553},[33,62446,62310],{"class":43},[33,62448,73],{"class":47},[33,62450,62315],{"class":119},[33,62452,62453],{"class":47},">黑鲨4\u003C\u002F",[33,62455,126],{"class":52553},[33,62457,56567],{"class":47},[33,62459,564],{"class":52553},[33,62461,52560],{"class":47},[33,62463,62464,62466,62468,62470,62472,62474,62476,62478,62481,62483,62485,62487],{"class":35,"line":18014},[33,62465,62300],{"class":47},[33,62467,564],{"class":52553},[33,62469,62305],{"class":47},[33,62471,126],{"class":52553},[33,62473,62310],{"class":43},[33,62475,73],{"class":47},[33,62477,62315],{"class":119},[33,62479,62480],{"class":47},">空调\u003C\u002F",[33,62482,126],{"class":52553},[33,62484,56567],{"class":47},[33,62486,564],{"class":52553},[33,62488,52560],{"class":47},[33,62490,62491,62494,62496],{"class":35,"line":18020},[33,62492,62493],{"class":47},"        \u003C\u002F",[33,62495,561],{"class":52553},[33,62497,52560],{"class":47},[33,62499,62500,62502,62504],{"class":35,"line":18034},[33,62501,53029],{"class":47},[33,62503,52864],{"class":52553},[33,62505,52560],{"class":47},[33,62507,62508,62510,62512],{"class":35,"line":18047},[33,62509,52594],{"class":47},[33,62511,53066],{"class":52553},[33,62513,52560],{"class":47},[33,62515,62516],{"class":35,"line":18052},[33,62517,62518],{"class":60},"        \u002F\u002F 1. 获取元素\n",[33,62520,62521,62524,62526,62528,62530,62532,62534,62537],{"class":35,"line":18066},[33,62522,62523],{"class":39},"        const",[33,62525,61858],{"class":76},[33,62527,14815],{"class":39},[33,62529,55649],{"class":47},[33,62531,55652],{"class":43},[33,62533,345],{"class":47},[33,62535,62536],{"class":119},"'[type=search]'",[33,62538,884],{"class":47},[33,62540,62541,62543,62546,62548,62550,62552,62554,62557],{"class":35,"line":18071},[33,62542,62523],{"class":39},[33,62544,62545],{"class":76}," ul",[33,62547,14815],{"class":39},[33,62549,55649],{"class":47},[33,62551,55652],{"class":43},[33,62553,345],{"class":47},[33,62555,62556],{"class":119},"'.result-list'",[33,62558,884],{"class":47},[33,62560,62561],{"class":35,"line":18077},[33,62562,62563],{"class":60},"        \u002F\u002F console.log(input)\n",[33,62565,62566],{"class":35,"line":18082},[33,62567,62568],{"class":60},"        \u002F\u002F 2. 监听事件 获得焦点\n",[33,62570,62571,62574,62576,62578,62581,62583,62585],{"class":35,"line":18096},[33,62572,62573],{"class":47},"        input.",[33,62575,59066],{"class":43},[33,62577,345],{"class":47},[33,62579,62580],{"class":119},"'focus'",[33,62582,13686],{"class":47},[33,62584,55702],{"class":39},[33,62586,55705],{"class":47},[33,62588,62589],{"class":35,"line":18101},[33,62590,62591],{"class":60},"            \u002F\u002F ul显示\n",[33,62593,62594,62597,62599],{"class":35,"line":18106},[33,62595,62596],{"class":47},"            ul.style.display ",[33,62598,73],{"class":39},[33,62600,62601],{"class":119}," 'block'\n",[33,62603,62604],{"class":35,"line":18120},[33,62605,62606],{"class":60},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[33,62608,62609,62612,62614,62616,62619],{"class":35,"line":18132},[33,62610,62611],{"class":47},"            input.classList.",[33,62613,6724],{"class":43},[33,62615,345],{"class":47},[33,62617,62618],{"class":119},"'search'",[33,62620,884],{"class":47},[33,62622,62623],{"class":35,"line":18137},[33,62624,62625],{"class":47},"        })\n",[33,62627,62628],{"class":35,"line":18150},[33,62629,62630],{"class":60},"        \u002F\u002F 3. 监听事件 失去焦点\n",[33,62632,62633,62635,62637,62639,62642,62644,62646],{"class":35,"line":18155},[33,62634,62573],{"class":47},[33,62636,59066],{"class":43},[33,62638,345],{"class":47},[33,62640,62641],{"class":119},"'blur'",[33,62643,13686],{"class":47},[33,62645,55702],{"class":39},[33,62647,55705],{"class":47},[33,62649,62650,62652,62654],{"class":35,"line":18160},[33,62651,62596],{"class":47},[33,62653,73],{"class":39},[33,62655,62656],{"class":119}," 'none'\n",[33,62658,62659,62661,62663,62665,62667],{"class":35,"line":18165},[33,62660,62611],{"class":47},[33,62662,58259],{"class":43},[33,62664,345],{"class":47},[33,62666,62618],{"class":119},[33,62668,884],{"class":47},[33,62670,62671],{"class":35,"line":18178},[33,62672,62625],{"class":47},[33,62674,62675,62677,62679],{"class":35,"line":18183},[33,62676,53029],{"class":47},[33,62678,53066],{"class":52553},[33,62680,52560],{"class":47},[33,62682,62683,62685,62687],{"class":35,"line":33886},[33,62684,53038],{"class":47},[33,62686,53053],{"class":52553},[33,62688,52560],{"class":47},[33,62690,62691],{"class":35,"line":33892},[33,62692,160],{"emptyLinePlaceholder":159},[33,62694,62695,62697,62699],{"class":35,"line":33898},[33,62696,53038],{"class":47},[33,62698,51888],{"class":52553},[33,62700,52560],{"class":47},[23249,62702,62704],{"id":62703},"_3253-键盘事件","3.2.5.3 键盘事件",[14,62706,62707],{},"评论字数统计案例",[14,62709,62710],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,62712,62713],{},"牢记focus伪类选择器",[52597,62715],{"charSet":62716},"UTF-8",[52597,62718],{"name":62719,"content":62720},"viewport","width=device-width, initial-scale=1.0",[52660,62722,62723],{},"Document",[1544,62725,62726],{},"\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",[55074,62728],{"type":6578},[561,62730,62731,62734],{},[564,62732,62733],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[564,62735,62736],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[23,62738,62740],{"className":51886,"code":62739,"language":51888,"meta":28,"style":28},"\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",[30,62741,62742,62752,62766,62770,62778,62792,62812,62832,62845,62853,62860,62873,62887,62897,62907,62911,62915,62922,62934,62946,62958,62970,62999,63012,63016,63020,63029,63040,63052,63063,63074,63086,63097,63109,63125,63137,63141,63145,63156,63167,63177,63189,63193,63197,63205,63216,63226,63237,63249,63262,63274,63286,63290,63294,63303,63315,63326,63339,63350,63364,63368,63372,63379,63391,63403,63413,63417,63421,63430,63442,63452,63456,63460,63471,63481,63500,63513,63517,63521,63531,63541,63545,63549,63560,63571,63583,63595,63599,63603,63614,63625,63639,63643,63647,63658,63668,63680,63684,63692,63700,63704,63712,63727,63746,63786,63799,63807,63821,63841,63849,63864,63887,63905,63920,63940,63960,63980,63988,63996,64004,64012,64032,64052,64057,64074,64083,64087,64092,64108,64116,64120,64125,64142,64147,64172,64176,64180,64185,64190,64198,64206,64210],{"__ignoreMap":28},[33,62743,62744,62746,62748,62750],{"class":35,"line":36},[33,62745,52550],{"class":47},[33,62747,52554],{"class":52553},[33,62749,52557],{"class":43},[33,62751,52560],{"class":47},[33,62753,62754,62756,62758,62760,62762,62764],{"class":35,"line":51},[33,62755,875],{"class":47},[33,62757,51888],{"class":52553},[33,62759,52569],{"class":43},[33,62761,73],{"class":47},[33,62763,52574],{"class":119},[33,62765,52560],{"class":47},[33,62767,62768],{"class":35,"line":57},[33,62769,160],{"emptyLinePlaceholder":159},[33,62771,62772,62774,62776],{"class":35,"line":64},[33,62773,875],{"class":47},[33,62775,52587],{"class":52553},[33,62777,52560],{"class":47},[33,62779,62780,62782,62784,62786,62788,62790],{"class":35,"line":83},[33,62781,53397],{"class":47},[33,62783,52597],{"class":52553},[33,62785,52600],{"class":43},[33,62787,73],{"class":47},[33,62789,52605],{"class":119},[33,62791,52560],{"class":47},[33,62793,62794,62796,62798,62800,62802,62804,62806,62808,62810],{"class":35,"line":89},[33,62795,53397],{"class":47},[33,62797,52597],{"class":52553},[33,62799,52616],{"class":43},[33,62801,73],{"class":47},[33,62803,52621],{"class":119},[33,62805,52624],{"class":43},[33,62807,73],{"class":47},[33,62809,52629],{"class":119},[33,62811,52560],{"class":47},[33,62813,62814,62816,62818,62820,62822,62824,62826,62828,62830],{"class":35,"line":98},[33,62815,53397],{"class":47},[33,62817,52597],{"class":52553},[33,62819,16171],{"class":43},[33,62821,73],{"class":47},[33,62823,52644],{"class":119},[33,62825,52624],{"class":43},[33,62827,73],{"class":47},[33,62829,52651],{"class":119},[33,62831,52560],{"class":47},[33,62833,62834,62836,62838,62841,62843],{"class":35,"line":110},[33,62835,53397],{"class":47},[33,62837,52660],{"class":52553},[33,62839,62840],{"class":47},">评论回车发布\u003C\u002F",[33,62842,52660],{"class":52553},[33,62844,52560],{"class":47},[33,62846,62847,62849,62851],{"class":35,"line":134},[33,62848,53397],{"class":47},[33,62850,1544],{"class":52553},[33,62852,52560],{"class":47},[33,62854,62855,62858],{"class":35,"line":156},[33,62856,62857],{"class":43},"    .wrapper",[33,62859,16823],{"class":47},[33,62861,62862,62865,62867,62869,62871],{"class":35,"line":163},[33,62863,62864],{"class":76},"      min-width",[33,62866,52690],{"class":47},[33,62868,5387],{"class":76},[33,62870,52745],{"class":39},[33,62872,80],{"class":47},[33,62874,62875,62878,62880,62883,62885],{"class":35,"line":169},[33,62876,62877],{"class":76},"      max-width",[33,62879,52690],{"class":47},[33,62881,62882],{"class":76},"800",[33,62884,52745],{"class":39},[33,62886,80],{"class":47},[33,62888,62889,62891,62893,62895],{"class":35,"line":175},[33,62890,56262],{"class":76},[33,62892,52690],{"class":47},[33,62894,52730],{"class":76},[33,62896,80],{"class":47},[33,62898,62899,62901,62903,62905],{"class":35,"line":181},[33,62900,56273],{"class":76},[33,62902,52690],{"class":47},[33,62904,52833],{"class":76},[33,62906,80],{"class":47},[33,62908,62909],{"class":35,"line":196},[33,62910,916],{"class":47},[33,62912,62913],{"class":35,"line":213},[33,62914,160],{"emptyLinePlaceholder":159},[33,62916,62917,62920],{"class":35,"line":228},[33,62918,62919],{"class":43},"    .avatar",[33,62921,16823],{"class":47},[33,62923,62924,62926,62928,62930,62932],{"class":35,"line":1345},[33,62925,56024],{"class":76},[33,62927,52690],{"class":47},[33,62929,2207],{"class":76},[33,62931,52745],{"class":39},[33,62933,80],{"class":47},[33,62935,62936,62938,62940,62942,62944],{"class":35,"line":1350},[33,62937,56038],{"class":76},[33,62939,52690],{"class":47},[33,62941,2207],{"class":76},[33,62943,52745],{"class":39},[33,62945,80],{"class":47},[33,62947,62948,62950,62952,62954,62956],{"class":35,"line":1359},[33,62949,56387],{"class":76},[33,62951,52690],{"class":47},[33,62953,2256],{"class":76},[33,62955,1939],{"class":39},[33,62957,80],{"class":47},[33,62959,62960,62963,62965,62968],{"class":35,"line":1364},[33,62961,62962],{"class":76},"      overflow",[33,62964,52690],{"class":47},[33,62966,62967],{"class":76},"hidden",[33,62969,80],{"class":47},[33,62971,62972,62975,62977,62980,62982,62985,62987,62990,62992,62994,62997],{"class":35,"line":1370},[33,62973,62974],{"class":76},"      background",[33,62976,52690],{"class":47},[33,62978,62979],{"class":76},"url",[33,62981,345],{"class":47},[33,62983,62984],{"class":955},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[33,62986,14965],{"class":47},[33,62988,62989],{"class":76},"no-repeat",[33,62991,18395],{"class":76},[33,62993,26231],{"class":47},[33,62995,62996],{"class":76},"cover",[33,62998,80],{"class":47},[33,63000,63001,63004,63006,63008,63010],{"class":35,"line":1425},[33,63002,63003],{"class":76},"      margin-right",[33,63005,52690],{"class":47},[33,63007,1045],{"class":76},[33,63009,52745],{"class":39},[33,63011,80],{"class":47},[33,63013,63014],{"class":35,"line":1438},[33,63015,916],{"class":47},[33,63017,63018],{"class":35,"line":1451},[33,63019,160],{"emptyLinePlaceholder":159},[33,63021,63022,63024,63027],{"class":35,"line":1457},[33,63023,62857],{"class":43},[33,63025,63026],{"class":52553}," textarea",[33,63028,16823],{"class":47},[33,63030,63031,63034,63036,63038],{"class":35,"line":1466},[33,63032,63033],{"class":76},"      outline",[33,63035,52690],{"class":47},[33,63037,55990],{"class":76},[33,63039,80],{"class":47},[33,63041,63042,63045,63047,63050],{"class":35,"line":1471},[33,63043,63044],{"class":76},"      border-color",[33,63046,52690],{"class":47},[33,63048,63049],{"class":76},"transparent",[33,63051,80],{"class":47},[33,63053,63054,63057,63059,63061],{"class":35,"line":1477},[33,63055,63056],{"class":76},"      resize",[33,63058,52690],{"class":47},[33,63060,55990],{"class":76},[33,63062,80],{"class":47},[33,63064,63065,63067,63069,63072],{"class":35,"line":1504},[33,63066,62974],{"class":76},[33,63068,52690],{"class":47},[33,63070,63071],{"class":76},"#f5f5f5",[33,63073,80],{"class":47},[33,63075,63076,63078,63080,63082,63084],{"class":35,"line":1509},[33,63077,56387],{"class":76},[33,63079,52690],{"class":47},[33,63081,717],{"class":76},[33,63083,52745],{"class":39},[33,63085,80],{"class":47},[33,63087,63088,63091,63093,63095],{"class":35,"line":1525},[33,63089,63090],{"class":76},"      flex",[33,63092,52690],{"class":47},[33,63094,701],{"class":76},[33,63096,80],{"class":47},[33,63098,63099,63101,63103,63105,63107],{"class":35,"line":1535},[33,63100,55948],{"class":76},[33,63102,52690],{"class":47},[33,63104,77],{"class":76},[33,63106,52745],{"class":39},[33,63108,80],{"class":47},[33,63110,63111,63114,63116,63118,63121,63123],{"class":35,"line":1540},[33,63112,63113],{"class":76},"      transition",[33,63115,52690],{"class":47},[33,63117,29374],{"class":76},[33,63119,63120],{"class":76}," 0.5",[33,63122,2295],{"class":39},[33,63124,80],{"class":47},[33,63126,63127,63129,63131,63133,63135],{"class":35,"line":4027},[33,63128,56038],{"class":76},[33,63130,52690],{"class":47},[33,63132,2547],{"class":76},[33,63134,52745],{"class":39},[33,63136,80],{"class":47},[33,63138,63139],{"class":35,"line":4032},[33,63140,916],{"class":47},[33,63142,63143],{"class":35,"line":9199},[33,63144,160],{"emptyLinePlaceholder":159},[33,63146,63147,63149,63151,63154],{"class":35,"line":9223},[33,63148,62857],{"class":43},[33,63150,63026],{"class":52553},[33,63152,63153],{"class":43},":focus",[33,63155,16823],{"class":47},[33,63157,63158,63160,63162,63165],{"class":35,"line":9228},[33,63159,63044],{"class":76},[33,63161,52690],{"class":47},[33,63163,63164],{"class":76},"#e4e4e4",[33,63166,80],{"class":47},[33,63168,63169,63171,63173,63175],{"class":35,"line":9234},[33,63170,62974],{"class":76},[33,63172,52690],{"class":47},[33,63174,62095],{"class":76},[33,63176,80],{"class":47},[33,63178,63179,63181,63183,63185,63187],{"class":35,"line":9261},[33,63180,56038],{"class":76},[33,63182,52690],{"class":47},[33,63184,2256],{"class":76},[33,63186,52745],{"class":39},[33,63188,80],{"class":47},[33,63190,63191],{"class":35,"line":9266},[33,63192,916],{"class":47},[33,63194,63195],{"class":35,"line":9272},[33,63196,160],{"emptyLinePlaceholder":159},[33,63198,63199,63201,63203],{"class":35,"line":9284},[33,63200,62857],{"class":43},[33,63202,58720],{"class":52553},[33,63204,16823],{"class":47},[33,63206,63207,63209,63211,63214],{"class":35,"line":9296},[33,63208,62974],{"class":76},[33,63210,52690],{"class":47},[33,63212,63213],{"class":76},"#00aeec",[33,63215,80],{"class":47},[33,63217,63218,63220,63222,63224],{"class":35,"line":9308},[33,63219,58669],{"class":76},[33,63221,52690],{"class":47},[33,63223,62095],{"class":76},[33,63225,80],{"class":47},[33,63227,63228,63231,63233,63235],{"class":35,"line":10967},[33,63229,63230],{"class":76},"      border",[33,63232,52690],{"class":47},[33,63234,55990],{"class":76},[33,63236,80],{"class":47},[33,63238,63239,63241,63243,63245,63247],{"class":35,"line":10992},[33,63240,56387],{"class":76},[33,63242,52690],{"class":47},[33,63244,717],{"class":76},[33,63246,52745],{"class":39},[33,63248,80],{"class":47},[33,63250,63251,63254,63256,63258,63260],{"class":35,"line":11015},[33,63252,63253],{"class":76},"      margin-left",[33,63255,52690],{"class":47},[33,63257,77],{"class":76},[33,63259,52745],{"class":39},[33,63261,80],{"class":47},[33,63263,63264,63266,63268,63270,63272],{"class":35,"line":11039},[33,63265,56024],{"class":76},[33,63267,52690],{"class":47},[33,63269,1965],{"class":76},[33,63271,52745],{"class":39},[33,63273,80],{"class":47},[33,63275,63276,63279,63281,63284],{"class":35,"line":11044},[33,63277,63278],{"class":76},"      cursor",[33,63280,52690],{"class":47},[33,63282,63283],{"class":76},"pointer",[33,63285,80],{"class":47},[33,63287,63288],{"class":35,"line":11049},[33,63289,916],{"class":47},[33,63291,63292],{"class":35,"line":11054},[33,63293,160],{"emptyLinePlaceholder":159},[33,63295,63296,63298,63301],{"class":35,"line":11063},[33,63297,62857],{"class":43},[33,63299,63300],{"class":43}," .total",[33,63302,16823],{"class":47},[33,63304,63305,63307,63309,63311,63313],{"class":35,"line":11068},[33,63306,63003],{"class":76},[33,63308,52690],{"class":47},[33,63310,2212],{"class":76},[33,63312,52745],{"class":39},[33,63314,80],{"class":47},[33,63316,63317,63319,63321,63324],{"class":35,"line":11074},[33,63318,58669],{"class":76},[33,63320,52690],{"class":47},[33,63322,63323],{"class":76},"#999",[33,63325,80],{"class":47},[33,63327,63328,63331,63333,63335,63337],{"class":35,"line":11095},[33,63329,63330],{"class":76},"      margin-top",[33,63332,52690],{"class":47},[33,63334,722],{"class":76},[33,63336,52745],{"class":39},[33,63338,80],{"class":47},[33,63340,63341,63344,63346,63348],{"class":35,"line":11101},[33,63342,63343],{"class":76},"      opacity",[33,63345,52690],{"class":47},[33,63347,766],{"class":76},[33,63349,80],{"class":47},[33,63351,63352,63354,63356,63358,63360,63362],{"class":35,"line":11115},[33,63353,63113],{"class":76},[33,63355,52690],{"class":47},[33,63357,29374],{"class":76},[33,63359,63120],{"class":76},[33,63361,2295],{"class":39},[33,63363,80],{"class":47},[33,63365,63366],{"class":35,"line":11121},[33,63367,916],{"class":47},[33,63369,63370],{"class":35,"line":11148},[33,63371,160],{"emptyLinePlaceholder":159},[33,63373,63374,63377],{"class":35,"line":11157},[33,63375,63376],{"class":43},"    .list",[33,63378,16823],{"class":47},[33,63380,63381,63383,63385,63387,63389],{"class":35,"line":11163},[33,63382,62864],{"class":76},[33,63384,52690],{"class":47},[33,63386,5387],{"class":76},[33,63388,52745],{"class":39},[33,63390,80],{"class":47},[33,63392,63393,63395,63397,63399,63401],{"class":35,"line":11171},[33,63394,62877],{"class":76},[33,63396,52690],{"class":47},[33,63398,62882],{"class":76},[33,63400,52745],{"class":39},[33,63402,80],{"class":47},[33,63404,63405,63407,63409,63411],{"class":35,"line":11176},[33,63406,56262],{"class":76},[33,63408,52690],{"class":47},[33,63410,52730],{"class":76},[33,63412,80],{"class":47},[33,63414,63415],{"class":35,"line":17855},[33,63416,916],{"class":47},[33,63418,63419],{"class":35,"line":17861},[33,63420,160],{"emptyLinePlaceholder":159},[33,63422,63423,63425,63428],{"class":35,"line":17884},[33,63424,63376],{"class":43},[33,63426,63427],{"class":43}," .item",[33,63429,16823],{"class":47},[33,63431,63432,63434,63436,63438,63440],{"class":35,"line":17890},[33,63433,56024],{"class":76},[33,63435,52690],{"class":47},[33,63437,457],{"class":76},[33,63439,1939],{"class":39},[33,63441,80],{"class":47},[33,63443,63444,63446,63448,63450],{"class":35,"line":17913},[33,63445,56262],{"class":76},[33,63447,52690],{"class":47},[33,63449,52730],{"class":76},[33,63451,80],{"class":47},[33,63453,63454],{"class":35,"line":17927},[33,63455,916],{"class":47},[33,63457,63458],{"class":35,"line":17947},[33,63459,160],{"emptyLinePlaceholder":159},[33,63461,63462,63464,63466,63469],{"class":35,"line":17953},[33,63463,63376],{"class":43},[33,63465,63427],{"class":43},[33,63467,63468],{"class":43}," .info",[33,63470,16823],{"class":47},[33,63472,63473,63475,63477,63479],{"class":35,"line":17964},[33,63474,63090],{"class":76},[33,63476,52690],{"class":47},[33,63478,701],{"class":76},[33,63480,80],{"class":47},[33,63482,63483,63486,63488,63490,63492,63495,63498],{"class":35,"line":17987},[33,63484,63485],{"class":76},"      border-bottom",[33,63487,52690],{"class":47},[33,63489,701],{"class":76},[33,63491,52745],{"class":39},[33,63493,63494],{"class":76}," dashed",[33,63496,63497],{"class":76}," #e4e4e4",[33,63499,80],{"class":47},[33,63501,63502,63505,63507,63509,63511],{"class":35,"line":18009},[33,63503,63504],{"class":76},"      padding-bottom",[33,63506,52690],{"class":47},[33,63508,77],{"class":76},[33,63510,52745],{"class":39},[33,63512,80],{"class":47},[33,63514,63515],{"class":35,"line":18014},[33,63516,916],{"class":47},[33,63518,63519],{"class":35,"line":18020},[33,63520,160],{"emptyLinePlaceholder":159},[33,63522,63523,63525,63527,63529],{"class":35,"line":18034},[33,63524,63376],{"class":43},[33,63526,63427],{"class":43},[33,63528,622],{"class":52553},[33,63530,16823],{"class":47},[33,63532,63533,63535,63537,63539],{"class":35,"line":18047},[33,63534,55959],{"class":76},[33,63536,52690],{"class":47},[33,63538,766],{"class":76},[33,63540,80],{"class":47},[33,63542,63543],{"class":35,"line":18052},[33,63544,916],{"class":47},[33,63546,63547],{"class":35,"line":18066},[33,63548,160],{"emptyLinePlaceholder":159},[33,63550,63551,63553,63555,63558],{"class":35,"line":18071},[33,63552,63376],{"class":43},[33,63554,63427],{"class":43},[33,63556,63557],{"class":43}," .name",[33,63559,16823],{"class":47},[33,63561,63562,63564,63566,63569],{"class":35,"line":18077},[33,63563,58669],{"class":76},[33,63565,52690],{"class":47},[33,63567,63568],{"class":76},"#FB7299",[33,63570,80],{"class":47},[33,63572,63573,63575,63577,63579,63581],{"class":35,"line":18082},[33,63574,56175],{"class":76},[33,63576,52690],{"class":47},[33,63578,2149],{"class":76},[33,63580,52745],{"class":39},[33,63582,80],{"class":47},[33,63584,63585,63588,63590,63593],{"class":35,"line":18096},[33,63586,63587],{"class":76},"      font-weight",[33,63589,52690],{"class":47},[33,63591,63592],{"class":76},"bold",[33,63594,80],{"class":47},[33,63596,63597],{"class":35,"line":18101},[33,63598,916],{"class":47},[33,63600,63601],{"class":35,"line":18106},[33,63602,160],{"emptyLinePlaceholder":159},[33,63604,63605,63607,63609,63612],{"class":35,"line":18120},[33,63606,63376],{"class":43},[33,63608,63427],{"class":43},[33,63610,63611],{"class":43}," .text",[33,63613,16823],{"class":47},[33,63615,63616,63618,63620,63623],{"class":35,"line":18132},[33,63617,58669],{"class":76},[33,63619,52690],{"class":47},[33,63621,63622],{"class":76},"#333",[33,63624,80],{"class":47},[33,63626,63627,63629,63631,63633,63635,63637],{"class":35,"line":18137},[33,63628,55948],{"class":76},[33,63630,52690],{"class":47},[33,63632,77],{"class":76},[33,63634,52745],{"class":39},[33,63636,5492],{"class":76},[33,63638,80],{"class":47},[33,63640,63641],{"class":35,"line":18150},[33,63642,916],{"class":47},[33,63644,63645],{"class":35,"line":18155},[33,63646,160],{"emptyLinePlaceholder":159},[33,63648,63649,63651,63653,63656],{"class":35,"line":18160},[33,63650,63376],{"class":43},[33,63652,63427],{"class":43},[33,63654,63655],{"class":43}," .time",[33,63657,16823],{"class":47},[33,63659,63660,63662,63664,63666],{"class":35,"line":18165},[33,63661,58669],{"class":76},[33,63663,52690],{"class":47},[33,63665,63323],{"class":76},[33,63667,80],{"class":47},[33,63669,63670,63672,63674,63676,63678],{"class":35,"line":18178},[33,63671,56175],{"class":76},[33,63673,52690],{"class":47},[33,63675,2099],{"class":76},[33,63677,52745],{"class":39},[33,63679,80],{"class":47},[33,63681,63682],{"class":35,"line":18183},[33,63683,916],{"class":47},[33,63685,63686,63688,63690],{"class":35,"line":33886},[33,63687,53670],{"class":47},[33,63689,1544],{"class":52553},[33,63691,52560],{"class":47},[33,63693,63694,63696,63698],{"class":35,"line":33892},[33,63695,53038],{"class":47},[33,63697,52587],{"class":52553},[33,63699,52560],{"class":47},[33,63701,63702],{"class":35,"line":33898},[33,63703,160],{"emptyLinePlaceholder":159},[33,63705,63706,63708,63710],{"class":35,"line":33904},[33,63707,875],{"class":47},[33,63709,53053],{"class":52553},[33,63711,52560],{"class":47},[33,63713,63714,63716,63718,63720,63722,63725],{"class":35,"line":33910},[33,63715,53397],{"class":47},[33,63717,52864],{"class":52553},[33,63719,54739],{"class":43},[33,63721,73],{"class":47},[33,63723,63724],{"class":119},"\"wrapper\"",[33,63726,52560],{"class":47},[33,63728,63729,63731,63733,63735,63737,63740,63742,63744],{"class":35,"line":33921},[33,63730,52594],{"class":47},[33,63732,1239],{"class":52553},[33,63734,54739],{"class":43},[33,63736,73],{"class":47},[33,63738,63739],{"class":119},"\"avatar\"",[33,63741,56567],{"class":47},[33,63743,1239],{"class":52553},[33,63745,52560],{"class":47},[33,63747,63748,63750,63752,63754,63756,63759,63761,63763,63766,63768,63770,63772,63775,63777,63780,63782,63784],{"class":35,"line":33927},[33,63749,52594],{"class":47},[33,63751,55541],{"class":52553},[33,63753,16210],{"class":43},[33,63755,73],{"class":47},[33,63757,63758],{"class":119},"\"tx\"",[33,63760,62273],{"class":43},[33,63762,73],{"class":47},[33,63764,63765],{"class":119},"\"发一条友善的评论\"",[33,63767,55564],{"class":43},[33,63769,73],{"class":47},[33,63771,5103],{"class":119},[33,63773,63774],{"class":43}," maxlength",[33,63776,73],{"class":47},[33,63778,63779],{"class":119},"\"200\"",[33,63781,56567],{"class":47},[33,63783,55541],{"class":52553},[33,63785,52560],{"class":47},[33,63787,63788,63790,63792,63795,63797],{"class":35,"line":33947},[33,63789,52594],{"class":47},[33,63791,55140],{"class":52553},[33,63793,63794],{"class":47},">发布\u003C\u002F",[33,63796,55140],{"class":52553},[33,63798,52560],{"class":47},[33,63800,63801,63803,63805],{"class":35,"line":33953},[33,63802,53670],{"class":47},[33,63804,52864],{"class":52553},[33,63806,52560],{"class":47},[33,63808,63809,63811,63813,63815,63817,63819],{"class":35,"line":33964},[33,63810,53397],{"class":47},[33,63812,52864],{"class":52553},[33,63814,54739],{"class":43},[33,63816,73],{"class":47},[33,63818,63724],{"class":119},[33,63820,52560],{"class":47},[33,63822,63823,63825,63827,63829,63831,63834,63837,63839],{"class":35,"line":33970},[33,63824,52594],{"class":47},[33,63826,33],{"class":52553},[33,63828,54739],{"class":43},[33,63830,73],{"class":47},[33,63832,63833],{"class":119},"\"total\"",[33,63835,63836],{"class":47},">0\u002F200字\u003C\u002F",[33,63838,33],{"class":52553},[33,63840,52560],{"class":47},[33,63842,63843,63845,63847],{"class":35,"line":33976},[33,63844,53670],{"class":47},[33,63846,52864],{"class":52553},[33,63848,52560],{"class":47},[33,63850,63851,63853,63855,63857,63859,63862],{"class":35,"line":33982},[33,63852,53397],{"class":47},[33,63854,52864],{"class":52553},[33,63856,54739],{"class":43},[33,63858,73],{"class":47},[33,63860,63861],{"class":119},"\"list\"",[33,63863,52560],{"class":47},[33,63865,63866,63868,63870,63872,63874,63877,63880,63882,63885],{"class":35,"line":33988},[33,63867,52594],{"class":47},[33,63869,52864],{"class":52553},[33,63871,54739],{"class":43},[33,63873,73],{"class":47},[33,63875,63876],{"class":119},"\"item\"",[33,63878,63879],{"class":43}," style",[33,63881,73],{"class":47},[33,63883,63884],{"class":119},"\"display: none;\"",[33,63886,52560],{"class":47},[33,63888,63889,63891,63893,63895,63897,63899,63901,63903],{"class":35,"line":33994},[33,63890,56487],{"class":47},[33,63892,1239],{"class":52553},[33,63894,54739],{"class":43},[33,63896,73],{"class":47},[33,63898,63739],{"class":119},[33,63900,56567],{"class":47},[33,63902,1239],{"class":52553},[33,63904,52560],{"class":47},[33,63906,63907,63909,63911,63913,63915,63918],{"class":35,"line":34000},[33,63908,56487],{"class":47},[33,63910,52864],{"class":52553},[33,63912,54739],{"class":43},[33,63914,73],{"class":47},[33,63916,63917],{"class":119},"\"info\"",[33,63919,52560],{"class":47},[33,63921,63922,63924,63926,63928,63930,63933,63936,63938],{"class":35,"line":34006},[33,63923,56555],{"class":47},[33,63925,14],{"class":52553},[33,63927,54739],{"class":43},[33,63929,73],{"class":47},[33,63931,63932],{"class":119},"\"name\"",[33,63934,63935],{"class":47},">清风徐来\u003C\u002F",[33,63937,14],{"class":52553},[33,63939,52560],{"class":47},[33,63941,63942,63944,63946,63948,63950,63953,63956,63958],{"class":35,"line":34026},[33,63943,56555],{"class":47},[33,63945,14],{"class":52553},[33,63947,54739],{"class":43},[33,63949,73],{"class":47},[33,63951,63952],{"class":119},"\"text\"",[33,63954,63955],{"class":47},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[33,63957,14],{"class":52553},[33,63959,52560],{"class":47},[33,63961,63962,63964,63966,63968,63970,63973,63976,63978],{"class":35,"line":34032},[33,63963,56555],{"class":47},[33,63965,14],{"class":52553},[33,63967,54739],{"class":43},[33,63969,73],{"class":47},[33,63971,63972],{"class":119},"\"time\"",[33,63974,63975],{"class":47},">2022-10-10 20:29:21\u003C\u002F",[33,63977,14],{"class":52553},[33,63979,52560],{"class":47},[33,63981,63982,63984,63986],{"class":35,"line":34048},[33,63983,56660],{"class":47},[33,63985,52864],{"class":52553},[33,63987,52560],{"class":47},[33,63989,63990,63992,63994],{"class":35,"line":34054},[33,63991,53029],{"class":47},[33,63993,52864],{"class":52553},[33,63995,52560],{"class":47},[33,63997,63998,64000,64002],{"class":35,"line":34068},[33,63999,53670],{"class":47},[33,64001,52864],{"class":52553},[33,64003,52560],{"class":47},[33,64005,64006,64008,64010],{"class":35,"line":34074},[33,64007,53397],{"class":47},[33,64009,53066],{"class":52553},[33,64011,52560],{"class":47},[33,64013,64014,64016,64019,64021,64023,64025,64027,64030],{"class":35,"line":34089},[33,64015,12472],{"class":39},[33,64017,64018],{"class":76}," tx",[33,64020,14815],{"class":39},[33,64022,55649],{"class":47},[33,64024,55652],{"class":43},[33,64026,345],{"class":47},[33,64028,64029],{"class":119},"'#tx'",[33,64031,884],{"class":47},[33,64033,64034,64036,64039,64041,64043,64045,64047,64050],{"class":35,"line":34095},[33,64035,12472],{"class":39},[33,64037,64038],{"class":76}," total",[33,64040,14815],{"class":39},[33,64042,55649],{"class":47},[33,64044,55652],{"class":43},[33,64046,345],{"class":47},[33,64048,64049],{"class":119},"'.total'",[33,64051,884],{"class":47},[33,64053,64054],{"class":35,"line":34104},[33,64055,64056],{"class":60},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[33,64058,64059,64062,64064,64066,64068,64070,64072],{"class":35,"line":34110},[33,64060,64061],{"class":47},"    tx.",[33,64063,59066],{"class":43},[33,64065,345],{"class":47},[33,64067,62580],{"class":119},[33,64069,13686],{"class":47},[33,64071,55702],{"class":39},[33,64073,55705],{"class":47},[33,64075,64076,64079,64081],{"class":35,"line":34119},[33,64077,64078],{"class":47},"      total.style.opacity ",[33,64080,73],{"class":39},[33,64082,56952],{"class":76},[33,64084,64085],{"class":35,"line":34125},[33,64086,34714],{"class":47},[33,64088,64089],{"class":35,"line":34131},[33,64090,64091],{"class":60},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[33,64093,64094,64096,64098,64100,64102,64104,64106],{"class":35,"line":34140},[33,64095,64061],{"class":47},[33,64097,59066],{"class":43},[33,64099,345],{"class":47},[33,64101,62641],{"class":119},[33,64103,13686],{"class":47},[33,64105,55702],{"class":39},[33,64107,55705],{"class":47},[33,64109,64110,64112,64114],{"class":35,"line":34146},[33,64111,64078],{"class":47},[33,64113,73],{"class":39},[33,64115,48586],{"class":76},[33,64117,64118],{"class":35,"line":34157},[33,64119,34714],{"class":47},[33,64121,64122],{"class":35,"line":34163},[33,64123,64124],{"class":60},"    \u002F\u002F 3. 检测用户输入\n",[33,64126,64127,64129,64131,64133,64136,64138,64140],{"class":35,"line":34182},[33,64128,64061],{"class":47},[33,64130,59066],{"class":43},[33,64132,345],{"class":47},[33,64134,64135],{"class":119},"'input'",[33,64137,13686],{"class":47},[33,64139,55702],{"class":39},[33,64141,55705],{"class":47},[33,64143,64144],{"class":35,"line":34188},[33,64145,64146],{"class":60},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[33,64148,64149,64152,64154,64157,64160,64162,64165,64167,64169],{"class":35,"line":34199},[33,64150,64151],{"class":47},"      total.innerHTML ",[33,64153,73],{"class":39},[33,64155,64156],{"class":119}," `${",[33,64158,64159],{"class":47},"tx",[33,64161,2158],{"class":119},[33,64163,64164],{"class":47},"value",[33,64166,2158],{"class":119},[33,64168,53221],{"class":76},[33,64170,64171],{"class":119},"}\u002F200字`\n",[33,64173,64174],{"class":35,"line":34205},[33,64175,34714],{"class":47},[33,64177,64178],{"class":35,"line":34225},[33,64179,160],{"emptyLinePlaceholder":159},[33,64181,64182],{"class":35,"line":34241},[33,64183,64184],{"class":60},"    \u002F\u002F const str = 'andy'\n",[33,64186,64187],{"class":35,"line":34247},[33,64188,64189],{"class":60},"    \u002F\u002F console.log(str.length)\n",[33,64191,64192,64194,64196],{"class":35,"line":34261},[33,64193,53670],{"class":47},[33,64195,53066],{"class":52553},[33,64197,52560],{"class":47},[33,64199,64200,64202,64204],{"class":35,"line":34267},[33,64201,53038],{"class":47},[33,64203,53053],{"class":52553},[33,64205,52560],{"class":47},[33,64207,64208],{"class":35,"line":34273},[33,64209,160],{"emptyLinePlaceholder":159},[33,64211,64212,64214,64216],{"class":35,"line":34284},[33,64213,53038],{"class":47},[33,64215,51888],{"class":52553},[33,64217,52560],{"class":47},[23249,64219,64221],{"id":64220},"_3254-change事件","3.2.5.4 change事件",[14,64223,64224],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,64226,64227],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,64229,64230],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[23,64232,64234],{"className":51886,"code":64233,"language":51888,"meta":28,"style":28},"\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",[30,64235,64236,64246,64260,64264,64272,64286,64306,64318,64326,64330,64338,64352,64360,64378,64396,64408,64412,64420,64428,64432],{"__ignoreMap":28},[33,64237,64238,64240,64242,64244],{"class":35,"line":36},[33,64239,52550],{"class":47},[33,64241,52554],{"class":52553},[33,64243,52557],{"class":43},[33,64245,52560],{"class":47},[33,64247,64248,64250,64252,64254,64256,64258],{"class":35,"line":51},[33,64249,875],{"class":47},[33,64251,51888],{"class":52553},[33,64253,52569],{"class":43},[33,64255,73],{"class":47},[33,64257,52574],{"class":119},[33,64259,52560],{"class":47},[33,64261,64262],{"class":35,"line":57},[33,64263,160],{"emptyLinePlaceholder":159},[33,64265,64266,64268,64270],{"class":35,"line":64},[33,64267,875],{"class":47},[33,64269,52587],{"class":52553},[33,64271,52560],{"class":47},[33,64273,64274,64276,64278,64280,64282,64284],{"class":35,"line":83},[33,64275,53397],{"class":47},[33,64277,52597],{"class":52553},[33,64279,52600],{"class":43},[33,64281,73],{"class":47},[33,64283,52605],{"class":119},[33,64285,52560],{"class":47},[33,64287,64288,64290,64292,64294,64296,64298,64300,64302,64304],{"class":35,"line":89},[33,64289,53397],{"class":47},[33,64291,52597],{"class":52553},[33,64293,16171],{"class":43},[33,64295,73],{"class":47},[33,64297,52644],{"class":119},[33,64299,52624],{"class":43},[33,64301,73],{"class":47},[33,64303,52651],{"class":119},[33,64305,52560],{"class":47},[33,64307,64308,64310,64312,64314,64316],{"class":35,"line":98},[33,64309,53397],{"class":47},[33,64311,52660],{"class":52553},[33,64313,52663],{"class":47},[33,64315,52660],{"class":52553},[33,64317,52560],{"class":47},[33,64319,64320,64322,64324],{"class":35,"line":110},[33,64321,53038],{"class":47},[33,64323,52587],{"class":52553},[33,64325,52560],{"class":47},[33,64327,64328],{"class":35,"line":134},[33,64329,160],{"emptyLinePlaceholder":159},[33,64331,64332,64334,64336],{"class":35,"line":156},[33,64333,875],{"class":47},[33,64335,53053],{"class":52553},[33,64337,52560],{"class":47},[33,64339,64340,64342,64344,64346,64348,64350],{"class":35,"line":163},[33,64341,53397],{"class":47},[33,64343,55074],{"class":52553},[33,64345,55077],{"class":43},[33,64347,73],{"class":47},[33,64349,63952],{"class":119},[33,64351,52560],{"class":47},[33,64353,64354,64356,64358],{"class":35,"line":169},[33,64355,53397],{"class":47},[33,64357,53066],{"class":52553},[33,64359,52560],{"class":47},[33,64361,64362,64364,64366,64368,64370,64372,64374,64376],{"class":35,"line":175},[33,64363,12472],{"class":39},[33,64365,61858],{"class":76},[33,64367,14815],{"class":39},[33,64369,55649],{"class":47},[33,64371,55652],{"class":43},[33,64373,345],{"class":47},[33,64375,64135],{"class":119},[33,64377,884],{"class":47},[33,64379,64380,64383,64385,64387,64390,64392,64394],{"class":35,"line":181},[33,64381,64382],{"class":47},"    input.",[33,64384,59066],{"class":43},[33,64386,345],{"class":47},[33,64388,64389],{"class":119},"'change'",[33,64391,13686],{"class":47},[33,64393,55702],{"class":39},[33,64395,55705],{"class":47},[33,64397,64398,64400,64402,64404,64406],{"class":35,"line":196},[33,64399,59497],{"class":47},[33,64401,59500],{"class":43},[33,64403,345],{"class":47},[33,64405,2193],{"class":76},[33,64407,884],{"class":47},[33,64409,64410],{"class":35,"line":213},[33,64411,34714],{"class":47},[33,64413,64414,64416,64418],{"class":35,"line":228},[33,64415,53670],{"class":47},[33,64417,53066],{"class":52553},[33,64419,52560],{"class":47},[33,64421,64422,64424,64426],{"class":35,"line":1345},[33,64423,53038],{"class":47},[33,64425,53053],{"class":52553},[33,64427,52560],{"class":47},[33,64429,64430],{"class":35,"line":1350},[33,64431,160],{"emptyLinePlaceholder":159},[33,64433,64434,64436,64438],{"class":35,"line":1359},[33,64435,53038],{"class":47},[33,64437,51888],{"class":52553},[33,64439,52560],{"class":47},[14,64441,64442],{},"总结：内容发生改变才回去触发",[1599,64444,64446],{"id":64445},"_326-事件对象","3.2.6 事件对象",[23249,64448,64450],{"id":64449},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,64452,64453],{},[2918,64454],{"alt":28,"src":64455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,64457,64458],{},[2918,64459],{"alt":28,"src":64460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,64462,64463],{},"点击一次，就输出了事件对象，它是个对象",[14,64465,64466],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,64468,64469],{},[2918,64470],{"alt":28,"src":64471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23249,64473,64475],{"id":64474},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,64477,64478],{},[2918,64479],{"alt":28,"src":64480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,64482,64483],{},"实现按特殊字符才是实现打印输出效果：",[23,64485,64487],{"className":54320,"code":64486,"language":54322,"meta":28,"style":28},"\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",[30,64488,64489,64497,64502,64516,64524,64529,64534,64539,64544,64549,64554,64559,64564,64569,64573,64577,64585],{"__ignoreMap":28},[33,64490,64491,64493,64495],{"class":35,"line":36},[33,64492,875],{"class":47},[33,64494,53053],{"class":52553},[33,64496,52560],{"class":47},[33,64498,64499],{"class":35,"line":51},[33,64500,64501],{"class":60},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[33,64503,64504,64506,64508,64510,64512,64514],{"class":35,"line":57},[33,64505,53397],{"class":47},[33,64507,55074],{"class":52553},[33,64509,55077],{"class":43},[33,64511,73],{"class":47},[33,64513,63952],{"class":119},[33,64515,52560],{"class":47},[33,64517,64518,64520,64522],{"class":35,"line":64},[33,64519,53397],{"class":47},[33,64521,53066],{"class":52553},[33,64523,52560],{"class":47},[33,64525,64526],{"class":35,"line":83},[33,64527,64528],{"class":47},"    \u002F\u002F const btn = document.querySelector('button')\n",[33,64530,64531],{"class":35,"line":89},[33,64532,64533],{"class":47},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[33,64535,64536],{"class":35,"line":98},[33,64537,64538],{"class":47},"    \u002F\u002F   console.log(e);\n",[33,64540,64541],{"class":35,"line":110},[33,64542,64543],{"class":47},"    \u002F\u002F })\n",[33,64545,64546],{"class":35,"line":134},[33,64547,64548],{"class":47},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[33,64550,64551],{"class":35,"line":156},[33,64552,64553],{"class":47},"    const input = document.querySelector('input')\n",[33,64555,64556],{"class":35,"line":163},[33,64557,64558],{"class":47},"    input.addEventListener('keyup', function (e) {\n",[33,64560,64561],{"class":35,"line":169},[33,64562,64563],{"class":47},"      if (e.key === 'Enter') {\n",[33,64565,64566],{"class":35,"line":175},[33,64567,64568],{"class":47},"        console.log('我按下了回车键')\n",[33,64570,64571],{"class":35,"line":181},[33,64572,53651],{"class":47},[33,64574,64575],{"class":35,"line":196},[33,64576,34714],{"class":47},[33,64578,64579,64581,64583],{"class":35,"line":213},[33,64580,53670],{"class":47},[33,64582,53066],{"class":52553},[33,64584,52560],{"class":47},[33,64586,64587,64589,64591],{"class":35,"line":228},[33,64588,53038],{"class":47},[33,64590,53053],{"class":52553},[33,64592,52560],{"class":47},[23249,64594,64596],{"id":64595},"_3263-trim方法","3.2.6.3 trim方法",[14,64598,64599],{},[2918,64600],{"alt":28,"src":64601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,64603,64604],{},[2918,64605],{"alt":28,"src":64606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,64608,64609],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,64611,64612],{},"str.trim()",[1599,64614,64616],{"id":64615},"_327-环境对象","3.2.7 环境对象",[14,64618,64619],{},[2918,64620],{"alt":28,"src":64621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,64623,64624],{},[2918,64625],{"alt":28,"src":64626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,64628,64629],{},[2918,64630],{"alt":28,"src":64631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,64633,64634],{},"实际函数调用是window.fn()",[14,64636,64637],{},"普通函数里面this指向的是window",[561,64639,64640,64643,64646],{},[564,64641,64642],{},"在普通函数下，this指向的是window",[564,64644,64645],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[564,64647,64648],{},"箭头函数没有this",[14,64650,64651],{},"粗略记法就是：谁调用，this就指向谁",[14,64653,64654],{},[2918,64655],{"alt":28,"src":64656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,64658,64659],{},[2918,64660],{"alt":28,"src":64661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,64663,64664],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,64666,64667],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[23,64669,64671],{"className":54320,"code":64670,"language":54322,"meta":28,"style":28},"\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",[30,64672,64673,64681,64693,64701,64706,64711,64716,64721,64725,64733],{"__ignoreMap":28},[33,64674,64675,64677,64679],{"class":35,"line":36},[33,64676,875],{"class":47},[33,64678,53053],{"class":52553},[33,64680,52560],{"class":47},[33,64682,64683,64685,64687,64689,64691],{"class":35,"line":51},[33,64684,53397],{"class":47},[33,64686,55140],{"class":52553},[33,64688,55146],{"class":47},[33,64690,55140],{"class":52553},[33,64692,52560],{"class":47},[33,64694,64695,64697,64699],{"class":35,"line":57},[33,64696,53397],{"class":47},[33,64698,53066],{"class":52553},[33,64700,52560],{"class":47},[33,64702,64703],{"class":35,"line":64},[33,64704,64705],{"class":47},"    const button = document.querySelector('button')\n",[33,64707,64708],{"class":35,"line":83},[33,64709,64710],{"class":47},"    button.addEventListener('click', function () {\n",[33,64712,64713],{"class":35,"line":89},[33,64714,64715],{"class":47},"      \u002F\u002F console.log(this);\n",[33,64717,64718],{"class":35,"line":98},[33,64719,64720],{"class":47},"      this.style.color = 'pink'\n",[33,64722,64723],{"class":35,"line":110},[33,64724,34714],{"class":47},[33,64726,64727,64729,64731],{"class":35,"line":134},[33,64728,53670],{"class":47},[33,64730,53066],{"class":52553},[33,64732,52560],{"class":47},[33,64734,64735,64737,64739],{"class":35,"line":156},[33,64736,53038],{"class":47},[33,64738,53053],{"class":52553},[33,64740,52560],{"class":47},[1599,64742,64744],{"id":64743},"_328-回调函数","3.2.8 回调函数",[14,64746,64747],{},[2918,64748],{"alt":28,"src":64749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,64751,64752],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,64754,12583],{},[561,64756,64757,64760,64763],{},[564,64758,64759],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[564,64761,64762],{},"回调函数本质还是函数，只不过把它当成参数使用",[564,64764,64765],{},"使用匿名函数做为回调函数比较常见",[1599,64767,64769],{"id":64768},"_329-tab栏切换","3.2.9 tab栏切换",[14,64771,64772],{},[2918,64773],{"alt":28,"src":64774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[23,64776,64778],{"className":51886,"code":64777,"language":51888,"meta":28,"style":28},"\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",[30,64779,64780,64790,64804,64808,64816,64830,64850,64870,64883,64891,64897,64907,64917,64921,64925,64932,64945,64958,64970,64986,64990,64994,65001,65013,65025,65037,65047,65057,65061,65065,65074,65086,65097,65109,65113,65117,65125,65135,65145,65155,65159,65163,65173,65187,65199,65203,65207,65219,65230,65247,65257,65261,65265,65280,65291,65301,65305,65309,65316,65331,65335,65339,65347,65357,65361,65365,65374,65384,65388,65396,65404,65408,65416,65431,65446,65459,65467,65501,65528,65555,65582,65609,65617,65625,65640,65677,65712,65747,65782,65817,65825,65833,65841,65846,65851,65871,65876,65905,65910,65915,65933,65938,65943,65948,65970,65975,65991,65995,66000,66005,66026,66031,66060,66064,66069,66073,66081,66089,66093],{"__ignoreMap":28},[33,64781,64782,64784,64786,64788],{"class":35,"line":36},[33,64783,52550],{"class":47},[33,64785,52554],{"class":52553},[33,64787,52557],{"class":43},[33,64789,52560],{"class":47},[33,64791,64792,64794,64796,64798,64800,64802],{"class":35,"line":51},[33,64793,875],{"class":47},[33,64795,51888],{"class":52553},[33,64797,52569],{"class":43},[33,64799,73],{"class":47},[33,64801,52574],{"class":119},[33,64803,52560],{"class":47},[33,64805,64806],{"class":35,"line":57},[33,64807,160],{"emptyLinePlaceholder":159},[33,64809,64810,64812,64814],{"class":35,"line":64},[33,64811,875],{"class":47},[33,64813,52587],{"class":52553},[33,64815,52560],{"class":47},[33,64817,64818,64820,64822,64824,64826,64828],{"class":35,"line":83},[33,64819,53397],{"class":47},[33,64821,52597],{"class":52553},[33,64823,52600],{"class":43},[33,64825,73],{"class":47},[33,64827,52605],{"class":119},[33,64829,60380],{"class":47},[33,64831,64832,64834,64836,64838,64840,64842,64844,64846,64848],{"class":35,"line":89},[33,64833,53397],{"class":47},[33,64835,52597],{"class":52553},[33,64837,52616],{"class":43},[33,64839,73],{"class":47},[33,64841,52621],{"class":119},[33,64843,52624],{"class":43},[33,64845,73],{"class":47},[33,64847,52629],{"class":119},[33,64849,60380],{"class":47},[33,64851,64852,64854,64856,64858,64860,64862,64864,64866,64868],{"class":35,"line":98},[33,64853,53397],{"class":47},[33,64855,52597],{"class":52553},[33,64857,16171],{"class":43},[33,64859,73],{"class":47},[33,64861,52644],{"class":119},[33,64863,52624],{"class":43},[33,64865,73],{"class":47},[33,64867,52651],{"class":119},[33,64869,60380],{"class":47},[33,64871,64872,64874,64876,64879,64881],{"class":35,"line":110},[33,64873,53397],{"class":47},[33,64875,52660],{"class":52553},[33,64877,64878],{"class":47},">tab栏切换\u003C\u002F",[33,64880,52660],{"class":52553},[33,64882,52560],{"class":47},[33,64884,64885,64887,64889],{"class":35,"line":134},[33,64886,53397],{"class":47},[33,64888,1544],{"class":52553},[33,64890,52560],{"class":47},[33,64892,64893,64895],{"class":35,"line":156},[33,64894,184],{"class":52553},[33,64896,16823],{"class":47},[33,64898,64899,64901,64903,64905],{"class":35,"line":163},[33,64900,55959],{"class":76},[33,64902,52690],{"class":47},[33,64904,766],{"class":76},[33,64906,80],{"class":47},[33,64908,64909,64911,64913,64915],{"class":35,"line":169},[33,64910,55948],{"class":76},[33,64912,52690],{"class":47},[33,64914,766],{"class":76},[33,64916,80],{"class":47},[33,64918,64919],{"class":35,"line":175},[33,64920,916],{"class":47},[33,64922,64923],{"class":35,"line":181},[33,64924,160],{"emptyLinePlaceholder":159},[33,64926,64927,64930],{"class":35,"line":196},[33,64928,64929],{"class":43},"    .tab",[33,64931,16823],{"class":47},[33,64933,64934,64936,64938,64941,64943],{"class":35,"line":213},[33,64935,56024],{"class":76},[33,64937,52690],{"class":47},[33,64939,64940],{"class":76},"590",[33,64942,52745],{"class":39},[33,64944,80],{"class":47},[33,64946,64947,64949,64951,64954,64956],{"class":35,"line":228},[33,64948,56038],{"class":76},[33,64950,52690],{"class":47},[33,64952,64953],{"class":76},"340",[33,64955,52745],{"class":39},[33,64957,80],{"class":47},[33,64959,64960,64962,64964,64966,64968],{"class":35,"line":1345},[33,64961,55959],{"class":76},[33,64963,52690],{"class":47},[33,64965,1045],{"class":76},[33,64967,52745],{"class":39},[33,64969,80],{"class":47},[33,64971,64972,64974,64976,64978,64980,64982,64984],{"class":35,"line":1350},[33,64973,63230],{"class":76},[33,64975,52690],{"class":47},[33,64977,701],{"class":76},[33,64979,52745],{"class":39},[33,64981,52774],{"class":76},[33,64983,63497],{"class":76},[33,64985,80],{"class":47},[33,64987,64988],{"class":35,"line":1359},[33,64989,916],{"class":47},[33,64991,64992],{"class":35,"line":1364},[33,64993,160],{"emptyLinePlaceholder":159},[33,64995,64996,64999],{"class":35,"line":1370},[33,64997,64998],{"class":43},"    .tab-nav",[33,65000,16823],{"class":47},[33,65002,65003,65005,65007,65009,65011],{"class":35,"line":1425},[33,65004,56024],{"class":76},[33,65006,52690],{"class":47},[33,65008,457],{"class":76},[33,65010,1939],{"class":39},[33,65012,80],{"class":47},[33,65014,65015,65017,65019,65021,65023],{"class":35,"line":1438},[33,65016,56038],{"class":76},[33,65018,52690],{"class":47},[33,65020,2505],{"class":76},[33,65022,52745],{"class":39},[33,65024,80],{"class":47},[33,65026,65027,65029,65031,65033,65035],{"class":35,"line":1451},[33,65028,58612],{"class":76},[33,65030,52690],{"class":47},[33,65032,2505],{"class":76},[33,65034,52745],{"class":39},[33,65036,80],{"class":47},[33,65038,65039,65041,65043,65045],{"class":35,"line":1457},[33,65040,56262],{"class":76},[33,65042,52690],{"class":47},[33,65044,52730],{"class":76},[33,65046,80],{"class":47},[33,65048,65049,65051,65053,65055],{"class":35,"line":1466},[33,65050,56273],{"class":76},[33,65052,52690],{"class":47},[33,65054,52921],{"class":76},[33,65056,80],{"class":47},[33,65058,65059],{"class":35,"line":1471},[33,65060,916],{"class":47},[33,65062,65063],{"class":35,"line":1477},[33,65064,160],{"emptyLinePlaceholder":159},[33,65066,65067,65069,65072],{"class":35,"line":1504},[33,65068,64998],{"class":43},[33,65070,65071],{"class":52553}," h3",[33,65073,16823],{"class":47},[33,65075,65076,65078,65080,65082,65084],{"class":35,"line":1509},[33,65077,56175],{"class":76},[33,65079,52690],{"class":47},[33,65081,2399],{"class":76},[33,65083,52745],{"class":39},[33,65085,80],{"class":47},[33,65087,65088,65090,65092,65095],{"class":35,"line":1525},[33,65089,63587],{"class":76},[33,65091,52690],{"class":47},[33,65093,65094],{"class":76},"normal",[33,65096,80],{"class":47},[33,65098,65099,65101,65103,65105,65107],{"class":35,"line":1535},[33,65100,63253],{"class":76},[33,65102,52690],{"class":47},[33,65104,1045],{"class":76},[33,65106,52745],{"class":39},[33,65108,80],{"class":47},[33,65110,65111],{"class":35,"line":1540},[33,65112,916],{"class":47},[33,65114,65115],{"class":35,"line":4027},[33,65116,160],{"emptyLinePlaceholder":159},[33,65118,65119,65121,65123],{"class":35,"line":4032},[33,65120,64998],{"class":43},[33,65122,62545],{"class":52553},[33,65124,16823],{"class":47},[33,65126,65127,65129,65131,65133],{"class":35,"line":9199},[33,65128,55985],{"class":76},[33,65130,52690],{"class":47},[33,65132,55990],{"class":76},[33,65134,80],{"class":47},[33,65136,65137,65139,65141,65143],{"class":35,"line":9223},[33,65138,56262],{"class":76},[33,65140,52690],{"class":47},[33,65142,52730],{"class":76},[33,65144,80],{"class":47},[33,65146,65147,65149,65151,65153],{"class":35,"line":9228},[33,65148,56273],{"class":76},[33,65150,52690],{"class":47},[33,65152,52833],{"class":76},[33,65154,80],{"class":47},[33,65156,65157],{"class":35,"line":9234},[33,65158,916],{"class":47},[33,65160,65161],{"class":35,"line":9261},[33,65162,160],{"emptyLinePlaceholder":159},[33,65164,65165,65167,65169,65171],{"class":35,"line":9266},[33,65166,64998],{"class":43},[33,65168,62545],{"class":52553},[33,65170,56328],{"class":52553},[33,65172,16823],{"class":47},[33,65174,65175,65177,65179,65181,65183,65185],{"class":35,"line":9272},[33,65176,55959],{"class":76},[33,65178,52690],{"class":47},[33,65180,766],{"class":76},[33,65182,10201],{"class":76},[33,65184,52745],{"class":39},[33,65186,80],{"class":47},[33,65188,65189,65191,65193,65195,65197],{"class":35,"line":9284},[33,65190,56175],{"class":76},[33,65192,52690],{"class":47},[33,65194,2149],{"class":76},[33,65196,52745],{"class":39},[33,65198,80],{"class":47},[33,65200,65201],{"class":35,"line":9296},[33,65202,916],{"class":47},[33,65204,65205],{"class":35,"line":9308},[33,65206,160],{"emptyLinePlaceholder":159},[33,65208,65209,65211,65213,65215,65217],{"class":35,"line":10967},[33,65210,64998],{"class":43},[33,65212,62545],{"class":52553},[33,65214,56328],{"class":52553},[33,65216,70],{"class":52553},[33,65218,16823],{"class":47},[33,65220,65221,65224,65226,65228],{"class":35,"line":10992},[33,65222,65223],{"class":76},"      text-decoration",[33,65225,52690],{"class":47},[33,65227,55990],{"class":76},[33,65229,80],{"class":47},[33,65231,65232,65234,65236,65238,65240,65242,65245],{"class":35,"line":11015},[33,65233,63485],{"class":76},[33,65235,52690],{"class":47},[33,65237,707],{"class":76},[33,65239,52745],{"class":39},[33,65241,52774],{"class":76},[33,65243,65244],{"class":76}," transparent",[33,65246,80],{"class":47},[33,65248,65249,65251,65253,65255],{"class":35,"line":11039},[33,65250,58669],{"class":76},[33,65252,52690],{"class":47},[33,65254,63622],{"class":76},[33,65256,80],{"class":47},[33,65258,65259],{"class":35,"line":11044},[33,65260,916],{"class":47},[33,65262,65263],{"class":35,"line":11049},[33,65264,160],{"emptyLinePlaceholder":159},[33,65266,65267,65269,65271,65273,65275,65278],{"class":35,"line":11054},[33,65268,64998],{"class":43},[33,65270,62545],{"class":52553},[33,65272,56328],{"class":52553},[33,65274,70],{"class":52553},[33,65276,65277],{"class":43},".active",[33,65279,16823],{"class":47},[33,65281,65282,65284,65286,65289],{"class":35,"line":11063},[33,65283,63044],{"class":76},[33,65285,52690],{"class":47},[33,65287,65288],{"class":76},"#e1251b",[33,65290,80],{"class":47},[33,65292,65293,65295,65297,65299],{"class":35,"line":11068},[33,65294,58669],{"class":76},[33,65296,52690],{"class":47},[33,65298,65288],{"class":76},[33,65300,80],{"class":47},[33,65302,65303],{"class":35,"line":11074},[33,65304,916],{"class":47},[33,65306,65307],{"class":35,"line":11095},[33,65308,160],{"emptyLinePlaceholder":159},[33,65310,65311,65314],{"class":35,"line":11101},[33,65312,65313],{"class":43},"    .tab-content",[33,65315,16823],{"class":47},[33,65317,65318,65320,65322,65324,65327,65329],{"class":35,"line":11115},[33,65319,55948],{"class":76},[33,65321,52690],{"class":47},[33,65323,766],{"class":76},[33,65325,65326],{"class":76}," 16",[33,65328,52745],{"class":39},[33,65330,80],{"class":47},[33,65332,65333],{"class":35,"line":11121},[33,65334,916],{"class":47},[33,65336,65337],{"class":35,"line":11148},[33,65338,160],{"emptyLinePlaceholder":159},[33,65340,65341,65343,65345],{"class":35,"line":11157},[33,65342,65313],{"class":43},[33,65344,63427],{"class":43},[33,65346,16823],{"class":47},[33,65348,65349,65351,65353,65355],{"class":35,"line":11163},[33,65350,56262],{"class":76},[33,65352,52690],{"class":47},[33,65354,55990],{"class":76},[33,65356,80],{"class":47},[33,65358,65359],{"class":35,"line":11171},[33,65360,916],{"class":47},[33,65362,65363],{"class":35,"line":11176},[33,65364,160],{"emptyLinePlaceholder":159},[33,65366,65367,65369,65372],{"class":35,"line":17855},[33,65368,65313],{"class":43},[33,65370,65371],{"class":43}," .item.active",[33,65373,16823],{"class":47},[33,65375,65376,65378,65380,65382],{"class":35,"line":17861},[33,65377,56262],{"class":76},[33,65379,52690],{"class":47},[33,65381,62122],{"class":76},[33,65383,80],{"class":47},[33,65385,65386],{"class":35,"line":17884},[33,65387,916],{"class":47},[33,65389,65390,65392,65394],{"class":35,"line":17890},[33,65391,53670],{"class":47},[33,65393,1544],{"class":52553},[33,65395,52560],{"class":47},[33,65397,65398,65400,65402],{"class":35,"line":17913},[33,65399,53038],{"class":47},[33,65401,52587],{"class":52553},[33,65403,52560],{"class":47},[33,65405,65406],{"class":35,"line":17927},[33,65407,160],{"emptyLinePlaceholder":159},[33,65409,65410,65412,65414],{"class":35,"line":17947},[33,65411,875],{"class":47},[33,65413,53053],{"class":52553},[33,65415,52560],{"class":47},[33,65417,65418,65420,65422,65424,65426,65429],{"class":35,"line":17953},[33,65419,53397],{"class":47},[33,65421,52864],{"class":52553},[33,65423,54739],{"class":43},[33,65425,73],{"class":47},[33,65427,65428],{"class":119},"\"tab\"",[33,65430,52560],{"class":47},[33,65432,65433,65435,65437,65439,65441,65444],{"class":35,"line":17964},[33,65434,52594],{"class":47},[33,65436,52864],{"class":52553},[33,65438,54739],{"class":43},[33,65440,73],{"class":47},[33,65442,65443],{"class":119},"\"tab-nav\"",[33,65445,52560],{"class":47},[33,65447,65448,65450,65452,65455,65457],{"class":35,"line":17987},[33,65449,56487],{"class":47},[33,65451,1599],{"class":52553},[33,65453,65454],{"class":47},">每日特价\u003C\u002F",[33,65456,1599],{"class":52553},[33,65458,52560],{"class":47},[33,65460,65461,65463,65465],{"class":35,"line":18009},[33,65462,56487],{"class":47},[33,65464,561],{"class":52553},[33,65466,52560],{"class":47},[33,65468,65469,65471,65473,65475,65477,65479,65481,65483,65485,65487,65490,65493,65495,65497,65499],{"class":35,"line":18014},[33,65470,56555],{"class":47},[33,65472,564],{"class":52553},[33,65474,62305],{"class":47},[33,65476,126],{"class":52553},[33,65478,54739],{"class":43},[33,65480,73],{"class":47},[33,65482,60959],{"class":119},[33,65484,62310],{"class":43},[33,65486,73],{"class":47},[33,65488,65489],{"class":119},"\"javascript:;\"",[33,65491,65492],{"class":47},">精选\u003C\u002F",[33,65494,126],{"class":52553},[33,65496,56567],{"class":47},[33,65498,564],{"class":52553},[33,65500,52560],{"class":47},[33,65502,65503,65505,65507,65509,65511,65513,65515,65517,65520,65522,65524,65526],{"class":35,"line":18020},[33,65504,56555],{"class":47},[33,65506,564],{"class":52553},[33,65508,62305],{"class":47},[33,65510,126],{"class":52553},[33,65512,62310],{"class":43},[33,65514,73],{"class":47},[33,65516,65489],{"class":119},[33,65518,65519],{"class":47},">美食\u003C\u002F",[33,65521,126],{"class":52553},[33,65523,56567],{"class":47},[33,65525,564],{"class":52553},[33,65527,52560],{"class":47},[33,65529,65530,65532,65534,65536,65538,65540,65542,65544,65547,65549,65551,65553],{"class":35,"line":18034},[33,65531,56555],{"class":47},[33,65533,564],{"class":52553},[33,65535,62305],{"class":47},[33,65537,126],{"class":52553},[33,65539,62310],{"class":43},[33,65541,73],{"class":47},[33,65543,65489],{"class":119},[33,65545,65546],{"class":47},">百货\u003C\u002F",[33,65548,126],{"class":52553},[33,65550,56567],{"class":47},[33,65552,564],{"class":52553},[33,65554,52560],{"class":47},[33,65556,65557,65559,65561,65563,65565,65567,65569,65571,65574,65576,65578,65580],{"class":35,"line":18047},[33,65558,56555],{"class":47},[33,65560,564],{"class":52553},[33,65562,62305],{"class":47},[33,65564,126],{"class":52553},[33,65566,62310],{"class":43},[33,65568,73],{"class":47},[33,65570,65489],{"class":119},[33,65572,65573],{"class":47},">个护\u003C\u002F",[33,65575,126],{"class":52553},[33,65577,56567],{"class":47},[33,65579,564],{"class":52553},[33,65581,52560],{"class":47},[33,65583,65584,65586,65588,65590,65592,65594,65596,65598,65601,65603,65605,65607],{"class":35,"line":18052},[33,65585,56555],{"class":47},[33,65587,564],{"class":52553},[33,65589,62305],{"class":47},[33,65591,126],{"class":52553},[33,65593,62310],{"class":43},[33,65595,73],{"class":47},[33,65597,65489],{"class":119},[33,65599,65600],{"class":47},">预告\u003C\u002F",[33,65602,126],{"class":52553},[33,65604,56567],{"class":47},[33,65606,564],{"class":52553},[33,65608,52560],{"class":47},[33,65610,65611,65613,65615],{"class":35,"line":18066},[33,65612,56660],{"class":47},[33,65614,561],{"class":52553},[33,65616,52560],{"class":47},[33,65618,65619,65621,65623],{"class":35,"line":18071},[33,65620,53029],{"class":47},[33,65622,52864],{"class":52553},[33,65624,52560],{"class":47},[33,65626,65627,65629,65631,65633,65635,65638],{"class":35,"line":18077},[33,65628,52594],{"class":47},[33,65630,52864],{"class":52553},[33,65632,54739],{"class":43},[33,65634,73],{"class":47},[33,65636,65637],{"class":119},"\"tab-content\"",[33,65639,52560],{"class":47},[33,65641,65642,65644,65646,65648,65650,65653,65655,65657,65659,65661,65664,65666,65668,65670,65673,65675],{"class":35,"line":18082},[33,65643,56487],{"class":47},[33,65645,52864],{"class":52553},[33,65647,54739],{"class":43},[33,65649,73],{"class":47},[33,65651,65652],{"class":119},"\"item active\"",[33,65654,62305],{"class":47},[33,65656,2918],{"class":52553},[33,65658,56492],{"class":43},[33,65660,73],{"class":47},[33,65662,65663],{"class":119},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[33,65665,56500],{"class":43},[33,65667,73],{"class":47},[33,65669,1520],{"class":119},[33,65671,65672],{"class":47}," \u002F>\u003C\u002F",[33,65674,52864],{"class":52553},[33,65676,52560],{"class":47},[33,65678,65679,65681,65683,65685,65687,65689,65691,65693,65695,65697,65700,65702,65704,65706,65708,65710],{"class":35,"line":18096},[33,65680,56487],{"class":47},[33,65682,52864],{"class":52553},[33,65684,54739],{"class":43},[33,65686,73],{"class":47},[33,65688,63876],{"class":119},[33,65690,62305],{"class":47},[33,65692,2918],{"class":52553},[33,65694,56492],{"class":43},[33,65696,73],{"class":47},[33,65698,65699],{"class":119},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[33,65701,56500],{"class":43},[33,65703,73],{"class":47},[33,65705,1520],{"class":119},[33,65707,65672],{"class":47},[33,65709,52864],{"class":52553},[33,65711,52560],{"class":47},[33,65713,65714,65716,65718,65720,65722,65724,65726,65728,65730,65732,65735,65737,65739,65741,65743,65745],{"class":35,"line":18101},[33,65715,56487],{"class":47},[33,65717,52864],{"class":52553},[33,65719,54739],{"class":43},[33,65721,73],{"class":47},[33,65723,63876],{"class":119},[33,65725,62305],{"class":47},[33,65727,2918],{"class":52553},[33,65729,56492],{"class":43},[33,65731,73],{"class":47},[33,65733,65734],{"class":119},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[33,65736,56500],{"class":43},[33,65738,73],{"class":47},[33,65740,1520],{"class":119},[33,65742,65672],{"class":47},[33,65744,52864],{"class":52553},[33,65746,52560],{"class":47},[33,65748,65749,65751,65753,65755,65757,65759,65761,65763,65765,65767,65770,65772,65774,65776,65778,65780],{"class":35,"line":18106},[33,65750,56487],{"class":47},[33,65752,52864],{"class":52553},[33,65754,54739],{"class":43},[33,65756,73],{"class":47},[33,65758,63876],{"class":119},[33,65760,62305],{"class":47},[33,65762,2918],{"class":52553},[33,65764,56492],{"class":43},[33,65766,73],{"class":47},[33,65768,65769],{"class":119},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[33,65771,56500],{"class":43},[33,65773,73],{"class":47},[33,65775,1520],{"class":119},[33,65777,65672],{"class":47},[33,65779,52864],{"class":52553},[33,65781,52560],{"class":47},[33,65783,65784,65786,65788,65790,65792,65794,65796,65798,65800,65802,65805,65807,65809,65811,65813,65815],{"class":35,"line":18120},[33,65785,56487],{"class":47},[33,65787,52864],{"class":52553},[33,65789,54739],{"class":43},[33,65791,73],{"class":47},[33,65793,63876],{"class":119},[33,65795,62305],{"class":47},[33,65797,2918],{"class":52553},[33,65799,56492],{"class":43},[33,65801,73],{"class":47},[33,65803,65804],{"class":119},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[33,65806,56500],{"class":43},[33,65808,73],{"class":47},[33,65810,1520],{"class":119},[33,65812,65672],{"class":47},[33,65814,52864],{"class":52553},[33,65816,52560],{"class":47},[33,65818,65819,65821,65823],{"class":35,"line":18132},[33,65820,53029],{"class":47},[33,65822,52864],{"class":52553},[33,65824,52560],{"class":47},[33,65826,65827,65829,65831],{"class":35,"line":18137},[33,65828,53670],{"class":47},[33,65830,52864],{"class":52553},[33,65832,52560],{"class":47},[33,65834,65835,65837,65839],{"class":35,"line":18150},[33,65836,53397],{"class":47},[33,65838,53066],{"class":52553},[33,65840,52560],{"class":47},[33,65842,65843],{"class":35,"line":18155},[33,65844,65845],{"class":60},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[33,65847,65848],{"class":35,"line":18160},[33,65849,65850],{"class":60},"    \u002F\u002F 1.1 获取 a 元素 \n",[33,65852,65853,65855,65858,65860,65862,65864,65866,65869],{"class":35,"line":18165},[33,65854,12472],{"class":39},[33,65856,65857],{"class":76}," as",[33,65859,14815],{"class":39},[33,65861,55649],{"class":47},[33,65863,56934],{"class":43},[33,65865,345],{"class":47},[33,65867,65868],{"class":119},"'.tab-nav a'",[33,65870,884],{"class":47},[33,65872,65873],{"class":35,"line":18178},[33,65874,65875],{"class":60},"    \u002F\u002F console.log(as) \n",[33,65877,65878,65880,65882,65884,65886,65888,65890,65892,65894,65897,65899,65901,65903],{"class":35,"line":18183},[33,65879,857],{"class":39},[33,65881,860],{"class":47},[33,65883,53100],{"class":39},[33,65885,10689],{"class":47},[33,65887,73],{"class":39},[33,65889,5492],{"class":76},[33,65891,10696],{"class":47},[33,65893,875],{"class":39},[33,65895,65896],{"class":47}," as.",[33,65898,53221],{"class":76},[33,65900,1492],{"class":47},[33,65902,811],{"class":39},[33,65904,13693],{"class":47},[33,65906,65907],{"class":35,"line":33886},[33,65908,65909],{"class":60},"      \u002F\u002F console.log(as[i])\n",[33,65911,65912],{"class":35,"line":33892},[33,65913,65914],{"class":60},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[33,65916,65917,65920,65922,65924,65927,65929,65931],{"class":35,"line":33898},[33,65918,65919],{"class":47},"      as[i].",[33,65921,59066],{"class":43},[33,65923,345],{"class":47},[33,65925,65926],{"class":119},"'mouseenter'",[33,65928,13686],{"class":47},[33,65930,55702],{"class":39},[33,65932,55705],{"class":47},[33,65934,65935],{"class":35,"line":33904},[33,65936,65937],{"class":60},"        \u002F\u002F console.log('鼠标经过')\n",[33,65939,65940],{"class":35,"line":33910},[33,65941,65942],{"class":60},"        \u002F\u002F 排他思想  \n",[33,65944,65945],{"class":35,"line":33921},[33,65946,65947],{"class":60},"        \u002F\u002F 干掉别人 移除类active\n",[33,65949,65950,65952,65954,65956,65959,65961,65963,65965,65968],{"class":35,"line":33927},[33,65951,53178],{"class":47},[33,65953,55652],{"class":43},[33,65955,345],{"class":47},[33,65957,65958],{"class":119},"'.tab-nav .active'",[33,65960,58256],{"class":47},[33,65962,58259],{"class":43},[33,65964,345],{"class":47},[33,65966,65967],{"class":119},"'active'",[33,65969,884],{"class":47},[33,65971,65972],{"class":35,"line":33947},[33,65973,65974],{"class":60},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[33,65976,65977,65980,65983,65985,65987,65989],{"class":35,"line":33953},[33,65978,65979],{"class":76},"        this",[33,65981,65982],{"class":47},".classList.",[33,65984,6724],{"class":43},[33,65986,345],{"class":47},[33,65988,65967],{"class":119},[33,65990,884],{"class":47},[33,65992,65993],{"class":35,"line":33964},[33,65994,160],{"emptyLinePlaceholder":159},[33,65996,65997],{"class":35,"line":33970},[33,65998,65999],{"class":60},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[33,66001,66002],{"class":35,"line":33976},[33,66003,66004],{"class":60},"        \u002F\u002F 干掉别人\n",[33,66006,66007,66009,66011,66013,66016,66018,66020,66022,66024],{"class":35,"line":33982},[33,66008,53178],{"class":47},[33,66010,55652],{"class":43},[33,66012,345],{"class":47},[33,66014,66015],{"class":119},"'.tab-content .active'",[33,66017,58256],{"class":47},[33,66019,58259],{"class":43},[33,66021,345],{"class":47},[33,66023,65967],{"class":119},[33,66025,884],{"class":47},[33,66027,66028],{"class":35,"line":33988},[33,66029,66030],{"class":60},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[33,66032,66033,66035,66037,66039,66042,66044,66046,66048,66050,66052,66054,66056,66058],{"class":35,"line":33994},[33,66034,53178],{"class":47},[33,66036,55652],{"class":43},[33,66038,345],{"class":47},[33,66040,66041],{"class":119},"`.tab-content .item:nth-child(${",[33,66043,1239],{"class":47},[33,66045,46819],{"class":39},[33,66047,26371],{"class":76},[33,66049,58285],{"class":119},[33,66051,58256],{"class":47},[33,66053,6724],{"class":43},[33,66055,345],{"class":47},[33,66057,65967],{"class":119},[33,66059,884],{"class":47},[33,66061,66062],{"class":35,"line":34000},[33,66063,160],{"emptyLinePlaceholder":159},[33,66065,66066],{"class":35,"line":34006},[33,66067,66068],{"class":47},"      })\n",[33,66070,66071],{"class":35,"line":34026},[33,66072,916],{"class":47},[33,66074,66075,66077,66079],{"class":35,"line":34032},[33,66076,53670],{"class":47},[33,66078,53066],{"class":52553},[33,66080,52560],{"class":47},[33,66082,66083,66085,66087],{"class":35,"line":34048},[33,66084,53038],{"class":47},[33,66086,53053],{"class":52553},[33,66088,52560],{"class":47},[33,66090,66091],{"class":35,"line":34054},[33,66092,160],{"emptyLinePlaceholder":159},[33,66094,66095,66097,66099],{"class":35,"line":34068},[33,66096,53038],{"class":47},[33,66098,51888],{"class":52553},[33,66100,52560],{"class":47},[14,66102,66103],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,66105,66106],{},"在监听事件中，this指向的就是他的调用者",[14,66108,66109],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,66111,54973],{},[14,66113,66114],{},"(function () {",[14,66116,66117],{},"const list = document.querySelector('.xtx-elevator-list')",[14,66119,66120],{},"list.addEventListener('click', function (e) {",[14,66122,66123],{},"if (e.target.tagName === 'A') {",[14,66125,66126],{},"\u002F\u002F 排他思想",[14,66128,66129],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,66131,66132],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,66134,66135],{},"\u002F\u002F console.log(old);",[14,66137,66138],{},"\u002F\u002F 判断",[14,66140,66141],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,66143,66144],{},"if (old) old.classList.remove('active')",[14,66146,66147],{},"e.target.classList.add('active')",[14,66149,2542],{},[14,66151,53717],{},[14,66153,66154],{},"})();",[1599,66156,66158],{"id":66157},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[23,66160,66162],{"className":51886,"code":66161,"language":51888,"meta":28,"style":28},"\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",[30,66163,66164,66174,66178,66186,66190,66204,66218,66230,66238,66244,66254,66264,66268,66272,66279,66291,66302,66319,66332,66346,66356,66360,66364,66371,66382,66400,66410,66422,66426,66430,66437,66454,66465,66477,66481,66485,66492,66504,66508,66516,66524,66528,66536,66544,66552,66567,66611,66619,66632,66645,66658,66666,66674,66682,66710,66718,66730,66743,66756,66764,66772,66780,66806,66814,66827,66839,66852,66860,66868,66876,66902,66910,66923,66935,66948,66956,66964,66972,66977,66997,67002,67022,67027,67044,67049,67057,67062,67091,67104,67108,67112,67117,67121,67149,67154,67171,67176,67181,67186,67191,67217,67221,67225,67233,67241,67245],{"__ignoreMap":28},[33,66165,66166,66168,66170,66172],{"class":35,"line":36},[33,66167,52550],{"class":47},[33,66169,52554],{"class":52553},[33,66171,52557],{"class":43},[33,66173,52560],{"class":47},[33,66175,66176],{"class":35,"line":51},[33,66177,160],{"emptyLinePlaceholder":159},[33,66179,66180,66182,66184],{"class":35,"line":57},[33,66181,875],{"class":47},[33,66183,51888],{"class":52553},[33,66185,52560],{"class":47},[33,66187,66188],{"class":35,"line":64},[33,66189,160],{"emptyLinePlaceholder":159},[33,66191,66192,66194,66196,66198,66200,66202],{"class":35,"line":83},[33,66193,875],{"class":47},[33,66195,52587],{"class":52553},[33,66197,52569],{"class":43},[33,66199,73],{"class":47},[33,66201,52574],{"class":119},[33,66203,52560],{"class":47},[33,66205,66206,66208,66210,66212,66214,66216],{"class":35,"line":89},[33,66207,53397],{"class":47},[33,66209,52597],{"class":52553},[33,66211,52600],{"class":43},[33,66213,73],{"class":47},[33,66215,52605],{"class":119},[33,66217,52560],{"class":47},[33,66219,66220,66222,66224,66226,66228],{"class":35,"line":98},[33,66221,53397],{"class":47},[33,66223,52660],{"class":52553},[33,66225,56567],{"class":47},[33,66227,52660],{"class":52553},[33,66229,52560],{"class":47},[33,66231,66232,66234,66236],{"class":35,"line":110},[33,66233,53397],{"class":47},[33,66235,1544],{"class":52553},[33,66237,52560],{"class":47},[33,66239,66240,66242],{"class":35,"line":134},[33,66241,184],{"class":52553},[33,66243,16823],{"class":47},[33,66245,66246,66248,66250,66252],{"class":35,"line":156},[33,66247,55959],{"class":76},[33,66249,52690],{"class":47},[33,66251,766],{"class":76},[33,66253,80],{"class":47},[33,66255,66256,66258,66260,66262],{"class":35,"line":163},[33,66257,55948],{"class":76},[33,66259,52690],{"class":47},[33,66261,766],{"class":76},[33,66263,80],{"class":47},[33,66265,66266],{"class":35,"line":169},[33,66267,916],{"class":47},[33,66269,66270],{"class":35,"line":175},[33,66271,160],{"emptyLinePlaceholder":159},[33,66273,66274,66277],{"class":35,"line":181},[33,66275,66276],{"class":52553},"    table",[33,66278,16823],{"class":47},[33,66280,66281,66284,66286,66289],{"class":35,"line":196},[33,66282,66283],{"class":76},"      border-collapse",[33,66285,52690],{"class":47},[33,66287,66288],{"class":76},"collapse",[33,66290,80],{"class":47},[33,66292,66293,66296,66298,66300],{"class":35,"line":213},[33,66294,66295],{"class":76},"      border-spacing",[33,66297,52690],{"class":47},[33,66299,766],{"class":76},[33,66301,80],{"class":47},[33,66303,66304,66306,66308,66310,66312,66314,66317],{"class":35,"line":228},[33,66305,63230],{"class":76},[33,66307,52690],{"class":47},[33,66309,701],{"class":76},[33,66311,52745],{"class":39},[33,66313,52774],{"class":76},[33,66315,66316],{"class":76}," #c0c0c0",[33,66318,80],{"class":47},[33,66320,66321,66323,66325,66328,66330],{"class":35,"line":1345},[33,66322,56024],{"class":76},[33,66324,52690],{"class":47},[33,66326,66327],{"class":76},"500",[33,66329,52745],{"class":39},[33,66331,80],{"class":47},[33,66333,66334,66336,66338,66340,66342,66344],{"class":35,"line":1350},[33,66335,55959],{"class":76},[33,66337,52690],{"class":47},[33,66339,457],{"class":76},[33,66341,52745],{"class":39},[33,66343,52809],{"class":76},[33,66345,80],{"class":47},[33,66347,66348,66350,66352,66354],{"class":35,"line":1359},[33,66349,58539],{"class":76},[33,66351,52690],{"class":47},[33,66353,52845],{"class":76},[33,66355,80],{"class":47},[33,66357,66358],{"class":35,"line":1364},[33,66359,916],{"class":47},[33,66361,66362],{"class":35,"line":1370},[33,66363,160],{"emptyLinePlaceholder":159},[33,66365,66366,66369],{"class":35,"line":1425},[33,66367,66368],{"class":52553},"    th",[33,66370,16823],{"class":47},[33,66372,66373,66375,66377,66380],{"class":35,"line":1438},[33,66374,56137],{"class":76},[33,66376,52690],{"class":47},[33,66378,66379],{"class":76},"#09c",[33,66381,80],{"class":47},[33,66383,66384,66387,66389,66391,66393,66395,66398],{"class":35,"line":1451},[33,66385,66386],{"class":76},"      font",[33,66388,52690],{"class":47},[33,66390,63592],{"class":76},[33,66392,65326],{"class":76},[33,66394,52745],{"class":39},[33,66396,66397],{"class":119}," \"微软雅黑\"",[33,66399,80],{"class":47},[33,66401,66402,66404,66406,66408],{"class":35,"line":1457},[33,66403,58669],{"class":76},[33,66405,52690],{"class":47},[33,66407,62095],{"class":76},[33,66409,80],{"class":47},[33,66411,66412,66414,66416,66418,66420],{"class":35,"line":1466},[33,66413,56038],{"class":76},[33,66415,52690],{"class":47},[33,66417,2399],{"class":76},[33,66419,52745],{"class":39},[33,66421,80],{"class":47},[33,66423,66424],{"class":35,"line":1471},[33,66425,916],{"class":47},[33,66427,66428],{"class":35,"line":1477},[33,66429,160],{"emptyLinePlaceholder":159},[33,66431,66432,66435],{"class":35,"line":1504},[33,66433,66434],{"class":52553},"    td",[33,66436,16823],{"class":47},[33,66438,66439,66441,66443,66445,66447,66449,66452],{"class":35,"line":1509},[33,66440,63230],{"class":76},[33,66442,52690],{"class":47},[33,66444,701],{"class":76},[33,66446,52745],{"class":39},[33,66448,52774],{"class":76},[33,66450,66451],{"class":76}," #d0d0d0",[33,66453,80],{"class":47},[33,66455,66456,66458,66460,66463],{"class":35,"line":1525},[33,66457,58669],{"class":76},[33,66459,52690],{"class":47},[33,66461,66462],{"class":76},"#404060",[33,66464,80],{"class":47},[33,66466,66467,66469,66471,66473,66475],{"class":35,"line":1535},[33,66468,55948],{"class":76},[33,66470,52690],{"class":47},[33,66472,77],{"class":76},[33,66474,52745],{"class":39},[33,66476,80],{"class":47},[33,66478,66479],{"class":35,"line":1540},[33,66480,916],{"class":47},[33,66482,66483],{"class":35,"line":4027},[33,66484,160],{"emptyLinePlaceholder":159},[33,66486,66487,66490],{"class":35,"line":4032},[33,66488,66489],{"class":43},"    .allCheck",[33,66491,16823],{"class":47},[33,66493,66494,66496,66498,66500,66502],{"class":35,"line":9199},[33,66495,56024],{"class":76},[33,66497,52690],{"class":47},[33,66499,2212],{"class":76},[33,66501,52745],{"class":39},[33,66503,80],{"class":47},[33,66505,66506],{"class":35,"line":9223},[33,66507,916],{"class":47},[33,66509,66510,66512,66514],{"class":35,"line":9228},[33,66511,53670],{"class":47},[33,66513,1544],{"class":52553},[33,66515,52560],{"class":47},[33,66517,66518,66520,66522],{"class":35,"line":9234},[33,66519,53038],{"class":47},[33,66521,52587],{"class":52553},[33,66523,52560],{"class":47},[33,66525,66526],{"class":35,"line":9261},[33,66527,160],{"emptyLinePlaceholder":159},[33,66529,66530,66532,66534],{"class":35,"line":9266},[33,66531,875],{"class":47},[33,66533,53053],{"class":52553},[33,66535,52560],{"class":47},[33,66537,66538,66540,66542],{"class":35,"line":9272},[33,66539,53397],{"class":47},[33,66541,1756],{"class":52553},[33,66543,52560],{"class":47},[33,66545,66546,66548,66550],{"class":35,"line":9284},[33,66547,52594],{"class":47},[33,66549,1762],{"class":52553},[33,66551,52560],{"class":47},[33,66553,66554,66556,66558,66560,66562,66565],{"class":35,"line":9296},[33,66555,56487],{"class":47},[33,66557,1765],{"class":52553},[33,66559,54739],{"class":43},[33,66561,73],{"class":47},[33,66563,66564],{"class":119},"\"allCheck\"",[33,66566,52560],{"class":47},[33,66568,66569,66571,66573,66575,66577,66579,66581,66583,66585,66587,66589,66592,66595,66597,66599,66601,66604,66607,66609],{"class":35,"line":9308},[33,66570,56555],{"class":47},[33,66572,55074],{"class":52553},[33,66574,55077],{"class":43},[33,66576,73],{"class":47},[33,66578,55082],{"class":119},[33,66580,16171],{"class":43},[33,66582,73],{"class":47},[33,66584,1520],{"class":119},[33,66586,16210],{"class":43},[33,66588,73],{"class":47},[33,66590,66591],{"class":119},"\"checkAll\"",[33,66593,66594],{"class":47},"> \u003C",[33,66596,33],{"class":52553},[33,66598,54739],{"class":43},[33,66600,73],{"class":47},[33,66602,66603],{"class":119},"\"all\"",[33,66605,66606],{"class":47},">全选\u003C\u002F",[33,66608,33],{"class":52553},[33,66610,52560],{"class":47},[33,66612,66613,66615,66617],{"class":35,"line":10967},[33,66614,56660],{"class":47},[33,66616,1765],{"class":52553},[33,66618,52560],{"class":47},[33,66620,66621,66623,66625,66628,66630],{"class":35,"line":10992},[33,66622,56487],{"class":47},[33,66624,1765],{"class":52553},[33,66626,66627],{"class":47},">商品\u003C\u002F",[33,66629,1765],{"class":52553},[33,66631,52560],{"class":47},[33,66633,66634,66636,66638,66641,66643],{"class":35,"line":11015},[33,66635,56487],{"class":47},[33,66637,1765],{"class":52553},[33,66639,66640],{"class":47},">商家\u003C\u002F",[33,66642,1765],{"class":52553},[33,66644,52560],{"class":47},[33,66646,66647,66649,66651,66654,66656],{"class":35,"line":11039},[33,66648,56487],{"class":47},[33,66650,1765],{"class":52553},[33,66652,66653],{"class":47},">价格\u003C\u002F",[33,66655,1765],{"class":52553},[33,66657,52560],{"class":47},[33,66659,66660,66662,66664],{"class":35,"line":11044},[33,66661,53029],{"class":47},[33,66663,1762],{"class":52553},[33,66665,52560],{"class":47},[33,66667,66668,66670,66672],{"class":35,"line":11049},[33,66669,52594],{"class":47},[33,66671,1762],{"class":52553},[33,66673,52560],{"class":47},[33,66675,66676,66678,66680],{"class":35,"line":11054},[33,66677,56487],{"class":47},[33,66679,1807],{"class":52553},[33,66681,52560],{"class":47},[33,66683,66684,66686,66688,66690,66692,66694,66696,66698,66701,66703,66705,66708],{"class":35,"line":11063},[33,66685,56555],{"class":47},[33,66687,55074],{"class":52553},[33,66689,55077],{"class":43},[33,66691,73],{"class":47},[33,66693,55082],{"class":119},[33,66695,16171],{"class":43},[33,66697,73],{"class":47},[33,66699,66700],{"class":119},"\"check\"",[33,66702,54739],{"class":43},[33,66704,73],{"class":47},[33,66706,66707],{"class":119},"\"ck\"",[33,66709,52560],{"class":47},[33,66711,66712,66714,66716],{"class":35,"line":11068},[33,66713,56660],{"class":47},[33,66715,1807],{"class":52553},[33,66717,52560],{"class":47},[33,66719,66720,66722,66724,66726,66728],{"class":35,"line":11074},[33,66721,56487],{"class":47},[33,66723,1807],{"class":52553},[33,66725,62426],{"class":47},[33,66727,1807],{"class":52553},[33,66729,52560],{"class":47},[33,66731,66732,66734,66736,66739,66741],{"class":35,"line":11095},[33,66733,56487],{"class":47},[33,66735,1807],{"class":52553},[33,66737,66738],{"class":47},">小米\u003C\u002F",[33,66740,1807],{"class":52553},[33,66742,52560],{"class":47},[33,66744,66745,66747,66749,66752,66754],{"class":35,"line":11101},[33,66746,56487],{"class":47},[33,66748,1807],{"class":52553},[33,66750,66751],{"class":47},">￥1999\u003C\u002F",[33,66753,1807],{"class":52553},[33,66755,52560],{"class":47},[33,66757,66758,66760,66762],{"class":35,"line":11115},[33,66759,53029],{"class":47},[33,66761,1762],{"class":52553},[33,66763,52560],{"class":47},[33,66765,66766,66768,66770],{"class":35,"line":11121},[33,66767,52594],{"class":47},[33,66769,1762],{"class":52553},[33,66771,52560],{"class":47},[33,66773,66774,66776,66778],{"class":35,"line":11148},[33,66775,56487],{"class":47},[33,66777,1807],{"class":52553},[33,66779,52560],{"class":47},[33,66781,66782,66784,66786,66788,66790,66792,66794,66796,66798,66800,66802,66804],{"class":35,"line":11157},[33,66783,56555],{"class":47},[33,66785,55074],{"class":52553},[33,66787,55077],{"class":43},[33,66789,73],{"class":47},[33,66791,55082],{"class":119},[33,66793,16171],{"class":43},[33,66795,73],{"class":47},[33,66797,66700],{"class":119},[33,66799,54739],{"class":43},[33,66801,73],{"class":47},[33,66803,66707],{"class":119},[33,66805,52560],{"class":47},[33,66807,66808,66810,66812],{"class":35,"line":11163},[33,66809,56660],{"class":47},[33,66811,1807],{"class":52553},[33,66813,52560],{"class":47},[33,66815,66816,66818,66820,66823,66825],{"class":35,"line":11171},[33,66817,56487],{"class":47},[33,66819,1807],{"class":52553},[33,66821,66822],{"class":47},">小米净水器\u003C\u002F",[33,66824,1807],{"class":52553},[33,66826,52560],{"class":47},[33,66828,66829,66831,66833,66835,66837],{"class":35,"line":11176},[33,66830,56487],{"class":47},[33,66832,1807],{"class":52553},[33,66834,66738],{"class":47},[33,66836,1807],{"class":52553},[33,66838,52560],{"class":47},[33,66840,66841,66843,66845,66848,66850],{"class":35,"line":17855},[33,66842,56487],{"class":47},[33,66844,1807],{"class":52553},[33,66846,66847],{"class":47},">￥4999\u003C\u002F",[33,66849,1807],{"class":52553},[33,66851,52560],{"class":47},[33,66853,66854,66856,66858],{"class":35,"line":17861},[33,66855,53029],{"class":47},[33,66857,1762],{"class":52553},[33,66859,52560],{"class":47},[33,66861,66862,66864,66866],{"class":35,"line":17884},[33,66863,52594],{"class":47},[33,66865,1762],{"class":52553},[33,66867,52560],{"class":47},[33,66869,66870,66872,66874],{"class":35,"line":17890},[33,66871,56487],{"class":47},[33,66873,1807],{"class":52553},[33,66875,52560],{"class":47},[33,66877,66878,66880,66882,66884,66886,66888,66890,66892,66894,66896,66898,66900],{"class":35,"line":17913},[33,66879,56555],{"class":47},[33,66881,55074],{"class":52553},[33,66883,55077],{"class":43},[33,66885,73],{"class":47},[33,66887,55082],{"class":119},[33,66889,16171],{"class":43},[33,66891,73],{"class":47},[33,66893,66700],{"class":119},[33,66895,54739],{"class":43},[33,66897,73],{"class":47},[33,66899,66707],{"class":119},[33,66901,52560],{"class":47},[33,66903,66904,66906,66908],{"class":35,"line":17927},[33,66905,56660],{"class":47},[33,66907,1807],{"class":52553},[33,66909,52560],{"class":47},[33,66911,66912,66914,66916,66919,66921],{"class":35,"line":17947},[33,66913,56487],{"class":47},[33,66915,1807],{"class":52553},[33,66917,66918],{"class":47},">小米电视\u003C\u002F",[33,66920,1807],{"class":52553},[33,66922,52560],{"class":47},[33,66924,66925,66927,66929,66931,66933],{"class":35,"line":17953},[33,66926,56487],{"class":47},[33,66928,1807],{"class":52553},[33,66930,66738],{"class":47},[33,66932,1807],{"class":52553},[33,66934,52560],{"class":47},[33,66936,66937,66939,66941,66944,66946],{"class":35,"line":17964},[33,66938,56487],{"class":47},[33,66940,1807],{"class":52553},[33,66942,66943],{"class":47},">￥5999\u003C\u002F",[33,66945,1807],{"class":52553},[33,66947,52560],{"class":47},[33,66949,66950,66952,66954],{"class":35,"line":17987},[33,66951,53029],{"class":47},[33,66953,1762],{"class":52553},[33,66955,52560],{"class":47},[33,66957,66958,66960,66962],{"class":35,"line":18009},[33,66959,53670],{"class":47},[33,66961,1756],{"class":52553},[33,66963,52560],{"class":47},[33,66965,66966,66968,66970],{"class":35,"line":18014},[33,66967,53397],{"class":47},[33,66969,53066],{"class":52553},[33,66971,52560],{"class":47},[33,66973,66974],{"class":35,"line":18020},[33,66975,66976],{"class":60},"    \u002F\u002F 1. 获取大复选框\n",[33,66978,66979,66981,66984,66986,66988,66990,66992,66995],{"class":35,"line":18034},[33,66980,12472],{"class":39},[33,66982,66983],{"class":76}," checkAll",[33,66985,14815],{"class":39},[33,66987,55649],{"class":47},[33,66989,55652],{"class":43},[33,66991,345],{"class":47},[33,66993,66994],{"class":119},"'#checkAll'",[33,66996,884],{"class":47},[33,66998,66999],{"class":35,"line":18047},[33,67000,67001],{"class":60},"    \u002F\u002F 2. 获取所有的小复选框\n",[33,67003,67004,67006,67009,67011,67013,67015,67017,67020],{"class":35,"line":18052},[33,67005,12472],{"class":39},[33,67007,67008],{"class":76}," cks",[33,67010,14815],{"class":39},[33,67012,55649],{"class":47},[33,67014,56934],{"class":43},[33,67016,345],{"class":47},[33,67018,67019],{"class":119},"'.ck'",[33,67021,884],{"class":47},[33,67023,67024],{"class":35,"line":18066},[33,67025,67026],{"class":60},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[33,67028,67029,67032,67034,67036,67038,67040,67042],{"class":35,"line":18071},[33,67030,67031],{"class":47},"    checkAll.",[33,67033,59066],{"class":43},[33,67035,345],{"class":47},[33,67037,59071],{"class":119},[33,67039,13686],{"class":47},[33,67041,55702],{"class":39},[33,67043,55705],{"class":47},[33,67045,67046],{"class":35,"line":18077},[33,67047,67048],{"class":60},"      \u002F\u002F 得到当前大复选框的选中状态\n",[33,67050,67051,67054],{"class":35,"line":18082},[33,67052,67053],{"class":60},"      \u002F\u002F console.log(checkAll.checked)",[33,67055,67056],{"class":60},"  \u002F\u002F 得到 是 true 或者是 false\n",[33,67058,67059],{"class":35,"line":18096},[33,67060,67061],{"class":60},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[33,67063,67064,67066,67068,67070,67072,67074,67076,67078,67080,67083,67085,67087,67089],{"class":35,"line":18101},[33,67065,53537],{"class":39},[33,67067,860],{"class":47},[33,67069,53100],{"class":39},[33,67071,10689],{"class":47},[33,67073,73],{"class":39},[33,67075,5492],{"class":76},[33,67077,10696],{"class":47},[33,67079,875],{"class":39},[33,67081,67082],{"class":47}," cks.",[33,67084,53221],{"class":76},[33,67086,1492],{"class":47},[33,67088,811],{"class":39},[33,67090,13693],{"class":47},[33,67092,67093,67096,67098,67101],{"class":35,"line":18106},[33,67094,67095],{"class":47},"        cks[i].checked ",[33,67097,73],{"class":39},[33,67099,67100],{"class":76}," this",[33,67102,67103],{"class":47},".checked\n",[33,67105,67106],{"class":35,"line":18120},[33,67107,53651],{"class":47},[33,67109,67110],{"class":35,"line":18132},[33,67111,34714],{"class":47},[33,67113,67114],{"class":35,"line":18137},[33,67115,67116],{"class":60},"    \u002F\u002F 5. 小复选框控制大复选框\n",[33,67118,67119],{"class":35,"line":18150},[33,67120,160],{"emptyLinePlaceholder":159},[33,67122,67123,67125,67127,67129,67131,67133,67135,67137,67139,67141,67143,67145,67147],{"class":35,"line":18155},[33,67124,857],{"class":39},[33,67126,860],{"class":47},[33,67128,53100],{"class":39},[33,67130,10689],{"class":47},[33,67132,73],{"class":39},[33,67134,5492],{"class":76},[33,67136,10696],{"class":47},[33,67138,875],{"class":39},[33,67140,67082],{"class":47},[33,67142,53221],{"class":76},[33,67144,1492],{"class":47},[33,67146,811],{"class":39},[33,67148,13693],{"class":47},[33,67150,67151],{"class":35,"line":18160},[33,67152,67153],{"class":60},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[33,67155,67156,67159,67161,67163,67165,67167,67169],{"class":35,"line":18165},[33,67157,67158],{"class":47},"      cks[i].",[33,67160,59066],{"class":43},[33,67162,345],{"class":47},[33,67164,59071],{"class":119},[33,67166,13686],{"class":47},[33,67168,55702],{"class":39},[33,67170,55705],{"class":47},[33,67172,67173],{"class":35,"line":18178},[33,67174,67175],{"class":60},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[33,67177,67178],{"class":35,"line":18183},[33,67179,67180],{"class":60},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[33,67182,67183],{"class":35,"line":33886},[33,67184,67185],{"class":60},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[33,67187,67188],{"class":35,"line":33892},[33,67189,67190],{"class":60},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[33,67192,67193,67196,67198,67200,67202,67204,67207,67209,67211,67213,67215],{"class":35,"line":33898},[33,67194,67195],{"class":47},"        checkAll.checked ",[33,67197,73],{"class":39},[33,67199,55649],{"class":47},[33,67201,56934],{"class":43},[33,67203,345],{"class":47},[33,67205,67206],{"class":119},"'.ck:checked'",[33,67208,32079],{"class":47},[33,67210,53221],{"class":76},[33,67212,59159],{"class":39},[33,67214,67082],{"class":47},[33,67216,57084],{"class":76},[33,67218,67219],{"class":35,"line":33904},[33,67220,66068],{"class":47},[33,67222,67223],{"class":35,"line":33910},[33,67224,916],{"class":47},[33,67226,67227,67229,67231],{"class":35,"line":33921},[33,67228,53670],{"class":47},[33,67230,53066],{"class":52553},[33,67232,52560],{"class":47},[33,67234,67235,67237,67239],{"class":35,"line":33927},[33,67236,53038],{"class":47},[33,67238,53053],{"class":52553},[33,67240,52560],{"class":47},[33,67242,67243],{"class":35,"line":33947},[33,67244,160],{"emptyLinePlaceholder":159},[33,67246,67247,67249,67251],{"class":35,"line":33953},[33,67248,53038],{"class":47},[33,67250,51888],{"class":52553},[33,67252,52560],{"class":47},[14,67254,67255],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,67257,67258],{},"用好之间比较得到的布尔值！！！",[14,67260,67261,67262,67265,67266,860,67269,2184,67271,67274],{},"在 JS 里访问的时候，",[30,67263,67264],{},"checkbox.checked"," 是一个 ",[480,67267,67268],{},"布尔值",[30,67270,2820],{},[30,67272,67273],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,67276,67277,67278,67281,67282],{},"HTML 的 ",[30,67279,67280],{},"checked=\"checked\""," 只是 ",[480,67283,67284,67285,67288],{},"初始值；JS 的 ",[30,67286,67287],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,67290,67291],{},"：checked是一个伪类选择器",[14,67293,67294],{},[2918,67295],{"alt":28,"src":67296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,67298,67299,67302],{},[67300,67301],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,67304,67305],{},[2918,67306],{"alt":28,"src":67307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[18,67309,67311],{"id":67310},"_33-dom事件进阶","3.3 DOM事件进阶",[1599,67313,67315],{"id":67314},"_331-事件流","3.3.1 事件流",[14,67317,67318],{},[2918,67319],{"alt":28,"src":67320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23249,67322,67324],{"id":67323},"_3311-事件捕获","3.3.1.1 事件捕获",[14,67326,67327],{},[2918,67328],{"alt":28,"src":67329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[23,67331,67333],{"className":51886,"code":67332,"language":51888,"meta":28,"style":28},"\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",[30,67334,67335,67345,67359,67363,67371,67385,67405,67417,67425,67432,67444,67456,67466,67470,67474,67481,67493,67505,67515,67519,67527,67535,67539,67547,67562,67581,67589,67597,67617,67637,67653,67664,67672,67689,67700,67708,67725,67736,67744,67752,67760,67764],{"__ignoreMap":28},[33,67336,67337,67339,67341,67343],{"class":35,"line":36},[33,67338,52550],{"class":47},[33,67340,52554],{"class":52553},[33,67342,52557],{"class":43},[33,67344,52560],{"class":47},[33,67346,67347,67349,67351,67353,67355,67357],{"class":35,"line":51},[33,67348,875],{"class":47},[33,67350,51888],{"class":52553},[33,67352,52569],{"class":43},[33,67354,73],{"class":47},[33,67356,52574],{"class":119},[33,67358,52560],{"class":47},[33,67360,67361],{"class":35,"line":57},[33,67362,160],{"emptyLinePlaceholder":159},[33,67364,67365,67367,67369],{"class":35,"line":64},[33,67366,875],{"class":47},[33,67368,52587],{"class":52553},[33,67370,52560],{"class":47},[33,67372,67373,67375,67377,67379,67381,67383],{"class":35,"line":83},[33,67374,53397],{"class":47},[33,67376,52597],{"class":52553},[33,67378,52600],{"class":43},[33,67380,73],{"class":47},[33,67382,52605],{"class":119},[33,67384,52560],{"class":47},[33,67386,67387,67389,67391,67393,67395,67397,67399,67401,67403],{"class":35,"line":89},[33,67388,53397],{"class":47},[33,67390,52597],{"class":52553},[33,67392,16171],{"class":43},[33,67394,73],{"class":47},[33,67396,52644],{"class":119},[33,67398,52624],{"class":43},[33,67400,73],{"class":47},[33,67402,52651],{"class":119},[33,67404,52560],{"class":47},[33,67406,67407,67409,67411,67413,67415],{"class":35,"line":98},[33,67408,53397],{"class":47},[33,67410,52660],{"class":52553},[33,67412,52663],{"class":47},[33,67414,52660],{"class":52553},[33,67416,52560],{"class":47},[33,67418,67419,67421,67423],{"class":35,"line":110},[33,67420,53397],{"class":47},[33,67422,1544],{"class":52553},[33,67424,52560],{"class":47},[33,67426,67427,67430],{"class":35,"line":134},[33,67428,67429],{"class":43},"    .father",[33,67431,16823],{"class":47},[33,67433,67434,67436,67438,67440,67442],{"class":35,"line":156},[33,67435,56024],{"class":76},[33,67437,52690],{"class":47},[33,67439,66327],{"class":76},[33,67441,52745],{"class":39},[33,67443,80],{"class":47},[33,67445,67446,67448,67450,67452,67454],{"class":35,"line":163},[33,67447,56038],{"class":76},[33,67449,52690],{"class":47},[33,67451,66327],{"class":76},[33,67453,52745],{"class":39},[33,67455,80],{"class":47},[33,67457,67458,67460,67462,67464],{"class":35,"line":169},[33,67459,56137],{"class":76},[33,67461,52690],{"class":47},[33,67463,52898],{"class":76},[33,67465,80],{"class":47},[33,67467,67468],{"class":35,"line":175},[33,67469,916],{"class":47},[33,67471,67472],{"class":35,"line":181},[33,67473,160],{"emptyLinePlaceholder":159},[33,67475,67476,67479],{"class":35,"line":196},[33,67477,67478],{"class":43},"    .son",[33,67480,16823],{"class":47},[33,67482,67483,67485,67487,67489,67491],{"class":35,"line":213},[33,67484,56024],{"class":76},[33,67486,52690],{"class":47},[33,67488,3163],{"class":76},[33,67490,52745],{"class":39},[33,67492,80],{"class":47},[33,67494,67495,67497,67499,67501,67503],{"class":35,"line":228},[33,67496,56038],{"class":76},[33,67498,52690],{"class":47},[33,67500,3163],{"class":76},[33,67502,52745],{"class":39},[33,67504,80],{"class":47},[33,67506,67507,67509,67511,67513],{"class":35,"line":1345},[33,67508,56137],{"class":76},[33,67510,52690],{"class":47},[33,67512,56142],{"class":76},[33,67514,80],{"class":47},[33,67516,67517],{"class":35,"line":1350},[33,67518,916],{"class":47},[33,67520,67521,67523,67525],{"class":35,"line":1359},[33,67522,53670],{"class":47},[33,67524,1544],{"class":52553},[33,67526,52560],{"class":47},[33,67528,67529,67531,67533],{"class":35,"line":1364},[33,67530,53038],{"class":47},[33,67532,52587],{"class":52553},[33,67534,52560],{"class":47},[33,67536,67537],{"class":35,"line":1370},[33,67538,160],{"emptyLinePlaceholder":159},[33,67540,67541,67543,67545],{"class":35,"line":1425},[33,67542,875],{"class":47},[33,67544,53053],{"class":52553},[33,67546,52560],{"class":47},[33,67548,67549,67551,67553,67555,67557,67560],{"class":35,"line":1438},[33,67550,53397],{"class":47},[33,67552,52864],{"class":52553},[33,67554,54739],{"class":43},[33,67556,73],{"class":47},[33,67558,67559],{"class":119},"\"father\"",[33,67561,52560],{"class":47},[33,67563,67564,67566,67568,67570,67572,67575,67577,67579],{"class":35,"line":1451},[33,67565,52594],{"class":47},[33,67567,52864],{"class":52553},[33,67569,54739],{"class":43},[33,67571,73],{"class":47},[33,67573,67574],{"class":119},"\"son\"",[33,67576,56567],{"class":47},[33,67578,52864],{"class":52553},[33,67580,52560],{"class":47},[33,67582,67583,67585,67587],{"class":35,"line":1457},[33,67584,53670],{"class":47},[33,67586,52864],{"class":52553},[33,67588,52560],{"class":47},[33,67590,67591,67593,67595],{"class":35,"line":1466},[33,67592,53397],{"class":47},[33,67594,53066],{"class":52553},[33,67596,52560],{"class":47},[33,67598,67599,67601,67604,67606,67608,67610,67612,67615],{"class":35,"line":1471},[33,67600,12472],{"class":39},[33,67602,67603],{"class":76}," fa",[33,67605,14815],{"class":39},[33,67607,55649],{"class":47},[33,67609,55652],{"class":43},[33,67611,345],{"class":47},[33,67613,67614],{"class":119},"'.father'",[33,67616,884],{"class":47},[33,67618,67619,67621,67624,67626,67628,67630,67632,67635],{"class":35,"line":1477},[33,67620,12472],{"class":39},[33,67622,67623],{"class":76}," son",[33,67625,14815],{"class":39},[33,67627,55649],{"class":47},[33,67629,55652],{"class":43},[33,67631,345],{"class":47},[33,67633,67634],{"class":119},"'.son'",[33,67636,884],{"class":47},[33,67638,67639,67641,67643,67645,67647,67649,67651],{"class":35,"line":1504},[33,67640,53660],{"class":47},[33,67642,59066],{"class":43},[33,67644,345],{"class":47},[33,67646,59071],{"class":119},[33,67648,13686],{"class":47},[33,67650,55702],{"class":39},[33,67652,55705],{"class":47},[33,67654,67655,67657,67659,67662],{"class":35,"line":1509},[33,67656,60178],{"class":43},[33,67658,345],{"class":47},[33,67660,67661],{"class":119},"'woshiu1'",[33,67663,884],{"class":47},[33,67665,67666,67668,67670],{"class":35,"line":1525},[33,67667,55788],{"class":47},[33,67669,2820],{"class":76},[33,67671,884],{"class":47},[33,67673,67674,67677,67679,67681,67683,67685,67687],{"class":35,"line":1535},[33,67675,67676],{"class":47},"    fa.",[33,67678,59066],{"class":43},[33,67680,345],{"class":47},[33,67682,59071],{"class":119},[33,67684,13686],{"class":47},[33,67686,55702],{"class":39},[33,67688,55705],{"class":47},[33,67690,67691,67693,67695,67698],{"class":35,"line":1540},[33,67692,60178],{"class":43},[33,67694,345],{"class":47},[33,67696,67697],{"class":119},"'1'",[33,67699,884],{"class":47},[33,67701,67702,67704,67706],{"class":35,"line":4027},[33,67703,55788],{"class":47},[33,67705,2820],{"class":76},[33,67707,884],{"class":47},[33,67709,67710,67713,67715,67717,67719,67721,67723],{"class":35,"line":4032},[33,67711,67712],{"class":47},"    son.",[33,67714,59066],{"class":43},[33,67716,345],{"class":47},[33,67718,59071],{"class":119},[33,67720,13686],{"class":47},[33,67722,55702],{"class":39},[33,67724,55705],{"class":47},[33,67726,67727,67729,67731,67734],{"class":35,"line":9199},[33,67728,60178],{"class":43},[33,67730,345],{"class":47},[33,67732,67733],{"class":119},"'2'",[33,67735,884],{"class":47},[33,67737,67738,67740,67742],{"class":35,"line":9223},[33,67739,55788],{"class":47},[33,67741,2820],{"class":76},[33,67743,884],{"class":47},[33,67745,67746,67748,67750],{"class":35,"line":9228},[33,67747,53670],{"class":47},[33,67749,53066],{"class":52553},[33,67751,52560],{"class":47},[33,67753,67754,67756,67758],{"class":35,"line":9234},[33,67755,53038],{"class":47},[33,67757,53053],{"class":52553},[33,67759,52560],{"class":47},[33,67761,67762],{"class":35,"line":9261},[33,67763,160],{"emptyLinePlaceholder":159},[33,67765,67766,67768,67770],{"class":35,"line":9266},[33,67767,53038],{"class":47},[33,67769,51888],{"class":52553},[33,67771,52560],{"class":47},[14,67773,67774],{},[2918,67775],{"alt":28,"src":67776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,67778,67779],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23249,67781,67783],{"id":67782},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,67785,67786],{},[2918,67787],{"alt":28,"src":67788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,67790,67791],{},"反着来",[14,67793,67794],{},"注意是同名事件，比如都是‘click’",[23249,67796,67798],{"id":67797},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,67800,67801],{},[2918,67802],{"alt":28,"src":67803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23249,67805,67807],{"id":67806},"_3314-解绑事件","3.3.1.4 解绑事件",[14,67809,67810],{},[2918,67811],{"alt":28,"src":67812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,67814,67815],{},[2918,67816],{"alt":28,"src":67817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23249,67819,67821],{"id":67820},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[574,67823,67824],{},[564,67825,67826],{},"事件类型的区别",[14,67828,67829],{},[2918,67830],{"alt":28,"src":67831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,67833,67834],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[574,67836,67837],{"start":51},[564,67838,67839],{},"注册事件的区别",[14,67841,67842],{},[2918,67843],{"alt":28,"src":67844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23249,67846,67848],{"id":67847},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,67850,67851],{},[2918,67852],{"alt":28,"src":67853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,67855,67856],{},[2918,67857],{"alt":28,"src":67858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[23,67860,67862],{"className":54320,"code":67861,"language":54322,"meta":28,"style":28},"\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",[30,67863,67864,67872,67889,67912,67920,67925,67930,67935,67939,67947,67955],{"__ignoreMap":28},[33,67865,67866,67868,67870],{"class":35,"line":36},[33,67867,875],{"class":47},[33,67869,53053],{"class":52553},[33,67871,52560],{"class":47},[33,67873,67874,67876,67879,67882,67884,67887],{"class":35,"line":51},[33,67875,53397],{"class":47},[33,67877,67878],{"class":52553},"form",[33,67880,67881],{"class":43}," action",[33,67883,73],{"class":47},[33,67885,67886],{"class":119},"\"http:\u002F\u002Fwww.itcast.cn\"",[33,67888,52560],{"class":47},[33,67890,67891,67893,67895,67897,67899,67902,67905,67907,67910],{"class":35,"line":57},[33,67892,52594],{"class":47},[33,67894,55074],{"class":52553},[33,67896,55077],{"class":43},[33,67898,73],{"class":47},[33,67900,67901],{"class":119},"\"submit\"",[33,67903,67904],{"class":43}," value",[33,67906,73],{"class":47},[33,67908,67909],{"class":119},"\"免费注册\"",[33,67911,52560],{"class":47},[33,67913,67914,67916,67918],{"class":35,"line":64},[33,67915,52594],{"class":47},[33,67917,53066],{"class":52553},[33,67919,52560],{"class":47},[33,67921,67922],{"class":35,"line":83},[33,67923,67924],{"class":47},"      const form = document.querySelector('form')\n",[33,67926,67927],{"class":35,"line":89},[33,67928,67929],{"class":47},"      form.addEventListener('submit', function (e) {\n",[33,67931,67932],{"class":35,"line":98},[33,67933,67934],{"class":47},"        e.preventDefault()\n",[33,67936,67937],{"class":35,"line":110},[33,67938,66068],{"class":47},[33,67940,67941,67943,67945],{"class":35,"line":134},[33,67942,53029],{"class":47},[33,67944,53066],{"class":52553},[33,67946,52560],{"class":47},[33,67948,67949,67951,67953],{"class":35,"line":156},[33,67950,53670],{"class":47},[33,67952,67878],{"class":52553},[33,67954,52560],{"class":47},[33,67956,67957,67959,67961],{"class":35,"line":163},[33,67958,53038],{"class":47},[33,67960,53053],{"class":52553},[33,67962,52560],{"class":47},[14,67964,67965],{},"点击不在跳转！！！",[1599,67967,67969],{"id":67968},"_332-事件委托","3.3.2 事件委托",[14,67971,67972],{},[2918,67973],{"alt":28,"src":67974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[23,67976,67978],{"className":51886,"code":67977,"language":51888,"meta":28,"style":28},"\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",[30,67979,67980,67990,68004,68008,68016,68030,68050,68062,68070,68074,68082,68090,68102,68114,68126,68138,68150,68163,68171,68179,68184,68203,68224,68229,68234,68239,68244,68253,68257,68267,68271,68276,68281,68295,68305,68309,68313,68321,68329,68333],{"__ignoreMap":28},[33,67981,67982,67984,67986,67988],{"class":35,"line":36},[33,67983,52550],{"class":47},[33,67985,52554],{"class":52553},[33,67987,52557],{"class":43},[33,67989,52560],{"class":47},[33,67991,67992,67994,67996,67998,68000,68002],{"class":35,"line":51},[33,67993,875],{"class":47},[33,67995,51888],{"class":52553},[33,67997,52569],{"class":43},[33,67999,73],{"class":47},[33,68001,52574],{"class":119},[33,68003,52560],{"class":47},[33,68005,68006],{"class":35,"line":57},[33,68007,160],{"emptyLinePlaceholder":159},[33,68009,68010,68012,68014],{"class":35,"line":64},[33,68011,875],{"class":47},[33,68013,52587],{"class":52553},[33,68015,52560],{"class":47},[33,68017,68018,68020,68022,68024,68026,68028],{"class":35,"line":83},[33,68019,53397],{"class":47},[33,68021,52597],{"class":52553},[33,68023,52600],{"class":43},[33,68025,73],{"class":47},[33,68027,52605],{"class":119},[33,68029,52560],{"class":47},[33,68031,68032,68034,68036,68038,68040,68042,68044,68046,68048],{"class":35,"line":89},[33,68033,53397],{"class":47},[33,68035,52597],{"class":52553},[33,68037,16171],{"class":43},[33,68039,73],{"class":47},[33,68041,52644],{"class":119},[33,68043,52624],{"class":43},[33,68045,73],{"class":47},[33,68047,52651],{"class":119},[33,68049,52560],{"class":47},[33,68051,68052,68054,68056,68058,68060],{"class":35,"line":98},[33,68053,53397],{"class":47},[33,68055,52660],{"class":52553},[33,68057,52663],{"class":47},[33,68059,52660],{"class":52553},[33,68061,52560],{"class":47},[33,68063,68064,68066,68068],{"class":35,"line":110},[33,68065,53038],{"class":47},[33,68067,52587],{"class":52553},[33,68069,52560],{"class":47},[33,68071,68072],{"class":35,"line":134},[33,68073,160],{"emptyLinePlaceholder":159},[33,68075,68076,68078,68080],{"class":35,"line":156},[33,68077,875],{"class":47},[33,68079,53053],{"class":52553},[33,68081,52560],{"class":47},[33,68083,68084,68086,68088],{"class":35,"line":163},[33,68085,53397],{"class":47},[33,68087,561],{"class":52553},[33,68089,52560],{"class":47},[33,68091,68092,68094,68096,68098,68100],{"class":35,"line":169},[33,68093,52594],{"class":47},[33,68095,564],{"class":52553},[33,68097,55219],{"class":47},[33,68099,564],{"class":52553},[33,68101,52560],{"class":47},[33,68103,68104,68106,68108,68110,68112],{"class":35,"line":175},[33,68105,52594],{"class":47},[33,68107,564],{"class":52553},[33,68109,55238],{"class":47},[33,68111,564],{"class":52553},[33,68113,52560],{"class":47},[33,68115,68116,68118,68120,68122,68124],{"class":35,"line":181},[33,68117,52594],{"class":47},[33,68119,564],{"class":52553},[33,68121,55257],{"class":47},[33,68123,564],{"class":52553},[33,68125,52560],{"class":47},[33,68127,68128,68130,68132,68134,68136],{"class":35,"line":196},[33,68129,52594],{"class":47},[33,68131,564],{"class":52553},[33,68133,55276],{"class":47},[33,68135,564],{"class":52553},[33,68137,52560],{"class":47},[33,68139,68140,68142,68144,68146,68148],{"class":35,"line":213},[33,68141,52594],{"class":47},[33,68143,564],{"class":52553},[33,68145,55295],{"class":47},[33,68147,564],{"class":52553},[33,68149,52560],{"class":47},[33,68151,68152,68154,68156,68159,68161],{"class":35,"line":228},[33,68153,52594],{"class":47},[33,68155,14],{"class":52553},[33,68157,68158],{"class":47},">我不需要变色\u003C\u002F",[33,68160,14],{"class":52553},[33,68162,52560],{"class":47},[33,68164,68165,68167,68169],{"class":35,"line":1345},[33,68166,53670],{"class":47},[33,68168,561],{"class":52553},[33,68170,52560],{"class":47},[33,68172,68173,68175,68177],{"class":35,"line":1350},[33,68174,53397],{"class":47},[33,68176,53066],{"class":52553},[33,68178,52560],{"class":47},[33,68180,68181],{"class":35,"line":1359},[33,68182,68183],{"class":60},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[33,68185,68186,68188,68190,68192,68194,68196,68198,68201],{"class":35,"line":1364},[33,68187,12472],{"class":39},[33,68189,62545],{"class":76},[33,68191,14815],{"class":39},[33,68193,55649],{"class":47},[33,68195,55652],{"class":43},[33,68197,345],{"class":47},[33,68199,68200],{"class":119},"'ul'",[33,68202,884],{"class":47},[33,68204,68205,68208,68210,68212,68214,68216,68218,68220,68222],{"class":35,"line":1370},[33,68206,68207],{"class":47},"    ul.",[33,68209,59066],{"class":43},[33,68211,345],{"class":47},[33,68213,59071],{"class":119},[33,68215,13686],{"class":47},[33,68217,55702],{"class":39},[33,68219,860],{"class":47},[33,68221,1696],{"class":955},[33,68223,13693],{"class":47},[33,68225,68226],{"class":35,"line":1425},[33,68227,68228],{"class":60},"      \u002F\u002F alert(1)\n",[33,68230,68231],{"class":35,"line":1438},[33,68232,68233],{"class":60},"      \u002F\u002F e.target就是我们点击的对象\n",[33,68235,68236],{"class":35,"line":1451},[33,68237,68238],{"class":60},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[33,68240,68241],{"class":35,"line":1457},[33,68242,68243],{"class":60},"      \u002F\u002F e.target.style.color = 'red'\n",[33,68245,68246,68248,68250],{"class":35,"line":1466},[33,68247,59497],{"class":47},[33,68249,59500],{"class":43},[33,68251,68252],{"class":47},"(e)\n",[33,68254,68255],{"class":35,"line":1471},[33,68256,160],{"emptyLinePlaceholder":159},[33,68258,68259,68261,68264],{"class":35,"line":1477},[33,68260,59497],{"class":47},[33,68262,68263],{"class":43},"dir",[33,68265,68266],{"class":47},"(e.target)\n",[33,68268,68269],{"class":35,"line":1504},[33,68270,160],{"emptyLinePlaceholder":159},[33,68272,68273],{"class":35,"line":1509},[33,68274,68275],{"class":60},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[33,68277,68278],{"class":35,"line":1525},[33,68279,68280],{"class":60},"      \u002F\u002F 通过tagName来进行判断\n",[33,68282,68283,68285,68288,68290,68293],{"class":35,"line":1535},[33,68284,55733],{"class":39},[33,68286,68287],{"class":47}," (e.target.tagName ",[33,68289,55739],{"class":39},[33,68291,68292],{"class":119}," 'LI'",[33,68294,13693],{"class":47},[33,68296,68297,68300,68302],{"class":35,"line":1540},[33,68298,68299],{"class":47},"        e.target.style.color ",[33,68301,73],{"class":39},[33,68303,68304],{"class":119}," 'red'\n",[33,68306,68307],{"class":35,"line":4027},[33,68308,53651],{"class":47},[33,68310,68311],{"class":35,"line":4032},[33,68312,34714],{"class":47},[33,68314,68315,68317,68319],{"class":35,"line":9199},[33,68316,53670],{"class":47},[33,68318,53066],{"class":52553},[33,68320,52560],{"class":47},[33,68322,68323,68325,68327],{"class":35,"line":9223},[33,68324,53038],{"class":47},[33,68326,53053],{"class":52553},[33,68328,52560],{"class":47},[33,68330,68331],{"class":35,"line":9228},[33,68332,160],{"emptyLinePlaceholder":159},[33,68334,68335,68337,68339],{"class":35,"line":9234},[33,68336,53038],{"class":47},[33,68338,51888],{"class":52553},[33,68340,52560],{"class":47},[14,68342,68343],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,68345,68346],{},"if(e.target.ragName==='P') {}",[14,68348,68349],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,68351,68352],{},"通过事件委托的方式实现tab栏切换改造：",[14,68354,68355],{},"一定要记住自定义属性！！！！！！",[14,68357,68358],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,68360,68361],{},"id是自定义的属性名",[14,68363,68364],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[23,68366,68368],{"className":51886,"code":68367,"language":51888,"meta":28,"style":28},"\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",[30,68369,68370,68380,68394,68398,68406,68420,68440,68460,68472,68480,68486,68496,68506,68510,68514,68520,68532,68544,68556,68572,68576,68580,68586,68598,68610,68622,68632,68642,68646,68650,68658,68670,68680,68692,68696,68700,68708,68718,68728,68738,68742,68746,68756,68770,68782,68786,68790,68802,68812,68828,68838,68842,68846,68860,68870,68880,68884,68888,68894,68908,68912,68916,68924,68934,68938,68942,68951,68961,68965,68973,68981,68985,68993,69007,69021,69033,69041,69080,69112,69144,69176,69208,69216,69224,69238,69272,69306,69340,69374,69408,69416,69424,69432,69437,69442,69461,69466,69486,69494,69499,69512,69533,69546,69550,69555,69560,69573,69593,69621,69625,69629,69633,69641,69649,69653],{"__ignoreMap":28},[33,68371,68372,68374,68376,68378],{"class":35,"line":36},[33,68373,52550],{"class":47},[33,68375,52554],{"class":52553},[33,68377,52557],{"class":43},[33,68379,52560],{"class":47},[33,68381,68382,68384,68386,68388,68390,68392],{"class":35,"line":51},[33,68383,875],{"class":47},[33,68385,51888],{"class":52553},[33,68387,52569],{"class":43},[33,68389,73],{"class":47},[33,68391,52574],{"class":119},[33,68393,52560],{"class":47},[33,68395,68396],{"class":35,"line":57},[33,68397,160],{"emptyLinePlaceholder":159},[33,68399,68400,68402,68404],{"class":35,"line":64},[33,68401,875],{"class":47},[33,68403,52587],{"class":52553},[33,68405,52560],{"class":47},[33,68407,68408,68410,68412,68414,68416,68418],{"class":35,"line":83},[33,68409,53397],{"class":47},[33,68411,52597],{"class":52553},[33,68413,52600],{"class":43},[33,68415,73],{"class":47},[33,68417,52605],{"class":119},[33,68419,60380],{"class":47},[33,68421,68422,68424,68426,68428,68430,68432,68434,68436,68438],{"class":35,"line":89},[33,68423,53397],{"class":47},[33,68425,52597],{"class":52553},[33,68427,52616],{"class":43},[33,68429,73],{"class":47},[33,68431,52621],{"class":119},[33,68433,52624],{"class":43},[33,68435,73],{"class":47},[33,68437,52629],{"class":119},[33,68439,60380],{"class":47},[33,68441,68442,68444,68446,68448,68450,68452,68454,68456,68458],{"class":35,"line":98},[33,68443,53397],{"class":47},[33,68445,52597],{"class":52553},[33,68447,16171],{"class":43},[33,68449,73],{"class":47},[33,68451,52644],{"class":119},[33,68453,52624],{"class":43},[33,68455,73],{"class":47},[33,68457,52651],{"class":119},[33,68459,60380],{"class":47},[33,68461,68462,68464,68466,68468,68470],{"class":35,"line":110},[33,68463,53397],{"class":47},[33,68465,52660],{"class":52553},[33,68467,64878],{"class":47},[33,68469,52660],{"class":52553},[33,68471,52560],{"class":47},[33,68473,68474,68476,68478],{"class":35,"line":134},[33,68475,53397],{"class":47},[33,68477,1544],{"class":52553},[33,68479,52560],{"class":47},[33,68481,68482,68484],{"class":35,"line":156},[33,68483,184],{"class":52553},[33,68485,16823],{"class":47},[33,68487,68488,68490,68492,68494],{"class":35,"line":163},[33,68489,55959],{"class":76},[33,68491,52690],{"class":47},[33,68493,766],{"class":76},[33,68495,80],{"class":47},[33,68497,68498,68500,68502,68504],{"class":35,"line":169},[33,68499,55948],{"class":76},[33,68501,52690],{"class":47},[33,68503,766],{"class":76},[33,68505,80],{"class":47},[33,68507,68508],{"class":35,"line":175},[33,68509,916],{"class":47},[33,68511,68512],{"class":35,"line":181},[33,68513,160],{"emptyLinePlaceholder":159},[33,68515,68516,68518],{"class":35,"line":196},[33,68517,64929],{"class":43},[33,68519,16823],{"class":47},[33,68521,68522,68524,68526,68528,68530],{"class":35,"line":213},[33,68523,56024],{"class":76},[33,68525,52690],{"class":47},[33,68527,64940],{"class":76},[33,68529,52745],{"class":39},[33,68531,80],{"class":47},[33,68533,68534,68536,68538,68540,68542],{"class":35,"line":228},[33,68535,56038],{"class":76},[33,68537,52690],{"class":47},[33,68539,64953],{"class":76},[33,68541,52745],{"class":39},[33,68543,80],{"class":47},[33,68545,68546,68548,68550,68552,68554],{"class":35,"line":1345},[33,68547,55959],{"class":76},[33,68549,52690],{"class":47},[33,68551,1045],{"class":76},[33,68553,52745],{"class":39},[33,68555,80],{"class":47},[33,68557,68558,68560,68562,68564,68566,68568,68570],{"class":35,"line":1350},[33,68559,63230],{"class":76},[33,68561,52690],{"class":47},[33,68563,701],{"class":76},[33,68565,52745],{"class":39},[33,68567,52774],{"class":76},[33,68569,63497],{"class":76},[33,68571,80],{"class":47},[33,68573,68574],{"class":35,"line":1359},[33,68575,916],{"class":47},[33,68577,68578],{"class":35,"line":1364},[33,68579,160],{"emptyLinePlaceholder":159},[33,68581,68582,68584],{"class":35,"line":1370},[33,68583,64998],{"class":43},[33,68585,16823],{"class":47},[33,68587,68588,68590,68592,68594,68596],{"class":35,"line":1425},[33,68589,56024],{"class":76},[33,68591,52690],{"class":47},[33,68593,457],{"class":76},[33,68595,1939],{"class":39},[33,68597,80],{"class":47},[33,68599,68600,68602,68604,68606,68608],{"class":35,"line":1438},[33,68601,56038],{"class":76},[33,68603,52690],{"class":47},[33,68605,2505],{"class":76},[33,68607,52745],{"class":39},[33,68609,80],{"class":47},[33,68611,68612,68614,68616,68618,68620],{"class":35,"line":1451},[33,68613,58612],{"class":76},[33,68615,52690],{"class":47},[33,68617,2505],{"class":76},[33,68619,52745],{"class":39},[33,68621,80],{"class":47},[33,68623,68624,68626,68628,68630],{"class":35,"line":1457},[33,68625,56262],{"class":76},[33,68627,52690],{"class":47},[33,68629,52730],{"class":76},[33,68631,80],{"class":47},[33,68633,68634,68636,68638,68640],{"class":35,"line":1466},[33,68635,56273],{"class":76},[33,68637,52690],{"class":47},[33,68639,52921],{"class":76},[33,68641,80],{"class":47},[33,68643,68644],{"class":35,"line":1471},[33,68645,916],{"class":47},[33,68647,68648],{"class":35,"line":1477},[33,68649,160],{"emptyLinePlaceholder":159},[33,68651,68652,68654,68656],{"class":35,"line":1504},[33,68653,64998],{"class":43},[33,68655,65071],{"class":52553},[33,68657,16823],{"class":47},[33,68659,68660,68662,68664,68666,68668],{"class":35,"line":1509},[33,68661,56175],{"class":76},[33,68663,52690],{"class":47},[33,68665,2399],{"class":76},[33,68667,52745],{"class":39},[33,68669,80],{"class":47},[33,68671,68672,68674,68676,68678],{"class":35,"line":1525},[33,68673,63587],{"class":76},[33,68675,52690],{"class":47},[33,68677,65094],{"class":76},[33,68679,80],{"class":47},[33,68681,68682,68684,68686,68688,68690],{"class":35,"line":1535},[33,68683,63253],{"class":76},[33,68685,52690],{"class":47},[33,68687,1045],{"class":76},[33,68689,52745],{"class":39},[33,68691,80],{"class":47},[33,68693,68694],{"class":35,"line":1540},[33,68695,916],{"class":47},[33,68697,68698],{"class":35,"line":4027},[33,68699,160],{"emptyLinePlaceholder":159},[33,68701,68702,68704,68706],{"class":35,"line":4032},[33,68703,64998],{"class":43},[33,68705,62545],{"class":52553},[33,68707,16823],{"class":47},[33,68709,68710,68712,68714,68716],{"class":35,"line":9199},[33,68711,55985],{"class":76},[33,68713,52690],{"class":47},[33,68715,55990],{"class":76},[33,68717,80],{"class":47},[33,68719,68720,68722,68724,68726],{"class":35,"line":9223},[33,68721,56262],{"class":76},[33,68723,52690],{"class":47},[33,68725,52730],{"class":76},[33,68727,80],{"class":47},[33,68729,68730,68732,68734,68736],{"class":35,"line":9228},[33,68731,56273],{"class":76},[33,68733,52690],{"class":47},[33,68735,52833],{"class":76},[33,68737,80],{"class":47},[33,68739,68740],{"class":35,"line":9234},[33,68741,916],{"class":47},[33,68743,68744],{"class":35,"line":9261},[33,68745,160],{"emptyLinePlaceholder":159},[33,68747,68748,68750,68752,68754],{"class":35,"line":9266},[33,68749,64998],{"class":43},[33,68751,62545],{"class":52553},[33,68753,56328],{"class":52553},[33,68755,16823],{"class":47},[33,68757,68758,68760,68762,68764,68766,68768],{"class":35,"line":9272},[33,68759,55959],{"class":76},[33,68761,52690],{"class":47},[33,68763,766],{"class":76},[33,68765,10201],{"class":76},[33,68767,52745],{"class":39},[33,68769,80],{"class":47},[33,68771,68772,68774,68776,68778,68780],{"class":35,"line":9284},[33,68773,56175],{"class":76},[33,68775,52690],{"class":47},[33,68777,2149],{"class":76},[33,68779,52745],{"class":39},[33,68781,80],{"class":47},[33,68783,68784],{"class":35,"line":9296},[33,68785,916],{"class":47},[33,68787,68788],{"class":35,"line":9308},[33,68789,160],{"emptyLinePlaceholder":159},[33,68791,68792,68794,68796,68798,68800],{"class":35,"line":10967},[33,68793,64998],{"class":43},[33,68795,62545],{"class":52553},[33,68797,56328],{"class":52553},[33,68799,70],{"class":52553},[33,68801,16823],{"class":47},[33,68803,68804,68806,68808,68810],{"class":35,"line":10992},[33,68805,65223],{"class":76},[33,68807,52690],{"class":47},[33,68809,55990],{"class":76},[33,68811,80],{"class":47},[33,68813,68814,68816,68818,68820,68822,68824,68826],{"class":35,"line":11015},[33,68815,63485],{"class":76},[33,68817,52690],{"class":47},[33,68819,707],{"class":76},[33,68821,52745],{"class":39},[33,68823,52774],{"class":76},[33,68825,65244],{"class":76},[33,68827,80],{"class":47},[33,68829,68830,68832,68834,68836],{"class":35,"line":11039},[33,68831,58669],{"class":76},[33,68833,52690],{"class":47},[33,68835,63622],{"class":76},[33,68837,80],{"class":47},[33,68839,68840],{"class":35,"line":11044},[33,68841,916],{"class":47},[33,68843,68844],{"class":35,"line":11049},[33,68845,160],{"emptyLinePlaceholder":159},[33,68847,68848,68850,68852,68854,68856,68858],{"class":35,"line":11054},[33,68849,64998],{"class":43},[33,68851,62545],{"class":52553},[33,68853,56328],{"class":52553},[33,68855,70],{"class":52553},[33,68857,65277],{"class":43},[33,68859,16823],{"class":47},[33,68861,68862,68864,68866,68868],{"class":35,"line":11063},[33,68863,63044],{"class":76},[33,68865,52690],{"class":47},[33,68867,65288],{"class":76},[33,68869,80],{"class":47},[33,68871,68872,68874,68876,68878],{"class":35,"line":11068},[33,68873,58669],{"class":76},[33,68875,52690],{"class":47},[33,68877,65288],{"class":76},[33,68879,80],{"class":47},[33,68881,68882],{"class":35,"line":11074},[33,68883,916],{"class":47},[33,68885,68886],{"class":35,"line":11095},[33,68887,160],{"emptyLinePlaceholder":159},[33,68889,68890,68892],{"class":35,"line":11101},[33,68891,65313],{"class":43},[33,68893,16823],{"class":47},[33,68895,68896,68898,68900,68902,68904,68906],{"class":35,"line":11115},[33,68897,55948],{"class":76},[33,68899,52690],{"class":47},[33,68901,766],{"class":76},[33,68903,65326],{"class":76},[33,68905,52745],{"class":39},[33,68907,80],{"class":47},[33,68909,68910],{"class":35,"line":11121},[33,68911,916],{"class":47},[33,68913,68914],{"class":35,"line":11148},[33,68915,160],{"emptyLinePlaceholder":159},[33,68917,68918,68920,68922],{"class":35,"line":11157},[33,68919,65313],{"class":43},[33,68921,63427],{"class":43},[33,68923,16823],{"class":47},[33,68925,68926,68928,68930,68932],{"class":35,"line":11163},[33,68927,56262],{"class":76},[33,68929,52690],{"class":47},[33,68931,55990],{"class":76},[33,68933,80],{"class":47},[33,68935,68936],{"class":35,"line":11171},[33,68937,916],{"class":47},[33,68939,68940],{"class":35,"line":11176},[33,68941,160],{"emptyLinePlaceholder":159},[33,68943,68944,68946,68949],{"class":35,"line":17855},[33,68945,65313],{"class":43},[33,68947,68948],{"class":43}," .active",[33,68950,16823],{"class":47},[33,68952,68953,68955,68957,68959],{"class":35,"line":17861},[33,68954,56262],{"class":76},[33,68956,52690],{"class":47},[33,68958,62122],{"class":76},[33,68960,80],{"class":47},[33,68962,68963],{"class":35,"line":17884},[33,68964,916],{"class":47},[33,68966,68967,68969,68971],{"class":35,"line":17890},[33,68968,53670],{"class":47},[33,68970,1544],{"class":52553},[33,68972,52560],{"class":47},[33,68974,68975,68977,68979],{"class":35,"line":17913},[33,68976,53038],{"class":47},[33,68978,52587],{"class":52553},[33,68980,52560],{"class":47},[33,68982,68983],{"class":35,"line":17927},[33,68984,160],{"emptyLinePlaceholder":159},[33,68986,68987,68989,68991],{"class":35,"line":17947},[33,68988,875],{"class":47},[33,68990,53053],{"class":52553},[33,68992,52560],{"class":47},[33,68994,68995,68997,68999,69001,69003,69005],{"class":35,"line":17953},[33,68996,53397],{"class":47},[33,68998,52864],{"class":52553},[33,69000,54739],{"class":43},[33,69002,73],{"class":47},[33,69004,65428],{"class":119},[33,69006,52560],{"class":47},[33,69008,69009,69011,69013,69015,69017,69019],{"class":35,"line":17964},[33,69010,52594],{"class":47},[33,69012,52864],{"class":52553},[33,69014,54739],{"class":43},[33,69016,73],{"class":47},[33,69018,65443],{"class":119},[33,69020,52560],{"class":47},[33,69022,69023,69025,69027,69029,69031],{"class":35,"line":17987},[33,69024,56487],{"class":47},[33,69026,1599],{"class":52553},[33,69028,65454],{"class":47},[33,69030,1599],{"class":52553},[33,69032,52560],{"class":47},[33,69034,69035,69037,69039],{"class":35,"line":18009},[33,69036,56487],{"class":47},[33,69038,561],{"class":52553},[33,69040,52560],{"class":47},[33,69042,69043,69045,69047,69049,69051,69053,69055,69057,69059,69061,69063,69065,69067,69070,69072,69074,69076,69078],{"class":35,"line":18014},[33,69044,56555],{"class":47},[33,69046,564],{"class":52553},[33,69048,62305],{"class":47},[33,69050,126],{"class":52553},[33,69052,54739],{"class":43},[33,69054,73],{"class":47},[33,69056,60959],{"class":119},[33,69058,62310],{"class":43},[33,69060,73],{"class":47},[33,69062,65489],{"class":119},[33,69064,55204],{"class":43},[33,69066,73],{"class":47},[33,69068,69069],{"class":119},"\"0\"",[33,69071,65492],{"class":47},[33,69073,126],{"class":52553},[33,69075,56567],{"class":47},[33,69077,564],{"class":52553},[33,69079,52560],{"class":47},[33,69081,69082,69084,69086,69088,69090,69092,69094,69096,69098,69100,69102,69104,69106,69108,69110],{"class":35,"line":18020},[33,69083,56555],{"class":47},[33,69085,564],{"class":52553},[33,69087,62305],{"class":47},[33,69089,126],{"class":52553},[33,69091,62310],{"class":43},[33,69093,73],{"class":47},[33,69095,65489],{"class":119},[33,69097,55204],{"class":43},[33,69099,73],{"class":47},[33,69101,5080],{"class":119},[33,69103,65519],{"class":47},[33,69105,126],{"class":52553},[33,69107,56567],{"class":47},[33,69109,564],{"class":52553},[33,69111,52560],{"class":47},[33,69113,69114,69116,69118,69120,69122,69124,69126,69128,69130,69132,69134,69136,69138,69140,69142],{"class":35,"line":18034},[33,69115,56555],{"class":47},[33,69117,564],{"class":52553},[33,69119,62305],{"class":47},[33,69121,126],{"class":52553},[33,69123,62310],{"class":43},[33,69125,73],{"class":47},[33,69127,65489],{"class":119},[33,69129,55204],{"class":43},[33,69131,73],{"class":47},[33,69133,5103],{"class":119},[33,69135,65546],{"class":47},[33,69137,126],{"class":52553},[33,69139,56567],{"class":47},[33,69141,564],{"class":52553},[33,69143,52560],{"class":47},[33,69145,69146,69148,69150,69152,69154,69156,69158,69160,69162,69164,69166,69168,69170,69172,69174],{"class":35,"line":18047},[33,69147,56555],{"class":47},[33,69149,564],{"class":52553},[33,69151,62305],{"class":47},[33,69153,126],{"class":52553},[33,69155,62310],{"class":43},[33,69157,73],{"class":47},[33,69159,65489],{"class":119},[33,69161,55204],{"class":43},[33,69163,73],{"class":47},[33,69165,5116],{"class":119},[33,69167,65573],{"class":47},[33,69169,126],{"class":52553},[33,69171,56567],{"class":47},[33,69173,564],{"class":52553},[33,69175,52560],{"class":47},[33,69177,69178,69180,69182,69184,69186,69188,69190,69192,69194,69196,69198,69200,69202,69204,69206],{"class":35,"line":18052},[33,69179,56555],{"class":47},[33,69181,564],{"class":52553},[33,69183,62305],{"class":47},[33,69185,126],{"class":52553},[33,69187,62310],{"class":43},[33,69189,73],{"class":47},[33,69191,65489],{"class":119},[33,69193,55204],{"class":43},[33,69195,73],{"class":47},[33,69197,5129],{"class":119},[33,69199,65600],{"class":47},[33,69201,126],{"class":52553},[33,69203,56567],{"class":47},[33,69205,564],{"class":52553},[33,69207,52560],{"class":47},[33,69209,69210,69212,69214],{"class":35,"line":18066},[33,69211,56660],{"class":47},[33,69213,561],{"class":52553},[33,69215,52560],{"class":47},[33,69217,69218,69220,69222],{"class":35,"line":18071},[33,69219,53029],{"class":47},[33,69221,52864],{"class":52553},[33,69223,52560],{"class":47},[33,69225,69226,69228,69230,69232,69234,69236],{"class":35,"line":18077},[33,69227,52594],{"class":47},[33,69229,52864],{"class":52553},[33,69231,54739],{"class":43},[33,69233,73],{"class":47},[33,69235,65637],{"class":119},[33,69237,52560],{"class":47},[33,69239,69240,69242,69244,69246,69248,69250,69252,69254,69256,69258,69260,69262,69264,69266,69268,69270],{"class":35,"line":18082},[33,69241,56487],{"class":47},[33,69243,52864],{"class":52553},[33,69245,54739],{"class":43},[33,69247,73],{"class":47},[33,69249,65652],{"class":119},[33,69251,62305],{"class":47},[33,69253,2918],{"class":52553},[33,69255,56492],{"class":43},[33,69257,73],{"class":47},[33,69259,65663],{"class":119},[33,69261,56500],{"class":43},[33,69263,73],{"class":47},[33,69265,1520],{"class":119},[33,69267,65672],{"class":47},[33,69269,52864],{"class":52553},[33,69271,52560],{"class":47},[33,69273,69274,69276,69278,69280,69282,69284,69286,69288,69290,69292,69294,69296,69298,69300,69302,69304],{"class":35,"line":18096},[33,69275,56487],{"class":47},[33,69277,52864],{"class":52553},[33,69279,54739],{"class":43},[33,69281,73],{"class":47},[33,69283,63876],{"class":119},[33,69285,62305],{"class":47},[33,69287,2918],{"class":52553},[33,69289,56492],{"class":43},[33,69291,73],{"class":47},[33,69293,65699],{"class":119},[33,69295,56500],{"class":43},[33,69297,73],{"class":47},[33,69299,1520],{"class":119},[33,69301,65672],{"class":47},[33,69303,52864],{"class":52553},[33,69305,52560],{"class":47},[33,69307,69308,69310,69312,69314,69316,69318,69320,69322,69324,69326,69328,69330,69332,69334,69336,69338],{"class":35,"line":18101},[33,69309,56487],{"class":47},[33,69311,52864],{"class":52553},[33,69313,54739],{"class":43},[33,69315,73],{"class":47},[33,69317,63876],{"class":119},[33,69319,62305],{"class":47},[33,69321,2918],{"class":52553},[33,69323,56492],{"class":43},[33,69325,73],{"class":47},[33,69327,65734],{"class":119},[33,69329,56500],{"class":43},[33,69331,73],{"class":47},[33,69333,1520],{"class":119},[33,69335,65672],{"class":47},[33,69337,52864],{"class":52553},[33,69339,52560],{"class":47},[33,69341,69342,69344,69346,69348,69350,69352,69354,69356,69358,69360,69362,69364,69366,69368,69370,69372],{"class":35,"line":18106},[33,69343,56487],{"class":47},[33,69345,52864],{"class":52553},[33,69347,54739],{"class":43},[33,69349,73],{"class":47},[33,69351,63876],{"class":119},[33,69353,62305],{"class":47},[33,69355,2918],{"class":52553},[33,69357,56492],{"class":43},[33,69359,73],{"class":47},[33,69361,65769],{"class":119},[33,69363,56500],{"class":43},[33,69365,73],{"class":47},[33,69367,1520],{"class":119},[33,69369,65672],{"class":47},[33,69371,52864],{"class":52553},[33,69373,52560],{"class":47},[33,69375,69376,69378,69380,69382,69384,69386,69388,69390,69392,69394,69396,69398,69400,69402,69404,69406],{"class":35,"line":18120},[33,69377,56487],{"class":47},[33,69379,52864],{"class":52553},[33,69381,54739],{"class":43},[33,69383,73],{"class":47},[33,69385,63876],{"class":119},[33,69387,62305],{"class":47},[33,69389,2918],{"class":52553},[33,69391,56492],{"class":43},[33,69393,73],{"class":47},[33,69395,65804],{"class":119},[33,69397,56500],{"class":43},[33,69399,73],{"class":47},[33,69401,1520],{"class":119},[33,69403,65672],{"class":47},[33,69405,52864],{"class":52553},[33,69407,52560],{"class":47},[33,69409,69410,69412,69414],{"class":35,"line":18132},[33,69411,53029],{"class":47},[33,69413,52864],{"class":52553},[33,69415,52560],{"class":47},[33,69417,69418,69420,69422],{"class":35,"line":18137},[33,69419,53670],{"class":47},[33,69421,52864],{"class":52553},[33,69423,52560],{"class":47},[33,69425,69426,69428,69430],{"class":35,"line":18150},[33,69427,53397],{"class":47},[33,69429,53066],{"class":52553},[33,69431,52560],{"class":47},[33,69433,69434],{"class":35,"line":18155},[33,69435,69436],{"class":60},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[33,69438,69439],{"class":35,"line":18160},[33,69440,69441],{"class":60},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[33,69443,69444,69446,69448,69450,69452,69454,69456,69459],{"class":35,"line":18165},[33,69445,12472],{"class":39},[33,69447,62545],{"class":76},[33,69449,14815],{"class":39},[33,69451,55649],{"class":47},[33,69453,55652],{"class":43},[33,69455,345],{"class":47},[33,69457,69458],{"class":119},"'.tab-nav ul'",[33,69460,884],{"class":47},[33,69462,69463],{"class":35,"line":18178},[33,69464,69465],{"class":60},"    \u002F\u002F 2.添加事件\n",[33,69467,69468,69470,69472,69474,69476,69478,69480,69482,69484],{"class":35,"line":18183},[33,69469,68207],{"class":47},[33,69471,59066],{"class":43},[33,69473,345],{"class":47},[33,69475,59071],{"class":119},[33,69477,13686],{"class":47},[33,69479,55702],{"class":39},[33,69481,860],{"class":47},[33,69483,1696],{"class":955},[33,69485,13693],{"class":47},[33,69487,69488,69490,69492],{"class":35,"line":33886},[33,69489,59497],{"class":47},[33,69491,68263],{"class":43},[33,69493,68266],{"class":47},[33,69495,69496],{"class":35,"line":33892},[33,69497,69498],{"class":60},"      \u002F\u002Fe.targer是我们点击的对象\n",[33,69500,69501,69503,69505,69507,69510],{"class":35,"line":33898},[33,69502,55733],{"class":39},[33,69504,68287],{"class":47},[33,69506,55739],{"class":39},[33,69508,69509],{"class":119}," 'A'",[33,69511,13693],{"class":47},[33,69513,69514,69516,69518,69520,69523,69525,69527,69529,69531],{"class":35,"line":33904},[33,69515,53178],{"class":47},[33,69517,55652],{"class":43},[33,69519,345],{"class":47},[33,69521,69522],{"class":119},"'.active'",[33,69524,58256],{"class":47},[33,69526,58259],{"class":43},[33,69528,345],{"class":47},[33,69530,65967],{"class":119},[33,69532,884],{"class":47},[33,69534,69535,69538,69540,69542,69544],{"class":35,"line":33910},[33,69536,69537],{"class":47},"        e.target.classList.",[33,69539,6724],{"class":43},[33,69541,345],{"class":47},[33,69543,65967],{"class":119},[33,69545,884],{"class":47},[33,69547,69548],{"class":35,"line":33921},[33,69549,160],{"emptyLinePlaceholder":159},[33,69551,69552],{"class":35,"line":33927},[33,69553,69554],{"class":60},"        \u002F\u002F 下面大盒子模块\n",[33,69556,69557],{"class":35,"line":33947},[33,69558,69559],{"class":60},"        \u002F\u002F console.log(e.target.dataset.id)\n",[33,69561,69562,69564,69566,69568,69570],{"class":35,"line":33953},[33,69563,62523],{"class":39},[33,69565,865],{"class":76},[33,69567,14815],{"class":39},[33,69569,46819],{"class":39},[33,69571,69572],{"class":47},"e.target.dataset.id\n",[33,69574,69575,69577,69579,69581,69583,69585,69587,69589,69591],{"class":35,"line":33964},[33,69576,53178],{"class":47},[33,69578,55652],{"class":43},[33,69580,345],{"class":47},[33,69582,66015],{"class":119},[33,69584,58256],{"class":47},[33,69586,58259],{"class":43},[33,69588,345],{"class":47},[33,69590,65967],{"class":119},[33,69592,884],{"class":47},[33,69594,69595,69597,69599,69601,69603,69605,69607,69609,69611,69613,69615,69617,69619],{"class":35,"line":33970},[33,69596,53178],{"class":47},[33,69598,55652],{"class":43},[33,69600,345],{"class":47},[33,69602,66041],{"class":119},[33,69604,1239],{"class":47},[33,69606,46819],{"class":39},[33,69608,26371],{"class":76},[33,69610,58285],{"class":119},[33,69612,58256],{"class":47},[33,69614,6724],{"class":43},[33,69616,345],{"class":47},[33,69618,65967],{"class":119},[33,69620,884],{"class":47},[33,69622,69623],{"class":35,"line":33976},[33,69624,160],{"emptyLinePlaceholder":159},[33,69626,69627],{"class":35,"line":33982},[33,69628,53651],{"class":47},[33,69630,69631],{"class":35,"line":33988},[33,69632,34714],{"class":47},[33,69634,69635,69637,69639],{"class":35,"line":33994},[33,69636,53670],{"class":47},[33,69638,53066],{"class":52553},[33,69640,52560],{"class":47},[33,69642,69643,69645,69647],{"class":35,"line":34000},[33,69644,53038],{"class":47},[33,69646,53053],{"class":52553},[33,69648,52560],{"class":47},[33,69650,69651],{"class":35,"line":34006},[33,69652,160],{"emptyLinePlaceholder":159},[33,69654,69655,69657,69659],{"class":35,"line":34026},[33,69656,53038],{"class":47},[33,69658,51888],{"class":52553},[33,69660,52560],{"class":47},[1599,69662,69664],{"id":69663},"_333-页面加载事件","3.3.3 页面加载事件",[574,69666,69667],{},[564,69668,69669],{},"load",[14,69671,69672],{},[2918,69673],{"alt":28,"src":69674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,69676,69677],{},"window代表整个窗口，比document还要大",[14,69679,69680],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,69682,69683],{},"img.addEventListener('load', function () {",[14,69685,69686],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,69688,53717],{},[574,69690,69691],{"start":51},[564,69692,69693],{},"DOMContentLoaded",[14,69695,69696],{},[2918,69697],{"alt":28,"src":69698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,69700,69701],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[1599,69703,69705],{"id":69704},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,69707,69708],{},[2918,69709],{"alt":28,"src":69710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,69712,69713],{},[2918,69714],{"alt":28,"src":69715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,69717,69718],{},[2918,69719],{"alt":28,"src":69720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,69722,69723],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,69725,69726],{},"获得的是数字型数据，不带单位",[14,69728,69729],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,69731,69732],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,69734,69735],{},"它是通过document.documentElement来获取",[14,69737,69738],{},[2918,69739],{"alt":28,"src":69740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,69742,69743],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[1599,69745,69747],{"id":69746},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,69749,69750],{},[2918,69751],{"alt":28,"src":69752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,69754,69755],{},[2918,69756],{"alt":28,"src":69757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[1599,69759,69761],{"id":69760},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,69763,69764],{},[2918,69765],{"alt":28,"src":69766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,69768,69769],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,69771,69772],{},[2918,69773],{"alt":28,"src":69774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,69776,69777],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,69779,69780],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,69782,69783],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,69785,69786],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,69788,69789],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,69791,69792],{},[2918,69793],{"alt":28,"src":69794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,69796,69797],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,69799,69800],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,69802,69803],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,69805,69806],{},"e.pageX-box.getBoundingClientRect()",[1599,69808,69810],{"id":69809},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,69812,69813],{},[2918,69814],{"alt":28,"src":69815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,69817,69818],{},"这个是相对于视口来说的，它是个方法，不是属性值",[1599,69820,69822],{"id":69821},"_338-总结","3.3.8 总结",[14,69824,69825],{},[2918,69826],{"alt":28,"src":69827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,69829,69830],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,69832,69833],{},"修改盒子的宽高只能通过width和height来实现",[1599,69835,69837],{"id":69836},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[23,69839,69841],{"className":51886,"code":69840,"language":51888,"meta":28,"style":28},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[30,69842,69843,69848,69853,69858,69863],{"__ignoreMap":28},[33,69844,69845],{"class":35,"line":36},[33,69846,69847],{"class":47},"\u002F* 页面滑动 *\u002F\n",[33,69849,69850],{"class":35,"line":51},[33,69851,69852],{"class":47},"html {\n",[33,69854,69855],{"class":35,"line":57},[33,69856,69857],{"class":47},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[33,69859,69860],{"class":35,"line":64},[33,69861,69862],{"class":47},"  scroll-behavior: smooth;\n",[33,69864,69865],{"class":35,"line":83},[33,69866,231],{"class":47},[14,69868,69869],{},"默认是auto",[1599,69871,69873],{"id":69872},"_3310-日期对象","3.3.10 日期对象",[23249,69875,69877],{"id":69876},"_33101-实例化","3.3.10.1 实例化",[14,69879,69880],{},[2918,69881],{"alt":28,"src":69882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23249,69884,69886],{"id":69885},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,69888,69889],{},[2918,69890],{"alt":28,"src":69891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,69893,69894],{},"月份+1",[14,69896,69897],{},"老外认为第一天为0，星期天",[14,69899,69900],{},"方法使用的时候必须要跟括号",[14,69902,69903],{},"快速获得日期",[14,69905,69906],{},"\u002F\u002F 得到年月日",[14,69908,69909],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,69911,69912],{},"\u002F\u002F 得到当地日期",[14,69914,69915],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69917,69918],{},"\u002F\u002F 得到当地时间",[14,69920,69921],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69923,69924],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69926,69927],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53066,69929,69930],{},"\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,69932,69933],{},"学会去封装函数！",[23249,69935,69937],{"id":69936},"_33103-时间戳","3.3.10.3 时间戳",[14,69939,69940],{},[2918,69941],{"alt":28,"src":69942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69944,69945],{},[2918,69946],{"alt":28,"src":69947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69949,69950],{},"三种方法记住一个就可以",[1599,69952,69954],{"id":69953},"_3311-节点操作","3.3.11 节点操作",[23249,69956,69958],{"id":69957},"_33111-dom节点","3.3.11.1 DOM节点",[14,69960,69961],{},[2918,69962],{"alt":28,"src":69963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69965,69966],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23249,69968,69970],{"id":69969},"_33112-查找节点","3.3.11.2 查找节点",[14,69972,69973],{},"前边的document.querySelector()是获取的元素",[14,69975,69976],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69978,69979],{},[2918,69980],{"alt":28,"src":69981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[574,69983,69984],{},[564,69985,69986],{},"父节点",[14,69988,69989],{},[2918,69990],{"alt":28,"src":69991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[574,69993,69994],{"start":51},[564,69995,69996],{},"子节点",[14,69998,69999],{},[2918,70000],{"alt":28,"src":70001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,70003,70004],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,70006,70007],{},"children获得的是伪数组，是亲儿子",[574,70009,70010],{"start":57},[564,70011,70012],{},"兄弟节点",[14,70014,70015],{},[2918,70016],{"alt":28,"src":70017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23249,70019,70021],{"id":70020},"_33113-增加节点","3.3.11.3 增加节点",[14,70023,70024],{},[2918,70025],{"alt":28,"src":70026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,70028,70029],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,70031,70032],{},[2918,70033],{"alt":28,"src":70034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,70036,70037],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,70039,70040],{},"下面是写法的部分展示，就按照下边的格式来写",[14,70042,70043],{},"例：",[53066,70045,70046],{},"\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,70048,70049],{},[2918,70050],{"alt":28,"src":70051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,70053,70054],{},"false只克隆标签，里边的内容不会克隆过来",[23,70056,70058],{"className":51886,"code":70057,"language":51888,"meta":28,"style":28},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[30,70059,70060],{"__ignoreMap":28},[33,70061,70062],{"class":35,"line":36},[33,70063,70057],{"class":47},[23249,70065,70067],{"id":70066},"_33114-删除节点","3.3.11.4 删除节点",[14,70069,70070],{},[2918,70071],{"alt":28,"src":70072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,70074,70075],{},"父亲删儿子",[14,70077,70078],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[1599,70080,70082],{"id":70081},"_3312-m端事件","3.3.12 M端事件",[14,70084,70085],{},"M端就是移动端",[14,70087,70088],{},[2918,70089],{"alt":28,"src":70090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[1599,70092,70094],{"id":70093},"_3313-插件","3.3.13 插件",[14,70096,70097],{},"要熟悉官网！！！",[14,70099,70100],{},[126,70101,70102],{"href":70102,"rel":70103},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25117],[14,70105,70106],{},[126,70107,70108],{"href":70108,"rel":70109},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25117],[1599,70111,70113],{"id":70112},"_3314-学生信息表","3.3.14 学生信息表",[574,70115,70116,70119,70122,70125,70128,70131,70134,70137],{},[564,70117,70118],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[564,70120,70121],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[564,70123,70124],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[564,70126,70127],{},"用好表单元素自带的属性，value,name等",[564,70129,70130],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[564,70132,70133],{},"不要忘记事件对象",[564,70135,70136],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[564,70138,70139],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,70141,70142],{},"结构：",[23,70144,70146],{"className":51886,"code":70145,"language":51888,"meta":28,"style":28},"\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",[30,70147,70148,70158,70172,70176,70184,70198,70218,70239,70252,70276,70284,70288,70296,70309,70330,70358,70386,70391,70413,70433,70452,70460,70488,70510,70530,70550,70570,70590,70610,70618,70638,70646,70650,70663,70671,70679,70687,70700,70713,70726,70739,70752,70765,70778,70786,70794,70802,70807,70812,70817,70822,70827,70832,70837,70842,70847,70852,70857,70862,70867,70875,70883,70891,70895,70915,70934,70954,70974,70994,71014,71018,71023,71043,71048,71058,71063,71068,71088,71110,71115,71125,71129,71133,71138,71143,71172,71186,71201,71205,71209,71213,71218,71229,71242,71247,71252,71257,71262,71267,71271,71276,71281,71290,71295,71300,71312,71317,71324,71328,71333,71343,71348,71358,71363,71391,71412,71422,71442,71460,71477,71494,71511,71528,71532,71542,71547,71552,71557,71568,71572,71576,71580,71585,71590,71611,71623,71628,71633,71638,71652,71657,71664,71668,71672,71680,71684,71692,71696],{"__ignoreMap":28},[33,70149,70150,70152,70154,70156],{"class":35,"line":36},[33,70151,52550],{"class":47},[33,70153,52554],{"class":52553},[33,70155,52557],{"class":43},[33,70157,52560],{"class":47},[33,70159,70160,70162,70164,70166,70168,70170],{"class":35,"line":51},[33,70161,875],{"class":47},[33,70163,51888],{"class":52553},[33,70165,52569],{"class":43},[33,70167,73],{"class":47},[33,70169,52574],{"class":119},[33,70171,52560],{"class":47},[33,70173,70174],{"class":35,"line":57},[33,70175,160],{"emptyLinePlaceholder":159},[33,70177,70178,70180,70182],{"class":35,"line":64},[33,70179,875],{"class":47},[33,70181,52587],{"class":52553},[33,70183,52560],{"class":47},[33,70185,70186,70188,70190,70192,70194,70196],{"class":35,"line":83},[33,70187,53397],{"class":47},[33,70189,52597],{"class":52553},[33,70191,52600],{"class":43},[33,70193,73],{"class":47},[33,70195,52605],{"class":119},[33,70197,60380],{"class":47},[33,70199,70200,70202,70204,70206,70208,70210,70212,70214,70216],{"class":35,"line":89},[33,70201,53397],{"class":47},[33,70203,52597],{"class":52553},[33,70205,16171],{"class":43},[33,70207,73],{"class":47},[33,70209,52644],{"class":119},[33,70211,52624],{"class":43},[33,70213,73],{"class":47},[33,70215,52651],{"class":119},[33,70217,60380],{"class":47},[33,70219,70220,70222,70224,70226,70228,70230,70232,70234,70237],{"class":35,"line":98},[33,70221,53397],{"class":47},[33,70223,52597],{"class":52553},[33,70225,52616],{"class":43},[33,70227,73],{"class":47},[33,70229,52621],{"class":119},[33,70231,52624],{"class":43},[33,70233,73],{"class":47},[33,70235,70236],{"class":119},"\"ie=edge\"",[33,70238,60380],{"class":47},[33,70240,70241,70243,70245,70248,70250],{"class":35,"line":110},[33,70242,53397],{"class":47},[33,70244,52660],{"class":52553},[33,70246,70247],{"class":47},">学生信息管理\u003C\u002F",[33,70249,52660],{"class":52553},[33,70251,52560],{"class":47},[33,70253,70254,70256,70259,70262,70264,70267,70269,70271,70274],{"class":35,"line":134},[33,70255,53397],{"class":47},[33,70257,70258],{"class":52553},"link",[33,70260,70261],{"class":43}," rel",[33,70263,73],{"class":47},[33,70265,70266],{"class":119},"\"stylesheet\"",[33,70268,62310],{"class":43},[33,70270,73],{"class":47},[33,70272,70273],{"class":119},"\"css\u002Findex.css\"",[33,70275,60380],{"class":47},[33,70277,70278,70280,70282],{"class":35,"line":156},[33,70279,53038],{"class":47},[33,70281,52587],{"class":52553},[33,70283,52560],{"class":47},[33,70285,70286],{"class":35,"line":163},[33,70287,160],{"emptyLinePlaceholder":159},[33,70289,70290,70292,70294],{"class":35,"line":169},[33,70291,875],{"class":47},[33,70293,53053],{"class":52553},[33,70295,52560],{"class":47},[33,70297,70298,70300,70302,70305,70307],{"class":35,"line":175},[33,70299,53397],{"class":47},[33,70301,10],{"class":52553},[33,70303,70304],{"class":47},">新增学员\u003C\u002F",[33,70306,10],{"class":52553},[33,70308,52560],{"class":47},[33,70310,70311,70313,70315,70317,70319,70321,70324,70326,70328],{"class":35,"line":181},[33,70312,53397],{"class":47},[33,70314,67878],{"class":52553},[33,70316,54739],{"class":43},[33,70318,73],{"class":47},[33,70320,63917],{"class":119},[33,70322,70323],{"class":43}," autocomplete",[33,70325,73],{"class":47},[33,70327,33029],{"class":119},[33,70329,52560],{"class":47},[33,70331,70332,70335,70337,70339,70341,70343,70345,70347,70350,70352,70354,70356],{"class":35,"line":196},[33,70333,70334],{"class":47},"    姓名：\u003C",[33,70336,55074],{"class":52553},[33,70338,55077],{"class":43},[33,70340,73],{"class":47},[33,70342,63952],{"class":119},[33,70344,54739],{"class":43},[33,70346,73],{"class":47},[33,70348,70349],{"class":119},"\"uname\"",[33,70351,16171],{"class":43},[33,70353,73],{"class":47},[33,70355,70349],{"class":119},[33,70357,60380],{"class":47},[33,70359,70360,70363,70365,70367,70369,70371,70373,70375,70378,70380,70382,70384],{"class":35,"line":213},[33,70361,70362],{"class":47},"    年龄：\u003C",[33,70364,55074],{"class":52553},[33,70366,55077],{"class":43},[33,70368,73],{"class":47},[33,70370,63952],{"class":119},[33,70372,54739],{"class":43},[33,70374,73],{"class":47},[33,70376,70377],{"class":119},"\"age\"",[33,70379,16171],{"class":43},[33,70381,73],{"class":47},[33,70383,70377],{"class":119},[33,70385,60380],{"class":47},[33,70387,70388],{"class":35,"line":228},[33,70389,70390],{"class":47},"    性别:\n",[33,70392,70393,70395,70398,70400,70402,70405,70407,70409,70411],{"class":35,"line":1345},[33,70394,52594],{"class":47},[33,70396,70397],{"class":52553},"select",[33,70399,16171],{"class":43},[33,70401,73],{"class":47},[33,70403,70404],{"class":119},"\"gender\"",[33,70406,54739],{"class":43},[33,70408,73],{"class":47},[33,70410,70404],{"class":119},[33,70412,52560],{"class":47},[33,70414,70415,70417,70420,70422,70424,70426,70429,70431],{"class":35,"line":1350},[33,70416,56487],{"class":47},[33,70418,70419],{"class":52553},"option",[33,70421,67904],{"class":43},[33,70423,73],{"class":47},[33,70425,11212],{"class":119},[33,70427,70428],{"class":47},">男\u003C\u002F",[33,70430,70419],{"class":52553},[33,70432,52560],{"class":47},[33,70434,70435,70437,70439,70441,70443,70445,70448,70450],{"class":35,"line":1359},[33,70436,56487],{"class":47},[33,70438,70419],{"class":52553},[33,70440,67904],{"class":43},[33,70442,73],{"class":47},[33,70444,11281],{"class":119},[33,70446,70447],{"class":47},">女\u003C\u002F",[33,70449,70419],{"class":52553},[33,70451,52560],{"class":47},[33,70453,70454,70456,70458],{"class":35,"line":1364},[33,70455,53029],{"class":47},[33,70457,70397],{"class":52553},[33,70459,52560],{"class":47},[33,70461,70462,70465,70467,70469,70471,70473,70475,70477,70480,70482,70484,70486],{"class":35,"line":1370},[33,70463,70464],{"class":47},"    薪资：\u003C",[33,70466,55074],{"class":52553},[33,70468,55077],{"class":43},[33,70470,73],{"class":47},[33,70472,63952],{"class":119},[33,70474,54739],{"class":43},[33,70476,73],{"class":47},[33,70478,70479],{"class":119},"\"salary\"",[33,70481,16171],{"class":43},[33,70483,73],{"class":47},[33,70485,70479],{"class":119},[33,70487,60380],{"class":47},[33,70489,70490,70493,70495,70497,70499,70502,70504,70506,70508],{"class":35,"line":1425},[33,70491,70492],{"class":47},"    就业城市：\u003C",[33,70494,70397],{"class":52553},[33,70496,16171],{"class":43},[33,70498,73],{"class":47},[33,70500,70501],{"class":119},"\"city\"",[33,70503,54739],{"class":43},[33,70505,73],{"class":47},[33,70507,70501],{"class":119},[33,70509,52560],{"class":47},[33,70511,70512,70514,70516,70518,70520,70523,70526,70528],{"class":35,"line":1438},[33,70513,56487],{"class":47},[33,70515,70419],{"class":52553},[33,70517,67904],{"class":43},[33,70519,73],{"class":47},[33,70521,70522],{"class":119},"\"北京\"",[33,70524,70525],{"class":47},">北京\u003C\u002F",[33,70527,70419],{"class":52553},[33,70529,52560],{"class":47},[33,70531,70532,70534,70536,70538,70540,70543,70546,70548],{"class":35,"line":1451},[33,70533,56487],{"class":47},[33,70535,70419],{"class":52553},[33,70537,67904],{"class":43},[33,70539,73],{"class":47},[33,70541,70542],{"class":119},"\"上海\"",[33,70544,70545],{"class":47},">上海\u003C\u002F",[33,70547,70419],{"class":52553},[33,70549,52560],{"class":47},[33,70551,70552,70554,70556,70558,70560,70563,70566,70568],{"class":35,"line":1457},[33,70553,56487],{"class":47},[33,70555,70419],{"class":52553},[33,70557,67904],{"class":43},[33,70559,73],{"class":47},[33,70561,70562],{"class":119},"\"广州\"",[33,70564,70565],{"class":47},">广州\u003C\u002F",[33,70567,70419],{"class":52553},[33,70569,52560],{"class":47},[33,70571,70572,70574,70576,70578,70580,70583,70586,70588],{"class":35,"line":1466},[33,70573,56487],{"class":47},[33,70575,70419],{"class":52553},[33,70577,67904],{"class":43},[33,70579,73],{"class":47},[33,70581,70582],{"class":119},"\"深圳\"",[33,70584,70585],{"class":47},">深圳\u003C\u002F",[33,70587,70419],{"class":52553},[33,70589,52560],{"class":47},[33,70591,70592,70594,70596,70598,70600,70603,70606,70608],{"class":35,"line":1471},[33,70593,56487],{"class":47},[33,70595,70419],{"class":52553},[33,70597,67904],{"class":43},[33,70599,73],{"class":47},[33,70601,70602],{"class":119},"\"曹县\"",[33,70604,70605],{"class":47},">曹县\u003C\u002F",[33,70607,70419],{"class":52553},[33,70609,52560],{"class":47},[33,70611,70612,70614,70616],{"class":35,"line":1477},[33,70613,53029],{"class":47},[33,70615,70397],{"class":52553},[33,70617,52560],{"class":47},[33,70619,70620,70622,70624,70626,70628,70631,70634,70636],{"class":35,"line":1504},[33,70621,52594],{"class":47},[33,70623,55140],{"class":52553},[33,70625,54739],{"class":43},[33,70627,73],{"class":47},[33,70629,70630],{"class":119},"\"add\"",[33,70632,70633],{"class":47},">录入\u003C\u002F",[33,70635,55140],{"class":52553},[33,70637,52560],{"class":47},[33,70639,70640,70642,70644],{"class":35,"line":1509},[33,70641,53670],{"class":47},[33,70643,67878],{"class":52553},[33,70645,52560],{"class":47},[33,70647,70648],{"class":35,"line":1525},[33,70649,160],{"emptyLinePlaceholder":159},[33,70651,70652,70654,70656,70659,70661],{"class":35,"line":1535},[33,70653,53397],{"class":47},[33,70655,10],{"class":52553},[33,70657,70658],{"class":47},">就业榜\u003C\u002F",[33,70660,10],{"class":52553},[33,70662,52560],{"class":47},[33,70664,70665,70667,70669],{"class":35,"line":1540},[33,70666,53397],{"class":47},[33,70668,1756],{"class":52553},[33,70670,52560],{"class":47},[33,70672,70673,70675,70677],{"class":35,"line":4027},[33,70674,52594],{"class":47},[33,70676,1759],{"class":52553},[33,70678,52560],{"class":47},[33,70680,70681,70683,70685],{"class":35,"line":4032},[33,70682,56487],{"class":47},[33,70684,1762],{"class":52553},[33,70686,52560],{"class":47},[33,70688,70689,70691,70693,70696,70698],{"class":35,"line":9199},[33,70690,56555],{"class":47},[33,70692,1765],{"class":52553},[33,70694,70695],{"class":47},">序号\u003C\u002F",[33,70697,1765],{"class":52553},[33,70699,52560],{"class":47},[33,70701,70702,70704,70706,70709,70711],{"class":35,"line":9223},[33,70703,56555],{"class":47},[33,70705,1765],{"class":52553},[33,70707,70708],{"class":47},">姓名\u003C\u002F",[33,70710,1765],{"class":52553},[33,70712,52560],{"class":47},[33,70714,70715,70717,70719,70722,70724],{"class":35,"line":9228},[33,70716,56555],{"class":47},[33,70718,1765],{"class":52553},[33,70720,70721],{"class":47},">年龄\u003C\u002F",[33,70723,1765],{"class":52553},[33,70725,52560],{"class":47},[33,70727,70728,70730,70732,70735,70737],{"class":35,"line":9234},[33,70729,56555],{"class":47},[33,70731,1765],{"class":52553},[33,70733,70734],{"class":47},">性别\u003C\u002F",[33,70736,1765],{"class":52553},[33,70738,52560],{"class":47},[33,70740,70741,70743,70745,70748,70750],{"class":35,"line":9261},[33,70742,56555],{"class":47},[33,70744,1765],{"class":52553},[33,70746,70747],{"class":47},">薪资\u003C\u002F",[33,70749,1765],{"class":52553},[33,70751,52560],{"class":47},[33,70753,70754,70756,70758,70761,70763],{"class":35,"line":9266},[33,70755,56555],{"class":47},[33,70757,1765],{"class":52553},[33,70759,70760],{"class":47},">就业城市\u003C\u002F",[33,70762,1765],{"class":52553},[33,70764,52560],{"class":47},[33,70766,70767,70769,70771,70774,70776],{"class":35,"line":9272},[33,70768,56555],{"class":47},[33,70770,1765],{"class":52553},[33,70772,70773],{"class":47},">操作\u003C\u002F",[33,70775,1765],{"class":52553},[33,70777,52560],{"class":47},[33,70779,70780,70782,70784],{"class":35,"line":9284},[33,70781,56660],{"class":47},[33,70783,1762],{"class":52553},[33,70785,52560],{"class":47},[33,70787,70788,70790,70792],{"class":35,"line":9296},[33,70789,53029],{"class":47},[33,70791,1759],{"class":52553},[33,70793,52560],{"class":47},[33,70795,70796,70798,70800],{"class":35,"line":9308},[33,70797,52594],{"class":47},[33,70799,1802],{"class":52553},[33,70801,52560],{"class":47},[33,70803,70804],{"class":35,"line":10967},[33,70805,70806],{"class":60},"      \u003C!-- \n",[33,70808,70809],{"class":35,"line":10992},[33,70810,70811],{"class":60},"        \u003Ctr>\n",[33,70813,70814],{"class":35,"line":11015},[33,70815,70816],{"class":60},"          \u003Ctd>1001\u003C\u002Ftd>\n",[33,70818,70819],{"class":35,"line":11039},[33,70820,70821],{"class":60},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[33,70823,70824],{"class":35,"line":11044},[33,70825,70826],{"class":60},"          \u003Ctd>19\u003C\u002Ftd>\n",[33,70828,70829],{"class":35,"line":11049},[33,70830,70831],{"class":60},"          \u003Ctd>男\u003C\u002Ftd>\n",[33,70833,70834],{"class":35,"line":11054},[33,70835,70836],{"class":60},"          \u003Ctd>15000\u003C\u002Ftd>\n",[33,70838,70839],{"class":35,"line":11063},[33,70840,70841],{"class":60},"          \u003Ctd>上海\u003C\u002Ftd>\n",[33,70843,70844],{"class":35,"line":11068},[33,70845,70846],{"class":60},"          \u003Ctd>\n",[33,70848,70849],{"class":35,"line":11074},[33,70850,70851],{"class":60},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[33,70853,70854],{"class":35,"line":11095},[33,70855,70856],{"class":60},"          \u003C\u002Ftd>\n",[33,70858,70859],{"class":35,"line":11101},[33,70860,70861],{"class":60},"        \u003C\u002Ftr> \n",[33,70863,70864],{"class":35,"line":11115},[33,70865,70866],{"class":60},"        -->\n",[33,70868,70869,70871,70873],{"class":35,"line":11121},[33,70870,53029],{"class":47},[33,70872,1802],{"class":52553},[33,70874,52560],{"class":47},[33,70876,70877,70879,70881],{"class":35,"line":11148},[33,70878,53670],{"class":47},[33,70880,1756],{"class":52553},[33,70882,52560],{"class":47},[33,70884,70885,70887,70889],{"class":35,"line":11157},[33,70886,53397],{"class":47},[33,70888,53066],{"class":52553},[33,70890,52560],{"class":47},[33,70892,70893],{"class":35,"line":11163},[33,70894,61211],{"class":60},[33,70896,70897,70899,70902,70904,70906,70908,70910,70913],{"class":35,"line":11171},[33,70898,12472],{"class":39},[33,70900,70901],{"class":76}," uname",[33,70903,14815],{"class":39},[33,70905,55649],{"class":47},[33,70907,55652],{"class":43},[33,70909,345],{"class":47},[33,70911,70912],{"class":119},"'.uname'",[33,70914,884],{"class":47},[33,70916,70917,70919,70921,70923,70925,70927,70929,70932],{"class":35,"line":11176},[33,70918,12472],{"class":39},[33,70920,16940],{"class":76},[33,70922,14815],{"class":39},[33,70924,55649],{"class":47},[33,70926,55652],{"class":43},[33,70928,345],{"class":47},[33,70930,70931],{"class":119},"'.age'",[33,70933,884],{"class":47},[33,70935,70936,70938,70941,70943,70945,70947,70949,70952],{"class":35,"line":17855},[33,70937,12472],{"class":39},[33,70939,70940],{"class":76}," gender",[33,70942,14815],{"class":39},[33,70944,55649],{"class":47},[33,70946,55652],{"class":43},[33,70948,345],{"class":47},[33,70950,70951],{"class":119},"'.gender'",[33,70953,884],{"class":47},[33,70955,70956,70958,70961,70963,70965,70967,70969,70972],{"class":35,"line":17861},[33,70957,12472],{"class":39},[33,70959,70960],{"class":76}," salary",[33,70962,14815],{"class":39},[33,70964,55649],{"class":47},[33,70966,55652],{"class":43},[33,70968,345],{"class":47},[33,70970,70971],{"class":119},"'.salary'",[33,70973,884],{"class":47},[33,70975,70976,70978,70981,70983,70985,70987,70989,70992],{"class":35,"line":17884},[33,70977,12472],{"class":39},[33,70979,70980],{"class":76}," city",[33,70982,14815],{"class":39},[33,70984,55649],{"class":47},[33,70986,55652],{"class":43},[33,70988,345],{"class":47},[33,70990,70991],{"class":119},"'.city'",[33,70993,884],{"class":47},[33,70995,70996,70998,71001,71003,71005,71007,71009,71012],{"class":35,"line":17890},[33,70997,12472],{"class":39},[33,70999,71000],{"class":76}," tbody",[33,71002,14815],{"class":39},[33,71004,55649],{"class":47},[33,71006,55652],{"class":43},[33,71008,345],{"class":47},[33,71010,71011],{"class":119},"'tbody'",[33,71013,884],{"class":47},[33,71015,71016],{"class":35,"line":17913},[33,71017,160],{"emptyLinePlaceholder":159},[33,71019,71020],{"class":35,"line":17927},[33,71021,71022],{"class":60},"    \u002F\u002F 获取所有带有name属性的元素\n",[33,71024,71025,71027,71030,71032,71034,71036,71038,71041],{"class":35,"line":17947},[33,71026,12472],{"class":39},[33,71028,71029],{"class":76}," items",[33,71031,14815],{"class":39},[33,71033,55649],{"class":47},[33,71035,56934],{"class":43},[33,71037,345],{"class":47},[33,71039,71040],{"class":119},"'[name]'",[33,71042,884],{"class":47},[33,71044,71045],{"class":35,"line":17953},[33,71046,71047],{"class":60},"    \u002F\u002F 声明一个空的数组\n",[33,71049,71050,71052,71054,71056],{"class":35,"line":17964},[33,71051,12472],{"class":39},[33,71053,58948],{"class":76},[33,71055,14815],{"class":39},[33,71057,53091],{"class":47},[33,71059,71060],{"class":35,"line":17987},[33,71061,71062],{"class":60},"    \u002F\u002F 1.录入模块\n",[33,71064,71065],{"class":35,"line":18009},[33,71066,71067],{"class":60},"    \u002F\u002F 1.1这是一个表单提交事件\n",[33,71069,71070,71072,71075,71077,71079,71081,71083,71086],{"class":35,"line":18014},[33,71071,12472],{"class":39},[33,71073,71074],{"class":76}," info",[33,71076,14815],{"class":39},[33,71078,55649],{"class":47},[33,71080,55652],{"class":43},[33,71082,345],{"class":47},[33,71084,71085],{"class":119},"'.info'",[33,71087,884],{"class":47},[33,71089,71090,71093,71095,71097,71100,71102,71104,71106,71108],{"class":35,"line":18020},[33,71091,71092],{"class":47},"    info.",[33,71094,59066],{"class":43},[33,71096,345],{"class":47},[33,71098,71099],{"class":119},"'submit'",[33,71101,13686],{"class":47},[33,71103,55702],{"class":39},[33,71105,860],{"class":47},[33,71107,1696],{"class":955},[33,71109,13693],{"class":47},[33,71111,71112],{"class":35,"line":18034},[33,71113,71114],{"class":60},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[33,71116,71117,71120,71123],{"class":35,"line":18047},[33,71118,71119],{"class":47},"      e.",[33,71121,71122],{"class":43},"preventDefault",[33,71124,48],{"class":47},[33,71126,71127],{"class":35,"line":18052},[33,71128,61265],{"class":60},[33,71130,71131],{"class":35,"line":18066},[33,71132,160],{"emptyLinePlaceholder":159},[33,71134,71135],{"class":35,"line":18071},[33,71136,71137],{"class":60},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[33,71139,71140],{"class":35,"line":18077},[33,71141,71142],{"class":60},"      \u002F\u002F 先遍历循环\n",[33,71144,71145,71147,71149,71151,71153,71155,71157,71159,71161,71164,71166,71168,71170],{"class":35,"line":18082},[33,71146,53537],{"class":39},[33,71148,860],{"class":47},[33,71150,53100],{"class":39},[33,71152,10689],{"class":47},[33,71154,73],{"class":39},[33,71156,5492],{"class":76},[33,71158,10696],{"class":47},[33,71160,875],{"class":39},[33,71162,71163],{"class":47}," items.",[33,71165,53221],{"class":76},[33,71167,1492],{"class":47},[33,71169,811],{"class":39},[33,71171,13693],{"class":47},[33,71173,71174,71176,71179,71181,71184],{"class":35,"line":18096},[33,71175,3915],{"class":39},[33,71177,71178],{"class":47}," (items[i].value ",[33,71180,55739],{"class":39},[33,71182,71183],{"class":119}," ''",[33,71185,13693],{"class":47},[33,71187,71188,71191,71194,71196,71199],{"class":35,"line":18101},[33,71189,71190],{"class":39},"          return",[33,71192,71193],{"class":43}," alert",[33,71195,345],{"class":47},[33,71197,71198],{"class":119},"'输入内容不能为空'",[33,71200,884],{"class":47},[33,71202,71203],{"class":35,"line":18106},[33,71204,1334],{"class":47},[33,71206,71207],{"class":35,"line":18120},[33,71208,53651],{"class":47},[33,71210,71211],{"class":35,"line":18132},[33,71212,160],{"emptyLinePlaceholder":159},[33,71214,71215],{"class":35,"line":18137},[33,71216,71217],{"class":60},"      \u002F\u002F 创建新的对象\n",[33,71219,71220,71222,71225,71227],{"class":35,"line":18150},[33,71221,59481],{"class":39},[33,71223,71224],{"class":76}," obj",[33,71226,14815],{"class":39},[33,71228,16823],{"class":47},[33,71230,71231,71234,71236,71238,71240],{"class":35,"line":18155},[33,71232,71233],{"class":47},"        stuID: arr.",[33,71235,53221],{"class":76},[33,71237,46819],{"class":39},[33,71239,26371],{"class":76},[33,71241,32719],{"class":47},[33,71243,71244],{"class":35,"line":18160},[33,71245,71246],{"class":47},"        uname: uname.value,\n",[33,71248,71249],{"class":35,"line":18165},[33,71250,71251],{"class":47},"        age: age.value,\n",[33,71253,71254],{"class":35,"line":18178},[33,71255,71256],{"class":47},"        gender: gender.value,\n",[33,71258,71259],{"class":35,"line":18183},[33,71260,71261],{"class":47},"        salary: salary.value,\n",[33,71263,71264],{"class":35,"line":33886},[33,71265,71266],{"class":47},"        city: city.value\n",[33,71268,71269],{"class":35,"line":33892},[33,71270,53651],{"class":47},[33,71272,71273],{"class":35,"line":33898},[33,71274,71275],{"class":60},"      \u002F\u002F console.log(obj);\n",[33,71277,71278],{"class":35,"line":33904},[33,71279,71280],{"class":60},"      \u002F\u002F 追加到数组里面\n",[33,71282,71283,71285,71287],{"class":35,"line":33910},[33,71284,59260],{"class":47},[33,71286,53137],{"class":43},[33,71288,71289],{"class":47},"(obj)\n",[33,71291,71292],{"class":35,"line":33921},[33,71293,71294],{"class":60},"      \u002F\u002F console.log(arr);\n",[33,71296,71297],{"class":35,"line":33927},[33,71298,71299],{"class":60},"      \u002F\u002F 清空表单  reset重置表单\n",[33,71301,71302,71305,71307,71310],{"class":35,"line":33947},[33,71303,71304],{"class":76},"      this",[33,71306,2158],{"class":47},[33,71308,71309],{"class":43},"reset",[33,71311,48],{"class":47},[33,71313,71314],{"class":35,"line":33953},[33,71315,71316],{"class":60},"      \u002F\u002F 调用渲染函数\n",[33,71318,71319,71322],{"class":35,"line":33964},[33,71320,71321],{"class":43},"      render",[33,71323,48],{"class":47},[33,71325,71326],{"class":35,"line":33970},[33,71327,34714],{"class":47},[33,71329,71330],{"class":35,"line":33976},[33,71331,71332],{"class":60},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[33,71334,71335,71338,71341],{"class":35,"line":33982},[33,71336,71337],{"class":39},"    function",[33,71339,71340],{"class":43}," render",[33,71342,12104],{"class":47},[33,71344,71345],{"class":35,"line":33988},[33,71346,71347],{"class":60},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[33,71349,71350,71353,71355],{"class":35,"line":33994},[33,71351,71352],{"class":47},"      tbody.innerHTML ",[33,71354,73],{"class":39},[33,71356,71357],{"class":119}," ''\n",[33,71359,71360],{"class":35,"line":34000},[33,71361,71362],{"class":60},"      \u002F\u002F 遍历数组\n",[33,71364,71365,71367,71369,71371,71373,71375,71377,71379,71381,71383,71385,71387,71389],{"class":35,"line":34006},[33,71366,53537],{"class":39},[33,71368,860],{"class":47},[33,71370,53100],{"class":39},[33,71372,10689],{"class":47},[33,71374,73],{"class":39},[33,71376,5492],{"class":76},[33,71378,10696],{"class":47},[33,71380,875],{"class":39},[33,71382,53218],{"class":47},[33,71384,53221],{"class":76},[33,71386,1492],{"class":47},[33,71388,811],{"class":39},[33,71390,13693],{"class":47},[33,71392,71393,71395,71398,71400,71402,71405,71407,71410],{"class":35,"line":34026},[33,71394,62523],{"class":39},[33,71396,71397],{"class":76}," tr",[33,71399,14815],{"class":39},[33,71401,55649],{"class":47},[33,71403,71404],{"class":43},"createElement",[33,71406,345],{"class":47},[33,71408,71409],{"class":119},"'tr'",[33,71411,884],{"class":47},[33,71413,71414,71417,71419],{"class":35,"line":34032},[33,71415,71416],{"class":47},"        tr.innerHTML ",[33,71418,73],{"class":39},[33,71420,71421],{"class":119}," `\n",[33,71423,71424,71427,71429,71431,71433,71436,71439],{"class":35,"line":34048},[33,71425,71426],{"class":119},"        \u003Ctd>${",[33,71428,5282],{"class":47},[33,71430,2489],{"class":119},[33,71432,1239],{"class":47},[33,71434,71435],{"class":119},"].",[33,71437,71438],{"class":47},"stuID",[33,71440,71441],{"class":119},"}\u003C\u002Ftd>\n",[33,71443,71444,71447,71449,71451,71453,71455,71458],{"class":35,"line":34054},[33,71445,71446],{"class":119},"          \u003Ctd>${",[33,71448,5282],{"class":47},[33,71450,2489],{"class":119},[33,71452,1239],{"class":47},[33,71454,71435],{"class":119},[33,71456,71457],{"class":47},"uname",[33,71459,71441],{"class":119},[33,71461,71462,71464,71466,71468,71470,71472,71475],{"class":35,"line":34068},[33,71463,71446],{"class":119},[33,71465,5282],{"class":47},[33,71467,2489],{"class":119},[33,71469,1239],{"class":47},[33,71471,71435],{"class":119},[33,71473,71474],{"class":47},"age",[33,71476,71441],{"class":119},[33,71478,71479,71481,71483,71485,71487,71489,71492],{"class":35,"line":34074},[33,71480,71446],{"class":119},[33,71482,5282],{"class":47},[33,71484,2489],{"class":119},[33,71486,1239],{"class":47},[33,71488,71435],{"class":119},[33,71490,71491],{"class":47},"gender",[33,71493,71441],{"class":119},[33,71495,71496,71498,71500,71502,71504,71506,71509],{"class":35,"line":34089},[33,71497,71446],{"class":119},[33,71499,5282],{"class":47},[33,71501,2489],{"class":119},[33,71503,1239],{"class":47},[33,71505,71435],{"class":119},[33,71507,71508],{"class":47},"salary",[33,71510,71441],{"class":119},[33,71512,71513,71515,71517,71519,71521,71523,71526],{"class":35,"line":34095},[33,71514,71446],{"class":119},[33,71516,5282],{"class":47},[33,71518,2489],{"class":119},[33,71520,1239],{"class":47},[33,71522,71435],{"class":119},[33,71524,71525],{"class":47},"city",[33,71527,71441],{"class":119},[33,71529,71530],{"class":35,"line":34104},[33,71531,70846],{"class":119},[33,71533,71534,71537,71539],{"class":35,"line":34110},[33,71535,71536],{"class":119},"            \u003Ca href=\"javascript:\" data-id=${",[33,71538,1239],{"class":47},[33,71540,71541],{"class":119},"}>删除\u003C\u002Fa>\n",[33,71543,71544],{"class":35,"line":34119},[33,71545,71546],{"class":119},"          \u003C\u002Ftd> \n",[33,71548,71549],{"class":35,"line":34125},[33,71550,71551],{"class":119},"          `\n",[33,71553,71554],{"class":35,"line":34131},[33,71555,71556],{"class":60},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[33,71558,71559,71562,71565],{"class":35,"line":34140},[33,71560,71561],{"class":47},"        tbody.",[33,71563,71564],{"class":43},"appendChild",[33,71566,71567],{"class":47},"(tr)\n",[33,71569,71570],{"class":35,"line":34146},[33,71571,53651],{"class":47},[33,71573,71574],{"class":35,"line":34157},[33,71575,916],{"class":47},[33,71577,71578],{"class":35,"line":34163},[33,71579,160],{"emptyLinePlaceholder":159},[33,71581,71582],{"class":35,"line":34182},[33,71583,71584],{"class":60},"    \u002F\u002F 3.删除委托\n",[33,71586,71587],{"class":35,"line":34188},[33,71588,71589],{"class":60},"    \u002F\u002F 3.1 事件委托 tbody\n",[33,71591,71592,71595,71597,71599,71601,71603,71605,71607,71609],{"class":35,"line":34199},[33,71593,71594],{"class":47},"    tbody.",[33,71596,59066],{"class":43},[33,71598,345],{"class":47},[33,71600,59071],{"class":119},[33,71602,13686],{"class":47},[33,71604,55702],{"class":39},[33,71606,860],{"class":47},[33,71608,1696],{"class":955},[33,71610,13693],{"class":47},[33,71612,71613,71615,71617,71619,71621],{"class":35,"line":34205},[33,71614,55733],{"class":39},[33,71616,68287],{"class":47},[33,71618,55739],{"class":39},[33,71620,69509],{"class":119},[33,71622,13693],{"class":47},[33,71624,71625],{"class":35,"line":34225},[33,71626,71627],{"class":60},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[33,71629,71630],{"class":35,"line":34241},[33,71631,71632],{"class":60},"        \u002F\u002F console.log(e.target.dataset.id);\n",[33,71634,71635],{"class":35,"line":34247},[33,71636,71637],{"class":60},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[33,71639,71640,71643,71645,71648,71650],{"class":35,"line":34261},[33,71641,71642],{"class":47},"        arr.",[33,71644,59263],{"class":43},[33,71646,71647],{"class":47},"(e.target.dataset.id, ",[33,71649,701],{"class":76},[33,71651,884],{"class":47},[33,71653,71654],{"class":35,"line":34267},[33,71655,71656],{"class":60},"        \u002F\u002F 重新渲染一次\n",[33,71658,71659,71662],{"class":35,"line":34273},[33,71660,71661],{"class":43},"        render",[33,71663,48],{"class":47},[33,71665,71666],{"class":35,"line":34284},[33,71667,53651],{"class":47},[33,71669,71670],{"class":35,"line":34290},[33,71671,34714],{"class":47},[33,71673,71674,71676,71678],{"class":35,"line":34296},[33,71675,53670],{"class":47},[33,71677,53066],{"class":52553},[33,71679,52560],{"class":47},[33,71681,71682],{"class":35,"line":34306},[33,71683,160],{"emptyLinePlaceholder":159},[33,71685,71686,71688,71690],{"class":35,"line":34312},[33,71687,53038],{"class":47},[33,71689,53053],{"class":52553},[33,71691,52560],{"class":47},[33,71693,71694],{"class":35,"line":34323},[33,71695,160],{"emptyLinePlaceholder":159},[33,71697,71698,71700,71702],{"class":35,"line":34329},[33,71699,53038],{"class":47},[33,71701,51888],{"class":52553},[33,71703,52560],{"class":47},[14,71705,71706],{},"样式：",[23,71708,71712],{"className":71709,"code":71710,"language":71711,"meta":28,"style":28},"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",[30,71713,71714,71719,71729,71738,71742,71746,71751,71761,71766,71770,71775,71785,71790,71799,71803,71807,71812,71817,71827,71837,71842,71846,71851,71860,71870,71875,71885,71895,71899,71904,71912,71916,71921,71926,71931,71939,71948,71952,71957,71966,71970,71975,71984,71988,71993,72002,72011,72019,72023,72028,72037,72047,72056,72066,72072,72081,72091,72101,72105,72110,72119,72127,72137,72145,72154,72163,72173,72181,72185,72190,72199],{"__ignoreMap":28},[33,71715,71716],{"class":35,"line":36},[33,71717,71718],{"class":47},"* {\n",[33,71720,71721,71724,71726],{"class":35,"line":51},[33,71722,71723],{"class":52553},"  margin",[33,71725,52690],{"class":47},[33,71727,71728],{"class":119},"0;\n",[33,71730,71731,71734,71736],{"class":35,"line":57},[33,71732,71733],{"class":119},"  padding",[33,71735,52690],{"class":47},[33,71737,71728],{"class":119},[33,71739,71740],{"class":35,"line":64},[33,71741,231],{"class":47},[33,71743,71744],{"class":35,"line":83},[33,71745,160],{"emptyLinePlaceholder":159},[33,71747,71748],{"class":35,"line":89},[33,71749,71750],{"class":119},"a {\n",[33,71752,71753,71756,71758],{"class":35,"line":98},[33,71754,71755],{"class":52553},"  text-decoration",[33,71757,52690],{"class":47},[33,71759,71760],{"class":119},"none;\n",[33,71762,71763],{"class":35,"line":110},[33,71764,71765],{"class":119},"  color:#721c24;\n",[33,71767,71768],{"class":35,"line":134},[33,71769,231],{"class":47},[33,71771,71772],{"class":35,"line":156},[33,71773,71774],{"class":119},"h1 {\n",[33,71776,71777,71780,71782],{"class":35,"line":163},[33,71778,71779],{"class":52553},"  text-align",[33,71781,52690],{"class":47},[33,71783,71784],{"class":119},"center;\n",[33,71786,71787],{"class":35,"line":169},[33,71788,71789],{"class":119},"  color:#333;\n",[33,71791,71792,71794,71796],{"class":35,"line":175},[33,71793,71723],{"class":52553},[33,71795,52690],{"class":47},[33,71797,71798],{"class":119},"20px 0;\n",[33,71800,71801],{"class":35,"line":181},[33,71802,4085],{"class":47},[33,71804,71805],{"class":35,"line":196},[33,71806,231],{"class":47},[33,71808,71809],{"class":35,"line":213},[33,71810,71811],{"class":119},"table {\n",[33,71813,71814],{"class":35,"line":228},[33,71815,71816],{"class":119},"  margin:0 auto;\n",[33,71818,71819,71822,71824],{"class":35,"line":1345},[33,71820,71821],{"class":52553},"  width",[33,71823,52690],{"class":47},[33,71825,71826],{"class":119},"800px;\n",[33,71828,71829,71832,71834],{"class":35,"line":1350},[33,71830,71831],{"class":52553},"  border-collapse",[33,71833,52690],{"class":47},[33,71835,71836],{"class":119},"collapse;\n",[33,71838,71839],{"class":35,"line":1359},[33,71840,71841],{"class":119},"  color:#004085;\n",[33,71843,71844],{"class":35,"line":1364},[33,71845,231],{"class":47},[33,71847,71848],{"class":35,"line":1370},[33,71849,71850],{"class":119},"th {\n",[33,71852,71853,71855,71857],{"class":35,"line":1425},[33,71854,71733],{"class":52553},[33,71856,52690],{"class":47},[33,71858,71859],{"class":119},"10px;\n",[33,71861,71862,71865,71867],{"class":35,"line":1438},[33,71863,71864],{"class":52553},"  background",[33,71866,52690],{"class":47},[33,71868,71869],{"class":60},"#cfe5ff;\n",[33,71871,71872],{"class":35,"line":1451},[33,71873,71874],{"class":47},"  \n",[33,71876,71877,71880,71882],{"class":35,"line":1457},[33,71878,71879],{"class":52553},"  font-size",[33,71881,52690],{"class":47},[33,71883,71884],{"class":119},"20px;\n",[33,71886,71887,71890,71892],{"class":35,"line":1466},[33,71888,71889],{"class":52553},"  font-weight",[33,71891,52690],{"class":47},[33,71893,71894],{"class":119},"400;\n",[33,71896,71897],{"class":35,"line":1471},[33,71898,231],{"class":47},[33,71900,71901],{"class":35,"line":1477},[33,71902,71903],{"class":119},"td,th {\n",[33,71905,71906,71909],{"class":35,"line":1504},[33,71907,71908],{"class":119},"  border:1px solid",[33,71910,71911],{"class":60}," #b8daff;\n",[33,71913,71914],{"class":35,"line":1509},[33,71915,231],{"class":47},[33,71917,71918],{"class":35,"line":1525},[33,71919,71920],{"class":119},"td {\n",[33,71922,71923],{"class":35,"line":1535},[33,71924,71925],{"class":119},"  padding:10px;\n",[33,71927,71928],{"class":35,"line":1540},[33,71929,71930],{"class":119},"  color:#666;\n",[33,71932,71933,71935,71937],{"class":35,"line":4027},[33,71934,71779],{"class":52553},[33,71936,52690],{"class":47},[33,71938,71784],{"class":119},[33,71940,71941,71943,71945],{"class":35,"line":4032},[33,71942,71879],{"class":52553},[33,71944,52690],{"class":47},[33,71946,71947],{"class":119},"16px;\n",[33,71949,71950],{"class":35,"line":9199},[33,71951,231],{"class":47},[33,71953,71954],{"class":35,"line":9223},[33,71955,71956],{"class":119},"tbody tr {\n",[33,71958,71959,71961,71963],{"class":35,"line":9228},[33,71960,71864],{"class":52553},[33,71962,52690],{"class":47},[33,71964,71965],{"class":60},"#fff;\n",[33,71967,71968],{"class":35,"line":9234},[33,71969,231],{"class":47},[33,71971,71972],{"class":35,"line":9261},[33,71973,71974],{"class":119},"tbody tr:hover {\n",[33,71976,71977,71979,71981],{"class":35,"line":9266},[33,71978,71864],{"class":52553},[33,71980,52690],{"class":47},[33,71982,71983],{"class":60},"#e1ecf8;\n",[33,71985,71986],{"class":35,"line":9272},[33,71987,231],{"class":47},[33,71989,71990],{"class":35,"line":9284},[33,71991,71992],{"class":119},".info {\n",[33,71994,71995,71997,71999],{"class":35,"line":9296},[33,71996,71821],{"class":52553},[33,71998,52690],{"class":47},[33,72000,72001],{"class":119},"900px;\n",[33,72003,72004,72006,72008],{"class":35,"line":9308},[33,72005,71723],{"class":52553},[33,72007,52690],{"class":47},[33,72009,72010],{"class":119},"50px auto;\n",[33,72012,72013,72015,72017],{"class":35,"line":10967},[33,72014,71779],{"class":52553},[33,72016,52690],{"class":47},[33,72018,71784],{"class":119},[33,72020,72021],{"class":35,"line":10992},[33,72022,231],{"class":47},[33,72024,72025],{"class":35,"line":11015},[33,72026,72027],{"class":119},".info  input, .info select {\n",[33,72029,72030,72032,72034],{"class":35,"line":11039},[33,72031,71821],{"class":52553},[33,72033,52690],{"class":47},[33,72035,72036],{"class":119},"80px;\n",[33,72038,72039,72042,72044],{"class":35,"line":11044},[33,72040,72041],{"class":52553},"  height",[33,72043,52690],{"class":47},[33,72045,72046],{"class":119},"27px;\n",[33,72048,72049,72052,72054],{"class":35,"line":11049},[33,72050,72051],{"class":52553},"  outline",[33,72053,52690],{"class":47},[33,72055,71760],{"class":119},[33,72057,72058,72061,72063],{"class":35,"line":11054},[33,72059,72060],{"class":52553},"  border-radius",[33,72062,52690],{"class":47},[33,72064,72065],{"class":119},"5px;\n",[33,72067,72068,72070],{"class":35,"line":11063},[33,72069,71908],{"class":119},[33,72071,71911],{"class":60},[33,72073,72074,72077,72079],{"class":35,"line":11068},[33,72075,72076],{"class":52553},"  padding-left",[33,72078,52690],{"class":47},[33,72080,72065],{"class":119},[33,72082,72083,72086,72088],{"class":35,"line":11074},[33,72084,72085],{"class":52553},"  box-sizing",[33,72087,52690],{"class":47},[33,72089,72090],{"class":119},"border-box;\n",[33,72092,72093,72096,72098],{"class":35,"line":11095},[33,72094,72095],{"class":52553},"  margin-right",[33,72097,52690],{"class":47},[33,72099,72100],{"class":119},"15px;\n",[33,72102,72103],{"class":35,"line":11101},[33,72104,231],{"class":47},[33,72106,72107],{"class":35,"line":11115},[33,72108,72109],{"class":119},".info button {\n",[33,72111,72112,72114,72116],{"class":35,"line":11121},[33,72113,71821],{"class":52553},[33,72115,52690],{"class":47},[33,72117,72118],{"class":119},"60px;\n",[33,72120,72121,72123,72125],{"class":35,"line":11148},[33,72122,72041],{"class":52553},[33,72124,52690],{"class":47},[33,72126,72046],{"class":119},[33,72128,72129,72132,72134],{"class":35,"line":11157},[33,72130,72131],{"class":52553},"  background-color",[33,72133,52690],{"class":47},[33,72135,72136],{"class":60},"#004085;\n",[33,72138,72139,72141,72143],{"class":35,"line":11163},[33,72140,72051],{"class":52553},[33,72142,52690],{"class":47},[33,72144,71760],{"class":119},[33,72146,72147,72150,72152],{"class":35,"line":11171},[33,72148,72149],{"class":52553},"  border",[33,72151,52690],{"class":47},[33,72153,71728],{"class":119},[33,72155,72156,72159,72161],{"class":35,"line":11176},[33,72157,72158],{"class":52553},"  color",[33,72160,52690],{"class":47},[33,72162,71965],{"class":60},[33,72164,72165,72168,72170],{"class":35,"line":17855},[33,72166,72167],{"class":52553},"  cursor",[33,72169,52690],{"class":47},[33,72171,72172],{"class":119},"pointer;\n",[33,72174,72175,72177,72179],{"class":35,"line":17861},[33,72176,72060],{"class":52553},[33,72178,52690],{"class":47},[33,72180,72065],{"class":119},[33,72182,72183],{"class":35,"line":17884},[33,72184,231],{"class":47},[33,72186,72187],{"class":35,"line":17890},[33,72188,72189],{"class":119},".info .age {\n",[33,72191,72192,72194,72196],{"class":35,"line":17913},[33,72193,71821],{"class":52553},[33,72195,52690],{"class":47},[33,72197,72198],{"class":119},"50px;\n",[33,72200,72201],{"class":35,"line":17927},[33,72202,231],{"class":47},[14,72204,72205],{},"思路：",[14,72207,72208],{},[2918,72209],{"alt":28,"src":72210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,72212,72213],{},[2918,72214],{"alt":28,"src":72215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,72217,72218],{},[2918,72219],{"alt":28,"src":72220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[1599,72222,72224],{"id":72223},"_3315-重绘回流","3.3.15 重绘回流",[14,72226,72227],{},[2918,72228],{"alt":28,"src":72229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,72231,72232],{},[2918,72233],{"alt":28,"src":72234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,72236,72237],{},[2918,72238],{"alt":28,"src":72239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[18,72241,72243],{"id":72242},"_34-bom","3.4 BOM",[14,72245,72246],{},[2918,72247],{"alt":28,"src":72248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,72250,72251],{},"平时写的document省略了window而已，实际上是window.document",[14,72253,72254],{},"函数也是这样，调用的时候实际为window.fn()",[14,72256,72257],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,72259,72260],{},"window大部分情况下可以省略",[1599,72262,72264],{"id":72263},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,72266,72267],{},"只执行一次",[14,72269,72270],{},[2918,72271],{"alt":28,"src":72272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,72274,72275],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,72277,72278],{},[2918,72279],{"alt":28,"src":72280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[1599,72282,72284],{"id":72283},"_342-js执行机制","3.4.2 JS执行机制",[14,72286,72287],{},[2918,72288],{"alt":28,"src":72289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,72291,72292],{},"两个的结果都是1111 3333 2222",[14,72294,72295],{},[2918,72296],{"alt":28,"src":72297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,72299,72300],{},[2918,72301],{"alt":28,"src":72302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,72304,72305],{},[2918,72306],{"alt":28,"src":72307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,72309,72310],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,72312,72313],{},"工作流程：",[14,72315,72316],{},[2918,72317],{"alt":28,"src":72318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,72320,72321],{},[2918,72322],{"alt":28,"src":72323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,72325,72326],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,72328,72329],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[1599,72331,72333],{"id":72332},"_343-location对象","3.4.3 location对象",[14,72335,72336],{},"location对象属于window这个全局对象下的，可以 省略window",[14,72338,72339],{},[2918,72340],{"alt":28,"src":72341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,72343,72344],{},"href可以跳转页面",[574,72346,72347],{},[564,72348,72349],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,72351,72352],{},"search得到提交信息之后网站后边的地址",[14,72354,72355],{},[2918,72356],{"alt":28,"src":72357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,72359,72360],{},[2918,72361],{"alt":28,"src":72362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[574,72364,72365],{"start":51},[564,72366,72367],{},"hash:这个获取单页面应用#后边的地址",[14,72369,72370],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,72372,72373],{},[2918,72374],{"alt":28,"src":72375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[23,72377,72379],{"className":54320,"code":72378,"language":54322,"meta":28,"style":28},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[30,72380,72381,72401,72421],{"__ignoreMap":28},[33,72382,72383,72385,72387,72389,72391,72394,72397,72399],{"class":35,"line":36},[33,72384,53397],{"class":47},[33,72386,126],{"class":52553},[33,72388,62310],{"class":43},[33,72390,73],{"class":47},[33,72392,72393],{"class":119},"\"#\u002Fmy\"",[33,72395,72396],{"class":47},">我的\u003C\u002F",[33,72398,126],{"class":52553},[33,72400,52560],{"class":47},[33,72402,72403,72405,72407,72409,72411,72414,72417,72419],{"class":35,"line":51},[33,72404,53397],{"class":47},[33,72406,126],{"class":52553},[33,72408,62310],{"class":43},[33,72410,73],{"class":47},[33,72412,72413],{"class":119},"\"#\u002Ffriend\"",[33,72415,72416],{"class":47},">关注\u003C\u002F",[33,72418,126],{"class":52553},[33,72420,52560],{"class":47},[33,72422,72423,72425,72427,72429,72431,72434,72437,72439],{"class":35,"line":57},[33,72424,53397],{"class":47},[33,72426,126],{"class":52553},[33,72428,62310],{"class":43},[33,72430,73],{"class":47},[33,72432,72433],{"class":119},"\"#\u002Fdownload\"",[33,72435,72436],{"class":47},">下载\u003C\u002F",[33,72438,126],{"class":52553},[33,72440,52560],{"class":47},[14,72442,72443],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[574,72445,72446],{"start":57},[564,72447,72448,72449,72451,72452,72454],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54969,72450],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54969,72453],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[1599,72456,72458],{"id":72457},"_345-navigator对象","3.4.5 navigator对象",[14,72460,72461],{},[2918,72462],{"alt":28,"src":72463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[23,72465,72469],{"className":72466,"code":72467,"language":72468,"meta":28,"style":28},"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",[30,72470,72471,72476,72487,72499,72504,72555,72596,72601,72614,72626,72631],{"__ignoreMap":28},[33,72472,72473],{"class":35,"line":36},[33,72474,72475],{"class":60},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[33,72477,72478,72480,72482,72484],{"class":35,"line":51},[33,72479,1842],{"class":39},[33,72481,345],{"class":47},[33,72483,55702],{"class":39},[33,72485,72486],{"class":47}," () { \n",[33,72488,72489,72491,72494,72496],{"class":35,"line":57},[33,72490,588],{"class":39},[33,72492,72493],{"class":76}," userAgent",[33,72495,14815],{"class":39},[33,72497,72498],{"class":47}," navigator.userAgent \n",[33,72500,72501],{"class":35,"line":64},[33,72502,72503],{"class":60},"\u002F\u002F 验证是否为Android或iPhone \n",[33,72505,72506,72508,72511,72513,72516,72519,72521,72523,72526,72528,72531,72535,72537,72539,72541,72544,72546,72548,72550,72552],{"class":35,"line":83},[33,72507,588],{"class":39},[33,72509,72510],{"class":76}," android",[33,72512,14815],{"class":39},[33,72514,72515],{"class":47}," userAgent.",[33,72517,72518],{"class":43},"match",[33,72520,345],{"class":47},[33,72522,2184],{"class":119},[33,72524,72525],{"class":49230},"(Android);",[33,72527,2581],{"class":39},[33,72529,72530],{"class":76},"[\\s",[33,72532,72534],{"class":72533},"snhLl","\\\u002F",[33,72536,693],{"class":76},[33,72538,1271],{"class":39},[33,72540,345],{"class":49230},[33,72542,72543],{"class":76},"[\\d.]",[33,72545,1271],{"class":39},[33,72547,352],{"class":49230},[33,72549,2581],{"class":39},[33,72551,2184],{"class":119},[33,72553,72554],{"class":47},") \n",[33,72556,72557,72559,72562,72564,72566,72568,72570,72572,72575,72578,72581,72583,72585,72588,72590,72592,72594],{"class":35,"line":89},[33,72558,588],{"class":39},[33,72560,72561],{"class":76}," iphone",[33,72563,14815],{"class":39},[33,72565,72515],{"class":47},[33,72567,72518],{"class":43},[33,72569,345],{"class":47},[33,72571,2184],{"class":119},[33,72573,72574],{"class":49230},"(iPhone",[33,72576,72577],{"class":76},"\\s",[33,72579,72580],{"class":49230},"OS)",[33,72582,72577],{"class":76},[33,72584,345],{"class":49230},[33,72586,72587],{"class":76},"[\\d_]",[33,72589,1271],{"class":39},[33,72591,352],{"class":49230},[33,72593,2184],{"class":119},[33,72595,72554],{"class":47},[33,72597,72598],{"class":35,"line":98},[33,72599,72600],{"class":60},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[33,72602,72603,72605,72608,72611],{"class":35,"line":110},[33,72604,2987],{"class":39},[33,72606,72607],{"class":47}," (android ",[33,72609,72610],{"class":39},"||",[33,72612,72613],{"class":47}," iphone) { \n",[33,72615,72616,72619,72621,72624],{"class":35,"line":134},[33,72617,72618],{"class":47},"location.href ",[33,72620,73],{"class":39},[33,72622,72623],{"class":119}," 'http:\u002F\u002Fm.itcast.cn'",[33,72625,4085],{"class":47},[33,72627,72628],{"class":35,"line":156},[33,72629,72630],{"class":47},"} \n",[33,72632,72633],{"class":35,"line":163},[33,72634,72635],{"class":47},"})()\n",[1599,72637,72639],{"id":72638},"_346-histroy对象","3.4.6 histroy对象",[14,72641,72642],{},[2918,72643],{"alt":28,"src":72644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,72646,72647],{},"浏览器地址的前进与后退!!!",[14,72649,72650],{},"history.back() 等效于 history.go(-1)",[14,72652,72653],{},"history.forward() 等效于 history.go(1)",[18,72655,72657],{"id":72656},"_35-本地存储","3.5 本地存储",[574,72659,72660,72663,72666],{},[564,72661,72662],{},"数据存储在用户浏览器中",[564,72664,72665],{},"设置、读取方便、甚至页面刷新不丢失数据",[564,72667,72668],{},"容量较大，sessionStorage和localStorage约 5M 左右",[1599,72670,72672],{"id":72671},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,72674,72675],{},"只能存储字符串",[14,72677,72678],{},[2918,72679],{"alt":28,"src":72680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,72682,72683],{},[2918,72684],{"alt":28,"src":72685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,72687,72688],{},"键值对要加引号,不然就会当变量来看了",[14,72690,72691],{},"localStorage.setItem('uname', 'pink')",[14,72693,72694],{},"刷新之后信息不再丢失",[14,72696,72697],{},"操作key,value会跟着变",[14,72699,72700],{},"删除只删除键就可以,即名字",[14,72702,72691],{},[14,72704,72705],{},"改:",[14,72707,72708],{},"localStorage.setItem('uname','red')",[14,72710,72711],{},"有这个键就是改,没有这个键就是改",[14,72713,72714],{},[2918,72715],{"alt":28,"src":72716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,72718,72719],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,72721,72722],{},[2918,72723],{"alt":28,"src":72724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,72726,72727],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[1599,72729,72731],{"id":72730},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,72733,72734],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,72736,72737],{},"特性:",[574,72739,72740,72743,72746,72749],{},[564,72741,72742],{},"生命周期为关闭浏览器窗口",[564,72744,72745],{},"在同一个窗口(页面)下数据可以共享",[564,72747,72748],{},"以键值对的形式存储使用",[564,72750,72751],{},"用法跟localStorage 基本相同",[1599,72753,72755],{"id":72754},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,72757,72758],{},"本地只能存储字符串,无法直接存储复杂数据类型",[23,72760,72762],{"className":54320,"code":72761,"language":54322,"meta":28,"style":28},"\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",[30,72763,72764,72772,72777,72782,72787,72792,72796,72801,72806],{"__ignoreMap":28},[33,72765,72766,72768,72770],{"class":35,"line":36},[33,72767,875],{"class":47},[33,72769,53066],{"class":52553},[33,72771,52560],{"class":47},[33,72773,72774],{"class":35,"line":51},[33,72775,72776],{"class":47},"    const obj = {\n",[33,72778,72779],{"class":35,"line":57},[33,72780,72781],{"class":47},"      uname: 'pink老师',\n",[33,72783,72784],{"class":35,"line":64},[33,72785,72786],{"class":47},"      age: 18,\n",[33,72788,72789],{"class":35,"line":83},[33,72790,72791],{"class":47},"      gender: '女'\n",[33,72793,72794],{"class":35,"line":89},[33,72795,916],{"class":47},[33,72797,72798],{"class":35,"line":98},[33,72799,72800],{"class":47},"    \u002F\u002F 存储复杂数据类型\n",[33,72802,72803],{"class":35,"line":110},[33,72804,72805],{"class":47},"    localStorage.setItem('obj', obj)\n",[33,72807,72808,72810,72812],{"class":35,"line":134},[33,72809,53670],{"class":47},[33,72811,53066],{"class":52553},[33,72813,52560],{"class":47},[14,72815,72816],{},[2918,72817],{"alt":28,"src":72818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,72820,72821],{},"如果获取一下数据:",[14,72823,72824],{},"log(localStorage.getItem('obj'))",[14,72826,72827],{},[2918,72828],{"alt":28,"src":72829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,72831,72832],{},"发现直接存对象是使用不了的!!!",[23249,72834,72836],{"id":72835},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,72838,72839],{},[2918,72840],{"alt":28,"src":72841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[23,72843,72845],{"className":51886,"code":72844,"language":51888,"meta":28,"style":28},"\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",[30,72846,72847,72855,72865,72875,72884,72892,72896,72900,72926,72945,72953,72957,72962,72967],{"__ignoreMap":28},[33,72848,72849,72851,72853],{"class":35,"line":36},[33,72850,875],{"class":47},[33,72852,53066],{"class":52553},[33,72854,52560],{"class":47},[33,72856,72857,72859,72861,72863],{"class":35,"line":51},[33,72858,12472],{"class":39},[33,72860,71224],{"class":76},[33,72862,14815],{"class":39},[33,72864,16823],{"class":47},[33,72866,72867,72870,72873],{"class":35,"line":57},[33,72868,72869],{"class":47},"      uname: ",[33,72871,72872],{"class":119},"'pink老师'",[33,72874,32719],{"class":47},[33,72876,72877,72880,72882],{"class":35,"line":64},[33,72878,72879],{"class":47},"      age: ",[33,72881,2250],{"class":76},[33,72883,32719],{"class":47},[33,72885,72886,72889],{"class":35,"line":83},[33,72887,72888],{"class":47},"      gender: ",[33,72890,72891],{"class":119},"'女'\n",[33,72893,72894],{"class":35,"line":89},[33,72895,916],{"class":47},[33,72897,72898],{"class":35,"line":98},[33,72899,72800],{"class":60},[33,72901,72902,72905,72908,72910,72913,72915,72918,72920,72923],{"class":35,"line":110},[33,72903,72904],{"class":47},"  localStorage.",[33,72906,72907],{"class":43},"setItem",[33,72909,345],{"class":47},[33,72911,72912],{"class":119},"'obj'",[33,72914,13686],{"class":47},[33,72916,72917],{"class":76},"JSON",[33,72919,2158],{"class":47},[33,72921,72922],{"class":43},"stringify",[33,72924,72925],{"class":47},"(obj))\n",[33,72927,72928,72931,72933,72936,72939,72941,72943],{"class":35,"line":134},[33,72929,72930],{"class":47},"  console.",[33,72932,59500],{"class":43},[33,72934,72935],{"class":47},"(localStorage.",[33,72937,72938],{"class":43},"getItem",[33,72940,345],{"class":47},[33,72942,72912],{"class":119},[33,72944,31750],{"class":47},[33,72946,72947,72949,72951],{"class":35,"line":156},[33,72948,53670],{"class":47},[33,72950,53066],{"class":52553},[33,72952,52560],{"class":47},[33,72954,72955],{"class":35,"line":163},[33,72956,71874],{"class":47},[33,72958,72959],{"class":35,"line":169},[33,72960,72961],{"class":47},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[33,72963,72964],{"class":35,"line":175},[33,72965,72966],{"class":47},"  类型是字符串的\n",[33,72968,72969],{"class":35,"line":181},[33,72970,72971],{"class":47},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23249,72973,72975],{"id":72974},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72977,72978],{},[2918,72979],{"alt":28,"src":72980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72982,72983],{},[2918,72984],{"alt":28,"src":72985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[23,72987,72989],{"className":54320,"code":72988,"language":54322,"meta":28,"style":28},"  \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",[30,72990,72991,72999,73003,73007,73011,73015,73019,73024,73029,73034,73039,73044,73049,73054,73059],{"__ignoreMap":28},[33,72992,72993,72995,72997],{"class":35,"line":36},[33,72994,53397],{"class":47},[33,72996,53066],{"class":52553},[33,72998,52560],{"class":47},[33,73000,73001],{"class":35,"line":51},[33,73002,72776],{"class":47},[33,73004,73005],{"class":35,"line":57},[33,73006,72781],{"class":47},[33,73008,73009],{"class":35,"line":64},[33,73010,72786],{"class":47},[33,73012,73013],{"class":35,"line":83},[33,73014,72791],{"class":47},[33,73016,73017],{"class":35,"line":89},[33,73018,916],{"class":47},[33,73020,73021],{"class":35,"line":98},[33,73022,73023],{"class":47},"    \u002F\u002F 1.存储复杂数据类型\n",[33,73025,73026],{"class":35,"line":110},[33,73027,73028],{"class":47},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[33,73030,73031],{"class":35,"line":134},[33,73032,73033],{"class":47},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[33,73035,73036],{"class":35,"line":156},[33,73037,73038],{"class":47},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[33,73040,73041],{"class":35,"line":163},[33,73042,73043],{"class":47},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[33,73045,73046],{"class":35,"line":169},[33,73047,73048],{"class":47},"    \u002F\u002F 取\n",[33,73050,73051],{"class":35,"line":175},[33,73052,73053],{"class":47},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[33,73055,73056],{"class":35,"line":181},[33,73057,73058],{"class":47},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[33,73060,73061,73063,73065],{"class":35,"line":196},[33,73062,53670],{"class":47},[33,73064,53066],{"class":52553},[33,73066,52560],{"class":47},[14,73068,73069],{},[2918,73070],{"alt":28,"src":73071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[1599,73073,73075],{"id":73074},"_356-数组map方法","3.5.6 数组map方法",[14,73077,73078],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,73080,73081],{},[2918,73082],{"alt":28,"src":73083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,73085,73086],{},[2918,73087],{"alt":28,"src":73088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,73090,73091,73094],{},[480,73092,73093],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,73096,73097],{},"map有返回值，但是forEach没有返回值",[14,73099,73100],{},"map是个方法。用的时候要加 ()",[14,73102,73103],{},"map返回的是一个数组",[1599,73105,73107],{"id":73106},"_357-数组中join方法","3.5.7 数组中join方法",[14,73109,73110],{},[2918,73111],{"alt":28,"src":73112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,73114,73115],{},"类似于python中拼接字符串一样！",[574,73117,73118,73121,73124],{},[564,73119,73120],{},"小括号为空则逗号分开",[564,73122,73123],{},"小括号为空字符串 ''，则元素之间没有分隔符",[564,73125,73126],{},"小括号用啥符号就用进行分割",[1599,73128,73130],{"id":73129},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[574,73132,73133,73136,73139,73142,73145],{},[564,73134,73135],{},"记住本地时间获取快速方式：new Date().toDateString()",[564,73137,73138],{},"尽量减少DOM操作，用好map+join的渲染方式",[564,73140,73141],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[564,73143,73144],{},"return可以实现函数的结束",[564,73146,73147],{},"禁止跳转是 preventDefault() 不要忘记",[23,73149,73151],{"className":51886,"code":73150,"language":51888,"meta":28,"style":28},"\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",[30,73152,73153,73163,73177,73181,73189,73203,73223,73235,73243,73249,73259,73269,73273,73277,73283,73293,73305,73309,73313,73320,73332,73346,73356,73360,73364,73371,73378,73385,73397,73409,73419,73431,73435,73439,73446,73453,73465,73477,73487,73499,73529,73533,73537,73544,73556,73568,73592,73602,73612,73616,73620,73628,73639,73651,73663,73675,73692,73704,73716,73720,73724,73731,73743,73755,73767,73778,73796,73809,73821,73845,73856,73860,73864,73872,73882,73886,73890,73896,73908,73919,73929,73933,73937,73943,73965,73969,73973,73979,73985,73997,74007,74019,74049,74062,74079,74083,74087,74098,74120,74130,74134,74138,74151,74161,74173,74185,74197,74209,74219,74229,74239,74250,74263,74267,74275,74283,74287,74295,74308,74328,74361,74394,74427,74453,74471,74489,74497,74523,74541,74559,74577,74595,74613,74621,74629,74647,74655,74684,74692,74700,74708,74721,74733,74745,74757,74769,74781,74794,74806,74814,74822,74830,74835,74840,74844,74848,74852,74856,74860,74864,74869,74874,74879,74884,74892,74900,74908,74913,74918,74923,74928,74933,74938,74943,74948,74953,74958,74963,74968,74973,74978,74982,74987,74992,75002,75011,75015,75020,75029,75045,75087,75127,75166,75231,75239,75243,75248,75266,75274,75279,75284,75314,75320,75325,75338,75350,75362,75374,75386,75398,75410,75414,75424,75428,75433,75438,75442,75451,75455,75460,75465,75484,75489,75509,75513,75518,75522,75527,75545,75563,75581,75600,75619,75638,75643,75649,75670,75676,75685,75691,75697,75703,75730,75743,75748,75758,75764,75770,75776,75782,75787,75793,75799,75805,75811,75844,75849,75854,75859,75864,75870,75876,75882,75893,75898,75904,75911,75925,75931,75955,75960,75965,75971,75977,75998,76004,76017,76023,76029,76035,76041,76046,76052,76058,76064,76082,76096,76102,76110,76116,76138,76143,76148,76153,76158,76163,76172,76181,76186],{"__ignoreMap":28},[33,73154,73155,73157,73159,73161],{"class":35,"line":36},[33,73156,52550],{"class":47},[33,73158,52554],{"class":52553},[33,73160,52557],{"class":43},[33,73162,52560],{"class":47},[33,73164,73165,73167,73169,73171,73173,73175],{"class":35,"line":51},[33,73166,875],{"class":47},[33,73168,51888],{"class":52553},[33,73170,52569],{"class":43},[33,73172,73],{"class":47},[33,73174,52574],{"class":119},[33,73176,52560],{"class":47},[33,73178,73179],{"class":35,"line":57},[33,73180,160],{"emptyLinePlaceholder":159},[33,73182,73183,73185,73187],{"class":35,"line":64},[33,73184,875],{"class":47},[33,73186,52587],{"class":52553},[33,73188,52560],{"class":47},[33,73190,73191,73193,73195,73197,73199,73201],{"class":35,"line":83},[33,73192,53397],{"class":47},[33,73194,52597],{"class":52553},[33,73196,52600],{"class":43},[33,73198,73],{"class":47},[33,73200,52605],{"class":119},[33,73202,52560],{"class":47},[33,73204,73205,73207,73209,73211,73213,73215,73217,73219,73221],{"class":35,"line":89},[33,73206,53397],{"class":47},[33,73208,52597],{"class":52553},[33,73210,16171],{"class":43},[33,73212,73],{"class":47},[33,73214,52644],{"class":119},[33,73216,52624],{"class":43},[33,73218,73],{"class":47},[33,73220,52651],{"class":119},[33,73222,52560],{"class":47},[33,73224,73225,73227,73229,73231,73233],{"class":35,"line":98},[33,73226,53397],{"class":47},[33,73228,52660],{"class":52553},[33,73230,52663],{"class":47},[33,73232,52660],{"class":52553},[33,73234,52560],{"class":47},[33,73236,73237,73239,73241],{"class":35,"line":110},[33,73238,53397],{"class":47},[33,73240,1544],{"class":52553},[33,73242,52560],{"class":47},[33,73244,73245,73247],{"class":35,"line":134},[33,73246,184],{"class":52553},[33,73248,16823],{"class":47},[33,73250,73251,73253,73255,73257],{"class":35,"line":156},[33,73252,55948],{"class":76},[33,73254,52690],{"class":47},[33,73256,766],{"class":76},[33,73258,80],{"class":47},[33,73260,73261,73263,73265,73267],{"class":35,"line":163},[33,73262,55959],{"class":76},[33,73264,52690],{"class":47},[33,73266,766],{"class":76},[33,73268,80],{"class":47},[33,73270,73271],{"class":35,"line":169},[33,73272,916],{"class":47},[33,73274,73275],{"class":35,"line":175},[33,73276,160],{"emptyLinePlaceholder":159},[33,73278,73279,73281],{"class":35,"line":181},[33,73280,58532],{"class":52553},[33,73282,16823],{"class":47},[33,73284,73285,73287,73289,73291],{"class":35,"line":196},[33,73286,58539],{"class":76},[33,73288,52690],{"class":47},[33,73290,52845],{"class":76},[33,73292,80],{"class":47},[33,73294,73295,73297,73299,73301,73303],{"class":35,"line":213},[33,73296,63330],{"class":76},[33,73298,52690],{"class":47},[33,73300,1045],{"class":76},[33,73302,52745],{"class":39},[33,73304,80],{"class":47},[33,73306,73307],{"class":35,"line":228},[33,73308,916],{"class":47},[33,73310,73311],{"class":35,"line":1345},[33,73312,160],{"emptyLinePlaceholder":159},[33,73314,73315,73318],{"class":35,"line":1350},[33,73316,73317],{"class":43},"    .info",[33,73319,16823],{"class":47},[33,73321,73322,73324,73326,73328,73330],{"class":35,"line":1359},[33,73323,56024],{"class":76},[33,73325,52690],{"class":47},[33,73327,52742],{"class":76},[33,73329,52745],{"class":39},[33,73331,80],{"class":47},[33,73333,73334,73336,73338,73340,73342,73344],{"class":35,"line":1364},[33,73335,55959],{"class":76},[33,73337,52690],{"class":47},[33,73339,77],{"class":76},[33,73341,52745],{"class":39},[33,73343,52809],{"class":76},[33,73345,80],{"class":47},[33,73347,73348,73350,73352,73354],{"class":35,"line":1370},[33,73349,58539],{"class":76},[33,73351,52690],{"class":47},[33,73353,52845],{"class":76},[33,73355,80],{"class":47},[33,73357,73358],{"class":35,"line":1425},[33,73359,916],{"class":47},[33,73361,73362],{"class":35,"line":1438},[33,73363,160],{"emptyLinePlaceholder":159},[33,73365,73366,73369],{"class":35,"line":1451},[33,73367,73368],{"class":43},"    .uname",[33,73370,32719],{"class":47},[33,73372,73373,73376],{"class":35,"line":1457},[33,73374,73375],{"class":43},"    .age",[33,73377,32719],{"class":47},[33,73379,73380,73383],{"class":35,"line":1466},[33,73381,73382],{"class":43},"    .salary",[33,73384,16823],{"class":47},[33,73386,73387,73389,73391,73393,73395],{"class":35,"line":1471},[33,73388,56024],{"class":76},[33,73390,52690],{"class":47},[33,73392,457],{"class":76},[33,73394,52745],{"class":39},[33,73396,80],{"class":47},[33,73398,73399,73401,73403,73405,73407],{"class":35,"line":1477},[33,73400,56038],{"class":76},[33,73402,52690],{"class":47},[33,73404,1045],{"class":76},[33,73406,52745],{"class":39},[33,73408,80],{"class":47},[33,73410,73411,73413,73415,73417],{"class":35,"line":1504},[33,73412,63033],{"class":76},[33,73414,52690],{"class":47},[33,73416,55990],{"class":76},[33,73418,80],{"class":47},[33,73420,73421,73423,73425,73427,73429],{"class":35,"line":1509},[33,73422,63003],{"class":76},[33,73424,52690],{"class":47},[33,73426,2175],{"class":76},[33,73428,52745],{"class":39},[33,73430,80],{"class":47},[33,73432,73433],{"class":35,"line":1525},[33,73434,916],{"class":47},[33,73436,73437],{"class":35,"line":1535},[33,73438,160],{"emptyLinePlaceholder":159},[33,73440,73441,73444],{"class":35,"line":1540},[33,73442,73443],{"class":43},"    .gender",[33,73445,32719],{"class":47},[33,73447,73448,73451],{"class":35,"line":4027},[33,73449,73450],{"class":43},"    .city",[33,73452,16823],{"class":47},[33,73454,73455,73457,73459,73461,73463],{"class":35,"line":4032},[33,73456,56024],{"class":76},[33,73458,52690],{"class":47},[33,73460,457],{"class":76},[33,73462,52745],{"class":39},[33,73464,80],{"class":47},[33,73466,73467,73469,73471,73473,73475],{"class":35,"line":9199},[33,73468,56038],{"class":76},[33,73470,52690],{"class":47},[33,73472,2424],{"class":76},[33,73474,52745],{"class":39},[33,73476,80],{"class":47},[33,73478,73479,73481,73483,73485],{"class":35,"line":9223},[33,73480,63033],{"class":76},[33,73482,52690],{"class":47},[33,73484,55990],{"class":76},[33,73486,80],{"class":47},[33,73488,73489,73491,73493,73495,73497],{"class":35,"line":9228},[33,73490,63003],{"class":76},[33,73492,52690],{"class":47},[33,73494,2175],{"class":76},[33,73496,52745],{"class":39},[33,73498,80],{"class":47},[33,73500,73501,73503,73505,73507,73509,73511,73514,73516,73518,73520,73523,73525,73527],{"class":35,"line":9234},[33,73502,63230],{"class":76},[33,73504,52690],{"class":47},[33,73506,701],{"class":76},[33,73508,52745],{"class":39},[33,73510,52774],{"class":76},[33,73512,73513],{"class":76}," rgb",[33,73515,345],{"class":47},[33,73517,3163],{"class":76},[33,73519,13686],{"class":47},[33,73521,73522],{"class":76},"197",[33,73524,13686],{"class":47},[33,73526,73522],{"class":76},[33,73528,4130],{"class":47},[33,73530,73531],{"class":35,"line":9261},[33,73532,916],{"class":47},[33,73534,73535],{"class":35,"line":9266},[33,73536,160],{"emptyLinePlaceholder":159},[33,73538,73539,73542],{"class":35,"line":9272},[33,73540,73541],{"class":52553},"    button",[33,73543,16823],{"class":47},[33,73545,73546,73548,73550,73552,73554],{"class":35,"line":9284},[33,73547,56038],{"class":76},[33,73549,52690],{"class":47},[33,73551,2424],{"class":76},[33,73553,52745],{"class":39},[33,73555,80],{"class":47},[33,73557,73558,73560,73562,73564,73566],{"class":35,"line":9296},[33,73559,56024],{"class":76},[33,73561,52690],{"class":47},[33,73563,2085],{"class":76},[33,73565,52745],{"class":39},[33,73567,80],{"class":47},[33,73569,73570,73572,73574,73577,73579,73581,73583,73586,73588,73590],{"class":35,"line":9308},[33,73571,56137],{"class":76},[33,73573,52690],{"class":47},[33,73575,73576],{"class":76},"rgb",[33,73578,345],{"class":47},[33,73580,2564],{"class":76},[33,73582,13686],{"class":47},[33,73584,73585],{"class":76},"187",[33,73587,13686],{"class":47},[33,73589,1912],{"class":76},[33,73591,4130],{"class":47},[33,73593,73594,73596,73598,73600],{"class":35,"line":10967},[33,73595,58669],{"class":76},[33,73597,52690],{"class":47},[33,73599,62095],{"class":76},[33,73601,80],{"class":47},[33,73603,73604,73606,73608,73610],{"class":35,"line":10992},[33,73605,63230],{"class":76},[33,73607,52690],{"class":47},[33,73609,766],{"class":76},[33,73611,80],{"class":47},[33,73613,73614],{"class":35,"line":11015},[33,73615,916],{"class":47},[33,73617,73618],{"class":35,"line":11039},[33,73619,160],{"emptyLinePlaceholder":159},[33,73621,73622,73624,73626],{"class":35,"line":11044},[33,73623,73541],{"class":52553},[33,73625,52941],{"class":52553},[33,73627,16823],{"class":47},[33,73629,73630,73632,73634,73637],{"class":35,"line":11049},[33,73631,56262],{"class":76},[33,73633,52690],{"class":47},[33,73635,73636],{"class":76},"inline-block",[33,73638,80],{"class":47},[33,73640,73641,73643,73645,73647,73649],{"class":35,"line":11054},[33,73642,56024],{"class":76},[33,73644,52690],{"class":47},[33,73646,77],{"class":76},[33,73648,52745],{"class":39},[33,73650,80],{"class":47},[33,73652,73653,73655,73657,73659,73661],{"class":35,"line":11063},[33,73654,56038],{"class":76},[33,73656,52690],{"class":47},[33,73658,77],{"class":76},[33,73660,52745],{"class":39},[33,73662,80],{"class":47},[33,73664,73665,73667,73669,73671,73673],{"class":35,"line":11068},[33,73666,58612],{"class":76},[33,73668,52690],{"class":47},[33,73670,2074],{"class":76},[33,73672,52745],{"class":39},[33,73674,80],{"class":47},[33,73676,73677,73679,73681,73683,73685,73687,73690],{"class":35,"line":11074},[33,73678,63230],{"class":76},[33,73680,52690],{"class":47},[33,73682,701],{"class":76},[33,73684,52745],{"class":39},[33,73686,52774],{"class":76},[33,73688,73689],{"class":76}," #fff",[33,73691,80],{"class":47},[33,73693,73694,73696,73698,73700,73702],{"class":35,"line":11095},[33,73695,56387],{"class":76},[33,73697,52690],{"class":47},[33,73699,722],{"class":76},[33,73701,52745],{"class":39},[33,73703,80],{"class":47},[33,73705,73706,73708,73710,73712,73714],{"class":35,"line":11101},[33,73707,63003],{"class":76},[33,73709,52690],{"class":47},[33,73711,701],{"class":76},[33,73713,52745],{"class":39},[33,73715,80],{"class":47},[33,73717,73718],{"class":35,"line":11115},[33,73719,916],{"class":47},[33,73721,73722],{"class":35,"line":11121},[33,73723,160],{"emptyLinePlaceholder":159},[33,73725,73726,73729],{"class":35,"line":11148},[33,73727,73728],{"class":43},"    .total",[33,73730,16823],{"class":47},[33,73732,73733,73735,73737,73739,73741],{"class":35,"line":11157},[33,73734,56024],{"class":76},[33,73736,52690],{"class":47},[33,73738,62882],{"class":76},[33,73740,52745],{"class":39},[33,73742,80],{"class":47},[33,73744,73745,73747,73749,73751,73753],{"class":35,"line":11163},[33,73746,56038],{"class":76},[33,73748,52690],{"class":47},[33,73750,2007],{"class":76},[33,73752,52745],{"class":39},[33,73754,80],{"class":47},[33,73756,73757,73759,73761,73763,73765],{"class":35,"line":11171},[33,73758,58612],{"class":76},[33,73760,52690],{"class":47},[33,73762,2007],{"class":76},[33,73764,52745],{"class":39},[33,73766,80],{"class":47},[33,73768,73769,73771,73773,73776],{"class":35,"line":11176},[33,73770,58539],{"class":76},[33,73772,52690],{"class":47},[33,73774,73775],{"class":76},"right",[33,73777,80],{"class":47},[33,73779,73780,73782,73784,73786,73788,73790,73792,73794],{"class":35,"line":17855},[33,73781,55959],{"class":76},[33,73783,52690],{"class":47},[33,73785,2007],{"class":76},[33,73787,52745],{"class":39},[33,73789,52809],{"class":76},[33,73791,3461],{"class":76},[33,73793,52745],{"class":39},[33,73795,80],{"class":47},[33,73797,73798,73801,73803,73805,73807],{"class":35,"line":17861},[33,73799,73800],{"class":76},"      padding-right",[33,73802,52690],{"class":47},[33,73804,77],{"class":76},[33,73806,52745],{"class":39},[33,73808,80],{"class":47},[33,73810,73811,73813,73815,73817,73819],{"class":35,"line":17884},[33,73812,56175],{"class":76},[33,73814,52690],{"class":47},[33,73816,2124],{"class":76},[33,73818,52745],{"class":39},[33,73820,80],{"class":47},[33,73822,73823,73825,73827,73829,73831,73834,73836,73839,73841,73843],{"class":35,"line":17890},[33,73824,56137],{"class":76},[33,73826,52690],{"class":47},[33,73828,73576],{"class":76},[33,73830,345],{"class":47},[33,73832,73833],{"class":76},"237",[33,73835,13686],{"class":47},[33,73837,73838],{"class":76},"235",[33,73840,13686],{"class":47},[33,73842,73838],{"class":76},[33,73844,4130],{"class":47},[33,73846,73847,73850,73852,73854],{"class":35,"line":17913},[33,73848,73849],{"class":76},"      box-sizing",[33,73851,52690],{"class":47},[33,73853,61758],{"class":76},[33,73855,80],{"class":47},[33,73857,73858],{"class":35,"line":17927},[33,73859,916],{"class":47},[33,73861,73862],{"class":35,"line":17947},[33,73863,160],{"emptyLinePlaceholder":159},[33,73865,73866,73868,73870],{"class":35,"line":17953},[33,73867,73728],{"class":43},[33,73869,52941],{"class":52553},[33,73871,16823],{"class":47},[33,73873,73874,73876,73878,73880],{"class":35,"line":17964},[33,73875,58669],{"class":76},[33,73877,52690],{"class":47},[33,73879,58674],{"class":76},[33,73881,80],{"class":47},[33,73883,73884],{"class":35,"line":17987},[33,73885,916],{"class":47},[33,73887,73888],{"class":35,"line":18009},[33,73889,160],{"emptyLinePlaceholder":159},[33,73891,73892,73894],{"class":35,"line":18014},[33,73893,66276],{"class":52553},[33,73895,16823],{"class":47},[33,73897,73898,73900,73902,73904,73906],{"class":35,"line":18020},[33,73899,56024],{"class":76},[33,73901,52690],{"class":47},[33,73903,62882],{"class":76},[33,73905,52745],{"class":39},[33,73907,80],{"class":47},[33,73909,73910,73912,73914,73917],{"class":35,"line":18034},[33,73911,55959],{"class":76},[33,73913,52690],{"class":47},[33,73915,73916],{"class":76},"auto",[33,73918,80],{"class":47},[33,73920,73921,73923,73925,73927],{"class":35,"line":18047},[33,73922,66283],{"class":76},[33,73924,52690],{"class":47},[33,73926,66288],{"class":76},[33,73928,80],{"class":47},[33,73930,73931],{"class":35,"line":18052},[33,73932,916],{"class":47},[33,73934,73935],{"class":35,"line":18066},[33,73936,160],{"emptyLinePlaceholder":159},[33,73938,73939,73941],{"class":35,"line":18071},[33,73940,66368],{"class":52553},[33,73942,16823],{"class":47},[33,73944,73945,73947,73949,73951,73953,73955,73957,73959,73961,73963],{"class":35,"line":18077},[33,73946,56137],{"class":76},[33,73948,52690],{"class":47},[33,73950,73576],{"class":76},[33,73952,345],{"class":47},[33,73954,73833],{"class":76},[33,73956,13686],{"class":47},[33,73958,73838],{"class":76},[33,73960,13686],{"class":47},[33,73962,73838],{"class":76},[33,73964,4130],{"class":47},[33,73966,73967],{"class":35,"line":18082},[33,73968,916],{"class":47},[33,73970,73971],{"class":35,"line":18096},[33,73972,160],{"emptyLinePlaceholder":159},[33,73974,73975,73977],{"class":35,"line":18101},[33,73976,66368],{"class":52553},[33,73978,32719],{"class":47},[33,73980,73981,73983],{"class":35,"line":18106},[33,73982,66434],{"class":52553},[33,73984,16823],{"class":47},[33,73986,73987,73989,73991,73993,73995],{"class":35,"line":18120},[33,73988,56038],{"class":76},[33,73990,52690],{"class":47},[33,73992,1887],{"class":76},[33,73994,52745],{"class":39},[33,73996,80],{"class":47},[33,73998,73999,74001,74003,74005],{"class":35,"line":18132},[33,74000,58539],{"class":76},[33,74002,52690],{"class":47},[33,74004,24988],{"class":76},[33,74006,80],{"class":47},[33,74008,74009,74011,74013,74015,74017],{"class":35,"line":18137},[33,74010,56175],{"class":76},[33,74012,52690],{"class":47},[33,74014,2149],{"class":76},[33,74016,52745],{"class":39},[33,74018,80],{"class":47},[33,74020,74021,74023,74025,74027,74029,74031,74033,74035,74038,74040,74043,74045,74047],{"class":35,"line":18150},[33,74022,63230],{"class":76},[33,74024,52690],{"class":47},[33,74026,701],{"class":76},[33,74028,52745],{"class":39},[33,74030,52774],{"class":76},[33,74032,73513],{"class":76},[33,74034,345],{"class":47},[33,74036,74037],{"class":76},"228",[33,74039,13686],{"class":47},[33,74041,74042],{"class":76},"225",[33,74044,13686],{"class":47},[33,74046,74042],{"class":76},[33,74048,4130],{"class":47},[33,74050,74051,74054,74056,74058,74060],{"class":35,"line":18155},[33,74052,74053],{"class":76},"      padding-left",[33,74055,52690],{"class":47},[33,74057,722],{"class":76},[33,74059,52745],{"class":39},[33,74061,80],{"class":47},[33,74063,74064,74066,74068,74070,74073,74075,74077],{"class":35,"line":18160},[33,74065,63113],{"class":76},[33,74067,52690],{"class":47},[33,74069,29374],{"class":76},[33,74071,74072],{"class":76}," linear",[33,74074,63120],{"class":76},[33,74076,2295],{"class":39},[33,74078,80],{"class":47},[33,74080,74081],{"class":35,"line":18165},[33,74082,916],{"class":47},[33,74084,74085],{"class":35,"line":18178},[33,74086,160],{"emptyLinePlaceholder":159},[33,74088,74089,74092,74094,74096],{"class":35,"line":18183},[33,74090,74091],{"class":52553},"    tbody",[33,74093,71397],{"class":52553},[33,74095,62193],{"class":43},[33,74097,16823],{"class":47},[33,74099,74100,74102,74104,74106,74108,74110,74112,74114,74116,74118],{"class":35,"line":33886},[33,74101,56137],{"class":76},[33,74103,52690],{"class":47},[33,74105,73576],{"class":76},[33,74107,345],{"class":47},[33,74109,73833],{"class":76},[33,74111,13686],{"class":47},[33,74113,73838],{"class":76},[33,74115,13686],{"class":47},[33,74117,73838],{"class":76},[33,74119,4130],{"class":47},[33,74121,74122,74124,74126,74128],{"class":35,"line":33892},[33,74123,63278],{"class":76},[33,74125,52690],{"class":47},[33,74127,63283],{"class":76},[33,74129,80],{"class":47},[33,74131,74132],{"class":35,"line":33898},[33,74133,916],{"class":47},[33,74135,74136],{"class":35,"line":33904},[33,74137,160],{"emptyLinePlaceholder":159},[33,74139,74140,74142,74144,74147,74149],{"class":35,"line":33910},[33,74141,74091],{"class":52553},[33,74143,71397],{"class":52553},[33,74145,74146],{"class":52553}," td",[33,74148,70],{"class":52553},[33,74150,16823],{"class":47},[33,74152,74153,74155,74157,74159],{"class":35,"line":33921},[33,74154,56262],{"class":76},[33,74156,52690],{"class":47},[33,74158,62122],{"class":76},[33,74160,80],{"class":47},[33,74162,74163,74165,74167,74169,74171],{"class":35,"line":33927},[33,74164,56024],{"class":76},[33,74166,52690],{"class":47},[33,74168,2505],{"class":76},[33,74170,52745],{"class":39},[33,74172,80],{"class":47},[33,74174,74175,74177,74179,74181,74183],{"class":35,"line":33947},[33,74176,56038],{"class":76},[33,74178,52690],{"class":47},[33,74180,2424],{"class":76},[33,74182,52745],{"class":39},[33,74184,80],{"class":47},[33,74186,74187,74189,74191,74193,74195],{"class":35,"line":33953},[33,74188,58612],{"class":76},[33,74190,52690],{"class":47},[33,74192,2424],{"class":76},[33,74194,52745],{"class":39},[33,74196,80],{"class":47},[33,74198,74199,74201,74203,74205,74207],{"class":35,"line":33964},[33,74200,63330],{"class":76},[33,74202,52690],{"class":47},[33,74204,707],{"class":76},[33,74206,52745],{"class":39},[33,74208,80],{"class":47},[33,74210,74211,74213,74215,74217],{"class":35,"line":33970},[33,74212,58669],{"class":76},[33,74214,52690],{"class":47},[33,74216,62095],{"class":76},[33,74218,80],{"class":47},[33,74220,74221,74223,74225,74227],{"class":35,"line":33976},[33,74222,58539],{"class":76},[33,74224,52690],{"class":47},[33,74226,52845],{"class":76},[33,74228,80],{"class":47},[33,74230,74231,74233,74235,74237],{"class":35,"line":33982},[33,74232,65223],{"class":76},[33,74234,52690],{"class":47},[33,74236,55990],{"class":76},[33,74238,80],{"class":47},[33,74240,74241,74243,74245,74248],{"class":35,"line":33988},[33,74242,56137],{"class":76},[33,74244,52690],{"class":47},[33,74246,74247],{"class":76},"orange",[33,74249,80],{"class":47},[33,74251,74252,74254,74256,74259,74261],{"class":35,"line":33994},[33,74253,56387],{"class":76},[33,74255,52690],{"class":47},[33,74257,74258],{"class":76},"12.5",[33,74260,52745],{"class":39},[33,74262,80],{"class":47},[33,74264,74265],{"class":35,"line":34000},[33,74266,916],{"class":47},[33,74268,74269,74271,74273],{"class":35,"line":34006},[33,74270,53670],{"class":47},[33,74272,1544],{"class":52553},[33,74274,52560],{"class":47},[33,74276,74277,74279,74281],{"class":35,"line":34026},[33,74278,53038],{"class":47},[33,74280,52587],{"class":52553},[33,74282,52560],{"class":47},[33,74284,74285],{"class":35,"line":34032},[33,74286,160],{"emptyLinePlaceholder":159},[33,74288,74289,74291,74293],{"class":35,"line":34048},[33,74290,875],{"class":47},[33,74292,53053],{"class":52553},[33,74294,52560],{"class":47},[33,74296,74297,74299,74301,74304,74306],{"class":35,"line":34054},[33,74298,53397],{"class":47},[33,74300,18],{"class":52553},[33,74302,74303],{"class":47},">学生就业统计表\u003C\u002F",[33,74305,18],{"class":52553},[33,74307,52560],{"class":47},[33,74309,74310,74312,74314,74316,74318,74320,74322,74324,74326],{"class":35,"line":34068},[33,74311,53397],{"class":47},[33,74313,67878],{"class":52553},[33,74315,54739],{"class":43},[33,74317,73],{"class":47},[33,74319,63917],{"class":119},[33,74321,70323],{"class":43},[33,74323,73],{"class":47},[33,74325,33029],{"class":119},[33,74327,52560],{"class":47},[33,74329,74330,74332,74334,74336,74338,74340,74342,74344,74346,74348,74350,74353,74355,74357,74359],{"class":35,"line":34074},[33,74331,52594],{"class":47},[33,74333,55074],{"class":52553},[33,74335,55077],{"class":43},[33,74337,73],{"class":47},[33,74339,63952],{"class":119},[33,74341,16171],{"class":43},[33,74343,73],{"class":47},[33,74345,70349],{"class":119},[33,74347,62273],{"class":43},[33,74349,73],{"class":47},[33,74351,74352],{"class":119},"\"姓名\"",[33,74354,54739],{"class":43},[33,74356,73],{"class":47},[33,74358,70349],{"class":119},[33,74360,52560],{"class":47},[33,74362,74363,74365,74367,74369,74371,74373,74375,74377,74379,74381,74383,74386,74388,74390,74392],{"class":35,"line":34089},[33,74364,52594],{"class":47},[33,74366,55074],{"class":52553},[33,74368,55077],{"class":43},[33,74370,73],{"class":47},[33,74372,63952],{"class":119},[33,74374,16171],{"class":43},[33,74376,73],{"class":47},[33,74378,70377],{"class":119},[33,74380,62273],{"class":43},[33,74382,73],{"class":47},[33,74384,74385],{"class":119},"\"年龄\"",[33,74387,54739],{"class":43},[33,74389,73],{"class":47},[33,74391,70377],{"class":119},[33,74393,52560],{"class":47},[33,74395,74396,74398,74400,74402,74404,74406,74408,74410,74412,74414,74416,74419,74421,74423,74425],{"class":35,"line":34095},[33,74397,52594],{"class":47},[33,74399,55074],{"class":52553},[33,74401,55077],{"class":43},[33,74403,73],{"class":47},[33,74405,63952],{"class":119},[33,74407,16171],{"class":43},[33,74409,73],{"class":47},[33,74411,70479],{"class":119},[33,74413,62273],{"class":43},[33,74415,73],{"class":47},[33,74417,74418],{"class":119},"\"薪资\"",[33,74420,54739],{"class":43},[33,74422,73],{"class":47},[33,74424,70479],{"class":119},[33,74426,52560],{"class":47},[33,74428,74429,74431,74433,74435,74437,74439,74441,74443,74445,74447,74449,74451],{"class":35,"line":34104},[33,74430,52594],{"class":47},[33,74432,70397],{"class":52553},[33,74434,16171],{"class":43},[33,74436,73],{"class":47},[33,74438,70404],{"class":119},[33,74440,16210],{"class":43},[33,74442,73],{"class":47},[33,74444,1520],{"class":119},[33,74446,54739],{"class":43},[33,74448,73],{"class":47},[33,74450,70404],{"class":119},[33,74452,52560],{"class":47},[33,74454,74455,74457,74459,74461,74463,74465,74467,74469],{"class":35,"line":34110},[33,74456,56487],{"class":47},[33,74458,70419],{"class":52553},[33,74460,67904],{"class":43},[33,74462,73],{"class":47},[33,74464,11212],{"class":119},[33,74466,70428],{"class":47},[33,74468,70419],{"class":52553},[33,74470,52560],{"class":47},[33,74472,74473,74475,74477,74479,74481,74483,74485,74487],{"class":35,"line":34119},[33,74474,56487],{"class":47},[33,74476,70419],{"class":52553},[33,74478,67904],{"class":43},[33,74480,73],{"class":47},[33,74482,11281],{"class":119},[33,74484,70447],{"class":47},[33,74486,70419],{"class":52553},[33,74488,52560],{"class":47},[33,74490,74491,74493,74495],{"class":35,"line":34125},[33,74492,53029],{"class":47},[33,74494,70397],{"class":52553},[33,74496,52560],{"class":47},[33,74498,74499,74501,74503,74505,74507,74509,74511,74513,74515,74517,74519,74521],{"class":35,"line":34131},[33,74500,52594],{"class":47},[33,74502,70397],{"class":52553},[33,74504,16171],{"class":43},[33,74506,73],{"class":47},[33,74508,70501],{"class":119},[33,74510,16210],{"class":43},[33,74512,73],{"class":47},[33,74514,1520],{"class":119},[33,74516,54739],{"class":43},[33,74518,73],{"class":47},[33,74520,70501],{"class":119},[33,74522,52560],{"class":47},[33,74524,74525,74527,74529,74531,74533,74535,74537,74539],{"class":35,"line":34140},[33,74526,56487],{"class":47},[33,74528,70419],{"class":52553},[33,74530,67904],{"class":43},[33,74532,73],{"class":47},[33,74534,70522],{"class":119},[33,74536,70525],{"class":47},[33,74538,70419],{"class":52553},[33,74540,52560],{"class":47},[33,74542,74543,74545,74547,74549,74551,74553,74555,74557],{"class":35,"line":34146},[33,74544,56487],{"class":47},[33,74546,70419],{"class":52553},[33,74548,67904],{"class":43},[33,74550,73],{"class":47},[33,74552,70542],{"class":119},[33,74554,70545],{"class":47},[33,74556,70419],{"class":52553},[33,74558,52560],{"class":47},[33,74560,74561,74563,74565,74567,74569,74571,74573,74575],{"class":35,"line":34157},[33,74562,56487],{"class":47},[33,74564,70419],{"class":52553},[33,74566,67904],{"class":43},[33,74568,73],{"class":47},[33,74570,70562],{"class":119},[33,74572,70565],{"class":47},[33,74574,70419],{"class":52553},[33,74576,52560],{"class":47},[33,74578,74579,74581,74583,74585,74587,74589,74591,74593],{"class":35,"line":34163},[33,74580,56487],{"class":47},[33,74582,70419],{"class":52553},[33,74584,67904],{"class":43},[33,74586,73],{"class":47},[33,74588,70582],{"class":119},[33,74590,70585],{"class":47},[33,74592,70419],{"class":52553},[33,74594,52560],{"class":47},[33,74596,74597,74599,74601,74603,74605,74607,74609,74611],{"class":35,"line":34182},[33,74598,56487],{"class":47},[33,74600,70419],{"class":52553},[33,74602,67904],{"class":43},[33,74604,73],{"class":47},[33,74606,70602],{"class":119},[33,74608,70605],{"class":47},[33,74610,70419],{"class":52553},[33,74612,52560],{"class":47},[33,74614,74615,74617,74619],{"class":35,"line":34188},[33,74616,53029],{"class":47},[33,74618,70397],{"class":52553},[33,74620,52560],{"class":47},[33,74622,74623,74625,74627],{"class":35,"line":34199},[33,74624,52594],{"class":47},[33,74626,55140],{"class":52553},[33,74628,52560],{"class":47},[33,74630,74631,74633,74635,74638,74640,74643,74645],{"class":35,"line":34205},[33,74632,56487],{"class":47},[33,74634,33],{"class":52553},[33,74636,74637],{"class":47},">+\u003C\u002F",[33,74639,33],{"class":52553},[33,74641,74642],{"class":47},">添加\u003C\u002F",[33,74644,55140],{"class":52553},[33,74646,52560],{"class":47},[33,74648,74649,74651,74653],{"class":35,"line":34225},[33,74650,53670],{"class":47},[33,74652,67878],{"class":52553},[33,74654,52560],{"class":47},[33,74656,74657,74659,74661,74663,74665,74667,74670,74672,74675,74677,74680,74682],{"class":35,"line":34241},[33,74658,53397],{"class":47},[33,74660,52864],{"class":52553},[33,74662,54739],{"class":43},[33,74664,73],{"class":47},[33,74666,63833],{"class":119},[33,74668,74669],{"class":47},">共有数据 \u003C",[33,74671,33],{"class":52553},[33,74673,74674],{"class":47},">0\u003C\u002F",[33,74676,33],{"class":52553},[33,74678,74679],{"class":47},"> 条\u003C\u002F",[33,74681,52864],{"class":52553},[33,74683,52560],{"class":47},[33,74685,74686,74688,74690],{"class":35,"line":34247},[33,74687,53397],{"class":47},[33,74689,1756],{"class":52553},[33,74691,52560],{"class":47},[33,74693,74694,74696,74698],{"class":35,"line":34261},[33,74695,52594],{"class":47},[33,74697,1759],{"class":52553},[33,74699,52560],{"class":47},[33,74701,74702,74704,74706],{"class":35,"line":34267},[33,74703,56487],{"class":47},[33,74705,1762],{"class":52553},[33,74707,52560],{"class":47},[33,74709,74710,74712,74714,74717,74719],{"class":35,"line":34273},[33,74711,56555],{"class":47},[33,74713,1765],{"class":52553},[33,74715,74716],{"class":47},">ID\u003C\u002F",[33,74718,1765],{"class":52553},[33,74720,52560],{"class":47},[33,74722,74723,74725,74727,74729,74731],{"class":35,"line":34284},[33,74724,56555],{"class":47},[33,74726,1765],{"class":52553},[33,74728,70708],{"class":47},[33,74730,1765],{"class":52553},[33,74732,52560],{"class":47},[33,74734,74735,74737,74739,74741,74743],{"class":35,"line":34290},[33,74736,56555],{"class":47},[33,74738,1765],{"class":52553},[33,74740,70721],{"class":47},[33,74742,1765],{"class":52553},[33,74744,52560],{"class":47},[33,74746,74747,74749,74751,74753,74755],{"class":35,"line":34296},[33,74748,56555],{"class":47},[33,74750,1765],{"class":52553},[33,74752,70734],{"class":47},[33,74754,1765],{"class":52553},[33,74756,52560],{"class":47},[33,74758,74759,74761,74763,74765,74767],{"class":35,"line":34306},[33,74760,56555],{"class":47},[33,74762,1765],{"class":52553},[33,74764,70747],{"class":47},[33,74766,1765],{"class":52553},[33,74768,52560],{"class":47},[33,74770,74771,74773,74775,74777,74779],{"class":35,"line":34312},[33,74772,56555],{"class":47},[33,74774,1765],{"class":52553},[33,74776,70760],{"class":47},[33,74778,1765],{"class":52553},[33,74780,52560],{"class":47},[33,74782,74783,74785,74787,74790,74792],{"class":35,"line":34323},[33,74784,56555],{"class":47},[33,74786,1765],{"class":52553},[33,74788,74789],{"class":47},">录入时间\u003C\u002F",[33,74791,1765],{"class":52553},[33,74793,52560],{"class":47},[33,74795,74796,74798,74800,74802,74804],{"class":35,"line":34329},[33,74797,56555],{"class":47},[33,74799,1765],{"class":52553},[33,74801,70773],{"class":47},[33,74803,1765],{"class":52553},[33,74805,52560],{"class":47},[33,74807,74808,74810,74812],{"class":35,"line":34339},[33,74809,56660],{"class":47},[33,74811,1762],{"class":52553},[33,74813,52560],{"class":47},[33,74815,74816,74818,74820],{"class":35,"line":34344},[33,74817,53029],{"class":47},[33,74819,1759],{"class":52553},[33,74821,52560],{"class":47},[33,74823,74824,74826,74828],{"class":35,"line":34350},[33,74825,52594],{"class":47},[33,74827,1802],{"class":52553},[33,74829,52560],{"class":47},[33,74831,74832],{"class":35,"line":34399},[33,74833,74834],{"class":60},"      \u003C!-- \u003Ctr>\n",[33,74836,74837],{"class":35,"line":34446},[33,74838,74839],{"class":60},"        \u003Ctd>1\u003C\u002Ftd>\n",[33,74841,74842],{"class":35,"line":34451},[33,74843,74839],{"class":60},[33,74845,74846],{"class":35,"line":34457},[33,74847,74839],{"class":60},[33,74849,74850],{"class":35,"line":34476},[33,74851,74839],{"class":60},[33,74853,74854],{"class":35,"line":34482},[33,74855,74839],{"class":60},[33,74857,74858],{"class":35,"line":34502},[33,74859,74839],{"class":60},[33,74861,74862],{"class":35,"line":34508},[33,74863,74839],{"class":60},[33,74865,74866],{"class":35,"line":34514},[33,74867,74868],{"class":60},"        \u003Ctd>\n",[33,74870,74871],{"class":35,"line":34524},[33,74872,74873],{"class":60},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[33,74875,74876],{"class":35,"line":34529},[33,74877,74878],{"class":60},"        \u003C\u002Ftd>\n",[33,74880,74881],{"class":35,"line":34535},[33,74882,74883],{"class":60},"      \u003C\u002Ftr> -->\n",[33,74885,74886,74888,74890],{"class":35,"line":34551},[33,74887,53029],{"class":47},[33,74889,1802],{"class":52553},[33,74891,52560],{"class":47},[33,74893,74894,74896,74898],{"class":35,"line":34596},[33,74895,53670],{"class":47},[33,74897,1756],{"class":52553},[33,74899,52560],{"class":47},[33,74901,74902,74904,74906],{"class":35,"line":34602},[33,74903,53397],{"class":47},[33,74905,53066],{"class":52553},[33,74907,52560],{"class":47},[33,74909,74910],{"class":35,"line":34608},[33,74911,74912],{"class":60},"    \u002F\u002F const initData = [{\n",[33,74914,74915],{"class":35,"line":34614},[33,74916,74917],{"class":60},"    \u002F\u002F   unameId: 1,\n",[33,74919,74920],{"class":35,"line":34625},[33,74921,74922],{"class":60},"    \u002F\u002F   uname: '华晨宇',\n",[33,74924,74925],{"class":35,"line":34631},[33,74926,74927],{"class":60},"    \u002F\u002F   age: 22,\n",[33,74929,74930],{"class":35,"line":34637},[33,74931,74932],{"class":60},"    \u002F\u002F   salary: 12000,\n",[33,74934,74935],{"class":35,"line":34643},[33,74936,74937],{"class":60},"    \u002F\u002F   gender: '男',\n",[33,74939,74940],{"class":35,"line":34661},[33,74941,74942],{"class":60},"    \u002F\u002F   city: '北京',\n",[33,74944,74945],{"class":35,"line":34675},[33,74946,74947],{"class":60},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[33,74949,74950],{"class":35,"line":34684},[33,74951,74952],{"class":60},"    \u002F\u002F }]\n",[33,74954,74955],{"class":35,"line":34693},[33,74956,74957],{"class":60},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[33,74959,74960],{"class":35,"line":34702},[33,74961,74962],{"class":60},"    \u002F\u002F 1.渲染业务\n",[33,74964,74965],{"class":35,"line":34711},[33,74966,74967],{"class":60},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[33,74969,74970],{"class":35,"line":34717},[33,74971,74972],{"class":60},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[33,74974,74975],{"class":35,"line":34723},[33,74976,74977],{"class":60},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[33,74979,74980],{"class":35,"line":34731},[33,74981,160],{"emptyLinePlaceholder":159},[33,74983,74984],{"class":35,"line":34736},[33,74985,74986],{"class":60},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[33,74988,74989],{"class":35,"line":34742},[33,74990,74991],{"class":60},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[33,74993,74994,74996,74998,75000],{"class":35,"line":34753},[33,74995,12472],{"class":39},[33,74997,58948],{"class":76},[33,74999,14815],{"class":39},[33,75001,53091],{"class":47},[33,75003,75004,75007,75009],{"class":35,"line":34759},[33,75005,75006],{"class":47},"    console.",[33,75008,59500],{"class":43},[33,75010,53665],{"class":47},[33,75012,75013],{"class":35,"line":34779},[33,75014,160],{"emptyLinePlaceholder":159},[33,75016,75017],{"class":35,"line":34785},[33,75018,75019],{"class":60},"    \u002F\u002F 时间函数\n",[33,75021,75022,75024,75027],{"class":35,"line":34791},[33,75023,71337],{"class":39},[33,75025,75026],{"class":43}," getTime",[33,75028,12104],{"class":47},[33,75030,75031,75033,75036,75038,75040,75043],{"class":35,"line":34797},[33,75032,59481],{"class":39},[33,75034,75035],{"class":76}," date",[33,75037,14815],{"class":39},[33,75039,12829],{"class":39},[33,75041,75042],{"class":43}," Date",[33,75044,48],{"class":47},[33,75046,75047,75049,75051,75053,75056,75059,75061,75063,75065,75068,75071,75073,75075,75077,75079,75081,75083,75085],{"class":35,"line":34814},[33,75048,59481],{"class":39},[33,75050,17342],{"class":76},[33,75052,14815],{"class":39},[33,75054,75055],{"class":47}," date.",[33,75057,75058],{"class":43},"getHours",[33,75060,14301],{"class":47},[33,75062,875],{"class":39},[33,75064,3461],{"class":76},[33,75066,75067],{"class":39}," ?",[33,75069,75070],{"class":119}," '0'",[33,75072,46819],{"class":39},[33,75074,75055],{"class":47},[33,75076,75058],{"class":43},[33,75078,14301],{"class":47},[33,75080,2458],{"class":39},[33,75082,75055],{"class":47},[33,75084,75058],{"class":43},[33,75086,48],{"class":47},[33,75088,75089,75091,75094,75096,75098,75101,75103,75105,75107,75109,75111,75113,75115,75117,75119,75121,75123,75125],{"class":35,"line":34820},[33,75090,59481],{"class":39},[33,75092,75093],{"class":76}," m",[33,75095,14815],{"class":39},[33,75097,75055],{"class":47},[33,75099,75100],{"class":43},"getMinutes",[33,75102,14301],{"class":47},[33,75104,875],{"class":39},[33,75106,3461],{"class":76},[33,75108,75067],{"class":39},[33,75110,75070],{"class":119},[33,75112,46819],{"class":39},[33,75114,75055],{"class":47},[33,75116,75100],{"class":43},[33,75118,14301],{"class":47},[33,75120,2458],{"class":39},[33,75122,75055],{"class":47},[33,75124,75100],{"class":43},[33,75126,48],{"class":47},[33,75128,75129,75131,75133,75135,75137,75140,75142,75144,75146,75148,75150,75152,75154,75156,75158,75160,75162,75164],{"class":35,"line":34826},[33,75130,59481],{"class":39},[33,75132,9679],{"class":76},[33,75134,14815],{"class":39},[33,75136,75055],{"class":47},[33,75138,75139],{"class":43},"getSeconds",[33,75141,14301],{"class":47},[33,75143,875],{"class":39},[33,75145,3461],{"class":76},[33,75147,75067],{"class":39},[33,75149,75070],{"class":119},[33,75151,46819],{"class":39},[33,75153,75055],{"class":47},[33,75155,75139],{"class":43},[33,75157,14301],{"class":47},[33,75159,2458],{"class":39},[33,75161,75055],{"class":47},[33,75163,75139],{"class":43},[33,75165,48],{"class":47},[33,75167,75168,75170,75173,75175,75177,75180,75182,75185,75187,75190,75192,75194,75197,75199,75201,75203,75205,75207,75209,75212,75214,75217,75219,75222,75224,75226,75228],{"class":35,"line":34832},[33,75169,59481],{"class":39},[33,75171,75172],{"class":76}," str",[33,75174,14815],{"class":39},[33,75176,64156],{"class":119},[33,75178,75179],{"class":47},"date",[33,75181,2158],{"class":119},[33,75183,75184],{"class":43},"getFullYear",[33,75186,3845],{"class":119},[33,75188,75189],{"class":119},"}\u002F${",[33,75191,75179],{"class":47},[33,75193,2158],{"class":119},[33,75195,75196],{"class":43},"getMonth",[33,75198,14301],{"class":119},[33,75200,1271],{"class":39},[33,75202,26371],{"class":76},[33,75204,75189],{"class":119},[33,75206,75179],{"class":47},[33,75208,2158],{"class":119},[33,75210,75211],{"class":43},"getDate",[33,75213,3845],{"class":119},[33,75215,75216],{"class":119},"} ${",[33,75218,2021],{"class":47},[33,75220,75221],{"class":119},"}:${",[33,75223,2144],{"class":47},[33,75225,75221],{"class":119},[33,75227,2295],{"class":47},[33,75229,75230],{"class":119},"}`\n",[33,75232,75233,75236],{"class":35,"line":34838},[33,75234,75235],{"class":39},"      return",[33,75237,75238],{"class":47}," str\n",[33,75240,75241],{"class":35,"line":34844},[33,75242,916],{"class":47},[33,75244,75245],{"class":35,"line":34871},[33,75246,75247],{"class":60},"    \u002F\u002F 渲染函数\n",[33,75249,75250,75252,75254,75256,75258,75260,75262,75264],{"class":35,"line":34895},[33,75251,12472],{"class":39},[33,75253,71000],{"class":76},[33,75255,14815],{"class":39},[33,75257,55649],{"class":47},[33,75259,55652],{"class":43},[33,75261,345],{"class":47},[33,75263,71011],{"class":119},[33,75265,884],{"class":47},[33,75267,75268,75270,75272],{"class":35,"line":34901},[33,75269,71337],{"class":39},[33,75271,71340],{"class":43},[33,75273,12104],{"class":47},[33,75275,75276],{"class":35,"line":34907},[33,75277,75278],{"class":60},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[33,75280,75281],{"class":35,"line":34913},[33,75282,75283],{"class":60},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[33,75285,75286,75288,75291,75293,75295,75298,75300,75302,75304,75307,75309,75312],{"class":35,"line":34924},[33,75287,59481],{"class":39},[33,75289,75290],{"class":76}," trArr",[33,75292,14815],{"class":39},[33,75294,53218],{"class":47},[33,75296,75297],{"class":43},"map",[33,75299,345],{"class":47},[33,75301,55702],{"class":39},[33,75303,860],{"class":47},[33,75305,75306],{"class":955},"ele",[33,75308,13686],{"class":47},[33,75310,75311],{"class":955},"index",[33,75313,13693],{"class":47},[33,75315,75316,75318],{"class":35,"line":34935},[33,75317,16003],{"class":39},[33,75319,71421],{"class":119},[33,75321,75322],{"class":35,"line":34941},[33,75323,75324],{"class":119},"      \u003Ctr>\n",[33,75326,75327,75329,75331,75333,75336],{"class":35,"line":34958},[33,75328,71426],{"class":119},[33,75330,75306],{"class":47},[33,75332,2158],{"class":119},[33,75334,75335],{"class":47},"unameId",[33,75337,71441],{"class":119},[33,75339,75340,75342,75344,75346,75348],{"class":35,"line":34981},[33,75341,71426],{"class":119},[33,75343,75306],{"class":47},[33,75345,2158],{"class":119},[33,75347,71457],{"class":47},[33,75349,71441],{"class":119},[33,75351,75352,75354,75356,75358,75360],{"class":35,"line":35004},[33,75353,71426],{"class":119},[33,75355,75306],{"class":47},[33,75357,2158],{"class":119},[33,75359,71474],{"class":47},[33,75361,71441],{"class":119},[33,75363,75364,75366,75368,75370,75372],{"class":35,"line":35010},[33,75365,71426],{"class":119},[33,75367,75306],{"class":47},[33,75369,2158],{"class":119},[33,75371,71491],{"class":47},[33,75373,71441],{"class":119},[33,75375,75376,75378,75380,75382,75384],{"class":35,"line":35015},[33,75377,71426],{"class":119},[33,75379,75306],{"class":47},[33,75381,2158],{"class":119},[33,75383,71508],{"class":47},[33,75385,71441],{"class":119},[33,75387,75388,75390,75392,75394,75396],{"class":35,"line":35024},[33,75389,71426],{"class":119},[33,75391,75306],{"class":47},[33,75393,2158],{"class":119},[33,75395,71525],{"class":47},[33,75397,71441],{"class":119},[33,75399,75400,75402,75404,75406,75408],{"class":35,"line":35034},[33,75401,71426],{"class":119},[33,75403,75306],{"class":47},[33,75405,2158],{"class":119},[33,75407,3807],{"class":47},[33,75409,71441],{"class":119},[33,75411,75412],{"class":35,"line":35040},[33,75413,74868],{"class":119},[33,75415,75416,75419,75421],{"class":35,"line":35045},[33,75417,75418],{"class":119},"          \u003Ca href=\"#\" data-id=\"${",[33,75420,75311],{"class":47},[33,75422,75423],{"class":119},"}\">删除\u003C\u002Fa>\n",[33,75425,75426],{"class":35,"line":35051},[33,75427,74878],{"class":119},[33,75429,75430],{"class":35,"line":35064},[33,75431,75432],{"class":119},"      \u003C\u002Ftr>\n",[33,75434,75435],{"class":35,"line":35070},[33,75436,75437],{"class":119},"  `\n",[33,75439,75440],{"class":35,"line":35081},[33,75441,66068],{"class":47},[33,75443,75444,75446,75448],{"class":35,"line":35092},[33,75445,59497],{"class":47},[33,75447,59500],{"class":43},[33,75449,75450],{"class":47},"(trArr)\n",[33,75452,75453],{"class":35,"line":35111},[33,75454,160],{"emptyLinePlaceholder":159},[33,75456,75457],{"class":35,"line":50771},[33,75458,75459],{"class":60},"      \u002F\u002F (2) 把数组转换为字符串join\n",[33,75461,75462],{"class":35,"line":50776},[33,75463,75464],{"class":60},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[33,75466,75467,75469,75471,75474,75477,75479,75482],{"class":35,"line":50785},[33,75468,71352],{"class":47},[33,75470,73],{"class":39},[33,75472,75473],{"class":47}," trArr.",[33,75475,75476],{"class":43},"join",[33,75478,345],{"class":47},[33,75480,75481],{"class":119},"''",[33,75483,884],{"class":47},[33,75485,75486],{"class":35,"line":50794},[33,75487,75488],{"class":60},"      \u002F\u002F 显示共有几条\n",[33,75490,75491,75493,75495,75497,75500,75503,75505,75507],{"class":35,"line":50799},[33,75492,57024],{"class":47},[33,75494,55652],{"class":43},[33,75496,345],{"class":47},[33,75498,75499],{"class":119},"'.total span'",[33,75501,75502],{"class":47},").innerHTML ",[33,75504,73],{"class":39},[33,75506,53218],{"class":47},[33,75508,57084],{"class":76},[33,75510,75511],{"class":35,"line":50804},[33,75512,916],{"class":47},[33,75514,75515],{"class":35,"line":50809},[33,75516,75517],{"class":60},"    \u002F\u002F render()\n",[33,75519,75520],{"class":35,"line":50822},[33,75521,160],{"emptyLinePlaceholder":159},[33,75523,75524],{"class":35,"line":50827},[33,75525,75526],{"class":60},"    \u002F\u002F 获取DOM对象\n",[33,75528,75529,75531,75533,75535,75537,75539,75541,75543],{"class":35,"line":50836},[33,75530,12472],{"class":39},[33,75532,71074],{"class":76},[33,75534,14815],{"class":39},[33,75536,55649],{"class":47},[33,75538,55652],{"class":43},[33,75540,345],{"class":47},[33,75542,71085],{"class":119},[33,75544,884],{"class":47},[33,75546,75547,75549,75551,75553,75555,75557,75559,75561],{"class":35,"line":50845},[33,75548,12472],{"class":39},[33,75550,70901],{"class":76},[33,75552,14815],{"class":39},[33,75554,55649],{"class":47},[33,75556,55652],{"class":43},[33,75558,345],{"class":47},[33,75560,70912],{"class":119},[33,75562,884],{"class":47},[33,75564,75565,75567,75569,75571,75573,75575,75577,75579],{"class":35,"line":50862},[33,75566,12472],{"class":39},[33,75568,16940],{"class":76},[33,75570,14815],{"class":39},[33,75572,55649],{"class":47},[33,75574,55652],{"class":43},[33,75576,345],{"class":47},[33,75578,70931],{"class":119},[33,75580,884],{"class":47},[33,75582,75584,75586,75588,75590,75592,75594,75596,75598],{"class":35,"line":75583},231,[33,75585,12472],{"class":39},[33,75587,70960],{"class":76},[33,75589,14815],{"class":39},[33,75591,55649],{"class":47},[33,75593,55652],{"class":43},[33,75595,345],{"class":47},[33,75597,70971],{"class":119},[33,75599,884],{"class":47},[33,75601,75603,75605,75607,75609,75611,75613,75615,75617],{"class":35,"line":75602},232,[33,75604,12472],{"class":39},[33,75606,70940],{"class":76},[33,75608,14815],{"class":39},[33,75610,55649],{"class":47},[33,75612,55652],{"class":43},[33,75614,345],{"class":47},[33,75616,70951],{"class":119},[33,75618,884],{"class":47},[33,75620,75622,75624,75626,75628,75630,75632,75634,75636],{"class":35,"line":75621},233,[33,75623,12472],{"class":39},[33,75625,70980],{"class":76},[33,75627,14815],{"class":39},[33,75629,55649],{"class":47},[33,75631,55652],{"class":43},[33,75633,345],{"class":47},[33,75635,70991],{"class":119},[33,75637,884],{"class":47},[33,75639,75641],{"class":35,"line":75640},234,[33,75642,160],{"emptyLinePlaceholder":159},[33,75644,75646],{"class":35,"line":75645},235,[33,75647,75648],{"class":60},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[33,75650,75652,75654,75656,75658,75660,75662,75664,75666,75668],{"class":35,"line":75651},236,[33,75653,71092],{"class":47},[33,75655,59066],{"class":43},[33,75657,345],{"class":47},[33,75659,71099],{"class":119},[33,75661,13686],{"class":47},[33,75663,55702],{"class":39},[33,75665,860],{"class":47},[33,75667,1696],{"class":955},[33,75669,13693],{"class":47},[33,75671,75673],{"class":35,"line":75672},237,[33,75674,75675],{"class":60},"      \u002F\u002F 禁止浏览器跳转\n",[33,75677,75679,75681,75683],{"class":35,"line":75678},238,[33,75680,71119],{"class":47},[33,75682,71122],{"class":43},[33,75684,48],{"class":47},[33,75686,75688],{"class":35,"line":75687},239,[33,75689,75690],{"class":60},"      \u002F\u002F 非空判断\n",[33,75692,75694],{"class":35,"line":75693},240,[33,75695,75696],{"class":60},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[33,75698,75700],{"class":35,"line":75699},241,[33,75701,75702],{"class":60},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[33,75704,75706,75708,75710,75712,75715,75717,75720,75723,75725,75727],{"class":35,"line":75705},242,[33,75707,55733],{"class":39},[33,75709,860],{"class":47},[33,75711,1842],{"class":39},[33,75713,75714],{"class":47},"uname.value ",[33,75716,72610],{"class":39},[33,75718,75719],{"class":39}," !",[33,75721,75722],{"class":47},"age.value ",[33,75724,72610],{"class":39},[33,75726,75719],{"class":39},[33,75728,75729],{"class":47},"salary.value) {\n",[33,75731,75733,75735,75737,75739,75741],{"class":35,"line":75732},243,[33,75734,16003],{"class":39},[33,75736,71193],{"class":43},[33,75738,345],{"class":47},[33,75740,71198],{"class":119},[33,75742,884],{"class":47},[33,75744,75746],{"class":35,"line":75745},244,[33,75747,53651],{"class":47},[33,75749,75751,75753,75755],{"class":35,"line":75750},245,[33,75752,59260],{"class":47},[33,75754,53137],{"class":43},[33,75756,75757],{"class":47},"({\n",[33,75759,75761],{"class":35,"line":75760},246,[33,75762,75763],{"class":60},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[33,75765,75767],{"class":35,"line":75766},247,[33,75768,75769],{"class":60},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[33,75771,75773],{"class":35,"line":75772},248,[33,75774,75775],{"class":60},"        \u002F\u002F 对象的序号应为数组长度+1\n",[33,75777,75779],{"class":35,"line":75778},249,[33,75780,75781],{"class":60},"        \u002F\u002F unameId: arr.length + 1,\n",[33,75783,75785],{"class":35,"line":75784},250,[33,75786,160],{"emptyLinePlaceholder":159},[33,75788,75790],{"class":35,"line":75789},251,[33,75791,75792],{"class":60},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[33,75794,75796],{"class":35,"line":75795},252,[33,75797,75798],{"class":60},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[33,75800,75802],{"class":35,"line":75801},253,[33,75803,75804],{"class":60},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[33,75806,75808],{"class":35,"line":75807},254,[33,75809,75810],{"class":60},"        \u002F\u002F 0当假看\n",[33,75812,75814,75817,75819,75821,75824,75826,75828,75830,75833,75835,75837,75840,75842],{"class":35,"line":75813},255,[33,75815,75816],{"class":47},"        unameId: arr.",[33,75818,53221],{"class":76},[33,75820,75067],{"class":39},[33,75822,75823],{"class":47}," arr[arr.",[33,75825,53221],{"class":76},[33,75827,53524],{"class":39},[33,75829,26371],{"class":76},[33,75831,75832],{"class":47},"].unameId ",[33,75834,1271],{"class":39},[33,75836,26371],{"class":76},[33,75838,75839],{"class":39}," :",[33,75841,26371],{"class":76},[33,75843,32719],{"class":47},[33,75845,75847],{"class":35,"line":75846},256,[33,75848,71246],{"class":47},[33,75850,75852],{"class":35,"line":75851},257,[33,75853,71251],{"class":47},[33,75855,75857],{"class":35,"line":75856},258,[33,75858,71261],{"class":47},[33,75860,75862],{"class":35,"line":75861},259,[33,75863,71256],{"class":47},[33,75865,75867],{"class":35,"line":75866},260,[33,75868,75869],{"class":47},"        city: city.value,\n",[33,75871,75873],{"class":35,"line":75872},261,[33,75874,75875],{"class":60},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[33,75877,75879],{"class":35,"line":75878},262,[33,75880,75881],{"class":60},"        \u002F\u002F time: new Date().toDateString()\n",[33,75883,75885,75888,75891],{"class":35,"line":75884},263,[33,75886,75887],{"class":47},"        time: ",[33,75889,75890],{"class":43},"getTime",[33,75892,48],{"class":47},[33,75894,75896],{"class":35,"line":75895},264,[33,75897,66068],{"class":47},[33,75899,75901],{"class":35,"line":75900},265,[33,75902,75903],{"class":60},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[33,75905,75907,75909],{"class":35,"line":75906},266,[33,75908,71321],{"class":43},[33,75910,48],{"class":47},[33,75912,75914,75916,75918,75920,75922],{"class":35,"line":75913},267,[33,75915,71304],{"class":76},[33,75917,2158],{"class":47},[33,75919,71309],{"class":43},[33,75921,14301],{"class":47},[33,75923,75924],{"class":60},"\u002F\u002F重置表单\n",[33,75926,75928],{"class":35,"line":75927},268,[33,75929,75930],{"class":60},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[33,75932,75934,75937,75939,75941,75944,75946,75948,75950,75952],{"class":35,"line":75933},269,[33,75935,75936],{"class":47},"      localStorage.",[33,75938,72907],{"class":43},[33,75940,345],{"class":47},[33,75942,75943],{"class":119},"'data'",[33,75945,13686],{"class":47},[33,75947,72917],{"class":76},[33,75949,2158],{"class":47},[33,75951,72922],{"class":43},[33,75953,75954],{"class":47},"(arr))\n",[33,75956,75958],{"class":35,"line":75957},270,[33,75959,34714],{"class":47},[33,75961,75963],{"class":35,"line":75962},271,[33,75964,160],{"emptyLinePlaceholder":159},[33,75966,75968],{"class":35,"line":75967},272,[33,75969,75970],{"class":60},"    \u002F\u002F 3.删除业务\n",[33,75972,75974],{"class":35,"line":75973},273,[33,75975,75976],{"class":60},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[33,75978,75980,75982,75984,75986,75988,75990,75992,75994,75996],{"class":35,"line":75979},274,[33,75981,71594],{"class":47},[33,75983,59066],{"class":43},[33,75985,345],{"class":47},[33,75987,59071],{"class":119},[33,75989,13686],{"class":47},[33,75991,55702],{"class":39},[33,75993,860],{"class":47},[33,75995,1696],{"class":955},[33,75997,13693],{"class":47},[33,75999,76001],{"class":35,"line":76000},275,[33,76002,76003],{"class":60},"      \u002F\u002F 判断是否点击的是删除按钮\n",[33,76005,76007,76009,76011,76013,76015],{"class":35,"line":76006},276,[33,76008,55733],{"class":39},[33,76010,68287],{"class":47},[33,76012,55739],{"class":39},[33,76014,69509],{"class":119},[33,76016,13693],{"class":47},[33,76018,76020],{"class":35,"line":76019},277,[33,76021,76022],{"class":60},"        \u002F\u002F alert(1)\n",[33,76024,76026],{"class":35,"line":76025},278,[33,76027,76028],{"class":60},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[33,76030,76032],{"class":35,"line":76031},279,[33,76033,76034],{"class":60},"        \u002F\u002F console.log(e.target)\n",[33,76036,76038],{"class":35,"line":76037},280,[33,76039,76040],{"class":60},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[33,76042,76044],{"class":35,"line":76043},281,[33,76045,160],{"emptyLinePlaceholder":159},[33,76047,76049],{"class":35,"line":76048},282,[33,76050,76051],{"class":60},"        \u002F\u002F 确认框，确然是否真的要删除\n",[33,76053,76055],{"class":35,"line":76054},283,[33,76056,76057],{"class":60},"        \u002F\u002F confirm()为确认框\n",[33,76059,76061],{"class":35,"line":76060},284,[33,76062,76063],{"class":60},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[33,76065,76067,76069,76071,76074,76076,76079],{"class":35,"line":76066},285,[33,76068,3915],{"class":39},[33,76070,860],{"class":47},[33,76072,76073],{"class":43},"confirm",[33,76075,345],{"class":47},[33,76077,76078],{"class":119},"'您确定要删除这条数据吗？'",[33,76080,76081],{"class":47},")) {\n",[33,76083,76085,76088,76090,76092,76094],{"class":35,"line":76084},286,[33,76086,76087],{"class":47},"          arr.",[33,76089,59263],{"class":43},[33,76091,71647],{"class":47},[33,76093,701],{"class":76},[33,76095,884],{"class":47},[33,76097,76099],{"class":35,"line":76098},287,[33,76100,76101],{"class":60},"          \u002F\u002F 3.4 重新渲染页面\n",[33,76103,76105,76108],{"class":35,"line":76104},288,[33,76106,76107],{"class":43},"          render",[33,76109,48],{"class":47},[33,76111,76113],{"class":35,"line":76112},289,[33,76114,76115],{"class":60},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[33,76117,76119,76122,76124,76126,76128,76130,76132,76134,76136],{"class":35,"line":76118},290,[33,76120,76121],{"class":47},"          localStorage.",[33,76123,72907],{"class":43},[33,76125,345],{"class":47},[33,76127,75943],{"class":119},[33,76129,13686],{"class":47},[33,76131,72917],{"class":76},[33,76133,2158],{"class":47},[33,76135,72922],{"class":43},[33,76137,75954],{"class":47},[33,76139,76141],{"class":35,"line":76140},291,[33,76142,1334],{"class":47},[33,76144,76146],{"class":35,"line":76145},292,[33,76147,53651],{"class":47},[33,76149,76151],{"class":35,"line":76150},293,[33,76152,160],{"emptyLinePlaceholder":159},[33,76154,76156],{"class":35,"line":76155},294,[33,76157,34714],{"class":47},[33,76159,76161],{"class":35,"line":76160},295,[33,76162,160],{"emptyLinePlaceholder":159},[33,76164,76166,76168,76170],{"class":35,"line":76165},296,[33,76167,53670],{"class":47},[33,76169,53066],{"class":52553},[33,76171,52560],{"class":47},[33,76173,76175,76177,76179],{"class":35,"line":76174},297,[33,76176,53038],{"class":47},[33,76178,53053],{"class":52553},[33,76180,52560],{"class":47},[33,76182,76184],{"class":35,"line":76183},298,[33,76185,160],{"emptyLinePlaceholder":159},[33,76187,76189,76191,76193],{"class":35,"line":76188},299,[33,76190,53038],{"class":47},[33,76192,51888],{"class":52553},[33,76194,52560],{"class":47},[18,76196,76198],{"id":76197},"_36-正则表达式","3.6 正则表达式",[14,76200,76201],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,76203,76204],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,76206,76207],{},"正则表达式的作用：",[561,76209,76210,76217,76223],{},[564,76211,76212,76213,76216],{},"表单验证（ ",[480,76214,76215],{},"匹配"," ）",[564,76218,76219,76220,76216],{},"过滤敏感词（ ",[480,76221,76222],{},"替换",[564,76224,76225,76226,76216],{},"字符串中提取我们想要的部分（ ",[480,76227,76228],{},"提取",[1599,76230,76232],{"id":76231},"_361-语法","3.6.1 语法",[14,76234,76235],{},"正则表达式使用步骤：",[574,76237,76238,76241],{},[564,76239,76240],{},"定义规则",[564,76242,76243],{},"查找是否匹配",[14,76245,76246],{},"正则表达式里边不需要写引号",[14,76248,76249],{},[2918,76250],{"alt":28,"src":76251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,76253,76254],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,76256,76257],{},"reg.test(str)",[14,76259,76260],{},[2918,76261],{"alt":28,"src":76262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,76264,76265],{},[2918,76266],{"alt":28,"src":76267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[1599,76269,76271],{"id":76270},"_362-元字符","3.6.2 元字符",[574,76273,76274,76277,76280,76283,76290],{},[564,76275,76276],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[564,76278,76279],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[564,76281,76282],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[564,76284,76285,76286],{},"正则验证工具：",[126,76287,76288],{"href":76288,"rel":76289},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25117],[564,76291,76292],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23249,76294,76296],{"id":76295},"_3621-边界符","3.6.2.1 边界符",[14,76298,76299],{},[2918,76300],{"alt":28,"src":76301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,76303,76304],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,76306,76307],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,76309,76310],{},"只匹配一次",[14,76312,76313],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23249,76315,76317],{"id":76316},"_3622-量词","3.6.2.2 量词",[14,76319,76320],{},[2918,76321],{"alt":28,"src":76322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,76324,76325],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23249,76327,76329],{"id":76328},"_3623-元字符","3.6.2.3 元字符",[14,76331,76332],{},[2918,76333],{"alt":28,"src":76334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,76336,76337],{},"匹配的是a或b或c []只选一个",[14,76339,76340],{},[2918,76341],{"alt":28,"src":76342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,76344,76345],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,76347,76348],{},[2918,76349],{"alt":28,"src":76350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,76352,76353],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,76355,76356],{},[2918,76357],{"alt":28,"src":76358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[23,76360,76362],{"className":51886,"code":76361,"language":51888,"meta":28,"style":28},"\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",[30,76363,76364,76374,76388,76392,76400,76414,76434,76446,76454,76458,76466,76474,76479,76510,76537,76565,76569,76574,76602,76633,76638,76643,76674,76706,76738,76742,76747,76778,76808,76838,76842,76847,76878,76909,76939,76969,76973,76978,77011,77015,77020,77051,77082,77086,77091,77122,77152,77183,77187,77192,77224,77255,77286,77313,77344,77376,77409,77440,77471,77503,77534,77542,77550,77554],{"__ignoreMap":28},[33,76365,76366,76368,76370,76372],{"class":35,"line":36},[33,76367,52550],{"class":47},[33,76369,52554],{"class":52553},[33,76371,52557],{"class":43},[33,76373,52560],{"class":47},[33,76375,76376,76378,76380,76382,76384,76386],{"class":35,"line":51},[33,76377,875],{"class":47},[33,76379,51888],{"class":52553},[33,76381,52569],{"class":43},[33,76383,73],{"class":47},[33,76385,52574],{"class":119},[33,76387,52560],{"class":47},[33,76389,76390],{"class":35,"line":57},[33,76391,160],{"emptyLinePlaceholder":159},[33,76393,76394,76396,76398],{"class":35,"line":64},[33,76395,875],{"class":47},[33,76397,52587],{"class":52553},[33,76399,52560],{"class":47},[33,76401,76402,76404,76406,76408,76410,76412],{"class":35,"line":83},[33,76403,53397],{"class":47},[33,76405,52597],{"class":52553},[33,76407,52600],{"class":43},[33,76409,73],{"class":47},[33,76411,52605],{"class":119},[33,76413,52560],{"class":47},[33,76415,76416,76418,76420,76422,76424,76426,76428,76430,76432],{"class":35,"line":89},[33,76417,53397],{"class":47},[33,76419,52597],{"class":52553},[33,76421,16171],{"class":43},[33,76423,73],{"class":47},[33,76425,52644],{"class":119},[33,76427,52624],{"class":43},[33,76429,73],{"class":47},[33,76431,52651],{"class":119},[33,76433,52560],{"class":47},[33,76435,76436,76438,76440,76442,76444],{"class":35,"line":98},[33,76437,53397],{"class":47},[33,76439,52660],{"class":52553},[33,76441,52663],{"class":47},[33,76443,52660],{"class":52553},[33,76445,52560],{"class":47},[33,76447,76448,76450,76452],{"class":35,"line":110},[33,76449,53038],{"class":47},[33,76451,52587],{"class":52553},[33,76453,52560],{"class":47},[33,76455,76456],{"class":35,"line":134},[33,76457,160],{"emptyLinePlaceholder":159},[33,76459,76460,76462,76464],{"class":35,"line":156},[33,76461,875],{"class":47},[33,76463,53053],{"class":52553},[33,76465,52560],{"class":47},[33,76467,76468,76470,76472],{"class":35,"line":163},[33,76469,53397],{"class":47},[33,76471,53066],{"class":52553},[33,76473,52560],{"class":47},[33,76475,76476],{"class":35,"line":169},[33,76477,76478],{"class":60},"    \u002F\u002F 元字符中\n",[33,76480,76481,76483,76485,76487,76489,76492,76494,76496,76499,76501,76504,76507],{"class":35,"line":175},[33,76482,75006],{"class":47},[33,76484,59500],{"class":43},[33,76486,345],{"class":47},[33,76488,2184],{"class":119},[33,76490,76491],{"class":49230},"哈",[33,76493,2184],{"class":119},[33,76495,2158],{"class":47},[33,76497,76498],{"class":43},"test",[33,76500,345],{"class":47},[33,76502,76503],{"class":119},"'哈'",[33,76505,76506],{"class":47},"))  ",[33,76508,76509],{"class":60},"\u002F\u002Ftrue\n",[33,76511,76512,76514,76516,76518,76520,76522,76524,76526,76528,76530,76533,76535],{"class":35,"line":181},[33,76513,75006],{"class":47},[33,76515,59500],{"class":43},[33,76517,345],{"class":47},[33,76519,2184],{"class":119},[33,76521,76491],{"class":49230},[33,76523,2184],{"class":119},[33,76525,2158],{"class":47},[33,76527,76498],{"class":43},[33,76529,345],{"class":47},[33,76531,76532],{"class":119},"'哈哈'",[33,76534,76506],{"class":47},[33,76536,76509],{"class":60},[33,76538,76539,76541,76543,76545,76547,76549,76551,76553,76555,76557,76560,76563],{"class":35,"line":196},[33,76540,75006],{"class":47},[33,76542,59500],{"class":43},[33,76544,345],{"class":47},[33,76546,2184],{"class":119},[33,76548,76491],{"class":49230},[33,76550,2184],{"class":119},[33,76552,2158],{"class":47},[33,76554,76498],{"class":43},[33,76556,345],{"class":47},[33,76558,76559],{"class":119},"'二哈'",[33,76561,76562],{"class":47},"))   ",[33,76564,76509],{"class":60},[33,76566,76567],{"class":35,"line":213},[33,76568,160],{"emptyLinePlaceholder":159},[33,76570,76571],{"class":35,"line":228},[33,76572,76573],{"class":60},"    \u002F\u002F 1.边界符\n",[33,76575,76576,76578,76580,76582,76584,76586,76588,76590,76592,76594,76596,76598,76600],{"class":35,"line":1345},[33,76577,75006],{"class":47},[33,76579,59500],{"class":43},[33,76581,345],{"class":47},[33,76583,2184],{"class":119},[33,76585,2561],{"class":39},[33,76587,76491],{"class":49230},[33,76589,2184],{"class":119},[33,76591,2158],{"class":47},[33,76593,76498],{"class":43},[33,76595,345],{"class":47},[33,76597,76503],{"class":119},[33,76599,76506],{"class":47},[33,76601,76509],{"class":60},[33,76603,76604,76606,76608,76610,76612,76614,76616,76618,76620,76622,76624,76626,76628,76630],{"class":35,"line":1350},[33,76605,75006],{"class":47},[33,76607,59500],{"class":43},[33,76609,345],{"class":47},[33,76611,2184],{"class":119},[33,76613,2561],{"class":39},[33,76615,76491],{"class":49230},[33,76617,1915],{"class":39},[33,76619,2184],{"class":119},[33,76621,2158],{"class":47},[33,76623,76498],{"class":43},[33,76625,345],{"class":47},[33,76627,76532],{"class":119},[33,76629,76506],{"class":47},[33,76631,76632],{"class":60},"\u002F\u002Ffalse\n",[33,76634,76635],{"class":35,"line":1359},[33,76636,76637],{"class":60},"    \u002F\u002F 2.量词\n",[33,76639,76640],{"class":35,"line":1364},[33,76641,76642],{"class":60},"    \u002F\u002F 量词 * 类似于 >= 0\n",[33,76644,76645,76647,76649,76651,76653,76655,76657,76660,76662,76664,76666,76668,76670,76672],{"class":35,"line":1370},[33,76646,75006],{"class":47},[33,76648,59500],{"class":43},[33,76650,345],{"class":47},[33,76652,2184],{"class":119},[33,76654,2561],{"class":39},[33,76656,76491],{"class":49230},[33,76658,76659],{"class":39},"*$",[33,76661,2184],{"class":119},[33,76663,2158],{"class":47},[33,76665,76498],{"class":43},[33,76667,345],{"class":47},[33,76669,76532],{"class":119},[33,76671,76506],{"class":47},[33,76673,76509],{"class":60},[33,76675,76676,76678,76680,76682,76684,76686,76688,76690,76692,76694,76696,76698,76701,76703],{"class":35,"line":1425},[33,76677,75006],{"class":47},[33,76679,59500],{"class":43},[33,76681,345],{"class":47},[33,76683,2184],{"class":119},[33,76685,2561],{"class":39},[33,76687,76491],{"class":49230},[33,76689,76659],{"class":39},[33,76691,2184],{"class":119},[33,76693,2158],{"class":47},[33,76695,76498],{"class":43},[33,76697,345],{"class":47},[33,76699,76700],{"class":119},"'二哈好傻'",[33,76702,76506],{"class":47},[33,76704,76705],{"class":60},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[33,76707,76708,76710,76712,76714,76716,76718,76720,76722,76724,76726,76728,76730,76733,76735],{"class":35,"line":1438},[33,76709,75006],{"class":47},[33,76711,59500],{"class":43},[33,76713,345],{"class":47},[33,76715,2184],{"class":119},[33,76717,2561],{"class":39},[33,76719,76491],{"class":49230},[33,76721,76659],{"class":39},[33,76723,2184],{"class":119},[33,76725,2158],{"class":47},[33,76727,76498],{"class":43},[33,76729,345],{"class":47},[33,76731,76732],{"class":119},"'哈好哈'",[33,76734,76562],{"class":47},[33,76736,76737],{"class":60},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[33,76739,76740],{"class":35,"line":1451},[33,76741,160],{"emptyLinePlaceholder":159},[33,76743,76744],{"class":35,"line":1457},[33,76745,76746],{"class":60},"    \u002F\u002F +类似于>=1\n",[33,76748,76749,76751,76753,76755,76757,76759,76761,76764,76766,76768,76770,76772,76774,76776],{"class":35,"line":1466},[33,76750,75006],{"class":47},[33,76752,59500],{"class":43},[33,76754,345],{"class":47},[33,76756,2184],{"class":119},[33,76758,2561],{"class":39},[33,76760,76491],{"class":49230},[33,76762,76763],{"class":39},"+$",[33,76765,2184],{"class":119},[33,76767,2158],{"class":47},[33,76769,76498],{"class":43},[33,76771,345],{"class":47},[33,76773,76532],{"class":119},[33,76775,76506],{"class":47},[33,76777,76509],{"class":60},[33,76779,76780,76782,76784,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804,76806],{"class":35,"line":1471},[33,76781,75006],{"class":47},[33,76783,59500],{"class":43},[33,76785,345],{"class":47},[33,76787,2184],{"class":119},[33,76789,2561],{"class":39},[33,76791,76491],{"class":49230},[33,76793,76763],{"class":39},[33,76795,2184],{"class":119},[33,76797,2158],{"class":47},[33,76799,76498],{"class":43},[33,76801,345],{"class":47},[33,76803,76700],{"class":119},[33,76805,76506],{"class":47},[33,76807,76705],{"class":60},[33,76809,76810,76812,76814,76816,76818,76820,76822,76824,76826,76828,76830,76832,76834,76836],{"class":35,"line":1477},[33,76811,75006],{"class":47},[33,76813,59500],{"class":43},[33,76815,345],{"class":47},[33,76817,2184],{"class":119},[33,76819,2561],{"class":39},[33,76821,76491],{"class":49230},[33,76823,76763],{"class":39},[33,76825,2184],{"class":119},[33,76827,2158],{"class":47},[33,76829,76498],{"class":43},[33,76831,345],{"class":47},[33,76833,76732],{"class":119},[33,76835,76562],{"class":47},[33,76837,76632],{"class":60},[33,76839,76840],{"class":35,"line":1504},[33,76841,160],{"emptyLinePlaceholder":159},[33,76843,76844],{"class":35,"line":1509},[33,76845,76846],{"class":60},"    \u002F\u002F ?类似于0次或一次\n",[33,76848,76849,76851,76853,76855,76857,76859,76862,76864,76866,76868,76870,76872,76874,76876],{"class":35,"line":1525},[33,76850,75006],{"class":47},[33,76852,59500],{"class":43},[33,76854,345],{"class":47},[33,76856,2184],{"class":119},[33,76858,2561],{"class":39},[33,76860,76861],{"class":49230},"哈？",[33,76863,1915],{"class":39},[33,76865,2184],{"class":119},[33,76867,2158],{"class":47},[33,76869,76498],{"class":43},[33,76871,345],{"class":47},[33,76873,75481],{"class":119},[33,76875,76562],{"class":47},[33,76877,76509],{"class":60},[33,76879,76880,76882,76884,76886,76888,76890,76892,76895,76897,76899,76901,76903,76905,76907],{"class":35,"line":1535},[33,76881,75006],{"class":47},[33,76883,59500],{"class":43},[33,76885,345],{"class":47},[33,76887,2184],{"class":119},[33,76889,2561],{"class":39},[33,76891,76491],{"class":49230},[33,76893,76894],{"class":39},"?$",[33,76896,2184],{"class":119},[33,76898,2158],{"class":47},[33,76900,76498],{"class":43},[33,76902,345],{"class":47},[33,76904,76532],{"class":119},[33,76906,76506],{"class":47},[33,76908,76632],{"class":60},[33,76910,76911,76913,76915,76917,76919,76921,76923,76925,76927,76929,76931,76933,76935,76937],{"class":35,"line":1540},[33,76912,75006],{"class":47},[33,76914,59500],{"class":43},[33,76916,345],{"class":47},[33,76918,2184],{"class":119},[33,76920,2561],{"class":39},[33,76922,76491],{"class":49230},[33,76924,76894],{"class":39},[33,76926,2184],{"class":119},[33,76928,2158],{"class":47},[33,76930,76498],{"class":43},[33,76932,345],{"class":47},[33,76934,76700],{"class":119},[33,76936,76506],{"class":47},[33,76938,76705],{"class":60},[33,76940,76941,76943,76945,76947,76949,76951,76953,76955,76957,76959,76961,76963,76965,76967],{"class":35,"line":4027},[33,76942,75006],{"class":47},[33,76944,59500],{"class":43},[33,76946,345],{"class":47},[33,76948,2184],{"class":119},[33,76950,2561],{"class":39},[33,76952,76491],{"class":49230},[33,76954,76894],{"class":39},[33,76956,2184],{"class":119},[33,76958,2158],{"class":47},[33,76960,76498],{"class":43},[33,76962,345],{"class":47},[33,76964,76732],{"class":119},[33,76966,76506],{"class":47},[33,76968,76632],{"class":60},[33,76970,76971],{"class":35,"line":4032},[33,76972,160],{"emptyLinePlaceholder":159},[33,76974,76975],{"class":35,"line":9199},[33,76976,76977],{"class":60},"    \u002F\u002F {n}写几，就必须出现几次\n",[33,76979,76980,76982,76984,76986,76988,76990,76992,76995,76997,76999,77001,77003,77006,77009],{"class":35,"line":9223},[33,76981,75006],{"class":47},[33,76983,59500],{"class":43},[33,76985,345],{"class":47},[33,76987,2184],{"class":119},[33,76989,2561],{"class":39},[33,76991,76491],{"class":49230},[33,76993,76994],{"class":39},"{4}$",[33,76996,2184],{"class":119},[33,76998,2158],{"class":47},[33,77000,76498],{"class":43},[33,77002,345],{"class":47},[33,77004,77005],{"class":119},"'哈哈哈哈'",[33,77007,77008],{"class":47},")) ",[33,77010,76509],{"class":60},[33,77012,77013],{"class":35,"line":9228},[33,77014,160],{"emptyLinePlaceholder":159},[33,77016,77017],{"class":35,"line":9234},[33,77018,77019],{"class":60},"    \u002F\u002F {n,}大于等于n次\n",[33,77021,77022,77024,77026,77028,77030,77032,77034,77037,77039,77041,77043,77045,77047,77049],{"class":35,"line":9261},[33,77023,75006],{"class":47},[33,77025,59500],{"class":43},[33,77027,345],{"class":47},[33,77029,2184],{"class":119},[33,77031,2561],{"class":39},[33,77033,76491],{"class":49230},[33,77035,77036],{"class":39},"{4,}$",[33,77038,2184],{"class":119},[33,77040,2158],{"class":47},[33,77042,76498],{"class":43},[33,77044,345],{"class":47},[33,77046,77005],{"class":119},[33,77048,77008],{"class":47},[33,77050,76509],{"class":60},[33,77052,77053,77055,77057,77059,77061,77063,77065,77067,77069,77071,77073,77075,77078,77080],{"class":35,"line":9266},[33,77054,75006],{"class":47},[33,77056,59500],{"class":43},[33,77058,345],{"class":47},[33,77060,2184],{"class":119},[33,77062,2561],{"class":39},[33,77064,76491],{"class":49230},[33,77066,77036],{"class":39},[33,77068,2184],{"class":119},[33,77070,2158],{"class":47},[33,77072,76498],{"class":43},[33,77074,345],{"class":47},[33,77076,77077],{"class":119},"'哈哈哈哈哈'",[33,77079,77008],{"class":47},[33,77081,76509],{"class":60},[33,77083,77084],{"class":35,"line":9272},[33,77085,160],{"emptyLinePlaceholder":159},[33,77087,77088],{"class":35,"line":9284},[33,77089,77090],{"class":60},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[33,77092,77093,77095,77097,77099,77101,77103,77105,77108,77110,77112,77114,77116,77118,77120],{"class":35,"line":9296},[33,77094,75006],{"class":47},[33,77096,59500],{"class":43},[33,77098,345],{"class":47},[33,77100,2184],{"class":119},[33,77102,2561],{"class":39},[33,77104,76491],{"class":49230},[33,77106,77107],{"class":39},"{4,6}$",[33,77109,2184],{"class":119},[33,77111,2158],{"class":47},[33,77113,76498],{"class":43},[33,77115,345],{"class":47},[33,77117,77005],{"class":119},[33,77119,77008],{"class":47},[33,77121,76509],{"class":60},[33,77123,77124,77126,77128,77130,77132,77134,77136,77138,77140,77142,77144,77146,77148,77150],{"class":35,"line":9308},[33,77125,75006],{"class":47},[33,77127,59500],{"class":43},[33,77129,345],{"class":47},[33,77131,2184],{"class":119},[33,77133,2561],{"class":39},[33,77135,76491],{"class":49230},[33,77137,77107],{"class":39},[33,77139,2184],{"class":119},[33,77141,2158],{"class":47},[33,77143,76498],{"class":43},[33,77145,345],{"class":47},[33,77147,77077],{"class":119},[33,77149,77008],{"class":47},[33,77151,76509],{"class":60},[33,77153,77154,77156,77158,77160,77162,77164,77166,77168,77170,77172,77174,77176,77179,77181],{"class":35,"line":10967},[33,77155,75006],{"class":47},[33,77157,59500],{"class":43},[33,77159,345],{"class":47},[33,77161,2184],{"class":119},[33,77163,2561],{"class":39},[33,77165,76491],{"class":49230},[33,77167,77107],{"class":39},[33,77169,2184],{"class":119},[33,77171,2158],{"class":47},[33,77173,76498],{"class":43},[33,77175,345],{"class":47},[33,77177,77178],{"class":119},"'哈哈哈哈哈哈哈'",[33,77180,77008],{"class":47},[33,77182,76632],{"class":60},[33,77184,77185],{"class":35,"line":10992},[33,77186,160],{"emptyLinePlaceholder":159},[33,77188,77189],{"class":35,"line":11015},[33,77190,77191],{"class":60},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[33,77193,77194,77196,77198,77200,77202,77204,77207,77209,77211,77213,77215,77217,77220,77222],{"class":35,"line":11039},[33,77195,75006],{"class":47},[33,77197,59500],{"class":43},[33,77199,345],{"class":47},[33,77201,2184],{"class":119},[33,77203,2561],{"class":39},[33,77205,77206],{"class":76},"[abc]",[33,77208,1915],{"class":39},[33,77210,2184],{"class":119},[33,77212,2158],{"class":47},[33,77214,76498],{"class":43},[33,77216,345],{"class":47},[33,77218,77219],{"class":119},"'a'",[33,77221,76506],{"class":47},[33,77223,76509],{"class":60},[33,77225,77226,77228,77230,77232,77234,77236,77238,77240,77242,77244,77246,77248,77251,77253],{"class":35,"line":11044},[33,77227,75006],{"class":47},[33,77229,59500],{"class":43},[33,77231,345],{"class":47},[33,77233,2184],{"class":119},[33,77235,2561],{"class":39},[33,77237,77206],{"class":76},[33,77239,1915],{"class":39},[33,77241,2184],{"class":119},[33,77243,2158],{"class":47},[33,77245,76498],{"class":43},[33,77247,345],{"class":47},[33,77249,77250],{"class":119},"'b'",[33,77252,76506],{"class":47},[33,77254,76509],{"class":60},[33,77256,77257,77259,77261,77263,77265,77267,77269,77271,77273,77275,77277,77279,77282,77284],{"class":35,"line":11049},[33,77258,75006],{"class":47},[33,77260,59500],{"class":43},[33,77262,345],{"class":47},[33,77264,2184],{"class":119},[33,77266,2561],{"class":39},[33,77268,77206],{"class":76},[33,77270,1915],{"class":39},[33,77272,2184],{"class":119},[33,77274,2158],{"class":47},[33,77276,76498],{"class":43},[33,77278,345],{"class":47},[33,77280,77281],{"class":119},"'c'",[33,77283,76506],{"class":47},[33,77285,76509],{"class":60},[33,77287,77288,77290,77292,77294,77296,77298,77300,77302,77304,77306,77309,77311],{"class":35,"line":11054},[33,77289,75006],{"class":47},[33,77291,59500],{"class":43},[33,77293,345],{"class":47},[33,77295,2184],{"class":119},[33,77297,77206],{"class":76},[33,77299,2184],{"class":119},[33,77301,2158],{"class":47},[33,77303,76498],{"class":43},[33,77305,345],{"class":47},[33,77307,77308],{"class":119},"'ab'",[33,77310,76506],{"class":47},[33,77312,76509],{"class":60},[33,77314,77315,77317,77319,77321,77323,77325,77327,77329,77331,77333,77335,77337,77339,77341],{"class":35,"line":11063},[33,77316,75006],{"class":47},[33,77318,59500],{"class":43},[33,77320,345],{"class":47},[33,77322,2184],{"class":119},[33,77324,2561],{"class":39},[33,77326,77206],{"class":76},[33,77328,1915],{"class":39},[33,77330,2184],{"class":119},[33,77332,2158],{"class":47},[33,77334,76498],{"class":43},[33,77336,345],{"class":47},[33,77338,77308],{"class":119},[33,77340,76506],{"class":47},[33,77342,77343],{"class":60},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[33,77345,77346,77348,77350,77352,77354,77356,77358,77361,77363,77365,77367,77369,77371,77373],{"class":35,"line":11068},[33,77347,75006],{"class":47},[33,77349,59500],{"class":43},[33,77351,345],{"class":47},[33,77353,2184],{"class":119},[33,77355,2561],{"class":39},[33,77357,77206],{"class":76},[33,77359,77360],{"class":39},"{2}$",[33,77362,2184],{"class":119},[33,77364,2158],{"class":47},[33,77366,76498],{"class":43},[33,77368,345],{"class":47},[33,77370,77308],{"class":119},[33,77372,76506],{"class":47},[33,77374,77375],{"class":60},"\u002F\u002Ftrue   可以选两个\n",[33,77377,77378,77380,77382,77384,77386,77388,77391,77393,77395,77397,77399,77401,77404,77406],{"class":35,"line":11074},[33,77379,75006],{"class":47},[33,77381,59500],{"class":43},[33,77383,345],{"class":47},[33,77385,2184],{"class":119},[33,77387,2561],{"class":39},[33,77389,77390],{"class":76},"[a-z]",[33,77392,1915],{"class":39},[33,77394,2184],{"class":119},[33,77396,2158],{"class":47},[33,77398,76498],{"class":43},[33,77400,345],{"class":47},[33,77402,77403],{"class":119},"'p'",[33,77405,76562],{"class":47},[33,77407,77408],{"class":60},"\u002F\u002Ftrue   依然只能选一个\n",[33,77410,77411,77413,77415,77417,77419,77421,77424,77426,77428,77430,77432,77434,77436,77438],{"class":35,"line":11095},[33,77412,75006],{"class":47},[33,77414,59500],{"class":43},[33,77416,345],{"class":47},[33,77418,2184],{"class":119},[33,77420,2561],{"class":39},[33,77422,77423],{"class":76},"[A-Z]",[33,77425,1915],{"class":39},[33,77427,2184],{"class":119},[33,77429,2158],{"class":47},[33,77431,76498],{"class":43},[33,77433,345],{"class":47},[33,77435,77403],{"class":119},[33,77437,76562],{"class":47},[33,77439,76632],{"class":60},[33,77441,77442,77444,77446,77448,77450,77452,77454,77456,77458,77460,77462,77464,77467,77469],{"class":35,"line":11101},[33,77443,75006],{"class":47},[33,77445,59500],{"class":43},[33,77447,345],{"class":47},[33,77449,2184],{"class":119},[33,77451,2561],{"class":39},[33,77453,77423],{"class":76},[33,77455,1915],{"class":39},[33,77457,2184],{"class":119},[33,77459,2158],{"class":47},[33,77461,76498],{"class":43},[33,77463,345],{"class":47},[33,77465,77466],{"class":119},"'P'",[33,77468,76562],{"class":47},[33,77470,76509],{"class":60},[33,77472,77473,77475,77477,77479,77481,77483,77486,77488,77490,77492,77494,77496,77499,77501],{"class":35,"line":11115},[33,77474,75006],{"class":47},[33,77476,59500],{"class":43},[33,77478,345],{"class":47},[33,77480,2184],{"class":119},[33,77482,2561],{"class":39},[33,77484,77485],{"class":76},"[0-9]",[33,77487,1915],{"class":39},[33,77489,2184],{"class":119},[33,77491,2158],{"class":47},[33,77493,76498],{"class":43},[33,77495,345],{"class":47},[33,77497,77498],{"class":119},"'0'",[33,77500,76562],{"class":47},[33,77502,76509],{"class":60},[33,77504,77505,77507,77509,77511,77513,77515,77518,77520,77522,77524,77526,77528,77530,77532],{"class":35,"line":11121},[33,77506,75006],{"class":47},[33,77508,59500],{"class":43},[33,77510,345],{"class":47},[33,77512,2184],{"class":119},[33,77514,2561],{"class":39},[33,77516,77517],{"class":76},"[a-zA-Z0-9]",[33,77519,1915],{"class":39},[33,77521,2184],{"class":119},[33,77523,2158],{"class":47},[33,77525,76498],{"class":43},[33,77527,345],{"class":47},[33,77529,77403],{"class":119},[33,77531,76506],{"class":47},[33,77533,76509],{"class":60},[33,77535,77536,77538,77540],{"class":35,"line":11148},[33,77537,53670],{"class":47},[33,77539,53066],{"class":52553},[33,77541,52560],{"class":47},[33,77543,77544,77546,77548],{"class":35,"line":11157},[33,77545,53038],{"class":47},[33,77547,53053],{"class":52553},[33,77549,52560],{"class":47},[33,77551,77552],{"class":35,"line":11163},[33,77553,160],{"emptyLinePlaceholder":159},[33,77555,77556,77558,77560],{"class":35,"line":11171},[33,77557,53038],{"class":47},[33,77559,51888],{"class":52553},[33,77561,52560],{"class":47},[23249,77563,77565],{"id":77564},"_3624-修饰符","3.6.2.4 修饰符",[14,77567,77568],{},[2918,77569],{"alt":28,"src":77570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,77572,77573],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,77575,77576],{},[2918,77577],{"alt":28,"src":77578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[23,77580,77582],{"className":51886,"code":77581,"language":51888,"meta":28,"style":28},"\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",[30,77583,77584,77594,77608,77616,77630,77650,77662,77670,77678,77686,77718,77749,77754,77786,77797,77830,77839,77847,77855],{"__ignoreMap":28},[33,77585,77586,77588,77590,77592],{"class":35,"line":36},[33,77587,52550],{"class":47},[33,77589,52554],{"class":52553},[33,77591,52557],{"class":43},[33,77593,52560],{"class":47},[33,77595,77596,77598,77600,77602,77604,77606],{"class":35,"line":51},[33,77597,875],{"class":47},[33,77599,51888],{"class":52553},[33,77601,52569],{"class":43},[33,77603,73],{"class":47},[33,77605,52574],{"class":119},[33,77607,52560],{"class":47},[33,77609,77610,77612,77614],{"class":35,"line":57},[33,77611,875],{"class":47},[33,77613,52587],{"class":52553},[33,77615,52560],{"class":47},[33,77617,77618,77620,77622,77624,77626,77628],{"class":35,"line":64},[33,77619,53397],{"class":47},[33,77621,52597],{"class":52553},[33,77623,52600],{"class":43},[33,77625,73],{"class":47},[33,77627,52605],{"class":119},[33,77629,52560],{"class":47},[33,77631,77632,77634,77636,77638,77640,77642,77644,77646,77648],{"class":35,"line":83},[33,77633,53397],{"class":47},[33,77635,52597],{"class":52553},[33,77637,16171],{"class":43},[33,77639,73],{"class":47},[33,77641,52644],{"class":119},[33,77643,52624],{"class":43},[33,77645,73],{"class":47},[33,77647,52651],{"class":119},[33,77649,52560],{"class":47},[33,77651,77652,77654,77656,77658,77660],{"class":35,"line":89},[33,77653,53397],{"class":47},[33,77655,52660],{"class":52553},[33,77657,52663],{"class":47},[33,77659,52660],{"class":52553},[33,77661,52560],{"class":47},[33,77663,77664,77666,77668],{"class":35,"line":98},[33,77665,53038],{"class":47},[33,77667,52587],{"class":52553},[33,77669,52560],{"class":47},[33,77671,77672,77674,77676],{"class":35,"line":110},[33,77673,875],{"class":47},[33,77675,53053],{"class":52553},[33,77677,52560],{"class":47},[33,77679,77680,77682,77684],{"class":35,"line":134},[33,77681,53397],{"class":47},[33,77683,53066],{"class":52553},[33,77685,52560],{"class":47},[33,77687,77688,77690,77692,77694,77696,77698,77701,77703,77705,77707,77709,77711,77714,77716],{"class":35,"line":156},[33,77689,75006],{"class":47},[33,77691,59500],{"class":43},[33,77693,345],{"class":47},[33,77695,2184],{"class":119},[33,77697,2561],{"class":39},[33,77699,77700],{"class":49230},"java",[33,77702,1915],{"class":39},[33,77704,2184],{"class":119},[33,77706,2158],{"class":47},[33,77708,76498],{"class":43},[33,77710,345],{"class":47},[33,77712,77713],{"class":119},"'java'",[33,77715,77008],{"class":47},[33,77717,76509],{"class":60},[33,77719,77720,77722,77724,77726,77728,77730,77732,77734,77736,77738,77740,77742,77745,77747],{"class":35,"line":163},[33,77721,75006],{"class":47},[33,77723,59500],{"class":43},[33,77725,345],{"class":47},[33,77727,2184],{"class":119},[33,77729,2561],{"class":39},[33,77731,77700],{"class":49230},[33,77733,1915],{"class":39},[33,77735,2184],{"class":119},[33,77737,2158],{"class":47},[33,77739,76498],{"class":43},[33,77741,345],{"class":47},[33,77743,77744],{"class":119},"'Java'",[33,77746,77008],{"class":47},[33,77748,76632],{"class":60},[33,77750,77751],{"class":35,"line":169},[33,77752,77753],{"class":60},"    \u002F\u002F 不区分大小写、\n",[33,77755,77756,77758,77760,77762,77764,77766,77768,77770,77772,77774,77776,77778,77780,77782,77784],{"class":35,"line":175},[33,77757,75006],{"class":47},[33,77759,59500],{"class":43},[33,77761,345],{"class":47},[33,77763,2184],{"class":119},[33,77765,2561],{"class":39},[33,77767,77700],{"class":49230},[33,77769,1915],{"class":39},[33,77771,2184],{"class":119},[33,77773,1239],{"class":39},[33,77775,2158],{"class":47},[33,77777,76498],{"class":43},[33,77779,345],{"class":47},[33,77781,77744],{"class":119},[33,77783,77008],{"class":47},[33,77785,76509],{"class":60},[33,77787,77788,77790,77792,77794],{"class":35,"line":181},[33,77789,12472],{"class":39},[33,77791,75172],{"class":76},[33,77793,14815],{"class":39},[33,77795,77796],{"class":119}," 'java是一门编程语言，学完java工资很高'\n",[33,77798,77799,77801,77804,77806,77809,77812,77814,77816,77818,77820,77823,77825,77828],{"class":35,"line":196},[33,77800,12472],{"class":39},[33,77802,77803],{"class":76}," result",[33,77805,14815],{"class":39},[33,77807,77808],{"class":47}," str.",[33,77810,77811],{"class":43},"replace",[33,77813,345],{"class":47},[33,77815,2184],{"class":119},[33,77817,77700],{"class":49230},[33,77819,2184],{"class":119},[33,77821,77822],{"class":39},"ig",[33,77824,13686],{"class":47},[33,77826,77827],{"class":119},"'前端'",[33,77829,884],{"class":47},[33,77831,77832,77834,77836],{"class":35,"line":213},[33,77833,75006],{"class":47},[33,77835,59500],{"class":43},[33,77837,77838],{"class":47},"(result)\n",[33,77840,77841,77843,77845],{"class":35,"line":228},[33,77842,53670],{"class":47},[33,77844,53066],{"class":52553},[33,77846,52560],{"class":47},[33,77848,77849,77851,77853],{"class":35,"line":1345},[33,77850,53038],{"class":47},[33,77852,53053],{"class":52553},[33,77854,52560],{"class":47},[33,77856,77857,77859,77861],{"class":35,"line":1350},[33,77858,53038],{"class":47},[33,77860,51888],{"class":52553},[33,77862,52560],{"class":47},[1544,77864,77865],{},"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":28,"searchDepth":51,"depth":51,"links":77867},[77868,77878,77890,77907,77914,77922],{"id":54613,"depth":51,"text":54614,"children":77869},[77870,77871,77872,77873,77874,77875,77876,77877],{"id":54617,"depth":57,"text":54618},{"id":54650,"depth":57,"text":54651},{"id":54689,"depth":57,"text":54690},{"id":54847,"depth":57,"text":54848},{"id":54895,"depth":57,"text":54896},{"id":55032,"depth":57,"text":55033},{"id":55354,"depth":57,"text":55355},{"id":58342,"depth":57,"text":58343},{"id":58370,"depth":51,"text":58371,"children":77879},[77880,77881,77882,77883,77884,77885,77886,77887,77888,77889],{"id":58374,"depth":57,"text":58375},{"id":58397,"depth":57,"text":58398},{"id":59312,"depth":57,"text":59313},{"id":60002,"depth":57,"text":60003},{"id":60284,"depth":57,"text":60285},{"id":64445,"depth":57,"text":64446},{"id":64615,"depth":57,"text":64616},{"id":64743,"depth":57,"text":64744},{"id":64768,"depth":57,"text":64769},{"id":66157,"depth":57,"text":66158},{"id":67310,"depth":51,"text":67311,"children":77891},[77892,77893,77894,77895,77896,77897,77898,77899,77900,77901,77902,77903,77904,77905,77906],{"id":67314,"depth":57,"text":67315},{"id":67968,"depth":57,"text":67969},{"id":69663,"depth":57,"text":69664},{"id":69704,"depth":57,"text":69705},{"id":69746,"depth":57,"text":69747},{"id":69760,"depth":57,"text":69761},{"id":69809,"depth":57,"text":69810},{"id":69821,"depth":57,"text":69822},{"id":69836,"depth":57,"text":69837},{"id":69872,"depth":57,"text":69873},{"id":69953,"depth":57,"text":69954},{"id":70081,"depth":57,"text":70082},{"id":70093,"depth":57,"text":70094},{"id":70112,"depth":57,"text":70113},{"id":72223,"depth":57,"text":72224},{"id":72242,"depth":51,"text":72243,"children":77908},[77909,77910,77911,77912,77913],{"id":72263,"depth":57,"text":72264},{"id":72283,"depth":57,"text":72284},{"id":72332,"depth":57,"text":72333},{"id":72457,"depth":57,"text":72458},{"id":72638,"depth":57,"text":72639},{"id":72656,"depth":51,"text":72657,"children":77915},[77916,77917,77918,77919,77920,77921],{"id":72671,"depth":57,"text":72672},{"id":72730,"depth":57,"text":72731},{"id":72754,"depth":57,"text":72755},{"id":73074,"depth":57,"text":73075},{"id":73106,"depth":57,"text":73107},{"id":73129,"depth":57,"text":73130},{"id":76197,"depth":51,"text":76198,"children":77923},[77924,77925],{"id":76231,"depth":57,"text":76232},{"id":76270,"depth":57,"text":76271},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54585,"description":24628},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77932,"title":77933,"body":77934,"description":24628,"extension":1557,"meta":94071,"navigation":159,"path":94072,"seo":94073,"stem":94074,"__hash__":94075},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77935,"toc":94007},[77936,77939,77942,77946,77950,77955,77960,77971,77975,77980,77983,77987,77990,77995,77999,78003,78006,78011,78014,78018,78021,78029,78032,78036,78041,78046,78049,78053,78058,78063,78066,78070,78075,78078,78083,78086,78091,78094,78099,78104,78107,78110,78114,78119,78124,78127,78131,78135,78138,78141,78144,78148,78152,78157,78162,78165,78169,78174,78179,78182,78185,78188,78191,78194,78197,78200,78203,78206,78211,78215,78220,78225,78228,78231,78234,78237,78240,78243,78246,78249,78253,78257,78260,78263,78266,78271,78273,78276,78279,78282,78285,78288,78291,78294,78297,78300,78303,78306,78309,78312,78317,78322,78327,78330,78334,78337,78342,78346,78348,78359,78364,78465,78468,78471,78474,78477,78480,78483,78486,78489,78491,78494,78497,78500,78503,78506,78508,78511,78514,78517,78520,78523,78526,78528,78531,78533,78535,78538,78542,78546,78549,78552,78555,78558,78561,78564,78567,78570,78573,78578,78698,78701,78704,78709,78712,78715,78718,78721,78726,78729,78732,78735,78738,78743,78746,78846,78911,78985,78989,78992,78995,78999,79002,79016,79045,79048,79051,79054,79057,79060,79063,79066,79068,79071,79074,79077,79080,79084,79089,79093,79098,79173,79176,79359,79362,79365,79368,79371,79374,79376,79379,79382,79385,79388,79391,79394,79396,79400,79403,79408,79411,79414,79417,79420,79422,79427,79430,79433,79436,79439,79441,79446,79449,79452,79454,79456,79459,79463,79466,79469,79474,79477,79480,79483,79533,79538,79542,79547,79550,79619,79622,79631,79635,79640,79643,79646,79654,79657,79674,81476,81480,81484,81489,81492,81496,81502,81508,81660,81665,81670,81673,81676,81679,81682,81685,81688,81691,81694,81697,81700,81703,81706,81711,81715,81718,81729,81733,81738,81741,81744,81747,81750,81753,81755,81758,81761,81764,81767,81769,81786,81789,81793,81796,81801,81806,81809,81812,81816,81819,81822,81831,81834,81838,81841,81846,81851,81918,81922,81925,81928,81933,81938,82024,82029,82033,82036,82039,82054,82057,82062,82066,82071,82180,82183,82194,82344,82348,82353,82462,82466,82471,82476,82481,82484,82491,82511,82547,82711,82716,82719,82724,82731,82734,82737,82740,82799,82855,82911,82915,82920,83235,83238,83242,83245,83250,83359,83364,83368,83373,83377,83448,83452,83454,83457,83460,83498,83774,83778,83795,83861,83895,83899,83902,83907,83936,83943,83952,83957,83972,83977,83986,83989,84126,84130,84192,84196,84201,84446,84450,84455,84458,84461,84464,84467,84471,84476,86057,86061,86065,86071,86074,86079,86083,86086,86091,86094,86105,86109,86114,86118,86123,86128,86131,86136,86140,86144,86147,86152,86157,86160,86163,86166,86288,86293,86395,86398,86401,86405,86410,86582,86587,86591,86594,86599,86665,86670,86673,86804,86807,86812,86815,86818,86909,86914,86917,86920,86923,86926,86931,86936,86939,86944,86949,86954,86958,86961,86964,86969,86974,86979,86984,87038,87041,87044,87049,87052,87055,87060,87065,87070,87074,87079,87093,87098,87101,87106,87110,87115,87120,87125,87130,87135,87140,87145,87150,87153,87157,87162,87165,87168,87171,87176,87181,87184,87187,87191,87194,87197,87202,87207,87212,87217,87220,87225,87230,87291,87296,87299,87304,88545,88550,88554,88558,88563,88566,88571,88576,88579,88584,88586,88591,88595,88598,88601,88612,88616,88621,88626,88681,88686,88691,88696,88907,88912,88916,88921,88924,88926,88929,88932,89379,89384,89391,89397,89400,89403,89667,89672,89676,89941,89946,89950,89955,89960,89965,89970,90301,90304,90309,90314,90317,90321,90325,90330,90335,90340,90345,90350,90355,90359,90362,90367,90372,90375,90449,90454,90459,90464,90466,90469,90839,90844,90849,90854,90857,90860,90962,90967,90972,91075,91079,91084,91088,91092,91097,91102,91105,91110,91113,91116,91509,91514,91517,91520,91523,91526,92046,92050,92055,92060,92065,92068,92073,92076,92079,92461,92466,92468,92470,92473,92476,92988,92992,93053,93056,93059,93062,93066,93069,93074,93079,94004],[10,77937,77933],{"id":77938},"_4js进阶",[14,77940,77941],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[18,77943,77945],{"id":77944},"_41-作用域","4.1 作用域",[1599,77947,77949],{"id":77948},"_411-局部作用域","4.1.1 局部作用域",[14,77951,77952],{},[2918,77953],{"alt":28,"src":77954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77956,77957],{},[2918,77958],{"alt":28,"src":77959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[561,77961,77962,77965,77968],{},[564,77963,77964],{},"函数作用域在函数内部",[564,77966,77967],{},"块级作用域在{}",[564,77969,77970],{},"对象的那个{}不是作用域，不是块作用域",[1599,77972,77974],{"id":77973},"_412-全局作用域","4.1.2 全局作用域",[14,77976,77977],{},[2918,77978],{"alt":28,"src":77979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77981,77982],{},"window.a=10不要这样写",[1599,77984,77986],{"id":77985},"_413-作用域链","4.1.3 作用域链",[14,77988,77989],{},"变量查找机制",[14,77991,77992],{},[2918,77993],{"alt":28,"src":77994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[18,77996,77998],{"id":77997},"_42-垃圾回收机制","4.2 垃圾回收机制",[1599,78000,78002],{"id":78001},"_421-大体介绍","4.2.1 大体介绍",[14,78004,78005],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,78007,78008],{},[2918,78009],{"alt":28,"src":78010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,78012,78013],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[1599,78015,78017],{"id":78016},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,78019,78020],{},"堆栈空间分配区别：",[574,78022,78023,78026],{},[564,78024,78025],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[564,78027,78028],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,78030,78031],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23249,78033,78035],{"id":78034},"_4221-引用计数","4.2.2.1 引用计数",[14,78037,78038],{},[2918,78039],{"alt":28,"src":78040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,78042,78043],{},[2918,78044],{"alt":28,"src":78045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,78047,78048],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23249,78050,78052],{"id":78051},"_4222-标记清除法","4.2.2.2 标记清除法",[14,78054,78055],{},[2918,78056],{"alt":28,"src":78057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,78059,78060],{},[2918,78061],{"alt":28,"src":78062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,78064,78065],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[18,78067,78069],{"id":78068},"_43-闭包","4.3 闭包",[14,78071,78072],{},[2918,78073],{"alt":28,"src":78074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,78076,78077],{},"闭包：内层函数+外层函数的变量",[14,78079,78080],{},[2918,78081],{"alt":28,"src":78082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,78084,78085],{},"closure就是闭包",[14,78087,78088],{},[2918,78089],{"alt":28,"src":78090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,78092,78093],{},"内层函数必须包含外层函数的变量才是闭包",[14,78095,78096],{},[2918,78097],{"alt":28,"src":78098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,78100,78101],{},[2918,78102],{"alt":28,"src":78103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,78105,78106],{},"闭包可能会引起内存泄漏",[14,78108,78109],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[18,78111,78113],{"id":78112},"_44-变量提升","4.4 变量提升",[14,78115,78116],{},[2918,78117],{"alt":28,"src":78118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,78120,78121],{},[2918,78122],{"alt":28,"src":78123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,78125,78126],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[18,78128,78130],{"id":78129},"_45-函数进阶","4.5 函数进阶",[1599,78132,78134],{"id":78133},"_451-函数提升","4.5.1 函数提升",[14,78136,78137],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,78139,78140],{},"只提升函数声明，不提升函数调用",[53066,78142,78143],{},"\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",[1599,78145,78147],{"id":78146},"_452-函数参数","4.5.2 函数参数",[23249,78149,78151],{"id":78150},"_4521-动态参数","4.5.2.1 动态参数",[14,78153,78154],{},[2918,78155],{"alt":28,"src":78156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,78158,78159],{},[2918,78160],{"alt":28,"src":78161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,78163,78164],{},"箭头函数里边没有arguments",[23249,78166,78168],{"id":78167},"_4522-剩余参数","4.5.2.2 剩余参数",[14,78170,78171],{},[2918,78172],{"alt":28,"src":78173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,78175,78176],{},[2918,78177],{"alt":28,"src":78178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,78180,78181],{},"剩余参数使用的时候不需要写...",[14,78183,78184],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,78186,78187],{},"  function getSum(a,b,...arr) {",[14,78189,78190],{},"  console.log(11)",[14,78192,78193],{},"  }",[14,78195,78196],{},"  getSum(1,2,3,4)",[14,78198,78199],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,78201,78202],{},"  getSum(1,2)",[14,78204,78205],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,78207,78208],{},[2918,78209],{"alt":28,"src":78210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23249,78212,78214],{"id":78213},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,78216,78217],{},[2918,78218],{"alt":28,"src":78219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,78221,78222],{},[2918,78223],{"alt":28,"src":78224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,78226,78227],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,78229,78230],{},"展开运算符可以用于数组之间的合并：",[14,78232,78233],{},"const arr1 = [1, 2, 3]",[14,78235,78236],{},"const arr2 = [3, 4, 5]",[14,78238,78239],{},"const arr = [...arr1, ...arr2]",[14,78241,78242],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,78244,78245],{},"剩余参数：函数参数使用，得到真数组",[14,78247,78248],{},"展开运算符：数组中使用，数组展开",[1599,78250,78252],{"id":78251},"_453-箭头函数","4.5.3 箭头函数",[23249,78254,78256],{"id":78255},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,78258,78259],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,78261,78262],{},"它不是万能的！！！",[14,78264,78265],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,78267,78268],{},[2918,78269],{"alt":28,"src":78270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,78272,1656],{},[14,78274,78275],{},"① 只有一个形参的时候，可以省略小括号：",[14,78277,78278],{},"const fn=x=>{console.log(x)}",[14,78280,78281],{},"② 只有一行代码时可以省略大括号：",[14,78283,78284],{},"const fn=x=>console.log(11)",[14,78286,78287],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,78289,78290],{},"const fn=x=>x+x",[14,78292,78293],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,78295,78296],{},"⑤ 阻止表单默认提交：",[14,78298,78299],{},"const form = document.querySelector('form')",[14,78301,78302],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,78304,78305],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,78307,78308],{},"const fn=uname=>({uname:uname})",[14,78310,78311],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,78313,78314],{},[2918,78315],{"alt":28,"src":78316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,78318,78319],{},[2918,78320],{"alt":28,"src":78321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,78323,78324],{},[2918,78325],{"alt":28,"src":78326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,78328,78329],{},"一定不要忘记用()，有()就理解为自带return",[23249,78331,78333],{"id":78332},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,78335,78336],{},"箭头函数是没有动态参数的arguments",[14,78338,78339],{},[2918,78340],{"alt":28,"src":78341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23249,78343,78345],{"id":78344},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,78347,12583],{},[574,78349,78350,78353,78356],{},[564,78351,78352],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[564,78354,78355],{},"事件回调函数使用箭头函数时，this 为全局的 window",[564,78357,78358],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,78360,78361],{},[2918,78362],{"alt":28,"src":78363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[23,78365,78367],{"className":54320,"code":78366,"language":54322,"meta":28,"style":28},"  \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",[30,78368,78369,78377,78382,78387,78392,78397,78402,78406,78411,78415,78419,78424,78429,78434,78438,78442,78447,78452,78457],{"__ignoreMap":28},[33,78370,78371,78373,78375],{"class":35,"line":36},[33,78372,53397],{"class":47},[33,78374,53066],{"class":52553},[33,78376,52560],{"class":47},[33,78378,78379],{"class":35,"line":51},[33,78380,78381],{"class":47},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[33,78383,78384],{"class":35,"line":57},[33,78385,78386],{"class":47},"    console.log(this) \u002F\u002F指向window\n",[33,78388,78389],{"class":35,"line":64},[33,78390,78391],{"class":47},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[33,78393,78394],{"class":35,"line":83},[33,78395,78396],{"class":47},"    function fn() {\n",[33,78398,78399],{"class":35,"line":89},[33,78400,78401],{"class":47},"      console.log(this)  \u002F\u002F指向window\n",[33,78403,78404],{"class":35,"line":98},[33,78405,916],{"class":47},[33,78407,78408],{"class":35,"line":110},[33,78409,78410],{"class":47},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[33,78412,78413],{"class":35,"line":134},[33,78414,160],{"emptyLinePlaceholder":159},[33,78416,78417],{"class":35,"line":156},[33,78418,72776],{"class":47},[33,78420,78421],{"class":35,"line":163},[33,78422,78423],{"class":47},"      name: 'andy',\n",[33,78425,78426],{"class":35,"line":169},[33,78427,78428],{"class":47},"      sayHai: function () {\n",[33,78430,78431],{"class":35,"line":175},[33,78432,78433],{"class":47},"        console.log(this)\n",[33,78435,78436],{"class":35,"line":181},[33,78437,53651],{"class":47},[33,78439,78440],{"class":35,"line":196},[33,78441,916],{"class":47},[33,78443,78444],{"class":35,"line":213},[33,78445,78446],{"class":47},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[33,78448,78449],{"class":35,"line":228},[33,78450,78451],{"class":47},"    \u002F\u002F 2.箭头函数的this\n",[33,78453,78454],{"class":35,"line":1345},[33,78455,78456],{"class":47},"    const fn = () => console.log(this)\n",[33,78458,78459,78461,78463],{"class":35,"line":1350},[33,78460,53670],{"class":47},[33,78462,53066],{"class":52553},[33,78464,52560],{"class":47},[14,78466,78467],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,78469,78470],{},"const fn = () => console.log(this)",[14,78472,78473],{},"fn() \u002F\u002F指向window",[14,78475,78476],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,78478,78479],{},"①",[14,78481,78482],{},"const obj = {",[14,78484,78485],{},"uname: 'pink老师',",[14,78487,78488],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,78490,2542],{},[14,78492,78493],{},"调用对象里边的函数",[14,78495,78496],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,78498,78499],{},"obj.sayHai()",[14,78501,78502],{},"②",[14,78504,78505],{},"const obj1 = {",[14,78507,78485],{},[14,78509,78510],{},"sayHai: function () {",[14,78512,78513],{},"let i = 10",[14,78515,78516],{},"const count = () => {",[14,78518,78519],{},"console.log(this)",[14,78521,78522],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,78524,78525],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,78527,2542],{},[14,78529,78530],{},"count()",[14,78532,2542],{},[14,78534,2542],{},[14,78536,78537],{},"obj1.sayHai()",[18,78539,78541],{"id":78540},"_46-解构赋值","4.6 解构赋值",[1599,78543,78545],{"id":78544},"_461-数组解构","4.6.1 数组解构",[14,78547,78548],{},"以前要是使用数组中的值的话：",[14,78550,78551],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,78553,78554],{},"const arr=[100,60,80]",[14,78556,78557],{},"const max=arr[0]",[14,78559,78560],{},"const min=arr[1]",[14,78562,78563],{},"const avg=arr[2]",[14,78565,78566],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,78568,78569],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,78571,78572],{},"这个写法就类似于上边的那种用很多const的方法",[14,78574,78575],{},[2918,78576],{"alt":28,"src":78577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[23,78579,78581],{"className":51886,"code":78580,"language":51888,"meta":28,"style":28},"①变量之间交换值:\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",[30,78582,78583,78588,78593,78598,78603,78608,78612,78616,78621,78625,78630,78635,78639,78644,78649,78660,78670,78675,78680,78685,78689,78693],{"__ignoreMap":28},[33,78584,78585],{"class":35,"line":36},[33,78586,78587],{"class":47},"①变量之间交换值:\n",[33,78589,78590],{"class":35,"line":51},[33,78591,78592],{"class":47},"let a=1\n",[33,78594,78595],{"class":35,"line":57},[33,78596,78597],{"class":47},"let b=2;\n",[33,78599,78600],{"class":35,"line":64},[33,78601,78602],{"class":47},"必须加这行代码，不然就会报错\n",[33,78604,78605],{"class":35,"line":83},[33,78606,78607],{"class":47},"[b,a]=[a,b]\n",[33,78609,78610],{"class":35,"line":89},[33,78611,160],{"emptyLinePlaceholder":159},[33,78613,78614],{"class":35,"line":98},[33,78615,160],{"emptyLinePlaceholder":159},[33,78617,78618],{"class":35,"line":110},[33,78619,78620],{"class":47},"可以写成下面的方式：\n",[33,78622,78623],{"class":35,"line":134},[33,78624,78592],{"class":47},[33,78626,78627],{"class":35,"line":156},[33,78628,78629],{"class":47},"let b=2\n",[33,78631,78632],{"class":35,"line":163},[33,78633,78634],{"class":47},";[b,a]=[a,b]\n",[33,78636,78637],{"class":35,"line":169},[33,78638,160],{"emptyLinePlaceholder":159},[33,78640,78641],{"class":35,"line":175},[33,78642,78643],{"class":47},"②排序\n",[33,78645,78646],{"class":35,"line":181},[33,78647,78648],{"class":47},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[33,78650,78651,78654,78657],{"class":35,"line":196},[33,78652,78653],{"class":47},"for (let i = 0; i ",[33,78655,875],{"class":78656},"s7hpK",[33,78658,78659],{"class":47}," arr1.length; i++) {\n",[33,78661,78662,78665,78667],{"class":35,"line":213},[33,78663,78664],{"class":47},"   for (let j = 0; j ",[33,78666,875],{"class":78656},[33,78668,78669],{"class":47}," arr1.length - 1; j++) {\n",[33,78671,78672],{"class":35,"line":228},[33,78673,78674],{"class":47},"      if (arr1[j] > arr1[j + 1]) {\n",[33,78676,78677],{"class":35,"line":1345},[33,78678,78679],{"class":47},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[33,78681,78682],{"class":35,"line":1350},[33,78683,78684],{"class":47},"       }\n",[33,78686,78687],{"class":35,"line":1359},[33,78688,5706],{"class":47},[33,78690,78691],{"class":35,"line":1364},[33,78692,231],{"class":47},[33,78694,78695],{"class":35,"line":1370},[33,78696,78697],{"class":47},"console.log(arr1)\n",[14,78699,78700],{},"数组解构的细节：",[14,78702,78703],{},"①变量多，单元值少",[14,78705,78706],{},[2918,78707],{"alt":28,"src":78708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,78710,78711],{},"防止出现undefined的方法：",[14,78713,78714],{},"const [a=0,b=0] =[1]",[14,78716,78717],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,78719,78720],{},"②变量少，单元值多",[14,78722,78723],{},[2918,78724],{"alt":28,"src":78725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,78727,78728],{},"此时可以使用剩余参数来接收多余的值",[14,78730,78731],{},"const [a,b,...c]=[1,2,3,4]",[14,78733,78734],{},"console.log(c) 输出[3,4]",[14,78736,78737],{},"③可以按需导入，忽略某些返回值",[14,78739,78740],{},[2918,78741],{"alt":28,"src":78742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,78744,78745],{},"④支持多维数组的结构",[23,78747,78751],{"className":78748,"code":78749,"language":78750,"meta":28,"style":28},"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",[30,78752,78753,78781,78797,78812,78827],{"__ignoreMap":28},[33,78754,78755,78757,78759,78761,78763,78765,78767,78769,78772,78774,78776,78778],{"class":35,"line":36},[33,78756,588],{"class":39},[33,78758,53086],{"class":47},[33,78760,73],{"class":39},[33,78762,53479],{"class":47},[33,78764,701],{"class":76},[33,78766,13686],{"class":47},[33,78768,707],{"class":76},[33,78770,78771],{"class":47},", [",[33,78773,712],{"class":76},[33,78775,13686],{"class":47},[33,78777,717],{"class":76},[33,78779,78780],{"class":47},"]]\n",[33,78782,78783,78786,78788,78790,78792,78794],{"class":35,"line":51},[33,78784,78785],{"class":47},"console.",[33,78787,59500],{"class":43},[33,78789,5253],{"class":47},[33,78791,766],{"class":76},[33,78793,5615],{"class":47},[33,78795,78796],{"class":60},"  \u002F\u002F1\n",[33,78798,78799,78801,78803,78805,78807,78809],{"class":35,"line":57},[33,78800,78785],{"class":47},[33,78802,59500],{"class":43},[33,78804,5253],{"class":47},[33,78806,701],{"class":76},[33,78808,5615],{"class":47},[33,78810,78811],{"class":60},"  \u002F\u002F2\n",[33,78813,78814,78816,78818,78820,78822,78824],{"class":35,"line":64},[33,78815,78785],{"class":47},[33,78817,59500],{"class":43},[33,78819,5253],{"class":47},[33,78821,707],{"class":76},[33,78823,5615],{"class":47},[33,78825,78826],{"class":60},"  \u002F\u002F[3,4]\n",[33,78828,78829,78831,78833,78835,78837,78839,78841,78843],{"class":35,"line":83},[33,78830,78785],{"class":47},[33,78832,59500],{"class":43},[33,78834,5253],{"class":47},[33,78836,707],{"class":76},[33,78838,6292],{"class":47},[33,78840,766],{"class":76},[33,78842,5615],{"class":47},[33,78844,78845],{"class":60},"  \u002F\u002F3\n",[23,78847,78849],{"className":78748,"code":78848,"language":78750,"meta":28,"style":28},"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",[30,78850,78851,78878,78889,78900],{"__ignoreMap":28},[33,78852,78853,78855,78858,78860,78862,78864,78866,78868,78870,78872,78874,78876],{"class":35,"line":36},[33,78854,588],{"class":39},[33,78856,78857],{"class":47}," [a, b, c] ",[33,78859,73],{"class":39},[33,78861,53479],{"class":47},[33,78863,701],{"class":76},[33,78865,13686],{"class":47},[33,78867,707],{"class":76},[33,78869,78771],{"class":47},[33,78871,712],{"class":76},[33,78873,13686],{"class":47},[33,78875,717],{"class":76},[33,78877,78780],{"class":47},[33,78879,78880,78882,78884,78887],{"class":35,"line":51},[33,78881,78785],{"class":47},[33,78883,59500],{"class":43},[33,78885,78886],{"class":47},"(a)",[33,78888,78796],{"class":60},[33,78890,78891,78893,78895,78898],{"class":35,"line":57},[33,78892,78785],{"class":47},[33,78894,59500],{"class":43},[33,78896,78897],{"class":47},"(b)",[33,78899,78811],{"class":60},[33,78901,78902,78904,78906,78909],{"class":35,"line":64},[33,78903,78785],{"class":47},[33,78905,59500],{"class":43},[33,78907,78908],{"class":47},"(c)",[33,78910,78826],{"class":60},[23,78912,78914],{"className":78748,"code":78913,"language":78750,"meta":28,"style":28},"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",[30,78915,78916,78943,78953,78963,78973],{"__ignoreMap":28},[33,78917,78918,78920,78923,78925,78927,78929,78931,78933,78935,78937,78939,78941],{"class":35,"line":36},[33,78919,588],{"class":39},[33,78921,78922],{"class":47}," [a, b, [c, d]] ",[33,78924,73],{"class":39},[33,78926,53479],{"class":47},[33,78928,701],{"class":76},[33,78930,13686],{"class":47},[33,78932,707],{"class":76},[33,78934,78771],{"class":47},[33,78936,712],{"class":76},[33,78938,13686],{"class":47},[33,78940,717],{"class":76},[33,78942,78780],{"class":47},[33,78944,78945,78947,78949,78951],{"class":35,"line":51},[33,78946,78785],{"class":47},[33,78948,59500],{"class":43},[33,78950,78886],{"class":47},[33,78952,78796],{"class":60},[33,78954,78955,78957,78959,78961],{"class":35,"line":57},[33,78956,78785],{"class":47},[33,78958,59500],{"class":43},[33,78960,78897],{"class":47},[33,78962,78811],{"class":60},[33,78964,78965,78967,78969,78971],{"class":35,"line":64},[33,78966,78785],{"class":47},[33,78968,59500],{"class":43},[33,78970,78908],{"class":47},[33,78972,78845],{"class":60},[33,78974,78975,78977,78979,78982],{"class":35,"line":83},[33,78976,78785],{"class":47},[33,78978,59500],{"class":43},[33,78980,78981],{"class":47},"(d)",[33,78983,78984],{"class":60},"  \u002F\u002F4\n",[1599,78986,78988],{"id":78987},"_462-对象解构","4.6.2 对象解构",[14,78990,78991],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78993,78994],{},"用的非常非常多！！！！！！",[23249,78996,78998],{"id":78997},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,79000,79001],{},"基本语法：",[574,79003,79004,79007,79010,79013],{},[564,79005,79006],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[564,79008,79009],{},"对象属性的值将被赋值给与属性名相同的变量",[564,79011,79012],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[564,79014,79015],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[23,79017,79019],{"className":51886,"code":79018,"language":51888,"meta":28,"style":28},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[30,79020,79021,79026,79031,79036,79040],{"__ignoreMap":28},[33,79022,79023],{"class":35,"line":36},[33,79024,79025],{"class":47},"const obj = {\n",[33,79027,79028],{"class":35,"line":51},[33,79029,79030],{"class":47},"   uname: 'pink老师',\n",[33,79032,79033],{"class":35,"line":57},[33,79034,79035],{"class":47},"   age: 18,\n",[33,79037,79038],{"class":35,"line":64},[33,79039,231],{"class":47},[33,79041,79042],{"class":35,"line":83},[33,79043,79044],{"class":47},"const { uname, age } = obj\n",[14,79046,79047],{},"上方代码这样写等价于：",[14,79049,79050],{},"const uname等价于obj.uname",[14,79052,79053],{},"变量名可以重新改名：",[14,79055,79056],{},"const uname='red老师'",[14,79058,79059],{},"const user={",[14,79061,79062],{},"  uname:'pink老师',",[14,79064,79065],{},"  age:18",[14,79067,2542],{},[14,79069,79070],{},"const {uname,age}=user",[14,79072,79073],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,79075,79076],{},"const {旧变量名：新变量名}=对象",[14,79078,79079],{},"const {uname:username,age}=user",[23249,79081,79083],{"id":79082},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,79085,79086],{},[2918,79087],{"alt":28,"src":79088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23249,79090,79092],{"id":79091},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,79094,79095],{},[2918,79096],{"alt":28,"src":79097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[23,79099,79101],{"className":54320,"code":79100,"language":54322,"meta":28,"style":28},"  \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",[30,79102,79103,79111,79116,79121,79126,79131,79136,79141,79146,79151,79155,79160,79165],{"__ignoreMap":28},[33,79104,79105,79107,79109],{"class":35,"line":36},[33,79106,53397],{"class":47},[33,79108,53066],{"class":52553},[33,79110,52560],{"class":47},[33,79112,79113],{"class":35,"line":51},[33,79114,79115],{"class":47},"    const pig = {\n",[33,79117,79118],{"class":35,"line":57},[33,79119,79120],{"class":47},"      name: '佩奇',\n",[33,79122,79123],{"class":35,"line":64},[33,79124,79125],{"class":47},"      family: {\n",[33,79127,79128],{"class":35,"line":83},[33,79129,79130],{"class":47},"        mother: '猪妈妈',\n",[33,79132,79133],{"class":35,"line":89},[33,79134,79135],{"class":47},"        father: '猪爸爸',\n",[33,79137,79138],{"class":35,"line":98},[33,79139,79140],{"class":47},"        sister: '乔治'\n",[33,79142,79143],{"class":35,"line":110},[33,79144,79145],{"class":47},"      },\n",[33,79147,79148],{"class":35,"line":134},[33,79149,79150],{"class":47},"      age: 6\n",[33,79152,79153],{"class":35,"line":156},[33,79154,916],{"class":47},[33,79156,79157],{"class":35,"line":163},[33,79158,79159],{"class":47},"    \u002F\u002F 多级对象解构\n",[33,79161,79162],{"class":35,"line":169},[33,79163,79164],{"class":47},"    const { name, family: { mother, father, sister }, age } = pig\n",[33,79166,79167,79169,79171],{"class":35,"line":175},[33,79168,53670],{"class":47},[33,79170,53066],{"class":52553},[33,79172,52560],{"class":47},[14,79174,79175],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[23,79177,79180],{"className":79178,"code":79179,"language":77700,"meta":28,"style":28},"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",[30,79181,79182,79187,79198,79210,79222,79231,79235,79246,79258,79268,79273,79277,79287,79298,79307,79311,79315,79326,79337,79346,79350,79355],{"__ignoreMap":28},[33,79183,79184],{"class":35,"line":36},[33,79185,79186],{"class":60},"    \u002F\u002F 这是后台传递过来的数据\n",[33,79188,79189,79191,79194,79196],{"class":35,"line":51},[33,79190,12472],{"class":39},[33,79192,79193],{"class":47}," msg ",[33,79195,73],{"class":39},[33,79197,16823],{"class":47},[33,79199,79200,79203,79205,79208],{"class":35,"line":57},[33,79201,79202],{"class":119},"      \"code\"",[33,79204,2458],{"class":39},[33,79206,79207],{"class":76}," 200",[33,79209,32719],{"class":47},[33,79211,79212,79215,79217,79220],{"class":35,"line":64},[33,79213,79214],{"class":119},"      \"msg\"",[33,79216,2458],{"class":39},[33,79218,79219],{"class":119}," \"获取新闻列表成功\"",[33,79221,32719],{"class":47},[33,79223,79224,79227,79229],{"class":35,"line":83},[33,79225,79226],{"class":119},"      \"data\"",[33,79228,2458],{"class":39},[33,79230,56700],{"class":47},[33,79232,79233],{"class":35,"line":89},[33,79234,1254],{"class":47},[33,79236,79237,79240,79242,79244],{"class":35,"line":98},[33,79238,79239],{"class":119},"          \"id\"",[33,79241,2458],{"class":39},[33,79243,26371],{"class":76},[33,79245,32719],{"class":47},[33,79247,79248,79251,79253,79256],{"class":35,"line":110},[33,79249,79250],{"class":119},"          \"title\"",[33,79252,2458],{"class":39},[33,79254,79255],{"class":119}," \"5G商用自己，三大运用商收入下降\"",[33,79257,32719],{"class":47},[33,79259,79260,79263,79265],{"class":35,"line":134},[33,79261,79262],{"class":119},"          \"count\"",[33,79264,2458],{"class":39},[33,79266,79267],{"class":76}," 58\n",[33,79269,79270],{"class":35,"line":156},[33,79271,79272],{"class":47},"        },\n",[33,79274,79275],{"class":35,"line":163},[33,79276,1254],{"class":47},[33,79278,79279,79281,79283,79285],{"class":35,"line":169},[33,79280,79239],{"class":119},[33,79282,2458],{"class":39},[33,79284,16006],{"class":76},[33,79286,32719],{"class":47},[33,79288,79289,79291,79293,79296],{"class":35,"line":175},[33,79290,79250],{"class":119},[33,79292,2458],{"class":39},[33,79294,79295],{"class":119}," \"国际媒体头条速览\"",[33,79297,32719],{"class":47},[33,79299,79300,79302,79304],{"class":35,"line":181},[33,79301,79262],{"class":119},[33,79303,2458],{"class":39},[33,79305,79306],{"class":76}," 56\n",[33,79308,79309],{"class":35,"line":196},[33,79310,79272],{"class":47},[33,79312,79313],{"class":35,"line":213},[33,79314,1254],{"class":47},[33,79316,79317,79319,79321,79324],{"class":35,"line":228},[33,79318,79239],{"class":119},[33,79320,2458],{"class":39},[33,79322,79323],{"class":76}," 3",[33,79325,32719],{"class":47},[33,79327,79328,79330,79332,79335],{"class":35,"line":1345},[33,79329,79250],{"class":119},[33,79331,2458],{"class":39},[33,79333,79334],{"class":119}," \"乌克兰和俄罗斯持续冲突\"",[33,79336,32719],{"class":47},[33,79338,79339,79341,79343],{"class":35,"line":1350},[33,79340,79262],{"class":119},[33,79342,2458],{"class":39},[33,79344,79345],{"class":76}," 1669\n",[33,79347,79348],{"class":35,"line":1359},[33,79349,79272],{"class":47},[33,79351,79352],{"class":35,"line":1364},[33,79353,79354],{"class":47},"      ]\n",[33,79356,79357],{"class":35,"line":1370},[33,79358,916],{"class":47},[14,79360,79361],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,79363,79364],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,79366,79367],{},"\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,79369,79370],{},"function({data}) {",[14,79372,79373],{},"console.log(data)",[14,79375,2542],{},[14,79377,79378],{},"render(msg)",[14,79380,79381],{},"实参传递给形参的时候解构了",[14,79383,79384],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,79386,79387],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,79389,79390],{},"function render({data:mydata}) {",[14,79392,79393],{},"  console.log(data)",[14,79395,2542],{},[1599,79397,79399],{"id":79398},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,79401,79402],{},"有两种情况：一个是数组结构，一个是立即执行函数",[574,79404,79405],{},[564,79406,79407],{},"如果对一个数组进行遍历，有两种方式：",[14,79409,79410],{},"①法1",[14,79412,79413],{},"const arr=[1,2,3]",[14,79415,79416],{},"arr.map(function(item,index) {",[14,79418,79419],{},"  console.log(item)",[14,79421,53717],{},[14,79423,79424],{},[2918,79425],{"alt":28,"src":79426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,79428,79429],{},"②法2",[14,79431,79432],{},"const str='pink'",[14,79434,79435],{},"[1,2,3].map(function(item,index) {",[14,79437,79438],{},"console.log(item)",[14,79440,53717],{},[14,79442,79443],{},[2918,79444],{"alt":28,"src":79445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,79447,79448],{},"此时会报错",[14,79450,79451],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,79453,79438],{},[14,79455,53717],{},[14,79457,79458],{},"内部会当成这样处理，所以我们用分号进行隔开",[18,79460,79462],{"id":79461},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,79464,79465],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,79467,79468],{},"可以理解为加强版的for循环",[14,79470,79471],{},[2918,79472],{"alt":28,"src":79473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,79475,79476],{},"里边不写return，不返回数组，只遍历不返回",[14,79478,79479],{},"map是返回数组",[14,79481,79482],{},"forEach主要用于遍历数组对象",[23,79484,79486],{"className":54320,"code":79485,"language":54322,"meta":28,"style":28},"  \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",[30,79487,79488,79496,79501,79506,79511,79516,79520,79525],{"__ignoreMap":28},[33,79489,79490,79492,79494],{"class":35,"line":36},[33,79491,53397],{"class":47},[33,79493,53066],{"class":52553},[33,79495,52560],{"class":47},[33,79497,79498],{"class":35,"line":51},[33,79499,79500],{"class":47},"    const arr = ['red', 'green', 'pink']\n",[33,79502,79503],{"class":35,"line":57},[33,79504,79505],{"class":47},"    const result = arr.forEach(function (item, index) {\n",[33,79507,79508],{"class":35,"line":64},[33,79509,79510],{"class":47},"      console.log(item)\n",[33,79512,79513],{"class":35,"line":83},[33,79514,79515],{"class":47},"      console.log(index)\n",[33,79517,79518],{"class":35,"line":89},[33,79519,34714],{"class":47},[33,79521,79522],{"class":35,"line":98},[33,79523,79524],{"class":47},"    console.log(result)\n",[33,79526,79527,79529,79531],{"class":35,"line":110},[33,79528,53670],{"class":47},[33,79530,53066],{"class":52553},[33,79532,52560],{"class":47},[14,79534,79535],{},[2918,79536],{"alt":28,"src":79537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[18,79539,79541],{"id":79540},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,79543,79544],{},[2918,79545],{"alt":28,"src":79546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,79548,79549],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[23,79551,79553],{"className":54320,"code":79552,"language":54322,"meta":28,"style":28},"\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",[30,79554,79555,79563,79571,79576,79581,79585,79589,79594,79598,79603,79611],{"__ignoreMap":28},[33,79556,79557,79559,79561],{"class":35,"line":36},[33,79558,875],{"class":47},[33,79560,53053],{"class":52553},[33,79562,52560],{"class":47},[33,79564,79565,79567,79569],{"class":35,"line":51},[33,79566,53397],{"class":47},[33,79568,53066],{"class":52553},[33,79570,52560],{"class":47},[33,79572,79573],{"class":35,"line":57},[33,79574,79575],{"class":47},"    const arr = [10, 20, 30]\n",[33,79577,79578],{"class":35,"line":64},[33,79579,79580],{"class":47},"    const newArr = arr.filter(function (item, index) {\n",[33,79582,79583],{"class":35,"line":83},[33,79584,79510],{"class":47},[33,79586,79587],{"class":35,"line":89},[33,79588,79515],{"class":47},[33,79590,79591],{"class":35,"line":98},[33,79592,79593],{"class":47},"      return item >= 20\n",[33,79595,79596],{"class":35,"line":110},[33,79597,34714],{"class":47},[33,79599,79600],{"class":35,"line":134},[33,79601,79602],{"class":47},"    console.log(newArr)\n",[33,79604,79605,79607,79609],{"class":35,"line":156},[33,79606,53670],{"class":47},[33,79608,53066],{"class":52553},[33,79610,52560],{"class":47},[33,79612,79613,79615,79617],{"class":35,"line":163},[33,79614,53038],{"class":47},[33,79616,53053],{"class":52553},[33,79618,52560],{"class":47},[14,79620,79621],{},"这个也可以写成箭头函数：",[23,79623,79625],{"className":51886,"code":79624,"language":51888,"meta":28,"style":28},"const newArr = arr.filter(item => item >= 20)\n",[30,79626,79627],{"__ignoreMap":28},[33,79628,79629],{"class":35,"line":36},[33,79630,79624],{"class":47},[18,79632,79634],{"id":79633},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,79636,79637],{},[2918,79638],{"alt":28,"src":79639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,79641,79642],{},"步骤：",[14,79644,79645],{},"①：渲染页面模块",[561,79647,79648,79651],{},[564,79649,79650],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[564,79652,79653],{},"用forEach+字符串的形式",[14,79655,79656],{},"②：点击不同需求，显示不同页面内容",[561,79658,79659,79662,79665,79668,79671],{},[564,79660,79661],{},"点击采取事件委托方式 .filter",[564,79663,79664],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[564,79666,79667],{},"筛选条件是根据点击的 data-index 来判断",[564,79669,79670],{},"可以使用对象解构，把事件对象解构",[564,79672,79673],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[23,79675,79677],{"className":51886,"code":79676,"language":51888,"meta":28,"style":28},"\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",[30,79678,79679,79689,79703,79707,79715,79729,79749,79761,79769,79775,79785,79795,79805,79809,79813,79819,79832,79844,79854,79866,79870,79874,79881,79894,79906,79923,79941,79954,79958,79962,79974,79984,79988,79992,79999,80040,80067,80077,80081,80085,80093,80105,80109,80113,80121,80133,80145,80156,80160,80164,80173,80185,80196,80200,80204,80213,80225,80237,80241,80245,80252,80262,80274,80286,80301,80305,80309,80317,80333,80343,80353,80363,80375,80379,80383,80393,80404,80414,80418,80426,80434,80438,80446,80461,80487,80512,80537,80556,80564,80578,80583,80588,80593,80598,80603,80611,80619,80624,80635,80640,80650,80660,80670,80680,80684,80688,80697,80706,80715,80724,80728,80732,80741,80750,80759,80768,80772,80776,80785,80794,80803,80812,80816,80820,80829,80838,80847,80856,80860,80864,80873,80882,80891,80900,80904,80908,80917,80926,80935,80944,80948,80952,80961,80970,80978,80987,80991,80995,80999,81004,81016,81021,81033,81037,81054,81082,81091,81096,81106,81116,81125,81130,81135,81139,81144,81161,81165,81170,81178,81183,81210,81215,81235,81240,81252,81257,81262,81267,81278,81292,81329,81347,81380,81397,81421,81425,81430,81436,81440,81444,81448,81456,81464,81468],{"__ignoreMap":28},[33,79680,79681,79683,79685,79687],{"class":35,"line":36},[33,79682,52550],{"class":47},[33,79684,52554],{"class":52553},[33,79686,52557],{"class":43},[33,79688,52560],{"class":47},[33,79690,79691,79693,79695,79697,79699,79701],{"class":35,"line":51},[33,79692,875],{"class":47},[33,79694,51888],{"class":52553},[33,79696,52569],{"class":43},[33,79698,73],{"class":47},[33,79700,52574],{"class":119},[33,79702,52560],{"class":47},[33,79704,79705],{"class":35,"line":57},[33,79706,160],{"emptyLinePlaceholder":159},[33,79708,79709,79711,79713],{"class":35,"line":64},[33,79710,875],{"class":47},[33,79712,52587],{"class":52553},[33,79714,52560],{"class":47},[33,79716,79717,79719,79721,79723,79725,79727],{"class":35,"line":83},[33,79718,53397],{"class":47},[33,79720,52597],{"class":52553},[33,79722,52600],{"class":43},[33,79724,73],{"class":47},[33,79726,52605],{"class":119},[33,79728,52560],{"class":47},[33,79730,79731,79733,79735,79737,79739,79741,79743,79745,79747],{"class":35,"line":89},[33,79732,53397],{"class":47},[33,79734,52597],{"class":52553},[33,79736,16171],{"class":43},[33,79738,73],{"class":47},[33,79740,52644],{"class":119},[33,79742,52624],{"class":43},[33,79744,73],{"class":47},[33,79746,52651],{"class":119},[33,79748,52560],{"class":47},[33,79750,79751,79753,79755,79757,79759],{"class":35,"line":98},[33,79752,53397],{"class":47},[33,79754,52660],{"class":52553},[33,79756,52663],{"class":47},[33,79758,52660],{"class":52553},[33,79760,52560],{"class":47},[33,79762,79763,79765,79767],{"class":35,"line":110},[33,79764,53397],{"class":47},[33,79766,1544],{"class":52553},[33,79768,52560],{"class":47},[33,79770,79771,79773],{"class":35,"line":134},[33,79772,184],{"class":52553},[33,79774,16823],{"class":47},[33,79776,79777,79779,79781,79783],{"class":35,"line":156},[33,79778,55948],{"class":76},[33,79780,52690],{"class":47},[33,79782,766],{"class":76},[33,79784,80],{"class":47},[33,79786,79787,79789,79791,79793],{"class":35,"line":163},[33,79788,55959],{"class":76},[33,79790,52690],{"class":47},[33,79792,766],{"class":76},[33,79794,80],{"class":47},[33,79796,79797,79799,79801,79803],{"class":35,"line":169},[33,79798,73849],{"class":76},[33,79800,52690],{"class":47},[33,79802,61758],{"class":76},[33,79804,80],{"class":47},[33,79806,79807],{"class":35,"line":175},[33,79808,916],{"class":47},[33,79810,79811],{"class":35,"line":181},[33,79812,160],{"emptyLinePlaceholder":159},[33,79814,79815,79817],{"class":35,"line":196},[33,79816,63376],{"class":43},[33,79818,16823],{"class":47},[33,79820,79821,79823,79825,79828,79830],{"class":35,"line":213},[33,79822,56024],{"class":76},[33,79824,52690],{"class":47},[33,79826,79827],{"class":76},"990",[33,79829,52745],{"class":39},[33,79831,80],{"class":47},[33,79833,79834,79836,79838,79840,79842],{"class":35,"line":228},[33,79835,55959],{"class":76},[33,79837,52690],{"class":47},[33,79839,766],{"class":76},[33,79841,52809],{"class":76},[33,79843,80],{"class":47},[33,79845,79846,79848,79850,79852],{"class":35,"line":1345},[33,79847,56262],{"class":76},[33,79849,52690],{"class":47},[33,79851,52730],{"class":76},[33,79853,80],{"class":47},[33,79855,79856,79859,79861,79864],{"class":35,"line":1350},[33,79857,79858],{"class":76},"      flex-wrap",[33,79860,52690],{"class":47},[33,79862,79863],{"class":76},"wrap",[33,79865,80],{"class":47},[33,79867,79868],{"class":35,"line":1359},[33,79869,916],{"class":47},[33,79871,79872],{"class":35,"line":1364},[33,79873,160],{"emptyLinePlaceholder":159},[33,79875,79876,79879],{"class":35,"line":1370},[33,79877,79878],{"class":43},"    .item",[33,79880,16823],{"class":47},[33,79882,79883,79885,79887,79890,79892],{"class":35,"line":1425},[33,79884,56024],{"class":76},[33,79886,52690],{"class":47},[33,79888,79889],{"class":76},"240",[33,79891,52745],{"class":39},[33,79893,80],{"class":47},[33,79895,79896,79898,79900,79902,79904],{"class":35,"line":1438},[33,79897,63253],{"class":76},[33,79899,52690],{"class":47},[33,79901,77],{"class":76},[33,79903,52745],{"class":39},[33,79905,80],{"class":47},[33,79907,79908,79910,79912,79914,79916,79919,79921],{"class":35,"line":1451},[33,79909,55948],{"class":76},[33,79911,52690],{"class":47},[33,79913,1045],{"class":76},[33,79915,52745],{"class":39},[33,79917,79918],{"class":76}," 30",[33,79920,52745],{"class":39},[33,79922,80],{"class":47},[33,79924,79925,79927,79929,79931,79934,79937,79939],{"class":35,"line":1457},[33,79926,63113],{"class":76},[33,79928,52690],{"class":47},[33,79930,29374],{"class":76},[33,79932,79933],{"class":76}," ease",[33,79935,79936],{"class":76}," .5",[33,79938,2295],{"class":39},[33,79940,80],{"class":47},[33,79942,79943,79946,79948,79950,79952],{"class":35,"line":1466},[33,79944,79945],{"class":76},"      margin-bottom",[33,79947,52690],{"class":47},[33,79949,1045],{"class":76},[33,79951,52745],{"class":39},[33,79953,80],{"class":47},[33,79955,79956],{"class":35,"line":1471},[33,79957,916],{"class":47},[33,79959,79960],{"class":35,"line":1477},[33,79961,160],{"emptyLinePlaceholder":159},[33,79963,79964,79967,79969,79972],{"class":35,"line":1504},[33,79965,79966],{"class":43},"    .item:nth-child",[33,79968,345],{"class":47},[33,79970,79971],{"class":76},"4n",[33,79973,13693],{"class":47},[33,79975,79976,79978,79980,79982],{"class":35,"line":1509},[33,79977,63253],{"class":76},[33,79979,52690],{"class":47},[33,79981,766],{"class":76},[33,79983,80],{"class":47},[33,79985,79986],{"class":35,"line":1525},[33,79987,916],{"class":47},[33,79989,79990],{"class":35,"line":1535},[33,79991,160],{"emptyLinePlaceholder":159},[33,79993,79994,79997],{"class":35,"line":1540},[33,79995,79996],{"class":43},"    .item:hover",[33,79998,16823],{"class":47},[33,80000,80001,80004,80006,80008,80010,80012,80014,80016,80018,80021,80023,80025,80027,80029,80031,80033,80035,80038],{"class":35,"line":4027},[33,80002,80003],{"class":76},"      box-shadow",[33,80005,52690],{"class":47},[33,80007,766],{"class":76},[33,80009,52745],{"class":39},[33,80011,5492],{"class":76},[33,80013,52745],{"class":39},[33,80015,3571],{"class":76},[33,80017,52745],{"class":39},[33,80019,80020],{"class":76}," rgba",[33,80022,345],{"class":47},[33,80024,766],{"class":76},[33,80026,13686],{"class":47},[33,80028,766],{"class":76},[33,80030,13686],{"class":47},[33,80032,766],{"class":76},[33,80034,13686],{"class":47},[33,80036,80037],{"class":76},".2",[33,80039,4130],{"class":47},[33,80041,80042,80045,80047,80050,80052,80054,80056,80059,80061,80063,80065],{"class":35,"line":4032},[33,80043,80044],{"class":76},"      transform",[33,80046,52690],{"class":47},[33,80048,80049],{"class":76},"translate3d",[33,80051,345],{"class":47},[33,80053,766],{"class":76},[33,80055,13686],{"class":47},[33,80057,80058],{"class":76},"-4",[33,80060,52745],{"class":39},[33,80062,13686],{"class":47},[33,80064,766],{"class":76},[33,80066,4130],{"class":47},[33,80068,80069,80071,80073,80075],{"class":35,"line":9199},[33,80070,63278],{"class":76},[33,80072,52690],{"class":47},[33,80074,63283],{"class":76},[33,80076,80],{"class":47},[33,80078,80079],{"class":35,"line":9223},[33,80080,916],{"class":47},[33,80082,80083],{"class":35,"line":9228},[33,80084,160],{"emptyLinePlaceholder":159},[33,80086,80087,80089,80091],{"class":35,"line":9234},[33,80088,79878],{"class":43},[33,80090,56868],{"class":52553},[33,80092,16823],{"class":47},[33,80094,80095,80097,80099,80101,80103],{"class":35,"line":9261},[33,80096,56024],{"class":76},[33,80098,52690],{"class":47},[33,80100,457],{"class":76},[33,80102,1939],{"class":39},[33,80104,80],{"class":47},[33,80106,80107],{"class":35,"line":9266},[33,80108,916],{"class":47},[33,80110,80111],{"class":35,"line":9272},[33,80112,160],{"emptyLinePlaceholder":159},[33,80114,80115,80117,80119],{"class":35,"line":9284},[33,80116,79878],{"class":43},[33,80118,63557],{"class":43},[33,80120,16823],{"class":47},[33,80122,80123,80125,80127,80129,80131],{"class":35,"line":9296},[33,80124,56175],{"class":76},[33,80126,52690],{"class":47},[33,80128,2250],{"class":76},[33,80130,52745],{"class":39},[33,80132,80],{"class":47},[33,80134,80135,80137,80139,80141,80143],{"class":35,"line":9308},[33,80136,79945],{"class":76},[33,80138,52690],{"class":47},[33,80140,77],{"class":76},[33,80142,52745],{"class":39},[33,80144,80],{"class":47},[33,80146,80147,80149,80151,80154],{"class":35,"line":10967},[33,80148,58669],{"class":76},[33,80150,52690],{"class":47},[33,80152,80153],{"class":76},"#666",[33,80155,80],{"class":47},[33,80157,80158],{"class":35,"line":10992},[33,80159,916],{"class":47},[33,80161,80162],{"class":35,"line":11015},[33,80163,160],{"emptyLinePlaceholder":159},[33,80165,80166,80168,80171],{"class":35,"line":11039},[33,80167,79878],{"class":43},[33,80169,80170],{"class":43}," .price",[33,80172,16823],{"class":47},[33,80174,80175,80177,80179,80181,80183],{"class":35,"line":11044},[33,80176,56175],{"class":76},[33,80178,52690],{"class":47},[33,80180,2349],{"class":76},[33,80182,52745],{"class":39},[33,80184,80],{"class":47},[33,80186,80187,80189,80191,80194],{"class":35,"line":11049},[33,80188,58669],{"class":76},[33,80190,52690],{"class":47},[33,80192,80193],{"class":76},"firebrick",[33,80195,80],{"class":47},[33,80197,80198],{"class":35,"line":11054},[33,80199,916],{"class":47},[33,80201,80202],{"class":35,"line":11063},[33,80203,160],{"emptyLinePlaceholder":159},[33,80205,80206,80208,80211],{"class":35,"line":11068},[33,80207,79878],{"class":43},[33,80209,80210],{"class":43}," .price::before",[33,80212,16823],{"class":47},[33,80214,80215,80218,80220,80223],{"class":35,"line":11074},[33,80216,80217],{"class":76},"      content",[33,80219,52690],{"class":47},[33,80221,80222],{"class":119},"'￥'",[33,80224,80],{"class":47},[33,80226,80227,80229,80231,80233,80235],{"class":35,"line":11095},[33,80228,56175],{"class":76},[33,80230,52690],{"class":47},[33,80232,2149],{"class":76},[33,80234,52745],{"class":39},[33,80236,80],{"class":47},[33,80238,80239],{"class":35,"line":11101},[33,80240,916],{"class":47},[33,80242,80243],{"class":35,"line":11115},[33,80244,160],{"emptyLinePlaceholder":159},[33,80246,80247,80250],{"class":35,"line":11121},[33,80248,80249],{"class":43},"    .filter",[33,80251,16823],{"class":47},[33,80253,80254,80256,80258,80260],{"class":35,"line":11148},[33,80255,56262],{"class":76},[33,80257,52690],{"class":47},[33,80259,52730],{"class":76},[33,80261,80],{"class":47},[33,80263,80264,80266,80268,80270,80272],{"class":35,"line":11157},[33,80265,56024],{"class":76},[33,80267,52690],{"class":47},[33,80269,79827],{"class":76},[33,80271,52745],{"class":39},[33,80273,80],{"class":47},[33,80275,80276,80278,80280,80282,80284],{"class":35,"line":11163},[33,80277,55959],{"class":76},[33,80279,52690],{"class":47},[33,80281,766],{"class":76},[33,80283,52809],{"class":76},[33,80285,80],{"class":47},[33,80287,80288,80290,80292,80294,80296,80298],{"class":35,"line":11171},[33,80289,55948],{"class":76},[33,80291,52690],{"class":47},[33,80293,2256],{"class":76},[33,80295,52745],{"class":39},[33,80297,79918],{"class":76},[33,80299,80300],{"class":39},"px\n",[33,80302,80303],{"class":35,"line":11176},[33,80304,916],{"class":47},[33,80306,80307],{"class":35,"line":17855},[33,80308,160],{"emptyLinePlaceholder":159},[33,80310,80311,80313,80315],{"class":35,"line":17861},[33,80312,80249],{"class":43},[33,80314,70],{"class":52553},[33,80316,16823],{"class":47},[33,80318,80319,80321,80323,80325,80327,80329,80331],{"class":35,"line":17884},[33,80320,55948],{"class":76},[33,80322,52690],{"class":47},[33,80324,77],{"class":76},[33,80326,52745],{"class":39},[33,80328,10201],{"class":76},[33,80330,52745],{"class":39},[33,80332,80],{"class":47},[33,80334,80335,80337,80339,80341],{"class":35,"line":17890},[33,80336,62974],{"class":76},[33,80338,52690],{"class":47},[33,80340,63071],{"class":76},[33,80342,80],{"class":47},[33,80344,80345,80347,80349,80351],{"class":35,"line":17913},[33,80346,58669],{"class":76},[33,80348,52690],{"class":47},[33,80350,80153],{"class":76},[33,80352,80],{"class":47},[33,80354,80355,80357,80359,80361],{"class":35,"line":17927},[33,80356,65223],{"class":76},[33,80358,52690],{"class":47},[33,80360,55990],{"class":76},[33,80362,80],{"class":47},[33,80364,80365,80367,80369,80371,80373],{"class":35,"line":17947},[33,80366,63003],{"class":76},[33,80368,52690],{"class":47},[33,80370,1045],{"class":76},[33,80372,52745],{"class":39},[33,80374,80],{"class":47},[33,80376,80377],{"class":35,"line":17953},[33,80378,916],{"class":47},[33,80380,80381],{"class":35,"line":17964},[33,80382,160],{"emptyLinePlaceholder":159},[33,80384,80385,80387,80389,80391],{"class":35,"line":17987},[33,80386,80249],{"class":43},[33,80388,70],{"class":52553},[33,80390,63153],{"class":43},[33,80392,16823],{"class":47},[33,80394,80395,80397,80399,80402],{"class":35,"line":18009},[33,80396,56137],{"class":76},[33,80398,52690],{"class":47},[33,80400,80401],{"class":76},"#05943c",[33,80403,80],{"class":47},[33,80405,80406,80408,80410,80412],{"class":35,"line":18014},[33,80407,58669],{"class":76},[33,80409,52690],{"class":47},[33,80411,62095],{"class":76},[33,80413,80],{"class":47},[33,80415,80416],{"class":35,"line":18020},[33,80417,916],{"class":47},[33,80419,80420,80422,80424],{"class":35,"line":18034},[33,80421,53670],{"class":47},[33,80423,1544],{"class":52553},[33,80425,52560],{"class":47},[33,80427,80428,80430,80432],{"class":35,"line":18047},[33,80429,53038],{"class":47},[33,80431,52587],{"class":52553},[33,80433,52560],{"class":47},[33,80435,80436],{"class":35,"line":18052},[33,80437,160],{"emptyLinePlaceholder":159},[33,80439,80440,80442,80444],{"class":35,"line":18066},[33,80441,875],{"class":47},[33,80443,53053],{"class":52553},[33,80445,52560],{"class":47},[33,80447,80448,80450,80452,80454,80456,80459],{"class":35,"line":18071},[33,80449,53397],{"class":47},[33,80451,52864],{"class":52553},[33,80453,54739],{"class":43},[33,80455,73],{"class":47},[33,80457,80458],{"class":119},"\"filter\"",[33,80460,52560],{"class":47},[33,80462,80463,80465,80467,80469,80471,80473,80476,80478,80480,80483,80485],{"class":35,"line":18077},[33,80464,52594],{"class":47},[33,80466,126],{"class":52553},[33,80468,62310],{"class":43},[33,80470,73],{"class":47},[33,80472,62315],{"class":119},[33,80474,80475],{"class":43}," data-index",[33,80477,73],{"class":47},[33,80479,5080],{"class":119},[33,80481,80482],{"class":47},">0-100元\u003C\u002F",[33,80484,126],{"class":52553},[33,80486,52560],{"class":47},[33,80488,80489,80491,80493,80495,80497,80499,80501,80503,80505,80508,80510],{"class":35,"line":18082},[33,80490,52594],{"class":47},[33,80492,126],{"class":52553},[33,80494,62310],{"class":43},[33,80496,73],{"class":47},[33,80498,62315],{"class":119},[33,80500,80475],{"class":43},[33,80502,73],{"class":47},[33,80504,5103],{"class":119},[33,80506,80507],{"class":47},">100-300元\u003C\u002F",[33,80509,126],{"class":52553},[33,80511,52560],{"class":47},[33,80513,80514,80516,80518,80520,80522,80524,80526,80528,80530,80533,80535],{"class":35,"line":18096},[33,80515,52594],{"class":47},[33,80517,126],{"class":52553},[33,80519,62310],{"class":43},[33,80521,73],{"class":47},[33,80523,62315],{"class":119},[33,80525,80475],{"class":43},[33,80527,73],{"class":47},[33,80529,5116],{"class":119},[33,80531,80532],{"class":47},">300元以上\u003C\u002F",[33,80534,126],{"class":52553},[33,80536,52560],{"class":47},[33,80538,80539,80541,80543,80545,80547,80549,80552,80554],{"class":35,"line":18101},[33,80540,52594],{"class":47},[33,80542,126],{"class":52553},[33,80544,62310],{"class":43},[33,80546,73],{"class":47},[33,80548,62315],{"class":119},[33,80550,80551],{"class":47},">全部区间\u003C\u002F",[33,80553,126],{"class":52553},[33,80555,52560],{"class":47},[33,80557,80558,80560,80562],{"class":35,"line":18106},[33,80559,53670],{"class":47},[33,80561,52864],{"class":52553},[33,80563,52560],{"class":47},[33,80565,80566,80568,80570,80572,80574,80576],{"class":35,"line":18120},[33,80567,53397],{"class":47},[33,80569,52864],{"class":52553},[33,80571,54739],{"class":43},[33,80573,73],{"class":47},[33,80575,63861],{"class":119},[33,80577,52560],{"class":47},[33,80579,80580],{"class":35,"line":18132},[33,80581,80582],{"class":60},"    \u003C!-- \u003Cdiv class=\"item\">\n",[33,80584,80585],{"class":35,"line":18137},[33,80586,80587],{"class":60},"      \u003Cimg src=\"\" alt=\"\">\n",[33,80589,80590],{"class":35,"line":18150},[33,80591,80592],{"class":60},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[33,80594,80595],{"class":35,"line":18155},[33,80596,80597],{"class":60},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[33,80599,80600],{"class":35,"line":18160},[33,80601,80602],{"class":60},"    \u003C\u002Fdiv> -->\n",[33,80604,80605,80607,80609],{"class":35,"line":18165},[33,80606,53670],{"class":47},[33,80608,52864],{"class":52553},[33,80610,52560],{"class":47},[33,80612,80613,80615,80617],{"class":35,"line":18178},[33,80614,53397],{"class":47},[33,80616,53066],{"class":52553},[33,80618,52560],{"class":47},[33,80620,80621],{"class":35,"line":18183},[33,80622,80623],{"class":60},"    \u002F\u002F 2. 初始化数据\n",[33,80625,80626,80628,80631,80633],{"class":35,"line":33886},[33,80627,12472],{"class":39},[33,80629,80630],{"class":76}," goodsList",[33,80632,14815],{"class":39},[33,80634,56700],{"class":47},[33,80636,80637],{"class":35,"line":33892},[33,80638,80639],{"class":47},"      {\n",[33,80641,80642,80645,80648],{"class":35,"line":33898},[33,80643,80644],{"class":47},"        id: ",[33,80646,80647],{"class":119},"'4001172'",[33,80649,32719],{"class":47},[33,80651,80652,80655,80658],{"class":35,"line":33904},[33,80653,80654],{"class":47},"        name: ",[33,80656,80657],{"class":119},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[33,80659,32719],{"class":47},[33,80661,80662,80665,80668],{"class":35,"line":33910},[33,80663,80664],{"class":47},"        price: ",[33,80666,80667],{"class":119},"'289.00'",[33,80669,32719],{"class":47},[33,80671,80672,80675,80678],{"class":35,"line":33921},[33,80673,80674],{"class":47},"        picture: ",[33,80676,80677],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[33,80679,32719],{"class":47},[33,80681,80682],{"class":35,"line":33927},[33,80683,79145],{"class":47},[33,80685,80686],{"class":35,"line":33947},[33,80687,80639],{"class":47},[33,80689,80690,80692,80695],{"class":35,"line":33953},[33,80691,80644],{"class":47},[33,80693,80694],{"class":119},"'4001594'",[33,80696,32719],{"class":47},[33,80698,80699,80701,80704],{"class":35,"line":33964},[33,80700,80654],{"class":47},[33,80702,80703],{"class":119},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[33,80705,32719],{"class":47},[33,80707,80708,80710,80713],{"class":35,"line":33970},[33,80709,80664],{"class":47},[33,80711,80712],{"class":119},"'288.00'",[33,80714,32719],{"class":47},[33,80716,80717,80719,80722],{"class":35,"line":33976},[33,80718,80674],{"class":47},[33,80720,80721],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[33,80723,32719],{"class":47},[33,80725,80726],{"class":35,"line":33982},[33,80727,79145],{"class":47},[33,80729,80730],{"class":35,"line":33988},[33,80731,80639],{"class":47},[33,80733,80734,80736,80739],{"class":35,"line":33994},[33,80735,80644],{"class":47},[33,80737,80738],{"class":119},"'4001009'",[33,80740,32719],{"class":47},[33,80742,80743,80745,80748],{"class":35,"line":34000},[33,80744,80654],{"class":47},[33,80746,80747],{"class":119},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[33,80749,32719],{"class":47},[33,80751,80752,80754,80757],{"class":35,"line":34006},[33,80753,80664],{"class":47},[33,80755,80756],{"class":119},"'109.00'",[33,80758,32719],{"class":47},[33,80760,80761,80763,80766],{"class":35,"line":34026},[33,80762,80674],{"class":47},[33,80764,80765],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[33,80767,32719],{"class":47},[33,80769,80770],{"class":35,"line":34032},[33,80771,79145],{"class":47},[33,80773,80774],{"class":35,"line":34048},[33,80775,80639],{"class":47},[33,80777,80778,80780,80783],{"class":35,"line":34054},[33,80779,80644],{"class":47},[33,80781,80782],{"class":119},"'4001874'",[33,80784,32719],{"class":47},[33,80786,80787,80789,80792],{"class":35,"line":34068},[33,80788,80654],{"class":47},[33,80790,80791],{"class":119},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[33,80793,32719],{"class":47},[33,80795,80796,80798,80801],{"class":35,"line":34074},[33,80797,80664],{"class":47},[33,80799,80800],{"class":119},"'488.00'",[33,80802,32719],{"class":47},[33,80804,80805,80807,80810],{"class":35,"line":34089},[33,80806,80674],{"class":47},[33,80808,80809],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[33,80811,32719],{"class":47},[33,80813,80814],{"class":35,"line":34095},[33,80815,79145],{"class":47},[33,80817,80818],{"class":35,"line":34104},[33,80819,80639],{"class":47},[33,80821,80822,80824,80827],{"class":35,"line":34110},[33,80823,80644],{"class":47},[33,80825,80826],{"class":119},"'4001649'",[33,80828,32719],{"class":47},[33,80830,80831,80833,80836],{"class":35,"line":34119},[33,80832,80654],{"class":47},[33,80834,80835],{"class":119},"'大师监制龙泉青瓷茶叶罐'",[33,80837,32719],{"class":47},[33,80839,80840,80842,80845],{"class":35,"line":34125},[33,80841,80664],{"class":47},[33,80843,80844],{"class":119},"'139.00'",[33,80846,32719],{"class":47},[33,80848,80849,80851,80854],{"class":35,"line":34131},[33,80850,80674],{"class":47},[33,80852,80853],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[33,80855,32719],{"class":47},[33,80857,80858],{"class":35,"line":34140},[33,80859,79145],{"class":47},[33,80861,80862],{"class":35,"line":34146},[33,80863,80639],{"class":47},[33,80865,80866,80868,80871],{"class":35,"line":34157},[33,80867,80644],{"class":47},[33,80869,80870],{"class":119},"'3997185'",[33,80872,32719],{"class":47},[33,80874,80875,80877,80880],{"class":35,"line":34163},[33,80876,80654],{"class":47},[33,80878,80879],{"class":119},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[33,80881,32719],{"class":47},[33,80883,80884,80886,80889],{"class":35,"line":34182},[33,80885,80664],{"class":47},[33,80887,80888],{"class":119},"'108.00'",[33,80890,32719],{"class":47},[33,80892,80893,80895,80898],{"class":35,"line":34188},[33,80894,80674],{"class":47},[33,80896,80897],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[33,80899,32719],{"class":47},[33,80901,80902],{"class":35,"line":34199},[33,80903,79145],{"class":47},[33,80905,80906],{"class":35,"line":34205},[33,80907,80639],{"class":47},[33,80909,80910,80912,80915],{"class":35,"line":34225},[33,80911,80644],{"class":47},[33,80913,80914],{"class":119},"'3997403'",[33,80916,32719],{"class":47},[33,80918,80919,80921,80924],{"class":35,"line":34241},[33,80920,80654],{"class":47},[33,80922,80923],{"class":119},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[33,80925,32719],{"class":47},[33,80927,80928,80930,80933],{"class":35,"line":34247},[33,80929,80664],{"class":47},[33,80931,80932],{"class":119},"'100.00'",[33,80934,32719],{"class":47},[33,80936,80937,80939,80942],{"class":35,"line":34261},[33,80938,80674],{"class":47},[33,80940,80941],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[33,80943,32719],{"class":47},[33,80945,80946],{"class":35,"line":34267},[33,80947,79145],{"class":47},[33,80949,80950],{"class":35,"line":34273},[33,80951,80639],{"class":47},[33,80953,80954,80956,80959],{"class":35,"line":34284},[33,80955,80644],{"class":47},[33,80957,80958],{"class":119},"'3998274'",[33,80960,32719],{"class":47},[33,80962,80963,80965,80968],{"class":35,"line":34290},[33,80964,80654],{"class":47},[33,80966,80967],{"class":119},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[33,80969,32719],{"class":47},[33,80971,80972,80974,80976],{"class":35,"line":34296},[33,80973,80664],{"class":47},[33,80975,80844],{"class":119},[33,80977,32719],{"class":47},[33,80979,80980,80982,80985],{"class":35,"line":34306},[33,80981,80674],{"class":47},[33,80983,80984],{"class":119},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[33,80986,32719],{"class":47},[33,80988,80989],{"class":35,"line":34312},[33,80990,79145],{"class":47},[33,80992,80993],{"class":35,"line":34323},[33,80994,54362],{"class":47},[33,80996,80997],{"class":35,"line":34329},[33,80998,160],{"emptyLinePlaceholder":159},[33,81000,81001],{"class":35,"line":34339},[33,81002,81003],{"class":60},"    \u002F\u002F 1.渲染函数\n",[33,81005,81006,81008,81010,81012,81014],{"class":35,"line":34344},[33,81007,71337],{"class":39},[33,81009,71340],{"class":43},[33,81011,345],{"class":47},[33,81013,5282],{"class":955},[33,81015,13693],{"class":47},[33,81017,81018],{"class":35,"line":34350},[33,81019,81020],{"class":60},"      \u002F\u002F 声明空字符串\n",[33,81022,81023,81026,81029,81031],{"class":35,"line":34399},[33,81024,81025],{"class":39},"      let",[33,81027,81028],{"class":47}," str ",[33,81030,73],{"class":39},[33,81032,71357],{"class":119},[33,81034,81035],{"class":35,"line":34446},[33,81036,71362],{"class":60},[33,81038,81039,81041,81044,81046,81049,81052],{"class":35,"line":34451},[33,81040,59260],{"class":47},[33,81042,81043],{"class":43},"forEach",[33,81045,345],{"class":47},[33,81047,81048],{"class":955},"item",[33,81050,81051],{"class":39}," =>",[33,81053,16823],{"class":47},[33,81055,81056,81058,81061,81064,81066,81069,81071,81074,81077,81079],{"class":35,"line":34457},[33,81057,62523],{"class":39},[33,81059,81060],{"class":47}," { ",[33,81062,81063],{"class":76},"name",[33,81065,13686],{"class":47},[33,81067,81068],{"class":76},"price",[33,81070,13686],{"class":47},[33,81072,81073],{"class":76},"picture",[33,81075,81076],{"class":47}," } ",[33,81078,73],{"class":39},[33,81080,81081],{"class":47}," item\n",[33,81083,81084,81087,81089],{"class":35,"line":34476},[33,81085,81086],{"class":47},"        str ",[33,81088,10728],{"class":39},[33,81090,71421],{"class":119},[33,81092,81093],{"class":35,"line":34482},[33,81094,81095],{"class":119},"          \u003Cdiv class=\"item\">\n",[33,81097,81098,81101,81103],{"class":35,"line":34502},[33,81099,81100],{"class":119},"            \u003Cimg src=\"${",[33,81102,81073],{"class":47},[33,81104,81105],{"class":119},"}\" alt=\"\">\n",[33,81107,81108,81111,81113],{"class":35,"line":34508},[33,81109,81110],{"class":119},"            \u003Cp class=\"name\">${",[33,81112,81063],{"class":47},[33,81114,81115],{"class":119},"}\u003C\u002Fp>\n",[33,81117,81118,81121,81123],{"class":35,"line":34514},[33,81119,81120],{"class":119},"            \u003Cp class=\"price\">${",[33,81122,81068],{"class":47},[33,81124,81115],{"class":119},[33,81126,81127],{"class":35,"line":34524},[33,81128,81129],{"class":119},"          \u003C\u002Fdiv>\n",[33,81131,81132],{"class":35,"line":34529},[33,81133,81134],{"class":119},"        `\n",[33,81136,81137],{"class":35,"line":34535},[33,81138,66068],{"class":47},[33,81140,81141],{"class":35,"line":34551},[33,81142,81143],{"class":60},"      \u002F\u002F 追加给List\n",[33,81145,81146,81148,81150,81152,81155,81157,81159],{"class":35,"line":34596},[33,81147,57024],{"class":47},[33,81149,55652],{"class":43},[33,81151,345],{"class":47},[33,81153,81154],{"class":119},"'.list'",[33,81156,75502],{"class":47},[33,81158,73],{"class":39},[33,81160,75238],{"class":47},[33,81162,81163],{"class":35,"line":34602},[33,81164,916],{"class":47},[33,81166,81167],{"class":35,"line":34608},[33,81168,81169],{"class":60},"    \u002F\u002F 页面一打开就需要渲染\n",[33,81171,81172,81175],{"class":35,"line":34614},[33,81173,81174],{"class":43},"    render",[33,81176,81177],{"class":47},"(goodsList)\n",[33,81179,81180],{"class":35,"line":34625},[33,81181,81182],{"class":60},"    \u002F\u002F 2.过滤筛选\n",[33,81184,81185,81187,81189,81191,81194,81196,81198,81200,81202,81204,81206,81208],{"class":35,"line":34631},[33,81186,53660],{"class":47},[33,81188,55652],{"class":43},[33,81190,345],{"class":47},[33,81192,81193],{"class":119},"'.filter'",[33,81195,32079],{"class":47},[33,81197,59066],{"class":43},[33,81199,345],{"class":47},[33,81201,59071],{"class":119},[33,81203,13686],{"class":47},[33,81205,1696],{"class":955},[33,81207,81051],{"class":39},[33,81209,16823],{"class":47},[33,81211,81212],{"class":35,"line":34637},[33,81213,81214],{"class":60},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[33,81216,81217,81219,81221,81224,81226,81228,81230,81232],{"class":35,"line":34643},[33,81218,59481],{"class":39},[33,81220,81060],{"class":47},[33,81222,81223],{"class":76},"tagName",[33,81225,13686],{"class":47},[33,81227,32790],{"class":76},[33,81229,81076],{"class":47},[33,81231,73],{"class":39},[33,81233,81234],{"class":47}," e.target\n",[33,81236,81237],{"class":35,"line":34661},[33,81238,81239],{"class":60},"      \u002F\u002F 判断\n",[33,81241,81242,81244,81246,81248,81250],{"class":35,"line":34675},[33,81243,55733],{"class":39},[33,81245,68287],{"class":47},[33,81247,55739],{"class":39},[33,81249,69509],{"class":119},[33,81251,13693],{"class":47},[33,81253,81254],{"class":35,"line":34684},[33,81255,81256],{"class":60},"        \u002F\u002F console.log(11)\n",[33,81258,81259],{"class":35,"line":34693},[33,81260,81261],{"class":60},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[33,81263,81264],{"class":35,"line":34702},[33,81265,81266],{"class":60},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[33,81268,81269,81271,81273,81275],{"class":35,"line":34711},[33,81270,53083],{"class":39},[33,81272,53086],{"class":47},[33,81274,73],{"class":39},[33,81276,81277],{"class":47}," goodsList\n",[33,81279,81280,81282,81285,81287,81290],{"class":35,"line":34717},[33,81281,3915],{"class":39},[33,81283,81284],{"class":47}," (dataset.index ",[33,81286,55739],{"class":39},[33,81288,81289],{"class":119}," '1'",[33,81291,13693],{"class":47},[33,81293,81294,81297,81299,81302,81305,81307,81309,81311,81314,81316,81318,81321,81323,81325,81327],{"class":35,"line":34723},[33,81295,81296],{"class":47},"          arr ",[33,81298,73],{"class":39},[33,81300,81301],{"class":47}," goodsList.",[33,81303,81304],{"class":43},"filter",[33,81306,345],{"class":47},[33,81308,81048],{"class":955},[33,81310,81051],{"class":39},[33,81312,81313],{"class":47}," item.price ",[33,81315,3151],{"class":39},[33,81317,5492],{"class":76},[33,81319,81320],{"class":39}," &&",[33,81322,81313],{"class":47},[33,81324,3041],{"class":39},[33,81326,7141],{"class":76},[33,81328,884],{"class":47},[33,81330,81331,81334,81336,81338,81340,81342,81345],{"class":35,"line":34731},[33,81332,81333],{"class":47},"        } ",[33,81335,3142],{"class":39},[33,81337,3145],{"class":39},[33,81339,81284],{"class":47},[33,81341,55739],{"class":39},[33,81343,81344],{"class":119}," '2'",[33,81346,13693],{"class":47},[33,81348,81349,81351,81353,81355,81357,81359,81361,81363,81365,81367,81369,81371,81373,81375,81378],{"class":35,"line":34736},[33,81350,81296],{"class":47},[33,81352,73],{"class":39},[33,81354,81301],{"class":47},[33,81356,81304],{"class":43},[33,81358,345],{"class":47},[33,81360,81048],{"class":955},[33,81362,81051],{"class":39},[33,81364,81313],{"class":47},[33,81366,3151],{"class":39},[33,81368,7141],{"class":76},[33,81370,81320],{"class":39},[33,81372,81313],{"class":47},[33,81374,3041],{"class":39},[33,81376,81377],{"class":76}," 300",[33,81379,884],{"class":47},[33,81381,81382,81384,81386,81388,81390,81392,81395],{"class":35,"line":34742},[33,81383,81333],{"class":47},[33,81385,3142],{"class":39},[33,81387,3145],{"class":39},[33,81389,81284],{"class":47},[33,81391,55739],{"class":39},[33,81393,81394],{"class":119}," '3'",[33,81396,13693],{"class":47},[33,81398,81399,81401,81403,81405,81407,81409,81411,81413,81415,81417,81419],{"class":35,"line":34753},[33,81400,81296],{"class":47},[33,81402,73],{"class":39},[33,81404,81301],{"class":47},[33,81406,81304],{"class":43},[33,81408,345],{"class":47},[33,81410,81048],{"class":955},[33,81412,81051],{"class":39},[33,81414,81313],{"class":47},[33,81416,3151],{"class":39},[33,81418,81377],{"class":76},[33,81420,884],{"class":47},[33,81422,81423],{"class":35,"line":34759},[33,81424,1334],{"class":47},[33,81426,81427],{"class":35,"line":34779},[33,81428,81429],{"class":60},"        \u002F\u002F 渲染函数\n",[33,81431,81432,81434],{"class":35,"line":34785},[33,81433,71661],{"class":43},[33,81435,53665],{"class":47},[33,81437,81438],{"class":35,"line":34791},[33,81439,53651],{"class":47},[33,81441,81442],{"class":35,"line":34797},[33,81443,160],{"emptyLinePlaceholder":159},[33,81445,81446],{"class":35,"line":34814},[33,81447,34714],{"class":47},[33,81449,81450,81452,81454],{"class":35,"line":34820},[33,81451,53670],{"class":47},[33,81453,53066],{"class":52553},[33,81455,52560],{"class":47},[33,81457,81458,81460,81462],{"class":35,"line":34826},[33,81459,53038],{"class":47},[33,81461,53053],{"class":52553},[33,81463,52560],{"class":47},[33,81465,81466],{"class":35,"line":34832},[33,81467,160],{"emptyLinePlaceholder":159},[33,81469,81470,81472,81474],{"class":35,"line":34838},[33,81471,53038],{"class":47},[33,81473,51888],{"class":52553},[33,81475,52560],{"class":47},[18,81477,81479],{"id":81478},"_410-深入了解对象","4.10 深入了解对象",[1599,81481,81483],{"id":81482},"_4101-创建对象","4.10.1 创建对象",[14,81485,81486],{},[2918,81487],{"alt":28,"src":81488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,81490,81491],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[1599,81493,81495],{"id":81494},"_4102-构造函数","4.10.2 构造函数",[14,81497,81498,81501],{},[480,81499,81500],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,81503,81504,81507],{},[480,81505,81506],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[23,81509,81511],{"className":51886,"code":81510,"language":51888,"meta":28,"style":28},"\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",[30,81512,81513,81521,81526,81547,81560,81572,81584,81588,81593,81620,81625,81652],{"__ignoreMap":28},[33,81514,81515,81517,81519],{"class":35,"line":36},[33,81516,875],{"class":47},[33,81518,53066],{"class":52553},[33,81520,52560],{"class":47},[33,81522,81523],{"class":35,"line":51},[33,81524,81525],{"class":60},"\u002F\u002F例：\n",[33,81527,81528,81530,81533,81535,81537,81539,81541,81543,81545],{"class":35,"line":57},[33,81529,55702],{"class":39},[33,81531,81532],{"class":43}," Pig",[33,81534,345],{"class":47},[33,81536,81063],{"class":955},[33,81538,704],{"class":47},[33,81540,71474],{"class":955},[33,81542,704],{"class":47},[33,81544,71491],{"class":955},[33,81546,13693],{"class":47},[33,81548,81549,81552,81555,81557],{"class":35,"line":64},[33,81550,81551],{"class":76},"    this",[33,81553,81554],{"class":47},".name",[33,81556,73],{"class":39},[33,81558,81559],{"class":47},"name\n",[33,81561,81562,81564,81567,81569],{"class":35,"line":83},[33,81563,81551],{"class":76},[33,81565,81566],{"class":47},".age",[33,81568,73],{"class":39},[33,81570,81571],{"class":47},"age\n",[33,81573,81574,81576,81579,81581],{"class":35,"line":89},[33,81575,81551],{"class":76},[33,81577,81578],{"class":47},".gender",[33,81580,73],{"class":39},[33,81582,81583],{"class":47},"gender    \n",[33,81585,81586],{"class":35,"line":98},[33,81587,231],{"class":47},[33,81589,81590],{"class":35,"line":110},[33,81591,81592],{"class":60},"\u002F\u002F创建佩奇对象\n",[33,81594,81595,81597,81600,81602,81604,81606,81609,81611,81613,81615,81618],{"class":35,"line":134},[33,81596,588],{"class":39},[33,81598,81599],{"class":76}," Peppa",[33,81601,12968],{"class":39},[33,81603,81532],{"class":43},[33,81605,345],{"class":47},[33,81607,81608],{"class":119},"'佩奇'",[33,81610,704],{"class":47},[33,81612,727],{"class":76},[33,81614,704],{"class":47},[33,81616,81617],{"class":119},"'女'",[33,81619,884],{"class":47},[33,81621,81622],{"class":35,"line":156},[33,81623,81624],{"class":60},"\u002F\u002F创建乔治对象\n",[33,81626,81627,81629,81632,81634,81636,81638,81641,81643,81645,81647,81650],{"class":35,"line":163},[33,81628,588],{"class":39},[33,81630,81631],{"class":76}," George",[33,81633,12968],{"class":39},[33,81635,81532],{"class":43},[33,81637,345],{"class":47},[33,81639,81640],{"class":119},"'乔治'",[33,81642,704],{"class":47},[33,81644,712],{"class":76},[33,81646,704],{"class":47},[33,81648,81649],{"class":119},"'男'",[33,81651,884],{"class":47},[33,81653,81654,81656,81658],{"class":35,"line":169},[33,81655,53038],{"class":47},[33,81657,53066],{"class":52553},[33,81659,52560],{"class":47},[14,81661,81662],{},[2918,81663],{"alt":28,"src":81664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,81666,81667],{},[2918,81668],{"alt":28,"src":81669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,81671,81672],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,81674,81675],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,81677,81678],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,81680,81681],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,81683,81684],{},"这里用等号是因为：对象.属性=值",[14,81686,81687],{},"①利用对象字面量创建对象",[14,81689,81690],{},"const o={",[14,81692,81693],{},"name:'pink'",[14,81695,81696],{},"} ②利用new Object创建对象",[14,81698,81699],{},"const o=new Object({name:'pink'})",[14,81701,81702],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,81704,81705],{},"构造函数创建对象的执行过程：",[14,81707,81708],{},[2918,81709],{"alt":28,"src":81710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[1599,81712,81714],{"id":81713},"_4103-实例成员","4.10.3 实例成员",[14,81716,81717],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[574,81719,81720,81723,81726],{},[564,81721,81722],{},"实例对象的属性和方法即为实例成员",[564,81724,81725],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[564,81727,81728],{},"构造函数创建的实例对象彼此独立互不影响",[1599,81730,81732],{"id":81731},"_4104-静态成员","4.10.4 静态成员",[14,81734,81735],{},[2918,81736],{"alt":28,"src":81737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,81739,81740],{},"静态成员有Date.now() Math.PI Math.random()",[14,81742,81743],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,81745,81746],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,81748,81749],{},"function Pig(name) n {",[14,81751,81752],{},"this.name=name",[14,81754,2542],{},[14,81756,81757],{},"Pig.eyes=2",[14,81759,81760],{},"Pig.sayHai=function () { console.log(this) }",[14,81762,81763],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,81765,81766],{},"console.log(Pig.eyes) \u002F\u002F2",[14,81768,12583],{},[574,81770,81771,81774,81777,81780,81783],{},[564,81772,81773],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[564,81775,81776],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[564,81778,81779],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[564,81781,81782],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[564,81784,81785],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,81787,81788],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[1599,81790,81792],{"id":81791},"_4105-内置构造函数","4.10.5 内置构造函数",[14,81794,81795],{},"内置构造函数包含：",[14,81797,81798],{},[2918,81799],{"alt":28,"src":81800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,81802,81803],{},[2918,81804],{"alt":28,"src":81805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,81807,81808],{},"这些基本数据类型，js对他们进行了包装",[53066,81810,81811],{},"\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",[23249,81813,81815],{"id":81814},"_41051-object","4.10.5.1 Object",[14,81817,81818],{},"Object 是内置的构造函数，用于创建普通对象",[14,81820,81821],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[23,81823,81825],{"className":51886,"code":81824,"language":51888,"meta":28,"style":28},"const user=new Object({name:'小明',age:15})\n",[30,81826,81827],{"__ignoreMap":28},[33,81828,81829],{"class":35,"line":36},[33,81830,81824],{"class":47},[14,81832,81833],{},"三个常用的静态方法：",[24161,81835,81837],{"id":81836},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,81839,81840],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,81842,81843],{},[2918,81844],{"alt":28,"src":81845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,81847,81848],{},[2918,81849],{"alt":28,"src":81850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[23,81852,81854],{"className":54320,"code":81853,"language":54322,"meta":28,"style":28},"\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",[30,81855,81856,81864,81872,81877,81882,81887,81892,81897,81902,81910],{"__ignoreMap":28},[33,81857,81858,81860,81862],{"class":35,"line":36},[33,81859,875],{"class":47},[33,81861,53053],{"class":52553},[33,81863,52560],{"class":47},[33,81865,81866,81868,81870],{"class":35,"line":51},[33,81867,53397],{"class":47},[33,81869,53066],{"class":52553},[33,81871,52560],{"class":47},[33,81873,81874],{"class":35,"line":57},[33,81875,81876],{"class":47},"    const o = { name: 'pink', age: 6 }\n",[33,81878,81879],{"class":35,"line":64},[33,81880,81881],{"class":47},"    \u002F\u002F 获得所有属性名\n",[33,81883,81884],{"class":35,"line":83},[33,81885,81886],{"class":47},"    const arr = Object.keys(o)\n",[33,81888,81889],{"class":35,"line":89},[33,81890,81891],{"class":47},"    console.log(arr)\n",[33,81893,81894],{"class":35,"line":98},[33,81895,81896],{"class":47},"    \u002F\u002F 获得所有属性值\n",[33,81898,81899],{"class":35,"line":110},[33,81900,81901],{"class":47},"    console.log(Object.values(o))\n",[33,81903,81904,81906,81908],{"class":35,"line":134},[33,81905,53670],{"class":47},[33,81907,53066],{"class":52553},[33,81909,52560],{"class":47},[33,81911,81912,81914,81916],{"class":35,"line":156},[33,81913,53038],{"class":47},[33,81915,53053],{"class":52553},[33,81917,52560],{"class":47},[24161,81919,81921],{"id":81920},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81923,81924],{},"Object.assign(oo,o)",[14,81926,81927],{},"后的东西添加给前 是追加",[14,81929,81930],{},[2918,81931],{"alt":28,"src":81932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81934,81935],{},[2918,81936],{"alt":28,"src":81937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[23,81939,81941],{"className":54320,"code":81940,"language":54322,"meta":28,"style":28},"\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",[30,81942,81943,81951,81959,81963,81967,81971,81975,81979,81983,81988,81993,81998,82003,82008,82016],{"__ignoreMap":28},[33,81944,81945,81947,81949],{"class":35,"line":36},[33,81946,875],{"class":47},[33,81948,53053],{"class":52553},[33,81950,52560],{"class":47},[33,81952,81953,81955,81957],{"class":35,"line":51},[33,81954,53397],{"class":47},[33,81956,53066],{"class":52553},[33,81958,52560],{"class":47},[33,81960,81961],{"class":35,"line":57},[33,81962,81876],{"class":47},[33,81964,81965],{"class":35,"line":64},[33,81966,81881],{"class":47},[33,81968,81969],{"class":35,"line":83},[33,81970,81886],{"class":47},[33,81972,81973],{"class":35,"line":89},[33,81974,81891],{"class":47},[33,81976,81977],{"class":35,"line":98},[33,81978,81896],{"class":47},[33,81980,81981],{"class":35,"line":110},[33,81982,81901],{"class":47},[33,81984,81985],{"class":35,"line":134},[33,81986,81987],{"class":47},"    const oo = {}\n",[33,81989,81990],{"class":35,"line":156},[33,81991,81992],{"class":47},"    Object.assign(oo, o)\n",[33,81994,81995],{"class":35,"line":163},[33,81996,81997],{"class":47},"    console.log(oo)\n",[33,81999,82000],{"class":35,"line":169},[33,82001,82002],{"class":47},"    Object.assign(o, { gender: '女' })\n",[33,82004,82005],{"class":35,"line":175},[33,82006,82007],{"class":47},"    console.log(o)\n",[33,82009,82010,82012,82014],{"class":35,"line":181},[33,82011,53670],{"class":47},[33,82013,53066],{"class":52553},[33,82015,52560],{"class":47},[33,82017,82018,82020,82022],{"class":35,"line":196},[33,82019,53038],{"class":47},[33,82021,53053],{"class":52553},[33,82023,52560],{"class":47},[14,82025,82026],{},[2918,82027],{"alt":28,"src":82028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23249,82030,82032],{"id":82031},"_41052-array","4.10.5.2 Array",[14,82034,82035],{},"Array 是内置的构造函数，用于创建数组",[14,82037,82038],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[23,82040,82042],{"className":51886,"code":82041,"language":51888,"meta":28,"style":28},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[30,82043,82044,82049],{"__ignoreMap":28},[33,82045,82046],{"class":35,"line":36},[33,82047,82048],{"class":47},"const arr=new Array(3,5)\n",[33,82050,82051],{"class":35,"line":51},[33,82052,82053],{"class":47},"console.log(arr)  \u002F\u002F[3,5]\n",[14,82055,82056],{},"Array的实例方法，这个方法是实例成员",[14,82058,82059],{},[2918,82060],{"alt":28,"src":82061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24161,82063,82065],{"id":82064},"_410521-reduce","4.10.5.2.1 reduce",[14,82067,82068],{},[2918,82069],{"alt":28,"src":82070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[23,82072,82074],{"className":54320,"code":82073,"language":54322,"meta":28,"style":28},"\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",[30,82075,82076,82084,82092,82097,82102,82107,82112,82116,82121,82126,82131,82135,82140,82145,82149,82154,82159,82164,82172],{"__ignoreMap":28},[33,82077,82078,82080,82082],{"class":35,"line":36},[33,82079,875],{"class":47},[33,82081,53053],{"class":52553},[33,82083,52560],{"class":47},[33,82085,82086,82088,82090],{"class":35,"line":51},[33,82087,53397],{"class":47},[33,82089,53066],{"class":52553},[33,82091,52560],{"class":47},[33,82093,82094],{"class":35,"line":57},[33,82095,82096],{"class":47},"    const arr = [1, 5, 8]\n",[33,82098,82099],{"class":35,"line":64},[33,82100,82101],{"class":47},"    \u002F\u002F 1.没有初始值\n",[33,82103,82104],{"class":35,"line":83},[33,82105,82106],{"class":47},"    const total = arr.reduce(function (prev, current) {\n",[33,82108,82109],{"class":35,"line":89},[33,82110,82111],{"class":47},"      return prev + current\n",[33,82113,82114],{"class":35,"line":98},[33,82115,34714],{"class":47},[33,82117,82118],{"class":35,"line":110},[33,82119,82120],{"class":47},"    console.log(total)   \u002F\u002F14\n",[33,82122,82123],{"class":35,"line":134},[33,82124,82125],{"class":47},"    \u002F\u002F 2.有初始值\n",[33,82127,82128],{"class":35,"line":156},[33,82129,82130],{"class":47},"    const total1 = arr.reduce(function (prev, current) {\n",[33,82132,82133],{"class":35,"line":163},[33,82134,82111],{"class":47},[33,82136,82137],{"class":35,"line":169},[33,82138,82139],{"class":47},"    }, 10)\n",[33,82141,82142],{"class":35,"line":175},[33,82143,82144],{"class":47},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[33,82146,82147],{"class":35,"line":181},[33,82148,160],{"emptyLinePlaceholder":159},[33,82150,82151],{"class":35,"line":196},[33,82152,82153],{"class":47},"    \u002F\u002F 3.箭头函数写法\n",[33,82155,82156],{"class":35,"line":213},[33,82157,82158],{"class":47},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[33,82160,82161],{"class":35,"line":228},[33,82162,82163],{"class":47},"    console.log(total2)   \u002F\u002F24\n",[33,82165,82166,82168,82170],{"class":35,"line":1345},[33,82167,53670],{"class":47},[33,82169,53066],{"class":52553},[33,82171,52560],{"class":47},[33,82173,82174,82176,82178],{"class":35,"line":1350},[33,82175,53038],{"class":47},[33,82177,53053],{"class":52553},[33,82179,52560],{"class":47},[14,82181,82182],{},"执行过程：",[574,82184,82185,82188,82191],{},[564,82186,82187],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[564,82189,82190],{},"每一次循环，把返回值给作为下一次循环的上一次值",[564,82192,82193],{},"如果有起始值，则起始值作为上一次值",[23,82195,82197],{"className":54320,"code":82196,"language":54322,"meta":28,"style":28},"\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",[30,82198,82199,82207,82215,82219,82223,82227,82231,82235,82239,82244,82249,82254,82259,82264,82268,82272,82276,82280,82284,82288,82293,82297,82302,82306,82311,82316,82320,82324,82328,82336],{"__ignoreMap":28},[33,82200,82201,82203,82205],{"class":35,"line":36},[33,82202,875],{"class":47},[33,82204,53053],{"class":52553},[33,82206,52560],{"class":47},[33,82208,82209,82211,82213],{"class":35,"line":51},[33,82210,53397],{"class":47},[33,82212,53066],{"class":52553},[33,82214,52560],{"class":47},[33,82216,82217],{"class":35,"line":57},[33,82218,82096],{"class":47},[33,82220,82221],{"class":35,"line":64},[33,82222,82101],{"class":47},[33,82224,82225],{"class":35,"line":83},[33,82226,82106],{"class":47},[33,82228,82229],{"class":35,"line":89},[33,82230,82111],{"class":47},[33,82232,82233],{"class":35,"line":98},[33,82234,34714],{"class":47},[33,82236,82237],{"class":35,"line":110},[33,82238,82120],{"class":47},[33,82240,82241],{"class":35,"line":134},[33,82242,82243],{"class":47},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[33,82245,82246],{"class":35,"line":156},[33,82247,82248],{"class":47},"    \u002F\u002F     1              5                    6\n",[33,82250,82251],{"class":35,"line":163},[33,82252,82253],{"class":47},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[33,82255,82256],{"class":35,"line":169},[33,82257,82258],{"class":47},"    \u002F\u002F     6              8                    14\n",[33,82260,82261],{"class":35,"line":175},[33,82262,82263],{"class":47},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[33,82265,82266],{"class":35,"line":181},[33,82267,82125],{"class":47},[33,82269,82270],{"class":35,"line":196},[33,82271,82130],{"class":47},[33,82273,82274],{"class":35,"line":213},[33,82275,82111],{"class":47},[33,82277,82278],{"class":35,"line":228},[33,82279,82139],{"class":47},[33,82281,82282],{"class":35,"line":1345},[33,82283,82144],{"class":47},[33,82285,82286],{"class":35,"line":1350},[33,82287,82243],{"class":47},[33,82289,82290],{"class":35,"line":1359},[33,82291,82292],{"class":47},"    \u002F\u002F     10             1                     11\n",[33,82294,82295],{"class":35,"line":1364},[33,82296,82253],{"class":47},[33,82298,82299],{"class":35,"line":1370},[33,82300,82301],{"class":47},"    \u002F\u002F     11             5                    16\n",[33,82303,82304],{"class":35,"line":1425},[33,82305,82253],{"class":47},[33,82307,82308],{"class":35,"line":1438},[33,82309,82310],{"class":47},"    \u002F\u002F     16             8                    24\n",[33,82312,82313],{"class":35,"line":1451},[33,82314,82315],{"class":47},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[33,82317,82318],{"class":35,"line":1457},[33,82319,82153],{"class":47},[33,82321,82322],{"class":35,"line":1466},[33,82323,82158],{"class":47},[33,82325,82326],{"class":35,"line":1471},[33,82327,82163],{"class":47},[33,82329,82330,82332,82334],{"class":35,"line":1477},[33,82331,53670],{"class":47},[33,82333,53066],{"class":52553},[33,82335,52560],{"class":47},[33,82337,82338,82340,82342],{"class":35,"line":1504},[33,82339,53038],{"class":47},[33,82341,53053],{"class":52553},[33,82343,52560],{"class":47},[24161,82345,82347],{"id":82346},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,82349,82350],{},[2918,82351],{"alt":28,"src":82352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[23,82354,82356],{"className":54320,"code":82355,"language":54322,"meta":28,"style":28},"\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",[30,82357,82358,82366,82374,82379,82384,82389,82394,82398,82403,82408,82413,82418,82423,82428,82432,82437,82441,82446,82454],{"__ignoreMap":28},[33,82359,82360,82362,82364],{"class":35,"line":36},[33,82361,875],{"class":47},[33,82363,53053],{"class":52553},[33,82365,52560],{"class":47},[33,82367,82368,82370,82372],{"class":35,"line":51},[33,82369,53397],{"class":47},[33,82371,53066],{"class":52553},[33,82373,52560],{"class":47},[33,82375,82376],{"class":35,"line":57},[33,82377,82378],{"class":47},"    const arr = [\n",[33,82380,82381],{"class":35,"line":64},[33,82382,82383],{"class":47},"      { name: '张三', salary: 10000 },\n",[33,82385,82386],{"class":35,"line":83},[33,82387,82388],{"class":47},"      { name: '李四', salary: 10000 },\n",[33,82390,82391],{"class":35,"line":89},[33,82392,82393],{"class":47},"      { name: '王五', salary: 10000 }\n",[33,82395,82396],{"class":35,"line":98},[33,82397,54362],{"class":47},[33,82399,82400],{"class":35,"line":110},[33,82401,82402],{"class":47},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[33,82404,82405],{"class":35,"line":134},[33,82406,82407],{"class":47},"    \u002F\u002F prev是累计值\n",[33,82409,82410],{"class":35,"line":156},[33,82411,82412],{"class":47},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[33,82414,82415],{"class":35,"line":163},[33,82416,82417],{"class":47},"    console.log(total)\n",[33,82419,82420],{"class":35,"line":169},[33,82421,82422],{"class":47},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[33,82424,82425],{"class":35,"line":175},[33,82426,82427],{"class":47},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[33,82429,82430],{"class":35,"line":181},[33,82431,82422],{"class":47},[33,82433,82434],{"class":35,"line":196},[33,82435,82436],{"class":47},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[33,82438,82439],{"class":35,"line":213},[33,82440,82422],{"class":47},[33,82442,82443],{"class":35,"line":228},[33,82444,82445],{"class":47},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[33,82447,82448,82450,82452],{"class":35,"line":1345},[33,82449,53670],{"class":47},[33,82451,53066],{"class":52553},[33,82453,52560],{"class":47},[33,82455,82456,82458,82460],{"class":35,"line":1350},[33,82457,53038],{"class":47},[33,82459,53053],{"class":52553},[33,82461,52560],{"class":47},[24161,82463,82465],{"id":82464},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,82467,82468],{},[2918,82469],{"alt":28,"src":82470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,82472,82473],{},[2918,82474],{"alt":28,"src":82475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[574,82477,82478],{},[564,82479,82480],{},"find()",[14,82482,82483],{},"循环查找，找到第一个就ok",[14,82485,82486],{},[126,82487,82490],{"href":82488,"rel":82489},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25117],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[23,82492,82494],{"className":51886,"code":82493,"language":51888,"meta":28,"style":28},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[30,82495,82496,82501,82506],{"__ignoreMap":28},[33,82497,82498],{"class":35,"line":36},[33,82499,82500],{"class":47},"const array1 = [5, 12, 8, 130, 44]\n",[33,82502,82503],{"class":35,"line":51},[33,82504,82505],{"class":47},"const found = array1.find((element) => element > 10)\n",[33,82507,82508],{"class":35,"line":57},[33,82509,82510],{"class":47},"console.log(found)  \u002F\u002F12\n",[14,82512,82513,82515,82516,82521,82522,82525,82526,82528,82529,82534,82535,82537,82538,82540,82541,82543,82544],{},[30,82514,82480],{}," 方法是一个",[126,82517,82520],{"href":82518,"rel":82519},"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",[25117],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[30,82523,82524],{},"callbackFn"," 函数，直到 ",[30,82527,82524],{}," 返回一个",[126,82530,82533],{"href":82531,"rel":82532},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25117],"真值","。然后 ",[30,82536,82480],{}," 返回该元素并停止迭代数组。如果 ",[30,82539,82524],{}," 从未返回真值，则 ",[30,82542,82480],{}," 返回 ",[30,82545,82546],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[23,82548,82550],{"className":54320,"code":82549,"language":54322,"meta":28,"style":28},"\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",[30,82551,82552,82560,82568,82573,82578,82583,82587,82592,82597,82601,82606,82611,82615,82619,82624,82629,82633,82637,82642,82647,82652,82657,82662,82666,82671,82676,82681,82686,82690,82695,82703],{"__ignoreMap":28},[33,82553,82554,82556,82558],{"class":35,"line":36},[33,82555,875],{"class":47},[33,82557,53053],{"class":52553},[33,82559,52560],{"class":47},[33,82561,82562,82564,82566],{"class":35,"line":51},[33,82563,53397],{"class":47},[33,82565,53066],{"class":52553},[33,82567,52560],{"class":47},[33,82569,82570],{"class":35,"line":57},[33,82571,82572],{"class":47},"    const arr = ['red', 'blue', 'green']\n",[33,82574,82575],{"class":35,"line":64},[33,82576,82577],{"class":47},"    const found = arr.find(item => item === 'pink')\n",[33,82579,82580],{"class":35,"line":83},[33,82581,82582],{"class":47},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[33,82584,82585],{"class":35,"line":89},[33,82586,160],{"emptyLinePlaceholder":159},[33,82588,82589],{"class":35,"line":98},[33,82590,82591],{"class":47},"    \u002F\u002F 使用场景，用于查找数据\n",[33,82593,82594],{"class":35,"line":110},[33,82595,82596],{"class":47},"    const arr1 = [\n",[33,82598,82599],{"class":35,"line":134},[33,82600,80639],{"class":47},[33,82602,82603],{"class":35,"line":156},[33,82604,82605],{"class":47},"        name: '小米',\n",[33,82607,82608],{"class":35,"line":163},[33,82609,82610],{"class":47},"        price: 1999\n",[33,82612,82613],{"class":35,"line":169},[33,82614,79145],{"class":47},[33,82616,82617],{"class":35,"line":175},[33,82618,80639],{"class":47},[33,82620,82621],{"class":35,"line":181},[33,82622,82623],{"class":47},"        name: '华为',\n",[33,82625,82626],{"class":35,"line":196},[33,82627,82628],{"class":47},"        price: 3999\n",[33,82630,82631],{"class":35,"line":213},[33,82632,53651],{"class":47},[33,82634,82635],{"class":35,"line":228},[33,82636,54362],{"class":47},[33,82638,82639],{"class":35,"line":1345},[33,82640,82641],{"class":47},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[33,82643,82644],{"class":35,"line":1350},[33,82645,82646],{"class":47},"    \u002F\u002F const found1 = arr1.find(item => {\n",[33,82648,82649],{"class":35,"line":1359},[33,82650,82651],{"class":47},"    \u002F\u002F   if (item.name === '小米') {\n",[33,82653,82654],{"class":35,"line":1364},[33,82655,82656],{"class":47},"    \u002F\u002F     return item\n",[33,82658,82659],{"class":35,"line":1370},[33,82660,82661],{"class":47},"    \u002F\u002F   }\n",[33,82663,82664],{"class":35,"line":1425},[33,82665,64543],{"class":47},[33,82667,82668],{"class":35,"line":1438},[33,82669,82670],{"class":47},"    \u002F\u002F 另一种写法\n",[33,82672,82673],{"class":35,"line":1451},[33,82674,82675],{"class":47},"    const found1 = arr1.find(item => {\n",[33,82677,82678],{"class":35,"line":1457},[33,82679,82680],{"class":47},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[33,82682,82683],{"class":35,"line":1466},[33,82684,82685],{"class":47},"      return item.name = '小米'\n",[33,82687,82688],{"class":35,"line":1471},[33,82689,34714],{"class":47},[33,82691,82692],{"class":35,"line":1477},[33,82693,82694],{"class":47},"    console.log(found1)\n",[33,82696,82697,82699,82701],{"class":35,"line":1504},[33,82698,53670],{"class":47},[33,82700,53066],{"class":52553},[33,82702,52560],{"class":47},[33,82704,82705,82707,82709],{"class":35,"line":1509},[33,82706,53038],{"class":47},[33,82708,53053],{"class":52553},[33,82710,52560],{"class":47},[14,82712,82713],{},[2918,82714],{"alt":28,"src":82715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,82717,82718],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[574,82720,82721],{"start":51},[564,82722,82723],{},"every()返回的是布尔值",[14,82725,82726],{},[126,82727,82730],{"href":82728,"rel":82729},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25117],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,82732,82733],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,82735,82736],{},"some是只有有一个就没问题",[14,82738,82739],{},"every是必须全是才行",[23,82741,82745],{"className":82742,"code":82743,"language":82744,"meta":28,"style":28},"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",[30,82746,82747,82763,82777,82781,82790],{"__ignoreMap":28},[33,82748,82749,82751,82754,82756,82758,82761],{"class":35,"line":36},[33,82750,55702],{"class":39},[33,82752,82753],{"class":47}," isBigEnough(element, ",[33,82755,75311],{"class":39},[33,82757,13686],{"class":47},[33,82759,82760],{"class":39},"array",[33,82762,13693],{"class":47},[33,82764,82765,82768,82771,82773,82775],{"class":35,"line":51},[33,82766,82767],{"class":39},"  return",[33,82769,82770],{"class":47}," element ",[33,82772,3151],{"class":39},[33,82774,3461],{"class":76},[33,82776,80],{"class":47},[33,82778,82779],{"class":35,"line":57},[33,82780,231],{"class":47},[33,82782,82783,82786,82788],{"class":35,"line":64},[33,82784,82785],{"class":47},"[12, 5, 8, 130, 44].every(isBigEnough); ",[33,82787,34582],{"class":39},[33,82789,55769],{"class":47},[33,82791,82792,82795,82797],{"class":35,"line":83},[33,82793,82794],{"class":47},"[12, 54, 18, 130, 44].every(isBigEnough); ",[33,82796,34582],{"class":39},[33,82798,59193],{"class":47},[23,82800,82802],{"className":54320,"code":82801,"language":54322,"meta":28,"style":28},"\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",[30,82803,82804,82812,82820,82825,82829,82834,82839,82847],{"__ignoreMap":28},[33,82805,82806,82808,82810],{"class":35,"line":36},[33,82807,875],{"class":47},[33,82809,53053],{"class":52553},[33,82811,52560],{"class":47},[33,82813,82814,82816,82818],{"class":35,"line":51},[33,82815,53397],{"class":47},[33,82817,53066],{"class":52553},[33,82819,52560],{"class":47},[33,82821,82822],{"class":35,"line":57},[33,82823,82824],{"class":47},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[33,82826,82827],{"class":35,"line":64},[33,82828,79575],{"class":47},[33,82830,82831],{"class":35,"line":83},[33,82832,82833],{"class":47},"    const flag = arr.every(item => item >= 10)\n",[33,82835,82836],{"class":35,"line":89},[33,82837,82838],{"class":47},"    console.log(flag)    \u002F\u002Ftrue\n",[33,82840,82841,82843,82845],{"class":35,"line":98},[33,82842,53670],{"class":47},[33,82844,53066],{"class":52553},[33,82846,52560],{"class":47},[33,82848,82849,82851,82853],{"class":35,"line":110},[33,82850,53038],{"class":47},[33,82852,53053],{"class":52553},[33,82854,52560],{"class":47},[23,82856,82858],{"className":54320,"code":82857,"language":54322,"meta":28,"style":28},"\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",[30,82859,82860,82868,82876,82880,82885,82890,82895,82903],{"__ignoreMap":28},[33,82861,82862,82864,82866],{"class":35,"line":36},[33,82863,875],{"class":47},[33,82865,53053],{"class":52553},[33,82867,52560],{"class":47},[33,82869,82870,82872,82874],{"class":35,"line":51},[33,82871,53397],{"class":47},[33,82873,53066],{"class":52553},[33,82875,52560],{"class":47},[33,82877,82878],{"class":35,"line":57},[33,82879,82824],{"class":47},[33,82881,82882],{"class":35,"line":64},[33,82883,82884],{"class":47},"    const arr = [10, 0, 5]\n",[33,82886,82887],{"class":35,"line":83},[33,82888,82889],{"class":47},"    const flag = arr.some(item => item >= 10)\n",[33,82891,82892],{"class":35,"line":89},[33,82893,82894],{"class":47},"    console.log(flag)   \u002F\u002Ftrue\n",[33,82896,82897,82899,82901],{"class":35,"line":98},[33,82898,53670],{"class":47},[33,82900,53066],{"class":52553},[33,82902,52560],{"class":47},[33,82904,82905,82907,82909],{"class":35,"line":110},[33,82906,53038],{"class":47},[33,82908,53053],{"class":52553},[33,82910,52560],{"class":47},[24161,82912,82914],{"id":82913},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,82916,82917],{},[2918,82918],{"alt":28,"src":82919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[23,82921,82923],{"className":51886,"code":82922,"language":51888,"meta":28,"style":28},"\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",[30,82924,82925,82935,82949,82953,82961,82975,82995,83007,83015,83022,83034,83046,83058,83070,83080,83090,83094,83102,83110,83114,83122,83134,83142,83164,83169,83174,83207,83215,83223,83227],{"__ignoreMap":28},[33,82926,82927,82929,82931,82933],{"class":35,"line":36},[33,82928,52550],{"class":47},[33,82930,52554],{"class":52553},[33,82932,52557],{"class":43},[33,82934,52560],{"class":47},[33,82936,82937,82939,82941,82943,82945,82947],{"class":35,"line":51},[33,82938,875],{"class":47},[33,82940,51888],{"class":52553},[33,82942,52569],{"class":43},[33,82944,73],{"class":47},[33,82946,52574],{"class":119},[33,82948,52560],{"class":47},[33,82950,82951],{"class":35,"line":57},[33,82952,160],{"emptyLinePlaceholder":159},[33,82954,82955,82957,82959],{"class":35,"line":64},[33,82956,875],{"class":47},[33,82958,52587],{"class":52553},[33,82960,52560],{"class":47},[33,82962,82963,82965,82967,82969,82971,82973],{"class":35,"line":83},[33,82964,53397],{"class":47},[33,82966,52597],{"class":52553},[33,82968,52600],{"class":43},[33,82970,73],{"class":47},[33,82972,52605],{"class":119},[33,82974,52560],{"class":47},[33,82976,82977,82979,82981,82983,82985,82987,82989,82991,82993],{"class":35,"line":89},[33,82978,53397],{"class":47},[33,82980,52597],{"class":52553},[33,82982,16171],{"class":43},[33,82984,73],{"class":47},[33,82986,52644],{"class":119},[33,82988,52624],{"class":43},[33,82990,73],{"class":47},[33,82992,52651],{"class":119},[33,82994,52560],{"class":47},[33,82996,82997,82999,83001,83003,83005],{"class":35,"line":98},[33,82998,53397],{"class":47},[33,83000,52660],{"class":52553},[33,83002,52663],{"class":47},[33,83004,52660],{"class":52553},[33,83006,52560],{"class":47},[33,83008,83009,83011,83013],{"class":35,"line":110},[33,83010,53397],{"class":47},[33,83012,1544],{"class":52553},[33,83014,52560],{"class":47},[33,83016,83017,83020],{"class":35,"line":134},[33,83018,83019],{"class":52553},"    div",[33,83021,16823],{"class":47},[33,83023,83024,83026,83028,83030,83032],{"class":35,"line":156},[33,83025,56024],{"class":76},[33,83027,52690],{"class":47},[33,83029,3163],{"class":76},[33,83031,52745],{"class":39},[33,83033,80],{"class":47},[33,83035,83036,83038,83040,83042,83044],{"class":35,"line":163},[33,83037,56038],{"class":76},[33,83039,52690],{"class":47},[33,83041,2007],{"class":76},[33,83043,52745],{"class":39},[33,83045,80],{"class":47},[33,83047,83048,83050,83052,83054,83056],{"class":35,"line":169},[33,83049,58612],{"class":76},[33,83051,52690],{"class":47},[33,83053,2007],{"class":76},[33,83055,52745],{"class":39},[33,83057,80],{"class":47},[33,83059,83060,83062,83064,83066,83068],{"class":35,"line":175},[33,83061,66386],{"class":76},[33,83063,52690],{"class":47},[33,83065,2099],{"class":76},[33,83067,52745],{"class":39},[33,83069,80],{"class":47},[33,83071,83072,83074,83076,83078],{"class":35,"line":181},[33,83073,58539],{"class":76},[33,83075,52690],{"class":47},[33,83077,52845],{"class":76},[33,83079,80],{"class":47},[33,83081,83082,83084,83086,83088],{"class":35,"line":196},[33,83083,56137],{"class":76},[33,83085,52690],{"class":47},[33,83087,52898],{"class":76},[33,83089,80],{"class":47},[33,83091,83092],{"class":35,"line":213},[33,83093,916],{"class":47},[33,83095,83096,83098,83100],{"class":35,"line":228},[33,83097,53670],{"class":47},[33,83099,1544],{"class":52553},[33,83101,52560],{"class":47},[33,83103,83104,83106,83108],{"class":35,"line":1345},[33,83105,53038],{"class":47},[33,83107,52587],{"class":52553},[33,83109,52560],{"class":47},[33,83111,83112],{"class":35,"line":1350},[33,83113,160],{"emptyLinePlaceholder":159},[33,83115,83116,83118,83120],{"class":35,"line":1359},[33,83117,875],{"class":47},[33,83119,53053],{"class":52553},[33,83121,52560],{"class":47},[33,83123,83124,83126,83128,83130,83132],{"class":35,"line":1364},[33,83125,53397],{"class":47},[33,83127,52864],{"class":52553},[33,83129,56567],{"class":47},[33,83131,52864],{"class":52553},[33,83133,52560],{"class":47},[33,83135,83136,83138,83140],{"class":35,"line":1370},[33,83137,53397],{"class":47},[33,83139,53066],{"class":52553},[33,83141,52560],{"class":47},[33,83143,83144,83146,83149,83151,83154,83157,83159,83162],{"class":35,"line":1425},[33,83145,12472],{"class":39},[33,83147,83148],{"class":76}," spec",[33,83150,14815],{"class":39},[33,83152,83153],{"class":47}," { size: ",[33,83155,83156],{"class":119},"'40cm*40cm'",[33,83158,56717],{"class":47},[33,83160,83161],{"class":119},"'黑色'",[33,83163,56857],{"class":47},[33,83165,83166],{"class":35,"line":1438},[33,83167,83168],{"class":60},"    \u002F\u002F const arr = Object.values(spec)\n",[33,83170,83171],{"class":35,"line":1451},[33,83172,83173],{"class":60},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[33,83175,83176,83178,83180,83182,83185,83187,83189,83192,83195,83198,83200,83202,83205],{"class":35,"line":1457},[33,83177,53660],{"class":47},[33,83179,55652],{"class":43},[33,83181,345],{"class":47},[33,83183,83184],{"class":119},"'div'",[33,83186,75502],{"class":47},[33,83188,73],{"class":39},[33,83190,83191],{"class":47}," Object.",[33,83193,83194],{"class":43},"values",[33,83196,83197],{"class":47},"(spec).",[33,83199,75476],{"class":43},[33,83201,345],{"class":47},[33,83203,83204],{"class":119},"'\u002F'",[33,83206,884],{"class":47},[33,83208,83209,83211,83213],{"class":35,"line":1466},[33,83210,53670],{"class":47},[33,83212,53066],{"class":52553},[33,83214,52560],{"class":47},[33,83216,83217,83219,83221],{"class":35,"line":1471},[33,83218,53038],{"class":47},[33,83220,53053],{"class":52553},[33,83222,52560],{"class":47},[33,83224,83225],{"class":35,"line":1477},[33,83226,160],{"emptyLinePlaceholder":159},[33,83228,83229,83231,83233],{"class":35,"line":1504},[33,83230,53038],{"class":47},[33,83232,51888],{"class":52553},[33,83234,52560],{"class":47},[14,83236,83237],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24161,83239,83241],{"id":83240},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,83243,83244],{},"静态方法，将伪数组转换为真数组",[14,83246,83247],{},[2918,83248],{"alt":28,"src":83249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[23,83251,83253],{"className":54320,"code":83252,"language":54322,"meta":28,"style":28},"\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",[30,83254,83255,83263,83271,83283,83295,83307,83315,83323,83328,83333,83338,83343,83351],{"__ignoreMap":28},[33,83256,83257,83259,83261],{"class":35,"line":36},[33,83258,875],{"class":47},[33,83260,53053],{"class":52553},[33,83262,52560],{"class":47},[33,83264,83265,83267,83269],{"class":35,"line":51},[33,83266,53397],{"class":47},[33,83268,561],{"class":52553},[33,83270,52560],{"class":47},[33,83272,83273,83275,83277,83279,83281],{"class":35,"line":57},[33,83274,52594],{"class":47},[33,83276,564],{"class":52553},[33,83278,56567],{"class":47},[33,83280,564],{"class":52553},[33,83282,52560],{"class":47},[33,83284,83285,83287,83289,83291,83293],{"class":35,"line":64},[33,83286,52594],{"class":47},[33,83288,564],{"class":52553},[33,83290,56567],{"class":47},[33,83292,564],{"class":52553},[33,83294,52560],{"class":47},[33,83296,83297,83299,83301,83303,83305],{"class":35,"line":83},[33,83298,52594],{"class":47},[33,83300,564],{"class":52553},[33,83302,56567],{"class":47},[33,83304,564],{"class":52553},[33,83306,52560],{"class":47},[33,83308,83309,83311,83313],{"class":35,"line":89},[33,83310,53670],{"class":47},[33,83312,561],{"class":52553},[33,83314,52560],{"class":47},[33,83316,83317,83319,83321],{"class":35,"line":98},[33,83318,53397],{"class":47},[33,83320,53066],{"class":52553},[33,83322,52560],{"class":47},[33,83324,83325],{"class":35,"line":110},[33,83326,83327],{"class":47},"    const lis = document.querySelectorAll('li')\n",[33,83329,83330],{"class":35,"line":134},[33,83331,83332],{"class":47},"    const liss = Array.from(lis)\n",[33,83334,83335],{"class":35,"line":156},[33,83336,83337],{"class":47},"    liss.pop()\n",[33,83339,83340],{"class":35,"line":163},[33,83341,83342],{"class":47},"    console.log(liss)\n",[33,83344,83345,83347,83349],{"class":35,"line":169},[33,83346,53670],{"class":47},[33,83348,53066],{"class":52553},[33,83350,52560],{"class":47},[33,83352,83353,83355,83357],{"class":35,"line":175},[33,83354,53038],{"class":47},[33,83356,53053],{"class":52553},[33,83358,52560],{"class":47},[14,83360,83361],{},[2918,83362],{"alt":28,"src":83363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23249,83365,83367],{"id":83366},"_41053-string","4.10.5.3 String",[14,83369,83370],{},[2918,83371],{"alt":28,"src":83372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24161,83374,83376],{"id":83375},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[23,83378,83380],{"className":54320,"code":83379,"language":54322,"meta":28,"style":28},"\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",[30,83381,83382,83390,83398,83403,83408,83413,83417,83422,83427,83432,83440],{"__ignoreMap":28},[33,83383,83384,83386,83388],{"class":35,"line":36},[33,83385,875],{"class":47},[33,83387,53053],{"class":52553},[33,83389,52560],{"class":47},[33,83391,83392,83394,83396],{"class":35,"line":51},[33,83393,53397],{"class":47},[33,83395,53066],{"class":52553},[33,83397,52560],{"class":47},[33,83399,83400],{"class":35,"line":57},[33,83401,83402],{"class":47},"    \u002F\u002F 把字符串转化为数组\n",[33,83404,83405],{"class":35,"line":64},[33,83406,83407],{"class":47},"    const str = 'pink,red'\n",[33,83409,83410],{"class":35,"line":83},[33,83411,83412],{"class":47},"    const arr = str.split(',')\n",[33,83414,83415],{"class":35,"line":89},[33,83416,81891],{"class":47},[33,83418,83419],{"class":35,"line":98},[33,83420,83421],{"class":47},"    const str1 = '2025-8-25'\n",[33,83423,83424],{"class":35,"line":110},[33,83425,83426],{"class":47},"    const arr1 = str1.split('-')\n",[33,83428,83429],{"class":35,"line":134},[33,83430,83431],{"class":47},"    console.log(arr1)\n",[33,83433,83434,83436,83438],{"class":35,"line":156},[33,83435,53670],{"class":47},[33,83437,53066],{"class":52553},[33,83439,52560],{"class":47},[33,83441,83442,83444,83446],{"class":35,"line":163},[33,83443,53038],{"class":47},[33,83445,53053],{"class":52553},[33,83447,52560],{"class":47},[24161,83449,83451],{"id":83450},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,83453,6572],{},[14,83455,83456],{},"substring(indexStart)",[14,83458,83459],{},"substring(indexStart, indexEnd)",[561,83461,83462,83473,83485,83495],{},[564,83463,83464,83465,83468,83469,83472],{},"如果省略了 ",[30,83466,83467],{},"indexEnd","，则 ",[30,83470,83471],{},"substring()"," 提取字符直到字符串的末尾",[564,83474,83475,83476,83479,83480,83468,83482,83484],{},"如果 ",[30,83477,83478],{},"indexStart"," 等于 ",[30,83481,83467],{},[30,83483,83471],{}," 返回一个空字符串",[564,83486,83475,83487,83489,83490,83468,83492,83494],{},[30,83488,83478],{}," 大于 ",[30,83491,83467],{},[30,83493,83471],{}," 的效果就像交换了这两个参数一样",[564,83496,83497],{},"结束的索引号不包含想要截取的部分",[23,83499,83501],{"className":82742,"code":83500,"language":82744,"meta":28,"style":28},"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",[30,83502,83503,83515,83519,83553,83583,83587,83618,83622,83649,83679,83709,83713,83744],{"__ignoreMap":28},[33,83504,83505,83508,83510,83513],{"class":35,"line":36},[33,83506,83507],{"class":47},"const anyString ",[33,83509,73],{"class":39},[33,83511,83512],{"class":119}," \"Mozilla\"",[33,83514,80],{"class":47},[33,83516,83517],{"class":35,"line":51},[33,83518,160],{"emptyLinePlaceholder":159},[33,83520,83521,83524,83526,83528,83530,83533,83535,83538,83540,83542,83544,83546,83548,83550],{"class":35,"line":57},[33,83522,83523],{"class":76},"console",[33,83525,2158],{"class":47},[33,83527,59500],{"class":76},[33,83529,345],{"class":47},[33,83531,83532],{"class":76},"anyString",[33,83534,2158],{"class":47},[33,83536,83537],{"class":76},"substring",[33,83539,345],{"class":47},[33,83541,766],{"class":76},[33,83543,13686],{"class":47},[33,83545,701],{"class":76},[33,83547,76506],{"class":47},[33,83549,34582],{"class":39},[33,83551,83552],{"class":119}," 'M'\n",[33,83554,83555,83557,83559,83561,83563,83565,83567,83569,83571,83573,83575,83577,83579,83581],{"class":35,"line":64},[33,83556,83523],{"class":76},[33,83558,2158],{"class":47},[33,83560,59500],{"class":76},[33,83562,345],{"class":47},[33,83564,83532],{"class":76},[33,83566,2158],{"class":47},[33,83568,83537],{"class":76},[33,83570,345],{"class":47},[33,83572,701],{"class":76},[33,83574,13686],{"class":47},[33,83576,766],{"class":76},[33,83578,76506],{"class":47},[33,83580,34582],{"class":39},[33,83582,83552],{"class":119},[33,83584,83585],{"class":35,"line":83},[33,83586,160],{"emptyLinePlaceholder":159},[33,83588,83589,83591,83593,83595,83597,83599,83601,83603,83605,83607,83609,83611,83613,83615],{"class":35,"line":89},[33,83590,83523],{"class":76},[33,83592,2158],{"class":47},[33,83594,59500],{"class":76},[33,83596,345],{"class":47},[33,83598,83532],{"class":76},[33,83600,2158],{"class":47},[33,83602,83537],{"class":76},[33,83604,345],{"class":47},[33,83606,766],{"class":76},[33,83608,13686],{"class":47},[33,83610,727],{"class":76},[33,83612,76506],{"class":47},[33,83614,34582],{"class":39},[33,83616,83617],{"class":119}," 'Mozill'\n",[33,83619,83620],{"class":35,"line":98},[33,83621,160],{"emptyLinePlaceholder":159},[33,83623,83624,83626,83628,83630,83632,83634,83636,83638,83640,83642,83644,83646],{"class":35,"line":110},[33,83625,83523],{"class":76},[33,83627,2158],{"class":47},[33,83629,59500],{"class":76},[33,83631,345],{"class":47},[33,83633,83532],{"class":76},[33,83635,2158],{"class":47},[33,83637,83537],{"class":76},[33,83639,345],{"class":47},[33,83641,717],{"class":76},[33,83643,76506],{"class":47},[33,83645,34582],{"class":39},[33,83647,83648],{"class":119}," 'lla'\n",[33,83650,83651,83653,83655,83657,83659,83661,83663,83665,83667,83669,83671,83673,83675,83677],{"class":35,"line":134},[33,83652,83523],{"class":76},[33,83654,2158],{"class":47},[33,83656,59500],{"class":76},[33,83658,345],{"class":47},[33,83660,83532],{"class":76},[33,83662,2158],{"class":47},[33,83664,83537],{"class":76},[33,83666,345],{"class":47},[33,83668,717],{"class":76},[33,83670,13686],{"class":47},[33,83672,732],{"class":76},[33,83674,76562],{"class":47},[33,83676,34582],{"class":39},[33,83678,83648],{"class":119},[33,83680,83681,83683,83685,83687,83689,83691,83693,83695,83697,83699,83701,83703,83705,83707],{"class":35,"line":156},[33,83682,83523],{"class":76},[33,83684,2158],{"class":47},[33,83686,59500],{"class":76},[33,83688,345],{"class":47},[33,83690,83532],{"class":76},[33,83692,2158],{"class":47},[33,83694,83537],{"class":76},[33,83696,345],{"class":47},[33,83698,732],{"class":76},[33,83700,13686],{"class":47},[33,83702,717],{"class":76},[33,83704,76506],{"class":47},[33,83706,34582],{"class":39},[33,83708,83648],{"class":119},[33,83710,83711],{"class":35,"line":163},[33,83712,160],{"emptyLinePlaceholder":159},[33,83714,83715,83717,83719,83721,83723,83725,83727,83729,83731,83733,83735,83737,83739,83741],{"class":35,"line":169},[33,83716,83523],{"class":76},[33,83718,2158],{"class":47},[33,83720,59500],{"class":76},[33,83722,345],{"class":47},[33,83724,83532],{"class":76},[33,83726,2158],{"class":47},[33,83728,83537],{"class":76},[33,83730,345],{"class":47},[33,83732,766],{"class":76},[33,83734,13686],{"class":47},[33,83736,732],{"class":76},[33,83738,76506],{"class":47},[33,83740,34582],{"class":39},[33,83742,83743],{"class":119}," 'Mozilla'\n",[33,83745,83746,83748,83750,83752,83754,83756,83758,83760,83762,83764,83766,83768,83770,83772],{"class":35,"line":175},[33,83747,83523],{"class":76},[33,83749,2158],{"class":47},[33,83751,59500],{"class":76},[33,83753,345],{"class":47},[33,83755,83532],{"class":76},[33,83757,2158],{"class":47},[33,83759,83537],{"class":76},[33,83761,345],{"class":47},[33,83763,766],{"class":76},[33,83765,13686],{"class":47},[33,83767,77],{"class":76},[33,83769,76506],{"class":47},[33,83771,34582],{"class":39},[33,83773,83743],{"class":119},[24161,83775,83777],{"id":83776},"_410533-startswith","4.10.5.3.3 startsWith",[14,83779,83780,83783,83784,83789,83790,83792,83793],{},[30,83781,83782],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[480,83785,83786],{},[30,83787,83788],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[30,83791,2820],{}," 或 ",[30,83794,67273],{},[23,83796,83798],{"className":78748,"code":83797,"language":78750,"meta":28,"style":28},"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",[30,83799,83800,83812,83831,83836,83856],{"__ignoreMap":28},[33,83801,83802,83804,83807,83809],{"class":35,"line":36},[33,83803,588],{"class":39},[33,83805,83806],{"class":47}," str1 ",[33,83808,73],{"class":39},[33,83810,83811],{"class":119}," \"Saturday night plans\"\n",[33,83813,83814,83816,83818,83821,83824,83826,83829],{"class":35,"line":51},[33,83815,78785],{"class":47},[33,83817,59500],{"class":43},[33,83819,83820],{"class":47},"(str1.",[33,83822,83823],{"class":43},"startsWith",[33,83825,345],{"class":47},[33,83827,83828],{"class":119},"\"Sat\"",[33,83830,31750],{"class":47},[33,83832,83833],{"class":35,"line":57},[33,83834,83835],{"class":60},"\u002F\u002F Expected output: true\n",[33,83837,83838,83840,83842,83844,83846,83848,83850,83852,83854],{"class":35,"line":64},[33,83839,78785],{"class":47},[33,83841,59500],{"class":43},[33,83843,83820],{"class":47},[33,83845,83823],{"class":43},[33,83847,345],{"class":47},[33,83849,83828],{"class":119},[33,83851,13686],{"class":47},[33,83853,712],{"class":76},[33,83855,31750],{"class":47},[33,83857,83858],{"class":35,"line":83},[33,83859,83860],{"class":60},"\u002F\u002F Expected output: false\n",[23,83862,83864],{"className":51886,"code":83863,"language":51888,"meta":28,"style":28},"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",[30,83865,83866,83871,83876,83880,83885,83890],{"__ignoreMap":28},[33,83867,83868],{"class":35,"line":36},[33,83869,83870],{"class":47},"startsWith(searchString)\n",[33,83872,83873],{"class":35,"line":51},[33,83874,83875],{"class":47},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[33,83877,83878],{"class":35,"line":57},[33,83879,160],{"emptyLinePlaceholder":159},[33,83881,83882],{"class":35,"line":64},[33,83883,83884],{"class":47},"const str3 = 'pink老师上课中'\n",[33,83886,83887],{"class":35,"line":83},[33,83888,83889],{"class":47},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[33,83891,83892],{"class":35,"line":89},[33,83893,83894],{"class":47},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24161,83896,83898],{"id":83897},"_410534-includes","4.10.5.3.4 includes",[14,83900,83901],{},"includes(searchString) includes(searchString, position)",[574,83903,83904],{},[564,83905,83906],{},"searchString:",[14,83908,83909,83910,83912,83913,83918,83919,83924,83925,22751,83928,83931,83932,83935],{},"一个要在 ",[30,83911,2760],{}," 中查找的字符串。",[126,83914,83917],{"href":83915,"rel":83916},"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",[25117],"不能是正则表达式","。所有非正则表达式的值都会被",[126,83920,83923],{"href":83921,"rel":83922},"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",[25117],"强制转换为字符串","，因此如果该参数被省略或传入 ",[30,83926,83927],{},"undefined",[30,83929,83930],{},"includes()"," 方法会在字符串中搜索 ",[30,83933,83934],{},"\"undefined\"","，这通常不是你想要的",[574,83937,83938],{"start":51},[564,83939,83940,2458],{},[30,83941,83942],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83944,83945,83946,83949,83950],{},"在字符串中开始搜索 ",[30,83947,83948],{},"searchString"," 的位置。默认值为 ",[30,83951,766],{},[574,83953,83954],{"start":57},[564,83955,83956],{},"返回值：",[14,83958,83959,83960,83962,83963,83967,83968],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[30,83961,83948],{}," 为空字符串的情况），则返回 ",[480,83964,83965],{},[30,83966,2820],{}," ，否则返回 ",[480,83969,83970],{},[30,83971,67273],{},[574,83973,83974],{"start":64},[564,83975,83976],{},"异常：",[14,83978,83475,83979,15046,83981,83985],{},[30,83980,83948],{},[126,83982,83984],{"href":83915,"rel":83983},[25117],"是一个正则表达式","，则会抛出",[14,83987,83988],{},"只要是有就是true，不需要非得以谁开头结尾",[23,83990,83992],{"className":78748,"code":83991,"language":78750,"meta":28,"style":28},"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",[30,83993,83994,84005,84028,84047,84067,84089,84108],{"__ignoreMap":28},[33,83995,83996,83998,84000,84002],{"class":35,"line":36},[33,83997,588],{"class":39},[33,83999,81028],{"class":47},[33,84001,73],{"class":39},[33,84003,84004],{"class":119}," \"To be, or not to be, that is the question.\"\n",[33,84006,84007,84009,84011,84014,84017,84019,84022,84025],{"class":35,"line":51},[33,84008,78785],{"class":47},[33,84010,59500],{"class":43},[33,84012,84013],{"class":47},"(str.",[33,84015,84016],{"class":43},"includes",[33,84018,345],{"class":47},[33,84020,84021],{"class":119},"\"To be\"",[33,84023,84024],{"class":47},"))",[33,84026,84027],{"class":60},"  \u002F\u002F true\n",[33,84029,84030,84032,84034,84036,84038,84040,84043,84045],{"class":35,"line":57},[33,84031,78785],{"class":47},[33,84033,59500],{"class":43},[33,84035,84013],{"class":47},[33,84037,84016],{"class":43},[33,84039,345],{"class":47},[33,84041,84042],{"class":119},"\"question\"",[33,84044,84024],{"class":47},[33,84046,84027],{"class":60},[33,84048,84049,84051,84053,84055,84057,84059,84062,84064],{"class":35,"line":64},[33,84050,78785],{"class":47},[33,84052,59500],{"class":43},[33,84054,84013],{"class":47},[33,84056,84016],{"class":43},[33,84058,345],{"class":47},[33,84060,84061],{"class":119},"\"nonexistent\"",[33,84063,84024],{"class":47},[33,84065,84066],{"class":60},"  \u002F\u002F false\n",[33,84068,84069,84071,84073,84075,84077,84079,84081,84083,84085,84087],{"class":35,"line":83},[33,84070,78785],{"class":47},[33,84072,59500],{"class":43},[33,84074,84013],{"class":47},[33,84076,84016],{"class":43},[33,84078,345],{"class":47},[33,84080,84021],{"class":119},[33,84082,13686],{"class":47},[33,84084,701],{"class":76},[33,84086,84024],{"class":47},[33,84088,84066],{"class":60},[33,84090,84091,84093,84095,84097,84099,84101,84104,84106],{"class":35,"line":89},[33,84092,78785],{"class":47},[33,84094,59500],{"class":43},[33,84096,84013],{"class":47},[33,84098,84016],{"class":43},[33,84100,345],{"class":47},[33,84102,84103],{"class":119},"\"TO BE\"",[33,84105,84024],{"class":47},[33,84107,84066],{"class":60},[33,84109,84110,84112,84114,84116,84118,84120,84122,84124],{"class":35,"line":98},[33,84111,78785],{"class":47},[33,84113,59500],{"class":43},[33,84115,84013],{"class":47},[33,84117,84016],{"class":43},[33,84119,345],{"class":47},[33,84121,1520],{"class":119},[33,84123,84024],{"class":47},[33,84125,84027],{"class":60},[24161,84127,84129],{"id":84128},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[23,84131,84133],{"className":54320,"code":84132,"language":54322,"meta":28,"style":28},"\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",[30,84134,84135,84143,84151,84156,84161,84166,84171,84176,84184],{"__ignoreMap":28},[33,84136,84137,84139,84141],{"class":35,"line":36},[33,84138,875],{"class":47},[33,84140,53053],{"class":52553},[33,84142,52560],{"class":47},[33,84144,84145,84147,84149],{"class":35,"line":51},[33,84146,53397],{"class":47},[33,84148,53066],{"class":52553},[33,84150,52560],{"class":47},[33,84152,84153],{"class":35,"line":57},[33,84154,84155],{"class":47},"    const num = 10\n",[33,84157,84158],{"class":35,"line":64},[33,84159,84160],{"class":47},"    \u002F\u002F 强制转换\n",[33,84162,84163],{"class":35,"line":83},[33,84164,84165],{"class":47},"    console.log(String(num))\n",[33,84167,84168],{"class":35,"line":89},[33,84169,84170],{"class":47},"    \u002F\u002F toString()方法转换\n",[33,84172,84173],{"class":35,"line":98},[33,84174,84175],{"class":47},"    console.log(num.toString())\n",[33,84177,84178,84180,84182],{"class":35,"line":110},[33,84179,53670],{"class":47},[33,84181,53066],{"class":52553},[33,84183,52560],{"class":47},[33,84185,84186,84188,84190],{"class":35,"line":134},[33,84187,53038],{"class":47},[33,84189,53053],{"class":52553},[33,84191,52560],{"class":47},[24161,84193,84195],{"id":84194},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,84197,84198],{},[2918,84199],{"alt":28,"src":84200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[23,84202,84204],{"className":51886,"code":84203,"language":51888,"meta":28,"style":28},"\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",[30,84205,84206,84216,84230,84234,84242,84256,84276,84288,84296,84300,84308,84320,84328,84340,84345,84350,84355,84402,84418,84426,84434,84438],{"__ignoreMap":28},[33,84207,84208,84210,84212,84214],{"class":35,"line":36},[33,84209,52550],{"class":47},[33,84211,52554],{"class":52553},[33,84213,52557],{"class":43},[33,84215,52560],{"class":47},[33,84217,84218,84220,84222,84224,84226,84228],{"class":35,"line":51},[33,84219,875],{"class":47},[33,84221,51888],{"class":52553},[33,84223,52569],{"class":43},[33,84225,73],{"class":47},[33,84227,52574],{"class":119},[33,84229,52560],{"class":47},[33,84231,84232],{"class":35,"line":57},[33,84233,160],{"emptyLinePlaceholder":159},[33,84235,84236,84238,84240],{"class":35,"line":64},[33,84237,875],{"class":47},[33,84239,52587],{"class":52553},[33,84241,52560],{"class":47},[33,84243,84244,84246,84248,84250,84252,84254],{"class":35,"line":83},[33,84245,53397],{"class":47},[33,84247,52597],{"class":52553},[33,84249,52600],{"class":43},[33,84251,73],{"class":47},[33,84253,52605],{"class":119},[33,84255,52560],{"class":47},[33,84257,84258,84260,84262,84264,84266,84268,84270,84272,84274],{"class":35,"line":89},[33,84259,53397],{"class":47},[33,84261,52597],{"class":52553},[33,84263,16171],{"class":43},[33,84265,73],{"class":47},[33,84267,52644],{"class":119},[33,84269,52624],{"class":43},[33,84271,73],{"class":47},[33,84273,52651],{"class":119},[33,84275,52560],{"class":47},[33,84277,84278,84280,84282,84284,84286],{"class":35,"line":98},[33,84279,53397],{"class":47},[33,84281,52660],{"class":52553},[33,84283,52663],{"class":47},[33,84285,52660],{"class":52553},[33,84287,52560],{"class":47},[33,84289,84290,84292,84294],{"class":35,"line":110},[33,84291,53038],{"class":47},[33,84293,52587],{"class":52553},[33,84295,52560],{"class":47},[33,84297,84298],{"class":35,"line":134},[33,84299,160],{"emptyLinePlaceholder":159},[33,84301,84302,84304,84306],{"class":35,"line":156},[33,84303,875],{"class":47},[33,84305,53053],{"class":52553},[33,84307,52560],{"class":47},[33,84309,84310,84312,84314,84316,84318],{"class":35,"line":163},[33,84311,53397],{"class":47},[33,84313,52864],{"class":52553},[33,84315,56567],{"class":47},[33,84317,52864],{"class":52553},[33,84319,52560],{"class":47},[33,84321,84322,84324,84326],{"class":35,"line":169},[33,84323,53397],{"class":47},[33,84325,53066],{"class":52553},[33,84327,52560],{"class":47},[33,84329,84330,84332,84335,84337],{"class":35,"line":175},[33,84331,12472],{"class":39},[33,84333,84334],{"class":76}," gift",[33,84336,14815],{"class":39},[33,84338,84339],{"class":119}," '50g的茶叶，清洗球'\n",[33,84341,84342],{"class":35,"line":181},[33,84343,84344],{"class":60},"    \u002F\u002F 1.把字符串拆分为数组\n",[33,84346,84347],{"class":35,"line":196},[33,84348,84349],{"class":60},"    \u002F\u002F console.log(gift.split(','))\n",[33,84351,84352],{"class":35,"line":213},[33,84353,84354],{"class":60},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[33,84356,84357,84359,84361,84363,84366,84369,84371,84374,84376,84378,84380,84382,84384,84387,84389,84392,84394,84396,84398,84400],{"class":35,"line":228},[33,84358,12472],{"class":39},[33,84360,75172],{"class":76},[33,84362,14815],{"class":39},[33,84364,84365],{"class":47}," gift.",[33,84367,84368],{"class":43},"split",[33,84370,345],{"class":47},[33,84372,84373],{"class":119},"'，'",[33,84375,32079],{"class":47},[33,84377,75297],{"class":43},[33,84379,345],{"class":47},[33,84381,81048],{"class":955},[33,84383,81051],{"class":39},[33,84385,84386],{"class":119}," `\u003Cspan>【赠品】${",[33,84388,81048],{"class":47},[33,84390,84391],{"class":119},"}\u003C\u002Fspan>\u003Cbr>`",[33,84393,32079],{"class":47},[33,84395,75476],{"class":43},[33,84397,345],{"class":47},[33,84399,75481],{"class":119},[33,84401,884],{"class":47},[33,84403,84404,84406,84408,84410,84412,84414,84416],{"class":35,"line":1345},[33,84405,53660],{"class":47},[33,84407,55652],{"class":43},[33,84409,345],{"class":47},[33,84411,83184],{"class":119},[33,84413,75502],{"class":47},[33,84415,73],{"class":39},[33,84417,75238],{"class":47},[33,84419,84420,84422,84424],{"class":35,"line":1350},[33,84421,53670],{"class":47},[33,84423,53066],{"class":52553},[33,84425,52560],{"class":47},[33,84427,84428,84430,84432],{"class":35,"line":1359},[33,84429,53038],{"class":47},[33,84431,53053],{"class":52553},[33,84433,52560],{"class":47},[33,84435,84436],{"class":35,"line":1364},[33,84437,160],{"emptyLinePlaceholder":159},[33,84439,84440,84442,84444],{"class":35,"line":1370},[33,84441,53038],{"class":47},[33,84443,51888],{"class":52553},[33,84445,52560],{"class":47},[23249,84447,84449],{"id":84448},"_41054-number","4.10.5.4 Number",[14,84451,84452],{},[2918,84453],{"alt":28,"src":84454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,84456,84457],{},"整数也可以进行toFixed来保留小数",[14,84459,84460],{},"比如：",[14,84462,84463],{},"const price=10",[14,84465,84466],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23249,84468,84470],{"id":84469},"_41055-购物车展示","4.10.5.5 购物车展示",[14,84472,84473],{},[2918,84474],{"alt":28,"src":84475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[23,84477,84479],{"className":51886,"code":84478,"language":51888,"meta":28,"style":28},"\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",[30,84480,84481,84491,84505,84509,84517,84531,84551,84563,84571,84577,84587,84597,84607,84611,84615,84621,84633,84647,84651,84655,84661,84673,84689,84699,84715,84719,84723,84729,84739,84749,84753,84757,84765,84777,84789,84801,84805,84809,84817,84829,84833,84837,84848,84858,84870,84882,84892,84896,84900,84908,84917,84929,84939,84949,84953,84957,84965,84974,84981,84991,85003,85007,85011,85020,85030,85041,85053,85065,85069,85073,85082,85092,85103,85107,85111,85117,85129,85141,85151,85161,85179,85191,85195,85199,85208,85220,85230,85240,85252,85256,85264,85272,85276,85284,85298,85306,85320,85348,85356,85364,85374,85378,85386,85394,85403,85411,85420,85430,85434,85438,85446,85454,85463,85471,85479,85492,85496,85500,85508,85516,85525,85533,85541,85556,85560,85564,85572,85580,85589,85597,85605,85619,85627,85631,85635,85640,85666,85671,85708,85713,85736,85741,85795,85800,85836,85840,85846,85851,85860,85874,85883,85902,85911,85921,85926,85931,85944,85949,86003,86029,86037,86045,86049],{"__ignoreMap":28},[33,84482,84483,84485,84487,84489],{"class":35,"line":36},[33,84484,52550],{"class":47},[33,84486,52554],{"class":52553},[33,84488,52557],{"class":43},[33,84490,52560],{"class":47},[33,84492,84493,84495,84497,84499,84501,84503],{"class":35,"line":51},[33,84494,875],{"class":47},[33,84496,51888],{"class":52553},[33,84498,52569],{"class":43},[33,84500,73],{"class":47},[33,84502,52574],{"class":119},[33,84504,52560],{"class":47},[33,84506,84507],{"class":35,"line":57},[33,84508,160],{"emptyLinePlaceholder":159},[33,84510,84511,84513,84515],{"class":35,"line":64},[33,84512,875],{"class":47},[33,84514,52587],{"class":52553},[33,84516,52560],{"class":47},[33,84518,84519,84521,84523,84525,84527,84529],{"class":35,"line":83},[33,84520,53397],{"class":47},[33,84522,52597],{"class":52553},[33,84524,52600],{"class":43},[33,84526,73],{"class":47},[33,84528,52605],{"class":119},[33,84530,52560],{"class":47},[33,84532,84533,84535,84537,84539,84541,84543,84545,84547,84549],{"class":35,"line":89},[33,84534,53397],{"class":47},[33,84536,52597],{"class":52553},[33,84538,16171],{"class":43},[33,84540,73],{"class":47},[33,84542,52644],{"class":119},[33,84544,52624],{"class":43},[33,84546,73],{"class":47},[33,84548,52651],{"class":119},[33,84550,52560],{"class":47},[33,84552,84553,84555,84557,84559,84561],{"class":35,"line":98},[33,84554,53397],{"class":47},[33,84556,52660],{"class":52553},[33,84558,52663],{"class":47},[33,84560,52660],{"class":52553},[33,84562,52560],{"class":47},[33,84564,84565,84567,84569],{"class":35,"line":110},[33,84566,53397],{"class":47},[33,84568,1544],{"class":52553},[33,84570,52560],{"class":47},[33,84572,84573,84575],{"class":35,"line":134},[33,84574,184],{"class":52553},[33,84576,16823],{"class":47},[33,84578,84579,84581,84583,84585],{"class":35,"line":156},[33,84580,55948],{"class":76},[33,84582,52690],{"class":47},[33,84584,766],{"class":76},[33,84586,80],{"class":47},[33,84588,84589,84591,84593,84595],{"class":35,"line":163},[33,84590,55959],{"class":76},[33,84592,52690],{"class":47},[33,84594,766],{"class":76},[33,84596,80],{"class":47},[33,84598,84599,84601,84603,84605],{"class":35,"line":169},[33,84600,73849],{"class":76},[33,84602,52690],{"class":47},[33,84604,61758],{"class":76},[33,84606,80],{"class":47},[33,84608,84609],{"class":35,"line":175},[33,84610,916],{"class":47},[33,84612,84613],{"class":35,"line":181},[33,84614,160],{"emptyLinePlaceholder":159},[33,84616,84617,84619],{"class":35,"line":196},[33,84618,63376],{"class":43},[33,84620,16823],{"class":47},[33,84622,84623,84625,84627,84629,84631],{"class":35,"line":213},[33,84624,56024],{"class":76},[33,84626,52690],{"class":47},[33,84628,79827],{"class":76},[33,84630,52745],{"class":39},[33,84632,80],{"class":47},[33,84634,84635,84637,84639,84641,84643,84645],{"class":35,"line":228},[33,84636,55959],{"class":76},[33,84638,52690],{"class":47},[33,84640,457],{"class":76},[33,84642,52745],{"class":39},[33,84644,52809],{"class":76},[33,84646,80],{"class":47},[33,84648,84649],{"class":35,"line":1345},[33,84650,916],{"class":47},[33,84652,84653],{"class":35,"line":1350},[33,84654,160],{"emptyLinePlaceholder":159},[33,84656,84657,84659],{"class":35,"line":1359},[33,84658,79878],{"class":43},[33,84660,16823],{"class":47},[33,84662,84663,84665,84667,84669,84671],{"class":35,"line":1364},[33,84664,55948],{"class":76},[33,84666,52690],{"class":47},[33,84668,2175],{"class":76},[33,84670,52745],{"class":39},[33,84672,80],{"class":47},[33,84674,84675,84677,84679,84681,84683,84685,84687],{"class":35,"line":1370},[33,84676,63113],{"class":76},[33,84678,52690],{"class":47},[33,84680,29374],{"class":76},[33,84682,79933],{"class":76},[33,84684,79936],{"class":76},[33,84686,2295],{"class":39},[33,84688,80],{"class":47},[33,84690,84691,84693,84695,84697],{"class":35,"line":1425},[33,84692,56262],{"class":76},[33,84694,52690],{"class":47},[33,84696,52730],{"class":76},[33,84698,80],{"class":47},[33,84700,84701,84703,84705,84707,84709,84711,84713],{"class":35,"line":1438},[33,84702,63230],{"class":76},[33,84704,52690],{"class":47},[33,84706,701],{"class":76},[33,84708,52745],{"class":39},[33,84710,52774],{"class":76},[33,84712,63497],{"class":76},[33,84714,80],{"class":47},[33,84716,84717],{"class":35,"line":1451},[33,84718,916],{"class":47},[33,84720,84721],{"class":35,"line":1457},[33,84722,160],{"emptyLinePlaceholder":159},[33,84724,84725,84727],{"class":35,"line":1466},[33,84726,79996],{"class":43},[33,84728,16823],{"class":47},[33,84730,84731,84733,84735,84737],{"class":35,"line":1471},[33,84732,63278],{"class":76},[33,84734,52690],{"class":47},[33,84736,63283],{"class":76},[33,84738,80],{"class":47},[33,84740,84741,84743,84745,84747],{"class":35,"line":1477},[33,84742,56137],{"class":76},[33,84744,52690],{"class":47},[33,84746,63071],{"class":76},[33,84748,80],{"class":47},[33,84750,84751],{"class":35,"line":1504},[33,84752,916],{"class":47},[33,84754,84755],{"class":35,"line":1509},[33,84756,160],{"emptyLinePlaceholder":159},[33,84758,84759,84761,84763],{"class":35,"line":1525},[33,84760,79878],{"class":43},[33,84762,56868],{"class":52553},[33,84764,16823],{"class":47},[33,84766,84767,84769,84771,84773,84775],{"class":35,"line":1535},[33,84768,56024],{"class":76},[33,84770,52690],{"class":47},[33,84772,2212],{"class":76},[33,84774,52745],{"class":39},[33,84776,80],{"class":47},[33,84778,84779,84781,84783,84785,84787],{"class":35,"line":1540},[33,84780,56038],{"class":76},[33,84782,52690],{"class":47},[33,84784,2212],{"class":76},[33,84786,52745],{"class":39},[33,84788,80],{"class":47},[33,84790,84791,84793,84795,84797,84799],{"class":35,"line":4027},[33,84792,63003],{"class":76},[33,84794,52690],{"class":47},[33,84796,722],{"class":76},[33,84798,52745],{"class":39},[33,84800,80],{"class":47},[33,84802,84803],{"class":35,"line":4032},[33,84804,916],{"class":47},[33,84806,84807],{"class":35,"line":9199},[33,84808,160],{"emptyLinePlaceholder":159},[33,84810,84811,84813,84815],{"class":35,"line":9223},[33,84812,79878],{"class":43},[33,84814,63557],{"class":43},[33,84816,16823],{"class":47},[33,84818,84819,84821,84823,84825,84827],{"class":35,"line":9228},[33,84820,56024],{"class":76},[33,84822,52690],{"class":47},[33,84824,3163],{"class":76},[33,84826,52745],{"class":39},[33,84828,80],{"class":47},[33,84830,84831],{"class":35,"line":9234},[33,84832,916],{"class":47},[33,84834,84835],{"class":35,"line":9261},[33,84836,160],{"emptyLinePlaceholder":159},[33,84838,84839,84841,84843,84846],{"class":35,"line":9266},[33,84840,79878],{"class":43},[33,84842,63557],{"class":43},[33,84844,84845],{"class":43}," .tag",[33,84847,16823],{"class":47},[33,84849,84850,84852,84854,84856],{"class":35,"line":9272},[33,84851,56262],{"class":76},[33,84853,52690],{"class":47},[33,84855,62122],{"class":76},[33,84857,80],{"class":47},[33,84859,84860,84862,84864,84866,84868],{"class":35,"line":9284},[33,84861,55948],{"class":76},[33,84863,52690],{"class":47},[33,84865,707],{"class":76},[33,84867,52745],{"class":39},[33,84869,80],{"class":47},[33,84871,84872,84874,84876,84878,84880],{"class":35,"line":9296},[33,84873,56175],{"class":76},[33,84875,52690],{"class":47},[33,84877,2099],{"class":76},[33,84879,52745],{"class":39},[33,84881,80],{"class":47},[33,84883,84884,84886,84888,84890],{"class":35,"line":9308},[33,84885,58669],{"class":76},[33,84887,52690],{"class":47},[33,84889,63323],{"class":76},[33,84891,80],{"class":47},[33,84893,84894],{"class":35,"line":10967},[33,84895,916],{"class":47},[33,84897,84898],{"class":35,"line":10992},[33,84899,160],{"emptyLinePlaceholder":159},[33,84901,84902,84904,84906],{"class":35,"line":11015},[33,84903,79878],{"class":43},[33,84905,80170],{"class":43},[33,84907,32719],{"class":47},[33,84909,84910,84912,84915],{"class":35,"line":11039},[33,84911,79878],{"class":43},[33,84913,84914],{"class":43}," .sub-total",[33,84916,16823],{"class":47},[33,84918,84919,84921,84923,84925,84927],{"class":35,"line":11044},[33,84920,56175],{"class":76},[33,84922,52690],{"class":47},[33,84924,2250],{"class":76},[33,84926,52745],{"class":39},[33,84928,80],{"class":47},[33,84930,84931,84933,84935,84937],{"class":35,"line":11049},[33,84932,58669],{"class":76},[33,84934,52690],{"class":47},[33,84936,80193],{"class":76},[33,84938,80],{"class":47},[33,84940,84941,84943,84945,84947],{"class":35,"line":11054},[33,84942,63090],{"class":76},[33,84944,52690],{"class":47},[33,84946,701],{"class":76},[33,84948,80],{"class":47},[33,84950,84951],{"class":35,"line":11063},[33,84952,916],{"class":47},[33,84954,84955],{"class":35,"line":11068},[33,84956,160],{"emptyLinePlaceholder":159},[33,84958,84959,84961,84963],{"class":35,"line":11074},[33,84960,79878],{"class":43},[33,84962,80210],{"class":43},[33,84964,32719],{"class":47},[33,84966,84967,84969,84972],{"class":35,"line":11095},[33,84968,79878],{"class":43},[33,84970,84971],{"class":43}," .sub-total::before",[33,84973,32719],{"class":47},[33,84975,84976,84979],{"class":35,"line":11101},[33,84977,84978],{"class":43},"    .amount::before",[33,84980,16823],{"class":47},[33,84982,84983,84985,84987,84989],{"class":35,"line":11115},[33,84984,80217],{"class":76},[33,84986,52690],{"class":47},[33,84988,80222],{"class":119},[33,84990,80],{"class":47},[33,84992,84993,84995,84997,84999,85001],{"class":35,"line":11121},[33,84994,56175],{"class":76},[33,84996,52690],{"class":47},[33,84998,2099],{"class":76},[33,85000,52745],{"class":39},[33,85002,80],{"class":47},[33,85004,85005],{"class":35,"line":11148},[33,85006,916],{"class":47},[33,85008,85009],{"class":35,"line":11157},[33,85010,160],{"emptyLinePlaceholder":159},[33,85012,85013,85015,85018],{"class":35,"line":11163},[33,85014,79878],{"class":43},[33,85016,85017],{"class":43}," .spec",[33,85019,16823],{"class":47},[33,85021,85022,85024,85026,85028],{"class":35,"line":11171},[33,85023,63090],{"class":76},[33,85025,52690],{"class":47},[33,85027,707],{"class":76},[33,85029,80],{"class":47},[33,85031,85032,85034,85036,85039],{"class":35,"line":11176},[33,85033,58669],{"class":76},[33,85035,52690],{"class":47},[33,85037,85038],{"class":76},"#888",[33,85040,80],{"class":47},[33,85042,85043,85045,85047,85049,85051],{"class":35,"line":17855},[33,85044,56175],{"class":76},[33,85046,52690],{"class":47},[33,85048,2149],{"class":76},[33,85050,52745],{"class":39},[33,85052,80],{"class":47},[33,85054,85055,85057,85059,85061,85063],{"class":35,"line":17861},[33,85056,63253],{"class":76},[33,85058,52690],{"class":47},[33,85060,1045],{"class":76},[33,85062,52745],{"class":39},[33,85064,80],{"class":47},[33,85066,85067],{"class":35,"line":17884},[33,85068,916],{"class":47},[33,85070,85071],{"class":35,"line":17890},[33,85072,160],{"emptyLinePlaceholder":159},[33,85074,85075,85077,85080],{"class":35,"line":17913},[33,85076,79878],{"class":43},[33,85078,85079],{"class":43}," .count",[33,85081,16823],{"class":47},[33,85083,85084,85086,85088,85090],{"class":35,"line":17927},[33,85085,63090],{"class":76},[33,85087,52690],{"class":47},[33,85089,701],{"class":76},[33,85091,80],{"class":47},[33,85093,85094,85096,85098,85101],{"class":35,"line":17947},[33,85095,58669],{"class":76},[33,85097,52690],{"class":47},[33,85099,85100],{"class":76},"#aaa",[33,85102,80],{"class":47},[33,85104,85105],{"class":35,"line":17953},[33,85106,916],{"class":47},[33,85108,85109],{"class":35,"line":17964},[33,85110,160],{"emptyLinePlaceholder":159},[33,85112,85113,85115],{"class":35,"line":17987},[33,85114,73728],{"class":43},[33,85116,16823],{"class":47},[33,85118,85119,85121,85123,85125,85127],{"class":35,"line":18009},[33,85120,56024],{"class":76},[33,85122,52690],{"class":47},[33,85124,79827],{"class":76},[33,85126,52745],{"class":39},[33,85128,80],{"class":47},[33,85130,85131,85133,85135,85137,85139],{"class":35,"line":18014},[33,85132,55959],{"class":76},[33,85134,52690],{"class":47},[33,85136,766],{"class":76},[33,85138,52809],{"class":76},[33,85140,80],{"class":47},[33,85142,85143,85145,85147,85149],{"class":35,"line":18020},[33,85144,56262],{"class":76},[33,85146,52690],{"class":47},[33,85148,52730],{"class":76},[33,85150,80],{"class":47},[33,85152,85153,85155,85157,85159],{"class":35,"line":18034},[33,85154,56273],{"class":76},[33,85156,52690],{"class":47},[33,85158,52833],{"class":76},[33,85160,80],{"class":47},[33,85162,85163,85166,85168,85170,85172,85174,85177],{"class":35,"line":18047},[33,85164,85165],{"class":76},"      border-top",[33,85167,52690],{"class":47},[33,85169,701],{"class":76},[33,85171,52745],{"class":39},[33,85173,52774],{"class":76},[33,85175,85176],{"class":76}," #4e4e4e",[33,85178,80],{"class":47},[33,85180,85181,85183,85185,85187,85189],{"class":35,"line":18052},[33,85182,55948],{"class":76},[33,85184,52690],{"class":47},[33,85186,1045],{"class":76},[33,85188,52745],{"class":39},[33,85190,80],{"class":47},[33,85192,85193],{"class":35,"line":18066},[33,85194,916],{"class":47},[33,85196,85197],{"class":35,"line":18071},[33,85198,160],{"emptyLinePlaceholder":159},[33,85200,85201,85203,85206],{"class":35,"line":18077},[33,85202,73728],{"class":43},[33,85204,85205],{"class":43}," .amount",[33,85207,16823],{"class":47},[33,85209,85210,85212,85214,85216,85218],{"class":35,"line":18082},[33,85211,56175],{"class":76},[33,85213,52690],{"class":47},[33,85215,2250],{"class":76},[33,85217,52745],{"class":39},[33,85219,80],{"class":47},[33,85221,85222,85224,85226,85228],{"class":35,"line":18096},[33,85223,58669],{"class":76},[33,85225,52690],{"class":47},[33,85227,80193],{"class":76},[33,85229,80],{"class":47},[33,85231,85232,85234,85236,85238],{"class":35,"line":18101},[33,85233,63587],{"class":76},[33,85235,52690],{"class":47},[33,85237,52742],{"class":76},[33,85239,80],{"class":47},[33,85241,85242,85244,85246,85248,85250],{"class":35,"line":18106},[33,85243,63003],{"class":76},[33,85245,52690],{"class":47},[33,85247,2256],{"class":76},[33,85249,52745],{"class":39},[33,85251,80],{"class":47},[33,85253,85254],{"class":35,"line":18120},[33,85255,916],{"class":47},[33,85257,85258,85260,85262],{"class":35,"line":18132},[33,85259,53670],{"class":47},[33,85261,1544],{"class":52553},[33,85263,52560],{"class":47},[33,85265,85266,85268,85270],{"class":35,"line":18137},[33,85267,53038],{"class":47},[33,85269,52587],{"class":52553},[33,85271,52560],{"class":47},[33,85273,85274],{"class":35,"line":18150},[33,85275,160],{"emptyLinePlaceholder":159},[33,85277,85278,85280,85282],{"class":35,"line":18155},[33,85279,875],{"class":47},[33,85281,53053],{"class":52553},[33,85283,52560],{"class":47},[33,85285,85286,85288,85290,85292,85294,85296],{"class":35,"line":18160},[33,85287,53397],{"class":47},[33,85289,52864],{"class":52553},[33,85291,54739],{"class":43},[33,85293,73],{"class":47},[33,85295,63861],{"class":119},[33,85297,52560],{"class":47},[33,85299,85300,85302,85304],{"class":35,"line":18165},[33,85301,53670],{"class":47},[33,85303,52864],{"class":52553},[33,85305,52560],{"class":47},[33,85307,85308,85310,85312,85314,85316,85318],{"class":35,"line":18178},[33,85309,53397],{"class":47},[33,85311,52864],{"class":52553},[33,85313,54739],{"class":43},[33,85315,73],{"class":47},[33,85317,63833],{"class":119},[33,85319,52560],{"class":47},[33,85321,85322,85324,85326,85329,85331,85333,85335,85338,85340,85342,85344,85346],{"class":35,"line":18183},[33,85323,52594],{"class":47},[33,85325,52864],{"class":52553},[33,85327,85328],{"class":47},">合计：\u003C",[33,85330,33],{"class":52553},[33,85332,54739],{"class":43},[33,85334,73],{"class":47},[33,85336,85337],{"class":119},"\"amount\"",[33,85339,56567],{"class":47},[33,85341,33],{"class":52553},[33,85343,56567],{"class":47},[33,85345,52864],{"class":52553},[33,85347,52560],{"class":47},[33,85349,85350,85352,85354],{"class":35,"line":33886},[33,85351,53670],{"class":47},[33,85353,52864],{"class":52553},[33,85355,52560],{"class":47},[33,85357,85358,85360,85362],{"class":35,"line":33892},[33,85359,53397],{"class":47},[33,85361,53066],{"class":52553},[33,85363,52560],{"class":47},[33,85365,85366,85368,85370,85372],{"class":35,"line":33898},[33,85367,12472],{"class":39},[33,85369,80630],{"class":76},[33,85371,14815],{"class":39},[33,85373,56700],{"class":47},[33,85375,85376],{"class":35,"line":33904},[33,85377,80639],{"class":47},[33,85379,85380,85382,85384],{"class":35,"line":33910},[33,85381,80644],{"class":47},[33,85383,80647],{"class":119},[33,85385,32719],{"class":47},[33,85387,85388,85390,85392],{"class":35,"line":33921},[33,85389,80654],{"class":47},[33,85391,80657],{"class":119},[33,85393,32719],{"class":47},[33,85395,85396,85398,85401],{"class":35,"line":33927},[33,85397,80664],{"class":47},[33,85399,85400],{"class":76},"289.9",[33,85402,32719],{"class":47},[33,85404,85405,85407,85409],{"class":35,"line":33947},[33,85406,80674],{"class":47},[33,85408,80677],{"class":119},[33,85410,32719],{"class":47},[33,85412,85413,85416,85418],{"class":35,"line":33953},[33,85414,85415],{"class":47},"        count: ",[33,85417,707],{"class":76},[33,85419,32719],{"class":47},[33,85421,85422,85425,85428],{"class":35,"line":33964},[33,85423,85424],{"class":47},"        spec: { color: ",[33,85426,85427],{"class":119},"'白色'",[33,85429,56857],{"class":47},[33,85431,85432],{"class":35,"line":33970},[33,85433,79145],{"class":47},[33,85435,85436],{"class":35,"line":33976},[33,85437,80639],{"class":47},[33,85439,85440,85442,85444],{"class":35,"line":33982},[33,85441,80644],{"class":47},[33,85443,80738],{"class":119},[33,85445,32719],{"class":47},[33,85447,85448,85450,85452],{"class":35,"line":33988},[33,85449,80654],{"class":47},[33,85451,80747],{"class":119},[33,85453,32719],{"class":47},[33,85455,85456,85458,85461],{"class":35,"line":33994},[33,85457,80664],{"class":47},[33,85459,85460],{"class":76},"109.8",[33,85462,32719],{"class":47},[33,85464,85465,85467,85469],{"class":35,"line":34000},[33,85466,80674],{"class":47},[33,85468,80765],{"class":119},[33,85470,32719],{"class":47},[33,85472,85473,85475,85477],{"class":35,"line":34006},[33,85474,85415],{"class":47},[33,85476,712],{"class":76},[33,85478,32719],{"class":47},[33,85480,85481,85484,85486,85488,85490],{"class":35,"line":34026},[33,85482,85483],{"class":47},"        spec: { size: ",[33,85485,83156],{"class":119},[33,85487,56717],{"class":47},[33,85489,83161],{"class":119},[33,85491,56857],{"class":47},[33,85493,85494],{"class":35,"line":34032},[33,85495,79145],{"class":47},[33,85497,85498],{"class":35,"line":34048},[33,85499,80639],{"class":47},[33,85501,85502,85504,85506],{"class":35,"line":34054},[33,85503,80644],{"class":47},[33,85505,80782],{"class":119},[33,85507,32719],{"class":47},[33,85509,85510,85512,85514],{"class":35,"line":34068},[33,85511,80654],{"class":47},[33,85513,80791],{"class":119},[33,85515,32719],{"class":47},[33,85517,85518,85520,85523],{"class":35,"line":34074},[33,85519,80664],{"class":47},[33,85521,85522],{"class":76},"488",[33,85524,32719],{"class":47},[33,85526,85527,85529,85531],{"class":35,"line":34089},[33,85528,80674],{"class":47},[33,85530,80809],{"class":119},[33,85532,32719],{"class":47},[33,85534,85535,85537,85539],{"class":35,"line":34095},[33,85536,85415],{"class":47},[33,85538,701],{"class":76},[33,85540,32719],{"class":47},[33,85542,85543,85545,85548,85551,85554],{"class":35,"line":34104},[33,85544,85424],{"class":47},[33,85546,85547],{"class":119},"'青色'",[33,85549,85550],{"class":47},", sum: ",[33,85552,85553],{"class":119},"'一大四小'",[33,85555,56857],{"class":47},[33,85557,85558],{"class":35,"line":34110},[33,85559,79145],{"class":47},[33,85561,85562],{"class":35,"line":34119},[33,85563,80639],{"class":47},[33,85565,85566,85568,85570],{"class":35,"line":34125},[33,85567,80644],{"class":47},[33,85569,80826],{"class":119},[33,85571,32719],{"class":47},[33,85573,85574,85576,85578],{"class":35,"line":34131},[33,85575,80654],{"class":47},[33,85577,80835],{"class":119},[33,85579,32719],{"class":47},[33,85581,85582,85584,85587],{"class":35,"line":34140},[33,85583,80664],{"class":47},[33,85585,85586],{"class":76},"139",[33,85588,32719],{"class":47},[33,85590,85591,85593,85595],{"class":35,"line":34146},[33,85592,80674],{"class":47},[33,85594,80853],{"class":119},[33,85596,32719],{"class":47},[33,85598,85599,85601,85603],{"class":35,"line":34157},[33,85600,85415],{"class":47},[33,85602,701],{"class":76},[33,85604,32719],{"class":47},[33,85606,85607,85609,85612,85614,85617],{"class":35,"line":34163},[33,85608,85483],{"class":47},[33,85610,85611],{"class":119},"'小号'",[33,85613,56717],{"class":47},[33,85615,85616],{"class":119},"'紫色'",[33,85618,56723],{"class":47},[33,85620,85621,85624],{"class":35,"line":34182},[33,85622,85623],{"class":47},"        gift: ",[33,85625,85626],{"class":119},"'50g茶叶,清洗球'\n",[33,85628,85629],{"class":35,"line":34188},[33,85630,53651],{"class":47},[33,85632,85633],{"class":35,"line":34199},[33,85634,54362],{"class":47},[33,85636,85637],{"class":35,"line":34205},[33,85638,85639],{"class":60},"    \u002F\u002F  1.根据数据渲染页面\n",[33,85641,85642,85644,85646,85648,85650,85652,85654,85656,85658,85660,85662,85664],{"class":35,"line":34225},[33,85643,53660],{"class":47},[33,85645,55652],{"class":43},[33,85647,345],{"class":47},[33,85649,81154],{"class":119},[33,85651,75502],{"class":47},[33,85653,73],{"class":39},[33,85655,81301],{"class":47},[33,85657,75297],{"class":43},[33,85659,345],{"class":47},[33,85661,81048],{"class":955},[33,85663,81051],{"class":39},[33,85665,16823],{"class":47},[33,85667,85668],{"class":35,"line":34241},[33,85669,85670],{"class":60},"      \u002F\u002F 对象解构\n",[33,85672,85673,85675,85677,85679,85681,85683,85685,85688,85690,85692,85694,85697,85699,85702,85704,85706],{"class":35,"line":34247},[33,85674,59481],{"class":39},[33,85676,81060],{"class":47},[33,85678,81073],{"class":76},[33,85680,13686],{"class":47},[33,85682,81063],{"class":76},[33,85684,13686],{"class":47},[33,85686,85687],{"class":76},"count",[33,85689,13686],{"class":47},[33,85691,81068],{"class":76},[33,85693,13686],{"class":47},[33,85695,85696],{"class":76},"spec",[33,85698,13686],{"class":47},[33,85700,85701],{"class":76},"gift",[33,85703,81076],{"class":47},[33,85705,73],{"class":39},[33,85707,81081],{"class":47},[33,85709,85710],{"class":35,"line":34261},[33,85711,85712],{"class":60},"      \u002F\u002F 规格文字模块处理\n",[33,85714,85715,85717,85720,85722,85724,85726,85728,85730,85732,85734],{"class":35,"line":34267},[33,85716,59481],{"class":39},[33,85718,85719],{"class":76}," text",[33,85721,14815],{"class":39},[33,85723,83191],{"class":47},[33,85725,83194],{"class":43},[33,85727,83197],{"class":47},[33,85729,75476],{"class":43},[33,85731,345],{"class":47},[33,85733,83204],{"class":119},[33,85735,884],{"class":47},[33,85737,85738],{"class":35,"line":34273},[33,85739,85740],{"class":60},"      \u002F\u002F 处理赠品模块\n",[33,85742,85743,85745,85747,85749,85752,85754,85756,85758,85760,85763,85765,85767,85769,85771,85773,85776,85778,85781,85783,85785,85787,85789,85791,85793],{"class":35,"line":34284},[33,85744,59481],{"class":39},[33,85746,75172],{"class":76},[33,85748,14815],{"class":39},[33,85750,85751],{"class":47}," gift ",[33,85753,2581],{"class":39},[33,85755,84365],{"class":47},[33,85757,84368],{"class":43},[33,85759,345],{"class":47},[33,85761,85762],{"class":119},"','",[33,85764,32079],{"class":47},[33,85766,75297],{"class":43},[33,85768,345],{"class":47},[33,85770,81048],{"class":955},[33,85772,81051],{"class":39},[33,85774,85775],{"class":119}," `\u003Cspan class=\"tag\">【赠品】${",[33,85777,81048],{"class":47},[33,85779,85780],{"class":119},"}\u003C\u002Fspan>`",[33,85782,32079],{"class":47},[33,85784,75476],{"class":43},[33,85786,345],{"class":47},[33,85788,75481],{"class":119},[33,85790,14965],{"class":47},[33,85792,2458],{"class":39},[33,85794,71357],{"class":119},[33,85796,85797],{"class":35,"line":34290},[33,85798,85799],{"class":60},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[33,85801,85802,85804,85807,85809,85812,85814,85816,85818,85821,85823,85825,85827,85830,85832,85834],{"class":35,"line":34296},[33,85803,59481],{"class":39},[33,85805,85806],{"class":76}," subtotal",[33,85808,14815],{"class":39},[33,85810,85811],{"class":47}," ((price ",[33,85813,2057],{"class":39},[33,85815,7141],{"class":76},[33,85817,303],{"class":39},[33,85819,85820],{"class":47}," count) ",[33,85822,2184],{"class":39},[33,85824,7141],{"class":76},[33,85826,32079],{"class":47},[33,85828,85829],{"class":43},"toFixed",[33,85831,345],{"class":47},[33,85833,707],{"class":76},[33,85835,884],{"class":47},[33,85837,85838],{"class":35,"line":34306},[33,85839,160],{"emptyLinePlaceholder":159},[33,85841,85842,85844],{"class":35,"line":34312},[33,85843,75235],{"class":39},[33,85845,71421],{"class":119},[33,85847,85848],{"class":35,"line":34323},[33,85849,85850],{"class":119},"        \u003Cdiv class=\"item\">\n",[33,85852,85853,85856,85858],{"class":35,"line":34329},[33,85854,85855],{"class":119},"          \u003Cimg src=\"${",[33,85857,81073],{"class":47},[33,85859,81105],{"class":119},[33,85861,85862,85865,85867,85870,85872],{"class":35,"line":34339},[33,85863,85864],{"class":119},"          \u003Cp class=\"name\">${",[33,85866,81063],{"class":47},[33,85868,85869],{"class":119},"}${",[33,85871,2760],{"class":47},[33,85873,81115],{"class":119},[33,85875,85876,85879,85881],{"class":35,"line":34344},[33,85877,85878],{"class":119},"          \u003Cp class=\"spec\">${",[33,85880,6578],{"class":47},[33,85882,81115],{"class":119},[33,85884,85885,85888,85890,85892,85894,85896,85898,85900],{"class":35,"line":34350},[33,85886,85887],{"class":119},"          \u003Cp class=\"price\">${",[33,85889,81068],{"class":47},[33,85891,2158],{"class":119},[33,85893,85829],{"class":43},[33,85895,345],{"class":119},[33,85897,707],{"class":76},[33,85899,352],{"class":119},[33,85901,81115],{"class":119},[33,85903,85904,85907,85909],{"class":35,"line":34399},[33,85905,85906],{"class":119},"          \u003Cp class=\"count\">x${",[33,85908,85687],{"class":47},[33,85910,81115],{"class":119},[33,85912,85913,85916,85919],{"class":35,"line":34446},[33,85914,85915],{"class":119},"          \u003Cp class=\"sub-total\">${",[33,85917,85918],{"class":47},"subtotal",[33,85920,81115],{"class":119},[33,85922,85923],{"class":35,"line":34451},[33,85924,85925],{"class":119},"        \u003C\u002Fdiv> \n",[33,85927,85928],{"class":35,"line":34457},[33,85929,85930],{"class":119},"             `\n",[33,85932,85933,85936,85938,85940,85942],{"class":35,"line":34476},[33,85934,85935],{"class":47},"    }).",[33,85937,75476],{"class":43},[33,85939,345],{"class":47},[33,85941,75481],{"class":119},[33,85943,884],{"class":47},[33,85945,85946],{"class":35,"line":34482},[33,85947,85948],{"class":60},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[33,85950,85951,85953,85955,85957,85959,85962,85964,85967,85969,85971,85973,85976,85979,85981,85984,85986,85988,85990,85993,85995,85997,85999,86001],{"class":35,"line":34502},[33,85952,12472],{"class":39},[33,85954,64038],{"class":76},[33,85956,14815],{"class":39},[33,85958,81301],{"class":47},[33,85960,85961],{"class":43},"reduce",[33,85963,3797],{"class":47},[33,85965,85966],{"class":955},"prev",[33,85968,13686],{"class":47},[33,85970,81048],{"class":955},[33,85972,14965],{"class":47},[33,85974,85975],{"class":39},"=>",[33,85977,85978],{"class":47}," prev ",[33,85980,1271],{"class":39},[33,85982,85983],{"class":47}," (item.price ",[33,85985,2057],{"class":39},[33,85987,7141],{"class":76},[33,85989,303],{"class":39},[33,85991,85992],{"class":47}," item.count) ",[33,85994,2184],{"class":39},[33,85996,7141],{"class":76},[33,85998,13686],{"class":47},[33,86000,766],{"class":76},[33,86002,884],{"class":47},[33,86004,86005,86007,86009,86011,86014,86016,86018,86021,86023,86025,86027],{"class":35,"line":34508},[33,86006,53660],{"class":47},[33,86008,55652],{"class":43},[33,86010,345],{"class":47},[33,86012,86013],{"class":119},"'.amount'",[33,86015,75502],{"class":47},[33,86017,73],{"class":39},[33,86019,86020],{"class":47}," total.",[33,86022,85829],{"class":43},[33,86024,345],{"class":47},[33,86026,707],{"class":76},[33,86028,884],{"class":47},[33,86030,86031,86033,86035],{"class":35,"line":34514},[33,86032,53670],{"class":47},[33,86034,53066],{"class":52553},[33,86036,52560],{"class":47},[33,86038,86039,86041,86043],{"class":35,"line":34524},[33,86040,53038],{"class":47},[33,86042,53053],{"class":52553},[33,86044,52560],{"class":47},[33,86046,86047],{"class":35,"line":34529},[33,86048,160],{"emptyLinePlaceholder":159},[33,86050,86051,86053,86055],{"class":35,"line":34535},[33,86052,53038],{"class":47},[33,86054,51888],{"class":52553},[33,86056,52560],{"class":47},[18,86058,86060],{"id":86059},"_411-编程思想","4.11 编程思想",[1599,86062,86064],{"id":86063},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,86066,86067,86070],{},[480,86068,86069],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,86072,86073],{},"调用就可以了",[14,86075,86076],{},[2918,86077],{"alt":28,"src":86078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[1599,86080,86082],{"id":86081},"_4112-面向对象","4.11.2 面向对象",[14,86084,86085],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,86087,86088],{},[2918,86089],{"alt":28,"src":86090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,86092,86093],{},"面向对象的特性：",[561,86095,86096,86099,86102],{},[564,86097,86098],{},"封装性",[564,86100,86101],{},"继承性",[564,86103,86104],{},"多态性",[1599,86106,86108],{"id":86107},"_4113-两者比较","4.11.3 两者比较",[14,86110,86111],{},[2918,86112],{"alt":28,"src":86113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[18,86115,86117],{"id":86116},"_412-构造函数回顾","4.12 构造函数回顾",[14,86119,86120],{},[2918,86121],{"alt":28,"src":86122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,86124,86125],{},[2918,86126],{"alt":28,"src":86127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,86129,86130],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,86132,86133],{},[2918,86134],{"alt":28,"src":86135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[18,86137,86139],{"id":86138},"_413-原型","4.13 原型",[1599,86141,86143],{"id":86142},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,86145,86146],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,86148,86149],{},[2918,86150],{"alt":28,"src":86151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,86153,86154],{},[2918,86155],{"alt":28,"src":86156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,86158,86159],{},"原型是构造函数的属性，它也是一个对象",[14,86161,86162],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,86164,86165],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[23,86167,86169],{"className":54320,"code":86168,"language":54322,"meta":28,"style":28},"\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",[30,86170,86171,86179,86184,86192,86197,86202,86207,86212,86217,86221,86225,86229,86234,86239,86243,86248,86253,86258,86263,86268,86272,86280],{"__ignoreMap":28},[33,86172,86173,86175,86177],{"class":35,"line":36},[33,86174,875],{"class":47},[33,86176,53053],{"class":52553},[33,86178,52560],{"class":47},[33,86180,86181],{"class":35,"line":51},[33,86182,86183],{"class":60},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[33,86185,86186,86188,86190],{"class":35,"line":57},[33,86187,53397],{"class":47},[33,86189,53066],{"class":52553},[33,86191,52560],{"class":47},[33,86193,86194],{"class":35,"line":64},[33,86195,86196],{"class":47},"    function Star(uname, age) {\n",[33,86198,86199],{"class":35,"line":83},[33,86200,86201],{"class":47},"      this.uname = uname,\n",[33,86203,86204],{"class":35,"line":89},[33,86205,86206],{"class":47},"        this.age = age\n",[33,86208,86209],{"class":35,"line":98},[33,86210,86211],{"class":47},"      \u002F\u002F this.sing = function () {\n",[33,86213,86214],{"class":35,"line":110},[33,86215,86216],{"class":47},"      \u002F\u002F   console.log('唱歌')\n",[33,86218,86219],{"class":35,"line":134},[33,86220,160],{"emptyLinePlaceholder":159},[33,86222,86223],{"class":35,"line":156},[33,86224,61290],{"class":47},[33,86226,86227],{"class":35,"line":163},[33,86228,916],{"class":47},[33,86230,86231],{"class":35,"line":169},[33,86232,86233],{"class":47},"    Star.prototype.sing = function () {\n",[33,86235,86236],{"class":35,"line":175},[33,86237,86238],{"class":47},"      console.log('唱歌')\n",[33,86240,86241],{"class":35,"line":181},[33,86242,916],{"class":47},[33,86244,86245],{"class":35,"line":196},[33,86246,86247],{"class":47},"    \u002F\u002F console.dir(Star.prototype)\n",[33,86249,86250],{"class":35,"line":213},[33,86251,86252],{"class":47},"    const pink = new Star('pink', 18)\n",[33,86254,86255],{"class":35,"line":228},[33,86256,86257],{"class":47},"    const red = new Star('red', 20)\n",[33,86259,86260],{"class":35,"line":1345},[33,86261,86262],{"class":47},"    pink.sing()\n",[33,86264,86265],{"class":35,"line":1350},[33,86266,86267],{"class":47},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[33,86269,86270],{"class":35,"line":1359},[33,86271,160],{"emptyLinePlaceholder":159},[33,86273,86274,86276,86278],{"class":35,"line":1364},[33,86275,53670],{"class":47},[33,86277,53066],{"class":52553},[33,86279,52560],{"class":47},[33,86281,86282,86284,86286],{"class":35,"line":1370},[33,86283,53038],{"class":47},[33,86285,53053],{"class":52553},[33,86287,52560],{"class":47},[14,86289,86290],{},[2918,86291],{"alt":28,"src":86292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[23,86294,86296],{"className":54320,"code":86295,"language":54322,"meta":28,"style":28},"\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",[30,86297,86298,86306,86314,86319,86324,86329,86334,86338,86343,86348,86353,86357,86362,86366,86370,86375,86379,86387],{"__ignoreMap":28},[33,86299,86300,86302,86304],{"class":35,"line":36},[33,86301,875],{"class":47},[33,86303,53053],{"class":52553},[33,86305,52560],{"class":47},[33,86307,86308,86310,86312],{"class":35,"line":51},[33,86309,53397],{"class":47},[33,86311,53066],{"class":52553},[33,86313,52560],{"class":47},[33,86315,86316],{"class":35,"line":57},[33,86317,86318],{"class":47},"    let that\n",[33,86320,86321],{"class":35,"line":64},[33,86322,86323],{"class":47},"    function Star(uname) {\n",[33,86325,86326],{"class":35,"line":83},[33,86327,86328],{"class":47},"      this.uname = uname\n",[33,86330,86331],{"class":35,"line":89},[33,86332,86333],{"class":47},"      that = this\n",[33,86335,86336],{"class":35,"line":98},[33,86337,916],{"class":47},[33,86339,86340],{"class":35,"line":110},[33,86341,86342],{"class":47},"    \u002F\u002F 实例对象是 ldh\n",[33,86344,86345],{"class":35,"line":134},[33,86346,86347],{"class":47},"    const ldh = new Star('刘德华')\n",[33,86349,86350],{"class":35,"line":156},[33,86351,86352],{"class":47},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[33,86354,86355],{"class":35,"line":163},[33,86356,160],{"emptyLinePlaceholder":159},[33,86358,86359],{"class":35,"line":169},[33,86360,86361],{"class":47},"    Star.sing = function () {\n",[33,86363,86364],{"class":35,"line":175},[33,86365,86238],{"class":47},[33,86367,86368],{"class":35,"line":181},[33,86369,916],{"class":47},[33,86371,86372],{"class":35,"line":196},[33,86373,86374],{"class":47},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[33,86376,86377],{"class":35,"line":213},[33,86378,160],{"emptyLinePlaceholder":159},[33,86380,86381,86383,86385],{"class":35,"line":228},[33,86382,53670],{"class":47},[33,86384,53066],{"class":52553},[33,86386,52560],{"class":47},[33,86388,86389,86391,86393],{"class":35,"line":1345},[33,86390,53038],{"class":47},[33,86392,53053],{"class":52553},[33,86394,52560],{"class":47},[14,86396,86397],{},"构造函数的this指向的是实例对象；",[14,86399,86400],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[1599,86402,86404],{"id":86403},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,86406,86407],{},[2918,86408],{"alt":28,"src":86409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[23,86411,86413],{"className":54320,"code":86412,"language":54322,"meta":28,"style":28},"\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",[30,86414,86415,86423,86431,86436,86441,86446,86451,86456,86461,86466,86471,86476,86481,86485,86490,86495,86500,86505,86509,86514,86519,86524,86529,86533,86538,86543,86548,86553,86557,86562,86566,86574],{"__ignoreMap":28},[33,86416,86417,86419,86421],{"class":35,"line":36},[33,86418,875],{"class":47},[33,86420,53053],{"class":52553},[33,86422,52560],{"class":47},[33,86424,86425,86427,86429],{"class":35,"line":51},[33,86426,53397],{"class":47},[33,86428,53066],{"class":52553},[33,86430,52560],{"class":47},[33,86432,86433],{"class":35,"line":57},[33,86434,86435],{"class":47},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[33,86437,86438],{"class":35,"line":64},[33,86439,86440],{"class":47},"    const arr = [1, 2, 3]\n",[33,86442,86443],{"class":35,"line":83},[33,86444,86445],{"class":47},"    \u002F\u002F 自己定义数组的扩展方法\n",[33,86447,86448],{"class":35,"line":89},[33,86449,86450],{"class":47},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[33,86452,86453],{"class":35,"line":98},[33,86454,86455],{"class":47},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[33,86457,86458],{"class":35,"line":110},[33,86459,86460],{"class":47},"    \u002F\u002F ①.最大值\n",[33,86462,86463],{"class":35,"line":134},[33,86464,86465],{"class":47},"    Array.prototype.max = function () {\n",[33,86467,86468],{"class":35,"line":156},[33,86469,86470],{"class":47},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[33,86472,86473],{"class":35,"line":163},[33,86474,86475],{"class":47},"      return Math.max(...this)\n",[33,86477,86478],{"class":35,"line":169},[33,86479,86480],{"class":47},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[33,86482,86483],{"class":35,"line":175},[33,86484,916],{"class":47},[33,86486,86487],{"class":35,"line":181},[33,86488,86489],{"class":47},"    console.log(arr.max())\n",[33,86491,86492],{"class":35,"line":196},[33,86493,86494],{"class":47},"    \u002F\u002F ②最小值\n",[33,86496,86497],{"class":35,"line":213},[33,86498,86499],{"class":47},"    Array.prototype.min = function () {\n",[33,86501,86502],{"class":35,"line":228},[33,86503,86504],{"class":47},"      return Math.min(...this)\n",[33,86506,86507],{"class":35,"line":1345},[33,86508,916],{"class":47},[33,86510,86511],{"class":35,"line":1350},[33,86512,86513],{"class":47},"    console.log(arr.min())\n",[33,86515,86516],{"class":35,"line":1359},[33,86517,86518],{"class":47},"    \u002F\u002F③求和\n",[33,86520,86521],{"class":35,"line":1364},[33,86522,86523],{"class":47},"    Array.prototype.sum = function () {\n",[33,86525,86526],{"class":35,"line":1370},[33,86527,86528],{"class":47},"      return this.reduce((prev, current) => prev + current, 0)\n",[33,86530,86531],{"class":35,"line":1425},[33,86532,916],{"class":47},[33,86534,86535],{"class":35,"line":1438},[33,86536,86537],{"class":47},"    console.log(arr.sum())\n",[33,86539,86540],{"class":35,"line":1451},[33,86541,86542],{"class":47},"    \u002F\u002F ③排序\n",[33,86544,86545],{"class":35,"line":1457},[33,86546,86547],{"class":47},"    Array.prototype.rever = function () {\n",[33,86549,86550],{"class":35,"line":1466},[33,86551,86552],{"class":47},"      return this.reverse()\n",[33,86554,86555],{"class":35,"line":1471},[33,86556,916],{"class":47},[33,86558,86559],{"class":35,"line":1477},[33,86560,86561],{"class":47},"    console.log(arr.rever())\n",[33,86563,86564],{"class":35,"line":1504},[33,86565,160],{"emptyLinePlaceholder":159},[33,86567,86568,86570,86572],{"class":35,"line":1509},[33,86569,53670],{"class":47},[33,86571,53066],{"class":52553},[33,86573,52560],{"class":47},[33,86575,86576,86578,86580],{"class":35,"line":1525},[33,86577,53038],{"class":47},[33,86579,53053],{"class":52553},[33,86581,52560],{"class":47},[14,86583,86584],{},[2918,86585],{"alt":28,"src":86586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[1599,86588,86590],{"id":86589},"_4133-constructor-属性","4.13.3 constructor 属性",[14,86592,86593],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,86595,86596],{},[2918,86597],{"alt":28,"src":86598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[23,86600,86602],{"className":54320,"code":86601,"language":54322,"meta":28,"style":28},"\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",[30,86603,86604,86612,86620,86625,86630,86634,86639,86644,86649,86657],{"__ignoreMap":28},[33,86605,86606,86608,86610],{"class":35,"line":36},[33,86607,875],{"class":47},[33,86609,53053],{"class":52553},[33,86611,52560],{"class":47},[33,86613,86614,86616,86618],{"class":35,"line":51},[33,86615,53397],{"class":47},[33,86617,53066],{"class":52553},[33,86619,52560],{"class":47},[33,86621,86622],{"class":35,"line":57},[33,86623,86624],{"class":47},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[33,86626,86627],{"class":35,"line":64},[33,86628,86629],{"class":47},"    function Star() {\n",[33,86631,86632],{"class":35,"line":83},[33,86633,916],{"class":47},[33,86635,86636],{"class":35,"line":89},[33,86637,86638],{"class":47},"    const ldh = new Star()\n",[33,86640,86641],{"class":35,"line":98},[33,86642,86643],{"class":47},"    console.log(Star.prototype)\n",[33,86645,86646],{"class":35,"line":110},[33,86647,86648],{"class":47},"    console.log(Star.prototype.constructor === Star)\n",[33,86650,86651,86653,86655],{"class":35,"line":134},[33,86652,53670],{"class":47},[33,86654,53066],{"class":52553},[33,86656,52560],{"class":47},[33,86658,86659,86661,86663],{"class":35,"line":156},[33,86660,53038],{"class":47},[33,86662,53053],{"class":52553},[33,86664,52560],{"class":47},[14,86666,86667],{},[2918,86668],{"alt":28,"src":86669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,86671,86672],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[23,86674,86676],{"className":54320,"code":86675,"language":54322,"meta":28,"style":28},"  \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",[30,86677,86678,86686,86690,86694,86698,86703,86708,86713,86717,86722,86727,86732,86737,86742,86747,86751,86755,86760,86765,86770,86774,86779,86784,86788,86792,86796],{"__ignoreMap":28},[33,86679,86680,86682,86684],{"class":35,"line":36},[33,86681,53397],{"class":47},[33,86683,53066],{"class":52553},[33,86685,52560],{"class":47},[33,86687,86688],{"class":35,"line":51},[33,86689,86624],{"class":47},[33,86691,86692],{"class":35,"line":57},[33,86693,86629],{"class":47},[33,86695,86696],{"class":35,"line":64},[33,86697,916],{"class":47},[33,86699,86700],{"class":35,"line":83},[33,86701,86702],{"class":47},"    \u002F\u002F const ldh = new Star()\n",[33,86704,86705],{"class":35,"line":89},[33,86706,86707],{"class":47},"    \u002F\u002F console.log(Star.prototype)\n",[33,86709,86710],{"class":35,"line":98},[33,86711,86712],{"class":47},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[33,86714,86715],{"class":35,"line":110},[33,86716,160],{"emptyLinePlaceholder":159},[33,86718,86719],{"class":35,"line":134},[33,86720,86721],{"class":47},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[33,86723,86724],{"class":35,"line":156},[33,86725,86726],{"class":47},"    \u002F\u002F Star.prototype.sing = function () {\n",[33,86728,86729],{"class":35,"line":163},[33,86730,86731],{"class":47},"    \u002F\u002F   console.log('唱歌')\n",[33,86733,86734],{"class":35,"line":169},[33,86735,86736],{"class":47},"    \u002F\u002F }\n",[33,86738,86739],{"class":35,"line":175},[33,86740,86741],{"class":47},"    \u002F\u002F Star.prototype.dance = function () {\n",[33,86743,86744],{"class":35,"line":181},[33,86745,86746],{"class":47},"    \u002F\u002F   console.log('跳舞')\n",[33,86748,86749],{"class":35,"line":196},[33,86750,86736],{"class":47},[33,86752,86753],{"class":35,"line":213},[33,86754,86643],{"class":47},[33,86756,86757],{"class":35,"line":228},[33,86758,86759],{"class":47},"    Star.prototype = {\n",[33,86761,86762],{"class":35,"line":1345},[33,86763,86764],{"class":47},"      sing: function () {\n",[33,86766,86767],{"class":35,"line":1350},[33,86768,86769],{"class":47},"        console.log('唱歌')\n",[33,86771,86772],{"class":35,"line":1359},[33,86773,79145],{"class":47},[33,86775,86776],{"class":35,"line":1364},[33,86777,86778],{"class":47},"      dance: function () {\n",[33,86780,86781],{"class":35,"line":1370},[33,86782,86783],{"class":47},"        console.log('跳舞')\n",[33,86785,86786],{"class":35,"line":1425},[33,86787,53651],{"class":47},[33,86789,86790],{"class":35,"line":1438},[33,86791,916],{"class":47},[33,86793,86794],{"class":35,"line":1451},[33,86795,86643],{"class":47},[33,86797,86798,86800,86802],{"class":35,"line":1457},[33,86799,53670],{"class":47},[33,86801,53066],{"class":52553},[33,86803,52560],{"class":47},[14,86805,86806],{},"进行输出结果后会发现：",[14,86808,86809],{},[2918,86810],{"alt":28,"src":86811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,86813,86814],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,86816,86817],{},"所以，要重新指回创造这个原型对象的构造函数",[23,86819,86821],{"className":72466,"code":86820,"language":72468,"meta":28,"style":28},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[30,86822,86823,86837,86842,86847,86858,86871,86876,86887,86901,86905],{"__ignoreMap":28},[33,86824,86825,86828,86830,86833,86835],{"class":35,"line":36},[33,86826,86827],{"class":76},"Star",[33,86829,2158],{"class":47},[33,86831,86832],{"class":76},"prototype",[33,86834,14815],{"class":39},[33,86836,16823],{"class":47},[33,86838,86839],{"class":35,"line":51},[33,86840,86841],{"class":60},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[33,86843,86844],{"class":35,"line":57},[33,86845,86846],{"class":47},"  constructor: Star,\n",[33,86848,86849,86852,86854,86856],{"class":35,"line":64},[33,86850,86851],{"class":43},"  sing",[33,86853,52690],{"class":47},[33,86855,55702],{"class":39},[33,86857,55705],{"class":47},[33,86859,86860,86862,86864,86866,86869],{"class":35,"line":83},[33,86861,75006],{"class":47},[33,86863,59500],{"class":43},[33,86865,345],{"class":47},[33,86867,86868],{"class":119},"'唱歌'",[33,86870,884],{"class":47},[33,86872,86873],{"class":35,"line":89},[33,86874,86875],{"class":47},"   },\n",[33,86877,86878,86881,86883,86885],{"class":35,"line":98},[33,86879,86880],{"class":43},"   dance",[33,86882,52690],{"class":47},[33,86884,55702],{"class":39},[33,86886,55705],{"class":47},[33,86888,86889,86892,86894,86896,86899],{"class":35,"line":110},[33,86890,86891],{"class":47},"     console.",[33,86893,59500],{"class":43},[33,86895,345],{"class":47},[33,86897,86898],{"class":119},"'跳舞'",[33,86900,884],{"class":47},[33,86902,86903],{"class":35,"line":134},[33,86904,5706],{"class":47},[33,86906,86907],{"class":35,"line":156},[33,86908,231],{"class":47},[14,86910,86911],{},[2918,86912],{"alt":28,"src":86913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,86915,86916],{},"总结1：",[14,86918,86919],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86921,86922],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86924,86925],{},"constructor指的是他的来源",[14,86927,86928],{},[2918,86929],{"alt":28,"src":86930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86932,86933],{},[2918,86934],{"alt":28,"src":86935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86937,86938],{},"总结2：",[14,86940,86941],{},[2918,86942],{"alt":28,"src":86943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86945,86946],{},[2918,86947],{"alt":28,"src":86948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86950,86951],{},[2918,86952],{"alt":28,"src":86953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[1599,86955,86957],{"id":86956},"_4134-对象原型","4.13.4 对象原型",[14,86959,86960],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86962,86963],{},"对象原型就是__proto__这个属性",[14,86965,86966],{},[2918,86967],{"alt":28,"src":86968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86970,86971],{},[2918,86972],{"alt":28,"src":86973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86975,86976],{},[2918,86977],{"alt":28,"src":86978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86980,86981],{},[2918,86982],{"alt":28,"src":86983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[23,86985,86987],{"className":54320,"code":86986,"language":54322,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,86988,86989,86997,87005,87009,87013,87017,87022,87030],{"__ignoreMap":28},[33,86990,86991,86993,86995],{"class":35,"line":36},[33,86992,875],{"class":47},[33,86994,53053],{"class":52553},[33,86996,52560],{"class":47},[33,86998,86999,87001,87003],{"class":35,"line":51},[33,87000,53397],{"class":47},[33,87002,53066],{"class":52553},[33,87004,52560],{"class":47},[33,87006,87007],{"class":35,"line":57},[33,87008,86629],{"class":47},[33,87010,87011],{"class":35,"line":64},[33,87012,916],{"class":47},[33,87014,87015],{"class":35,"line":83},[33,87016,86638],{"class":47},[33,87018,87019],{"class":35,"line":89},[33,87020,87021],{"class":47},"    console.log(ldh)\n",[33,87023,87024,87026,87028],{"class":35,"line":98},[33,87025,53670],{"class":47},[33,87027,53066],{"class":52553},[33,87029,52560],{"class":47},[33,87031,87032,87034,87036],{"class":35,"line":110},[33,87033,53038],{"class":47},[33,87035,53053],{"class":52553},[33,87037,52560],{"class":47},[14,87039,87040],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,87042,87043],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,87045,87046],{},[2918,87047],{"alt":28,"src":87048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,87050,87051],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,87053,87054],{},"对象原型指向原型对象",[14,87056,87057],{},[2918,87058],{"alt":28,"src":87059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,87061,87062],{},[2918,87063],{"alt":28,"src":87064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,87066,87067],{},[2918,87068],{"alt":28,"src":87069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[1599,87071,87073],{"id":87072},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,87075,87076],{},[2918,87077],{"alt":28,"src":87078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[574,87080,87081,87084,87087,87090],{},[564,87082,87083],{},"构造函数通过new的形式实例化得到实例对象",[564,87085,87086],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[564,87088,87089],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[564,87091,87092],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,87094,87095],{},[2918,87096],{"alt":28,"src":87097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,87099,87100],{},"题目梳理：",[14,87102,87103],{},[2918,87104],{"alt":28,"src":87105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[1599,87107,87109],{"id":87108},"_4136-原型继承","4.13.6 原型继承",[14,87111,87112],{},[2918,87113],{"alt":28,"src":87114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,87116,87117],{},[2918,87118],{"alt":28,"src":87119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,87121,87122],{},[2918,87123],{"alt":28,"src":87124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,87126,87127],{},[2918,87128],{"alt":28,"src":87129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,87131,87132],{},[2918,87133],{"alt":28,"src":87134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,87136,87137],{},[2918,87138],{"alt":28,"src":87139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,87141,87142],{},[2918,87143],{"alt":28,"src":87144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,87146,87147],{},[2918,87148],{"alt":28,"src":87149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,87151,87152],{},"回顾：构造函数每次new得到对象都是不同的",[1599,87154,87156],{"id":87155},"_4137-原型链","4.13.7 原型链",[14,87158,87159],{},[2918,87160],{"alt":28,"src":87161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,87163,87164],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,87166,87167],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,87169,87170],{},"大哥是Object",[14,87172,87173],{},[2918,87174],{"alt":28,"src":87175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,87177,87178],{},[2918,87179],{"alt":28,"src":87180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,87182,87183],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,87185,87186],{},"万物皆对象",[1599,87188,87190],{"id":87189},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,87192,87193],{},"模态框",[14,87195,87196],{},"以后遇见这个效果直接使用这个就行",[14,87198,87199],{},[2918,87200],{"alt":28,"src":87201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,87203,87204],{},[2918,87205],{"alt":28,"src":87206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,87208,87209],{},[2918,87210],{"alt":28,"src":87211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,87213,87214],{},[2918,87215],{"alt":28,"src":87216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,87218,87219],{},"补充知识点：",[574,87221,87222],{},[564,87223,87224],{},"append()",[14,87226,87227],{},[2918,87228],{"alt":28,"src":87229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[23,87231,87233],{"className":51886,"code":87232,"language":51888,"meta":28,"style":28},"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",[30,87234,87235,87240,87245,87250,87254,87258,87262,87267,87272,87277,87281],{"__ignoreMap":28},[33,87236,87237],{"class":35,"line":36},[33,87238,87239],{"class":47},"append(param1)\n",[33,87241,87242],{"class":35,"line":51},[33,87243,87244],{"class":47},"append(param1, param2)\n",[33,87246,87247],{"class":35,"line":57},[33,87248,87249],{"class":47},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[33,87251,87252],{"class":35,"line":64},[33,87253,160],{"emptyLinePlaceholder":159},[33,87255,87256],{"class":35,"line":83},[33,87257,160],{"emptyLinePlaceholder":159},[33,87259,87260],{"class":35,"line":89},[33,87261,160],{"emptyLinePlaceholder":159},[33,87263,87264],{"class":35,"line":98},[33,87265,87266],{"class":47},"let div = document.createElement(\"div\");\n",[33,87268,87269],{"class":35,"line":110},[33,87270,87271],{"class":47},"let p = document.createElement(\"p\");\n",[33,87273,87274],{"class":35,"line":134},[33,87275,87276],{"class":47},"div.append(p);\n",[33,87278,87279],{"class":35,"line":156},[33,87280,160],{"emptyLinePlaceholder":159},[33,87282,87283,87286,87288],{"class":35,"line":163},[33,87284,87285],{"class":47},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[33,87287,14],{"class":52553},[33,87289,87290],{"class":47},"> ]\n",[574,87292,87293],{"start":51},[564,87294,87295],{},"remove()",[14,87297,87298],{},"自己删自己",[14,87300,87301],{},[2918,87302],{"alt":28,"src":87303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[23,87305,87307],{"className":51886,"code":87306,"language":51888,"meta":28,"style":28},"\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",[30,87308,87309,87319,87333,87337,87345,87359,87379,87391,87399,87406,87418,87431,87466,87478,87489,87501,87513,87525,87552,87562,87566,87570,87579,87591,87605,87615,87627,87631,87635,87645,87656,87666,87676,87689,87702,87712,87716,87720,87729,87739,87751,87755,87759,87768,87778,87788,87800,87804,87808,87818,87834,87845,87855,87865,87877,87889,87901,87905,87909,87922,87933,87937,87945,87953,87957,87965,87985,88005,88013,88018,88044,88049,88054,88073,88078,88090,88095,88106,88116,88126,88131,88136,88140,88145,88150,88155,88175,88180,88200,88205,88219,88224,88229,88234,88250,88254,88259,88288,88293,88298,88303,88314,88318,88322,88326,88331,88356,88361,88386,88391,88400,88404,88409,88434,88438,88463,88467,88476,88480,88485,88503,88513,88517,88525,88533,88537],{"__ignoreMap":28},[33,87310,87311,87313,87315,87317],{"class":35,"line":36},[33,87312,52550],{"class":47},[33,87314,52554],{"class":52553},[33,87316,52557],{"class":43},[33,87318,52560],{"class":47},[33,87320,87321,87323,87325,87327,87329,87331],{"class":35,"line":51},[33,87322,875],{"class":47},[33,87324,51888],{"class":52553},[33,87326,52569],{"class":43},[33,87328,73],{"class":47},[33,87330,52574],{"class":119},[33,87332,52560],{"class":47},[33,87334,87335],{"class":35,"line":57},[33,87336,160],{"emptyLinePlaceholder":159},[33,87338,87339,87341,87343],{"class":35,"line":64},[33,87340,875],{"class":47},[33,87342,52587],{"class":52553},[33,87344,52560],{"class":47},[33,87346,87347,87349,87351,87353,87355,87357],{"class":35,"line":83},[33,87348,53397],{"class":47},[33,87350,52597],{"class":52553},[33,87352,52600],{"class":43},[33,87354,73],{"class":47},[33,87356,52605],{"class":119},[33,87358,52560],{"class":47},[33,87360,87361,87363,87365,87367,87369,87371,87373,87375,87377],{"class":35,"line":89},[33,87362,53397],{"class":47},[33,87364,52597],{"class":52553},[33,87366,16171],{"class":43},[33,87368,73],{"class":47},[33,87370,52644],{"class":119},[33,87372,52624],{"class":43},[33,87374,73],{"class":47},[33,87376,52651],{"class":119},[33,87378,52560],{"class":47},[33,87380,87381,87383,87385,87387,87389],{"class":35,"line":98},[33,87382,53397],{"class":47},[33,87384,52660],{"class":52553},[33,87386,52663],{"class":47},[33,87388,52660],{"class":52553},[33,87390,52560],{"class":47},[33,87392,87393,87395,87397],{"class":35,"line":110},[33,87394,53397],{"class":47},[33,87396,1544],{"class":52553},[33,87398,52560],{"class":47},[33,87400,87401,87404],{"class":35,"line":134},[33,87402,87403],{"class":43},"    .modal",[33,87405,16823],{"class":47},[33,87407,87408,87410,87412,87414,87416],{"class":35,"line":156},[33,87409,56024],{"class":76},[33,87411,52690],{"class":47},[33,87413,5373],{"class":76},[33,87415,52745],{"class":39},[33,87417,80],{"class":47},[33,87419,87420,87423,87425,87427,87429],{"class":35,"line":163},[33,87421,87422],{"class":76},"      min-height",[33,87424,52690],{"class":47},[33,87426,457],{"class":76},[33,87428,52745],{"class":39},[33,87430,80],{"class":47},[33,87432,87433,87435,87437,87439,87441,87443,87445,87447,87449,87451,87453,87455,87457,87459,87461,87464],{"class":35,"line":169},[33,87434,80003],{"class":76},[33,87436,52690],{"class":47},[33,87438,766],{"class":76},[33,87440,5492],{"class":76},[33,87442,3461],{"class":76},[33,87444,52745],{"class":39},[33,87446,80020],{"class":76},[33,87448,345],{"class":47},[33,87450,766],{"class":76},[33,87452,13686],{"class":47},[33,87454,766],{"class":76},[33,87456,13686],{"class":47},[33,87458,766],{"class":76},[33,87460,13686],{"class":47},[33,87462,87463],{"class":76},"0.1",[33,87465,4130],{"class":47},[33,87467,87468,87470,87472,87474,87476],{"class":35,"line":175},[33,87469,56387],{"class":76},[33,87471,52690],{"class":47},[33,87473,717],{"class":76},[33,87475,52745],{"class":39},[33,87477,80],{"class":47},[33,87479,87480,87482,87484,87487],{"class":35,"line":181},[33,87481,56012],{"class":76},[33,87483,52690],{"class":47},[33,87485,87486],{"class":76},"fixed",[33,87488,80],{"class":47},[33,87490,87491,87494,87496,87499],{"class":35,"line":196},[33,87492,87493],{"class":76},"      z-index",[33,87495,52690],{"class":47},[33,87497,87498],{"class":76},"999",[33,87500,80],{"class":47},[33,87502,87503,87505,87507,87509,87511],{"class":35,"line":213},[33,87504,56091],{"class":76},[33,87506,52690],{"class":47},[33,87508,2256],{"class":76},[33,87510,1939],{"class":39},[33,87512,80],{"class":47},[33,87514,87515,87517,87519,87521,87523],{"class":35,"line":228},[33,87516,56200],{"class":76},[33,87518,52690],{"class":47},[33,87520,2256],{"class":76},[33,87522,1939],{"class":39},[33,87524,80],{"class":47},[33,87526,87527,87529,87531,87533,87535,87538,87540,87542,87544,87546,87548,87550],{"class":35,"line":1345},[33,87528,80044],{"class":76},[33,87530,52690],{"class":47},[33,87532,80049],{"class":76},[33,87534,345],{"class":47},[33,87536,87537],{"class":76},"-50",[33,87539,1939],{"class":39},[33,87541,13686],{"class":47},[33,87543,87537],{"class":76},[33,87545,1939],{"class":39},[33,87547,13686],{"class":47},[33,87549,766],{"class":76},[33,87551,4130],{"class":47},[33,87553,87554,87556,87558,87560],{"class":35,"line":1350},[33,87555,56137],{"class":76},[33,87557,52690],{"class":47},[33,87559,62095],{"class":76},[33,87561,80],{"class":47},[33,87563,87564],{"class":35,"line":1359},[33,87565,916],{"class":47},[33,87567,87568],{"class":35,"line":1364},[33,87569,160],{"emptyLinePlaceholder":159},[33,87571,87572,87574,87577],{"class":35,"line":1370},[33,87573,87403],{"class":43},[33,87575,87576],{"class":43}," .header",[33,87578,16823],{"class":47},[33,87580,87581,87583,87585,87587,87589],{"class":35,"line":1425},[33,87582,58612],{"class":76},[33,87584,52690],{"class":47},[33,87586,2007],{"class":76},[33,87588,52745],{"class":39},[33,87590,80],{"class":47},[33,87592,87593,87595,87597,87599,87601,87603],{"class":35,"line":1438},[33,87594,55948],{"class":76},[33,87596,52690],{"class":47},[33,87598,766],{"class":76},[33,87600,3461],{"class":76},[33,87602,52745],{"class":39},[33,87604,80],{"class":47},[33,87606,87607,87609,87611,87613],{"class":35,"line":1451},[33,87608,56012],{"class":76},[33,87610,52690],{"class":47},[33,87612,56017],{"class":76},[33,87614,80],{"class":47},[33,87616,87617,87619,87621,87623,87625],{"class":35,"line":1457},[33,87618,56175],{"class":76},[33,87620,52690],{"class":47},[33,87622,1045],{"class":76},[33,87624,52745],{"class":39},[33,87626,80],{"class":47},[33,87628,87629],{"class":35,"line":1466},[33,87630,916],{"class":47},[33,87632,87633],{"class":35,"line":1471},[33,87634,160],{"emptyLinePlaceholder":159},[33,87636,87637,87639,87641,87643],{"class":35,"line":1477},[33,87638,87403],{"class":43},[33,87640,87576],{"class":43},[33,87642,865],{"class":52553},[33,87644,16823],{"class":47},[33,87646,87647,87650,87652,87654],{"class":35,"line":1504},[33,87648,87649],{"class":76},"      font-style",[33,87651,52690],{"class":47},[33,87653,65094],{"class":76},[33,87655,80],{"class":47},[33,87657,87658,87660,87662,87664],{"class":35,"line":1509},[33,87659,58669],{"class":76},[33,87661,52690],{"class":47},[33,87663,63323],{"class":76},[33,87665,80],{"class":47},[33,87667,87668,87670,87672,87674],{"class":35,"line":1525},[33,87669,56012],{"class":76},[33,87671,52690],{"class":47},[33,87673,56084],{"class":76},[33,87675,80],{"class":47},[33,87677,87678,87681,87683,87685,87687],{"class":35,"line":1535},[33,87679,87680],{"class":76},"      right",[33,87682,52690],{"class":47},[33,87684,2175],{"class":76},[33,87686,52745],{"class":39},[33,87688,80],{"class":47},[33,87690,87691,87693,87695,87698,87700],{"class":35,"line":1540},[33,87692,56200],{"class":76},[33,87694,52690],{"class":47},[33,87696,87697],{"class":76},"-2",[33,87699,52745],{"class":39},[33,87701,80],{"class":47},[33,87703,87704,87706,87708,87710],{"class":35,"line":4027},[33,87705,63278],{"class":76},[33,87707,52690],{"class":47},[33,87709,63283],{"class":76},[33,87711,80],{"class":47},[33,87713,87714],{"class":35,"line":4032},[33,87715,916],{"class":47},[33,87717,87718],{"class":35,"line":9199},[33,87719,160],{"emptyLinePlaceholder":159},[33,87721,87722,87724,87727],{"class":35,"line":9223},[33,87723,87403],{"class":43},[33,87725,87726],{"class":43}," .body",[33,87728,16823],{"class":47},[33,87730,87731,87733,87735,87737],{"class":35,"line":9228},[33,87732,58539],{"class":76},[33,87734,52690],{"class":47},[33,87736,52845],{"class":76},[33,87738,80],{"class":47},[33,87740,87741,87743,87745,87747,87749],{"class":35,"line":9234},[33,87742,55948],{"class":76},[33,87744,52690],{"class":47},[33,87746,77],{"class":76},[33,87748,52745],{"class":39},[33,87750,80],{"class":47},[33,87752,87753],{"class":35,"line":9261},[33,87754,916],{"class":47},[33,87756,87757],{"class":35,"line":9266},[33,87758,160],{"emptyLinePlaceholder":159},[33,87760,87761,87763,87766],{"class":35,"line":9272},[33,87762,87403],{"class":43},[33,87764,87765],{"class":43}," .footer",[33,87767,16823],{"class":47},[33,87769,87770,87772,87774,87776],{"class":35,"line":9284},[33,87771,56262],{"class":76},[33,87773,52690],{"class":47},[33,87775,52730],{"class":76},[33,87777,80],{"class":47},[33,87779,87780,87782,87784,87786],{"class":35,"line":9296},[33,87781,56273],{"class":76},[33,87783,52690],{"class":47},[33,87785,52833],{"class":76},[33,87787,80],{"class":47},[33,87789,87790,87792,87794,87796,87798],{"class":35,"line":9308},[33,87791,55948],{"class":76},[33,87793,52690],{"class":47},[33,87795,77],{"class":76},[33,87797,52745],{"class":39},[33,87799,80],{"class":47},[33,87801,87802],{"class":35,"line":10967},[33,87803,916],{"class":47},[33,87805,87806],{"class":35,"line":10992},[33,87807,160],{"emptyLinePlaceholder":159},[33,87809,87810,87812,87814,87816],{"class":35,"line":11015},[33,87811,87403],{"class":43},[33,87813,87765],{"class":43},[33,87815,70],{"class":52553},[33,87817,16823],{"class":47},[33,87819,87820,87822,87824,87826,87828,87830,87832],{"class":35,"line":11039},[33,87821,55948],{"class":76},[33,87823,52690],{"class":47},[33,87825,712],{"class":76},[33,87827,52745],{"class":39},[33,87829,3506],{"class":76},[33,87831,52745],{"class":39},[33,87833,80],{"class":47},[33,87835,87836,87838,87840,87843],{"class":35,"line":11044},[33,87837,62974],{"class":76},[33,87839,52690],{"class":47},[33,87841,87842],{"class":76},"#ccc",[33,87844,80],{"class":47},[33,87846,87847,87849,87851,87853],{"class":35,"line":11049},[33,87848,65223],{"class":76},[33,87850,52690],{"class":47},[33,87852,55990],{"class":76},[33,87854,80],{"class":47},[33,87856,87857,87859,87861,87863],{"class":35,"line":11054},[33,87858,58669],{"class":76},[33,87860,52690],{"class":47},[33,87862,62095],{"class":76},[33,87864,80],{"class":47},[33,87866,87867,87869,87871,87873,87875],{"class":35,"line":11063},[33,87868,56387],{"class":76},[33,87870,52690],{"class":47},[33,87872,707],{"class":76},[33,87874,52745],{"class":39},[33,87876,80],{"class":47},[33,87878,87879,87881,87883,87885,87887],{"class":35,"line":11068},[33,87880,63003],{"class":76},[33,87882,52690],{"class":47},[33,87884,77],{"class":76},[33,87886,52745],{"class":39},[33,87888,80],{"class":47},[33,87890,87891,87893,87895,87897,87899],{"class":35,"line":11074},[33,87892,56175],{"class":76},[33,87894,52690],{"class":47},[33,87896,2149],{"class":76},[33,87898,52745],{"class":39},[33,87900,80],{"class":47},[33,87902,87903],{"class":35,"line":11095},[33,87904,916],{"class":47},[33,87906,87907],{"class":35,"line":11101},[33,87908,160],{"emptyLinePlaceholder":159},[33,87910,87911,87913,87915,87917,87920],{"class":35,"line":11115},[33,87912,87403],{"class":43},[33,87914,87765],{"class":43},[33,87916,70],{"class":52553},[33,87918,87919],{"class":43},".submit",[33,87921,16823],{"class":47},[33,87923,87924,87926,87928,87931],{"class":35,"line":11121},[33,87925,56137],{"class":76},[33,87927,52690],{"class":47},[33,87929,87930],{"class":76},"#369",[33,87932,80],{"class":47},[33,87934,87935],{"class":35,"line":11148},[33,87936,916],{"class":47},[33,87938,87939,87941,87943],{"class":35,"line":11157},[33,87940,53670],{"class":47},[33,87942,1544],{"class":52553},[33,87944,52560],{"class":47},[33,87946,87947,87949,87951],{"class":35,"line":11163},[33,87948,53038],{"class":47},[33,87950,52587],{"class":52553},[33,87952,52560],{"class":47},[33,87954,87955],{"class":35,"line":11171},[33,87956,160],{"emptyLinePlaceholder":159},[33,87958,87959,87961,87963],{"class":35,"line":11176},[33,87960,875],{"class":47},[33,87962,53053],{"class":52553},[33,87964,52560],{"class":47},[33,87966,87967,87969,87971,87973,87975,87978,87981,87983],{"class":35,"line":17855},[33,87968,53397],{"class":47},[33,87970,55140],{"class":52553},[33,87972,16210],{"class":43},[33,87974,73],{"class":47},[33,87976,87977],{"class":119},"\"delete\"",[33,87979,87980],{"class":47},">删除\u003C\u002F",[33,87982,55140],{"class":52553},[33,87984,52560],{"class":47},[33,87986,87987,87989,87991,87993,87995,87998,88001,88003],{"class":35,"line":17861},[33,87988,53397],{"class":47},[33,87990,55140],{"class":52553},[33,87992,16210],{"class":43},[33,87994,73],{"class":47},[33,87996,87997],{"class":119},"\"login\"",[33,87999,88000],{"class":47},">登录\u003C\u002F",[33,88002,55140],{"class":52553},[33,88004,52560],{"class":47},[33,88006,88007,88009,88011],{"class":35,"line":17884},[33,88008,53397],{"class":47},[33,88010,53066],{"class":52553},[33,88012,52560],{"class":47},[33,88014,88015],{"class":35,"line":17890},[33,88016,88017],{"class":60},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[33,88019,88020,88022,88025,88027,88029,88031,88033,88035,88038,88040,88042],{"class":35,"line":17913},[33,88021,71337],{"class":39},[33,88023,88024],{"class":43}," Modal",[33,88026,345],{"class":47},[33,88028,52660],{"class":955},[33,88030,14815],{"class":39},[33,88032,71183],{"class":119},[33,88034,13686],{"class":47},[33,88036,88037],{"class":955},"message",[33,88039,14815],{"class":39},[33,88041,71183],{"class":119},[33,88043,13693],{"class":47},[33,88045,88046],{"class":35,"line":17927},[33,88047,88048],{"class":60},"      \u002F\u002F 创建Model 模态框盒子\n",[33,88050,88051],{"class":35,"line":17947},[33,88052,88053],{"class":60},"      \u002F\u002F 1.1 创建div标签\n",[33,88055,88056,88058,88061,88063,88065,88067,88069,88071],{"class":35,"line":17953},[33,88057,71304],{"class":76},[33,88059,88060],{"class":47},".modalBox ",[33,88062,73],{"class":39},[33,88064,55649],{"class":47},[33,88066,71404],{"class":43},[33,88068,345],{"class":47},[33,88070,83184],{"class":119},[33,88072,884],{"class":47},[33,88074,88075],{"class":35,"line":17964},[33,88076,88077],{"class":60},"      \u002F\u002F 1.2 给div 添加类名为model\n",[33,88079,88080,88082,88085,88087],{"class":35,"line":17987},[33,88081,71304],{"class":76},[33,88083,88084],{"class":47},".modalBox.className ",[33,88086,73],{"class":39},[33,88088,88089],{"class":119}," 'modal'\n",[33,88091,88092],{"class":35,"line":18009},[33,88093,88094],{"class":60},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[33,88096,88097,88099,88102,88104],{"class":35,"line":18014},[33,88098,71304],{"class":76},[33,88100,88101],{"class":47},".modalBox.innerHTML ",[33,88103,73],{"class":39},[33,88105,71421],{"class":119},[33,88107,88108,88111,88113],{"class":35,"line":18020},[33,88109,88110],{"class":119},"        \u003Cdiv class=\"header\">${",[33,88112,52660],{"class":47},[33,88114,88115],{"class":119},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[33,88117,88118,88121,88123],{"class":35,"line":18034},[33,88119,88120],{"class":119},"        \u003Cdiv class=\"body\">${",[33,88122,88037],{"class":47},[33,88124,88125],{"class":119},"}\u003C\u002Fdiv>\n",[33,88127,88128],{"class":35,"line":18047},[33,88129,88130],{"class":119},"      `\n",[33,88132,88133],{"class":35,"line":18052},[33,88134,88135],{"class":60},"      \u002F\u002F console.log(this.modalBox)\n",[33,88137,88138],{"class":35,"line":18066},[33,88139,916],{"class":47},[33,88141,88142],{"class":35,"line":18071},[33,88143,88144],{"class":60},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[33,88146,88147],{"class":35,"line":18077},[33,88148,88149],{"class":60},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[33,88151,88152],{"class":35,"line":18082},[33,88153,88154],{"class":60},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[33,88156,88157,88160,88162,88164,88166,88169,88171,88173],{"class":35,"line":18096},[33,88158,88159],{"class":76},"    Modal",[33,88161,2158],{"class":47},[33,88163,86832],{"class":76},[33,88165,2158],{"class":47},[33,88167,88168],{"class":43},"open",[33,88170,14815],{"class":39},[33,88172,60171],{"class":39},[33,88174,55705],{"class":47},[33,88176,88177],{"class":35,"line":18101},[33,88178,88179],{"class":60},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[33,88181,88182,88184,88187,88189,88191,88193,88195,88198],{"class":35,"line":18106},[33,88183,59481],{"class":39},[33,88185,88186],{"class":76}," box",[33,88188,14815],{"class":39},[33,88190,55649],{"class":47},[33,88192,55652],{"class":43},[33,88194,345],{"class":47},[33,88196,88197],{"class":119},"'.modal'",[33,88199,884],{"class":47},[33,88201,88202],{"class":35,"line":18120},[33,88203,88204],{"class":60},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[33,88206,88207,88210,88212,88215,88217],{"class":35,"line":18132},[33,88208,88209],{"class":47},"      box ",[33,88211,3156],{"class":39},[33,88213,88214],{"class":47}," box.",[33,88216,58259],{"class":43},[33,88218,48],{"class":47},[33,88220,88221],{"class":35,"line":18137},[33,88222,88223],{"class":60},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[33,88225,88226],{"class":35,"line":18150},[33,88227,88228],{"class":60},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[33,88230,88231],{"class":35,"line":18155},[33,88232,88233],{"class":60},"      \u002F\u002F append可以增加对象\n",[33,88235,88236,88239,88242,88244,88247],{"class":35,"line":18160},[33,88237,88238],{"class":47},"      document.body.",[33,88240,88241],{"class":43},"append",[33,88243,345],{"class":47},[33,88245,88246],{"class":76},"this",[33,88248,88249],{"class":47},".modalBox)\n",[33,88251,88252],{"class":35,"line":18165},[33,88253,160],{"emptyLinePlaceholder":159},[33,88255,88256],{"class":35,"line":18178},[33,88257,88258],{"class":60},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[33,88260,88261,88263,88266,88268,88270,88273,88275,88277,88279,88281,88284,88286],{"class":35,"line":18183},[33,88262,71304],{"class":76},[33,88264,88265],{"class":47},".modalBox.",[33,88267,55652],{"class":43},[33,88269,345],{"class":47},[33,88271,88272],{"class":119},"'i'",[33,88274,32079],{"class":47},[33,88276,59066],{"class":43},[33,88278,345],{"class":47},[33,88280,59071],{"class":119},[33,88282,88283],{"class":47},", () ",[33,88285,85975],{"class":39},[33,88287,16823],{"class":47},[33,88289,88290],{"class":35,"line":33886},[33,88291,88292],{"class":60},"        \u002F\u002F 这个地方需要用到箭头函数\n",[33,88294,88295],{"class":35,"line":33892},[33,88296,88297],{"class":60},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[33,88299,88300],{"class":35,"line":33898},[33,88301,88302],{"class":60},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[33,88304,88305,88307,88309,88312],{"class":35,"line":33904},[33,88306,65979],{"class":76},[33,88308,2158],{"class":47},[33,88310,88311],{"class":43},"close",[33,88313,48],{"class":47},[33,88315,88316],{"class":35,"line":33910},[33,88317,66068],{"class":47},[33,88319,88320],{"class":35,"line":33921},[33,88321,916],{"class":47},[33,88323,88324],{"class":35,"line":33927},[33,88325,160],{"emptyLinePlaceholder":159},[33,88327,88328],{"class":35,"line":33947},[33,88329,88330],{"class":60},"    \u002F\u002F 测试一下 点击 删除按钮\n",[33,88332,88333,88335,88337,88339,88342,88344,88346,88348,88350,88352,88354],{"class":35,"line":33953},[33,88334,53660],{"class":47},[33,88336,55652],{"class":43},[33,88338,345],{"class":47},[33,88340,88341],{"class":119},"'#delete'",[33,88343,32079],{"class":47},[33,88345,59066],{"class":43},[33,88347,345],{"class":47},[33,88349,59071],{"class":119},[33,88351,88283],{"class":47},[33,88353,85975],{"class":39},[33,88355,16823],{"class":47},[33,88357,88358],{"class":35,"line":33964},[33,88359,88360],{"class":60},"      \u002F\u002F 先调用Model构造函数\n",[33,88362,88363,88365,88368,88370,88372,88374,88376,88379,88381,88384],{"class":35,"line":33970},[33,88364,59481],{"class":39},[33,88366,88367],{"class":76}," del",[33,88369,14815],{"class":39},[33,88371,12829],{"class":39},[33,88373,88024],{"class":43},[33,88375,345],{"class":47},[33,88377,88378],{"class":119},"'温馨的提示'",[33,88380,13686],{"class":47},[33,88382,88383],{"class":119},"'您没有删除权限操作'",[33,88385,884],{"class":47},[33,88387,88388],{"class":35,"line":33976},[33,88389,88390],{"class":60},"      \u002F\u002F 实例对象调用open方法\n",[33,88392,88393,88396,88398],{"class":35,"line":33982},[33,88394,88395],{"class":47},"      del.",[33,88397,88168],{"class":43},[33,88399,48],{"class":47},[33,88401,88402],{"class":35,"line":33988},[33,88403,34714],{"class":47},[33,88405,88406],{"class":35,"line":33994},[33,88407,88408],{"class":60},"    \u002F\u002F 测试一下 点击 登录按钮\n",[33,88410,88411,88413,88415,88417,88420,88422,88424,88426,88428,88430,88432],{"class":35,"line":34000},[33,88412,53660],{"class":47},[33,88414,55652],{"class":43},[33,88416,345],{"class":47},[33,88418,88419],{"class":119},"'#login'",[33,88421,32079],{"class":47},[33,88423,59066],{"class":43},[33,88425,345],{"class":47},[33,88427,59071],{"class":119},[33,88429,88283],{"class":47},[33,88431,85975],{"class":39},[33,88433,16823],{"class":47},[33,88435,88436],{"class":35,"line":34006},[33,88437,88360],{"class":60},[33,88439,88440,88442,88445,88447,88449,88451,88453,88456,88458,88461],{"class":35,"line":34026},[33,88441,59481],{"class":39},[33,88443,88444],{"class":76}," log",[33,88446,14815],{"class":39},[33,88448,12829],{"class":39},[33,88450,88024],{"class":43},[33,88452,345],{"class":47},[33,88454,88455],{"class":119},"'友情提示'",[33,88457,13686],{"class":47},[33,88459,88460],{"class":119},"'您还没有登录呢'",[33,88462,884],{"class":47},[33,88464,88465],{"class":35,"line":34032},[33,88466,88390],{"class":60},[33,88468,88469,88472,88474],{"class":35,"line":34048},[33,88470,88471],{"class":47},"      log.",[33,88473,88168],{"class":43},[33,88475,48],{"class":47},[33,88477,88478],{"class":35,"line":34054},[33,88479,34714],{"class":47},[33,88481,88482],{"class":35,"line":34068},[33,88483,88484],{"class":60},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[33,88486,88487,88489,88491,88493,88495,88497,88499,88501],{"class":35,"line":34074},[33,88488,88159],{"class":76},[33,88490,2158],{"class":47},[33,88492,86832],{"class":76},[33,88494,2158],{"class":47},[33,88496,88311],{"class":43},[33,88498,14815],{"class":39},[33,88500,60171],{"class":39},[33,88502,55705],{"class":47},[33,88504,88505,88507,88509,88511],{"class":35,"line":34089},[33,88506,71304],{"class":76},[33,88508,88265],{"class":47},[33,88510,58259],{"class":43},[33,88512,48],{"class":47},[33,88514,88515],{"class":35,"line":34095},[33,88516,916],{"class":47},[33,88518,88519,88521,88523],{"class":35,"line":34104},[33,88520,53670],{"class":47},[33,88522,53066],{"class":52553},[33,88524,52560],{"class":47},[33,88526,88527,88529,88531],{"class":35,"line":34110},[33,88528,53038],{"class":47},[33,88530,53053],{"class":52553},[33,88532,52560],{"class":47},[33,88534,88535],{"class":35,"line":34119},[33,88536,160],{"emptyLinePlaceholder":159},[33,88538,88539,88541,88543],{"class":35,"line":34125},[33,88540,53038],{"class":47},[33,88542,51888],{"class":52553},[33,88544,52560],{"class":47},[14,88546,88547],{},[2918,88548],{"alt":28,"src":88549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[18,88551,88553],{"id":88552},"_414-深浅拷贝","4.14 深浅拷贝",[1599,88555,88557],{"id":88556},"_4141-浅拷贝","4.14.1 浅拷贝",[14,88559,88560],{},[2918,88561],{"alt":28,"src":88562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,88564,88565],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,88567,88568],{},[2918,88569],{"alt":28,"src":88570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,88572,88573],{},[2918,88574],{"alt":28,"src":88575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,88577,88578],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,88580,88581],{},[2918,88582],{"alt":28,"src":88583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,88585,12583],{},[14,88587,88588],{},[2918,88589],{"alt":28,"src":88590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[1599,88592,88594],{"id":88593},"_4142-深拷贝","4.14.2 深拷贝",[14,88596,88597],{},"深拷贝：拷贝的是对象，不是地址",[14,88599,88600],{},"常用的三种方法：",[574,88602,88603,88606,88609],{},[564,88604,88605],{},"通过递归实现深拷贝",[564,88607,88608],{},"lodash\u002FcloneDeep",[564,88610,88611],{},"通过JSON.stringify()实现",[23249,88613,88615],{"id":88614},"_41421-递归函数","4.14.2.1 递归函数",[14,88617,88618],{},[2918,88619],{"alt":28,"src":88620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[574,88622,88623],{},[564,88624,88625],{},"死递归占溢出：",[23,88627,88629],{"className":54320,"code":88628,"language":54322,"meta":28,"style":28},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[30,88630,88631,88639,88647,88651,88656,88660,88665,88673],{"__ignoreMap":28},[33,88632,88633,88635,88637],{"class":35,"line":36},[33,88634,875],{"class":47},[33,88636,53053],{"class":52553},[33,88638,52560],{"class":47},[33,88640,88641,88643,88645],{"class":35,"line":51},[33,88642,53397],{"class":47},[33,88644,53066],{"class":52553},[33,88646,52560],{"class":47},[33,88648,88649],{"class":35,"line":57},[33,88650,78396],{"class":47},[33,88652,88653],{"class":35,"line":64},[33,88654,88655],{"class":47},"      fn()\n",[33,88657,88658],{"class":35,"line":83},[33,88659,916],{"class":47},[33,88661,88662],{"class":35,"line":89},[33,88663,88664],{"class":47},"    fn()\n",[33,88666,88667,88669,88671],{"class":35,"line":98},[33,88668,53670],{"class":47},[33,88670,53066],{"class":52553},[33,88672,52560],{"class":47},[33,88674,88675,88677,88679],{"class":35,"line":110},[33,88676,53038],{"class":47},[33,88678,53053],{"class":52553},[33,88680,52560],{"class":47},[574,88682,88683],{"start":51},[564,88684,88685],{},"递归函数要加判断条件：",[14,88687,88688],{},[2918,88689],{"alt":28,"src":88690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[574,88692,88693],{"start":57},[564,88694,88695],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[23,88697,88699],{"className":51886,"code":88698,"language":51888,"meta":28,"style":28},"\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",[30,88700,88701,88711,88725,88729,88737,88751,88771,88783,88791,88795,88803,88815,88823,88831,88856,88868,88872,88879,88887,88895,88899],{"__ignoreMap":28},[33,88702,88703,88705,88707,88709],{"class":35,"line":36},[33,88704,52550],{"class":47},[33,88706,52554],{"class":52553},[33,88708,52557],{"class":43},[33,88710,52560],{"class":47},[33,88712,88713,88715,88717,88719,88721,88723],{"class":35,"line":51},[33,88714,875],{"class":47},[33,88716,51888],{"class":52553},[33,88718,52569],{"class":43},[33,88720,73],{"class":47},[33,88722,52574],{"class":119},[33,88724,52560],{"class":47},[33,88726,88727],{"class":35,"line":57},[33,88728,160],{"emptyLinePlaceholder":159},[33,88730,88731,88733,88735],{"class":35,"line":64},[33,88732,875],{"class":47},[33,88734,52587],{"class":52553},[33,88736,52560],{"class":47},[33,88738,88739,88741,88743,88745,88747,88749],{"class":35,"line":83},[33,88740,53397],{"class":47},[33,88742,52597],{"class":52553},[33,88744,52600],{"class":43},[33,88746,73],{"class":47},[33,88748,52605],{"class":119},[33,88750,52560],{"class":47},[33,88752,88753,88755,88757,88759,88761,88763,88765,88767,88769],{"class":35,"line":89},[33,88754,53397],{"class":47},[33,88756,52597],{"class":52553},[33,88758,16171],{"class":43},[33,88760,73],{"class":47},[33,88762,52644],{"class":119},[33,88764,52624],{"class":43},[33,88766,73],{"class":47},[33,88768,52651],{"class":119},[33,88770,52560],{"class":47},[33,88772,88773,88775,88777,88779,88781],{"class":35,"line":98},[33,88774,53397],{"class":47},[33,88776,52660],{"class":52553},[33,88778,52663],{"class":47},[33,88780,52660],{"class":52553},[33,88782,52560],{"class":47},[33,88784,88785,88787,88789],{"class":35,"line":110},[33,88786,53038],{"class":47},[33,88788,52587],{"class":52553},[33,88790,52560],{"class":47},[33,88792,88793],{"class":35,"line":134},[33,88794,160],{"emptyLinePlaceholder":159},[33,88796,88797,88799,88801],{"class":35,"line":156},[33,88798,875],{"class":47},[33,88800,53053],{"class":52553},[33,88802,52560],{"class":47},[33,88804,88805,88807,88809,88811,88813],{"class":35,"line":163},[33,88806,53397],{"class":47},[33,88808,52864],{"class":52553},[33,88810,56567],{"class":47},[33,88812,52864],{"class":52553},[33,88814,52560],{"class":47},[33,88816,88817,88819,88821],{"class":35,"line":169},[33,88818,53397],{"class":47},[33,88820,53066],{"class":52553},[33,88822,52560],{"class":47},[33,88824,88825,88827,88829],{"class":35,"line":175},[33,88826,71337],{"class":39},[33,88828,75026],{"class":43},[33,88830,12104],{"class":47},[33,88832,88833,88835,88837,88839,88841,88843,88845,88847,88849,88851,88854],{"class":35,"line":181},[33,88834,57024],{"class":47},[33,88836,55652],{"class":43},[33,88838,345],{"class":47},[33,88840,83184],{"class":119},[33,88842,75502],{"class":47},[33,88844,73],{"class":39},[33,88846,12829],{"class":39},[33,88848,75042],{"class":43},[33,88850,18512],{"class":47},[33,88852,88853],{"class":43},"toLocaleString",[33,88855,48],{"class":47},[33,88857,88858,88861,88864,88866],{"class":35,"line":196},[33,88859,88860],{"class":43},"      setTimeout",[33,88862,88863],{"class":47},"(getTime, ",[33,88865,191],{"class":76},[33,88867,884],{"class":47},[33,88869,88870],{"class":35,"line":213},[33,88871,916],{"class":47},[33,88873,88874,88877],{"class":35,"line":228},[33,88875,88876],{"class":43},"    getTime",[33,88878,48],{"class":47},[33,88880,88881,88883,88885],{"class":35,"line":1345},[33,88882,53670],{"class":47},[33,88884,53066],{"class":52553},[33,88886,52560],{"class":47},[33,88888,88889,88891,88893],{"class":35,"line":1350},[33,88890,53038],{"class":47},[33,88892,53053],{"class":52553},[33,88894,52560],{"class":47},[33,88896,88897],{"class":35,"line":1359},[33,88898,160],{"emptyLinePlaceholder":159},[33,88900,88901,88903,88905],{"class":35,"line":1364},[33,88902,53038],{"class":47},[33,88904,51888],{"class":52553},[33,88906,52560],{"class":47},[14,88908,88909],{},[2918,88910],{"alt":28,"src":88911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[574,88913,88914],{"start":64},[564,88915,88605],{},[14,88917,88918],{},[2918,88919],{"alt":28,"src":88920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88922,88923],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88925,40442],{},[14,88927,88928],{},"这个是简易版的递归函数深拷贝",[14,88930,88931],{},"一定要注意先数组再对象，因为万物皆可对象",[23,88933,88935],{"className":51886,"code":88934,"language":51888,"meta":28,"style":28},"\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",[30,88936,88937,88947,88961,88965,88973,88987,89007,89019,89027,89031,89039,89047,89057,89066,89074,89090,89094,89102,89106,89110,89122,89127,89146,89162,89167,89172,89177,89192,89197,89202,89211,89219,89236,89244,89250,89258,89263,89268,89277,89281,89285,89289,89300,89309,89319,89333,89343,89351,89359,89367,89371],{"__ignoreMap":28},[33,88938,88939,88941,88943,88945],{"class":35,"line":36},[33,88940,52550],{"class":47},[33,88942,52554],{"class":52553},[33,88944,52557],{"class":43},[33,88946,52560],{"class":47},[33,88948,88949,88951,88953,88955,88957,88959],{"class":35,"line":51},[33,88950,875],{"class":47},[33,88952,51888],{"class":52553},[33,88954,52569],{"class":43},[33,88956,73],{"class":47},[33,88958,52574],{"class":119},[33,88960,52560],{"class":47},[33,88962,88963],{"class":35,"line":57},[33,88964,160],{"emptyLinePlaceholder":159},[33,88966,88967,88969,88971],{"class":35,"line":64},[33,88968,875],{"class":47},[33,88970,52587],{"class":52553},[33,88972,52560],{"class":47},[33,88974,88975,88977,88979,88981,88983,88985],{"class":35,"line":83},[33,88976,53397],{"class":47},[33,88978,52597],{"class":52553},[33,88980,52600],{"class":43},[33,88982,73],{"class":47},[33,88984,52605],{"class":119},[33,88986,52560],{"class":47},[33,88988,88989,88991,88993,88995,88997,88999,89001,89003,89005],{"class":35,"line":89},[33,88990,53397],{"class":47},[33,88992,52597],{"class":52553},[33,88994,16171],{"class":43},[33,88996,73],{"class":47},[33,88998,52644],{"class":119},[33,89000,52624],{"class":43},[33,89002,73],{"class":47},[33,89004,52651],{"class":119},[33,89006,52560],{"class":47},[33,89008,89009,89011,89013,89015,89017],{"class":35,"line":98},[33,89010,53397],{"class":47},[33,89012,52660],{"class":52553},[33,89014,52663],{"class":47},[33,89016,52660],{"class":52553},[33,89018,52560],{"class":47},[33,89020,89021,89023,89025],{"class":35,"line":110},[33,89022,53038],{"class":47},[33,89024,52587],{"class":52553},[33,89026,52560],{"class":47},[33,89028,89029],{"class":35,"line":134},[33,89030,160],{"emptyLinePlaceholder":159},[33,89032,89033,89035,89037],{"class":35,"line":156},[33,89034,875],{"class":47},[33,89036,53053],{"class":52553},[33,89038,52560],{"class":47},[33,89040,89041,89043,89045],{"class":35,"line":163},[33,89042,53397],{"class":47},[33,89044,53066],{"class":52553},[33,89046,52560],{"class":47},[33,89048,89049,89051,89053,89055],{"class":35,"line":169},[33,89050,12472],{"class":39},[33,89052,71224],{"class":76},[33,89054,14815],{"class":39},[33,89056,16823],{"class":47},[33,89058,89059,89061,89064],{"class":35,"line":175},[33,89060,72869],{"class":47},[33,89062,89063],{"class":119},"'pink'",[33,89065,32719],{"class":47},[33,89067,89068,89070,89072],{"class":35,"line":181},[33,89069,72879],{"class":47},[33,89071,2250],{"class":76},[33,89073,32719],{"class":47},[33,89075,89076,89079,89082,89084,89087],{"class":35,"line":196},[33,89077,89078],{"class":47},"      hobby: [",[33,89080,89081],{"class":119},"'乒乓球'",[33,89083,13686],{"class":47},[33,89085,89086],{"class":119},"'足球'",[33,89088,89089],{"class":47},"],\n",[33,89091,89092],{"class":35,"line":213},[33,89093,79125],{"class":47},[33,89095,89096,89099],{"class":35,"line":228},[33,89097,89098],{"class":47},"        baby: ",[33,89100,89101],{"class":119},"'小pink'\n",[33,89103,89104],{"class":35,"line":1345},[33,89105,53651],{"class":47},[33,89107,89108],{"class":35,"line":1350},[33,89109,916],{"class":47},[33,89111,89112,89114,89117,89119],{"class":35,"line":1359},[33,89113,12472],{"class":39},[33,89115,89116],{"class":76}," o",[33,89118,14815],{"class":39},[33,89120,89121],{"class":47}," {}\n",[33,89123,89124],{"class":35,"line":1364},[33,89125,89126],{"class":60},"    \u002F\u002F 拷贝函数\n",[33,89128,89129,89131,89134,89136,89139,89141,89144],{"class":35,"line":1370},[33,89130,71337],{"class":39},[33,89132,89133],{"class":43}," deepCopy",[33,89135,345],{"class":47},[33,89137,89138],{"class":955},"newObj",[33,89140,13686],{"class":47},[33,89142,89143],{"class":955},"oldObj",[33,89145,13693],{"class":47},[33,89147,89148,89150,89152,89154,89157,89159],{"class":35,"line":1425},[33,89149,53537],{"class":39},[33,89151,860],{"class":47},[33,89153,53100],{"class":39},[33,89155,89156],{"class":47}," k ",[33,89158,27296],{"class":39},[33,89160,89161],{"class":47}," oldObj) {\n",[33,89163,89164],{"class":35,"line":1438},[33,89165,89166],{"class":60},"        \u002F\u002F 处理数组的问题\n",[33,89168,89169],{"class":35,"line":1451},[33,89170,89171],{"class":60},"        \u002F\u002F 判断是否属于数组\n",[33,89173,89174],{"class":35,"line":1457},[33,89175,89176],{"class":60},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[33,89178,89179,89181,89184,89187,89190],{"class":35,"line":1466},[33,89180,3915],{"class":39},[33,89182,89183],{"class":47}," (oldObj[k] ",[33,89185,89186],{"class":39},"instanceof",[33,89188,89189],{"class":43}," Array",[33,89191,13693],{"class":47},[33,89193,89194],{"class":35,"line":1471},[33,89195,89196],{"class":60},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[33,89198,89199],{"class":35,"line":1477},[33,89200,89201],{"class":60},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[33,89203,89204,89207,89209],{"class":35,"line":1504},[33,89205,89206],{"class":47},"          newObj[k] ",[33,89208,73],{"class":39},[33,89210,53091],{"class":47},[33,89212,89213,89216],{"class":35,"line":1509},[33,89214,89215],{"class":43},"          deepCopy",[33,89217,89218],{"class":47},"(newObj[k], oldObj[k])\n",[33,89220,89221,89223,89225,89227,89229,89231,89234],{"class":35,"line":1525},[33,89222,81333],{"class":47},[33,89224,3142],{"class":39},[33,89226,3145],{"class":39},[33,89228,89183],{"class":47},[33,89230,89186],{"class":39},[33,89232,89233],{"class":43}," Object",[33,89235,13693],{"class":47},[33,89237,89238,89240,89242],{"class":35,"line":1535},[33,89239,89206],{"class":47},[33,89241,73],{"class":39},[33,89243,89121],{"class":47},[33,89245,89246,89248],{"class":35,"line":1540},[33,89247,89215],{"class":43},[33,89249,89218],{"class":47},[33,89251,89252,89254,89256],{"class":35,"line":4027},[33,89253,81333],{"class":47},[33,89255,3142],{"class":39},[33,89257,16823],{"class":47},[33,89259,89260],{"class":35,"line":4032},[33,89261,89262],{"class":60},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[33,89264,89265],{"class":35,"line":9199},[33,89266,89267],{"class":60},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[33,89269,89270,89272,89274],{"class":35,"line":9223},[33,89271,89206],{"class":47},[33,89273,73],{"class":39},[33,89275,89276],{"class":47}," oldObj[k]\n",[33,89278,89279],{"class":35,"line":9228},[33,89280,1334],{"class":47},[33,89282,89283],{"class":35,"line":9234},[33,89284,53651],{"class":47},[33,89286,89287],{"class":35,"line":9261},[33,89288,916],{"class":47},[33,89290,89291,89294,89297],{"class":35,"line":9266},[33,89292,89293],{"class":43},"    deepCopy",[33,89295,89296],{"class":47},"(o, obj) ",[33,89298,89299],{"class":60},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[33,89301,89302,89304,89306],{"class":35,"line":9272},[33,89303,75006],{"class":47},[33,89305,59500],{"class":43},[33,89307,89308],{"class":47},"(o)\n",[33,89310,89311,89314,89316],{"class":35,"line":9284},[33,89312,89313],{"class":47},"    o.age ",[33,89315,73],{"class":39},[33,89317,89318],{"class":76}," 20\n",[33,89320,89321,89324,89326,89328,89330],{"class":35,"line":9296},[33,89322,89323],{"class":47},"    o.hobby[",[33,89325,766],{"class":76},[33,89327,5840],{"class":47},[33,89329,73],{"class":39},[33,89331,89332],{"class":119}," '篮球'\n",[33,89334,89335,89338,89340],{"class":35,"line":9308},[33,89336,89337],{"class":47},"    o.family ",[33,89339,73],{"class":39},[33,89341,89342],{"class":119}," '老pink'\n",[33,89344,89345,89347,89349],{"class":35,"line":10967},[33,89346,75006],{"class":47},[33,89348,59500],{"class":43},[33,89350,71289],{"class":47},[33,89352,89353,89355,89357],{"class":35,"line":10992},[33,89354,53670],{"class":47},[33,89356,53066],{"class":52553},[33,89358,52560],{"class":47},[33,89360,89361,89363,89365],{"class":35,"line":11015},[33,89362,53038],{"class":47},[33,89364,53053],{"class":52553},[33,89366,52560],{"class":47},[33,89368,89369],{"class":35,"line":11039},[33,89370,160],{"emptyLinePlaceholder":159},[33,89372,89373,89375,89377],{"class":35,"line":11044},[33,89374,53038],{"class":47},[33,89376,51888],{"class":52553},[33,89378,52560],{"class":47},[14,89380,89381],{},[2918,89382],{"alt":28,"src":89383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23249,89385,89387,89388],{"id":89386},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[480,89389,89390],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,89392,89393],{},[126,89394,89395],{"href":89395,"rel":89396},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25117],[14,89398,89399],{},"lodash里边的方法都要加上一个下划线_",[14,89401,89402],{},"_.cloneDeep()",[23,89404,89406],{"className":51886,"code":89405,"language":51888,"meta":28,"style":28},"\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",[30,89407,89408,89418,89432,89436,89444,89458,89478,89490,89498,89502,89510,89515,89534,89542,89552,89560,89568,89580,89584,89590,89594,89598,89614,89622,89631,89639,89647,89655,89659],{"__ignoreMap":28},[33,89409,89410,89412,89414,89416],{"class":35,"line":36},[33,89411,52550],{"class":47},[33,89413,52554],{"class":52553},[33,89415,52557],{"class":43},[33,89417,52560],{"class":47},[33,89419,89420,89422,89424,89426,89428,89430],{"class":35,"line":51},[33,89421,875],{"class":47},[33,89423,51888],{"class":52553},[33,89425,52569],{"class":43},[33,89427,73],{"class":47},[33,89429,52574],{"class":119},[33,89431,52560],{"class":47},[33,89433,89434],{"class":35,"line":57},[33,89435,160],{"emptyLinePlaceholder":159},[33,89437,89438,89440,89442],{"class":35,"line":64},[33,89439,875],{"class":47},[33,89441,52587],{"class":52553},[33,89443,52560],{"class":47},[33,89445,89446,89448,89450,89452,89454,89456],{"class":35,"line":83},[33,89447,53397],{"class":47},[33,89449,52597],{"class":52553},[33,89451,52600],{"class":43},[33,89453,73],{"class":47},[33,89455,52605],{"class":119},[33,89457,52560],{"class":47},[33,89459,89460,89462,89464,89466,89468,89470,89472,89474,89476],{"class":35,"line":89},[33,89461,53397],{"class":47},[33,89463,52597],{"class":52553},[33,89465,16171],{"class":43},[33,89467,73],{"class":47},[33,89469,52644],{"class":119},[33,89471,52624],{"class":43},[33,89473,73],{"class":47},[33,89475,52651],{"class":119},[33,89477,52560],{"class":47},[33,89479,89480,89482,89484,89486,89488],{"class":35,"line":98},[33,89481,53397],{"class":47},[33,89483,52660],{"class":52553},[33,89485,52663],{"class":47},[33,89487,52660],{"class":52553},[33,89489,52560],{"class":47},[33,89491,89492,89494,89496],{"class":35,"line":110},[33,89493,53038],{"class":47},[33,89495,52587],{"class":52553},[33,89497,52560],{"class":47},[33,89499,89500],{"class":35,"line":134},[33,89501,160],{"emptyLinePlaceholder":159},[33,89503,89504,89506,89508],{"class":35,"line":156},[33,89505,875],{"class":47},[33,89507,53053],{"class":52553},[33,89509,52560],{"class":47},[33,89511,89512],{"class":35,"line":163},[33,89513,89514],{"class":60},"  \u003C!-- 先引用这个库 -->\n",[33,89516,89517,89519,89521,89523,89525,89528,89530,89532],{"class":35,"line":169},[33,89518,53397],{"class":47},[33,89520,53066],{"class":52553},[33,89522,56492],{"class":43},[33,89524,73],{"class":47},[33,89526,89527],{"class":119},"\"lodash.min.js\"",[33,89529,56567],{"class":47},[33,89531,53066],{"class":52553},[33,89533,52560],{"class":47},[33,89535,89536,89538,89540],{"class":35,"line":175},[33,89537,53397],{"class":47},[33,89539,53066],{"class":52553},[33,89541,52560],{"class":47},[33,89543,89544,89546,89548,89550],{"class":35,"line":181},[33,89545,12472],{"class":39},[33,89547,71224],{"class":76},[33,89549,14815],{"class":39},[33,89551,16823],{"class":47},[33,89553,89554,89556,89558],{"class":35,"line":196},[33,89555,72869],{"class":47},[33,89557,89063],{"class":119},[33,89559,32719],{"class":47},[33,89561,89562,89564,89566],{"class":35,"line":213},[33,89563,72879],{"class":47},[33,89565,2250],{"class":76},[33,89567,32719],{"class":47},[33,89569,89570,89572,89574,89576,89578],{"class":35,"line":228},[33,89571,89078],{"class":47},[33,89573,89081],{"class":119},[33,89575,13686],{"class":47},[33,89577,89086],{"class":119},[33,89579,89089],{"class":47},[33,89581,89582],{"class":35,"line":1345},[33,89583,79125],{"class":47},[33,89585,89586,89588],{"class":35,"line":1350},[33,89587,89098],{"class":47},[33,89589,89101],{"class":119},[33,89591,89592],{"class":35,"line":1359},[33,89593,53651],{"class":47},[33,89595,89596],{"class":35,"line":1364},[33,89597,916],{"class":47},[33,89599,89600,89602,89604,89606,89609,89612],{"class":35,"line":1370},[33,89601,12472],{"class":39},[33,89603,89116],{"class":76},[33,89605,14815],{"class":39},[33,89607,89608],{"class":47}," _.",[33,89610,89611],{"class":43},"cloneDeep",[33,89613,71289],{"class":47},[33,89615,89616,89618,89620],{"class":35,"line":1425},[33,89617,75006],{"class":47},[33,89619,59500],{"class":43},[33,89621,89308],{"class":47},[33,89623,89624,89627,89629],{"class":35,"line":1438},[33,89625,89626],{"class":47},"    o.family.baby ",[33,89628,73],{"class":39},[33,89630,89342],{"class":119},[33,89632,89633,89635,89637],{"class":35,"line":1451},[33,89634,75006],{"class":47},[33,89636,59500],{"class":43},[33,89638,71289],{"class":47},[33,89640,89641,89643,89645],{"class":35,"line":1457},[33,89642,53670],{"class":47},[33,89644,53066],{"class":52553},[33,89646,52560],{"class":47},[33,89648,89649,89651,89653],{"class":35,"line":1466},[33,89650,53038],{"class":47},[33,89652,53053],{"class":52553},[33,89654,52560],{"class":47},[33,89656,89657],{"class":35,"line":1471},[33,89658,160],{"emptyLinePlaceholder":159},[33,89660,89661,89663,89665],{"class":35,"line":1477},[33,89662,53038],{"class":47},[33,89664,51888],{"class":52553},[33,89666,52560],{"class":47},[14,89668,89669],{},[2918,89670],{"alt":28,"src":89671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23249,89673,89675],{"id":89674},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[23,89677,89679],{"className":51886,"code":89678,"language":51888,"meta":28,"style":28},"\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",[30,89680,89681,89691,89705,89709,89717,89731,89751,89763,89771,89775,89783,89791,89801,89809,89817,89829,89833,89839,89843,89847,89852,89857,89862,89888,89896,89905,89913,89921,89929,89933],{"__ignoreMap":28},[33,89682,89683,89685,89687,89689],{"class":35,"line":36},[33,89684,52550],{"class":47},[33,89686,52554],{"class":52553},[33,89688,52557],{"class":43},[33,89690,52560],{"class":47},[33,89692,89693,89695,89697,89699,89701,89703],{"class":35,"line":51},[33,89694,875],{"class":47},[33,89696,51888],{"class":52553},[33,89698,52569],{"class":43},[33,89700,73],{"class":47},[33,89702,52574],{"class":119},[33,89704,52560],{"class":47},[33,89706,89707],{"class":35,"line":57},[33,89708,160],{"emptyLinePlaceholder":159},[33,89710,89711,89713,89715],{"class":35,"line":64},[33,89712,875],{"class":47},[33,89714,52587],{"class":52553},[33,89716,52560],{"class":47},[33,89718,89719,89721,89723,89725,89727,89729],{"class":35,"line":83},[33,89720,53397],{"class":47},[33,89722,52597],{"class":52553},[33,89724,52600],{"class":43},[33,89726,73],{"class":47},[33,89728,52605],{"class":119},[33,89730,52560],{"class":47},[33,89732,89733,89735,89737,89739,89741,89743,89745,89747,89749],{"class":35,"line":89},[33,89734,53397],{"class":47},[33,89736,52597],{"class":52553},[33,89738,16171],{"class":43},[33,89740,73],{"class":47},[33,89742,52644],{"class":119},[33,89744,52624],{"class":43},[33,89746,73],{"class":47},[33,89748,52651],{"class":119},[33,89750,52560],{"class":47},[33,89752,89753,89755,89757,89759,89761],{"class":35,"line":98},[33,89754,53397],{"class":47},[33,89756,52660],{"class":52553},[33,89758,52663],{"class":47},[33,89760,52660],{"class":52553},[33,89762,52560],{"class":47},[33,89764,89765,89767,89769],{"class":35,"line":110},[33,89766,53038],{"class":47},[33,89768,52587],{"class":52553},[33,89770,52560],{"class":47},[33,89772,89773],{"class":35,"line":134},[33,89774,160],{"emptyLinePlaceholder":159},[33,89776,89777,89779,89781],{"class":35,"line":156},[33,89778,875],{"class":47},[33,89780,53053],{"class":52553},[33,89782,52560],{"class":47},[33,89784,89785,89787,89789],{"class":35,"line":163},[33,89786,53397],{"class":47},[33,89788,53066],{"class":52553},[33,89790,52560],{"class":47},[33,89792,89793,89795,89797,89799],{"class":35,"line":169},[33,89794,12472],{"class":39},[33,89796,71224],{"class":76},[33,89798,14815],{"class":39},[33,89800,16823],{"class":47},[33,89802,89803,89805,89807],{"class":35,"line":175},[33,89804,72869],{"class":47},[33,89806,89063],{"class":119},[33,89808,32719],{"class":47},[33,89810,89811,89813,89815],{"class":35,"line":181},[33,89812,72879],{"class":47},[33,89814,2250],{"class":76},[33,89816,32719],{"class":47},[33,89818,89819,89821,89823,89825,89827],{"class":35,"line":196},[33,89820,89078],{"class":47},[33,89822,89081],{"class":119},[33,89824,13686],{"class":47},[33,89826,89086],{"class":119},[33,89828,89089],{"class":47},[33,89830,89831],{"class":35,"line":213},[33,89832,79125],{"class":47},[33,89834,89835,89837],{"class":35,"line":228},[33,89836,89098],{"class":47},[33,89838,89101],{"class":119},[33,89840,89841],{"class":35,"line":1345},[33,89842,53651],{"class":47},[33,89844,89845],{"class":35,"line":1350},[33,89846,916],{"class":47},[33,89848,89849],{"class":35,"line":1359},[33,89850,89851],{"class":60},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[33,89853,89854],{"class":35,"line":1364},[33,89855,89856],{"class":60},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[33,89858,89859],{"class":35,"line":1370},[33,89860,89861],{"class":60},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[33,89863,89864,89866,89868,89870,89873,89875,89878,89880,89882,89884,89886],{"class":35,"line":1425},[33,89865,12472],{"class":39},[33,89867,89116],{"class":76},[33,89869,14815],{"class":39},[33,89871,89872],{"class":76}," JSON",[33,89874,2158],{"class":47},[33,89876,89877],{"class":43},"parse",[33,89879,345],{"class":47},[33,89881,72917],{"class":76},[33,89883,2158],{"class":47},[33,89885,72922],{"class":43},[33,89887,72925],{"class":47},[33,89889,89890,89892,89894],{"class":35,"line":1438},[33,89891,75006],{"class":47},[33,89893,59500],{"class":43},[33,89895,89308],{"class":47},[33,89897,89898,89900,89902],{"class":35,"line":1451},[33,89899,89626],{"class":47},[33,89901,73],{"class":39},[33,89903,89904],{"class":119}," '123'\n",[33,89906,89907,89909,89911],{"class":35,"line":1457},[33,89908,75006],{"class":47},[33,89910,59500],{"class":43},[33,89912,71289],{"class":47},[33,89914,89915,89917,89919],{"class":35,"line":1466},[33,89916,53670],{"class":47},[33,89918,53066],{"class":52553},[33,89920,52560],{"class":47},[33,89922,89923,89925,89927],{"class":35,"line":1471},[33,89924,53038],{"class":47},[33,89926,53053],{"class":52553},[33,89928,52560],{"class":47},[33,89930,89931],{"class":35,"line":1477},[33,89932,160],{"emptyLinePlaceholder":159},[33,89934,89935,89937,89939],{"class":35,"line":1504},[33,89936,53038],{"class":47},[33,89938,51888],{"class":52553},[33,89940,52560],{"class":47},[14,89942,89943],{},[2918,89944],{"alt":28,"src":89945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[18,89947,89949],{"id":89948},"_415-异常处理","4.15 异常处理",[574,89951,89952],{},[564,89953,89954],{},"throw抛异常",[14,89956,89957],{},[2918,89958],{"alt":28,"src":89959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[574,89961,89962],{"start":51},[564,89963,89964],{},"try\u002Fcatch 捕获错误信息",[14,89966,89967],{},[2918,89968],{"alt":28,"src":89969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[23,89971,89973],{"className":51886,"code":89972,"language":51888,"meta":28,"style":28},"\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",[30,89974,89975,89985,89999,90003,90011,90025,90045,90057,90065,90069,90077,90089,90097,90106,90113,90118,90137,90146,90157,90162,90172,90177,90182,90187,90204,90208,90213,90220,90232,90236,90248,90252,90256,90261,90266,90273,90281,90289,90293],{"__ignoreMap":28},[33,89976,89977,89979,89981,89983],{"class":35,"line":36},[33,89978,52550],{"class":47},[33,89980,52554],{"class":52553},[33,89982,52557],{"class":43},[33,89984,52560],{"class":47},[33,89986,89987,89989,89991,89993,89995,89997],{"class":35,"line":51},[33,89988,875],{"class":47},[33,89990,51888],{"class":52553},[33,89992,52569],{"class":43},[33,89994,73],{"class":47},[33,89996,52574],{"class":119},[33,89998,52560],{"class":47},[33,90000,90001],{"class":35,"line":57},[33,90002,160],{"emptyLinePlaceholder":159},[33,90004,90005,90007,90009],{"class":35,"line":64},[33,90006,875],{"class":47},[33,90008,52587],{"class":52553},[33,90010,52560],{"class":47},[33,90012,90013,90015,90017,90019,90021,90023],{"class":35,"line":83},[33,90014,53397],{"class":47},[33,90016,52597],{"class":52553},[33,90018,52600],{"class":43},[33,90020,73],{"class":47},[33,90022,52605],{"class":119},[33,90024,52560],{"class":47},[33,90026,90027,90029,90031,90033,90035,90037,90039,90041,90043],{"class":35,"line":89},[33,90028,53397],{"class":47},[33,90030,52597],{"class":52553},[33,90032,16171],{"class":43},[33,90034,73],{"class":47},[33,90036,52644],{"class":119},[33,90038,52624],{"class":43},[33,90040,73],{"class":47},[33,90042,52651],{"class":119},[33,90044,52560],{"class":47},[33,90046,90047,90049,90051,90053,90055],{"class":35,"line":98},[33,90048,53397],{"class":47},[33,90050,52660],{"class":52553},[33,90052,52663],{"class":47},[33,90054,52660],{"class":52553},[33,90056,52560],{"class":47},[33,90058,90059,90061,90063],{"class":35,"line":110},[33,90060,53038],{"class":47},[33,90062,52587],{"class":52553},[33,90064,52560],{"class":47},[33,90066,90067],{"class":35,"line":134},[33,90068,160],{"emptyLinePlaceholder":159},[33,90070,90071,90073,90075],{"class":35,"line":156},[33,90072,875],{"class":47},[33,90074,53053],{"class":52553},[33,90076,52560],{"class":47},[33,90078,90079,90081,90083,90085,90087],{"class":35,"line":163},[33,90080,53397],{"class":47},[33,90082,14],{"class":52553},[33,90084,54747],{"class":47},[33,90086,14],{"class":52553},[33,90088,52560],{"class":47},[33,90090,90091,90093,90095],{"class":35,"line":169},[33,90092,53397],{"class":47},[33,90094,53066],{"class":52553},[33,90096,52560],{"class":47},[33,90098,90099,90101,90104],{"class":35,"line":175},[33,90100,71337],{"class":39},[33,90102,90103],{"class":43}," fn",[33,90105,12104],{"class":47},[33,90107,90108,90111],{"class":35,"line":181},[33,90109,90110],{"class":39},"      try",[33,90112,16823],{"class":47},[33,90114,90115],{"class":35,"line":196},[33,90116,90117],{"class":60},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[33,90119,90120,90122,90124,90126,90128,90130,90132,90135],{"class":35,"line":213},[33,90121,62523],{"class":39},[33,90123,622],{"class":76},[33,90125,14815],{"class":39},[33,90127,55649],{"class":47},[33,90129,55652],{"class":43},[33,90131,345],{"class":47},[33,90133,90134],{"class":119},"'.p'",[33,90136,884],{"class":47},[33,90138,90139,90142,90144],{"class":35,"line":228},[33,90140,90141],{"class":47},"        p.style.color ",[33,90143,73],{"class":39},[33,90145,68304],{"class":119},[33,90147,90148,90151,90154],{"class":35,"line":1345},[33,90149,90150],{"class":47},"      } ",[33,90152,90153],{"class":39},"catch",[33,90155,90156],{"class":47}," (err) {\n",[33,90158,90159],{"class":35,"line":1350},[33,90160,90161],{"class":60},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[33,90163,90164,90167,90169],{"class":35,"line":1359},[33,90165,90166],{"class":47},"        console.",[33,90168,59500],{"class":43},[33,90170,90171],{"class":47},"(err.message)\n",[33,90173,90174],{"class":35,"line":1364},[33,90175,90176],{"class":60},"        \u002F\u002F 想要中断程序，需要加return\n",[33,90178,90179],{"class":35,"line":1370},[33,90180,90181],{"class":60},"        \u002F\u002F return\n",[33,90183,90184],{"class":35,"line":1425},[33,90185,90186],{"class":60},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[33,90188,90189,90192,90194,90197,90199,90202],{"class":35,"line":1438},[33,90190,90191],{"class":39},"        throw",[33,90193,12829],{"class":39},[33,90195,90196],{"class":43}," Error",[33,90198,345],{"class":47},[33,90200,90201],{"class":119},"'你看看，选择器错误了吧'",[33,90203,884],{"class":47},[33,90205,90206],{"class":35,"line":1451},[33,90207,53651],{"class":47},[33,90209,90210],{"class":35,"line":1457},[33,90211,90212],{"class":60},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[33,90214,90215,90218],{"class":35,"line":1466},[33,90216,90217],{"class":39},"      finally",[33,90219,16823],{"class":47},[33,90221,90222,90225,90227,90230],{"class":35,"line":1471},[33,90223,90224],{"class":43},"        alert",[33,90226,345],{"class":47},[33,90228,90229],{"class":119},"'弹出对话框'",[33,90231,884],{"class":47},[33,90233,90234],{"class":35,"line":1477},[33,90235,53651],{"class":47},[33,90237,90238,90240,90242,90244,90246],{"class":35,"line":1504},[33,90239,59497],{"class":47},[33,90241,59500],{"class":43},[33,90243,345],{"class":47},[33,90245,2074],{"class":76},[33,90247,884],{"class":47},[33,90249,90250],{"class":35,"line":1509},[33,90251,160],{"emptyLinePlaceholder":159},[33,90253,90254],{"class":35,"line":1525},[33,90255,916],{"class":47},[33,90257,90258],{"class":35,"line":1535},[33,90259,90260],{"class":60},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[33,90262,90263],{"class":35,"line":1540},[33,90264,90265],{"class":60},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[33,90267,90268,90271],{"class":35,"line":4027},[33,90269,90270],{"class":43},"    fn",[33,90272,48],{"class":47},[33,90274,90275,90277,90279],{"class":35,"line":4032},[33,90276,53670],{"class":47},[33,90278,53066],{"class":52553},[33,90280,52560],{"class":47},[33,90282,90283,90285,90287],{"class":35,"line":9199},[33,90284,53038],{"class":47},[33,90286,53053],{"class":52553},[33,90288,52560],{"class":47},[33,90290,90291],{"class":35,"line":9223},[33,90292,160],{"emptyLinePlaceholder":159},[33,90294,90295,90297,90299],{"class":35,"line":9228},[33,90296,53038],{"class":47},[33,90298,51888],{"class":52553},[33,90300,52560],{"class":47},[14,90302,90303],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[574,90305,90306],{"start":57},[564,90307,90308],{},"debugger",[14,90310,90311],{},[2918,90312],{"alt":28,"src":90313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,90315,90316],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[18,90318,90320],{"id":90319},"_416-处理this","4.16 处理this",[1599,90322,90324],{"id":90323},"_4161-this的指向","4.16.1 this的指向",[574,90326,90327],{},[564,90328,90329],{},"普通函数的this",[14,90331,90332],{},[2918,90333],{"alt":28,"src":90334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[574,90336,90337],{"start":51},[564,90338,90339],{},"箭头函数的this",[14,90341,90342],{},[2918,90343],{"alt":28,"src":90344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,90346,90347],{},[2918,90348],{"alt":28,"src":90349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,90351,90352],{},[2918,90353],{"alt":28,"src":90354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[1599,90356,90358],{"id":90357},"_4162-this的改变","4.16.2 this的改变",[14,90360,90361],{},"call() apply() bind()",[574,90363,90364],{},[564,90365,90366],{},"call()",[14,90368,90369],{},[2918,90370],{"alt":28,"src":90371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,90373,90374],{},"两个作用：①调用函数；②改变this指向",[23,90376,90378],{"className":54320,"code":90377,"language":54322,"meta":28,"style":28},"\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",[30,90379,90380,90388,90396,90400,90405,90409,90414,90419,90424,90428,90433,90441],{"__ignoreMap":28},[33,90381,90382,90384,90386],{"class":35,"line":36},[33,90383,875],{"class":47},[33,90385,53053],{"class":52553},[33,90387,52560],{"class":47},[33,90389,90390,90392,90394],{"class":35,"line":51},[33,90391,53397],{"class":47},[33,90393,53066],{"class":52553},[33,90395,52560],{"class":47},[33,90397,90398],{"class":35,"line":57},[33,90399,72776],{"class":47},[33,90401,90402],{"class":35,"line":64},[33,90403,90404],{"class":47},"      uname: 'pink'\n",[33,90406,90407],{"class":35,"line":83},[33,90408,916],{"class":47},[33,90410,90411],{"class":35,"line":89},[33,90412,90413],{"class":47},"    function fn(x, y) {\n",[33,90415,90416],{"class":35,"line":98},[33,90417,90418],{"class":47},"      console.log(this)  \u002F\u002Fwindow\n",[33,90420,90421],{"class":35,"line":110},[33,90422,90423],{"class":47},"      console.log(x + y)\n",[33,90425,90426],{"class":35,"line":134},[33,90427,916],{"class":47},[33,90429,90430],{"class":35,"line":156},[33,90431,90432],{"class":47},"    fn.call(obj, 1, 2)\n",[33,90434,90435,90437,90439],{"class":35,"line":163},[33,90436,53670],{"class":47},[33,90438,53066],{"class":52553},[33,90440,52560],{"class":47},[33,90442,90443,90445,90447],{"class":35,"line":169},[33,90444,53038],{"class":47},[33,90446,53053],{"class":52553},[33,90448,52560],{"class":47},[14,90450,90451],{},[2918,90452],{"alt":28,"src":90453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[574,90455,90456],{"start":51},[564,90457,90458],{},"apply()",[14,90460,90461],{},[2918,90462],{"alt":28,"src":90463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,90465,90374],{},[14,90467,90468],{},"call传递的是普通参数，而apply必须传递的是数组",[23,90470,90472],{"className":51886,"code":90471,"language":51888,"meta":28,"style":28},"\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",[30,90473,90474,90484,90498,90502,90510,90524,90544,90556,90564,90568,90576,90584,90594,90601,90605,90610,90626,90638,90652,90656,90661,90680,90685,90689,90694,90699,90707,90712,90734,90739,90755,90771,90783,90787,90792,90811,90819,90827,90831],{"__ignoreMap":28},[33,90475,90476,90478,90480,90482],{"class":35,"line":36},[33,90477,52550],{"class":47},[33,90479,52554],{"class":52553},[33,90481,52557],{"class":43},[33,90483,52560],{"class":47},[33,90485,90486,90488,90490,90492,90494,90496],{"class":35,"line":51},[33,90487,875],{"class":47},[33,90489,51888],{"class":52553},[33,90491,52569],{"class":43},[33,90493,73],{"class":47},[33,90495,52574],{"class":119},[33,90497,52560],{"class":47},[33,90499,90500],{"class":35,"line":57},[33,90501,160],{"emptyLinePlaceholder":159},[33,90503,90504,90506,90508],{"class":35,"line":64},[33,90505,875],{"class":47},[33,90507,52587],{"class":52553},[33,90509,52560],{"class":47},[33,90511,90512,90514,90516,90518,90520,90522],{"class":35,"line":83},[33,90513,53397],{"class":47},[33,90515,52597],{"class":52553},[33,90517,52600],{"class":43},[33,90519,73],{"class":47},[33,90521,52605],{"class":119},[33,90523,52560],{"class":47},[33,90525,90526,90528,90530,90532,90534,90536,90538,90540,90542],{"class":35,"line":89},[33,90527,53397],{"class":47},[33,90529,52597],{"class":52553},[33,90531,16171],{"class":43},[33,90533,73],{"class":47},[33,90535,52644],{"class":119},[33,90537,52624],{"class":43},[33,90539,73],{"class":47},[33,90541,52651],{"class":119},[33,90543,52560],{"class":47},[33,90545,90546,90548,90550,90552,90554],{"class":35,"line":98},[33,90547,53397],{"class":47},[33,90549,52660],{"class":52553},[33,90551,52663],{"class":47},[33,90553,52660],{"class":52553},[33,90555,52560],{"class":47},[33,90557,90558,90560,90562],{"class":35,"line":110},[33,90559,53038],{"class":47},[33,90561,52587],{"class":52553},[33,90563,52560],{"class":47},[33,90565,90566],{"class":35,"line":134},[33,90567,160],{"emptyLinePlaceholder":159},[33,90569,90570,90572,90574],{"class":35,"line":156},[33,90571,875],{"class":47},[33,90573,53053],{"class":52553},[33,90575,52560],{"class":47},[33,90577,90578,90580,90582],{"class":35,"line":163},[33,90579,53397],{"class":47},[33,90581,53066],{"class":52553},[33,90583,52560],{"class":47},[33,90585,90586,90588,90590,90592],{"class":35,"line":169},[33,90587,12472],{"class":39},[33,90589,71224],{"class":76},[33,90591,14815],{"class":39},[33,90593,16823],{"class":47},[33,90595,90596,90598],{"class":35,"line":175},[33,90597,72879],{"class":47},[33,90599,90600],{"class":76},"18\n",[33,90602,90603],{"class":35,"line":181},[33,90604,916],{"class":47},[33,90606,90607],{"class":35,"line":196},[33,90608,90609],{"class":60},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[33,90611,90612,90614,90616,90618,90620,90622,90624],{"class":35,"line":213},[33,90613,71337],{"class":39},[33,90615,90103],{"class":43},[33,90617,345],{"class":47},[33,90619,2419],{"class":955},[33,90621,13686],{"class":47},[33,90623,2444],{"class":955},[33,90625,13693],{"class":47},[33,90627,90628,90630,90632,90634,90636],{"class":35,"line":228},[33,90629,59497],{"class":47},[33,90631,59500],{"class":43},[33,90633,345],{"class":47},[33,90635,88246],{"class":76},[33,90637,884],{"class":47},[33,90639,90640,90642,90644,90647,90649],{"class":35,"line":1345},[33,90641,59497],{"class":47},[33,90643,59500],{"class":43},[33,90645,90646],{"class":47},"(x ",[33,90648,1271],{"class":39},[33,90650,90651],{"class":47}," y)\n",[33,90653,90654],{"class":35,"line":1350},[33,90655,916],{"class":47},[33,90657,90658],{"class":35,"line":1359},[33,90659,90660],{"class":60},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[33,90662,90663,90666,90669,90672,90674,90676,90678],{"class":35,"line":1364},[33,90664,90665],{"class":47},"    fn.",[33,90667,90668],{"class":43},"apply",[33,90670,90671],{"class":47},"(obj, [",[33,90673,701],{"class":76},[33,90675,13686],{"class":47},[33,90677,707],{"class":76},[33,90679,1276],{"class":47},[33,90681,90682],{"class":35,"line":1370},[33,90683,90684],{"class":60},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[33,90686,90687],{"class":35,"line":1425},[33,90688,160],{"emptyLinePlaceholder":159},[33,90690,90691],{"class":35,"line":1438},[33,90692,90693],{"class":60},"    \u002F\u002F 使用场景：求数组最大值\n",[33,90695,90696],{"class":35,"line":1451},[33,90697,90698],{"class":60},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[33,90700,90701,90704],{"class":35,"line":1457},[33,90702,90703],{"class":60},"    \u002F\u002F console.log(max)",[33,90705,90706],{"class":60},"   \u002F\u002F3\n",[33,90708,90709],{"class":35,"line":1466},[33,90710,90711],{"class":60},"    \u002F\u002F 指向空或者Math都是可以的\n",[33,90713,90714,90716,90718,90720,90722,90724,90726,90728,90730,90732],{"class":35,"line":1471},[33,90715,12472],{"class":39},[33,90717,58948],{"class":76},[33,90719,14815],{"class":39},[33,90721,53479],{"class":47},[33,90723,457],{"class":76},[33,90725,13686],{"class":47},[33,90727,2105],{"class":76},[33,90729,13686],{"class":47},[33,90731,2135],{"class":76},[33,90733,34499],{"class":47},[33,90735,90736],{"class":35,"line":1477},[33,90737,90738],{"class":60},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[33,90740,90741,90743,90745,90747,90750,90752],{"class":35,"line":1504},[33,90742,12472],{"class":39},[33,90744,7338],{"class":76},[33,90746,14815],{"class":39},[33,90748,90749],{"class":47}," Math.max.",[33,90751,90668],{"class":43},[33,90753,90754],{"class":47},"(Math, arr)\n",[33,90756,90757,90759,90762,90764,90767,90769],{"class":35,"line":1509},[33,90758,12472],{"class":39},[33,90760,90761],{"class":76}," min",[33,90763,14815],{"class":39},[33,90765,90766],{"class":47}," Math.min.",[33,90768,90668],{"class":43},[33,90770,90754],{"class":47},[33,90772,90773,90775,90777,90780],{"class":35,"line":1525},[33,90774,75006],{"class":47},[33,90776,59500],{"class":43},[33,90778,90779],{"class":47},"(max, min)     ",[33,90781,90782],{"class":60},"\u002F\u002F100,4\n",[33,90784,90785],{"class":35,"line":1535},[33,90786,160],{"emptyLinePlaceholder":159},[33,90788,90789],{"class":35,"line":1540},[33,90790,90791],{"class":60},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[33,90793,90794,90796,90798,90801,90803,90805,90808],{"class":35,"line":4027},[33,90795,75006],{"class":47},[33,90797,59500],{"class":43},[33,90799,90800],{"class":47},"(Max.",[33,90802,7402],{"class":43},[33,90804,345],{"class":47},[33,90806,90807],{"class":39},"...",[33,90809,90810],{"class":47},"arr))\n",[33,90812,90813,90815,90817],{"class":35,"line":4032},[33,90814,53670],{"class":47},[33,90816,53066],{"class":52553},[33,90818,52560],{"class":47},[33,90820,90821,90823,90825],{"class":35,"line":9199},[33,90822,53038],{"class":47},[33,90824,53053],{"class":52553},[33,90826,52560],{"class":47},[33,90828,90829],{"class":35,"line":9223},[33,90830,160],{"emptyLinePlaceholder":159},[33,90832,90833,90835,90837],{"class":35,"line":9228},[33,90834,53038],{"class":47},[33,90836,51888],{"class":52553},[33,90838,52560],{"class":47},[14,90840,90841],{},[2918,90842],{"alt":28,"src":90843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[574,90845,90846],{"start":57},[564,90847,90848],{},"bind()",[14,90850,90851],{},[2918,90852],{"alt":28,"src":90853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,90855,90856],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,90858,90859],{},"bind的语法跟call很相似",[23,90861,90863],{"className":54320,"code":90862,"language":54322,"meta":28,"style":28},"\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",[30,90864,90865,90873,90881,90885,90890,90894,90898,90903,90907,90912,90917,90922,90927,90932,90937,90942,90946,90954],{"__ignoreMap":28},[33,90866,90867,90869,90871],{"class":35,"line":36},[33,90868,875],{"class":47},[33,90870,53053],{"class":52553},[33,90872,52560],{"class":47},[33,90874,90875,90877,90879],{"class":35,"line":51},[33,90876,53397],{"class":47},[33,90878,53066],{"class":52553},[33,90880,52560],{"class":47},[33,90882,90883],{"class":35,"line":57},[33,90884,72776],{"class":47},[33,90886,90887],{"class":35,"line":64},[33,90888,90889],{"class":47},"      age: 18\n",[33,90891,90892],{"class":35,"line":83},[33,90893,916],{"class":47},[33,90895,90896],{"class":35,"line":89},[33,90897,78396],{"class":47},[33,90899,90900],{"class":35,"line":98},[33,90901,90902],{"class":47},"      console.log(this)\n",[33,90904,90905],{"class":35,"line":110},[33,90906,916],{"class":47},[33,90908,90909],{"class":35,"line":134},[33,90910,90911],{"class":47},"    \u002F\u002F 1.bind 不会调用函数\n",[33,90913,90914],{"class":35,"line":156},[33,90915,90916],{"class":47},"    \u002F\u002F 2.bind能改变this的指向\n",[33,90918,90919],{"class":35,"line":163},[33,90920,90921],{"class":47},"    fn.bind()\n",[33,90923,90924],{"class":35,"line":169},[33,90925,90926],{"class":47},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[33,90928,90929],{"class":35,"line":175},[33,90930,90931],{"class":47},"    const fun = fn.bind(obj)\n",[33,90933,90934],{"class":35,"line":181},[33,90935,90936],{"class":47},"    \u002F\u002F console.log(fun)\n",[33,90938,90939],{"class":35,"line":196},[33,90940,90941],{"class":47},"    \u002F\u002F 调用,查看this的指向\n",[33,90943,90944],{"class":35,"line":213},[33,90945,53904],{"class":47},[33,90947,90948,90950,90952],{"class":35,"line":228},[33,90949,53670],{"class":47},[33,90951,53066],{"class":52553},[33,90953,52560],{"class":47},[33,90955,90956,90958,90960],{"class":35,"line":1345},[33,90957,53038],{"class":47},[33,90959,53053],{"class":52553},[33,90961,52560],{"class":47},[14,90963,90964],{},[2918,90965],{"alt":28,"src":90966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[574,90968,90969],{"start":64},[564,90970,90971],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[23,90973,90975],{"className":54320,"code":90974,"language":54322,"meta":28,"style":28},"\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",[30,90976,90977,90985,90998,91006,91011,91015,91020,91025,91030,91035,91040,91045,91050,91055,91059,91067],{"__ignoreMap":28},[33,90978,90979,90981,90983],{"class":35,"line":36},[33,90980,875],{"class":47},[33,90982,53053],{"class":52553},[33,90984,52560],{"class":47},[33,90986,90987,90989,90991,90994,90996],{"class":35,"line":51},[33,90988,53397],{"class":47},[33,90990,55140],{"class":52553},[33,90992,90993],{"class":47},">禁用\u003C\u002F",[33,90995,55140],{"class":52553},[33,90997,52560],{"class":47},[33,90999,91000,91002,91004],{"class":35,"line":57},[33,91001,53397],{"class":47},[33,91003,53066],{"class":52553},[33,91005,52560],{"class":47},[33,91007,91008],{"class":35,"line":64},[33,91009,91010],{"class":47},"    const btn = document.querySelector('button')\n",[33,91012,91013],{"class":35,"line":83},[33,91014,60269],{"class":47},[33,91016,91017],{"class":35,"line":89},[33,91018,91019],{"class":47},"      this.disabled = true\n",[33,91021,91022],{"class":35,"line":98},[33,91023,91024],{"class":47},"      \u002F\u002F 定时器是window进行调用的\n",[33,91026,91027],{"class":35,"line":110},[33,91028,91029],{"class":47},"      setTimeout(function () {\n",[33,91031,91032],{"class":35,"line":134},[33,91033,91034],{"class":47},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[33,91036,91037],{"class":35,"line":156},[33,91038,91039],{"class":47},"        this.disabled = false\n",[33,91041,91042],{"class":35,"line":163},[33,91043,91044],{"class":47},"      }.bind(this), 2000)\n",[33,91046,91047],{"class":35,"line":169},[33,91048,91049],{"class":47},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[33,91051,91052],{"class":35,"line":175},[33,91053,91054],{"class":47},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[33,91056,91057],{"class":35,"line":181},[33,91058,34714],{"class":47},[33,91060,91061,91063,91065],{"class":35,"line":196},[33,91062,53670],{"class":47},[33,91064,53066],{"class":52553},[33,91066,52560],{"class":47},[33,91068,91069,91071,91073],{"class":35,"line":213},[33,91070,53038],{"class":47},[33,91072,53053],{"class":52553},[33,91074,52560],{"class":47},[574,91076,91077],{"start":83},[564,91078,23204],{},[14,91080,91081],{},[2918,91082],{"alt":28,"src":91083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[18,91085,91087],{"id":91086},"_417-性能优化","4.17 性能优化",[1599,91089,91091],{"id":91090},"_4171-防抖","4.17.1 防抖",[14,91093,91094],{},[2918,91095],{"alt":28,"src":91096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,91098,91099],{},[480,91100,91101],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,91103,91104],{},"防抖实现方式：",[561,91106,91107],{},[564,91108,91109],{},"lodash 提供了防抖处理",[14,91111,91112],{},"_.debounce(func,[wait=0],[options={}])",[14,91114,91115],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[23,91117,91119],{"className":51886,"code":91118,"language":51888,"meta":28,"style":28},"\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",[30,91120,91121,91131,91145,91149,91157,91171,91191,91203,91211,91217,91227,91239,91251,91262,91274,91284,91294,91307,91311,91319,91327,91331,91339,91357,91375,91383,91402,91412,91421,91432,91437,91441,91446,91451,91456,91481,91489,91497,91501],{"__ignoreMap":28},[33,91122,91123,91125,91127,91129],{"class":35,"line":36},[33,91124,52550],{"class":47},[33,91126,52554],{"class":52553},[33,91128,52557],{"class":43},[33,91130,52560],{"class":47},[33,91132,91133,91135,91137,91139,91141,91143],{"class":35,"line":51},[33,91134,875],{"class":47},[33,91136,51888],{"class":52553},[33,91138,52569],{"class":43},[33,91140,73],{"class":47},[33,91142,52574],{"class":119},[33,91144,52560],{"class":47},[33,91146,91147],{"class":35,"line":57},[33,91148,160],{"emptyLinePlaceholder":159},[33,91150,91151,91153,91155],{"class":35,"line":64},[33,91152,875],{"class":47},[33,91154,52587],{"class":52553},[33,91156,52560],{"class":47},[33,91158,91159,91161,91163,91165,91167,91169],{"class":35,"line":83},[33,91160,53397],{"class":47},[33,91162,52597],{"class":52553},[33,91164,52600],{"class":43},[33,91166,73],{"class":47},[33,91168,52605],{"class":119},[33,91170,52560],{"class":47},[33,91172,91173,91175,91177,91179,91181,91183,91185,91187,91189],{"class":35,"line":89},[33,91174,53397],{"class":47},[33,91176,52597],{"class":52553},[33,91178,16171],{"class":43},[33,91180,73],{"class":47},[33,91182,52644],{"class":119},[33,91184,52624],{"class":43},[33,91186,73],{"class":47},[33,91188,52651],{"class":119},[33,91190,52560],{"class":47},[33,91192,91193,91195,91197,91199,91201],{"class":35,"line":98},[33,91194,53397],{"class":47},[33,91196,52660],{"class":52553},[33,91198,52663],{"class":47},[33,91200,52660],{"class":52553},[33,91202,52560],{"class":47},[33,91204,91205,91207,91209],{"class":35,"line":110},[33,91206,53397],{"class":47},[33,91208,1544],{"class":52553},[33,91210,52560],{"class":47},[33,91212,91213,91215],{"class":35,"line":134},[33,91214,56005],{"class":43},[33,91216,16823],{"class":47},[33,91218,91219,91221,91223,91225],{"class":35,"line":156},[33,91220,73849],{"class":76},[33,91222,52690],{"class":47},[33,91224,61758],{"class":76},[33,91226,80],{"class":47},[33,91228,91229,91231,91233,91235,91237],{"class":35,"line":163},[33,91230,56024],{"class":76},[33,91232,52690],{"class":47},[33,91234,3163],{"class":76},[33,91236,52745],{"class":39},[33,91238,80],{"class":47},[33,91240,91241,91243,91245,91247,91249],{"class":35,"line":169},[33,91242,56038],{"class":76},[33,91244,52690],{"class":47},[33,91246,3163],{"class":76},[33,91248,52745],{"class":39},[33,91250,80],{"class":47},[33,91252,91253,91255,91257,91260],{"class":35,"line":175},[33,91254,56137],{"class":76},[33,91256,52690],{"class":47},[33,91258,91259],{"class":76},"gray",[33,91261,80],{"class":47},[33,91263,91264,91266,91268,91270,91272],{"class":35,"line":181},[33,91265,56175],{"class":76},[33,91267,52690],{"class":47},[33,91269,2424],{"class":76},[33,91271,52745],{"class":39},[33,91273,80],{"class":47},[33,91275,91276,91278,91280,91282],{"class":35,"line":196},[33,91277,58669],{"class":76},[33,91279,52690],{"class":47},[33,91281,62095],{"class":76},[33,91283,80],{"class":47},[33,91285,91286,91288,91290,91292],{"class":35,"line":213},[33,91287,58539],{"class":76},[33,91289,52690],{"class":47},[33,91291,52845],{"class":76},[33,91293,80],{"class":47},[33,91295,91296,91299,91301,91303,91305],{"class":35,"line":228},[33,91297,91298],{"class":76},"      padding-top",[33,91300,52690],{"class":47},[33,91302,722],{"class":76},[33,91304,52745],{"class":39},[33,91306,80],{"class":47},[33,91308,91309],{"class":35,"line":1345},[33,91310,916],{"class":47},[33,91312,91313,91315,91317],{"class":35,"line":1350},[33,91314,53670],{"class":47},[33,91316,1544],{"class":52553},[33,91318,52560],{"class":47},[33,91320,91321,91323,91325],{"class":35,"line":1359},[33,91322,53038],{"class":47},[33,91324,52587],{"class":52553},[33,91326,52560],{"class":47},[33,91328,91329],{"class":35,"line":1364},[33,91330,160],{"emptyLinePlaceholder":159},[33,91332,91333,91335,91337],{"class":35,"line":1370},[33,91334,875],{"class":47},[33,91336,53053],{"class":52553},[33,91338,52560],{"class":47},[33,91340,91341,91343,91345,91347,91349,91351,91353,91355],{"class":35,"line":1425},[33,91342,53397],{"class":47},[33,91344,52864],{"class":52553},[33,91346,54739],{"class":43},[33,91348,73],{"class":47},[33,91350,54744],{"class":119},[33,91352,56567],{"class":47},[33,91354,52864],{"class":52553},[33,91356,52560],{"class":47},[33,91358,91359,91361,91363,91365,91367,91369,91371,91373],{"class":35,"line":1438},[33,91360,53397],{"class":47},[33,91362,53066],{"class":52553},[33,91364,56492],{"class":43},[33,91366,73],{"class":47},[33,91368,89527],{"class":119},[33,91370,56567],{"class":47},[33,91372,53066],{"class":52553},[33,91374,52560],{"class":47},[33,91376,91377,91379,91381],{"class":35,"line":1451},[33,91378,53397],{"class":47},[33,91380,53066],{"class":52553},[33,91382,52560],{"class":47},[33,91384,91385,91387,91389,91391,91393,91395,91397,91400],{"class":35,"line":1457},[33,91386,12472],{"class":39},[33,91388,88186],{"class":76},[33,91390,14815],{"class":39},[33,91392,55649],{"class":47},[33,91394,55652],{"class":43},[33,91396,345],{"class":47},[33,91398,91399],{"class":119},"'.box'",[33,91401,884],{"class":47},[33,91403,91404,91406,91408,91410],{"class":35,"line":1466},[33,91405,53472],{"class":39},[33,91407,10689],{"class":47},[33,91409,73],{"class":39},[33,91411,48586],{"class":76},[33,91413,91414,91416,91419],{"class":35,"line":1471},[33,91415,71337],{"class":39},[33,91417,91418],{"class":43}," mouseMove",[33,91420,12104],{"class":47},[33,91422,91423,91426,91428,91430],{"class":35,"line":1477},[33,91424,91425],{"class":47},"      box.innerHTML ",[33,91427,73],{"class":39},[33,91429,865],{"class":47},[33,91431,4113],{"class":39},[33,91433,91434],{"class":35,"line":1504},[33,91435,91436],{"class":60},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[33,91438,91439],{"class":35,"line":1509},[33,91440,916],{"class":47},[33,91442,91443],{"class":35,"line":1525},[33,91444,91445],{"class":60},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[33,91447,91448],{"class":35,"line":1535},[33,91449,91450],{"class":60},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[33,91452,91453],{"class":35,"line":1540},[33,91454,91455],{"class":60},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[33,91457,91458,91461,91463,91465,91468,91471,91474,91477,91479],{"class":35,"line":4027},[33,91459,91460],{"class":47},"    box.",[33,91462,59066],{"class":43},[33,91464,345],{"class":47},[33,91466,91467],{"class":119},"'mousemove'",[33,91469,91470],{"class":47},", _.",[33,91472,91473],{"class":43},"debounce",[33,91475,91476],{"class":47},"(mouseMove, ",[33,91478,66327],{"class":76},[33,91480,31750],{"class":47},[33,91482,91483,91485,91487],{"class":35,"line":4032},[33,91484,53670],{"class":47},[33,91486,53066],{"class":52553},[33,91488,52560],{"class":47},[33,91490,91491,91493,91495],{"class":35,"line":9199},[33,91492,53038],{"class":47},[33,91494,53053],{"class":52553},[33,91496,52560],{"class":47},[33,91498,91499],{"class":35,"line":9223},[33,91500,160],{"emptyLinePlaceholder":159},[33,91502,91503,91505,91507],{"class":35,"line":9228},[33,91504,53038],{"class":47},[33,91506,51888],{"class":52553},[33,91508,52560],{"class":47},[561,91510,91511],{},[564,91512,91513],{},"手写一个防抖函数来处理",[14,91515,91516],{},"防抖的核心就是利用定时器来实现的：",[14,91518,91519],{},"①声明一个定时器变量",[14,91521,91522],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,91524,91525],{},"③如果没有定时器则开启定时器，记得存到变量里面",[23,91527,91529],{"className":51886,"code":91528,"language":51888,"meta":28,"style":28},"\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",[30,91530,91531,91541,91555,91559,91567,91581,91601,91613,91621,91627,91637,91649,91661,91671,91683,91693,91703,91715,91719,91727,91735,91739,91747,91765,91783,91791,91809,91819,91827,91837,91841,91845,91849,91854,91859,91864,91869,91874,91879,91897,91904,91909,91917,91922,91935,91951,91961,91966,91970,91974,91994,91998,92003,92008,92013,92018,92026,92034,92038],{"__ignoreMap":28},[33,91532,91533,91535,91537,91539],{"class":35,"line":36},[33,91534,52550],{"class":47},[33,91536,52554],{"class":52553},[33,91538,52557],{"class":43},[33,91540,52560],{"class":47},[33,91542,91543,91545,91547,91549,91551,91553],{"class":35,"line":51},[33,91544,875],{"class":47},[33,91546,51888],{"class":52553},[33,91548,52569],{"class":43},[33,91550,73],{"class":47},[33,91552,52574],{"class":119},[33,91554,52560],{"class":47},[33,91556,91557],{"class":35,"line":57},[33,91558,160],{"emptyLinePlaceholder":159},[33,91560,91561,91563,91565],{"class":35,"line":64},[33,91562,875],{"class":47},[33,91564,52587],{"class":52553},[33,91566,52560],{"class":47},[33,91568,91569,91571,91573,91575,91577,91579],{"class":35,"line":83},[33,91570,53397],{"class":47},[33,91572,52597],{"class":52553},[33,91574,52600],{"class":43},[33,91576,73],{"class":47},[33,91578,52605],{"class":119},[33,91580,52560],{"class":47},[33,91582,91583,91585,91587,91589,91591,91593,91595,91597,91599],{"class":35,"line":89},[33,91584,53397],{"class":47},[33,91586,52597],{"class":52553},[33,91588,16171],{"class":43},[33,91590,73],{"class":47},[33,91592,52644],{"class":119},[33,91594,52624],{"class":43},[33,91596,73],{"class":47},[33,91598,52651],{"class":119},[33,91600,52560],{"class":47},[33,91602,91603,91605,91607,91609,91611],{"class":35,"line":98},[33,91604,53397],{"class":47},[33,91606,52660],{"class":52553},[33,91608,52663],{"class":47},[33,91610,52660],{"class":52553},[33,91612,52560],{"class":47},[33,91614,91615,91617,91619],{"class":35,"line":110},[33,91616,53397],{"class":47},[33,91618,1544],{"class":52553},[33,91620,52560],{"class":47},[33,91622,91623,91625],{"class":35,"line":134},[33,91624,56005],{"class":43},[33,91626,16823],{"class":47},[33,91628,91629,91631,91633,91635],{"class":35,"line":156},[33,91630,73849],{"class":76},[33,91632,52690],{"class":47},[33,91634,61758],{"class":76},[33,91636,80],{"class":47},[33,91638,91639,91641,91643,91645,91647],{"class":35,"line":163},[33,91640,56024],{"class":76},[33,91642,52690],{"class":47},[33,91644,3163],{"class":76},[33,91646,52745],{"class":39},[33,91648,80],{"class":47},[33,91650,91651,91653,91655,91657,91659],{"class":35,"line":169},[33,91652,56038],{"class":76},[33,91654,52690],{"class":47},[33,91656,3163],{"class":76},[33,91658,52745],{"class":39},[33,91660,80],{"class":47},[33,91662,91663,91665,91667,91669],{"class":35,"line":175},[33,91664,56137],{"class":76},[33,91666,52690],{"class":47},[33,91668,91259],{"class":76},[33,91670,80],{"class":47},[33,91672,91673,91675,91677,91679,91681],{"class":35,"line":181},[33,91674,56175],{"class":76},[33,91676,52690],{"class":47},[33,91678,2424],{"class":76},[33,91680,52745],{"class":39},[33,91682,80],{"class":47},[33,91684,91685,91687,91689,91691],{"class":35,"line":196},[33,91686,58669],{"class":76},[33,91688,52690],{"class":47},[33,91690,62095],{"class":76},[33,91692,80],{"class":47},[33,91694,91695,91697,91699,91701],{"class":35,"line":213},[33,91696,58539],{"class":76},[33,91698,52690],{"class":47},[33,91700,52845],{"class":76},[33,91702,80],{"class":47},[33,91704,91705,91707,91709,91711,91713],{"class":35,"line":228},[33,91706,91298],{"class":76},[33,91708,52690],{"class":47},[33,91710,722],{"class":76},[33,91712,52745],{"class":39},[33,91714,80],{"class":47},[33,91716,91717],{"class":35,"line":1345},[33,91718,916],{"class":47},[33,91720,91721,91723,91725],{"class":35,"line":1350},[33,91722,53670],{"class":47},[33,91724,1544],{"class":52553},[33,91726,52560],{"class":47},[33,91728,91729,91731,91733],{"class":35,"line":1359},[33,91730,53038],{"class":47},[33,91732,52587],{"class":52553},[33,91734,52560],{"class":47},[33,91736,91737],{"class":35,"line":1364},[33,91738,160],{"emptyLinePlaceholder":159},[33,91740,91741,91743,91745],{"class":35,"line":1370},[33,91742,875],{"class":47},[33,91744,53053],{"class":52553},[33,91746,52560],{"class":47},[33,91748,91749,91751,91753,91755,91757,91759,91761,91763],{"class":35,"line":1425},[33,91750,53397],{"class":47},[33,91752,52864],{"class":52553},[33,91754,54739],{"class":43},[33,91756,73],{"class":47},[33,91758,54744],{"class":119},[33,91760,56567],{"class":47},[33,91762,52864],{"class":52553},[33,91764,52560],{"class":47},[33,91766,91767,91769,91771,91773,91775,91777,91779,91781],{"class":35,"line":1438},[33,91768,53397],{"class":47},[33,91770,53066],{"class":52553},[33,91772,56492],{"class":43},[33,91774,73],{"class":47},[33,91776,89527],{"class":119},[33,91778,56567],{"class":47},[33,91780,53066],{"class":52553},[33,91782,52560],{"class":47},[33,91784,91785,91787,91789],{"class":35,"line":1451},[33,91786,53397],{"class":47},[33,91788,53066],{"class":52553},[33,91790,52560],{"class":47},[33,91792,91793,91795,91797,91799,91801,91803,91805,91807],{"class":35,"line":1457},[33,91794,12472],{"class":39},[33,91796,88186],{"class":76},[33,91798,14815],{"class":39},[33,91800,55649],{"class":47},[33,91802,55652],{"class":43},[33,91804,345],{"class":47},[33,91806,91399],{"class":119},[33,91808,884],{"class":47},[33,91810,91811,91813,91815,91817],{"class":35,"line":1466},[33,91812,53472],{"class":39},[33,91814,10689],{"class":47},[33,91816,73],{"class":39},[33,91818,48586],{"class":76},[33,91820,91821,91823,91825],{"class":35,"line":1471},[33,91822,71337],{"class":39},[33,91824,91418],{"class":43},[33,91826,12104],{"class":47},[33,91828,91829,91831,91833,91835],{"class":35,"line":1477},[33,91830,91425],{"class":47},[33,91832,73],{"class":39},[33,91834,865],{"class":47},[33,91836,4113],{"class":39},[33,91838,91839],{"class":35,"line":1504},[33,91840,91436],{"class":60},[33,91842,91843],{"class":35,"line":1509},[33,91844,916],{"class":47},[33,91846,91847],{"class":35,"line":1525},[33,91848,91445],{"class":60},[33,91850,91851],{"class":35,"line":1535},[33,91852,91853],{"class":60},"    \u002F\u002F 手写防抖函数\n",[33,91855,91856],{"class":35,"line":1540},[33,91857,91858],{"class":60},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[33,91860,91861],{"class":35,"line":4027},[33,91862,91863],{"class":60},"    \u002F\u002F 1.声明定时器变量\n",[33,91865,91866],{"class":35,"line":4032},[33,91867,91868],{"class":60},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[33,91870,91871],{"class":35,"line":9199},[33,91872,91873],{"class":60},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[33,91875,91876],{"class":35,"line":9223},[33,91877,91878],{"class":60},"    \u002F\u002F 4.定时器里面写函数调用\n",[33,91880,91881,91883,91886,91888,91891,91893,91895],{"class":35,"line":9228},[33,91882,71337],{"class":39},[33,91884,91885],{"class":43}," debounce",[33,91887,345],{"class":47},[33,91889,91890],{"class":955},"fn",[33,91892,13686],{"class":47},[33,91894,2319],{"class":955},[33,91896,13693],{"class":47},[33,91898,91899,91901],{"class":35,"line":9234},[33,91900,81025],{"class":39},[33,91902,91903],{"class":47}," timer\n",[33,91905,91906],{"class":35,"line":9261},[33,91907,91908],{"class":60},"      \u002F\u002F return 返回一个匿名函数\n",[33,91910,91911,91913,91915],{"class":35,"line":9266},[33,91912,75235],{"class":39},[33,91914,60171],{"class":39},[33,91916,55705],{"class":47},[33,91918,91919],{"class":35,"line":9272},[33,91920,91921],{"class":60},"        \u002F\u002F 这里边写第二三四步\n",[33,91923,91924,91926,91929,91932],{"class":35,"line":9284},[33,91925,3915],{"class":39},[33,91927,91928],{"class":47}," (timer) ",[33,91930,91931],{"class":43},"clearTimeout",[33,91933,91934],{"class":47},"(timer)\n",[33,91936,91937,91940,91942,91945,91947,91949],{"class":35,"line":9296},[33,91938,91939],{"class":47},"        timer ",[33,91941,73],{"class":39},[33,91943,91944],{"class":43}," setTimeout",[33,91946,345],{"class":47},[33,91948,55702],{"class":39},[33,91950,55705],{"class":47},[33,91952,91953,91956,91958],{"class":35,"line":9308},[33,91954,91955],{"class":43},"          fn",[33,91957,14301],{"class":47},[33,91959,91960],{"class":60},"\u002F\u002F加小括号调用fn }, t)\n",[33,91962,91963],{"class":35,"line":10967},[33,91964,91965],{"class":47},"        }, t)\n",[33,91967,91968],{"class":35,"line":10992},[33,91969,53651],{"class":47},[33,91971,91972],{"class":35,"line":11015},[33,91973,916],{"class":47},[33,91975,91976,91978,91980,91982,91984,91986,91988,91990,91992],{"class":35,"line":11039},[33,91977,91460],{"class":47},[33,91979,59066],{"class":43},[33,91981,345],{"class":47},[33,91983,91467],{"class":119},[33,91985,13686],{"class":47},[33,91987,91473],{"class":43},[33,91989,91476],{"class":47},[33,91991,66327],{"class":76},[33,91993,31750],{"class":47},[33,91995,91996],{"class":35,"line":11044},[33,91997,160],{"emptyLinePlaceholder":159},[33,91999,92000],{"class":35,"line":11049},[33,92001,92002],{"class":60},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[33,92004,92005],{"class":35,"line":11054},[33,92006,92007],{"class":60},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[33,92009,92010],{"class":35,"line":11063},[33,92011,92012],{"class":60},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[33,92014,92015],{"class":35,"line":11068},[33,92016,92017],{"class":60},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[33,92019,92020,92022,92024],{"class":35,"line":11074},[33,92021,53670],{"class":47},[33,92023,53066],{"class":52553},[33,92025,52560],{"class":47},[33,92027,92028,92030,92032],{"class":35,"line":11095},[33,92029,53038],{"class":47},[33,92031,53053],{"class":52553},[33,92033,52560],{"class":47},[33,92035,92036],{"class":35,"line":11101},[33,92037,160],{"emptyLinePlaceholder":159},[33,92039,92040,92042,92044],{"class":35,"line":11115},[33,92041,53038],{"class":47},[33,92043,51888],{"class":52553},[33,92045,52560],{"class":47},[1599,92047,92049],{"id":92048},"_4172-节流","4.17.2 节流",[14,92051,92052],{},[2918,92053],{"alt":28,"src":92054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,92056,92057],{},[2918,92058],{"alt":28,"src":92059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,92061,92062],{},[480,92063,92064],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,92066,92067],{},"实现方式：",[561,92069,92070],{},[564,92071,92072],{},"lodash 提供的节流函数来处理",[14,92074,92075],{},"_.throttle(func,[wait=0],[options=])",[14,92077,92078],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[23,92080,92082],{"className":51886,"code":92081,"language":51888,"meta":28,"style":28},"\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",[30,92083,92084,92094,92108,92112,92120,92134,92154,92166,92174,92180,92190,92202,92214,92224,92236,92246,92256,92268,92272,92280,92288,92292,92300,92318,92336,92344,92362,92372,92380,92390,92394,92398,92402,92407,92412,92433,92441,92449,92453],{"__ignoreMap":28},[33,92085,92086,92088,92090,92092],{"class":35,"line":36},[33,92087,52550],{"class":47},[33,92089,52554],{"class":52553},[33,92091,52557],{"class":43},[33,92093,52560],{"class":47},[33,92095,92096,92098,92100,92102,92104,92106],{"class":35,"line":51},[33,92097,875],{"class":47},[33,92099,51888],{"class":52553},[33,92101,52569],{"class":43},[33,92103,73],{"class":47},[33,92105,52574],{"class":119},[33,92107,52560],{"class":47},[33,92109,92110],{"class":35,"line":57},[33,92111,160],{"emptyLinePlaceholder":159},[33,92113,92114,92116,92118],{"class":35,"line":64},[33,92115,875],{"class":47},[33,92117,52587],{"class":52553},[33,92119,52560],{"class":47},[33,92121,92122,92124,92126,92128,92130,92132],{"class":35,"line":83},[33,92123,53397],{"class":47},[33,92125,52597],{"class":52553},[33,92127,52600],{"class":43},[33,92129,73],{"class":47},[33,92131,52605],{"class":119},[33,92133,52560],{"class":47},[33,92135,92136,92138,92140,92142,92144,92146,92148,92150,92152],{"class":35,"line":89},[33,92137,53397],{"class":47},[33,92139,52597],{"class":52553},[33,92141,16171],{"class":43},[33,92143,73],{"class":47},[33,92145,52644],{"class":119},[33,92147,52624],{"class":43},[33,92149,73],{"class":47},[33,92151,52651],{"class":119},[33,92153,52560],{"class":47},[33,92155,92156,92158,92160,92162,92164],{"class":35,"line":98},[33,92157,53397],{"class":47},[33,92159,52660],{"class":52553},[33,92161,52663],{"class":47},[33,92163,52660],{"class":52553},[33,92165,52560],{"class":47},[33,92167,92168,92170,92172],{"class":35,"line":110},[33,92169,53397],{"class":47},[33,92171,1544],{"class":52553},[33,92173,52560],{"class":47},[33,92175,92176,92178],{"class":35,"line":134},[33,92177,56005],{"class":43},[33,92179,16823],{"class":47},[33,92181,92182,92184,92186,92188],{"class":35,"line":156},[33,92183,73849],{"class":76},[33,92185,52690],{"class":47},[33,92187,61758],{"class":76},[33,92189,80],{"class":47},[33,92191,92192,92194,92196,92198,92200],{"class":35,"line":163},[33,92193,56024],{"class":76},[33,92195,52690],{"class":47},[33,92197,3163],{"class":76},[33,92199,52745],{"class":39},[33,92201,80],{"class":47},[33,92203,92204,92206,92208,92210,92212],{"class":35,"line":169},[33,92205,56038],{"class":76},[33,92207,52690],{"class":47},[33,92209,3163],{"class":76},[33,92211,52745],{"class":39},[33,92213,80],{"class":47},[33,92215,92216,92218,92220,92222],{"class":35,"line":175},[33,92217,56137],{"class":76},[33,92219,52690],{"class":47},[33,92221,91259],{"class":76},[33,92223,80],{"class":47},[33,92225,92226,92228,92230,92232,92234],{"class":35,"line":181},[33,92227,56175],{"class":76},[33,92229,52690],{"class":47},[33,92231,2424],{"class":76},[33,92233,52745],{"class":39},[33,92235,80],{"class":47},[33,92237,92238,92240,92242,92244],{"class":35,"line":196},[33,92239,58669],{"class":76},[33,92241,52690],{"class":47},[33,92243,62095],{"class":76},[33,92245,80],{"class":47},[33,92247,92248,92250,92252,92254],{"class":35,"line":213},[33,92249,58539],{"class":76},[33,92251,52690],{"class":47},[33,92253,52845],{"class":76},[33,92255,80],{"class":47},[33,92257,92258,92260,92262,92264,92266],{"class":35,"line":228},[33,92259,91298],{"class":76},[33,92261,52690],{"class":47},[33,92263,722],{"class":76},[33,92265,52745],{"class":39},[33,92267,80],{"class":47},[33,92269,92270],{"class":35,"line":1345},[33,92271,916],{"class":47},[33,92273,92274,92276,92278],{"class":35,"line":1350},[33,92275,53670],{"class":47},[33,92277,1544],{"class":52553},[33,92279,52560],{"class":47},[33,92281,92282,92284,92286],{"class":35,"line":1359},[33,92283,53038],{"class":47},[33,92285,52587],{"class":52553},[33,92287,52560],{"class":47},[33,92289,92290],{"class":35,"line":1364},[33,92291,160],{"emptyLinePlaceholder":159},[33,92293,92294,92296,92298],{"class":35,"line":1370},[33,92295,875],{"class":47},[33,92297,53053],{"class":52553},[33,92299,52560],{"class":47},[33,92301,92302,92304,92306,92308,92310,92312,92314,92316],{"class":35,"line":1425},[33,92303,53397],{"class":47},[33,92305,52864],{"class":52553},[33,92307,54739],{"class":43},[33,92309,73],{"class":47},[33,92311,54744],{"class":119},[33,92313,56567],{"class":47},[33,92315,52864],{"class":52553},[33,92317,52560],{"class":47},[33,92319,92320,92322,92324,92326,92328,92330,92332,92334],{"class":35,"line":1438},[33,92321,53397],{"class":47},[33,92323,53066],{"class":52553},[33,92325,56492],{"class":43},[33,92327,73],{"class":47},[33,92329,89527],{"class":119},[33,92331,56567],{"class":47},[33,92333,53066],{"class":52553},[33,92335,52560],{"class":47},[33,92337,92338,92340,92342],{"class":35,"line":1451},[33,92339,53397],{"class":47},[33,92341,53066],{"class":52553},[33,92343,52560],{"class":47},[33,92345,92346,92348,92350,92352,92354,92356,92358,92360],{"class":35,"line":1457},[33,92347,12472],{"class":39},[33,92349,88186],{"class":76},[33,92351,14815],{"class":39},[33,92353,55649],{"class":47},[33,92355,55652],{"class":43},[33,92357,345],{"class":47},[33,92359,91399],{"class":119},[33,92361,884],{"class":47},[33,92363,92364,92366,92368,92370],{"class":35,"line":1466},[33,92365,53472],{"class":39},[33,92367,10689],{"class":47},[33,92369,73],{"class":39},[33,92371,48586],{"class":76},[33,92373,92374,92376,92378],{"class":35,"line":1471},[33,92375,71337],{"class":39},[33,92377,91418],{"class":43},[33,92379,12104],{"class":47},[33,92381,92382,92384,92386,92388],{"class":35,"line":1477},[33,92383,91425],{"class":47},[33,92385,73],{"class":39},[33,92387,865],{"class":47},[33,92389,4113],{"class":39},[33,92391,92392],{"class":35,"line":1504},[33,92393,91436],{"class":60},[33,92395,92396],{"class":35,"line":1509},[33,92397,916],{"class":47},[33,92399,92400],{"class":35,"line":1525},[33,92401,91445],{"class":60},[33,92403,92404],{"class":35,"line":1535},[33,92405,92406],{"class":60},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[33,92408,92409],{"class":35,"line":1540},[33,92410,92411],{"class":60},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[33,92413,92414,92416,92418,92420,92422,92424,92427,92429,92431],{"class":35,"line":4027},[33,92415,91460],{"class":47},[33,92417,59066],{"class":43},[33,92419,345],{"class":47},[33,92421,91467],{"class":119},[33,92423,91470],{"class":47},[33,92425,92426],{"class":43},"throttle",[33,92428,91476],{"class":47},[33,92430,66327],{"class":76},[33,92432,31750],{"class":47},[33,92434,92435,92437,92439],{"class":35,"line":4032},[33,92436,53670],{"class":47},[33,92438,53066],{"class":52553},[33,92440,52560],{"class":47},[33,92442,92443,92445,92447],{"class":35,"line":9199},[33,92444,53038],{"class":47},[33,92446,53053],{"class":52553},[33,92448,52560],{"class":47},[33,92450,92451],{"class":35,"line":9223},[33,92452,160],{"emptyLinePlaceholder":159},[33,92454,92455,92457,92459],{"class":35,"line":9228},[33,92456,53038],{"class":47},[33,92458,51888],{"class":52553},[33,92460,52560],{"class":47},[561,92462,92463],{},[564,92464,92465],{},"手写一个节流函数来处理",[14,92467,72205],{},[14,92469,91519],{},[14,92471,92472],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,92474,92475],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[23,92477,92479],{"className":51886,"code":92478,"language":51888,"meta":28,"style":28},"\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",[30,92480,92481,92491,92505,92509,92517,92531,92551,92563,92571,92577,92587,92599,92611,92621,92633,92643,92653,92665,92669,92677,92685,92689,92697,92715,92733,92741,92759,92769,92777,92787,92791,92795,92799,92804,92809,92814,92819,92824,92829,92846,92852,92860,92871,92886,92893,92898,92903,92913,92918,92923,92928,92932,92936,92940,92960,92968,92976,92980],{"__ignoreMap":28},[33,92482,92483,92485,92487,92489],{"class":35,"line":36},[33,92484,52550],{"class":47},[33,92486,52554],{"class":52553},[33,92488,52557],{"class":43},[33,92490,52560],{"class":47},[33,92492,92493,92495,92497,92499,92501,92503],{"class":35,"line":51},[33,92494,875],{"class":47},[33,92496,51888],{"class":52553},[33,92498,52569],{"class":43},[33,92500,73],{"class":47},[33,92502,52574],{"class":119},[33,92504,52560],{"class":47},[33,92506,92507],{"class":35,"line":57},[33,92508,160],{"emptyLinePlaceholder":159},[33,92510,92511,92513,92515],{"class":35,"line":64},[33,92512,875],{"class":47},[33,92514,52587],{"class":52553},[33,92516,52560],{"class":47},[33,92518,92519,92521,92523,92525,92527,92529],{"class":35,"line":83},[33,92520,53397],{"class":47},[33,92522,52597],{"class":52553},[33,92524,52600],{"class":43},[33,92526,73],{"class":47},[33,92528,52605],{"class":119},[33,92530,52560],{"class":47},[33,92532,92533,92535,92537,92539,92541,92543,92545,92547,92549],{"class":35,"line":89},[33,92534,53397],{"class":47},[33,92536,52597],{"class":52553},[33,92538,16171],{"class":43},[33,92540,73],{"class":47},[33,92542,52644],{"class":119},[33,92544,52624],{"class":43},[33,92546,73],{"class":47},[33,92548,52651],{"class":119},[33,92550,52560],{"class":47},[33,92552,92553,92555,92557,92559,92561],{"class":35,"line":98},[33,92554,53397],{"class":47},[33,92556,52660],{"class":52553},[33,92558,52663],{"class":47},[33,92560,52660],{"class":52553},[33,92562,52560],{"class":47},[33,92564,92565,92567,92569],{"class":35,"line":110},[33,92566,53397],{"class":47},[33,92568,1544],{"class":52553},[33,92570,52560],{"class":47},[33,92572,92573,92575],{"class":35,"line":134},[33,92574,56005],{"class":43},[33,92576,16823],{"class":47},[33,92578,92579,92581,92583,92585],{"class":35,"line":156},[33,92580,73849],{"class":76},[33,92582,52690],{"class":47},[33,92584,61758],{"class":76},[33,92586,80],{"class":47},[33,92588,92589,92591,92593,92595,92597],{"class":35,"line":163},[33,92590,56024],{"class":76},[33,92592,52690],{"class":47},[33,92594,3163],{"class":76},[33,92596,52745],{"class":39},[33,92598,80],{"class":47},[33,92600,92601,92603,92605,92607,92609],{"class":35,"line":169},[33,92602,56038],{"class":76},[33,92604,52690],{"class":47},[33,92606,3163],{"class":76},[33,92608,52745],{"class":39},[33,92610,80],{"class":47},[33,92612,92613,92615,92617,92619],{"class":35,"line":175},[33,92614,56137],{"class":76},[33,92616,52690],{"class":47},[33,92618,91259],{"class":76},[33,92620,80],{"class":47},[33,92622,92623,92625,92627,92629,92631],{"class":35,"line":181},[33,92624,56175],{"class":76},[33,92626,52690],{"class":47},[33,92628,2424],{"class":76},[33,92630,52745],{"class":39},[33,92632,80],{"class":47},[33,92634,92635,92637,92639,92641],{"class":35,"line":196},[33,92636,58669],{"class":76},[33,92638,52690],{"class":47},[33,92640,62095],{"class":76},[33,92642,80],{"class":47},[33,92644,92645,92647,92649,92651],{"class":35,"line":213},[33,92646,58539],{"class":76},[33,92648,52690],{"class":47},[33,92650,52845],{"class":76},[33,92652,80],{"class":47},[33,92654,92655,92657,92659,92661,92663],{"class":35,"line":228},[33,92656,91298],{"class":76},[33,92658,52690],{"class":47},[33,92660,722],{"class":76},[33,92662,52745],{"class":39},[33,92664,80],{"class":47},[33,92666,92667],{"class":35,"line":1345},[33,92668,916],{"class":47},[33,92670,92671,92673,92675],{"class":35,"line":1350},[33,92672,53670],{"class":47},[33,92674,1544],{"class":52553},[33,92676,52560],{"class":47},[33,92678,92679,92681,92683],{"class":35,"line":1359},[33,92680,53038],{"class":47},[33,92682,52587],{"class":52553},[33,92684,52560],{"class":47},[33,92686,92687],{"class":35,"line":1364},[33,92688,160],{"emptyLinePlaceholder":159},[33,92690,92691,92693,92695],{"class":35,"line":1370},[33,92692,875],{"class":47},[33,92694,53053],{"class":52553},[33,92696,52560],{"class":47},[33,92698,92699,92701,92703,92705,92707,92709,92711,92713],{"class":35,"line":1425},[33,92700,53397],{"class":47},[33,92702,52864],{"class":52553},[33,92704,54739],{"class":43},[33,92706,73],{"class":47},[33,92708,54744],{"class":119},[33,92710,56567],{"class":47},[33,92712,52864],{"class":52553},[33,92714,52560],{"class":47},[33,92716,92717,92719,92721,92723,92725,92727,92729,92731],{"class":35,"line":1438},[33,92718,53397],{"class":47},[33,92720,53066],{"class":52553},[33,92722,56492],{"class":43},[33,92724,73],{"class":47},[33,92726,89527],{"class":119},[33,92728,56567],{"class":47},[33,92730,53066],{"class":52553},[33,92732,52560],{"class":47},[33,92734,92735,92737,92739],{"class":35,"line":1451},[33,92736,53397],{"class":47},[33,92738,53066],{"class":52553},[33,92740,52560],{"class":47},[33,92742,92743,92745,92747,92749,92751,92753,92755,92757],{"class":35,"line":1457},[33,92744,12472],{"class":39},[33,92746,88186],{"class":76},[33,92748,14815],{"class":39},[33,92750,55649],{"class":47},[33,92752,55652],{"class":43},[33,92754,345],{"class":47},[33,92756,91399],{"class":119},[33,92758,884],{"class":47},[33,92760,92761,92763,92765,92767],{"class":35,"line":1466},[33,92762,53472],{"class":39},[33,92764,10689],{"class":47},[33,92766,73],{"class":39},[33,92768,48586],{"class":76},[33,92770,92771,92773,92775],{"class":35,"line":1471},[33,92772,71337],{"class":39},[33,92774,91418],{"class":43},[33,92776,12104],{"class":47},[33,92778,92779,92781,92783,92785],{"class":35,"line":1477},[33,92780,91425],{"class":47},[33,92782,73],{"class":39},[33,92784,865],{"class":47},[33,92786,4113],{"class":39},[33,92788,92789],{"class":35,"line":1504},[33,92790,91436],{"class":60},[33,92792,92793],{"class":35,"line":1509},[33,92794,916],{"class":47},[33,92796,92797],{"class":35,"line":1525},[33,92798,91445],{"class":60},[33,92800,92801],{"class":35,"line":1535},[33,92802,92803],{"class":60},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[33,92805,92806],{"class":35,"line":1540},[33,92807,92808],{"class":60},"    \u002F\u002F 1.声明一个定时器变量\n",[33,92810,92811],{"class":35,"line":4027},[33,92812,92813],{"class":60},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[33,92815,92816],{"class":35,"line":4032},[33,92817,92818],{"class":60},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[33,92820,92821],{"class":35,"line":9199},[33,92822,92823],{"class":60},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[33,92825,92826],{"class":35,"line":9223},[33,92827,92828],{"class":60},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[33,92830,92831,92833,92836,92838,92840,92842,92844],{"class":35,"line":9228},[33,92832,71337],{"class":39},[33,92834,92835],{"class":43}," throttle",[33,92837,345],{"class":47},[33,92839,91890],{"class":955},[33,92841,13686],{"class":47},[33,92843,2319],{"class":955},[33,92845,13693],{"class":47},[33,92847,92848,92850],{"class":35,"line":9234},[33,92849,81025],{"class":39},[33,92851,91903],{"class":47},[33,92853,92854,92856,92858],{"class":35,"line":9261},[33,92855,75235],{"class":39},[33,92857,60171],{"class":39},[33,92859,55705],{"class":47},[33,92861,92862,92864,92866,92868],{"class":35,"line":9266},[33,92863,3915],{"class":39},[33,92865,860],{"class":47},[33,92867,1842],{"class":39},[33,92869,92870],{"class":47},"timer) {\n",[33,92872,92873,92876,92878,92880,92882,92884],{"class":35,"line":9272},[33,92874,92875],{"class":47},"          timer ",[33,92877,73],{"class":39},[33,92879,91944],{"class":43},[33,92881,345],{"class":47},[33,92883,55702],{"class":39},[33,92885,55705],{"class":47},[33,92887,92888,92891],{"class":35,"line":9284},[33,92889,92890],{"class":43},"            fn",[33,92892,48],{"class":47},[33,92894,92895],{"class":35,"line":9296},[33,92896,92897],{"class":60},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[33,92899,92900],{"class":35,"line":9308},[33,92901,92902],{"class":60},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[33,92904,92905,92908,92910],{"class":35,"line":10967},[33,92906,92907],{"class":47},"            timer ",[33,92909,73],{"class":39},[33,92911,92912],{"class":76}," null\n",[33,92914,92915],{"class":35,"line":10992},[33,92916,92917],{"class":60},"            \u002F\u002F 不能用clearTimeout(timer)\n",[33,92919,92920],{"class":35,"line":11015},[33,92921,92922],{"class":60},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[33,92924,92925],{"class":35,"line":11039},[33,92926,92927],{"class":47},"          }, t)\n",[33,92929,92930],{"class":35,"line":11044},[33,92931,1334],{"class":47},[33,92933,92934],{"class":35,"line":11049},[33,92935,53651],{"class":47},[33,92937,92938],{"class":35,"line":11054},[33,92939,916],{"class":47},[33,92941,92942,92944,92946,92948,92950,92952,92954,92956,92958],{"class":35,"line":11063},[33,92943,91460],{"class":47},[33,92945,59066],{"class":43},[33,92947,345],{"class":47},[33,92949,91467],{"class":119},[33,92951,13686],{"class":47},[33,92953,92426],{"class":43},[33,92955,91476],{"class":47},[33,92957,66327],{"class":76},[33,92959,31750],{"class":47},[33,92961,92962,92964,92966],{"class":35,"line":11068},[33,92963,53670],{"class":47},[33,92965,53066],{"class":52553},[33,92967,52560],{"class":47},[33,92969,92970,92972,92974],{"class":35,"line":11074},[33,92971,53038],{"class":47},[33,92973,53053],{"class":52553},[33,92975,52560],{"class":47},[33,92977,92978],{"class":35,"line":11095},[33,92979,160],{"emptyLinePlaceholder":159},[33,92981,92982,92984,92986],{"class":35,"line":11101},[33,92983,53038],{"class":47},[33,92985,51888],{"class":52553},[33,92987,52560],{"class":47},[1599,92989,92991],{"id":92990},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[23,92993,92995],{"className":54320,"code":92994,"language":54322,"meta":28,"style":28},"\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",[30,92996,92997,93005,93013,93018,93023,93028,93033,93037,93045],{"__ignoreMap":28},[33,92998,92999,93001,93003],{"class":35,"line":36},[33,93000,875],{"class":47},[33,93002,53053],{"class":52553},[33,93004,52560],{"class":47},[33,93006,93007,93009,93011],{"class":35,"line":51},[33,93008,53397],{"class":47},[33,93010,53066],{"class":52553},[33,93012,52560],{"class":47},[33,93014,93015],{"class":35,"line":57},[33,93016,93017],{"class":47},"    let timer = null\n",[33,93019,93020],{"class":35,"line":64},[33,93021,93022],{"class":47},"    timer = setTimeout(() => {\n",[33,93024,93025],{"class":35,"line":83},[33,93026,93027],{"class":47},"      clearTimeout(timer)\n",[33,93029,93030],{"class":35,"line":89},[33,93031,93032],{"class":47},"      console.log(timer)\n",[33,93034,93035],{"class":35,"line":98},[33,93036,61478],{"class":47},[33,93038,93039,93041,93043],{"class":35,"line":110},[33,93040,53670],{"class":47},[33,93042,53066],{"class":52553},[33,93044,52560],{"class":47},[33,93046,93047,93049,93051],{"class":35,"line":134},[33,93048,53038],{"class":47},[33,93050,53053],{"class":52553},[33,93052,52560],{"class":47},[14,93054,93055],{},"输出为1",[14,93057,93058],{},"在开启的定时器里边写清除定时器",[14,93060,93061],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[1599,93063,93065],{"id":93064},"_4174-节流综合案例","4.17.4 节流综合案例",[14,93067,93068],{},"页面打开，可以记录上一次的视频播放位置",[14,93070,93071],{},[2918,93072],{"alt":28,"src":93073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,93075,93076],{},[2918,93077],{"alt":28,"src":93078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[23,93080,93082],{"className":51886,"code":93081,"language":51888,"meta":28,"style":28},"\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",[30,93083,93084,93094,93108,93112,93120,93134,93154,93174,93196,93209,93217,93223,93233,93243,93253,93257,93261,93268,93281,93293,93297,93301,93311,93323,93337,93341,93345,93352,93362,93375,93387,93397,93407,93423,93435,93439,93443,93451,93461,93473,93483,93493,93503,93507,93511,93521,93532,93536,93544,93552,93556,93564,93579,93594,93609,93630,93638,93646,93661,93683,93691,93706,93732,93758,93784,93792,93800,93819,93827,93832,93851,93856,93874,93879,93884,93892,93897,93911,93919,93924,93941,93945,93950,93972,93976,93984,93992,93996],{"__ignoreMap":28},[33,93085,93086,93088,93090,93092],{"class":35,"line":36},[33,93087,52550],{"class":47},[33,93089,52554],{"class":52553},[33,93091,52557],{"class":43},[33,93093,52560],{"class":47},[33,93095,93096,93098,93100,93102,93104,93106],{"class":35,"line":51},[33,93097,875],{"class":47},[33,93099,51888],{"class":52553},[33,93101,52569],{"class":43},[33,93103,73],{"class":47},[33,93105,52574],{"class":119},[33,93107,52560],{"class":47},[33,93109,93110],{"class":35,"line":57},[33,93111,160],{"emptyLinePlaceholder":159},[33,93113,93114,93116,93118],{"class":35,"line":64},[33,93115,875],{"class":47},[33,93117,52587],{"class":52553},[33,93119,52560],{"class":47},[33,93121,93122,93124,93126,93128,93130,93132],{"class":35,"line":83},[33,93123,53397],{"class":47},[33,93125,52597],{"class":52553},[33,93127,52600],{"class":43},[33,93129,73],{"class":47},[33,93131,52605],{"class":119},[33,93133,60380],{"class":47},[33,93135,93136,93138,93140,93142,93144,93146,93148,93150,93152],{"class":35,"line":89},[33,93137,53397],{"class":47},[33,93139,52597],{"class":52553},[33,93141,52616],{"class":43},[33,93143,73],{"class":47},[33,93145,52621],{"class":119},[33,93147,52624],{"class":43},[33,93149,73],{"class":47},[33,93151,52629],{"class":119},[33,93153,60380],{"class":47},[33,93155,93156,93158,93160,93162,93164,93166,93168,93170,93172],{"class":35,"line":98},[33,93157,53397],{"class":47},[33,93159,52597],{"class":52553},[33,93161,16171],{"class":43},[33,93163,73],{"class":47},[33,93165,52644],{"class":119},[33,93167,52624],{"class":43},[33,93169,73],{"class":47},[33,93171,52651],{"class":119},[33,93173,60380],{"class":47},[33,93175,93176,93178,93180,93182,93184,93187,93189,93191,93194],{"class":35,"line":110},[33,93177,53397],{"class":47},[33,93179,52597],{"class":52553},[33,93181,16171],{"class":43},[33,93183,73],{"class":47},[33,93185,93186],{"class":119},"\"referrer\"",[33,93188,52624],{"class":43},[33,93190,73],{"class":47},[33,93192,93193],{"class":119},"\"never\"",[33,93195,60380],{"class":47},[33,93197,93198,93200,93202,93205,93207],{"class":35,"line":134},[33,93199,53397],{"class":47},[33,93201,52660],{"class":52553},[33,93203,93204],{"class":47},">综合案例\u003C\u002F",[33,93206,52660],{"class":52553},[33,93208,52560],{"class":47},[33,93210,93211,93213,93215],{"class":35,"line":156},[33,93212,53397],{"class":47},[33,93214,1544],{"class":52553},[33,93216,52560],{"class":47},[33,93218,93219,93221],{"class":35,"line":163},[33,93220,184],{"class":52553},[33,93222,16823],{"class":47},[33,93224,93225,93227,93229,93231],{"class":35,"line":169},[33,93226,55948],{"class":76},[33,93228,52690],{"class":47},[33,93230,766],{"class":76},[33,93232,80],{"class":47},[33,93234,93235,93237,93239,93241],{"class":35,"line":175},[33,93236,55959],{"class":76},[33,93238,52690],{"class":47},[33,93240,766],{"class":76},[33,93242,80],{"class":47},[33,93244,93245,93247,93249,93251],{"class":35,"line":181},[33,93246,73849],{"class":76},[33,93248,52690],{"class":47},[33,93250,61758],{"class":76},[33,93252,80],{"class":47},[33,93254,93255],{"class":35,"line":196},[33,93256,916],{"class":47},[33,93258,93259],{"class":35,"line":213},[33,93260,160],{"emptyLinePlaceholder":159},[33,93262,93263,93266],{"class":35,"line":228},[33,93264,93265],{"class":43},"    .container",[33,93267,16823],{"class":47},[33,93269,93270,93272,93274,93277,93279],{"class":35,"line":1345},[33,93271,56024],{"class":76},[33,93273,52690],{"class":47},[33,93275,93276],{"class":76},"1200",[33,93278,52745],{"class":39},[33,93280,80],{"class":47},[33,93282,93283,93285,93287,93289,93291],{"class":35,"line":1350},[33,93284,55959],{"class":76},[33,93286,52690],{"class":47},[33,93288,766],{"class":76},[33,93290,52809],{"class":76},[33,93292,80],{"class":47},[33,93294,93295],{"class":35,"line":1359},[33,93296,916],{"class":47},[33,93298,93299],{"class":35,"line":1364},[33,93300,160],{"emptyLinePlaceholder":159},[33,93302,93303,93306,93309],{"class":35,"line":1370},[33,93304,93305],{"class":43},"    .video",[33,93307,93308],{"class":52553}," video",[33,93310,16823],{"class":47},[33,93312,93313,93315,93317,93319,93321],{"class":35,"line":1425},[33,93314,56024],{"class":76},[33,93316,52690],{"class":47},[33,93318,457],{"class":76},[33,93320,1939],{"class":39},[33,93322,80],{"class":47},[33,93324,93325,93327,93329,93331,93333,93335],{"class":35,"line":1438},[33,93326,55948],{"class":76},[33,93328,52690],{"class":47},[33,93330,1045],{"class":76},[33,93332,52745],{"class":39},[33,93334,5492],{"class":76},[33,93336,80],{"class":47},[33,93338,93339],{"class":35,"line":1451},[33,93340,916],{"class":47},[33,93342,93343],{"class":35,"line":1457},[33,93344,160],{"emptyLinePlaceholder":159},[33,93346,93347,93350],{"class":35,"line":1466},[33,93348,93349],{"class":43},"    .elevator",[33,93351,16823],{"class":47},[33,93353,93354,93356,93358,93360],{"class":35,"line":1471},[33,93355,56012],{"class":76},[33,93357,52690],{"class":47},[33,93359,87486],{"class":76},[33,93361,80],{"class":47},[33,93363,93364,93366,93368,93371,93373],{"class":35,"line":1477},[33,93365,56200],{"class":76},[33,93367,52690],{"class":47},[33,93369,93370],{"class":76},"280",[33,93372,52745],{"class":39},[33,93374,80],{"class":47},[33,93376,93377,93379,93381,93383,93385],{"class":35,"line":1504},[33,93378,87680],{"class":76},[33,93380,52690],{"class":47},[33,93382,1045],{"class":76},[33,93384,52745],{"class":39},[33,93386,80],{"class":47},[33,93388,93389,93391,93393,93395],{"class":35,"line":1509},[33,93390,87493],{"class":76},[33,93392,52690],{"class":47},[33,93394,87498],{"class":76},[33,93396,80],{"class":47},[33,93398,93399,93401,93403,93405],{"class":35,"line":1525},[33,93400,62974],{"class":76},[33,93402,52690],{"class":47},[33,93404,62095],{"class":76},[33,93406,80],{"class":47},[33,93408,93409,93411,93413,93415,93417,93419,93421],{"class":35,"line":1535},[33,93410,63230],{"class":76},[33,93412,52690],{"class":47},[33,93414,701],{"class":76},[33,93416,52745],{"class":39},[33,93418,52774],{"class":76},[33,93420,63497],{"class":76},[33,93422,80],{"class":47},[33,93424,93425,93427,93429,93431,93433],{"class":35,"line":1540},[33,93426,56024],{"class":76},[33,93428,52690],{"class":47},[33,93430,2505],{"class":76},[33,93432,52745],{"class":39},[33,93434,80],{"class":47},[33,93436,93437],{"class":35,"line":4027},[33,93438,916],{"class":47},[33,93440,93441],{"class":35,"line":4032},[33,93442,160],{"emptyLinePlaceholder":159},[33,93444,93445,93447,93449],{"class":35,"line":9199},[33,93446,93349],{"class":43},[33,93448,70],{"class":52553},[33,93450,16823],{"class":47},[33,93452,93453,93455,93457,93459],{"class":35,"line":9223},[33,93454,56262],{"class":76},[33,93456,52690],{"class":47},[33,93458,62122],{"class":76},[33,93460,80],{"class":47},[33,93462,93463,93465,93467,93469,93471],{"class":35,"line":9228},[33,93464,55948],{"class":76},[33,93466,52690],{"class":47},[33,93468,77],{"class":76},[33,93470,52745],{"class":39},[33,93472,80],{"class":47},[33,93474,93475,93477,93479,93481],{"class":35,"line":9234},[33,93476,65223],{"class":76},[33,93478,52690],{"class":47},[33,93480,55990],{"class":76},[33,93482,80],{"class":47},[33,93484,93485,93487,93489,93491],{"class":35,"line":9261},[33,93486,58539],{"class":76},[33,93488,52690],{"class":47},[33,93490,52845],{"class":76},[33,93492,80],{"class":47},[33,93494,93495,93497,93499,93501],{"class":35,"line":9266},[33,93496,58669],{"class":76},[33,93498,52690],{"class":47},[33,93500,63323],{"class":76},[33,93502,80],{"class":47},[33,93504,93505],{"class":35,"line":9272},[33,93506,916],{"class":47},[33,93508,93509],{"class":35,"line":9284},[33,93510,160],{"emptyLinePlaceholder":159},[33,93512,93513,93515,93517,93519],{"class":35,"line":9296},[33,93514,93349],{"class":43},[33,93516,70],{"class":52553},[33,93518,65277],{"class":43},[33,93520,16823],{"class":47},[33,93522,93523,93525,93527,93530],{"class":35,"line":9308},[33,93524,58669],{"class":76},[33,93526,52690],{"class":47},[33,93528,93529],{"class":76},"#1286ff",[33,93531,80],{"class":47},[33,93533,93534],{"class":35,"line":10967},[33,93535,916],{"class":47},[33,93537,93538,93540,93542],{"class":35,"line":10992},[33,93539,53670],{"class":47},[33,93541,1544],{"class":52553},[33,93543,52560],{"class":47},[33,93545,93546,93548,93550],{"class":35,"line":11015},[33,93547,53038],{"class":47},[33,93549,52587],{"class":52553},[33,93551,52560],{"class":47},[33,93553,93554],{"class":35,"line":11039},[33,93555,160],{"emptyLinePlaceholder":159},[33,93557,93558,93560,93562],{"class":35,"line":11044},[33,93559,875],{"class":47},[33,93561,53053],{"class":52553},[33,93563,52560],{"class":47},[33,93565,93566,93568,93570,93572,93574,93577],{"class":35,"line":11049},[33,93567,53397],{"class":47},[33,93569,52864],{"class":52553},[33,93571,54739],{"class":43},[33,93573,73],{"class":47},[33,93575,93576],{"class":119},"\"container\"",[33,93578,52560],{"class":47},[33,93580,93581,93583,93585,93587,93589,93592],{"class":35,"line":11054},[33,93582,52594],{"class":47},[33,93584,52864],{"class":52553},[33,93586,54739],{"class":43},[33,93588,73],{"class":47},[33,93590,93591],{"class":119},"\"header\"",[33,93593,52560],{"class":47},[33,93595,93596,93598,93600,93602,93604,93607],{"class":35,"line":11063},[33,93597,56487],{"class":47},[33,93599,126],{"class":52553},[33,93601,62310],{"class":43},[33,93603,73],{"class":47},[33,93605,93606],{"class":119},"\"http:\u002F\u002Fpip.itcast.cn\"",[33,93608,52560],{"class":47},[33,93610,93611,93613,93615,93617,93619,93622,93624,93626,93628],{"class":35,"line":11068},[33,93612,56555],{"class":47},[33,93614,2918],{"class":52553},[33,93616,56492],{"class":43},[33,93618,73],{"class":47},[33,93620,93621],{"class":119},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[33,93623,56500],{"class":43},[33,93625,73],{"class":47},[33,93627,1520],{"class":119},[33,93629,60380],{"class":47},[33,93631,93632,93634,93636],{"class":35,"line":11074},[33,93633,56660],{"class":47},[33,93635,126],{"class":52553},[33,93637,52560],{"class":47},[33,93639,93640,93642,93644],{"class":35,"line":11095},[33,93641,53029],{"class":47},[33,93643,52864],{"class":52553},[33,93645,52560],{"class":47},[33,93647,93648,93650,93652,93654,93656,93659],{"class":35,"line":11101},[33,93649,52594],{"class":47},[33,93651,52864],{"class":52553},[33,93653,54739],{"class":43},[33,93655,73],{"class":47},[33,93657,93658],{"class":119},"\"video\"",[33,93660,52560],{"class":47},[33,93662,93663,93665,93667,93669,93671,93674,93677,93679,93681],{"class":35,"line":11115},[33,93664,56487],{"class":47},[33,93666,29436],{"class":52553},[33,93668,56492],{"class":43},[33,93670,73],{"class":47},[33,93672,93673],{"class":119},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[33,93675,93676],{"class":43}," controls",[33,93678,56567],{"class":47},[33,93680,29436],{"class":52553},[33,93682,52560],{"class":47},[33,93684,93685,93687,93689],{"class":35,"line":11121},[33,93686,53029],{"class":47},[33,93688,52864],{"class":52553},[33,93690,52560],{"class":47},[33,93692,93693,93695,93697,93699,93701,93704],{"class":35,"line":11148},[33,93694,52594],{"class":47},[33,93696,52864],{"class":52553},[33,93698,54739],{"class":43},[33,93700,73],{"class":47},[33,93702,93703],{"class":119},"\"elevator\"",[33,93705,52560],{"class":47},[33,93707,93708,93710,93712,93714,93716,93718,93721,93723,93725,93728,93730],{"class":35,"line":11157},[33,93709,56487],{"class":47},[33,93711,126],{"class":52553},[33,93713,62310],{"class":43},[33,93715,73],{"class":47},[33,93717,65489],{"class":119},[33,93719,93720],{"class":43}," data-ref",[33,93722,73],{"class":47},[33,93724,93658],{"class":119},[33,93726,93727],{"class":47},">视频介绍\u003C\u002F",[33,93729,126],{"class":52553},[33,93731,52560],{"class":47},[33,93733,93734,93736,93738,93740,93742,93744,93746,93748,93751,93754,93756],{"class":35,"line":11163},[33,93735,56487],{"class":47},[33,93737,126],{"class":52553},[33,93739,62310],{"class":43},[33,93741,73],{"class":47},[33,93743,65489],{"class":119},[33,93745,93720],{"class":43},[33,93747,73],{"class":47},[33,93749,93750],{"class":119},"\"intro\"",[33,93752,93753],{"class":47},">课程简介\u003C\u002F",[33,93755,126],{"class":52553},[33,93757,52560],{"class":47},[33,93759,93760,93762,93764,93766,93768,93770,93772,93774,93777,93780,93782],{"class":35,"line":11171},[33,93761,56487],{"class":47},[33,93763,126],{"class":52553},[33,93765,62310],{"class":43},[33,93767,73],{"class":47},[33,93769,65489],{"class":119},[33,93771,93720],{"class":43},[33,93773,73],{"class":47},[33,93775,93776],{"class":119},"\"outline\"",[33,93778,93779],{"class":47},">评论列表\u003C\u002F",[33,93781,126],{"class":52553},[33,93783,52560],{"class":47},[33,93785,93786,93788,93790],{"class":35,"line":11176},[33,93787,53029],{"class":47},[33,93789,52864],{"class":52553},[33,93791,52560],{"class":47},[33,93793,93794,93796,93798],{"class":35,"line":17855},[33,93795,53670],{"class":47},[33,93797,52864],{"class":52553},[33,93799,52560],{"class":47},[33,93801,93802,93804,93806,93808,93810,93813,93815,93817],{"class":35,"line":17861},[33,93803,53397],{"class":47},[33,93805,53066],{"class":52553},[33,93807,56492],{"class":43},[33,93809,73],{"class":47},[33,93811,93812],{"class":119},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[33,93814,56567],{"class":47},[33,93816,53066],{"class":52553},[33,93818,52560],{"class":47},[33,93820,93821,93823,93825],{"class":35,"line":17884},[33,93822,53397],{"class":47},[33,93824,53066],{"class":52553},[33,93826,52560],{"class":47},[33,93828,93829],{"class":35,"line":17890},[33,93830,93831],{"class":60},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[33,93833,93834,93836,93838,93840,93842,93844,93846,93849],{"class":35,"line":17913},[33,93835,12472],{"class":39},[33,93837,93308],{"class":76},[33,93839,14815],{"class":39},[33,93841,55649],{"class":47},[33,93843,55652],{"class":43},[33,93845,345],{"class":47},[33,93847,93848],{"class":119},"'video'",[33,93850,884],{"class":47},[33,93852,93853],{"class":35,"line":17927},[33,93854,93855],{"class":60},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[33,93857,93858,93861,93863,93865,93867,93870,93872],{"class":35,"line":17947},[33,93859,93860],{"class":47},"    video.ontimeupdate ",[33,93862,73],{"class":39},[33,93864,89608],{"class":47},[33,93866,92426],{"class":43},[33,93868,93869],{"class":47},"(() ",[33,93871,85975],{"class":39},[33,93873,16823],{"class":47},[33,93875,93876],{"class":35,"line":17953},[33,93877,93878],{"class":60},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[33,93880,93881],{"class":35,"line":17964},[33,93882,93883],{"class":60},"      \u002F\u002F 控制台输出当前的时间\n",[33,93885,93886,93889],{"class":35,"line":17987},[33,93887,93888],{"class":60},"      \u002F\u002F console.log(video.currentTime)",[33,93890,93891],{"class":60},"  \u002F\u002F获得当前的视频时间\n",[33,93893,93894],{"class":35,"line":18009},[33,93895,93896],{"class":60},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[33,93898,93899,93901,93903,93905,93908],{"class":35,"line":18014},[33,93900,75936],{"class":47},[33,93902,72907],{"class":43},[33,93904,345],{"class":47},[33,93906,93907],{"class":119},"'currentTime'",[33,93909,93910],{"class":47},", video.currentTime)\n",[33,93912,93913,93915,93917],{"class":35,"line":18020},[33,93914,55788],{"class":47},[33,93916,191],{"class":76},[33,93918,884],{"class":47},[33,93920,93921],{"class":35,"line":18034},[33,93922,93923],{"class":60},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[33,93925,93926,93929,93932,93934,93937,93939],{"class":35,"line":18047},[33,93927,93928],{"class":47},"    video.",[33,93930,93931],{"class":43},"onloadeddata",[33,93933,14815],{"class":39},[33,93935,93936],{"class":47}," () ",[33,93938,85975],{"class":39},[33,93940,16823],{"class":47},[33,93942,93943],{"class":35,"line":18052},[33,93944,61265],{"class":60},[33,93946,93947],{"class":35,"line":18066},[33,93948,93949],{"class":60},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[33,93951,93952,93955,93957,93960,93962,93964,93966,93968,93970],{"class":35,"line":18071},[33,93953,93954],{"class":47},"      video.currentTime ",[33,93956,73],{"class":39},[33,93958,93959],{"class":47}," localStorage.",[33,93961,72938],{"class":43},[33,93963,345],{"class":47},[33,93965,93907],{"class":119},[33,93967,14965],{"class":47},[33,93969,72610],{"class":39},[33,93971,48586],{"class":76},[33,93973,93974],{"class":35,"line":18077},[33,93975,916],{"class":47},[33,93977,93978,93980,93982],{"class":35,"line":18082},[33,93979,53670],{"class":47},[33,93981,53066],{"class":52553},[33,93983,52560],{"class":47},[33,93985,93986,93988,93990],{"class":35,"line":18096},[33,93987,53038],{"class":47},[33,93989,53053],{"class":52553},[33,93991,52560],{"class":47},[33,93993,93994],{"class":35,"line":18101},[33,93995,160],{"emptyLinePlaceholder":159},[33,93997,93998,94000,94002],{"class":35,"line":18106},[33,93999,53038],{"class":47},[33,94001,51888],{"class":52553},[33,94003,52560],{"class":47},[1544,94005,94006],{},"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":28,"searchDepth":51,"depth":51,"links":94008},[94009,94014,94018,94019,94020,94025,94030,94031,94032,94033,94040,94045,94046,94056,94060,94061,94065],{"id":77944,"depth":51,"text":77945,"children":94010},[94011,94012,94013],{"id":77948,"depth":57,"text":77949},{"id":77973,"depth":57,"text":77974},{"id":77985,"depth":57,"text":77986},{"id":77997,"depth":51,"text":77998,"children":94015},[94016,94017],{"id":78001,"depth":57,"text":78002},{"id":78016,"depth":57,"text":78017},{"id":78068,"depth":51,"text":78069},{"id":78112,"depth":51,"text":78113},{"id":78129,"depth":51,"text":78130,"children":94021},[94022,94023,94024],{"id":78133,"depth":57,"text":78134},{"id":78146,"depth":57,"text":78147},{"id":78251,"depth":57,"text":78252},{"id":78540,"depth":51,"text":78541,"children":94026},[94027,94028,94029],{"id":78544,"depth":57,"text":78545},{"id":78987,"depth":57,"text":78988},{"id":79398,"depth":57,"text":79399},{"id":79461,"depth":51,"text":79462},{"id":79540,"depth":51,"text":79541},{"id":79633,"depth":51,"text":79634},{"id":81478,"depth":51,"text":81479,"children":94034},[94035,94036,94037,94038,94039],{"id":81482,"depth":57,"text":81483},{"id":81494,"depth":57,"text":81495},{"id":81713,"depth":57,"text":81714},{"id":81731,"depth":57,"text":81732},{"id":81791,"depth":57,"text":81792},{"id":86059,"depth":51,"text":86060,"children":94041},[94042,94043,94044],{"id":86063,"depth":57,"text":86064},{"id":86081,"depth":57,"text":86082},{"id":86107,"depth":57,"text":86108},{"id":86116,"depth":51,"text":86117},{"id":86138,"depth":51,"text":86139,"children":94047},[94048,94049,94050,94051,94052,94053,94054,94055],{"id":86142,"depth":57,"text":86143},{"id":86403,"depth":57,"text":86404},{"id":86589,"depth":57,"text":86590},{"id":86956,"depth":57,"text":86957},{"id":87072,"depth":57,"text":87073},{"id":87108,"depth":57,"text":87109},{"id":87155,"depth":57,"text":87156},{"id":87189,"depth":57,"text":87190},{"id":88552,"depth":51,"text":88553,"children":94057},[94058,94059],{"id":88556,"depth":57,"text":88557},{"id":88593,"depth":57,"text":88594},{"id":89948,"depth":51,"text":89949},{"id":90319,"depth":51,"text":90320,"children":94062},[94063,94064],{"id":90323,"depth":57,"text":90324},{"id":90357,"depth":57,"text":90358},{"id":91086,"depth":51,"text":91087,"children":94066},[94067,94068,94069,94070],{"id":91090,"depth":57,"text":91091},{"id":92048,"depth":57,"text":92049},{"id":92990,"depth":57,"text":92991},{"id":93064,"depth":57,"text":93065},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77933,"description":24628},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94077,"title":94078,"body":94079,"description":94090,"extension":1557,"meta":94091,"navigation":159,"path":94093,"seo":94094,"stem":94095,"__hash__":94096},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94080,"toc":94088},[94081],[14,94082,94083,94084],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[126,94085,94086],{"href":94086,"rel":94087},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25117],{"title":28,"searchDepth":51,"depth":51,"links":94089},[],"三件套第三套学习",{"category":94092},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94078,"description":94090},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94098,"title":94099,"body":94100,"description":24628,"extension":1557,"meta":94205,"navigation":159,"path":94206,"seo":94207,"stem":94208,"__hash__":94209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94101,"toc":94200},[94102,94109,94112,94115,94118,94122,94131,94134,94137,94141,94150,94153,94157,94160,94180,94183,94197],[14,94103,94104],{},[126,94105,94108],{"href":94106,"rel":94107},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25117],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94110,94099],{"id":94111},"_1安装",[14,94113,94114],{},"numpy是科学计算基础库,底层是C语言",[14,94116,94117],{},"三种方式：",[18,94119,94121],{"id":94120},"_11-通过pip安装","1.1 通过pip安装",[23,94123,94125],{"className":31631,"code":94124,"language":31633,"meta":28,"style":28},"pip install numpy\n",[30,94126,94127],{"__ignoreMap":28},[33,94128,94129],{"class":35,"line":36},[33,94130,94124],{"class":47},[14,94132,94133],{},"首选方式，自动处理依赖项",[14,94135,94136],{},"在提示系统命令符中使用cmd",[18,94138,94140],{"id":94139},"_12-通过anaconda安装","1.2 通过Anaconda安装",[23,94142,94144],{"className":31631,"code":94143,"language":31633,"meta":28,"style":28},"conda install numpy\n",[30,94145,94146],{"__ignoreMap":28},[33,94147,94148],{"class":35,"line":36},[33,94149,94143],{"class":47},[14,94151,94152],{},"自动解决环境依赖",[18,94154,94156],{"id":94155},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,94158,94159],{},"对于Debian\u002FUbuntu",[23,94161,94163],{"className":31631,"code":94162,"language":31633,"meta":28,"style":28},"sudo apt-get install python3-numpy\n",[30,94164,94165],{"__ignoreMap":28},[33,94166,94167,94170,94172,94175,94177],{"class":35,"line":36},[33,94168,94169],{"class":47},"sudo apt",[33,94171,1199],{"class":39},[33,94173,94174],{"class":47},"get install python3",[33,94176,1199],{"class":39},[33,94178,94179],{"class":47},"numpy\n",[14,94181,94182],{},"对于Fedora:",[23,94184,94186],{"className":31631,"code":94185,"language":31633,"meta":28,"style":28},"sudo dnf install python3-numpy\n",[30,94187,94188],{"__ignoreMap":28},[33,94189,94190,94193,94195],{"class":35,"line":36},[33,94191,94192],{"class":47},"sudo dnf install python3",[33,94194,1199],{"class":39},[33,94196,94179],{"class":47},[1544,94198,94199],{},"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":28,"searchDepth":51,"depth":51,"links":94201},[94202,94203,94204],{"id":94120,"depth":51,"text":94121},{"id":94139,"depth":51,"text":94140},{"id":94155,"depth":51,"text":94156},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94099,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94211,"title":94212,"body":94213,"description":24628,"extension":1557,"meta":94326,"navigation":159,"path":94327,"seo":94328,"stem":94329,"__hash__":94330},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94214,"toc":94324},[94215,94218,94221,94224,94227,94230,94233,94236,94239,94242,94318,94321],[10,94216,94212],{"id":94217},"_10算数函数",[14,94219,94220],{},"加减乘除运算跟python基础语法没区别",[14,94222,94223],{},"除了python那种方法外还可以使用函数",[14,94225,94226],{},"加：np.add(a,b)",[14,94228,94229],{},"减：np.subtract(a,b)",[14,94231,94232],{},"乘：np.multiply(a,b)",[14,94234,94235],{},"除：np.divide(a,b) == a\u002Fb",[14,94237,94238],{},"取余：np.mod(a,b) == a%b",[14,94240,94241],{},"必须会的用法：",[23,94243,94245],{"className":31631,"code":94244,"language":31633,"meta":28,"style":28},"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",[30,94246,94247,94269,94290,94300,94313],{"__ignoreMap":28},[33,94248,94249,94251,94253,94256,94258,94261,94263,94265,94267],{"class":35,"line":36},[33,94250,126],{"class":47},[33,94252,73],{"class":39},[33,94254,94255],{"class":47},"np.arange(",[33,94257,742],{"class":76},[33,94259,94260],{"class":47},").reshape(",[33,94262,712],{"class":76},[33,94264,704],{"class":47},[33,94266,712],{"class":76},[33,94268,884],{"class":47},[33,94270,94271,94273,94275,94278,94280,94282,94284,94286,94288],{"class":35,"line":51},[33,94272,1094],{"class":47},[33,94274,73],{"class":39},[33,94276,94277],{"class":47},"np.array([",[33,94279,77],{"class":76},[33,94281,704],{"class":47},[33,94283,77],{"class":76},[33,94285,704],{"class":47},[33,94287,77],{"class":76},[33,94289,1276],{"class":47},[33,94291,94292,94295,94297],{"class":35,"line":57},[33,94293,94294],{"class":47},"result",[33,94296,73],{"class":39},[33,94298,94299],{"class":47},"np.empty_like(a)\n",[33,94301,94302,94305,94308,94310],{"class":35,"line":64},[33,94303,94304],{"class":47},"np.add(a,b,",[33,94306,94307],{"class":955},"out",[33,94309,73],{"class":39},[33,94311,94312],{"class":47},"result)\n",[33,94314,94315],{"class":35,"line":83},[33,94316,94317],{"class":47},"result\n",[14,94319,94320],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1544,94322,94323],{},"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":28,"searchDepth":51,"depth":51,"links":94325},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94212,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94332,"title":94333,"body":94334,"description":24628,"extension":1557,"meta":95096,"navigation":159,"path":95097,"seo":95098,"stem":95099,"__hash__":95100},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94335,"toc":95083},[94336,94339,94342,94345,94349,94388,94392,94436,94496,94500,94503,94542,94545,94590,94594,94630,94634,94703,94707,94771,94775,94778,94781,94784,94787,94823,94827,94867,94871,94943,94946,94950,95013,95017,95080],[10,94337,94333],{"id":94338},"_11统计函数",[14,94340,94341],{},"sum max min mean",[14,94343,94344],{},"这些有axis参数，可以指定方向",[18,94346,94348],{"id":94347},"_111-sum求和函数","11.1 sum()求和函数",[23,94350,94352],{"className":31631,"code":94351,"language":31633,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[30,94353,94354,94359,94380],{"__ignoreMap":28},[33,94355,94356],{"class":35,"line":36},[33,94357,94358],{"class":60},"#创建一维数组\n",[33,94360,94361,94363,94365,94368,94370,94372,94374,94376,94378],{"class":35,"line":51},[33,94362,126],{"class":47},[33,94364,73],{"class":39},[33,94366,94367],{"class":47},"np.random.randint(",[33,94369,701],{"class":76},[33,94371,704],{"class":47},[33,94373,457],{"class":76},[33,94375,704],{"class":47},[33,94377,1045],{"class":76},[33,94379,884],{"class":47},[33,94381,94382,94385],{"class":35,"line":57},[33,94383,94384],{"class":47},"np.sum(a)",[33,94386,94387],{"class":60},"#求和\n",[18,94389,94391],{"id":94390},"_112-max求最大值函数","11.2 max()求最大值函数",[23,94393,94395],{"className":31631,"code":94394,"language":31633,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[30,94396,94397,94401,94421,94426,94431],{"__ignoreMap":28},[33,94398,94399],{"class":35,"line":36},[33,94400,94358],{"class":60},[33,94402,94403,94405,94407,94409,94411,94413,94415,94417,94419],{"class":35,"line":51},[33,94404,126],{"class":47},[33,94406,73],{"class":39},[33,94408,94367],{"class":47},[33,94410,701],{"class":76},[33,94412,704],{"class":47},[33,94414,457],{"class":76},[33,94416,704],{"class":47},[33,94418,1045],{"class":76},[33,94420,884],{"class":47},[33,94422,94423],{"class":35,"line":57},[33,94424,94425],{"class":47},"np.max(a)\n",[33,94427,94428],{"class":35,"line":64},[33,94429,94430],{"class":60},"#最大索引(求最大元素的索引)arg\n",[33,94432,94433],{"class":35,"line":83},[33,94434,94435],{"class":47},"np.argmax(a)\n",[23,94437,94439],{"className":31631,"code":94438,"language":31633,"meta":28,"style":28},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[30,94440,94441,94462,94482,94486],{"__ignoreMap":28},[33,94442,94443,94445,94447,94450,94452,94454,94456,94458,94460],{"class":35,"line":36},[33,94444,12170],{"class":47},[33,94446,73],{"class":39},[33,94448,94449],{"class":47}," np.array([",[33,94451,701],{"class":76},[33,94453,13686],{"class":47},[33,94455,722],{"class":76},[33,94457,13686],{"class":47},[33,94459,712],{"class":76},[33,94461,1276],{"class":47},[33,94463,94464,94466,94468,94470,94472,94474,94476,94478,94480],{"class":35,"line":51},[33,94465,12196],{"class":47},[33,94467,73],{"class":39},[33,94469,94449],{"class":47},[33,94471,712],{"class":76},[33,94473,13686],{"class":47},[33,94475,707],{"class":76},[33,94477,13686],{"class":47},[33,94479,717],{"class":76},[33,94481,1276],{"class":47},[33,94483,94484],{"class":35,"line":57},[33,94485,160],{"emptyLinePlaceholder":159},[33,94487,94488,94490,94493],{"class":35,"line":64},[33,94489,31668],{"class":76},[33,94491,94492],{"class":47},"(np.maximum(a, b))   ",[33,94494,94495],{"class":60},"# [3 5 4]，每个位置上取较大值\n",[18,94497,94499],{"id":94498},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,94501,94502],{},"①一维数组：",[23,94504,94506],{"className":31631,"code":94505,"language":31633,"meta":28,"style":28},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[30,94507,94508,94512,94532,94537],{"__ignoreMap":28},[33,94509,94510],{"class":35,"line":36},[33,94511,94358],{"class":60},[33,94513,94514,94516,94518,94520,94522,94524,94526,94528,94530],{"class":35,"line":51},[33,94515,126],{"class":47},[33,94517,73],{"class":39},[33,94519,94367],{"class":47},[33,94521,701],{"class":76},[33,94523,704],{"class":47},[33,94525,457],{"class":76},[33,94527,704],{"class":47},[33,94529,1045],{"class":76},[33,94531,884],{"class":47},[33,94533,94534],{"class":35,"line":57},[33,94535,94536],{"class":60},"#求平均值\n",[33,94538,94539],{"class":35,"line":64},[33,94540,94541],{"class":47},"np.mean(a)\n",[14,94543,94544],{},"②二维数组",[23,94546,94548],{"className":31631,"code":94547,"language":31633,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[30,94549,94550,94555,94580,94585],{"__ignoreMap":28},[33,94551,94552],{"class":35,"line":36},[33,94553,94554],{"class":60},"#二维数组\n",[33,94556,94557,94560,94562,94564,94566,94568,94570,94572,94574,94576,94578],{"class":35,"line":51},[33,94558,94559],{"class":47},"aa",[33,94561,73],{"class":39},[33,94563,94255],{"class":47},[33,94565,701],{"class":76},[33,94567,704],{"class":47},[33,94569,2124],{"class":76},[33,94571,94260],{"class":47},[33,94573,712],{"class":76},[33,94575,704],{"class":47},[33,94577,717],{"class":76},[33,94579,884],{"class":47},[33,94581,94582],{"class":35,"line":57},[33,94583,94584],{"class":60},"#对数组中的所有数求平均\n",[33,94586,94587],{"class":35,"line":64},[33,94588,94589],{"class":47},"np.mean(aa)\n",[18,94591,94593],{"id":94592},"_114-median求中位数函数","11.4 median()求中位数函数",[23,94595,94597],{"className":31631,"code":94596,"language":31633,"meta":28,"style":28},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[30,94598,94599,94604,94620,94625],{"__ignoreMap":28},[33,94600,94601],{"class":35,"line":36},[33,94602,94603],{"class":60},"#求中位数\n",[33,94605,94606,94608,94610,94612,94614,94616,94618],{"class":35,"line":51},[33,94607,1094],{"class":47},[33,94609,73],{"class":39},[33,94611,94255],{"class":47},[33,94613,701],{"class":76},[33,94615,704],{"class":47},[33,94617,77],{"class":76},[33,94619,884],{"class":47},[33,94621,94622],{"class":35,"line":57},[33,94623,94624],{"class":47},"np.median(b)\n",[33,94626,94627],{"class":35,"line":64},[33,94628,94629],{"class":60},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[18,94631,94633],{"id":94632},"_115-power求幂运算函数","11.5 power()求幂运算函数",[23,94635,94637],{"className":31631,"code":94636,"language":31633,"meta":28,"style":28},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[30,94638,94639,94655,94660,94665,94674,94679,94688],{"__ignoreMap":28},[33,94640,94641,94643,94645,94647,94649,94651,94653],{"class":35,"line":36},[33,94642,1094],{"class":47},[33,94644,73],{"class":39},[33,94646,94255],{"class":47},[33,94648,701],{"class":76},[33,94650,704],{"class":47},[33,94652,77],{"class":76},[33,94654,884],{"class":47},[33,94656,94657],{"class":35,"line":51},[33,94658,94659],{"class":60},"#幂运算\n",[33,94661,94662],{"class":35,"line":57},[33,94663,94664],{"class":60},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[33,94666,94667,94670,94672],{"class":35,"line":64},[33,94668,94669],{"class":47},"np.power(b,",[33,94671,707],{"class":76},[33,94673,884],{"class":47},[33,94675,94676],{"class":35,"line":83},[33,94677,94678],{"class":60},"#或者以下代码，将数据存储起来\n",[33,94680,94681,94683,94685],{"class":35,"line":89},[33,94682,2444],{"class":47},[33,94684,73],{"class":39},[33,94686,94687],{"class":47},"np.empty_like(b)\n",[33,94689,94690,94692,94694,94696,94698,94700],{"class":35,"line":98},[33,94691,94669],{"class":47},[33,94693,707],{"class":76},[33,94695,704],{"class":47},[33,94697,94307],{"class":955},[33,94699,73],{"class":39},[33,94701,94702],{"class":47},"y)\n",[18,94704,94706],{"id":94705},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[23,94708,94710],{"className":31631,"code":94709,"language":31633,"meta":28,"style":28},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[30,94711,94712,94728,94733,94738,94742,94760],{"__ignoreMap":28},[33,94713,94714,94716,94718,94720,94722,94724,94726],{"class":35,"line":36},[33,94715,1094],{"class":47},[33,94717,73],{"class":39},[33,94719,94255],{"class":47},[33,94721,701],{"class":76},[33,94723,704],{"class":47},[33,94725,77],{"class":76},[33,94727,884],{"class":47},[33,94729,94730],{"class":35,"line":51},[33,94731,94732],{"class":60},"#开方\n",[33,94734,94735],{"class":35,"line":57},[33,94736,94737],{"class":47},"np.sqrt(b)\n",[33,94739,94740],{"class":35,"line":64},[33,94741,94678],{"class":60},[33,94743,94744,94746,94748,94751,94754,94756,94758],{"class":35,"line":83},[33,94745,2444],{"class":47},[33,94747,73],{"class":39},[33,94749,94750],{"class":47},"np.empty_like(b,",[33,94752,94753],{"class":955},"dtype",[33,94755,73],{"class":39},[33,94757,1666],{"class":76},[33,94759,884],{"class":47},[33,94761,94762,94765,94767,94769],{"class":35,"line":89},[33,94763,94764],{"class":47},"np.sqrt(b,",[33,94766,94307],{"class":955},[33,94768,73],{"class":39},[33,94770,94702],{"class":47},[18,94772,94774],{"id":94773},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,94776,94777],{},"对数组中的元素累计求和，可指定轴",[14,94779,94780],{},"#累计求和的意思是：",[14,94782,94783],{},"a = np.array([1, 2, 3, 4])",[14,94785,94786],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[23,94788,94790],{"className":31631,"code":94789,"language":31633,"meta":28,"style":28},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[30,94791,94792,94808,94813,94818],{"__ignoreMap":28},[33,94793,94794,94796,94798,94800,94802,94804,94806],{"class":35,"line":36},[33,94795,1094],{"class":47},[33,94797,73],{"class":39},[33,94799,94255],{"class":47},[33,94801,701],{"class":76},[33,94803,704],{"class":47},[33,94805,77],{"class":76},[33,94807,884],{"class":47},[33,94809,94810],{"class":35,"line":51},[33,94811,94812],{"class":47},"np.cumsum(b)\n",[33,94814,94815],{"class":35,"line":57},[33,94816,94817],{"class":60},"#结果：\n",[33,94819,94820],{"class":35,"line":64},[33,94821,94822],{"class":60},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[18,94824,94826],{"id":94825},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[23,94828,94830],{"className":31631,"code":94829,"language":31633,"meta":28,"style":28},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[30,94831,94832,94848,94853,94858,94862],{"__ignoreMap":28},[33,94833,94834,94836,94838,94840,94842,94844,94846],{"class":35,"line":36},[33,94835,1094],{"class":47},[33,94837,73],{"class":39},[33,94839,94255],{"class":47},[33,94841,701],{"class":76},[33,94843,704],{"class":47},[33,94845,77],{"class":76},[33,94847,884],{"class":47},[33,94849,94850],{"class":35,"line":51},[33,94851,94852],{"class":60},"#对数组中的元素累计求积，可指定轴\n",[33,94854,94855],{"class":35,"line":57},[33,94856,94857],{"class":47},"np.cumprod(b)\n",[33,94859,94860],{"class":35,"line":64},[33,94861,94817],{"class":60},[33,94863,94864],{"class":35,"line":83},[33,94865,94866],{"class":60},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[18,94868,94870],{"id":94869},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[23,94872,94874],{"className":31631,"code":94873,"language":31633,"meta":28,"style":28},"#删除数组中的重复数据，并对数据进行排序\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",[30,94875,94876,94881,94929,94934,94938],{"__ignoreMap":28},[33,94877,94878],{"class":35,"line":36},[33,94879,94880],{"class":60},"#删除数组中的重复数据，并对数据进行排序\n",[33,94882,94883,94885,94887,94889,94891,94893,94895,94897,94899,94901,94903,94905,94907,94909,94911,94913,94915,94917,94919,94921,94923,94925,94927],{"class":35,"line":51},[33,94884,126],{"class":47},[33,94886,73],{"class":39},[33,94888,94277],{"class":47},[33,94890,701],{"class":76},[33,94892,704],{"class":47},[33,94894,707],{"class":76},[33,94896,704],{"class":47},[33,94898,712],{"class":76},[33,94900,704],{"class":47},[33,94902,2099],{"class":76},[33,94904,704],{"class":47},[33,94906,712],{"class":76},[33,94908,704],{"class":47},[33,94910,77],{"class":76},[33,94912,704],{"class":47},[33,94914,1814],{"class":76},[33,94916,704],{"class":47},[33,94918,766],{"class":76},[33,94920,704],{"class":47},[33,94922,2374],{"class":76},[33,94924,704],{"class":47},[33,94926,717],{"class":76},[33,94928,1276],{"class":47},[33,94930,94931],{"class":35,"line":57},[33,94932,94933],{"class":47},"np.unique(a)\n",[33,94935,94936],{"class":35,"line":64},[33,94937,94817],{"class":60},[33,94939,94940],{"class":35,"line":83},[33,94941,94942],{"class":60},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,94944,94945],{},"升序形式排序",[18,94947,94949],{"id":94948},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[23,94951,94953],{"className":31631,"code":94952,"language":31633,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[30,94954,94955,95003,95008],{"__ignoreMap":28},[33,94956,94957,94959,94961,94963,94965,94967,94969,94971,94973,94975,94977,94979,94981,94983,94985,94987,94989,94991,94993,94995,94997,94999,95001],{"class":35,"line":36},[33,94958,126],{"class":47},[33,94960,73],{"class":39},[33,94962,94277],{"class":47},[33,94964,701],{"class":76},[33,94966,704],{"class":47},[33,94968,707],{"class":76},[33,94970,704],{"class":47},[33,94972,712],{"class":76},[33,94974,704],{"class":47},[33,94976,2099],{"class":76},[33,94978,704],{"class":47},[33,94980,712],{"class":76},[33,94982,704],{"class":47},[33,94984,77],{"class":76},[33,94986,704],{"class":47},[33,94988,1814],{"class":76},[33,94990,704],{"class":47},[33,94992,766],{"class":76},[33,94994,704],{"class":47},[33,94996,2374],{"class":76},[33,94998,704],{"class":47},[33,95000,717],{"class":76},[33,95002,1276],{"class":47},[33,95004,95005],{"class":35,"line":51},[33,95006,95007],{"class":60},"#返回数组中非零元素的索引\n",[33,95009,95010],{"class":35,"line":57},[33,95011,95012],{"class":47},"np.nonzero(a)\n",[18,95014,95016],{"id":95015},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[23,95018,95020],{"className":31631,"code":95019,"language":31633,"meta":28,"style":28},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[30,95021,95022,95070,95075],{"__ignoreMap":28},[33,95023,95024,95026,95028,95030,95032,95034,95036,95038,95040,95042,95044,95046,95048,95050,95052,95054,95056,95058,95060,95062,95064,95066,95068],{"class":35,"line":36},[33,95025,126],{"class":47},[33,95027,73],{"class":39},[33,95029,94277],{"class":47},[33,95031,701],{"class":76},[33,95033,704],{"class":47},[33,95035,707],{"class":76},[33,95037,704],{"class":47},[33,95039,712],{"class":76},[33,95041,704],{"class":47},[33,95043,2099],{"class":76},[33,95045,704],{"class":47},[33,95047,712],{"class":76},[33,95049,704],{"class":47},[33,95051,77],{"class":76},[33,95053,704],{"class":47},[33,95055,1814],{"class":76},[33,95057,704],{"class":47},[33,95059,766],{"class":76},[33,95061,704],{"class":47},[33,95063,2374],{"class":76},[33,95065,704],{"class":47},[33,95067,717],{"class":76},[33,95069,1276],{"class":47},[33,95071,95072],{"class":35,"line":51},[33,95073,95074],{"class":60},"#计算一组数中最大值与最小值的差，可指定轴\n",[33,95076,95077],{"class":35,"line":57},[33,95078,95079],{"class":47},"np.ptp(a)\n",[1544,95081,95082],{},"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":28,"searchDepth":51,"depth":51,"links":95084},[95085,95086,95087,95088,95089,95090,95091,95092,95093,95094,95095],{"id":94347,"depth":51,"text":94348},{"id":94390,"depth":51,"text":94391},{"id":94498,"depth":51,"text":94499},{"id":94592,"depth":51,"text":94593},{"id":94632,"depth":51,"text":94633},{"id":94705,"depth":51,"text":94706},{"id":94773,"depth":51,"text":94774},{"id":94825,"depth":51,"text":94826},{"id":94869,"depth":51,"text":94870},{"id":94948,"depth":51,"text":94949},{"id":95015,"depth":51,"text":95016},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94333,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95102,"title":95103,"body":95104,"description":24628,"extension":1557,"meta":95759,"navigation":159,"path":95760,"seo":95761,"stem":95762,"__hash__":95763},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95105,"toc":95747},[95106,95109,95113,95116,95332,95336,95339,95548,95552,95618,95623,95627,95630,95633,95671,95675,95678,95683,95687,95690,95693,95698,95702,95705,95709,95712,95715,95720,95724,95727,95730,95735,95739,95744],[10,95107,95103],{"id":95108},"_12其他常用函数",[18,95110,95112],{"id":95111},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,95114,95115],{},"将数组的数据按照行列复制扩展",[23,95117,95119],{"className":31631,"code":95118,"language":31633,"meta":28,"style":28},"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",[30,95120,95121,95137,95146,95150,95155,95160,95173,95177,95182,95187,95192,95196,95201,95225,95237,95241,95245,95250,95255,95260,95265,95269,95282,95286,95290,95295,95300,95305,95310,95315,95319,95323,95328],{"__ignoreMap":28},[33,95122,95123,95125,95127,95129,95131,95133,95135],{"class":35,"line":36},[33,95124,126],{"class":47},[33,95126,73],{"class":39},[33,95128,94255],{"class":47},[33,95130,701],{"class":76},[33,95132,704],{"class":47},[33,95134,722],{"class":76},[33,95136,884],{"class":47},[33,95138,95139,95142,95144],{"class":35,"line":51},[33,95140,95141],{"class":47},"np.tile(a,",[33,95143,707],{"class":76},[33,95145,884],{"class":47},[33,95147,95148],{"class":35,"line":57},[33,95149,94817],{"class":60},[33,95151,95152],{"class":35,"line":64},[33,95153,95154],{"class":60},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[33,95156,95157],{"class":35,"line":83},[33,95158,95159],{"class":60},"#行复制两次，列复制三次\n",[33,95161,95162,95165,95167,95169,95171],{"class":35,"line":89},[33,95163,95164],{"class":47},"np.tile(a,(",[33,95166,707],{"class":76},[33,95168,704],{"class":47},[33,95170,712],{"class":76},[33,95172,31750],{"class":47},[33,95174,95175],{"class":35,"line":98},[33,95176,94817],{"class":60},[33,95178,95179],{"class":35,"line":110},[33,95180,95181],{"class":119},"'''\n",[33,95183,95184],{"class":35,"line":134},[33,95185,95186],{"class":119},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[33,95188,95189],{"class":35,"line":156},[33,95190,95191],{"class":119},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[33,95193,95194],{"class":35,"line":163},[33,95195,95181],{"class":119},[33,95197,95198],{"class":35,"line":169},[33,95199,95200],{"class":60},"#创建二维数组\n",[33,95202,95203,95205,95207,95209,95211,95213,95215,95217,95219,95221,95223],{"class":35,"line":175},[33,95204,94559],{"class":47},[33,95206,73],{"class":39},[33,95208,94255],{"class":47},[33,95210,701],{"class":76},[33,95212,704],{"class":47},[33,95214,2124],{"class":76},[33,95216,94260],{"class":47},[33,95218,717],{"class":76},[33,95220,704],{"class":47},[33,95222,712],{"class":76},[33,95224,884],{"class":47},[33,95226,95227,95230,95232,95234],{"class":35,"line":181},[33,95228,95229],{"class":47},"np.tile(aa,",[33,95231,707],{"class":76},[33,95233,352],{"class":47},[33,95235,95236],{"class":60},"#一个数的时候就是行\n",[33,95238,95239],{"class":35,"line":196},[33,95240,94817],{"class":60},[33,95242,95243],{"class":35,"line":213},[33,95244,95181],{"class":119},[33,95246,95247],{"class":35,"line":228},[33,95248,95249],{"class":119},"array([[ 1,  2,  3,  1,  2,  3],\n",[33,95251,95252],{"class":35,"line":1345},[33,95253,95254],{"class":119},"       [ 4,  5,  6,  4,  5,  6],\n",[33,95256,95257],{"class":35,"line":1350},[33,95258,95259],{"class":119},"       [ 7,  8,  9,  7,  8,  9],\n",[33,95261,95262],{"class":35,"line":1359},[33,95263,95264],{"class":119},"       [10, 11, 12, 10, 11, 12]])\n",[33,95266,95267],{"class":35,"line":1364},[33,95268,95181],{"class":119},[33,95270,95271,95274,95276,95278,95280],{"class":35,"line":1370},[33,95272,95273],{"class":47},"np.tile(aa,(",[33,95275,707],{"class":76},[33,95277,704],{"class":47},[33,95279,712],{"class":76},[33,95281,31750],{"class":47},[33,95283,95284],{"class":35,"line":1425},[33,95285,94817],{"class":60},[33,95287,95288],{"class":35,"line":1438},[33,95289,95181],{"class":119},[33,95291,95292],{"class":35,"line":1451},[33,95293,95294],{"class":119},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,95296,95297],{"class":35,"line":1457},[33,95298,95299],{"class":119},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[33,95301,95302],{"class":35,"line":1466},[33,95303,95304],{"class":119},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[33,95306,95307],{"class":35,"line":1471},[33,95308,95309],{"class":119},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[33,95311,95312],{"class":35,"line":1477},[33,95313,95314],{"class":119},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[33,95316,95317],{"class":35,"line":1504},[33,95318,95299],{"class":119},[33,95320,95321],{"class":35,"line":1509},[33,95322,95304],{"class":119},[33,95324,95325],{"class":35,"line":1525},[33,95326,95327],{"class":119},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[33,95329,95330],{"class":35,"line":1535},[33,95331,95181],{"class":119},[18,95333,95335],{"id":95334},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,95337,95338],{},"repeat()将数组中的每个元素重复若干次",[23,95340,95342],{"className":31631,"code":95341,"language":31633,"meta":28,"style":28},"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",[30,95343,95344,95360,95369,95373,95378,95402,95407,95416,95420,95425,95429,95434,95450,95454,95458,95463,95468,95473,95477,95482,95486,95491,95496,95500,95516,95520,95524,95529,95534,95539,95544],{"__ignoreMap":28},[33,95345,95346,95348,95350,95352,95354,95356,95358],{"class":35,"line":36},[33,95347,126],{"class":47},[33,95349,73],{"class":39},[33,95351,94255],{"class":47},[33,95353,701],{"class":76},[33,95355,704],{"class":47},[33,95357,722],{"class":76},[33,95359,884],{"class":47},[33,95361,95362,95365,95367],{"class":35,"line":51},[33,95363,95364],{"class":47},"np.repeat(a,",[33,95366,712],{"class":76},[33,95368,884],{"class":47},[33,95370,95371],{"class":35,"line":57},[33,95372,94817],{"class":60},[33,95374,95375],{"class":35,"line":64},[33,95376,95377],{"class":60},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[33,95379,95380,95382,95384,95386,95388,95390,95392,95394,95396,95398,95400],{"class":35,"line":83},[33,95381,94559],{"class":47},[33,95383,73],{"class":39},[33,95385,94255],{"class":47},[33,95387,701],{"class":76},[33,95389,704],{"class":47},[33,95391,2124],{"class":76},[33,95393,94260],{"class":47},[33,95395,717],{"class":76},[33,95397,704],{"class":47},[33,95399,712],{"class":76},[33,95401,884],{"class":47},[33,95403,95404],{"class":35,"line":89},[33,95405,95406],{"class":60},"#这个重复之后二维变成一维\n",[33,95408,95409,95412,95414],{"class":35,"line":98},[33,95410,95411],{"class":47},"np.repeat(aa,",[33,95413,707],{"class":76},[33,95415,884],{"class":47},[33,95417,95418],{"class":35,"line":110},[33,95419,95181],{"class":119},[33,95421,95422],{"class":35,"line":134},[33,95423,95424],{"class":119},"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",[33,95426,95427],{"class":35,"line":156},[33,95428,95181],{"class":119},[33,95430,95431],{"class":35,"line":163},[33,95432,95433],{"class":60},"#指定axis\n",[33,95435,95436,95438,95440,95442,95444,95446,95448],{"class":35,"line":169},[33,95437,95411],{"class":47},[33,95439,707],{"class":76},[33,95441,704],{"class":47},[33,95443,48767],{"class":955},[33,95445,73],{"class":39},[33,95447,766],{"class":76},[33,95449,884],{"class":47},[33,95451,95452],{"class":35,"line":175},[33,95453,94817],{"class":60},[33,95455,95456],{"class":35,"line":181},[33,95457,95181],{"class":119},[33,95459,95460],{"class":35,"line":196},[33,95461,95462],{"class":119},"array([[ 1,  2,  3],\n",[33,95464,95465],{"class":35,"line":213},[33,95466,95467],{"class":119},"       [ 1,  2,  3],\n",[33,95469,95470],{"class":35,"line":228},[33,95471,95472],{"class":119},"       [ 4,  5,  6],\n",[33,95474,95475],{"class":35,"line":1345},[33,95476,95472],{"class":119},[33,95478,95479],{"class":35,"line":1350},[33,95480,95481],{"class":119},"       [ 7,  8,  9],\n",[33,95483,95484],{"class":35,"line":1359},[33,95485,95481],{"class":119},[33,95487,95488],{"class":35,"line":1364},[33,95489,95490],{"class":119},"       [10, 11, 12],\n",[33,95492,95493],{"class":35,"line":1370},[33,95494,95495],{"class":119},"       [10, 11, 12]])\n",[33,95497,95498],{"class":35,"line":1425},[33,95499,95181],{"class":119},[33,95501,95502,95504,95506,95508,95510,95512,95514],{"class":35,"line":1438},[33,95503,95411],{"class":47},[33,95505,707],{"class":76},[33,95507,704],{"class":47},[33,95509,48767],{"class":955},[33,95511,73],{"class":39},[33,95513,701],{"class":76},[33,95515,884],{"class":47},[33,95517,95518],{"class":35,"line":1451},[33,95519,94817],{"class":60},[33,95521,95522],{"class":35,"line":1457},[33,95523,95181],{"class":119},[33,95525,95526],{"class":35,"line":1466},[33,95527,95528],{"class":119},"array([[ 1,  1,  2,  2,  3,  3],\n",[33,95530,95531],{"class":35,"line":1471},[33,95532,95533],{"class":119},"       [ 4,  4,  5,  5,  6,  6],\n",[33,95535,95536],{"class":35,"line":1477},[33,95537,95538],{"class":119},"       [ 7,  7,  8,  8,  9,  9],\n",[33,95540,95541],{"class":35,"line":1504},[33,95542,95543],{"class":119},"       [10, 10, 11, 11, 12, 12]])\n",[33,95545,95546],{"class":35,"line":1509},[33,95547,95181],{"class":119},[18,95549,95551],{"id":95550},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[23,95553,95555],{"className":31631,"code":95554,"language":31633,"meta":28,"style":28},"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",[30,95556,95557,95573,95578,95590,95594,95599,95609,95613],{"__ignoreMap":28},[33,95558,95559,95561,95563,95565,95567,95569,95571],{"class":35,"line":36},[33,95560,126],{"class":47},[33,95562,73],{"class":39},[33,95564,94255],{"class":47},[33,95566,701],{"class":76},[33,95568,704],{"class":47},[33,95570,722],{"class":76},[33,95572,884],{"class":47},[33,95574,95575],{"class":35,"line":51},[33,95576,95577],{"class":60},"#array([，2，3，4])\n",[33,95579,95580,95583,95585,95587],{"class":35,"line":57},[33,95581,95582],{"class":47},"np.roll(a,",[33,95584,707],{"class":76},[33,95586,352],{"class":47},[33,95588,95589],{"class":60},"#传正数向后调多少位，传负数向前调多少位\n",[33,95591,95592],{"class":35,"line":64},[33,95593,94817],{"class":60},[33,95595,95596],{"class":35,"line":83},[33,95597,95598],{"class":60},"#array([3, 4, 1, 2])\n",[33,95600,95601,95603,95605,95607],{"class":35,"line":89},[33,95602,95582],{"class":47},[33,95604,1199],{"class":39},[33,95606,701],{"class":76},[33,95608,884],{"class":47},[33,95610,95611],{"class":35,"line":98},[33,95612,94817],{"class":60},[33,95614,95615],{"class":35,"line":110},[33,95616,95617],{"class":60},"#array([2, 3, 4, 1])\n",[14,95619,95620],{},[2918,95621],{"alt":28,"src":95622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[18,95624,95626],{"id":95625},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,95628,95629],{},"resize()重新调整数组的大小",[14,95631,95632],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[23,95634,95636],{"className":31631,"code":95635,"language":31633,"meta":28,"style":28},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[30,95637,95638,95643,95656],{"__ignoreMap":28},[33,95639,95640],{"class":35,"line":36},[33,95641,95642],{"class":60},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[33,95644,95645,95648,95650,95652,95654],{"class":35,"line":51},[33,95646,95647],{"class":47},"np.resize(aa,(",[33,95649,707],{"class":76},[33,95651,704],{"class":47},[33,95653,727],{"class":76},[33,95655,31750],{"class":47},[33,95657,95658,95660,95662,95664,95666,95668],{"class":35,"line":57},[33,95659,95647],{"class":47},[33,95661,707],{"class":76},[33,95663,704],{"class":47},[33,95665,742],{"class":76},[33,95667,84024],{"class":47},[33,95669,95670],{"class":60},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[18,95672,95674],{"id":95673},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,95676,95677],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,95679,95680],{},[2918,95681],{"alt":28,"src":95682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[18,95684,95686],{"id":95685},"_126-保存加载文件","12.6 保存加载文件",[14,95688,95689],{},"savetxt():将数据保存到txt文件中",[14,95691,95692],{},"loadtxt():从文件加载数据",[14,95694,95695],{},[2918,95696],{"alt":28,"src":95697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[18,95699,95701],{"id":95700},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,95703,95704],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[18,95706,95708],{"id":95707},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,95710,95711],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,95713,95714],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,95716,95717],{},[2918,95718],{"alt":28,"src":95719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[18,95721,95723],{"id":95722},"_129-where语句","12.9 where语句",[14,95725,95726],{},"np.where(条件,x,y)",[14,95728,95729],{},"如果条件为True,对应值为x,否则对应值为y",[14,95731,95732],{},[2918,95733],{"alt":28,"src":95734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[18,95736,95738],{"id":95737},"_1210-dot矩阵","12.10 dot()矩阵",[14,95740,95741],{},[2918,95742],{"alt":28,"src":95743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1544,95745,95746],{},"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":28,"searchDepth":51,"depth":51,"links":95748},[95749,95750,95751,95752,95753,95754,95755,95756,95757,95758],{"id":95111,"depth":51,"text":95112},{"id":95334,"depth":51,"text":95335},{"id":95550,"depth":51,"text":95551},{"id":95625,"depth":51,"text":95626},{"id":95673,"depth":51,"text":95674},{"id":95685,"depth":51,"text":95686},{"id":95700,"depth":51,"text":95701},{"id":95707,"depth":51,"text":95708},{"id":95722,"depth":51,"text":95723},{"id":95737,"depth":51,"text":95738},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95103,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95765,"title":95766,"body":95767,"description":24628,"extension":1557,"meta":96120,"navigation":159,"path":96121,"seo":96122,"stem":96123,"__hash__":96124},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95768,"toc":96118},[95769,95772,95775,95778,95781,95784,95849,95851,96115],[10,95770,95766],{"id":95771},"_13数组排序",[14,95773,95774],{},"排序主要用到的方法是np.sort和np.argsort",[14,95776,95777],{},"其中np.sort()对数组直接排序",[14,95779,95780],{},"而np.argsort()是返回排序后的原始索引",[14,95782,95783],{},"①一维数组",[23,95785,95787],{"className":31631,"code":95786,"language":31633,"meta":28,"style":28},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[30,95788,95789,95793,95833,95841],{"__ignoreMap":28},[33,95790,95791],{"class":35,"line":36},[33,95792,94358],{"class":60},[33,95794,95795,95797,95799,95801,95803,95805,95807,95809,95811,95813,95815,95817,95819,95821,95823,95825,95827,95829,95831],{"class":35,"line":51},[33,95796,126],{"class":47},[33,95798,73],{"class":39},[33,95800,94277],{"class":47},[33,95802,712],{"class":76},[33,95804,704],{"class":47},[33,95806,2099],{"class":76},[33,95808,704],{"class":47},[33,95810,737],{"class":76},[33,95812,704],{"class":47},[33,95814,2374],{"class":76},[33,95816,704],{"class":47},[33,95818,1893],{"class":76},[33,95820,704],{"class":47},[33,95822,2492],{"class":76},[33,95824,704],{"class":47},[33,95826,727],{"class":76},[33,95828,704],{"class":47},[33,95830,77],{"class":76},[33,95832,1276],{"class":47},[33,95834,95835,95838],{"class":35,"line":57},[33,95836,95837],{"class":47},"np.sort(a)",[33,95839,95840],{"class":60},"#升序排序\n",[33,95842,95843,95846],{"class":35,"line":64},[33,95844,95845],{"class":47},"np.argsort(a)",[33,95847,95848],{"class":60},"#按照元素大小来索引排序\n",[14,95850,94544],{},[23,95852,95854],{"className":31631,"code":95853,"language":31633,"meta":28,"style":28},"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",[30,95855,95856,95868,95894,95899,95903,95908,95913,95918,95923,95927,95935,95939,95944,95949,95954,95959,95963,95968,95981,95985,95990,95995,96000,96005,96009,96014,96026,96030,96034,96038,96042,96046,96050,96055,96070,96075,96084,96089,96093,96097,96102,96106,96111],{"__ignoreMap":28},[33,95857,95858,95861,95863,95865],{"class":35,"line":36},[33,95859,95860],{"class":47},"np.random.seed(",[33,95862,766],{"class":76},[33,95864,352],{"class":47},[33,95866,95867],{"class":60},"#保证每次值一样\n",[33,95869,95870,95872,95874,95876,95878,95880,95882,95884,95886,95888,95890,95892],{"class":35,"line":51},[33,95871,94559],{"class":47},[33,95873,73],{"class":39},[33,95875,94367],{"class":47},[33,95877,457],{"class":76},[33,95879,704],{"class":47},[33,95881,32749],{"class":955},[33,95883,73],{"class":39},[33,95885,345],{"class":47},[33,95887,717],{"class":76},[33,95889,704],{"class":47},[33,95891,727],{"class":76},[33,95893,31750],{"class":47},[33,95895,95896],{"class":35,"line":57},[33,95897,95898],{"class":60},"#原数组：\n",[33,95900,95901],{"class":35,"line":64},[33,95902,95181],{"class":119},[33,95904,95905],{"class":35,"line":83},[33,95906,95907],{"class":119},"array([[44, 47, 64, 67, 67,  9],\n",[33,95909,95910],{"class":35,"line":89},[33,95911,95912],{"class":119},"       [83, 21, 36, 87, 70, 88],\n",[33,95914,95915],{"class":35,"line":98},[33,95916,95917],{"class":119},"       [88, 12, 58, 65, 39, 87],\n",[33,95919,95920],{"class":35,"line":110},[33,95921,95922],{"class":119},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[33,95924,95925],{"class":35,"line":134},[33,95926,95181],{"class":119},[33,95928,95929,95932],{"class":35,"line":156},[33,95930,95931],{"class":47},"np.sort(aa)",[33,95933,95934],{"class":60},"#每行进行了排序\n",[33,95936,95937],{"class":35,"line":163},[33,95938,95181],{"class":119},[33,95940,95941],{"class":35,"line":169},[33,95942,95943],{"class":119},"array([[ 9, 44, 47, 64, 67, 67],\n",[33,95945,95946],{"class":35,"line":175},[33,95947,95948],{"class":119},"       [21, 36, 70, 83, 87, 88],\n",[33,95950,95951],{"class":35,"line":181},[33,95952,95953],{"class":119},"       [12, 39, 58, 65, 87, 88],\n",[33,95955,95956],{"class":35,"line":196},[33,95957,95958],{"class":119},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[33,95960,95961],{"class":35,"line":213},[33,95962,95181],{"class":119},[33,95964,95965],{"class":35,"line":228},[33,95966,95967],{"class":60},"#axis=0时\n",[33,95969,95970,95973,95975,95977,95979],{"class":35,"line":1345},[33,95971,95972],{"class":47},"np.sort(aa,",[33,95974,48767],{"class":955},[33,95976,73],{"class":39},[33,95978,766],{"class":76},[33,95980,884],{"class":47},[33,95982,95983],{"class":35,"line":1350},[33,95984,95181],{"class":119},[33,95986,95987],{"class":35,"line":1359},[33,95988,95989],{"class":119},"array([[44, 12, 36, 37, 25,  9],\n",[33,95991,95992],{"class":35,"line":1364},[33,95993,95994],{"class":119},"       [46, 21, 58, 65, 39, 77],\n",[33,95996,95997],{"class":35,"line":1370},[33,95998,95999],{"class":119},"       [83, 47, 64, 67, 67, 87],\n",[33,96001,96002],{"class":35,"line":1425},[33,96003,96004],{"class":119},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[33,96006,96007],{"class":35,"line":1438},[33,96008,95181],{"class":119},[33,96010,96011],{"class":35,"line":1451},[33,96012,96013],{"class":60},"#axis=1时,为默认值\n",[33,96015,96016,96018,96020,96022,96024],{"class":35,"line":1457},[33,96017,95972],{"class":47},[33,96019,48767],{"class":955},[33,96021,73],{"class":39},[33,96023,701],{"class":76},[33,96025,884],{"class":47},[33,96027,96028],{"class":35,"line":1466},[33,96029,95181],{"class":119},[33,96031,96032],{"class":35,"line":1471},[33,96033,95943],{"class":119},[33,96035,96036],{"class":35,"line":1477},[33,96037,95948],{"class":119},[33,96039,96040],{"class":35,"line":1504},[33,96041,95953],{"class":119},[33,96043,96044],{"class":35,"line":1509},[33,96045,95958],{"class":119},[33,96047,96048],{"class":35,"line":1525},[33,96049,95181],{"class":119},[33,96051,96052],{"class":35,"line":1535},[33,96053,96054],{"class":60},"#按最后一列排序\n",[33,96056,96057,96059,96061,96064,96066,96068],{"class":35,"line":1540},[33,96058,1094],{"class":47},[33,96060,73],{"class":39},[33,96062,96063],{"class":47},"aa[:,",[33,96065,1199],{"class":39},[33,96067,701],{"class":76},[33,96069,34499],{"class":47},[33,96071,96072],{"class":35,"line":4027},[33,96073,96074],{"class":60},"#获取最后一列排好序的索引\n",[33,96076,96077,96079,96081],{"class":35,"line":4032},[33,96078,75311],{"class":47},[33,96080,73],{"class":39},[33,96082,96083],{"class":47},"np.argsort(b)\n",[33,96085,96086],{"class":35,"line":9199},[33,96087,96088],{"class":47},"aa[index]\n",[33,96090,96091],{"class":35,"line":9223},[33,96092,95181],{"class":119},[33,96094,96095],{"class":35,"line":9228},[33,96096,95907],{"class":119},[33,96098,96099],{"class":35,"line":9234},[33,96100,96101],{"class":119},"       [46, 88, 81, 37, 25, 77],\n",[33,96103,96104],{"class":35,"line":9261},[33,96105,95917],{"class":119},[33,96107,96108],{"class":35,"line":9266},[33,96109,96110],{"class":119},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[33,96112,96113],{"class":35,"line":9272},[33,96114,95181],{"class":119},[1544,96116,96117],{},"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":28,"searchDepth":51,"depth":51,"links":96119},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95766,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96126,"title":96127,"body":96128,"description":24628,"extension":1557,"meta":96158,"navigation":159,"path":96159,"seo":96160,"stem":96161,"__hash__":96162},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96129,"toc":96156},[96130,96133,96136,96139,96142,96145,96148,96151],[10,96131,96127],{"id":96132},"_14广播机制",[14,96134,96135],{},"广播的规则：",[14,96137,96138],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,96140,96141],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,96143,96144],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,96146,96147],{},"3.如果没有维度形状为1，则会引发异常",[14,96149,96150],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,96152,96153],{},[2918,96154],{"alt":28,"src":96155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":28,"searchDepth":51,"depth":51,"links":96157},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96127,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96164,"title":96165,"body":96166,"description":24628,"extension":1557,"meta":96264,"navigation":159,"path":96265,"seo":96266,"stem":96267,"__hash__":96268},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96167,"toc":96262},[96168,96171,96174,96259],[10,96169,96165],{"id":96170},"_15比较掩码",[14,96172,96173],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[23,96175,96177],{"className":31631,"code":96176,"language":31633,"meta":28,"style":28},"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",[30,96178,96179,96225,96236,96250,96254],{"__ignoreMap":28},[33,96180,96181,96183,96185,96188,96190,96192,96194,96196,96198,96200,96202,96204,96206,96208,96210,96212,96214,96216,96218,96220,96222],{"class":35,"line":36},[33,96182,126],{"class":47},[33,96184,73],{"class":39},[33,96186,96187],{"class":47},"np.array([[",[33,96189,701],{"class":76},[33,96191,704],{"class":47},[33,96193,707],{"class":76},[33,96195,704],{"class":47},[33,96197,712],{"class":76},[33,96199,49283],{"class":47},[33,96201,2074],{"class":76},[33,96203,704],{"class":47},[33,96205,2099],{"class":76},[33,96207,704],{"class":47},[33,96209,2124],{"class":76},[33,96211,49283],{"class":47},[33,96213,2324],{"class":76},[33,96215,704],{"class":47},[33,96217,2349],{"class":76},[33,96219,704],{"class":47},[33,96221,2374],{"class":76},[33,96223,96224],{"class":47},"]])\n",[33,96226,96227,96229,96231,96233],{"class":35,"line":51},[33,96228,126],{"class":47},[33,96230,875],{"class":39},[33,96232,1045],{"class":76},[33,96234,96235],{"class":60},"#结果是一个由True,False组成的数组\n",[33,96237,96238,96241,96243,96245,96247],{"class":35,"line":57},[33,96239,96240],{"class":47},"a[a",[33,96242,875],{"class":39},[33,96244,1045],{"class":76},[33,96246,693],{"class":47},[33,96248,96249],{"class":60},"#小于20的元素会存到这个数组中\n",[33,96251,96252],{"class":35,"line":64},[33,96253,94817],{"class":60},[33,96255,96256],{"class":35,"line":83},[33,96257,96258],{"class":60},"#array([ 1,  2,  3, 11, 12, 13])\n",[1544,96260,96261],{},"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":28,"searchDepth":51,"depth":51,"links":96263},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96165,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96270,"title":96271,"body":96272,"description":24628,"extension":1557,"meta":96364,"navigation":159,"path":96365,"seo":96366,"stem":96367,"__hash__":96368},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96273,"toc":96362},[96274,96277,96280,96283,96286,96289,96354,96359],[10,96275,96271],{"id":96276},"_16魔法命令time",[14,96278,96279],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,96281,96282],{},"%:行模式",[14,96284,96285],{},"%%:单元格模式",[14,96287,96288],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[23,96290,96292],{"className":31631,"code":96291,"language":31633,"meta":28,"style":28},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[30,96293,96294,96299,96306,96311,96320,96333,96337,96345],{"__ignoreMap":28},[33,96295,96296],{"class":35,"line":36},[33,96297,96298],{"class":60},"#程序执行时间\n",[33,96300,96301,96303],{"class":35,"line":51},[33,96302,31645],{"class":39},[33,96304,96305],{"class":47}," time \n",[33,96307,96308],{"class":35,"line":57},[33,96309,96310],{"class":60},"#获取时间\n",[33,96312,96313,96316,96318],{"class":35,"line":64},[33,96314,96315],{"class":47},"start",[33,96317,73],{"class":39},[33,96319,33671],{"class":47},[33,96321,96322,96325,96328,96330],{"class":35,"line":83},[33,96323,96324],{"class":47},"time.sleep(",[33,96326,96327],{"class":76},"0.4",[33,96329,352],{"class":47},[33,96331,96332],{"class":60},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[33,96334,96335],{"class":35,"line":89},[33,96336,96310],{"class":60},[33,96338,96339,96341,96343],{"class":35,"line":98},[33,96340,47054],{"class":47},[33,96342,73],{"class":39},[33,96344,33671],{"class":47},[33,96346,96347,96349,96351],{"class":35,"line":110},[33,96348,47054],{"class":47},[33,96350,1199],{"class":39},[33,96352,96353],{"class":47},"start\n",[14,96355,96356],{},[2918,96357],{"alt":28,"src":96358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1544,96360,96361],{},"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":28,"searchDepth":51,"depth":51,"links":96363},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96271,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96370,"title":96371,"body":96372,"description":24628,"extension":1557,"meta":96407,"navigation":159,"path":96408,"seo":96409,"stem":96410,"__hash__":96411},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96373,"toc":96405},[96374,96377,96380,96383,96386,96389,96392,96395,96400],[10,96375,96371],{"id":96376},"_17魔法命令timeit",[14,96378,96379],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,96381,96382],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,96384,96385],{},"单元格模式：",[14,96387,96388],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,96390,96391],{},"初始化语句执行次数由轮数来决定",[14,96393,96394],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,96396,96397],{},[2918,96398],{"alt":28,"src":96399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,96401,96402],{},[2918,96403],{"alt":28,"src":96404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":28,"searchDepth":51,"depth":51,"links":96406},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96371,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96413,"title":96414,"body":96415,"description":24628,"extension":1557,"meta":96433,"navigation":159,"path":96434,"seo":96435,"stem":96436,"__hash__":96437},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96416,"toc":96431},[96417,96420,96423,96426],[10,96418,96414],{"id":96419},"_18魔法命令writefile和run",[14,96421,96422],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,96424,96425],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,96427,96428],{},[2918,96429],{"alt":28,"src":96430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":28,"searchDepth":51,"depth":51,"links":96432},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96414,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96439,"title":96440,"body":96441,"description":24628,"extension":1557,"meta":96494,"navigation":159,"path":96495,"seo":96496,"stem":96497,"__hash__":96498},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96442,"toc":96492},[96443,96446,96449,96451,96454,96457,96462,96465,96468,96471,96474,96477,96480,96483,96486,96489],[10,96444,96440],{"id":96445},"_19魔法命令memit",[14,96447,96448],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,96450,25852],{},[14,96452,96453],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,96455,96456],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,96458,96459],{},[2918,96460],{"alt":28,"src":96461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,96463,96464],{},"补充：",[14,96466,96467],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,96469,96470],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,96472,96473],{},"解决方法：",[14,96475,96476],{},"1.cmd",[14,96478,96479],{},"2.依次输入以下代码：",[14,96481,96482],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,96484,96485],{},"pip install --upgrade ipython",[14,96487,96488],{},"#升级 memory_profiler 和 setuptools",[14,96490,96491],{},"pip install --upgrade memory_profiler setuptools",{"title":28,"searchDepth":51,"depth":51,"links":96493},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96440,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96500,"title":96501,"body":96502,"description":24628,"extension":1557,"meta":98148,"navigation":159,"path":98149,"seo":98150,"stem":98151,"__hash__":98152},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96503,"toc":98118},[96504,96507,96511,96515,96576,96579,96584,96588,96593,96598,96603,96608,96611,96616,96620,96624,96657,96660,96663,96666,96718,96721,96757,96760,96802,96806,96827,96829,96866,96868,96873,96875,96880,96884,96887,96915,96919,96923,96976,96980,97072,97076,97080,97083,97088,97092,97117,97122,97126,97129,97132,97135,97138,97141,97144,97147,97159,97163,97167,97170,97202,97205,97228,97231,97257,97260,97286,97289,97323,97326,97388,97392,97395,97399,97402,97428,97431,97434,97439,97442,97511,97513,97518,97579,97582,97593,97599,97604,97608,97611,97624,97628,97643,97645,97668,97670,97696,97699,97702,97705,97753,97755,97760,97764,97768,97795,97799,97826,97829,97834,97839,97929,97933,97991,97996,97999,98002,98044,98048,98104,98109,98112,98115],[10,96505,96501],{"id":96506},"_2创建数组",[18,96508,96510],{"id":96509},"_21-array函数创建数组","2.1 array()函数创建数组",[1599,96512,96514],{"id":96513},"_221-函数语句","2.2.1 函数语句",[23,96516,96518],{"className":31631,"code":96517,"language":31633,"meta":28,"style":28},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[30,96519,96520],{"__ignoreMap":28},[33,96521,96522,96525,96528,96530,96532,96534,96536,96538,96541,96543,96546,96548,96551,96553,96555,96557,96560,96562,96565,96567,96570,96572,96574],{"class":35,"line":36},[33,96523,96524],{"class":47},"numpy.array(",[33,96526,96527],{"class":76},"object",[33,96529,13686],{"class":47},[33,96531,94753],{"class":955},[33,96533,14815],{"class":39},[33,96535,40186],{"class":76},[33,96537,13686],{"class":47},[33,96539,96540],{"class":955},"copy",[33,96542,14815],{"class":39},[33,96544,96545],{"class":76}," True",[33,96547,13686],{"class":47},[33,96549,96550],{"class":955},"order",[33,96552,14815],{"class":39},[33,96554,40186],{"class":76},[33,96556,13686],{"class":47},[33,96558,96559],{"class":955},"subok",[33,96561,14815],{"class":39},[33,96563,96564],{"class":76}," False",[33,96566,13686],{"class":47},[33,96568,96569],{"class":955},"ndmin",[33,96571,14815],{"class":39},[33,96573,5492],{"class":76},[33,96575,884],{"class":47},[14,96577,96578],{},"参数：",[14,96580,96581],{},[2918,96582],{"alt":28,"src":96583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[1599,96585,96587],{"id":96586},"_222-实例","2.2.2 实例",[14,96589,96590],{},[2918,96591],{"alt":28,"src":96592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,96594,96595],{},[2918,96596],{"alt":28,"src":96597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,96599,96600],{},[2918,96601],{"alt":28,"src":96602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,96604,96605],{},[2918,96606],{"alt":28,"src":96607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,96609,96610],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,96612,96613],{},[2918,96614],{"alt":28,"src":96615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[18,96617,96619],{"id":96618},"_22-随机数创建数组","2.2 随机数创建数组",[1599,96621,96623],{"id":96622},"_221-random语句","2.2.1 random语句",[23,96625,96627],{"className":31631,"code":96626,"language":31633,"meta":28,"style":28},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[30,96628,96629,96634,96639,96647,96652],{"__ignoreMap":28},[33,96630,96631],{"class":35,"line":36},[33,96632,96633],{"class":60},"#random.random()\n",[33,96635,96636],{"class":35,"line":51},[33,96637,96638],{"class":60},"#确定随机种子,就是每次运行结果是相同的\n",[33,96640,96641,96643,96645],{"class":35,"line":57},[33,96642,95860],{"class":47},[33,96644,766],{"class":76},[33,96646,884],{"class":47},[33,96648,96649],{"class":35,"line":64},[33,96650,96651],{"class":47},"np.random.random()\n",[33,96653,96654],{"class":35,"line":83},[33,96655,96656],{"class":60},"#生成一个随机的数目\n",[14,96658,96659],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,96661,96662],{},"可以指定数组形状 size",[14,96664,96665],{},"①生成一维数组",[23,96667,96669],{"className":31631,"code":96668,"language":31633,"meta":28,"style":28},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[30,96670,96671,96676,96689,96694,96710],{"__ignoreMap":28},[33,96672,96673],{"class":35,"line":36},[33,96674,96675],{"class":60},"#random.random(size())\n",[33,96677,96678,96681,96683,96685,96687],{"class":35,"line":51},[33,96679,96680],{"class":47},"np.random.random(",[33,96682,32749],{"class":955},[33,96684,73],{"class":39},[33,96686,722],{"class":76},[33,96688,884],{"class":47},[33,96690,96691],{"class":35,"line":57},[33,96692,96693],{"class":60},"#生成一位的五个元素\n",[33,96695,96696,96698,96700,96702,96704,96706,96708],{"class":35,"line":64},[33,96697,126],{"class":47},[33,96699,73],{"class":39},[33,96701,96680],{"class":47},[33,96703,32749],{"class":955},[33,96705,73],{"class":39},[33,96707,717],{"class":76},[33,96709,884],{"class":47},[33,96711,96712,96715],{"class":35,"line":83},[33,96713,96714],{"class":47},"a.shape ",[33,96716,96717],{"class":60},"#输出数组形状\n",[14,96719,96720],{},"②生成二维数组",[23,96722,96724],{"className":31631,"code":96723,"language":31633,"meta":28,"style":28},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[30,96725,96726,96730,96752],{"__ignoreMap":28},[33,96727,96728],{"class":35,"line":36},[33,96729,94554],{"class":60},[33,96731,96732,96734,96736,96738,96740,96742,96744,96746,96748,96750],{"class":35,"line":51},[33,96733,94559],{"class":47},[33,96735,73],{"class":39},[33,96737,96680],{"class":47},[33,96739,32749],{"class":955},[33,96741,73],{"class":39},[33,96743,345],{"class":47},[33,96745,717],{"class":76},[33,96747,704],{"class":47},[33,96749,722],{"class":76},[33,96751,31750],{"class":47},[33,96753,96754],{"class":35,"line":57},[33,96755,96756],{"class":60},"#生成四行五列的数组\n",[14,96758,96759],{},"③生成三维数组",[23,96761,96763],{"className":31631,"code":96762,"language":31633,"meta":28,"style":28},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[30,96764,96765,96770,96797],{"__ignoreMap":28},[33,96766,96767],{"class":35,"line":36},[33,96768,96769],{"class":60},"#三维数组\n",[33,96771,96772,96775,96777,96779,96781,96783,96785,96787,96789,96791,96793,96795],{"class":35,"line":51},[33,96773,96774],{"class":47},"aaa",[33,96776,73],{"class":39},[33,96778,96680],{"class":47},[33,96780,32749],{"class":955},[33,96782,73],{"class":39},[33,96784,345],{"class":47},[33,96786,707],{"class":76},[33,96788,704],{"class":47},[33,96790,712],{"class":76},[33,96792,704],{"class":47},[33,96794,717],{"class":76},[33,96796,31750],{"class":47},[33,96798,96799],{"class":35,"line":57},[33,96800,96801],{"class":47},"aaa.shape\n",[1599,96803,96805],{"id":96804},"_222-randint语句","2.2.2 randint语句",[23,96807,96809],{"className":31631,"code":96808,"language":31633,"meta":28,"style":28},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[30,96810,96811,96816],{"__ignoreMap":28},[33,96812,96813],{"class":35,"line":36},[33,96814,96815],{"class":60},"#生成随机的整数 random.randint(low,high,size)\n",[33,96817,96818,96820,96822,96824],{"class":35,"line":51},[33,96819,94367],{"class":47},[33,96821,722],{"class":76},[33,96823,14965],{"class":47},[33,96825,96826],{"class":60},"#0~5中的随机一个数\n",[14,96828,96665],{},[23,96830,96832],{"className":31631,"code":96831,"language":31633,"meta":28,"style":28},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[30,96833,96834,96839,96861],{"__ignoreMap":28},[33,96835,96836],{"class":35,"line":36},[33,96837,96838],{"class":60},"#一维\n",[33,96840,96841,96843,96845,96847,96849,96851,96853,96855,96857,96859],{"class":35,"line":51},[33,96842,94367],{"class":47},[33,96844,701],{"class":76},[33,96846,704],{"class":47},[33,96848,2074],{"class":76},[33,96850,704],{"class":47},[33,96852,32749],{"class":955},[33,96854,73],{"class":39},[33,96856,345],{"class":47},[33,96858,77],{"class":76},[33,96860,31750],{"class":47},[33,96862,96863],{"class":35,"line":57},[33,96864,96865],{"class":60},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,96867,96720],{},[14,96869,96870],{},[2918,96871],{"alt":28,"src":96872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,96874,96759],{},[14,96876,96877],{},[2918,96878],{"alt":28,"src":96879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[1599,96881,96883],{"id":96882},"_222-rand语句","2.2.2 rand语句",[14,96885,96886],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[23,96888,96890],{"className":31631,"code":96889,"language":31633,"meta":28,"style":28},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[30,96891,96892,96905,96910],{"__ignoreMap":28},[33,96893,96894,96897,96899,96901,96903],{"class":35,"line":36},[33,96895,96896],{"class":47},"np.random.rand(",[33,96898,457],{"class":76},[33,96900,704],{"class":47},[33,96902,77],{"class":76},[33,96904,884],{"class":47},[33,96906,96907],{"class":35,"line":51},[33,96908,96909],{"class":60},"#第一个参数100：行数，表示有100个样本\n",[33,96911,96912],{"class":35,"line":57},[33,96913,96914],{"class":60},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[18,96916,96918],{"id":96917},"_23-arange创建数组","2.3 arange()创建数组",[1599,96920,96922],{"id":96921},"_231-函数语句","2.3.1 函数语句",[23,96924,96926],{"className":31631,"code":96925,"language":31633,"meta":28,"style":28},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[30,96927,96928,96942,96947,96952,96957,96962,96967,96972],{"__ignoreMap":28},[33,96929,96930,96933,96935,96937,96940],{"class":35,"line":36},[33,96931,96932],{"class":47},"numpy.arange([start,] stop[, step], ",[33,96934,94753],{"class":955},[33,96936,73],{"class":39},[33,96938,96939],{"class":76},"None",[33,96941,884],{"class":47},[33,96943,96944],{"class":35,"line":51},[33,96945,96946],{"class":60},"#参数\n",[33,96948,96949],{"class":35,"line":57},[33,96950,96951],{"class":119},"\"\"\"\n",[33,96953,96954],{"class":35,"line":64},[33,96955,96956],{"class":119},"start:起始值，可选，默认从 0 开始。\n",[33,96958,96959],{"class":35,"line":83},[33,96960,96961],{"class":119},"stop:结束值（不包含该值）。\n",[33,96963,96964],{"class":35,"line":89},[33,96965,96966],{"class":119},"step:步长，可选，默认是 1。可以为浮点数。\n",[33,96968,96969],{"class":35,"line":98},[33,96970,96971],{"class":119},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[33,96973,96974],{"class":35,"line":110},[33,96975,96951],{"class":119},[1599,96977,96979],{"id":96978},"_232-实例","2.3.2 实例",[23,96981,96983],{"className":31631,"code":96982,"language":31633,"meta":28,"style":28},"#创建一维数组\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",[30,96984,96985,96989,97013,97018,97023,97027,97050,97054,97058,97063,97068],{"__ignoreMap":28},[33,96986,96987],{"class":35,"line":36},[33,96988,94358],{"class":60},[33,96990,96991,96993,96995,96997,96999,97001,97003,97005,97007,97009,97011],{"class":35,"line":51},[33,96992,94255],{"class":47},[33,96994,701],{"class":76},[33,96996,704],{"class":47},[33,96998,2324],{"class":76},[33,97000,704],{"class":47},[33,97002,701],{"class":76},[33,97004,704],{"class":47},[33,97006,94753],{"class":955},[33,97008,73],{"class":39},[33,97010,40],{"class":76},[33,97012,884],{"class":47},[33,97014,97015],{"class":35,"line":57},[33,97016,97017],{"class":60},"#输出结果：\n",[33,97019,97020],{"class":35,"line":64},[33,97021,97022],{"class":60},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[33,97024,97025],{"class":35,"line":83},[33,97026,95200],{"class":60},[33,97028,97029,97032,97034,97036,97038,97041,97043,97045,97047],{"class":35,"line":89},[33,97030,97031],{"class":47},"np.array([np.arange(",[33,97033,701],{"class":76},[33,97035,704],{"class":47},[33,97037,717],{"class":76},[33,97039,97040],{"class":47},"),np.arange(",[33,97042,717],{"class":76},[33,97044,704],{"class":47},[33,97046,732],{"class":76},[33,97048,97049],{"class":47},")])\n",[33,97051,97052],{"class":35,"line":98},[33,97053,94817],{"class":60},[33,97055,97056],{"class":35,"line":110},[33,97057,96951],{"class":119},[33,97059,97060],{"class":35,"line":134},[33,97061,97062],{"class":119},"array([[1, 2, 3],\n",[33,97064,97065],{"class":35,"line":156},[33,97066,97067],{"class":119},"       [4, 5, 6]])\n",[33,97069,97070],{"class":35,"line":163},[33,97071,96951],{"class":119},[18,97073,97075],{"id":97074},"_24-生态分布","2.4 生态分布",[1599,97077,97079],{"id":97078},"_241-标准正态分布","2.4.1 标准正态分布",[14,97081,97082],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,97084,97085],{},[2918,97086],{"alt":28,"src":97087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[1599,97089,97091],{"id":97090},"_242-常规正态分布","2.4.2 常规正态分布",[23,97093,97095],{"className":31631,"code":97094,"language":31633,"meta":28,"style":28},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[30,97096,97097,97102,97107,97112],{"__ignoreMap":28},[33,97098,97099],{"class":35,"line":36},[33,97100,97101],{"class":47},"random.normal(loc,scale,size)也可以生成正态分布\n",[33,97103,97104],{"class":35,"line":51},[33,97105,97106],{"class":60},"#loc:期望\n",[33,97108,97109],{"class":35,"line":57},[33,97110,97111],{"class":60},"#scale:方差\n",[33,97113,97114],{"class":35,"line":64},[33,97115,97116],{"class":60},"#size:用于确定是几维的数列\n",[14,97118,97119],{},[2918,97120],{"alt":28,"src":97121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[18,97123,97125],{"id":97124},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,97127,97128],{},"ndim:秩，维度个数",[14,97130,97131],{},"size:数组元素的个数",[14,97133,97134],{},"shape:数组的形状",[14,97136,97137],{},"dtype:数组元素的类型",[14,97139,97140],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,97142,97143],{},"他们都是属性，通过数组.属性的形式来确定",[14,97145,97146],{},"如果需要输出多个可以通过以下方式：",[23,97148,97150],{"className":31631,"code":97149,"language":31633,"meta":28,"style":28},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[30,97151,97152],{"__ignoreMap":28},[33,97153,97154,97156],{"class":35,"line":36},[33,97155,31668],{"class":76},[33,97157,97158],{"class":47},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[18,97160,97162],{"id":97161},"_26-其他方式创建数组","2.6 其他方式创建数组",[1599,97164,97166],{"id":97165},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,97168,97169],{},"①创建一维数组",[23,97171,97173],{"className":31631,"code":97172,"language":31633,"meta":28,"style":28},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[30,97174,97175,97184,97188,97193,97198],{"__ignoreMap":28},[33,97176,97177,97180,97182],{"class":35,"line":36},[33,97178,97179],{"class":47},"np.zeros(",[33,97181,77],{"class":76},[33,97183,884],{"class":47},[33,97185,97186],{"class":35,"line":51},[33,97187,96951],{"class":119},[33,97189,97190],{"class":35,"line":57},[33,97191,97192],{"class":119},"输出结果：\n",[33,97194,97195],{"class":35,"line":64},[33,97196,97197],{"class":119},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[33,97199,97200],{"class":35,"line":83},[33,97201,96951],{"class":119},[14,97203,97204],{},"上方代码等价于：",[23,97206,97208],{"className":31631,"code":97207,"language":31633,"meta":28,"style":28},"np.zeros(shape=(10))#创建10个元素的0数组\n",[30,97209,97210],{"__ignoreMap":28},[33,97211,97212,97214,97217,97219,97221,97223,97225],{"class":35,"line":36},[33,97213,97179],{"class":47},[33,97215,97216],{"class":955},"shape",[33,97218,73],{"class":39},[33,97220,345],{"class":47},[33,97222,77],{"class":76},[33,97224,84024],{"class":47},[33,97226,97227],{"class":60},"#创建10个元素的0数组\n",[14,97229,97230],{},"也可以指定类型",[23,97232,97234],{"className":31631,"code":97233,"language":31633,"meta":28,"style":28},"#指定类型\nnp.zeros(5,dtype=int)\n",[30,97235,97236,97241],{"__ignoreMap":28},[33,97237,97238],{"class":35,"line":36},[33,97239,97240],{"class":60},"#指定类型\n",[33,97242,97243,97245,97247,97249,97251,97253,97255],{"class":35,"line":51},[33,97244,97179],{"class":47},[33,97246,722],{"class":76},[33,97248,704],{"class":47},[33,97250,94753],{"class":955},[33,97252,73],{"class":39},[33,97254,40],{"class":76},[33,97256,884],{"class":47},[14,97258,97259],{},"②创建二维数组",[23,97261,97263],{"className":31631,"code":97262,"language":31633,"meta":28,"style":28},"np.zeros((3,4),dtype=int)\n",[30,97264,97265],{"__ignoreMap":28},[33,97266,97267,97270,97272,97274,97276,97278,97280,97282,97284],{"class":35,"line":36},[33,97268,97269],{"class":47},"np.zeros((",[33,97271,712],{"class":76},[33,97273,704],{"class":47},[33,97275,717],{"class":76},[33,97277,43509],{"class":47},[33,97279,94753],{"class":955},[33,97281,73],{"class":39},[33,97283,40],{"class":76},[33,97285,884],{"class":47},[14,97287,97288],{},"③创建三维数组",[23,97290,97292],{"className":31631,"code":97291,"language":31633,"meta":28,"style":28},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[30,97293,97294,97299],{"__ignoreMap":28},[33,97295,97296],{"class":35,"line":36},[33,97297,97298],{"class":60},"#创建三维数组\n",[33,97300,97301,97303,97305,97307,97309,97311,97313,97315,97317,97319,97321],{"class":35,"line":51},[33,97302,97269],{"class":47},[33,97304,712],{"class":76},[33,97306,704],{"class":47},[33,97308,717],{"class":76},[33,97310,704],{"class":47},[33,97312,722],{"class":76},[33,97314,43509],{"class":47},[33,97316,94753],{"class":955},[33,97318,73],{"class":39},[33,97320,40],{"class":76},[33,97322,884],{"class":47},[14,97324,97325],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[23,97327,97329],{"className":31631,"code":97328,"language":31633,"meta":28,"style":28},"#使用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",[30,97330,97331,97336,97351,97356,97361,97383],{"__ignoreMap":28},[33,97332,97333],{"class":35,"line":36},[33,97334,97335],{"class":60},"#使用zeros_like将创建的一维数组变成全0的数组\n",[33,97337,97338,97340,97342,97344,97346,97348],{"class":35,"line":51},[33,97339,126],{"class":47},[33,97341,73],{"class":39},[33,97343,94255],{"class":47},[33,97345,717],{"class":76},[33,97347,352],{"class":47},[33,97349,97350],{"class":60},"#这个得到的结果：一维数组0，1，2，3\n",[33,97352,97353],{"class":35,"line":57},[33,97354,97355],{"class":47},"np.zeros_like(a)\n",[33,97357,97358],{"class":35,"line":64},[33,97359,97360],{"class":60},"#使用zeros_like将创建的二维数组变成全0的数组\n",[33,97362,97363,97365,97367,97369,97371,97373,97375,97377,97379,97381],{"class":35,"line":83},[33,97364,94559],{"class":47},[33,97366,73],{"class":39},[33,97368,96680],{"class":47},[33,97370,32749],{"class":955},[33,97372,73],{"class":39},[33,97374,345],{"class":47},[33,97376,717],{"class":76},[33,97378,704],{"class":47},[33,97380,722],{"class":76},[33,97382,31750],{"class":47},[33,97384,97385],{"class":35,"line":89},[33,97386,97387],{"class":47},"np.zeros_like(aa)\n",[1599,97389,97391],{"id":97390},"_262-ones创建数组","2.6.2 ones()创建数组",[14,97393,97394],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[1599,97396,97398],{"id":97397},"_263-empty创建数组","2.6.3 empty()创建数组",[14,97400,97401],{},"①empty()用法",[23,97403,97405],{"className":31631,"code":97404,"language":31633,"meta":28,"style":28},"numpy.empty(shape,dtype=float,order='c')\n",[30,97406,97407],{"__ignoreMap":28},[33,97408,97409,97412,97414,97416,97418,97420,97422,97424,97426],{"class":35,"line":36},[33,97410,97411],{"class":47},"numpy.empty(shape,",[33,97413,94753],{"class":955},[33,97415,73],{"class":39},[33,97417,1666],{"class":76},[33,97419,704],{"class":47},[33,97421,96550],{"class":955},[33,97423,73],{"class":39},[33,97425,77281],{"class":119},[33,97427,884],{"class":47},[14,97429,97430],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,97432,97433],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,97435,97436],{},[2918,97437],{"alt":28,"src":97438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,97440,97441],{},"②empty()用法",[23,97443,97445],{"className":31631,"code":97444,"language":31633,"meta":28,"style":28},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[30,97446,97447,97468,97480,97501,97506],{"__ignoreMap":28},[33,97448,97449,97451,97453,97456,97458,97460,97462,97464,97466],{"class":35,"line":36},[33,97450,2444],{"class":47},[33,97452,73],{"class":39},[33,97454,97455],{"class":47},"np.empty(",[33,97457,77],{"class":76},[33,97459,704],{"class":47},[33,97461,94753],{"class":955},[33,97463,73],{"class":39},[33,97465,40],{"class":76},[33,97467,884],{"class":47},[33,97469,97470,97472,97474,97476,97478],{"class":35,"line":51},[33,97471,2419],{"class":47},[33,97473,73],{"class":39},[33,97475,94255],{"class":47},[33,97477,722],{"class":76},[33,97479,884],{"class":47},[33,97481,97482,97485,97487,97490,97492,97494,97497,97499],{"class":35,"line":57},[33,97483,97484],{"class":47},"np.add(",[33,97486,707],{"class":76},[33,97488,97489],{"class":47},",x,",[33,97491,94307],{"class":955},[33,97493,73],{"class":39},[33,97495,97496],{"class":47},"y[:",[33,97498,722],{"class":76},[33,97500,1276],{"class":47},[33,97502,97503],{"class":35,"line":64},[33,97504,97505],{"class":60},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[33,97507,97508],{"class":35,"line":83},[33,97509,97510],{"class":47},"y\n",[14,97512,12765],{},[14,97514,97515],{},[2918,97516],{"alt":28,"src":97517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[23,97519,97521],{"className":31631,"code":97520,"language":31633,"meta":28,"style":28},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[30,97522,97523,97539,97559,97574],{"__ignoreMap":28},[33,97524,97525,97527,97529,97531,97533,97535,97537],{"class":35,"line":36},[33,97526,2419],{"class":47},[33,97528,73],{"class":39},[33,97530,94255],{"class":47},[33,97532,701],{"class":76},[33,97534,704],{"class":47},[33,97536,727],{"class":76},[33,97538,884],{"class":47},[33,97540,97541,97543,97545,97547,97549,97551,97553,97555,97557],{"class":35,"line":51},[33,97542,2444],{"class":47},[33,97544,73],{"class":39},[33,97546,97455],{"class":47},[33,97548,722],{"class":76},[33,97550,704],{"class":47},[33,97552,94753],{"class":955},[33,97554,73],{"class":39},[33,97556,40],{"class":76},[33,97558,884],{"class":47},[33,97560,97561,97564,97566,97568,97570,97572],{"class":35,"line":57},[33,97562,97563],{"class":47},"np.add(x,",[33,97565,707],{"class":76},[33,97567,704],{"class":47},[33,97569,94307],{"class":955},[33,97571,73],{"class":39},[33,97573,94702],{"class":47},[33,97575,97576],{"class":35,"line":64},[33,97577,97578],{"class":60},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,97580,97581],{},"③empty_like()",[14,97583,97584],{},[480,97585,97586,97587,97592],{},"创建一个",[480,97588,97589],{},[480,97590,97591],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,97594,97595,97598],{},[30,97596,97597],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,97600,97601],{},[2918,97602],{"alt":28,"src":97603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[1599,97605,97607],{"id":97606},"_264-用法","2.6.4 ？？用法",[14,97609,97610],{},"当想查看一个函数的参数时，可以通过？？来实现",[23,97612,97614],{"className":31631,"code":97613,"language":31633,"meta":28,"style":28},"np.full??\n",[30,97615,97616],{"__ignoreMap":28},[33,97617,97618,97621],{"class":35,"line":36},[33,97619,97620],{"class":47},"np.full",[33,97622,97623],{"class":78656},"??\n",[1599,97625,97627],{"id":97626},"_265-full创建数组","2.6.5 full()创建数组",[23,97629,97631],{"className":31631,"code":97630,"language":31633,"meta":28,"style":28},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[30,97632,97633,97638],{"__ignoreMap":28},[33,97634,97635],{"class":35,"line":36},[33,97636,97637],{"class":47},"full(shape,fill_value)\n",[33,97639,97640],{"class":35,"line":51},[33,97641,97642],{"class":47},"创建全为某个指定值的数组\n",[14,97644,95783],{},[23,97646,97648],{"className":31631,"code":97647,"language":31633,"meta":28,"style":28},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[30,97649,97650,97655],{"__ignoreMap":28},[33,97651,97652],{"class":35,"line":36},[33,97653,97654],{"class":60},"#创建一个一维数组,以20进行填充\n",[33,97656,97657,97660,97662,97664,97666],{"class":35,"line":51},[33,97658,97659],{"class":47},"np.full(",[33,97661,77],{"class":76},[33,97663,704],{"class":47},[33,97665,1045],{"class":76},[33,97667,884],{"class":47},[14,97669,94544],{},[23,97671,97673],{"className":31631,"code":97672,"language":31633,"meta":28,"style":28},"#创建二维数组\nnp.full((3,5),11)\n",[30,97674,97675,97679],{"__ignoreMap":28},[33,97676,97677],{"class":35,"line":36},[33,97678,95200],{"class":60},[33,97680,97681,97684,97686,97688,97690,97692,97694],{"class":35,"line":51},[33,97682,97683],{"class":47},"np.full((",[33,97685,712],{"class":76},[33,97687,704],{"class":47},[33,97689,722],{"class":76},[33,97691,43509],{"class":47},[33,97693,2074],{"class":76},[33,97695,884],{"class":47},[14,97697,97698],{},"③full_like用法",[14,97700,97701],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,97703,97704],{},"这里是指定填充而已",[23,97706,97708],{"className":31631,"code":97707,"language":31633,"meta":28,"style":28},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[30,97709,97710,97715,97739,97744],{"__ignoreMap":28},[33,97711,97712],{"class":35,"line":36},[33,97713,97714],{"class":60},"#创建一个指定形状数组\n",[33,97716,97717,97719,97721,97723,97725,97727,97729,97731,97733,97735,97737],{"class":35,"line":51},[33,97718,126],{"class":47},[33,97720,73],{"class":39},[33,97722,94255],{"class":47},[33,97724,701],{"class":76},[33,97726,704],{"class":47},[33,97728,1936],{"class":76},[33,97730,94260],{"class":47},[33,97732,717],{"class":76},[33,97734,704],{"class":47},[33,97736,742],{"class":76},[33,97738,884],{"class":47},[33,97740,97741],{"class":35,"line":57},[33,97742,97743],{"class":60},"#进行指定填充\n",[33,97745,97746,97749,97751],{"class":35,"line":64},[33,97747,97748],{"class":47},"np.full_like(a,",[33,97750,77],{"class":76},[33,97752,884],{"class":47},[14,97754,12765],{},[14,97756,97757],{},[2918,97758],{"alt":28,"src":97759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[1599,97761,97763],{"id":97762},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23249,97765,97767],{"id":97766},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[23,97769,97771],{"className":31631,"code":97770,"language":31633,"meta":28,"style":28},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[30,97772,97773,97790],{"__ignoreMap":28},[33,97774,97775,97778,97780,97782,97784,97786,97788],{"class":35,"line":36},[33,97776,97777],{"class":47},"np.eye(",[33,97779,717],{"class":76},[33,97781,704],{"class":47},[33,97783,94753],{"class":955},[33,97785,73],{"class":39},[33,97787,40],{"class":76},[33,97789,884],{"class":47},[33,97791,97792],{"class":35,"line":51},[33,97793,97794],{"class":60},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23249,97796,97798],{"id":97797},"_2662-法2identity","2.6.6.2 法2：identity()",[23,97800,97802],{"className":31631,"code":97801,"language":31633,"meta":28,"style":28},"#identity()\nnp.identity(5,dtype=int)\n",[30,97803,97804,97809],{"__ignoreMap":28},[33,97805,97806],{"class":35,"line":36},[33,97807,97808],{"class":60},"#identity()\n",[33,97810,97811,97814,97816,97818,97820,97822,97824],{"class":35,"line":51},[33,97812,97813],{"class":47},"np.identity(",[33,97815,722],{"class":76},[33,97817,704],{"class":47},[33,97819,94753],{"class":955},[33,97821,73],{"class":39},[33,97823,40],{"class":76},[33,97825,884],{"class":47},[14,97827,97828],{},"两个函数是有区别的",[14,97830,97831],{},[2918,97832],{"alt":28,"src":97833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,97835,97836],{},[2918,97837],{"alt":28,"src":97838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[23,97840,97842],{"className":31631,"code":97841,"language":31633,"meta":28,"style":28},"# 创建一个 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",[30,97843,97844,97849,97861,97866,97871,97876,97881,97885,97890,97910,97914,97919,97924],{"__ignoreMap":28},[33,97845,97846],{"class":35,"line":36},[33,97847,97848],{"class":60},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[33,97850,97851,97853,97855,97857,97859],{"class":35,"line":51},[33,97852,97777],{"class":47},[33,97854,712],{"class":76},[33,97856,13686],{"class":47},[33,97858,717],{"class":76},[33,97860,884],{"class":47},[33,97862,97863],{"class":35,"line":57},[33,97864,97865],{"class":60},"# 输出:\n",[33,97867,97868],{"class":35,"line":64},[33,97869,97870],{"class":60},"# [[1. 0. 0. 0.]\n",[33,97872,97873],{"class":35,"line":83},[33,97874,97875],{"class":60},"#  [0. 1. 0. 0.]\n",[33,97877,97878],{"class":35,"line":89},[33,97879,97880],{"class":60},"#  [0. 0. 1. 0.]]\n",[33,97882,97883],{"class":35,"line":98},[33,97884,160],{"emptyLinePlaceholder":159},[33,97886,97887],{"class":35,"line":110},[33,97888,97889],{"class":60},"# 对角线向上偏移1\n",[33,97891,97892,97894,97896,97898,97900,97902,97904,97906,97908],{"class":35,"line":134},[33,97893,97777],{"class":47},[33,97895,712],{"class":76},[33,97897,13686],{"class":47},[33,97899,717],{"class":76},[33,97901,13686],{"class":47},[33,97903,2094],{"class":955},[33,97905,73],{"class":39},[33,97907,701],{"class":76},[33,97909,884],{"class":47},[33,97911,97912],{"class":35,"line":156},[33,97913,97865],{"class":60},[33,97915,97916],{"class":35,"line":163},[33,97917,97918],{"class":60},"# [[0. 1. 0. 0.]\n",[33,97920,97921],{"class":35,"line":169},[33,97922,97923],{"class":60},"#  [0. 0. 1. 0.]\n",[33,97925,97926],{"class":35,"line":175},[33,97927,97928],{"class":60},"#  [0. 0. 0. 1.]]\n",[1599,97930,97932],{"id":97931},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[23,97934,97936],{"className":31631,"code":97935,"language":31633,"meta":28,"style":28},"#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",[30,97937,97938,97943,97947,97952,97957,97962,97967,97972,97977,97982,97987],{"__ignoreMap":28},[33,97939,97940],{"class":35,"line":36},[33,97941,97942],{"class":60},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[33,97944,97945],{"class":35,"line":51},[33,97946,96951],{"class":119},[33,97948,97949],{"class":35,"line":57},[33,97950,97951],{"class":119},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[33,97953,97954],{"class":35,"line":64},[33,97955,97956],{"class":119},"参数介绍：\n",[33,97958,97959],{"class":35,"line":83},[33,97960,97961],{"class":119},"start：序列的起始值\n",[33,97963,97964],{"class":35,"line":89},[33,97965,97966],{"class":119},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[33,97968,97969],{"class":35,"line":98},[33,97970,97971],{"class":119},"num：要生长的等步长的样本数量，默认为50\n",[33,97973,97974],{"class":35,"line":110},[33,97975,97976],{"class":119},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[33,97978,97979],{"class":35,"line":134},[33,97980,97981],{"class":119},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[33,97983,97984],{"class":35,"line":156},[33,97985,97986],{"class":119},"dtype：ndarry的数据类型\n",[33,97988,97989],{"class":35,"line":163},[33,97990,96951],{"class":119},[14,97992,97993],{},[2918,97994],{"alt":28,"src":97995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97997,97998],{},"这里num=是可以省略的",[14,98000,98001],{},"也就是下方两行代码结果是一模一样的",[23,98003,98005],{"className":31631,"code":98004,"language":31633,"meta":28,"style":28},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[30,98006,98007,98024],{"__ignoreMap":28},[33,98008,98009,98012,98014,98016,98018,98020,98022],{"class":35,"line":36},[33,98010,98011],{"class":47},"np.linspace(",[33,98013,701],{"class":76},[33,98015,704],{"class":47},[33,98017,722],{"class":76},[33,98019,704],{"class":47},[33,98021,722],{"class":76},[33,98023,884],{"class":47},[33,98025,98026,98028,98030,98032,98034,98036,98038,98040,98042],{"class":35,"line":51},[33,98027,98011],{"class":47},[33,98029,701],{"class":76},[33,98031,704],{"class":47},[33,98033,722],{"class":76},[33,98035,704],{"class":47},[33,98037,3110],{"class":955},[33,98039,73],{"class":39},[33,98041,722],{"class":76},[33,98043,884],{"class":47},[1599,98045,98047],{"id":98046},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[23,98049,98051],{"className":31631,"code":98050,"language":31633,"meta":28,"style":28},"#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",[30,98052,98053,98058,98062,98067,98072,98077,98082,98086,98091,98096,98100],{"__ignoreMap":28},[33,98054,98055],{"class":35,"line":36},[33,98056,98057],{"class":60},"#logspace函数用于创建一个等比数列，格式如下：\n",[33,98059,98060],{"class":35,"line":51},[33,98061,96951],{"class":119},[33,98063,98064],{"class":35,"line":57},[33,98065,98066],{"class":119},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[33,98068,98069],{"class":35,"line":64},[33,98070,98071],{"class":119},"参数为：\n",[33,98073,98074],{"class":35,"line":83},[33,98075,98076],{"class":119},"start:序列的起始位置为：base**start\n",[33,98078,98079],{"class":35,"line":89},[33,98080,98081],{"class":119},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[33,98083,98084],{"class":35,"line":98},[33,98085,97971],{"class":119},[33,98087,98088],{"class":35,"line":110},[33,98089,98090],{"class":119},"endpoint：是否包含 stop 这个值，默认是 True\n",[33,98092,98093],{"class":35,"line":134},[33,98094,98095],{"class":119},"base：对数的底数，默认是 10（常见对数）\n",[33,98097,98098],{"class":35,"line":156},[33,98099,97986],{"class":119},[33,98101,98102],{"class":35,"line":163},[33,98103,96951],{"class":119},[14,98105,98106],{},[2918,98107],{"alt":28,"src":98108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,98110,98111],{},"logspace()函数中的num参数也是可以不写num=的",[14,98113,98114],{},"endpoint是不可以省略的",[1544,98116,98117],{},"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":28,"searchDepth":51,"depth":51,"links":98119},[98120,98124,98129,98133,98137,98138],{"id":96509,"depth":51,"text":96510,"children":98121},[98122,98123],{"id":96513,"depth":57,"text":96514},{"id":96586,"depth":57,"text":96587},{"id":96618,"depth":51,"text":96619,"children":98125},[98126,98127,98128],{"id":96622,"depth":57,"text":96623},{"id":96804,"depth":57,"text":96805},{"id":96882,"depth":57,"text":96883},{"id":96917,"depth":51,"text":96918,"children":98130},[98131,98132],{"id":96921,"depth":57,"text":96922},{"id":96978,"depth":57,"text":96979},{"id":97074,"depth":51,"text":97075,"children":98134},[98135,98136],{"id":97078,"depth":57,"text":97079},{"id":97090,"depth":57,"text":97091},{"id":97124,"depth":51,"text":97125},{"id":97161,"depth":51,"text":97162,"children":98139},[98140,98141,98142,98143,98144,98145,98146,98147],{"id":97165,"depth":57,"text":97166},{"id":97390,"depth":57,"text":97391},{"id":97397,"depth":57,"text":97398},{"id":97606,"depth":57,"text":97607},{"id":97626,"depth":57,"text":97627},{"id":97762,"depth":57,"text":97763},{"id":97931,"depth":57,"text":97932},{"id":98046,"depth":57,"text":98047},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96501,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98154,"title":98155,"body":98156,"description":24628,"extension":1557,"meta":98249,"navigation":159,"path":98250,"seo":98251,"stem":98252,"__hash__":98253},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98157,"toc":98247},[98158,98161,98164,98167,98170,98173,98176,98179,98182,98185,98188,98191,98193,98196,98199,98204,98207,98210,98244],[10,98159,98155],{"id":98160},"_20魔法命令mprun",[14,98162,98163],{},"逐行分析数据内存的使用情况",[14,98165,98166],{},"语法格式：",[14,98168,98169],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,98171,98172],{},"分析结果列如下：",[14,98174,98175],{},"Line行号",[14,98177,98178],{},"Mem usage内存使用大小",[14,98180,98181],{},"increment内存增量",[14,98183,98184],{},"Line content代码内容",[14,98186,98187],{},"补充说明：",[14,98189,98190],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,98192,96456],{},[14,98194,98195],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,98197,98198],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,98200,98201],{},[2918,98202],{"alt":28,"src":98203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,98205,98206],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,98208,98209],{},"这时候需要重新加载模块",[23,98211,98213],{"className":31631,"code":98212,"language":31633,"meta":28,"style":28},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[30,98214,98215,98220,98227,98232],{"__ignoreMap":28},[33,98216,98217],{"class":35,"line":36},[33,98218,98219],{"class":60},"#重新加载模块\n",[33,98221,98222,98224],{"class":35,"line":51},[33,98223,31645],{"class":39},[33,98225,98226],{"class":47}," importlib\n",[33,98228,98229],{"class":35,"line":57},[33,98230,98231],{"class":47},"importlib.reload(mprun_test)\n",[33,98233,98234,98236,98239,98241],{"class":35,"line":64},[33,98235,1939],{"class":39},[33,98237,98238],{"class":47},"mprun ",[33,98240,1199],{"class":39},[33,98242,98243],{"class":47},"f mprun_test.fun_test mprun_test.fun_test()\n",[1544,98245,98246],{},"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":28,"searchDepth":51,"depth":51,"links":98248},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98155,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98255,"title":98256,"body":98257,"description":24628,"extension":1557,"meta":98274,"navigation":159,"path":98275,"seo":98276,"stem":98277,"__hash__":98278},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98258,"toc":98272},[98259,98262,98267],[10,98260,98256],{"id":98261},"_3一维数组的索引和切片",[14,98263,98264],{},[2918,98265],{"alt":28,"src":98266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,98268,98269],{},[2918,98270],{"alt":28,"src":98271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":28,"searchDepth":51,"depth":51,"links":98273},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98256,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98280,"title":98281,"body":98282,"description":24628,"extension":1557,"meta":98765,"navigation":159,"path":98766,"seo":98767,"stem":98768,"__hash__":98769},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98283,"toc":98763},[98284,98287,98290,98295,98328,98331,98369,98372,98406,98409,98514,98517,98554,98557,98658,98661,98712,98715,98757,98760],[10,98285,98281],{"id":98286},"_4二维数组的索引与切片",[14,98288,98289],{},"①获取指定单个元素",[14,98291,98292],{},[2918,98293],{"alt":28,"src":98294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[23,98296,98298],{"className":31631,"code":98297,"language":31633,"meta":28,"style":28},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[30,98299,98300,98305,98310,98315],{"__ignoreMap":28},[33,98301,98302],{"class":35,"line":36},[33,98303,98304],{"class":60},"#获取元素9\n",[33,98306,98307],{"class":35,"line":51},[33,98308,98309],{"class":60},"#先获取所在行，再获取所在列\n",[33,98311,98312],{"class":35,"line":57},[33,98313,98314],{"class":60},"#数组[行索引号，列索引号]\n",[33,98316,98317,98320,98322,98324,98326],{"class":35,"line":64},[33,98318,98319],{"class":47},"a[",[33,98321,701],{"class":76},[33,98323,704],{"class":47},[33,98325,707],{"class":76},[33,98327,34499],{"class":47},[14,98329,98330],{},"②获取整行元素",[23,98332,98334],{"className":31631,"code":98333,"language":31633,"meta":28,"style":28},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[30,98335,98336,98341,98346,98354,98359],{"__ignoreMap":28},[33,98337,98338],{"class":35,"line":36},[33,98339,98340],{"class":60},"#获取整行 数组[行索引号]\n",[33,98342,98343],{"class":35,"line":51},[33,98344,98345],{"class":60},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[33,98347,98348,98350,98352],{"class":35,"line":57},[33,98349,98319],{"class":47},[33,98351,707],{"class":76},[33,98353,34499],{"class":47},[33,98355,98356],{"class":35,"line":64},[33,98357,98358],{"class":60},"#也可以负索引获取一行\n",[33,98360,98361,98363,98365,98367],{"class":35,"line":83},[33,98362,98319],{"class":47},[33,98364,1199],{"class":39},[33,98366,701],{"class":76},[33,98368,34499],{"class":47},[14,98370,98371],{},"③获取整列元素",[23,98373,98375],{"className":31631,"code":98374,"language":31633,"meta":28,"style":28},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[30,98376,98377,98382,98391,98396],{"__ignoreMap":28},[33,98378,98379],{"class":35,"line":36},[33,98380,98381],{"class":60},"#获取整列 数组名[:,列索引]\n",[33,98383,98384,98387,98389],{"class":35,"line":51},[33,98385,98386],{"class":47},"a[:,",[33,98388,707],{"class":76},[33,98390,34499],{"class":47},[33,98392,98393],{"class":35,"line":57},[33,98394,98395],{"class":60},"#也可以负索引获取一列\n",[33,98397,98398,98400,98402,98404],{"class":35,"line":64},[33,98399,98386],{"class":47},[33,98401,1199],{"class":39},[33,98403,701],{"class":76},[33,98405,34499],{"class":47},[14,98407,98408],{},"④部分行部分列的元素",[23,98410,98412],{"className":31631,"code":98411,"language":31633,"meta":28,"style":28},"#部分行部分列 数组名[行切片，列切片]\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",[30,98413,98414,98419,98429,98433,98437,98442,98447,98451,98463,98467,98471,98476,98481,98486,98491,98495,98500],{"__ignoreMap":28},[33,98415,98416],{"class":35,"line":36},[33,98417,98418],{"class":60},"#部分行部分列 数组名[行切片，列切片]\n",[33,98420,98421,98424,98426],{"class":35,"line":51},[33,98422,98423],{"class":47},"a[:",[33,98425,707],{"class":76},[33,98427,98428],{"class":47},",:]\n",[33,98430,98431],{"class":35,"line":57},[33,98432,94817],{"class":60},[33,98434,98435],{"class":35,"line":64},[33,98436,95181],{"class":119},[33,98438,98439],{"class":35,"line":83},[33,98440,98441],{"class":119},"array([[ 1,  2,  3,  4,  5,  6],\n",[33,98443,98444],{"class":35,"line":89},[33,98445,98446],{"class":119},"       [ 7,  8,  9, 10, 11, 12]])\n",[33,98448,98449],{"class":35,"line":98},[33,98450,95181],{"class":119},[33,98452,98453,98455,98457,98459,98461],{"class":35,"line":110},[33,98454,98386],{"class":47},[33,98456,701],{"class":76},[33,98458,2458],{"class":47},[33,98460,717],{"class":76},[33,98462,34499],{"class":47},[33,98464,98465],{"class":35,"line":134},[33,98466,94817],{"class":60},[33,98468,98469],{"class":35,"line":156},[33,98470,95181],{"class":119},[33,98472,98473],{"class":35,"line":163},[33,98474,98475],{"class":119},"array([[ 2,  3,  4],\n",[33,98477,98478],{"class":35,"line":169},[33,98479,98480],{"class":119},"       [ 8,  9, 10],\n",[33,98482,98483],{"class":35,"line":175},[33,98484,98485],{"class":119},"       [14, 15, 16],\n",[33,98487,98488],{"class":35,"line":181},[33,98489,98490],{"class":119},"       [20, 21, 22]])\n",[33,98492,98493],{"class":35,"line":196},[33,98494,95181],{"class":119},[33,98496,98497],{"class":35,"line":213},[33,98498,98499],{"class":60},"#对列行同时进行切片，使用了step参数\n",[33,98501,98502,98505,98507,98510,98512],{"class":35,"line":228},[33,98503,98504],{"class":47},"a[::",[33,98506,707],{"class":76},[33,98508,98509],{"class":47},",::",[33,98511,707],{"class":76},[33,98513,34499],{"class":47},[14,98515,98516],{},"⑤同时获取两个元素",[23,98518,98520],{"className":31631,"code":98519,"language":31633,"meta":28,"style":28},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[30,98521,98522,98527,98532],{"__ignoreMap":28},[33,98523,98524],{"class":35,"line":36},[33,98525,98526],{"class":60},"#同时获取第三行第二列，第四行第一列\n",[33,98528,98529],{"class":35,"line":51},[33,98530,98531],{"class":60},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[33,98533,98534,98537,98539,98541,98543,98545,98547,98549,98551],{"class":35,"line":57},[33,98535,98536],{"class":47},"a[(",[33,98538,707],{"class":76},[33,98540,704],{"class":47},[33,98542,712],{"class":76},[33,98544,43500],{"class":47},[33,98546,701],{"class":76},[33,98548,704],{"class":47},[33,98550,766],{"class":76},[33,98552,98553],{"class":47},")]\n",[14,98555,98556],{},"⑥切片，对行进行反向获取",[23,98558,98560],{"className":31631,"code":98559,"language":31633,"meta":28,"style":28},"#切片 对所有行进行反向获取\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",[30,98561,98562,98567,98577,98581,98585,98590,98595,98600,98605,98609,98614,98630,98634,98639,98644,98649,98654],{"__ignoreMap":28},[33,98563,98564],{"class":35,"line":36},[33,98565,98566],{"class":60},"#切片 对所有行进行反向获取\n",[33,98568,98569,98571,98573,98575],{"class":35,"line":51},[33,98570,98504],{"class":47},[33,98572,1199],{"class":39},[33,98574,701],{"class":76},[33,98576,34499],{"class":47},[33,98578,98579],{"class":35,"line":57},[33,98580,94817],{"class":60},[33,98582,98583],{"class":35,"line":64},[33,98584,95181],{"class":119},[33,98586,98587],{"class":35,"line":83},[33,98588,98589],{"class":119},"array([[19, 20, 21, 22, 23, 24],\n",[33,98591,98592],{"class":35,"line":89},[33,98593,98594],{"class":119},"       [13, 14, 15, 16, 17, 18],\n",[33,98596,98597],{"class":35,"line":98},[33,98598,98599],{"class":119},"       [ 7,  8,  9, 10, 11, 12],\n",[33,98601,98602],{"class":35,"line":110},[33,98603,98604],{"class":119},"       [ 1,  2,  3,  4,  5,  6]])\n",[33,98606,98607],{"class":35,"line":134},[33,98608,95181],{"class":119},[33,98610,98611],{"class":35,"line":156},[33,98612,98613],{"class":60},"#对行列都进行反向切片获取\n",[33,98615,98616,98618,98620,98622,98624,98626,98628],{"class":35,"line":163},[33,98617,98504],{"class":47},[33,98619,1199],{"class":39},[33,98621,701],{"class":76},[33,98623,98509],{"class":47},[33,98625,1199],{"class":39},[33,98627,701],{"class":76},[33,98629,34499],{"class":47},[33,98631,98632],{"class":35,"line":169},[33,98633,95181],{"class":119},[33,98635,98636],{"class":35,"line":175},[33,98637,98638],{"class":119},"array([[24, 23, 22, 21, 20, 19],\n",[33,98640,98641],{"class":35,"line":181},[33,98642,98643],{"class":119},"       [18, 17, 16, 15, 14, 13],\n",[33,98645,98646],{"class":35,"line":196},[33,98647,98648],{"class":119},"       [12, 11, 10,  9,  8,  7],\n",[33,98650,98651],{"class":35,"line":213},[33,98652,98653],{"class":119},"       [ 6,  5,  4,  3,  2,  1]])\n",[33,98655,98656],{"class":35,"line":228},[33,98657,95181],{"class":119},[14,98659,98660],{},"⑦修改元素",[23,98662,98664],{"className":31631,"code":98663,"language":31633,"meta":28,"style":28},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[30,98665,98666,98671,98689,98694],{"__ignoreMap":28},[33,98667,98668],{"class":35,"line":36},[33,98669,98670],{"class":60},"#获取前两行和前两列\n",[33,98672,98673,98676,98678,98680,98682,98685,98687],{"class":35,"line":51},[33,98674,98675],{"class":47},"sub_a",[33,98677,73],{"class":39},[33,98679,98423],{"class":47},[33,98681,707],{"class":76},[33,98683,98684],{"class":47},",:",[33,98686,707],{"class":76},[33,98688,34499],{"class":47},[33,98690,98691],{"class":35,"line":57},[33,98692,98693],{"class":60},"#修改sub_a第一个元素的值\n",[33,98695,98696,98699,98701,98703,98705,98707,98709],{"class":35,"line":64},[33,98697,98698],{"class":47},"sub_a[",[33,98700,766],{"class":76},[33,98702,704],{"class":47},[33,98704,766],{"class":76},[33,98706,693],{"class":47},[33,98708,73],{"class":39},[33,98710,98711],{"class":76},"100\n",[14,98713,98714],{},"⑧数组复制copy()",[23,98716,98718],{"className":31631,"code":98717,"language":31633,"meta":28,"style":28},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[30,98719,98720,98725,98735,98740],{"__ignoreMap":28},[33,98721,98722],{"class":35,"line":36},[33,98723,98724],{"class":60},"#数组复制\n",[33,98726,98727,98730,98732],{"class":35,"line":51},[33,98728,98729],{"class":47},"copy_a",[33,98731,73],{"class":39},[33,98733,98734],{"class":47},"np.copy(sub_a)\n",[33,98736,98737],{"class":35,"line":57},[33,98738,98739],{"class":60},"#修改copy_a后不影响原数组\n",[33,98741,98742,98745,98747,98749,98751,98753,98755],{"class":35,"line":64},[33,98743,98744],{"class":47},"copy_a[",[33,98746,766],{"class":76},[33,98748,704],{"class":47},[33,98750,766],{"class":76},[33,98752,693],{"class":47},[33,98754,73],{"class":39},[33,98756,98711],{"class":76},[14,98758,98759],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1544,98761,98762],{},"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":28,"searchDepth":51,"depth":51,"links":98764},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98281,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98771,"title":98772,"body":98773,"description":24628,"extension":1557,"meta":99265,"navigation":159,"path":99266,"seo":99267,"stem":99268,"__hash__":99269},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98774,"toc":99257},[98775,98778,98782,98785,98788,98841,98844,98869,98872,98891,98911,98914,98930,98934,98980,98984,99026,99030,99033,99036,99039,99042,99045,99107,99167,99171,99174,99231,99235,99240,99249,99254],[10,98776,98772],{"id":98777},"_5改变数组的维度",[18,98779,98781],{"id":98780},"_51-使用reshape","5.1 使用reshape()",[14,98783,98784],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,98786,98787],{},"①一维数组转换为二维数组",[23,98789,98791],{"className":31631,"code":98790,"language":31633,"meta":28,"style":28},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[30,98792,98793,98809,98814,98819,98824],{"__ignoreMap":28},[33,98794,98795,98797,98799,98801,98803,98805,98807],{"class":35,"line":36},[33,98796,126],{"class":47},[33,98798,73],{"class":39},[33,98800,94255],{"class":47},[33,98802,701],{"class":76},[33,98804,704],{"class":47},[33,98806,2124],{"class":76},[33,98808,884],{"class":47},[33,98810,98811],{"class":35,"line":51},[33,98812,98813],{"class":60},"#将一维数组进行转换\n",[33,98815,98816],{"class":35,"line":57},[33,98817,98818],{"class":60},"#注意点：元素个数不可以变\n",[33,98820,98821],{"class":35,"line":64},[33,98822,98823],{"class":60},"#转换维度要保持一致，不一致就异常！！！\n",[33,98825,98826,98828,98830,98833,98835,98837,98839],{"class":35,"line":83},[33,98827,94559],{"class":47},[33,98829,73],{"class":39},[33,98831,98832],{"class":47},"a.reshape(",[33,98834,707],{"class":76},[33,98836,704],{"class":47},[33,98838,727],{"class":76},[33,98840,884],{"class":47},[14,98842,98843],{},"②一维数组转换为三维数组",[23,98845,98847],{"className":31631,"code":98846,"language":31633,"meta":28,"style":28},"aaa=a.reshape(2,3,2)\n",[30,98848,98849],{"__ignoreMap":28},[33,98850,98851,98853,98855,98857,98859,98861,98863,98865,98867],{"class":35,"line":36},[33,98852,96774],{"class":47},[33,98854,73],{"class":39},[33,98856,98832],{"class":47},[33,98858,707],{"class":76},[33,98860,704],{"class":47},[33,98862,712],{"class":76},[33,98864,704],{"class":47},[33,98866,707],{"class":76},[33,98868,884],{"class":47},[14,98870,98871],{},"③二维数组转化为一维数组",[23,98873,98875],{"className":31631,"code":98874,"language":31633,"meta":28,"style":28},"#知道元素个数：\naa.reshape(12)\n",[30,98876,98877,98882],{"__ignoreMap":28},[33,98878,98879],{"class":35,"line":36},[33,98880,98881],{"class":60},"#知道元素个数：\n",[33,98883,98884,98887,98889],{"class":35,"line":51},[33,98885,98886],{"class":47},"aa.reshape(",[33,98888,2099],{"class":76},[33,98890,884],{"class":47},[23,98892,98894],{"className":31631,"code":98893,"language":31633,"meta":28,"style":28},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[30,98895,98896,98901],{"__ignoreMap":28},[33,98897,98898],{"class":35,"line":36},[33,98899,98900],{"class":60},"#不知道元素个数，参数传递-1\n",[33,98902,98903,98905,98907,98909],{"class":35,"line":51},[33,98904,98886],{"class":47},[33,98906,1199],{"class":39},[33,98908,701],{"class":76},[33,98910,884],{"class":47},[14,98912,98913],{},"④三维数组转换为一维数组",[23,98915,98917],{"className":31631,"code":98916,"language":31633,"meta":28,"style":28},"aaa.reshape(-1)\n",[30,98918,98919],{"__ignoreMap":28},[33,98920,98921,98924,98926,98928],{"class":35,"line":36},[33,98922,98923],{"class":47},"aaa.reshape(",[33,98925,1199],{"class":39},[33,98927,701],{"class":76},[33,98929,884],{"class":47},[18,98931,98933],{"id":98932},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[23,98935,98937],{"className":31631,"code":98936,"language":31633,"meta":28,"style":28},"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",[30,98938,98939,98966,98971,98975],{"__ignoreMap":28},[33,98940,98941,98943,98945,98947,98949,98951,98953,98955,98957,98959,98961,98963],{"class":35,"line":36},[33,98942,94559],{"class":47},[33,98944,73],{"class":39},[33,98946,94255],{"class":47},[33,98948,701],{"class":76},[33,98950,704],{"class":47},[33,98952,2124],{"class":76},[33,98954,94260],{"class":47},[33,98956,707],{"class":76},[33,98958,704],{"class":47},[33,98960,727],{"class":76},[33,98962,352],{"class":47},[33,98964,98965],{"class":60},"#转换为2行6列的数组\n",[33,98967,98968],{"class":35,"line":51},[33,98969,98970],{"class":47},"aa.revel()\n",[33,98972,98973],{"class":35,"line":57},[33,98974,94817],{"class":60},[33,98976,98977],{"class":35,"line":64},[33,98978,98979],{"class":60},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[18,98981,98983],{"id":98982},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[23,98985,98987],{"className":31631,"code":98986,"language":31633,"meta":28,"style":28},"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",[30,98988,98989,99013,99018,99022],{"__ignoreMap":28},[33,98990,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011],{"class":35,"line":36},[33,98992,94559],{"class":47},[33,98994,73],{"class":39},[33,98996,94255],{"class":47},[33,98998,701],{"class":76},[33,99000,704],{"class":47},[33,99002,2124],{"class":76},[33,99004,94260],{"class":47},[33,99006,707],{"class":76},[33,99008,704],{"class":47},[33,99010,727],{"class":76},[33,99012,884],{"class":47},[33,99014,99015],{"class":35,"line":51},[33,99016,99017],{"class":47},"aa.flatten()\n",[33,99019,99020],{"class":35,"line":57},[33,99021,94817],{"class":60},[33,99023,99024],{"class":35,"line":64},[33,99025,98979],{"class":60},[18,99027,99029],{"id":99028},"_54-使用resize","5.4 使用resize()",[14,99031,99032],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,99034,99035],{},"通过resize方法可以改变数组的维度",[14,99037,99038],{},"#resize修改数组维度",[14,99040,99041],{},"#以元组的形式指定形状",[14,99043,99044],{},"#改变的是原数组",[23,99046,99048],{"className":31631,"code":99047,"language":31633,"meta":28,"style":28},"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",[30,99049,99050,99066,99086,99099,99103],{"__ignoreMap":28},[33,99051,99052,99054,99056,99058,99060,99062,99064],{"class":35,"line":36},[33,99053,126],{"class":47},[33,99055,73],{"class":39},[33,99057,94255],{"class":47},[33,99059,701],{"class":76},[33,99061,704],{"class":47},[33,99063,2124],{"class":76},[33,99065,884],{"class":47},[33,99067,99068,99071,99073,99075,99077,99079,99081,99083],{"class":35,"line":51},[33,99069,99070],{"class":47},"a.shape",[33,99072,73],{"class":39},[33,99074,345],{"class":47},[33,99076,707],{"class":76},[33,99078,704],{"class":47},[33,99080,727],{"class":76},[33,99082,352],{"class":47},[33,99084,99085],{"class":60},"#改变了原数组\n",[33,99087,99088,99090,99092,99095,99097],{"class":35,"line":57},[33,99089,126],{"class":47},[33,99091,73],{"class":39},[33,99093,99094],{"class":47},"resize((",[33,99096,2099],{"class":76},[33,99098,31750],{"class":47},[33,99100,99101],{"class":35,"line":64},[33,99102,94817],{"class":60},[33,99104,99105],{"class":35,"line":83},[33,99106,98979],{"class":60},[23,99108,99110],{"className":31631,"code":99109,"language":31633,"meta":28,"style":28},"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",[30,99111,99112,99125,99129,99133,99138,99143,99148,99153,99158,99163],{"__ignoreMap":28},[33,99113,99114,99117,99119,99121,99123],{"class":35,"line":36},[33,99115,99116],{"class":47},"a.resize((",[33,99118,727],{"class":76},[33,99120,704],{"class":47},[33,99122,707],{"class":76},[33,99124,31750],{"class":47},[33,99126,99127],{"class":35,"line":51},[33,99128,94817],{"class":60},[33,99130,99131],{"class":35,"line":57},[33,99132,95181],{"class":119},[33,99134,99135],{"class":35,"line":64},[33,99136,99137],{"class":119},"array([[ 1,  2],\n",[33,99139,99140],{"class":35,"line":83},[33,99141,99142],{"class":119},"       [ 3,  4],\n",[33,99144,99145],{"class":35,"line":89},[33,99146,99147],{"class":119},"       [ 5,  6],\n",[33,99149,99150],{"class":35,"line":98},[33,99151,99152],{"class":119},"       [ 7,  8],\n",[33,99154,99155],{"class":35,"line":110},[33,99156,99157],{"class":119},"       [ 9, 10],\n",[33,99159,99160],{"class":35,"line":134},[33,99161,99162],{"class":119},"       [11, 12]])\n",[33,99164,99165],{"class":35,"line":156},[33,99166,95181],{"class":119},[18,99168,99170],{"id":99169},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,99172,99173],{},"改变了原数组",[23,99175,99177],{"className":31631,"code":99176,"language":31633,"meta":28,"style":28},"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",[30,99178,99179,99195,99211,99215,99219,99223,99227],{"__ignoreMap":28},[33,99180,99181,99183,99185,99187,99189,99191,99193],{"class":35,"line":36},[33,99182,126],{"class":47},[33,99184,73],{"class":39},[33,99186,94255],{"class":47},[33,99188,701],{"class":76},[33,99190,704],{"class":47},[33,99192,2124],{"class":76},[33,99194,884],{"class":47},[33,99196,99197,99199,99201,99203,99205,99207,99209],{"class":35,"line":51},[33,99198,99070],{"class":47},[33,99200,73],{"class":39},[33,99202,345],{"class":47},[33,99204,707],{"class":76},[33,99206,704],{"class":47},[33,99208,727],{"class":76},[33,99210,884],{"class":47},[33,99212,99213],{"class":35,"line":57},[33,99214,94817],{"class":60},[33,99216,99217],{"class":35,"line":64},[33,99218,95181],{"class":119},[33,99220,99221],{"class":35,"line":83},[33,99222,98441],{"class":119},[33,99224,99225],{"class":35,"line":89},[33,99226,98446],{"class":119},[33,99228,99229],{"class":35,"line":98},[33,99230,95181],{"class":119},[18,99232,99234],{"id":99233},"_56-重要比较","5.6 重要比较：",[14,99236,99237],{},[2918,99238],{"alt":28,"src":99239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,99241,99242,99243,99245,99246,99248],{},"口诀：NumPy 函数要么用 ",[30,99244,97216],{},"，要么用 ",[30,99247,32749],{},"，创建结构用 shape，造数据用 size",[14,99250,99251],{},[2918,99252],{"alt":28,"src":99253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1544,99255,99256],{},"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":28,"searchDepth":51,"depth":51,"links":99258},[99259,99260,99261,99262,99263,99264],{"id":98780,"depth":51,"text":98781},{"id":98932,"depth":51,"text":98933},{"id":98982,"depth":51,"text":98983},{"id":99028,"depth":51,"text":99029},{"id":99169,"depth":51,"text":99170},{"id":99233,"depth":51,"text":99234},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98772,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99271,"title":99272,"body":99273,"description":24628,"extension":1557,"meta":100345,"navigation":159,"path":100346,"seo":100347,"stem":100348,"__hash__":100349},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99274,"toc":100339},[99275,99278,99282,99285,99288,99291,99356,99359,99399,99402,99484,99487,99492,99514,99516,99521,99526,99529,99532,99687,99690,99892,99896,99899,99902,99970,99972,99977,99980,99983,100063,100067,100070,100072,100145,100147,100152,100154,100234,100238,100241,100244,100247,100250,100253,100256,100336],[10,99276,99272],{"id":99277},"_6数组的拼接",[18,99279,99281],{"id":99280},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,99283,99284],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,99286,99287],{},"函数内部传两个数列构成的数列或者元组",[14,99289,99290],{},"①一维数组的拼接",[23,99292,99294],{"className":31631,"code":99293,"language":31633,"meta":28,"style":28},"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",[30,99295,99296,99316,99336,99341,99346,99351],{"__ignoreMap":28},[33,99297,99298,99300,99302,99304,99306,99308,99310,99312,99314],{"class":35,"line":36},[33,99299,126],{"class":47},[33,99301,73],{"class":39},[33,99303,94277],{"class":47},[33,99305,701],{"class":76},[33,99307,704],{"class":47},[33,99309,707],{"class":76},[33,99311,704],{"class":47},[33,99313,712],{"class":76},[33,99315,1276],{"class":47},[33,99317,99318,99320,99322,99324,99326,99328,99330,99332,99334],{"class":35,"line":51},[33,99319,1094],{"class":47},[33,99321,73],{"class":39},[33,99323,94277],{"class":47},[33,99325,717],{"class":76},[33,99327,704],{"class":47},[33,99329,722],{"class":76},[33,99331,704],{"class":47},[33,99333,727],{"class":76},[33,99335,1276],{"class":47},[33,99337,99338],{"class":35,"line":57},[33,99339,99340],{"class":60},"#调用concatenate进行数组拼接\n",[33,99342,99343],{"class":35,"line":64},[33,99344,99345],{"class":47},"np.concatenate((a,b))\n",[33,99347,99348],{"class":35,"line":83},[33,99349,99350],{"class":60},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[33,99352,99353],{"class":35,"line":89},[33,99354,99355],{"class":60},"#np.concatenate([a,b])\n",[14,99357,99358],{},"②一维多个数组拼接",[23,99360,99362],{"className":31631,"code":99361,"language":31633,"meta":28,"style":28},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[30,99363,99364,99369,99389,99394],{"__ignoreMap":28},[33,99365,99366],{"class":35,"line":36},[33,99367,99368],{"class":60},"#也可以多个数组进行拼接\n",[33,99370,99371,99373,99375,99377,99379,99381,99383,99385,99387],{"class":35,"line":51},[33,99372,1902],{"class":47},[33,99374,73],{"class":39},[33,99376,94277],{"class":47},[33,99378,77],{"class":76},[33,99380,704],{"class":47},[33,99382,2074],{"class":76},[33,99384,704],{"class":47},[33,99386,2124],{"class":76},[33,99388,1276],{"class":47},[33,99390,99391],{"class":35,"line":57},[33,99392,99393],{"class":47},"c\n",[33,99395,99396],{"class":35,"line":64},[33,99397,99398],{"class":47},"np.concatenate((a,b,c))\n",[14,99400,99401],{},"③二维数组拼接",[23,99403,99405],{"className":31631,"code":99404,"language":31633,"meta":28,"style":28},"#二维数组使用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",[30,99406,99407,99412,99436,99461,99466,99471],{"__ignoreMap":28},[33,99408,99409],{"class":35,"line":36},[33,99410,99411],{"class":60},"#二维数组使用concatenate进行拼接\n",[33,99413,99414,99416,99418,99420,99422,99424,99426,99428,99430,99432,99434],{"class":35,"line":51},[33,99415,94559],{"class":47},[33,99417,73],{"class":39},[33,99419,94255],{"class":47},[33,99421,701],{"class":76},[33,99423,704],{"class":47},[33,99425,2124],{"class":76},[33,99427,94260],{"class":47},[33,99429,712],{"class":76},[33,99431,704],{"class":47},[33,99433,717],{"class":76},[33,99435,884],{"class":47},[33,99437,99438,99441,99443,99445,99447,99449,99451,99453,99455,99457,99459],{"class":35,"line":57},[33,99439,99440],{"class":47},"bb",[33,99442,73],{"class":39},[33,99444,94255],{"class":47},[33,99446,1948],{"class":76},[33,99448,704],{"class":47},[33,99450,2242],{"class":76},[33,99452,94260],{"class":47},[33,99454,712],{"class":76},[33,99456,704],{"class":47},[33,99458,717],{"class":76},[33,99460,884],{"class":47},[33,99462,99463],{"class":35,"line":64},[33,99464,99465],{"class":60},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[33,99467,99468],{"class":35,"line":83},[33,99469,99470],{"class":60},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[33,99472,99473,99476,99478,99480,99482],{"class":35,"line":89},[33,99474,99475],{"class":47},"np.concatenate((aa,bb),",[33,99477,48767],{"class":955},[33,99479,73],{"class":39},[33,99481,766],{"class":76},[33,99483,884],{"class":47},[14,99485,99486],{},"结果：",[14,99488,99489],{},[2918,99490],{"alt":28,"src":99491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[23,99493,99495],{"className":31631,"code":99494,"language":31633,"meta":28,"style":28},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[30,99496,99497,99502],{"__ignoreMap":28},[33,99498,99499],{"class":35,"line":36},[33,99500,99501],{"class":60},"#指定axis为1进行拼接\n",[33,99503,99504,99506,99508,99510,99512],{"class":35,"line":51},[33,99505,99475],{"class":47},[33,99507,48767],{"class":955},[33,99509,73],{"class":39},[33,99511,701],{"class":76},[33,99513,884],{"class":47},[14,99515,99486],{},[14,99517,99518],{},[2918,99519],{"alt":28,"src":99520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,99522,99523],{},[480,99524,99525],{},"二维数组总结：0竖着方向，1横着方向",[14,99527,99528],{},"④三维数组拼接",[14,99530,99531],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[23,99533,99535],{"className":31631,"code":99534,"language":31633,"meta":28,"style":28},"#两个三行六列\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",[30,99536,99537,99542,99570,99600,99605,99622,99627,99632,99637,99654,99659,99664,99669,99682],{"__ignoreMap":28},[33,99538,99539],{"class":35,"line":36},[33,99540,99541],{"class":60},"#两个三行六列\n",[33,99543,99544,99546,99548,99550,99552,99554,99556,99558,99560,99562,99564,99566,99568],{"class":35,"line":51},[33,99545,96774],{"class":47},[33,99547,73],{"class":39},[33,99549,94255],{"class":47},[33,99551,701],{"class":76},[33,99553,704],{"class":47},[33,99555,1936],{"class":76},[33,99557,94260],{"class":47},[33,99559,707],{"class":76},[33,99561,704],{"class":47},[33,99563,712],{"class":76},[33,99565,704],{"class":47},[33,99567,727],{"class":76},[33,99569,884],{"class":47},[33,99571,99572,99575,99577,99579,99581,99583,99586,99588,99590,99592,99594,99596,99598],{"class":35,"line":57},[33,99573,99574],{"class":47},"bbb",[33,99576,73],{"class":39},[33,99578,94255],{"class":47},[33,99580,1948],{"class":76},[33,99582,704],{"class":47},[33,99584,99585],{"class":76},"137",[33,99587,94260],{"class":47},[33,99589,707],{"class":76},[33,99591,704],{"class":47},[33,99593,712],{"class":76},[33,99595,704],{"class":47},[33,99597,727],{"class":76},[33,99599,884],{"class":47},[33,99601,99602],{"class":35,"line":64},[33,99603,99604],{"class":60},"#axis=0\n",[33,99606,99607,99609,99611,99614,99616,99618,99620],{"class":35,"line":83},[33,99608,2295],{"class":47},[33,99610,73],{"class":39},[33,99612,99613],{"class":47},"np.concatenate((aaa,bbb),",[33,99615,48767],{"class":955},[33,99617,73],{"class":39},[33,99619,766],{"class":76},[33,99621,884],{"class":47},[33,99623,99624],{"class":35,"line":89},[33,99625,99626],{"class":47},"s.shape\n",[33,99628,99629],{"class":35,"line":98},[33,99630,99631],{"class":60},"#输出：(4,3,6)\n",[33,99633,99634],{"class":35,"line":110},[33,99635,99636],{"class":60},"#axis=1\n",[33,99638,99639,99642,99644,99646,99648,99650,99652],{"class":35,"line":134},[33,99640,99641],{"class":47},"ss",[33,99643,73],{"class":39},[33,99645,99613],{"class":47},[33,99647,48767],{"class":955},[33,99649,73],{"class":39},[33,99651,701],{"class":76},[33,99653,884],{"class":47},[33,99655,99656],{"class":35,"line":156},[33,99657,99658],{"class":47},"ss.shape\n",[33,99660,99661],{"class":35,"line":163},[33,99662,99663],{"class":60},"#输出：(2,6,6)\n",[33,99665,99666],{"class":35,"line":169},[33,99667,99668],{"class":60},"#axis=2\n",[33,99670,99671,99673,99675,99677,99679],{"class":35,"line":175},[33,99672,99613],{"class":47},[33,99674,48767],{"class":955},[33,99676,73],{"class":39},[33,99678,707],{"class":76},[33,99680,99681],{"class":47},").shape\n",[33,99683,99684],{"class":35,"line":181},[33,99685,99686],{"class":60},"#输出：（2，3，12）\n",[14,99688,99689],{},"⑤四维数组拼接",[23,99691,99693],{"className":31631,"code":99692,"language":31633,"meta":28,"style":28},"#两个三行六列\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",[30,99694,99695,99699,99727,99755,99780,99806,99810,99823,99828,99832,99844,99849,99853,99865,99870,99875,99887],{"__ignoreMap":28},[33,99696,99697],{"class":35,"line":36},[33,99698,99541],{"class":60},[33,99700,99701,99703,99705,99707,99709,99711,99713,99715,99717,99719,99721,99723,99725],{"class":35,"line":51},[33,99702,96774],{"class":47},[33,99704,73],{"class":39},[33,99706,94255],{"class":47},[33,99708,701],{"class":76},[33,99710,704],{"class":47},[33,99712,1936],{"class":76},[33,99714,94260],{"class":47},[33,99716,707],{"class":76},[33,99718,704],{"class":47},[33,99720,712],{"class":76},[33,99722,704],{"class":47},[33,99724,727],{"class":76},[33,99726,884],{"class":47},[33,99728,99729,99731,99733,99735,99737,99739,99741,99743,99745,99747,99749,99751,99753],{"class":35,"line":57},[33,99730,99574],{"class":47},[33,99732,73],{"class":39},[33,99734,94255],{"class":47},[33,99736,1948],{"class":76},[33,99738,704],{"class":47},[33,99740,99585],{"class":76},[33,99742,94260],{"class":47},[33,99744,707],{"class":76},[33,99746,704],{"class":47},[33,99748,712],{"class":76},[33,99750,704],{"class":47},[33,99752,727],{"class":76},[33,99754,884],{"class":47},[33,99756,99757,99760,99762,99764,99766,99768,99770,99772,99774,99776,99778],{"class":35,"line":64},[33,99758,99759],{"class":47},"aaaa",[33,99761,73],{"class":39},[33,99763,98923],{"class":47},[33,99765,707],{"class":76},[33,99767,704],{"class":47},[33,99769,712],{"class":76},[33,99771,704],{"class":47},[33,99773,712],{"class":76},[33,99775,704],{"class":47},[33,99777,707],{"class":76},[33,99779,884],{"class":47},[33,99781,99782,99785,99787,99790,99792,99794,99796,99798,99800,99802,99804],{"class":35,"line":83},[33,99783,99784],{"class":47},"bbbb",[33,99786,73],{"class":39},[33,99788,99789],{"class":47},"bbb.reshape(",[33,99791,707],{"class":76},[33,99793,704],{"class":47},[33,99795,712],{"class":76},[33,99797,704],{"class":47},[33,99799,712],{"class":76},[33,99801,704],{"class":47},[33,99803,707],{"class":76},[33,99805,884],{"class":47},[33,99807,99808],{"class":35,"line":89},[33,99809,99604],{"class":60},[33,99811,99812,99815,99817,99819,99821],{"class":35,"line":98},[33,99813,99814],{"class":47},"np.concatenate((aaaa,bbbb),",[33,99816,48767],{"class":955},[33,99818,73],{"class":39},[33,99820,766],{"class":76},[33,99822,99681],{"class":47},[33,99824,99825],{"class":35,"line":110},[33,99826,99827],{"class":60},"#结果：（4，3，3，2）\n",[33,99829,99830],{"class":35,"line":134},[33,99831,99636],{"class":60},[33,99833,99834,99836,99838,99840,99842],{"class":35,"line":156},[33,99835,99814],{"class":47},[33,99837,48767],{"class":955},[33,99839,73],{"class":39},[33,99841,701],{"class":76},[33,99843,99681],{"class":47},[33,99845,99846],{"class":35,"line":163},[33,99847,99848],{"class":60},"#结果：（2，6，3，2）\n",[33,99850,99851],{"class":35,"line":169},[33,99852,99668],{"class":60},[33,99854,99855,99857,99859,99861,99863],{"class":35,"line":175},[33,99856,99814],{"class":47},[33,99858,48767],{"class":955},[33,99860,73],{"class":39},[33,99862,707],{"class":76},[33,99864,99681],{"class":47},[33,99866,99867],{"class":35,"line":181},[33,99868,99869],{"class":60},"#结果：（2，3，6，2）\n",[33,99871,99872],{"class":35,"line":196},[33,99873,99874],{"class":60},"#axis=3\n",[33,99876,99877,99879,99881,99883,99885],{"class":35,"line":213},[33,99878,99814],{"class":47},[33,99880,48767],{"class":955},[33,99882,73],{"class":39},[33,99884,712],{"class":76},[33,99886,99681],{"class":47},[33,99888,99889],{"class":35,"line":228},[33,99890,99891],{"class":60},"#结果：（2，3，3，4）\n",[18,99893,99895],{"id":99894},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,99897,99898],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,99900,99901],{},"①二维数组",[23,99903,99905],{"className":31631,"code":99904,"language":31633,"meta":28,"style":28},"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",[30,99906,99907,99931,99955,99960,99965],{"__ignoreMap":28},[33,99908,99909,99911,99913,99915,99917,99919,99921,99923,99925,99927,99929],{"class":35,"line":36},[33,99910,94559],{"class":47},[33,99912,73],{"class":39},[33,99914,94255],{"class":47},[33,99916,701],{"class":76},[33,99918,704],{"class":47},[33,99920,2124],{"class":76},[33,99922,94260],{"class":47},[33,99924,712],{"class":76},[33,99926,704],{"class":47},[33,99928,717],{"class":76},[33,99930,884],{"class":47},[33,99932,99933,99935,99937,99939,99941,99943,99945,99947,99949,99951,99953],{"class":35,"line":51},[33,99934,99440],{"class":47},[33,99936,73],{"class":39},[33,99938,94255],{"class":47},[33,99940,1948],{"class":76},[33,99942,704],{"class":47},[33,99944,2242],{"class":76},[33,99946,94260],{"class":47},[33,99948,712],{"class":76},[33,99950,704],{"class":47},[33,99952,717],{"class":76},[33,99954,884],{"class":47},[33,99956,99957],{"class":35,"line":57},[33,99958,99959],{"class":47},"np.hstack((aa,bb))\n",[33,99961,99962],{"class":35,"line":64},[33,99963,99964],{"class":60},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[33,99966,99967],{"class":35,"line":83},[33,99968,99969],{"class":60},"#np.hstack([aa,bb])\n",[14,99971,99486],{},[14,99973,99974],{},[2918,99975],{"alt":28,"src":99976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99978,99979],{},"等效于concatenate()函数中axis=1时的情况",[14,99981,99982],{},"②三维数组",[23,99984,99986],{"className":31631,"code":99985,"language":31633,"meta":28,"style":28},"#两个三行六列\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",[30,99987,99988,99992,100020,100048,100053,100058],{"__ignoreMap":28},[33,99989,99990],{"class":35,"line":36},[33,99991,99541],{"class":60},[33,99993,99994,99996,99998,100000,100002,100004,100006,100008,100010,100012,100014,100016,100018],{"class":35,"line":51},[33,99995,96774],{"class":47},[33,99997,73],{"class":39},[33,99999,94255],{"class":47},[33,100001,701],{"class":76},[33,100003,704],{"class":47},[33,100005,1936],{"class":76},[33,100007,94260],{"class":47},[33,100009,707],{"class":76},[33,100011,704],{"class":47},[33,100013,712],{"class":76},[33,100015,704],{"class":47},[33,100017,727],{"class":76},[33,100019,884],{"class":47},[33,100021,100022,100024,100026,100028,100030,100032,100034,100036,100038,100040,100042,100044,100046],{"class":35,"line":57},[33,100023,99574],{"class":47},[33,100025,73],{"class":39},[33,100027,94255],{"class":47},[33,100029,1948],{"class":76},[33,100031,704],{"class":47},[33,100033,99585],{"class":76},[33,100035,94260],{"class":47},[33,100037,707],{"class":76},[33,100039,704],{"class":47},[33,100041,712],{"class":76},[33,100043,704],{"class":47},[33,100045,727],{"class":76},[33,100047,884],{"class":47},[33,100049,100050],{"class":35,"line":64},[33,100051,100052],{"class":60},"#使用hstack\n",[33,100054,100055],{"class":35,"line":83},[33,100056,100057],{"class":47},"np.hstack((aaa,bbb)).shape\n",[33,100059,100060],{"class":35,"line":89},[33,100061,100062],{"class":60},"#输出：（2，6，6）\n",[18,100064,100066],{"id":100065},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,100068,100069],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,100071,99901],{},[23,100073,100075],{"className":31631,"code":100074,"language":31633,"meta":28,"style":28},"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",[30,100076,100077,100101,100125,100130,100135,100140],{"__ignoreMap":28},[33,100078,100079,100081,100083,100085,100087,100089,100091,100093,100095,100097,100099],{"class":35,"line":36},[33,100080,94559],{"class":47},[33,100082,73],{"class":39},[33,100084,94255],{"class":47},[33,100086,701],{"class":76},[33,100088,704],{"class":47},[33,100090,2124],{"class":76},[33,100092,94260],{"class":47},[33,100094,712],{"class":76},[33,100096,704],{"class":47},[33,100098,717],{"class":76},[33,100100,884],{"class":47},[33,100102,100103,100105,100107,100109,100111,100113,100115,100117,100119,100121,100123],{"class":35,"line":51},[33,100104,99440],{"class":47},[33,100106,73],{"class":39},[33,100108,94255],{"class":47},[33,100110,1948],{"class":76},[33,100112,704],{"class":47},[33,100114,2242],{"class":76},[33,100116,94260],{"class":47},[33,100118,712],{"class":76},[33,100120,704],{"class":47},[33,100122,717],{"class":76},[33,100124,884],{"class":47},[33,100126,100127],{"class":35,"line":57},[33,100128,100129],{"class":60},"#vstack 垂直方向进行堆叠\n",[33,100131,100132],{"class":35,"line":64},[33,100133,100134],{"class":47},"np.vstack((aa,bb))\n",[33,100136,100137],{"class":35,"line":83},[33,100138,100139],{"class":60},"#与hstack传的参数类似，等价于：\n",[33,100141,100142],{"class":35,"line":89},[33,100143,100144],{"class":47},"np.vstack([aa,bb])\n",[14,100146,99486],{},[14,100148,100149],{},[2918,100150],{"alt":28,"src":100151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,100153,99982],{},[23,100155,100157],{"className":31631,"code":100156,"language":31633,"meta":28,"style":28},"#两个三行六列\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",[30,100158,100159,100163,100191,100219,100224,100229],{"__ignoreMap":28},[33,100160,100161],{"class":35,"line":36},[33,100162,99541],{"class":60},[33,100164,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183,100185,100187,100189],{"class":35,"line":51},[33,100166,96774],{"class":47},[33,100168,73],{"class":39},[33,100170,94255],{"class":47},[33,100172,701],{"class":76},[33,100174,704],{"class":47},[33,100176,1936],{"class":76},[33,100178,94260],{"class":47},[33,100180,707],{"class":76},[33,100182,704],{"class":47},[33,100184,712],{"class":76},[33,100186,704],{"class":47},[33,100188,727],{"class":76},[33,100190,884],{"class":47},[33,100192,100193,100195,100197,100199,100201,100203,100205,100207,100209,100211,100213,100215,100217],{"class":35,"line":57},[33,100194,99574],{"class":47},[33,100196,73],{"class":39},[33,100198,94255],{"class":47},[33,100200,1948],{"class":76},[33,100202,704],{"class":47},[33,100204,99585],{"class":76},[33,100206,94260],{"class":47},[33,100208,707],{"class":76},[33,100210,704],{"class":47},[33,100212,712],{"class":76},[33,100214,704],{"class":47},[33,100216,727],{"class":76},[33,100218,884],{"class":47},[33,100220,100221],{"class":35,"line":64},[33,100222,100223],{"class":60},"#使用vstack\n",[33,100225,100226],{"class":35,"line":83},[33,100227,100228],{"class":47},"np.vstack((aaa,bbb)).shape\n",[33,100230,100231],{"class":35,"line":89},[33,100232,100233],{"class":60},"#输出：（4，3，6）\n",[18,100235,100237],{"id":100236},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,100239,100240],{},"该方法是三维数组特有的方法",[14,100242,100243],{},"也就是说",[14,100245,100246],{},"一维数组拼接方法用：concatenate()",[14,100248,100249],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,100251,100252],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,100254,100255],{},"四维数组及多维数组只能用concatenate进行拼接",[23,100257,100259],{"className":31631,"code":100258,"language":31633,"meta":28,"style":28},"#两个三行六列\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",[30,100260,100261,100265,100293,100321,100326,100331],{"__ignoreMap":28},[33,100262,100263],{"class":35,"line":36},[33,100264,99541],{"class":60},[33,100266,100267,100269,100271,100273,100275,100277,100279,100281,100283,100285,100287,100289,100291],{"class":35,"line":51},[33,100268,96774],{"class":47},[33,100270,73],{"class":39},[33,100272,94255],{"class":47},[33,100274,701],{"class":76},[33,100276,704],{"class":47},[33,100278,1936],{"class":76},[33,100280,94260],{"class":47},[33,100282,707],{"class":76},[33,100284,704],{"class":47},[33,100286,712],{"class":76},[33,100288,704],{"class":47},[33,100290,727],{"class":76},[33,100292,884],{"class":47},[33,100294,100295,100297,100299,100301,100303,100305,100307,100309,100311,100313,100315,100317,100319],{"class":35,"line":57},[33,100296,99574],{"class":47},[33,100298,73],{"class":39},[33,100300,94255],{"class":47},[33,100302,1948],{"class":76},[33,100304,704],{"class":47},[33,100306,99585],{"class":76},[33,100308,94260],{"class":47},[33,100310,707],{"class":76},[33,100312,704],{"class":47},[33,100314,712],{"class":76},[33,100316,704],{"class":47},[33,100318,727],{"class":76},[33,100320,884],{"class":47},[33,100322,100323],{"class":35,"line":64},[33,100324,100325],{"class":60},"#使用dstack\n",[33,100327,100328],{"class":35,"line":83},[33,100329,100330],{"class":47},"np.dstack((aaa,bbb)).shape\n",[33,100332,100333],{"class":35,"line":89},[33,100334,100335],{"class":60},"#结果：（2，3，12）\n",[1544,100337,100338],{},"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":28,"searchDepth":51,"depth":51,"links":100340},[100341,100342,100343,100344],{"id":99280,"depth":51,"text":99281},{"id":99894,"depth":51,"text":99895},{"id":100065,"depth":51,"text":100066},{"id":100236,"depth":51,"text":100237},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99272,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100351,"title":100352,"body":100353,"description":24628,"extension":1557,"meta":100628,"navigation":159,"path":100629,"seo":100630,"stem":100631,"__hash__":100632},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100354,"toc":100626},[100355,100358,100361,100455,100458,100461,100464,100467,100470,100473,100476,100479,100623],[10,100356,100352],{"id":100357},"_7数组转置",[14,100359,100360],{},"使用transpose()函数",[23,100362,100364],{"className":31631,"code":100363,"language":31633,"meta":28,"style":28},"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",[30,100365,100366,100376,100400,100405,100410,100415,100420,100428,100432,100436,100441,100446,100451],{"__ignoreMap":28},[33,100367,100368,100370,100372,100374],{"class":35,"line":36},[33,100369,31645],{"class":39},[33,100371,32633],{"class":47},[33,100373,32636],{"class":39},[33,100375,32639],{"class":47},[33,100377,100378,100380,100382,100384,100386,100388,100390,100392,100394,100396,100398],{"class":35,"line":51},[33,100379,126],{"class":47},[33,100381,73],{"class":39},[33,100383,32970],{"class":47},[33,100385,701],{"class":76},[33,100387,704],{"class":47},[33,100389,2124],{"class":76},[33,100391,94260],{"class":47},[33,100393,717],{"class":76},[33,100395,704],{"class":47},[33,100397,712],{"class":76},[33,100399,884],{"class":47},[33,100401,100402],{"class":35,"line":57},[33,100403,100404],{"class":60},"#二维数组转置\n",[33,100406,100407],{"class":35,"line":64},[33,100408,100409],{"class":60},"#调用transpose()函数\n",[33,100411,100412],{"class":35,"line":83},[33,100413,100414],{"class":47},"a.transpose()\n",[33,100416,100417],{"class":35,"line":89},[33,100418,100419],{"class":60},"#对于二维数组也可以采用.T来实现\n",[33,100421,100422,100425],{"class":35,"line":98},[33,100423,100424],{"class":47},"a.T",[33,100426,100427],{"class":60},"#与上述代码一样\n",[33,100429,100430],{"class":35,"line":110},[33,100431,94817],{"class":60},[33,100433,100434],{"class":35,"line":134},[33,100435,95181],{"class":119},[33,100437,100438],{"class":35,"line":156},[33,100439,100440],{"class":119},"array([[ 1,  4,  7, 10],\n",[33,100442,100443],{"class":35,"line":163},[33,100444,100445],{"class":119},"       [ 2,  5,  8, 11],\n",[33,100447,100448],{"class":35,"line":169},[33,100449,100450],{"class":119},"       [ 3,  6,  9, 12]])\n",[33,100452,100453],{"class":35,"line":175},[33,100454,95181],{"class":119},[14,100456,100457],{},"也可以使用np.transpose()的形式",[14,100459,100460],{},"#多维数组进行转置 np.transpose()",[14,100462,100463],{},"#对二维数组也可以使用np.transpose()进行转置",[14,100465,100466],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,100468,100469],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,100471,100472],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,100474,100475],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,100477,100478],{},"四维及以上的数组也是一样的道理",[23,100480,100482],{"className":31631,"code":100481,"language":31633,"meta":28,"style":28},"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",[30,100483,100484,100512,100517,100522,100527,100545,100550,100582,100587,100592,100597,100618],{"__ignoreMap":28},[33,100485,100486,100488,100490,100492,100494,100496,100498,100500,100502,100504,100506,100508,100510],{"class":35,"line":36},[33,100487,2419],{"class":47},[33,100489,73],{"class":39},[33,100491,94255],{"class":47},[33,100493,701],{"class":76},[33,100495,704],{"class":47},[33,100497,1936],{"class":76},[33,100499,94260],{"class":47},[33,100501,712],{"class":76},[33,100503,704],{"class":47},[33,100505,727],{"class":76},[33,100507,704],{"class":47},[33,100509,707],{"class":76},[33,100511,884],{"class":47},[33,100513,100514],{"class":35,"line":51},[33,100515,100516],{"class":47},"x.shape\n",[33,100518,100519],{"class":35,"line":57},[33,100520,100521],{"class":60},"#结果：（3,6,2）\n",[33,100523,100524],{"class":35,"line":64},[33,100525,100526],{"class":60},"#使用np.transpose()进行转置 变为(2,6,3)\n",[33,100528,100529,100532,100534,100536,100538,100540,100542],{"class":35,"line":83},[33,100530,100531],{"class":47},"np.transpose(x,(",[33,100533,707],{"class":76},[33,100535,704],{"class":47},[33,100537,701],{"class":76},[33,100539,704],{"class":47},[33,100541,766],{"class":76},[33,100543,100544],{"class":47},")).shape\n",[33,100546,100547],{"class":35,"line":89},[33,100548,100549],{"class":60},"#结果：(2,6,3)\n",[33,100551,100552,100554,100556,100558,100560,100562,100564,100566,100568,100570,100572,100574,100576,100578,100580],{"class":35,"line":98},[33,100553,99759],{"class":47},[33,100555,73],{"class":39},[33,100557,94255],{"class":47},[33,100559,701],{"class":76},[33,100561,704],{"class":47},[33,100563,1936],{"class":76},[33,100565,94260],{"class":47},[33,100567,712],{"class":76},[33,100569,704],{"class":47},[33,100571,707],{"class":76},[33,100573,704],{"class":47},[33,100575,701],{"class":76},[33,100577,704],{"class":47},[33,100579,727],{"class":76},[33,100581,884],{"class":47},[33,100583,100584],{"class":35,"line":110},[33,100585,100586],{"class":47},"aaaa.shape\n",[33,100588,100589],{"class":35,"line":134},[33,100590,100591],{"class":60},"#结果：（3，2，1，6）\n",[33,100593,100594],{"class":35,"line":156},[33,100595,100596],{"class":60},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[33,100598,100599,100602,100604,100606,100608,100610,100612,100614,100616],{"class":35,"line":163},[33,100600,100601],{"class":47},"np.transpose(aaaa,(",[33,100603,701],{"class":76},[33,100605,704],{"class":47},[33,100607,707],{"class":76},[33,100609,704],{"class":47},[33,100611,766],{"class":76},[33,100613,704],{"class":47},[33,100615,712],{"class":76},[33,100617,100544],{"class":47},[33,100619,100620],{"class":35,"line":169},[33,100621,100622],{"class":60},"#结果：(2,1,3,6)\n",[1544,100624,100625],{},"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":28,"searchDepth":51,"depth":51,"links":100627},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100352,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100634,"title":100635,"body":100636,"description":24628,"extension":1557,"meta":101370,"navigation":159,"path":101371,"seo":101372,"stem":101373,"__hash__":101374},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100637,"toc":101368},[100638,100641,100644,100647,100650,100653,100656,100659,100662,100771,100774,100777,101365],[10,100639,100635],{"id":100640},"_8数组分割",[14,100642,100643],{},"split分割",[14,100645,100646],{},"numpy.split(ary,indics_or_sections,axis)",[14,100648,100649],{},"解释：",[14,100651,100652],{},"ary:被分割的数组",[14,100654,100655],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,100657,100658],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,100660,100661],{},"①一维数组的分割",[23,100663,100665],{"className":31631,"code":100664,"language":31633,"meta":28,"style":28},"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",[30,100666,100667,100683,100688,100697,100701,100706,100714,100718,100723,100728,100741,100745,100750,100762,100766],{"__ignoreMap":28},[33,100668,100669,100671,100673,100675,100677,100679,100681],{"class":35,"line":36},[33,100670,126],{"class":47},[33,100672,73],{"class":39},[33,100674,94255],{"class":47},[33,100676,701],{"class":76},[33,100678,704],{"class":47},[33,100680,742],{"class":76},[33,100682,884],{"class":47},[33,100684,100685],{"class":35,"line":51},[33,100686,100687],{"class":60},"#如果传入整数，必须能够平分，否则会报错\n",[33,100689,100690,100693,100695],{"class":35,"line":57},[33,100691,100692],{"class":47},"np.split(a,",[33,100694,707],{"class":76},[33,100696,884],{"class":47},[33,100698,100699],{"class":35,"line":64},[33,100700,94817],{"class":60},[33,100702,100703],{"class":35,"line":83},[33,100704,100705],{"class":60},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[33,100707,100708,100710,100712],{"class":35,"line":89},[33,100709,100692],{"class":47},[33,100711,717],{"class":76},[33,100713,884],{"class":47},[33,100715,100716],{"class":35,"line":98},[33,100717,94817],{"class":60},[33,100719,100720],{"class":35,"line":110},[33,100721,100722],{"class":60},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[33,100724,100725],{"class":35,"line":134},[33,100726,100727],{"class":60},"#传入数组\n",[33,100729,100730,100733,100735,100737,100739],{"class":35,"line":156},[33,100731,100732],{"class":47},"np.split(a,[",[33,100734,712],{"class":76},[33,100736,704],{"class":47},[33,100738,722],{"class":76},[33,100740,1276],{"class":47},[33,100742,100743],{"class":35,"line":163},[33,100744,94817],{"class":60},[33,100746,100747],{"class":35,"line":169},[33,100748,100749],{"class":60},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[33,100751,100752,100754,100756,100758,100760],{"class":35,"line":175},[33,100753,100732],{"class":47},[33,100755,722],{"class":76},[33,100757,704],{"class":47},[33,100759,732],{"class":76},[33,100761,1276],{"class":47},[33,100763,100764],{"class":35,"line":181},[33,100765,94817],{"class":60},[33,100767,100768],{"class":35,"line":196},[33,100769,100770],{"class":60},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,100772,100773],{},"②二维数组的分割",[14,100775,100776],{},"使用split()",[23,100778,100780],{"className":31631,"code":100779,"language":31633,"meta":28,"style":28},"#二维数组分割\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",[30,100781,100782,100787,100811,100816,100825,100829,100833,100838,100843,100848,100853,100858,100863,100868,100872,100885,100889,100893,100897,100901,100905,100910,100915,100920,100924,100929,100945,100949,100953,100958,100963,100968,100973,100978,100983,100988,100993,100998,101003,101008,101013,101018,101023,101028,101033,101038,101043,101047,101051,101071,101075,101079,101084,101089,101094,101099,101104,101109,101114,101119,101124,101129,101134,101139,101144,101149,101154,101159,101164,101169,101173,101178,101187,101191,101195,101199,101203,101207,101211,101215,101219,101223,101232,101236,101240,101244,101248,101252,101256,101260,101264,101268,101272,101276,101280,101284,101288,101292,101296,101300,101304,101308,101312,101316,101329,101333,101337,101341,101345,101349,101353,101357,101361],{"__ignoreMap":28},[33,100783,100784],{"class":35,"line":36},[33,100785,100786],{"class":60},"#二维数组分割\n",[33,100788,100789,100791,100793,100795,100797,100799,100801,100803,100805,100807,100809],{"class":35,"line":51},[33,100790,94559],{"class":47},[33,100792,73],{"class":39},[33,100794,94255],{"class":47},[33,100796,701],{"class":76},[33,100798,704],{"class":47},[33,100800,1936],{"class":76},[33,100802,94260],{"class":47},[33,100804,727],{"class":76},[33,100806,704],{"class":47},[33,100808,727],{"class":76},[33,100810,884],{"class":47},[33,100812,100813],{"class":35,"line":57},[33,100814,100815],{"class":60},"#默认axis=0  传入整数平均分,按行来的\n",[33,100817,100818,100821,100823],{"class":35,"line":64},[33,100819,100820],{"class":47},"np.split(aa,",[33,100822,712],{"class":76},[33,100824,884],{"class":47},[33,100826,100827],{"class":35,"line":83},[33,100828,97017],{"class":60},[33,100830,100831],{"class":35,"line":89},[33,100832,95181],{"class":119},[33,100834,100835],{"class":35,"line":98},[33,100836,100837],{"class":119},"[array([[ 1,  2,  3,  4,  5,  6],\n",[33,100839,100840],{"class":35,"line":110},[33,100841,100842],{"class":119},"        [ 7,  8,  9, 10, 11, 12]]),\n",[33,100844,100845],{"class":35,"line":134},[33,100846,100847],{"class":119}," array([[13, 14, 15, 16, 17, 18],\n",[33,100849,100850],{"class":35,"line":156},[33,100851,100852],{"class":119},"        [19, 20, 21, 22, 23, 24]]),\n",[33,100854,100855],{"class":35,"line":163},[33,100856,100857],{"class":119}," array([[25, 26, 27, 28, 29, 30],\n",[33,100859,100860],{"class":35,"line":169},[33,100861,100862],{"class":119},"        [31, 32, 33, 34, 35, 36]])]\n",[33,100864,100865],{"class":35,"line":175},[33,100866,100867],{"class":119}," '''\n",[33,100869,100870],{"class":35,"line":181},[33,100871,100727],{"class":60},[33,100873,100874,100877,100879,100881,100883],{"class":35,"line":196},[33,100875,100876],{"class":47},"np.split(aa,[",[33,100878,707],{"class":76},[33,100880,704],{"class":47},[33,100882,722],{"class":76},[33,100884,1276],{"class":47},[33,100886,100887],{"class":35,"line":213},[33,100888,97017],{"class":60},[33,100890,100891],{"class":35,"line":228},[33,100892,95181],{"class":119},[33,100894,100895],{"class":35,"line":1345},[33,100896,100837],{"class":119},[33,100898,100899],{"class":35,"line":1350},[33,100900,100842],{"class":119},[33,100902,100903],{"class":35,"line":1359},[33,100904,100847],{"class":119},[33,100906,100907],{"class":35,"line":1364},[33,100908,100909],{"class":119},"        [19, 20, 21, 22, 23, 24],\n",[33,100911,100912],{"class":35,"line":1370},[33,100913,100914],{"class":119},"        [25, 26, 27, 28, 29, 30]]),\n",[33,100916,100917],{"class":35,"line":1425},[33,100918,100919],{"class":119}," array([[31, 32, 33, 34, 35, 36]])]\n",[33,100921,100922],{"class":35,"line":1438},[33,100923,95181],{"class":119},[33,100925,100926],{"class":35,"line":1451},[33,100927,100928],{"class":60},"#axis=1 按照列来分\n",[33,100930,100931,100933,100935,100937,100939,100941,100943],{"class":35,"line":1457},[33,100932,100820],{"class":47},[33,100934,712],{"class":76},[33,100936,704],{"class":47},[33,100938,48767],{"class":955},[33,100940,73],{"class":39},[33,100942,701],{"class":76},[33,100944,884],{"class":47},[33,100946,100947],{"class":35,"line":1466},[33,100948,97017],{"class":60},[33,100950,100951],{"class":35,"line":1471},[33,100952,95181],{"class":119},[33,100954,100955],{"class":35,"line":1477},[33,100956,100957],{"class":119},"[array([[ 1,  2],\n",[33,100959,100960],{"class":35,"line":1504},[33,100961,100962],{"class":119},"        [ 7,  8],\n",[33,100964,100965],{"class":35,"line":1509},[33,100966,100967],{"class":119},"        [13, 14],\n",[33,100969,100970],{"class":35,"line":1525},[33,100971,100972],{"class":119},"        [19, 20],\n",[33,100974,100975],{"class":35,"line":1535},[33,100976,100977],{"class":119},"        [25, 26],\n",[33,100979,100980],{"class":35,"line":1540},[33,100981,100982],{"class":119},"        [31, 32]]),\n",[33,100984,100985],{"class":35,"line":4027},[33,100986,100987],{"class":119}," array([[ 3,  4],\n",[33,100989,100990],{"class":35,"line":4032},[33,100991,100992],{"class":119},"        [ 9, 10],\n",[33,100994,100995],{"class":35,"line":9199},[33,100996,100997],{"class":119},"        [15, 16],\n",[33,100999,101000],{"class":35,"line":9223},[33,101001,101002],{"class":119},"        [21, 22],\n",[33,101004,101005],{"class":35,"line":9228},[33,101006,101007],{"class":119},"        [27, 28],\n",[33,101009,101010],{"class":35,"line":9234},[33,101011,101012],{"class":119},"        [33, 34]]),\n",[33,101014,101015],{"class":35,"line":9261},[33,101016,101017],{"class":119}," array([[ 5,  6],\n",[33,101019,101020],{"class":35,"line":9266},[33,101021,101022],{"class":119},"        [11, 12],\n",[33,101024,101025],{"class":35,"line":9272},[33,101026,101027],{"class":119},"        [17, 18],\n",[33,101029,101030],{"class":35,"line":9284},[33,101031,101032],{"class":119},"        [23, 24],\n",[33,101034,101035],{"class":35,"line":9296},[33,101036,101037],{"class":119},"        [29, 30],\n",[33,101039,101040],{"class":35,"line":9308},[33,101041,101042],{"class":119},"        [35, 36]])]\n",[33,101044,101045],{"class":35,"line":10967},[33,101046,100867],{"class":119},[33,101048,101049],{"class":35,"line":10992},[33,101050,100727],{"class":60},[33,101052,101053,101055,101057,101059,101061,101063,101065,101067,101069],{"class":35,"line":11015},[33,101054,100876],{"class":47},[33,101056,701],{"class":76},[33,101058,704],{"class":47},[33,101060,707],{"class":76},[33,101062,42862],{"class":47},[33,101064,48767],{"class":955},[33,101066,73],{"class":39},[33,101068,701],{"class":76},[33,101070,884],{"class":47},[33,101072,101073],{"class":35,"line":11039},[33,101074,94817],{"class":60},[33,101076,101077],{"class":35,"line":11044},[33,101078,95181],{"class":119},[33,101080,101081],{"class":35,"line":11049},[33,101082,101083],{"class":119},"[array([[ 1],\n",[33,101085,101086],{"class":35,"line":11054},[33,101087,101088],{"class":119},"        [ 7],\n",[33,101090,101091],{"class":35,"line":11063},[33,101092,101093],{"class":119},"        [13],\n",[33,101095,101096],{"class":35,"line":11068},[33,101097,101098],{"class":119},"        [19],\n",[33,101100,101101],{"class":35,"line":11074},[33,101102,101103],{"class":119},"        [25],\n",[33,101105,101106],{"class":35,"line":11095},[33,101107,101108],{"class":119},"        [31]]),\n",[33,101110,101111],{"class":35,"line":11101},[33,101112,101113],{"class":119}," array([[ 2],\n",[33,101115,101116],{"class":35,"line":11115},[33,101117,101118],{"class":119},"        [ 8],\n",[33,101120,101121],{"class":35,"line":11121},[33,101122,101123],{"class":119},"        [14],\n",[33,101125,101126],{"class":35,"line":11148},[33,101127,101128],{"class":119},"        [20],\n",[33,101130,101131],{"class":35,"line":11157},[33,101132,101133],{"class":119},"        [26],\n",[33,101135,101136],{"class":35,"line":11163},[33,101137,101138],{"class":119},"        [32]]),\n",[33,101140,101141],{"class":35,"line":11171},[33,101142,101143],{"class":119}," array([[ 3,  4,  5,  6],\n",[33,101145,101146],{"class":35,"line":11176},[33,101147,101148],{"class":119},"        [ 9, 10, 11, 12],\n",[33,101150,101151],{"class":35,"line":17855},[33,101152,101153],{"class":119},"        [15, 16, 17, 18],\n",[33,101155,101156],{"class":35,"line":17861},[33,101157,101158],{"class":119},"        [21, 22, 23, 24],\n",[33,101160,101161],{"class":35,"line":17884},[33,101162,101163],{"class":119},"        [27, 28, 29, 30],\n",[33,101165,101166],{"class":35,"line":17890},[33,101167,101168],{"class":119},"        [33, 34, 35, 36]])]\n",[33,101170,101171],{"class":35,"line":17913},[33,101172,95181],{"class":119},[33,101174,101175],{"class":35,"line":17927},[33,101176,101177],{"class":60},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[33,101179,101180,101183,101185],{"class":35,"line":17947},[33,101181,101182],{"class":47},"np.vsplit(aa,",[33,101184,712],{"class":76},[33,101186,884],{"class":47},[33,101188,101189],{"class":35,"line":17953},[33,101190,94817],{"class":60},[33,101192,101193],{"class":35,"line":17964},[33,101194,95181],{"class":119},[33,101196,101197],{"class":35,"line":17987},[33,101198,100837],{"class":119},[33,101200,101201],{"class":35,"line":18009},[33,101202,100842],{"class":119},[33,101204,101205],{"class":35,"line":18014},[33,101206,100847],{"class":119},[33,101208,101209],{"class":35,"line":18020},[33,101210,100852],{"class":119},[33,101212,101213],{"class":35,"line":18034},[33,101214,100857],{"class":119},[33,101216,101217],{"class":35,"line":18047},[33,101218,100862],{"class":119},[33,101220,101221],{"class":35,"line":18052},[33,101222,95181],{"class":119},[33,101224,101225,101228,101230],{"class":35,"line":18066},[33,101226,101227],{"class":47},"np.hsplit(aa,",[33,101229,712],{"class":76},[33,101231,884],{"class":47},[33,101233,101234],{"class":35,"line":18071},[33,101235,94817],{"class":60},[33,101237,101238],{"class":35,"line":18077},[33,101239,95181],{"class":119},[33,101241,101242],{"class":35,"line":18082},[33,101243,100957],{"class":119},[33,101245,101246],{"class":35,"line":18096},[33,101247,100962],{"class":119},[33,101249,101250],{"class":35,"line":18101},[33,101251,100967],{"class":119},[33,101253,101254],{"class":35,"line":18106},[33,101255,100972],{"class":119},[33,101257,101258],{"class":35,"line":18120},[33,101259,100977],{"class":119},[33,101261,101262],{"class":35,"line":18132},[33,101263,100982],{"class":119},[33,101265,101266],{"class":35,"line":18137},[33,101267,100987],{"class":119},[33,101269,101270],{"class":35,"line":18150},[33,101271,100992],{"class":119},[33,101273,101274],{"class":35,"line":18155},[33,101275,100997],{"class":119},[33,101277,101278],{"class":35,"line":18160},[33,101279,101002],{"class":119},[33,101281,101282],{"class":35,"line":18165},[33,101283,101007],{"class":119},[33,101285,101286],{"class":35,"line":18178},[33,101287,101012],{"class":119},[33,101289,101290],{"class":35,"line":18183},[33,101291,101017],{"class":119},[33,101293,101294],{"class":35,"line":33886},[33,101295,101022],{"class":119},[33,101297,101298],{"class":35,"line":33892},[33,101299,101027],{"class":119},[33,101301,101302],{"class":35,"line":33898},[33,101303,101032],{"class":119},[33,101305,101306],{"class":35,"line":33904},[33,101307,101037],{"class":119},[33,101309,101310],{"class":35,"line":33910},[33,101311,101042],{"class":119},[33,101313,101314],{"class":35,"line":33921},[33,101315,95181],{"class":119},[33,101317,101318,101321,101323,101325,101327],{"class":35,"line":33927},[33,101319,101320],{"class":47},"np.vsplit(aa,[",[33,101322,707],{"class":76},[33,101324,704],{"class":47},[33,101326,722],{"class":76},[33,101328,1276],{"class":47},[33,101330,101331],{"class":35,"line":33947},[33,101332,94817],{"class":60},[33,101334,101335],{"class":35,"line":33953},[33,101336,95181],{"class":119},[33,101338,101339],{"class":35,"line":33964},[33,101340,100837],{"class":119},[33,101342,101343],{"class":35,"line":33970},[33,101344,100842],{"class":119},[33,101346,101347],{"class":35,"line":33976},[33,101348,100847],{"class":119},[33,101350,101351],{"class":35,"line":33982},[33,101352,100909],{"class":119},[33,101354,101355],{"class":35,"line":33988},[33,101356,100914],{"class":119},[33,101358,101359],{"class":35,"line":33994},[33,101360,100919],{"class":119},[33,101362,101363],{"class":35,"line":34000},[33,101364,100867],{"class":119},[1544,101366,101367],{},"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":28,"searchDepth":51,"depth":51,"links":101369},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100635,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101376,"title":101377,"body":101378,"description":24628,"extension":1557,"meta":101872,"navigation":159,"path":101873,"seo":101874,"stem":101875,"__hash__":101876},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101379,"toc":101863},[101380,101383,101386,101411,101415,101474,101526,101530,101532,101568,101622,101624,101662,101733,101737,101742,101746,101749,101782,101785,101789,101792,101795,101798,101801,101806,101810,101813,101816,101819,101822,101827,101831,101836,101839,101860],[10,101381,101377],{"id":101382},"_9数学函数",[14,101384,101385],{},"补充回顾：python的列表推导式",[23,101387,101389],{"className":31631,"code":101388,"language":31633,"meta":28,"style":28},"[1\u002Fi for i in a]\n",[30,101390,101391],{"__ignoreMap":28},[33,101392,101393,101395,101397,101399,101402,101404,101406,101408],{"class":35,"line":36},[33,101394,2489],{"class":47},[33,101396,701],{"class":76},[33,101398,2184],{"class":39},[33,101400,101401],{"class":47},"i ",[33,101403,4435],{"class":39},[33,101405,10689],{"class":47},[33,101407,27296],{"class":39},[33,101409,101410],{"class":47}," a]\n",[18,101412,101414],{"id":101413},"_91-求倒数","9.1 求倒数",[23,101416,101418],{"className":31631,"code":101417,"language":31633,"meta":28,"style":28},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[30,101419,101420,101425,101453,101465],{"__ignoreMap":28},[33,101421,101422],{"class":35,"line":36},[33,101423,101424],{"class":60},"#数组求倒数\n",[33,101426,101427,101429,101431,101433,101435,101437,101439,101441,101443,101445,101447,101449,101451],{"class":35,"line":51},[33,101428,126],{"class":47},[33,101430,73],{"class":39},[33,101432,2489],{"class":47},[33,101434,701],{"class":76},[33,101436,704],{"class":47},[33,101438,707],{"class":76},[33,101440,704],{"class":47},[33,101442,712],{"class":76},[33,101444,704],{"class":47},[33,101446,717],{"class":76},[33,101448,704],{"class":47},[33,101450,722],{"class":76},[33,101452,34499],{"class":47},[33,101454,101455,101457,101459,101462],{"class":35,"line":57},[33,101456,1094],{"class":47},[33,101458,73],{"class":39},[33,101460,101461],{"class":47},"np.array(a)",[33,101463,101464],{"class":60},"#将列表转换为数组\n",[33,101466,101467,101469,101471],{"class":35,"line":64},[33,101468,701],{"class":76},[33,101470,2184],{"class":39},[33,101472,101473],{"class":47},"b\n",[23,101475,101477],{"className":31631,"code":101476,"language":31633,"meta":28,"style":28},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[30,101478,101479,101507,101516,101521],{"__ignoreMap":28},[33,101480,101481,101483,101485,101487,101489,101491,101493,101495,101497,101499,101501,101503,101505],{"class":35,"line":36},[33,101482,126],{"class":47},[33,101484,73],{"class":39},[33,101486,2489],{"class":47},[33,101488,701],{"class":76},[33,101490,704],{"class":47},[33,101492,707],{"class":76},[33,101494,704],{"class":47},[33,101496,712],{"class":76},[33,101498,704],{"class":47},[33,101500,717],{"class":76},[33,101502,704],{"class":47},[33,101504,722],{"class":76},[33,101506,34499],{"class":47},[33,101508,101509,101511,101513],{"class":35,"line":51},[33,101510,1094],{"class":47},[33,101512,73],{"class":39},[33,101514,101515],{"class":47},"np.array(a)\n",[33,101517,101518],{"class":35,"line":57},[33,101519,101520],{"class":60},"#调用numpy中的函数reciprocal()\n",[33,101522,101523],{"class":35,"line":64},[33,101524,101525],{"class":47},"np.reciprocal(b)\n",[18,101527,101529],{"id":101528},"_92-求平方","9.2 求平方",[14,101531,95783],{},[23,101533,101535],{"className":31631,"code":101534,"language":31633,"meta":28,"style":28},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[30,101536,101537,101542,101547,101563],{"__ignoreMap":28},[33,101538,101539],{"class":35,"line":36},[33,101540,101541],{"class":60},"#square()，求平方\n",[33,101543,101544],{"class":35,"line":51},[33,101545,101546],{"class":60},"#一维数组\n",[33,101548,101549,101551,101553,101555,101557,101559,101561],{"class":35,"line":57},[33,101550,126],{"class":47},[33,101552,73],{"class":39},[33,101554,94255],{"class":47},[33,101556,701],{"class":76},[33,101558,704],{"class":47},[33,101560,77],{"class":76},[33,101562,884],{"class":47},[33,101564,101565],{"class":35,"line":64},[33,101566,101567],{"class":47},"np.square(a)\n",[23,101569,101571],{"className":31631,"code":101570,"language":31633,"meta":28,"style":28},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[30,101572,101573,101578,101583,101604],{"__ignoreMap":28},[33,101574,101575],{"class":35,"line":36},[33,101576,101577],{"class":60},"#或者通过循环遍历的形式来计算\n",[33,101579,101580],{"class":35,"line":51},[33,101581,101582],{"class":60},"#这是一个列表\n",[33,101584,101585,101588,101590,101592,101594,101596,101598,101601],{"class":35,"line":57},[33,101586,101587],{"class":47},"[i",[33,101589,2057],{"class":39},[33,101591,101401],{"class":47},[33,101593,4435],{"class":39},[33,101595,10689],{"class":47},[33,101597,27296],{"class":39},[33,101599,101600],{"class":47}," a]",[33,101602,101603],{"class":60},"#这个求完之后在数列当中\n",[33,101605,101606,101609,101611,101613,101615,101617,101619],{"class":35,"line":64},[33,101607,101608],{"class":47},"np.array([i",[33,101610,2057],{"class":39},[33,101612,101401],{"class":47},[33,101614,4435],{"class":39},[33,101616,10689],{"class":47},[33,101618,27296],{"class":39},[33,101620,101621],{"class":47}," a])\n",[14,101623,94544],{},[23,101625,101627],{"className":31631,"code":101626,"language":31633,"meta":28,"style":28},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[30,101628,101629,101633,101657],{"__ignoreMap":28},[33,101630,101631],{"class":35,"line":36},[33,101632,94554],{"class":60},[33,101634,101635,101637,101639,101641,101643,101645,101647,101649,101651,101653,101655],{"class":35,"line":51},[33,101636,94559],{"class":47},[33,101638,73],{"class":39},[33,101640,94255],{"class":47},[33,101642,701],{"class":76},[33,101644,704],{"class":47},[33,101646,2124],{"class":76},[33,101648,94260],{"class":47},[33,101650,717],{"class":76},[33,101652,704],{"class":47},[33,101654,712],{"class":76},[33,101656,884],{"class":47},[33,101658,101659],{"class":35,"line":57},[33,101660,101661],{"class":47},"np.square(aa)\n",[23,101663,101665],{"className":31631,"code":101664,"language":31633,"meta":28,"style":28},"#传统的方式\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",[30,101666,101667,101672,101681,101697,101713,101728],{"__ignoreMap":28},[33,101668,101669],{"class":35,"line":36},[33,101670,101671],{"class":60},"#传统的方式\n",[33,101673,101674,101676,101678],{"class":35,"line":51},[33,101675,99440],{"class":47},[33,101677,73],{"class":39},[33,101679,101680],{"class":47},"np.empty_like(aa)\n",[33,101682,101683,101685,101687,101689,101691,101693,101695],{"class":35,"line":57},[33,101684,4435],{"class":39},[33,101686,10689],{"class":47},[33,101688,27296],{"class":39},[33,101690,33696],{"class":76},[33,101692,345],{"class":47},[33,101694,717],{"class":76},[33,101696,32039],{"class":47},[33,101698,101699,101701,101703,101705,101707,101709,101711],{"class":35,"line":64},[33,101700,857],{"class":39},[33,101702,10751],{"class":47},[33,101704,27296],{"class":39},[33,101706,33696],{"class":76},[33,101708,345],{"class":47},[33,101710,712],{"class":76},[33,101712,32039],{"class":47},[33,101714,101715,101718,101720,101723,101725],{"class":35,"line":83},[33,101716,101717],{"class":47},"        bb[i,j]",[33,101719,73],{"class":39},[33,101721,101722],{"class":47},"aa[i,j]",[33,101724,2057],{"class":39},[33,101726,101727],{"class":47},"aa[i,j]\n",[33,101729,101730],{"class":35,"line":89},[33,101731,101732],{"class":47},"bb\n",[18,101734,101736],{"id":101735},"_93-求各元素的符号","9.3 求各元素的符号",[14,101738,101739],{},[2918,101740],{"alt":28,"src":101741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[18,101743,101745],{"id":101744},"_94-modf函数","9.4 modf函数",[14,101747,101748],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[23,101750,101752],{"className":31631,"code":101751,"language":31633,"meta":28,"style":28},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[30,101753,101754,101777],{"__ignoreMap":28},[33,101755,101756,101758,101760,101762,101764,101766,101768,101770,101772,101775],{"class":35,"line":36},[33,101757,126],{"class":47},[33,101759,73],{"class":39},[33,101761,94255],{"class":47},[33,101763,1199],{"class":39},[33,101765,77],{"class":76},[33,101767,704],{"class":47},[33,101769,77],{"class":76},[33,101771,704],{"class":47},[33,101773,101774],{"class":76},"0.3",[33,101776,884],{"class":47},[33,101778,101779],{"class":35,"line":51},[33,101780,101781],{"class":47},"np.modf(a)\n",[14,101783,101784],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[18,101786,101788],{"id":101787},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,101790,101791],{},"np.cell()",[14,101793,101794],{},"np.floor()",[14,101796,101797],{},"np.rint()",[14,101799,101800],{},"对各元素分别向上取整、向下取整、四舍五入",[14,101802,101803],{},[2918,101804],{"alt":28,"src":101805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[18,101807,101809],{"id":101808},"_96-around函数","9.6 around()函数",[14,101811,101812],{},"around()函数也可以实现对数的小数位数进行操作",[14,101814,101815],{},"其中的参数：",[14,101817,101818],{},"1.要传的数组",[14,101820,101821],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,101823,101824],{},[2918,101825],{"alt":28,"src":101826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[18,101828,101830],{"id":101829},"_97-三角函数","9.7 三角函数",[14,101832,101833],{},[2918,101834],{"alt":28,"src":101835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,101837,101838],{},"引入图像模块非常重要",[23,101840,101842],{"className":31631,"code":101841,"language":31633,"meta":28,"style":28},"from matplotlib import pyplot as plt\n",[30,101843,101844],{"__ignoreMap":28},[33,101845,101846,101848,101851,101853,101856,101858],{"class":35,"line":36},[33,101847,31990],{"class":39},[33,101849,101850],{"class":47}," matplotlib ",[33,101852,31645],{"class":39},[33,101854,101855],{"class":47}," pyplot ",[33,101857,32636],{"class":39},[33,101859,32690],{"class":47},[1544,101861,101862],{},"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":28,"searchDepth":51,"depth":51,"links":101864},[101865,101866,101867,101868,101869,101870,101871],{"id":101413,"depth":51,"text":101414},{"id":101528,"depth":51,"text":101529},{"id":101735,"depth":51,"text":101736},{"id":101744,"depth":51,"text":101745},{"id":101787,"depth":51,"text":101788},{"id":101808,"depth":51,"text":101809},{"id":101829,"depth":51,"text":101830},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101377,"description":24628},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101878,"title":101879,"body":101880,"description":24628,"extension":1557,"meta":101884,"navigation":159,"path":101885,"seo":101886,"stem":101887,"__hash__":101888},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101881,"toc":101882},[],{"title":28,"searchDepth":51,"depth":51,"links":101883},[],{"category":51673},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101879,"description":24628},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101890,"title":101891,"body":101892,"description":28,"extension":1557,"meta":103900,"navigation":159,"path":103901,"seo":103902,"stem":103903,"__hash__":103904},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101893,"toc":103876},[101894,101897,101901,101904,101907,101913,101916,101939,101942,101976,101979,102020,102024,102027,102120,102123,102167,102170,102187,102190,102204,102207,102210,102255,102258,102295,102299,102302,102308,102313,102333,102337,102340,102406,102409,102427,102431,102434,102463,102473,102479,102483,102486,102492,102503,102507,102510,102540,102543,102823,102826,102829,102840,102843,102846,102868,102875,102878,102896,102899,102902,102916,102924,102927,102953,102959,102962,102965,102975,102987,103007,103016,103036,103046,103070,103083,103097,103102,103143,103160,103185,103197,103217,103223,103268,103287,103304,103317,103333,103340,103352,103361,103396,103417,103442,103455,103479,103494,103519,103522,103543,103552,103555,103566,103570,103573,103579,103591,103598,103602,103605,103617,103620,103634,103637,103647,103657,103660,103700,103703,103707,103713,103716,103730,103734,103737,103770,103774,103777,103800,103808,103811,103817,103823,103826,103829,103857,103861,103864,103870,103873],[10,101895,101891],{"id":101896},"_1环境安装与第一个-mujoco-程序",[18,101898,101900],{"id":101899},"_1目标说明","1.目标说明",[14,101902,101903],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,101905,101906],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[23,101908,101911],{"className":101909,"code":101910,"language":6578,"meta":28},[6576],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[30,101912,101910],{"__ignoreMap":28},[14,101914,101915],{},"需要掌握:",[574,101917,101918,101921,101924,101929,101934],{},[564,101919,101920],{},"Fedora 44 下 MuJoCo 的系统依赖",[564,101922,101923],{},"Python 虚拟环境创建",[564,101925,101926],{},[30,101927,101928],{},"mujoco.MjModel",[564,101930,101931],{},[30,101932,101933],{},"mujoco.MjData",[564,101935,101936],{},[30,101937,101938],{},"mujoco.mj_step(model, data)",[14,101940,101941],{},"MuJoCo 中最重要的两个对象:",[1756,101943,101944,101954],{},[1759,101945,101946],{},[1762,101947,101948,101951],{},[1765,101949,101950],{"align":24988},"对象",[1765,101952,101953],{"align":24988},"含义",[1802,101955,101956,101966],{},[1762,101957,101958,101963],{},[1807,101959,101960],{"align":24988},[30,101961,101962],{},"MjModel",[1807,101964,101965],{"align":24988},"模型结构，来自 XML，基本不随时间变化",[1762,101967,101968,101973],{},[1807,101969,101970],{"align":24988},[30,101971,101972],{},"MjData",[1807,101974,101975],{"align":24988},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101977,101978],{},"可以先用一个类比理解：",[1756,101980,101981,101991],{},[1759,101982,101983],{},[1762,101984,101985,101988],{},[1765,101986,101987],{"align":24988},"类比",[1765,101989,101990],{"align":24988},"MuJoCo 对象",[1802,101992,101993,102002,102011],{},[1762,101994,101995,101998],{},[1807,101996,101997],{"align":24988},"游戏地图和角色配置",[1807,101999,102000],{"align":24988},[30,102001,101962],{},[1762,102003,102004,102007],{},[1807,102005,102006],{"align":24988},"游戏运行到当前帧的状态",[1807,102008,102009],{"align":24988},[30,102010,101972],{},[1762,102012,102013,102016],{},[1807,102014,102015],{"align":24988},"前进一帧",[1807,102017,102018],{"align":24988},[30,102019,101938],{},[18,102021,102023],{"id":102022},"_2环境与依赖安装","2.环境与依赖安装",[14,102025,102026],{},"Fedora 44 系统依赖:",[23,102028,102030],{"className":25074,"code":102029,"language":25076,"meta":28,"style":28},"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",[30,102031,102032,102044,102057,102070,102080,102090,102109],{"__ignoreMap":28},[33,102033,102034,102036,102038,102040,102042],{"class":35,"line":36},[33,102035,25829],{"class":43},[33,102037,27568],{"class":119},[33,102039,25086],{"class":119},[33,102041,27653],{"class":76},[33,102043,25931],{"class":76},[33,102045,102046,102049,102052,102055],{"class":35,"line":51},[33,102047,102048],{"class":119},"  python3",[33,102050,102051],{"class":119}," python3-pip",[33,102053,102054],{"class":119}," python3-virtualenv",[33,102056,25931],{"class":76},[33,102058,102059,102062,102065,102068],{"class":35,"line":57},[33,102060,102061],{"class":119},"  mesa-libGL",[33,102063,102064],{"class":119}," mesa-libGLU",[33,102066,102067],{"class":119}," mesa-dri-drivers",[33,102069,25931],{"class":76},[33,102071,102072,102075,102078],{"class":35,"line":64},[33,102073,102074],{"class":119},"  libglvnd-glx",[33,102076,102077],{"class":119}," libglvnd-opengl",[33,102079,25931],{"class":76},[33,102081,102082,102085,102088],{"class":35,"line":83},[33,102083,102084],{"class":119},"  glfw",[33,102086,102087],{"class":119}," glfw-devel",[33,102089,25931],{"class":76},[33,102091,102092,102095,102098,102101,102104,102107],{"class":35,"line":89},[33,102093,102094],{"class":119},"  libX11",[33,102096,102097],{"class":119}," libXcursor",[33,102099,102100],{"class":119}," libXi",[33,102102,102103],{"class":119}," libXinerama",[33,102105,102106],{"class":119}," libXrandr",[33,102108,25931],{"class":76},[33,102110,102111,102114,102117],{"class":35,"line":98},[33,102112,102113],{"class":119},"  gcc",[33,102115,102116],{"class":119}," gcc-c++",[33,102118,102119],{"class":119}," make\n",[14,102121,102122],{},"创建 Python 环境:",[23,102124,102126],{"className":25074,"code":102125,"language":25076,"meta":28,"style":28},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[30,102127,102128,102142,102150],{"__ignoreMap":28},[33,102129,102130,102133,102136,102139],{"class":35,"line":36},[33,102131,102132],{"class":43},"python3",[33,102134,102135],{"class":76}," -m",[33,102137,102138],{"class":119}," venv",[33,102140,102141],{"class":119}," .venv\n",[33,102143,102144,102147],{"class":35,"line":51},[33,102145,102146],{"class":76},"source",[33,102148,102149],{"class":119}," .venv\u002Fbin\u002Factivate\n",[33,102151,102152,102154,102156,102159,102161,102164],{"class":35,"line":57},[33,102153,31633],{"class":43},[33,102155,102135],{"class":76},[33,102157,102158],{"class":119}," pip",[33,102160,25086],{"class":119},[33,102162,102163],{"class":76}," --upgrade",[33,102165,102166],{"class":119}," pip\n",[14,102168,102169],{},"pip 安装:",[23,102171,102173],{"className":25074,"code":102172,"language":25076,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy\n",[30,102174,102175],{"__ignoreMap":28},[33,102176,102177,102179,102181,102184],{"class":35,"line":36},[33,102178,25083],{"class":43},[33,102180,25086],{"class":119},[33,102182,102183],{"class":119}," \"mujoco>=2.3\"",[33,102185,102186],{"class":119}," numpy\n",[14,102188,102189],{},"安装完成后，先做最小检查：",[23,102191,102193],{"className":25074,"code":102192,"language":25076,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[30,102194,102195],{"__ignoreMap":28},[33,102196,102197,102199,102201],{"class":35,"line":36},[33,102198,31633],{"class":43},[33,102200,31611],{"class":76},[33,102202,102203],{"class":119}," \"import mujoco; print(mujoco.__version__)\"\n",[14,102205,102206],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,102208,102209],{},"conda 安装:",[23,102211,102213],{"className":25074,"code":102212,"language":25076,"meta":28,"style":28},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[30,102214,102215,102235,102245],{"__ignoreMap":28},[33,102216,102217,102219,102221,102223,102226,102229,102232],{"class":35,"line":36},[33,102218,31583],{"class":43},[33,102220,30429],{"class":119},[33,102222,26368],{"class":76},[33,102224,102225],{"class":119}," mujoco-study",[33,102227,102228],{"class":119}," python=",[33,102230,102231],{"class":76},"3.10",[33,102233,102234],{"class":76}," -y\n",[33,102236,102237,102239,102242],{"class":35,"line":51},[33,102238,31583],{"class":43},[33,102240,102241],{"class":119}," activate",[33,102243,102244],{"class":119}," mujoco-study\n",[33,102246,102247,102249,102251,102253],{"class":35,"line":57},[33,102248,25083],{"class":43},[33,102250,25086],{"class":119},[33,102252,102183],{"class":119},[33,102254,102186],{"class":119},[14,102256,102257],{},"版本冲突说明:",[574,102259,102260,102266,102276,102285],{},[564,102261,102262,102263,29638],{},"不要安装 ",[30,102264,102265],{},"mujoco-py",[564,102267,102268,102269,102271,102272,102275],{},"如果旧项目里同时安装了 ",[30,102270,102265],{}," 和 ",[30,102273,102274],{},"mujoco","，建议新建干净虚拟环境。",[564,102277,102278,102281,102282,29638],{},[30,102279,102280],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[30,102283,102284],{},"~\u002F.mujoco\u002Fmujoco210",[564,102286,102287,102288,83792,102291,102294],{},"离屏渲染可能涉及 OpenGL 后端，",[30,102289,102290],{},"MUJOCO_GL=egl",[30,102292,102293],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[18,102296,102298],{"id":102297},"_3核心概念解释","3.核心概念解释",[14,102300,102301],{},"MuJoCo 的基本执行流程:",[23,102303,102306],{"className":102304,"code":102305,"language":6578,"meta":28},[6576],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[30,102307,102305],{"__ignoreMap":28},[14,102309,102310,102312],{},[30,102311,101962],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,102314,102315,102317,102318,1829,102321,1829,102324,1829,102327,1829,102330,29638],{},[30,102316,101972],{}," 存放仿真运行时状态，例如 ",[30,102319,102320],{},"data.time",[30,102322,102323],{},"data.qpos",[30,102325,102326],{},"data.qvel",[30,102328,102329],{},"data.ctrl",[30,102331,102332],{},"data.xpos",[1599,102334,102336],{"id":102335},"xml-是什么","XML 是什么",[14,102338,102339],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[23,102341,102343],{"className":54320,"code":102342,"language":54322,"meta":28,"style":28},"\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",[30,102344,102345,102367,102398],{"__ignoreMap":28},[33,102346,102347,102349,102351,102353,102355,102357,102360,102362,102365],{"class":35,"line":36},[33,102348,875],{"class":47},[33,102350,53053],{"class":52553},[33,102352,16171],{"class":43},[33,102354,73],{"class":47},[33,102356,54744],{"class":119},[33,102358,102359],{"class":43}," pos",[33,102361,73],{"class":47},[33,102363,102364],{"class":119},"\"0 0 1\"",[33,102366,52560],{"class":47},[33,102368,102369,102371,102374,102376,102378,102381,102383,102385,102387,102390,102392,102395],{"class":35,"line":51},[33,102370,53397],{"class":47},[33,102372,102373],{"class":52553},"geom",[33,102375,16171],{"class":43},[33,102377,73],{"class":47},[33,102379,102380],{"class":119},"\"box_geom\"",[33,102382,55077],{"class":43},[33,102384,73],{"class":47},[33,102386,54744],{"class":119},[33,102388,102389],{"class":43}," size",[33,102391,73],{"class":47},[33,102393,102394],{"class":119},"\"0.1 0.1 0.1\"",[33,102396,102397],{"class":47},"\u002F>\n",[33,102399,102400,102402,102404],{"class":35,"line":57},[33,102401,53038],{"class":47},[33,102403,53053],{"class":52553},[33,102405,52560],{"class":47},[14,102407,102408],{},"这段意思是：",[574,102410,102411,102417,102424],{},[564,102412,102413,102414,102416],{},"创建一个叫 ",[30,102415,54967],{}," 的刚体。",[564,102418,102419,102420,102423],{},"它初始放在 ",[30,102421,102422],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[564,102425,102426],{},"它里面有一个盒子形状的几何体。",[1599,102428,102430],{"id":102429},"timestep-是什么","timestep 是什么",[14,102432,102433],{},"XML 里的：",[23,102435,102437],{"className":54320,"code":102436,"language":54322,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[30,102438,102439],{"__ignoreMap":28},[33,102440,102441,102443,102445,102448,102450,102453,102456,102458,102461],{"class":35,"line":36},[33,102442,875],{"class":47},[33,102444,70419],{"class":52553},[33,102446,102447],{"class":43}," timestep",[33,102449,73],{"class":47},[33,102451,102452],{"class":119},"\"0.01\"",[33,102454,102455],{"class":43}," gravity",[33,102457,73],{"class":47},[33,102459,102460],{"class":119},"\"0 0 -9.81\"",[33,102462,102397],{"class":47},[14,102464,102465,102466,102469,102470,102472],{},"表示每调用一次 ",[30,102467,102468],{},"mj_step","，仿真时间前进 ",[30,102471,40239],{}," 秒。循环 100 次，大约就是 1 秒：",[23,102474,102477],{"className":102475,"code":102476,"language":6578,"meta":28},[6576],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[30,102478,102476],{"__ignoreMap":28},[1599,102480,102482],{"id":102481},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,102484,102485],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[23,102487,102490],{"className":102488,"code":102489,"language":6578,"meta":28},[6576],"x y z qw qx qy qz\n",[30,102491,102489],{"__ignoreMap":28},[14,102493,102494,102495,102498,102499,102502],{},"表示一个自由刚体的位置和姿态。其中 ",[30,102496,102497],{},"x y z"," 是位置，",[30,102500,102501],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[18,102504,102506],{"id":102505},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,102508,102509],{},"新建文件:",[23,102511,102513],{"className":25074,"code":102512,"language":25076,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[30,102514,102515,102525,102532],{"__ignoreMap":28},[33,102516,102517,102520,102522],{"class":35,"line":36},[33,102518,102519],{"class":43},"mkdir",[33,102521,30469],{"class":76},[33,102523,102524],{"class":119}," mujoco_tutorial\n",[33,102526,102527,102530],{"class":35,"line":51},[33,102528,102529],{"class":76},"cd",[33,102531,102524],{"class":119},[33,102533,102534,102537],{"class":35,"line":57},[33,102535,102536],{"class":43},"touch",[33,102538,102539],{"class":119}," ch1_first_sim.py\n",[14,102541,102542],{},"写入:",[23,102544,102546],{"className":31631,"code":102545,"language":31633,"meta":28,"style":28},"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",[30,102547,102548,102555,102559,102563,102573,102578,102583,102587,102592,102597,102601,102606,102611,102616,102621,102626,102631,102635,102639,102643,102656,102670,102680,102684,102696,102708,102720,102732,102744,102748,102765,102770,102774,102785,102796,102800,102804,102818],{"__ignoreMap":28},[33,102549,102550,102552],{"class":35,"line":36},[33,102551,31645],{"class":39},[33,102553,102554],{"class":47}," mujoco\n",[33,102556,102557],{"class":35,"line":51},[33,102558,160],{"emptyLinePlaceholder":159},[33,102560,102561],{"class":35,"line":57},[33,102562,160],{"emptyLinePlaceholder":159},[33,102564,102565,102568,102570],{"class":35,"line":64},[33,102566,102567],{"class":76},"XML",[33,102569,14815],{"class":39},[33,102571,102572],{"class":119}," \"\"\"\n",[33,102574,102575],{"class":35,"line":83},[33,102576,102577],{"class":119},"\u003Cmujoco model=\"first_sim\">\n",[33,102579,102580],{"class":35,"line":89},[33,102581,102582],{"class":119},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,102584,102585],{"class":35,"line":98},[33,102586,160],{"emptyLinePlaceholder":159},[33,102588,102589],{"class":35,"line":110},[33,102590,102591],{"class":119},"  \u003Cworldbody>\n",[33,102593,102594],{"class":35,"line":134},[33,102595,102596],{"class":119},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,102598,102599],{"class":35,"line":156},[33,102600,160],{"emptyLinePlaceholder":159},[33,102602,102603],{"class":35,"line":163},[33,102604,102605],{"class":119},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,102607,102608],{"class":35,"line":169},[33,102609,102610],{"class":119},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[33,102612,102613],{"class":35,"line":175},[33,102614,102615],{"class":119},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,102617,102618],{"class":35,"line":181},[33,102619,102620],{"class":119},"    \u003C\u002Fbody>\n",[33,102622,102623],{"class":35,"line":196},[33,102624,102625],{"class":119},"  \u003C\u002Fworldbody>\n",[33,102627,102628],{"class":35,"line":213},[33,102629,102630],{"class":119},"\u003C\u002Fmujoco>\n",[33,102632,102633],{"class":35,"line":228},[33,102634,96951],{"class":119},[33,102636,102637],{"class":35,"line":1345},[33,102638,160],{"emptyLinePlaceholder":159},[33,102640,102641],{"class":35,"line":1350},[33,102642,160],{"emptyLinePlaceholder":159},[33,102644,102645,102647,102649,102652,102654],{"class":35,"line":1359},[33,102646,33200],{"class":39},[33,102648,44],{"class":43},[33,102650,102651],{"class":47},"() -> ",[33,102653,96939],{"class":76},[33,102655,5141],{"class":47},[33,102657,102658,102661,102663,102666,102668],{"class":35,"line":1364},[33,102659,102660],{"class":47},"    model ",[33,102662,73],{"class":39},[33,102664,102665],{"class":47}," mujoco.MjModel.from_xml_string(",[33,102667,102567],{"class":76},[33,102669,884],{"class":47},[33,102671,102672,102675,102677],{"class":35,"line":1370},[33,102673,102674],{"class":47},"    data ",[33,102676,73],{"class":39},[33,102678,102679],{"class":47}," mujoco.MjData(model)\n",[33,102681,102682],{"class":35,"line":1425},[33,102683,160],{"emptyLinePlaceholder":159},[33,102685,102686,102688,102690,102693],{"class":35,"line":1438},[33,102687,32552],{"class":76},[33,102689,345],{"class":47},[33,102691,102692],{"class":119},"\"nq:\"",[33,102694,102695],{"class":47},", model.nq)\n",[33,102697,102698,102700,102702,102705],{"class":35,"line":1451},[33,102699,32552],{"class":76},[33,102701,345],{"class":47},[33,102703,102704],{"class":119},"\"nv:\"",[33,102706,102707],{"class":47},", model.nv)\n",[33,102709,102710,102712,102714,102717],{"class":35,"line":1457},[33,102711,32552],{"class":76},[33,102713,345],{"class":47},[33,102715,102716],{"class":119},"\"nu:\"",[33,102718,102719],{"class":47},", model.nu)\n",[33,102721,102722,102724,102726,102729],{"class":35,"line":1466},[33,102723,32552],{"class":76},[33,102725,345],{"class":47},[33,102727,102728],{"class":119},"\"initial time:\"",[33,102730,102731],{"class":47},", data.time)\n",[33,102733,102734,102736,102738,102741],{"class":35,"line":1471},[33,102735,32552],{"class":76},[33,102737,345],{"class":47},[33,102739,102740],{"class":119},"\"initial qpos:\"",[33,102742,102743],{"class":47},", data.qpos.copy())\n",[33,102745,102746],{"class":35,"line":1477},[33,102747,160],{"emptyLinePlaceholder":159},[33,102749,102750,102752,102755,102757,102759,102761,102763],{"class":35,"line":1504},[33,102751,857],{"class":39},[33,102753,102754],{"class":47}," _ ",[33,102756,27296],{"class":39},[33,102758,33696],{"class":76},[33,102760,345],{"class":47},[33,102762,457],{"class":76},[33,102764,32039],{"class":47},[33,102766,102767],{"class":35,"line":1509},[33,102768,102769],{"class":47},"        mujoco.mj_step(model, data)\n",[33,102771,102772],{"class":35,"line":1525},[33,102773,160],{"emptyLinePlaceholder":159},[33,102775,102776,102778,102780,102783],{"class":35,"line":1535},[33,102777,32552],{"class":76},[33,102779,345],{"class":47},[33,102781,102782],{"class":119},"\"final time:\"",[33,102784,102731],{"class":47},[33,102786,102787,102789,102791,102794],{"class":35,"line":1540},[33,102788,32552],{"class":76},[33,102790,345],{"class":47},[33,102792,102793],{"class":119},"\"final qpos:\"",[33,102795,102743],{"class":47},[33,102797,102798],{"class":35,"line":4027},[33,102799,160],{"emptyLinePlaceholder":159},[33,102801,102802],{"class":35,"line":4032},[33,102803,160],{"emptyLinePlaceholder":159},[33,102805,102806,102808,102810,102813,102816],{"class":35,"line":9199},[33,102807,2987],{"class":39},[33,102809,32473],{"class":76},[33,102811,102812],{"class":39}," ==",[33,102814,102815],{"class":119}," \"__main__\"",[33,102817,5141],{"class":47},[33,102819,102820],{"class":35,"line":9223},[33,102821,102822],{"class":47},"    main()\n",[1599,102824,102825],{"id":102825},"代码逐段解释",[14,102827,102828],{},"导入库：",[23,102830,102832],{"className":31631,"code":102831,"language":31633,"meta":28,"style":28},"import mujoco\n",[30,102833,102834],{"__ignoreMap":28},[33,102835,102836,102838],{"class":35,"line":36},[33,102837,31645],{"class":39},[33,102839,102554],{"class":47},[14,102841,102842],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,102844,102845],{},"定义 XML：",[23,102847,102849],{"className":31631,"code":102848,"language":31633,"meta":28,"style":28},"XML = \"\"\"\n...\n\"\"\"\n",[30,102850,102851,102859,102864],{"__ignoreMap":28},[33,102852,102853,102855,102857],{"class":35,"line":36},[33,102854,102567],{"class":76},[33,102856,14815],{"class":39},[33,102858,102572],{"class":119},[33,102860,102861],{"class":35,"line":51},[33,102862,102863],{"class":119},"...\n",[33,102865,102866],{"class":35,"line":57},[33,102867,96951],{"class":119},[14,102869,102870,102871,102874],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[30,102872,102873],{},"freejoint"," 的方块。",[14,102876,102877],{},"编译模型：",[23,102879,102881],{"className":31631,"code":102880,"language":31633,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\n",[30,102882,102883],{"__ignoreMap":28},[33,102884,102885,102888,102890,102892,102894],{"class":35,"line":36},[33,102886,102887],{"class":47},"model ",[33,102889,73],{"class":39},[33,102891,102665],{"class":47},[33,102893,102567],{"class":76},[33,102895,884],{"class":47},[14,102897,102898],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,102900,102901],{},"创建数据：",[23,102903,102905],{"className":31631,"code":102904,"language":31633,"meta":28,"style":28},"data = mujoco.MjData(model)\n",[30,102906,102907],{"__ignoreMap":28},[33,102908,102909,102912,102914],{"class":35,"line":36},[33,102910,102911],{"class":47},"data ",[33,102913,73],{"class":39},[33,102915,102679],{"class":47},[14,102917,102918,102920,102921,102923],{},[30,102919,34654],{}," 会保存仿真当前状态。刚创建时，时间是 ",[30,102922,766],{},"，方块还在初始位置。",[14,102925,102926],{},"推进仿真：",[23,102928,102930],{"className":31631,"code":102929,"language":31633,"meta":28,"style":28},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[30,102931,102932,102948],{"__ignoreMap":28},[33,102933,102934,102936,102938,102940,102942,102944,102946],{"class":35,"line":36},[33,102935,4435],{"class":39},[33,102937,102754],{"class":47},[33,102939,27296],{"class":39},[33,102941,33696],{"class":76},[33,102943,345],{"class":47},[33,102945,457],{"class":76},[33,102947,32039],{"class":47},[33,102949,102950],{"class":35,"line":51},[33,102951,102952],{"class":47},"    mujoco.mj_step(model, data)\n",[14,102954,102955,102956,102958],{},"每次 ",[30,102957,102468],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[1599,102960,102961],{"id":102961},"代码逐行细讲",[14,102963,102964],{},"下面把完整代码按新手视角拆开讲。",[23,102966,102967],{"className":31631,"code":102831,"language":31633,"meta":28,"style":28},[30,102968,102969],{"__ignoreMap":28},[33,102970,102971,102973],{"class":35,"line":36},[33,102972,31645],{"class":39},[33,102974,102554],{"class":47},[14,102976,102977,102979,102980,1829,102982,1829,102984,29638],{},[30,102978,31645],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[30,102981,101928],{},[30,102983,101933],{},[30,102985,102986],{},"mujoco.mj_step",[23,102988,102989],{"className":31631,"code":102848,"language":31633,"meta":28,"style":28},[30,102990,102991,102999,103003],{"__ignoreMap":28},[33,102992,102993,102995,102997],{"class":35,"line":36},[33,102994,102567],{"class":76},[33,102996,14815],{"class":39},[33,102998,102572],{"class":119},[33,103000,103001],{"class":35,"line":51},[33,103002,102863],{"class":119},[33,103004,103005],{"class":35,"line":57},[33,103006,96951],{"class":119},[14,103008,103009,103011,103012,103015],{},[30,103010,102567],{}," 是一个变量名。右边的三引号 ",[30,103013,103014],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[23,103017,103018],{"className":54320,"code":102577,"language":54322,"meta":28,"style":28},[30,103019,103020],{"__ignoreMap":28},[33,103021,103022,103024,103026,103029,103031,103034],{"class":35,"line":36},[33,103023,875],{"class":47},[33,103025,102274],{"class":52553},[33,103027,103028],{"class":43}," model",[33,103030,73],{"class":47},[33,103032,103033],{"class":119},"\"first_sim\"",[33,103035,52560],{"class":47},[14,103037,103038,103039,103042,103043,29638],{},"这是 XML 的根标签。",[30,103040,103041],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[30,103044,103045],{},"first_sim",[23,103047,103048],{"className":54320,"code":102436,"language":54322,"meta":28,"style":28},[30,103049,103050],{"__ignoreMap":28},[33,103051,103052,103054,103056,103058,103060,103062,103064,103066,103068],{"class":35,"line":36},[33,103053,875],{"class":47},[33,103055,70419],{"class":52553},[33,103057,102447],{"class":43},[33,103059,73],{"class":47},[33,103061,102452],{"class":119},[33,103063,102455],{"class":43},[33,103065,73],{"class":47},[33,103067,102460],{"class":119},[33,103069,102397],{"class":47},[14,103071,103072,103074,103075,103078,103079,103082],{},[30,103073,70419],{}," 用来设置仿真参数。",[30,103076,103077],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[30,103080,103081],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[23,103084,103086],{"className":54320,"code":103085,"language":54322,"meta":28,"style":28},"\u003Cworldbody>\n",[30,103087,103088],{"__ignoreMap":28},[33,103089,103090,103092,103095],{"class":35,"line":36},[33,103091,875],{"class":47},[33,103093,103094],{"class":52553},"worldbody",[33,103096,52560],{"class":47},[14,103098,103099,103101],{},[30,103100,103094],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[23,103103,103105],{"className":54320,"code":103104,"language":54322,"meta":28,"style":28},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[30,103106,103107],{"__ignoreMap":28},[33,103108,103109,103111,103113,103115,103117,103120,103122,103124,103127,103129,103131,103134,103136,103138,103141],{"class":35,"line":36},[33,103110,875],{"class":47},[33,103112,102373],{"class":52553},[33,103114,16171],{"class":43},[33,103116,73],{"class":47},[33,103118,103119],{"class":119},"\"floor\"",[33,103121,55077],{"class":43},[33,103123,73],{"class":47},[33,103125,103126],{"class":119},"\"plane\"",[33,103128,102389],{"class":43},[33,103130,73],{"class":47},[33,103132,103133],{"class":119},"\"2 2 0.1\"",[33,103135,80020],{"class":43},[33,103137,73],{"class":47},[33,103139,103140],{"class":119},"\"0.8 0.8 0.8 1\"",[33,103142,102397],{"class":47},[14,103144,103145,103146,103148,103149,103152,103153,103156,103157,103159],{},"这行创建地面。",[30,103147,102373],{}," 是几何体。",[30,103150,103151],{},"name=\"floor\""," 是名字。",[30,103154,103155],{},"type=\"plane\""," 表示平面。",[30,103158,56363],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[23,103161,103163],{"className":54320,"code":103162,"language":54322,"meta":28,"style":28},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[30,103164,103165],{"__ignoreMap":28},[33,103166,103167,103169,103171,103173,103175,103177,103179,103181,103183],{"class":35,"line":36},[33,103168,875],{"class":47},[33,103170,53053],{"class":52553},[33,103172,16171],{"class":43},[33,103174,73],{"class":47},[33,103176,54744],{"class":119},[33,103178,102359],{"class":43},[33,103180,73],{"class":47},[33,103182,102364],{"class":119},[33,103184,52560],{"class":47},[14,103186,103187,103188,29638,103190,103193,103194,103196],{},"这行创建一个刚体，名字叫 ",[30,103189,54967],{},[30,103191,103192],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[30,103195,102422],{},"，也就是离地面 1 米高。",[23,103198,103200],{"className":54320,"code":103199,"language":54322,"meta":28,"style":28},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[30,103201,103202],{"__ignoreMap":28},[33,103203,103204,103206,103208,103210,103212,103215],{"class":35,"line":36},[33,103205,875],{"class":47},[33,103207,102873],{"class":52553},[33,103209,16171],{"class":43},[33,103211,73],{"class":47},[33,103213,103214],{"class":119},"\"box_free\"",[33,103216,102397],{"class":47},[14,103218,103219,103220,103222],{},"这行很重要。",[30,103221,102873],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[23,103224,103226],{"className":54320,"code":103225,"language":54322,"meta":28,"style":28},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[30,103227,103228],{"__ignoreMap":28},[33,103229,103230,103232,103234,103236,103238,103240,103242,103244,103246,103248,103250,103252,103255,103257,103259,103261,103263,103266],{"class":35,"line":36},[33,103231,875],{"class":47},[33,103233,102373],{"class":52553},[33,103235,16171],{"class":43},[33,103237,73],{"class":47},[33,103239,102380],{"class":119},[33,103241,55077],{"class":43},[33,103243,73],{"class":47},[33,103245,54744],{"class":119},[33,103247,102389],{"class":43},[33,103249,73],{"class":47},[33,103251,102394],{"class":119},[33,103253,103254],{"class":43}," mass",[33,103256,73],{"class":47},[33,103258,5080],{"class":119},[33,103260,80020],{"class":43},[33,103262,73],{"class":47},[33,103264,103265],{"class":119},"\"1 0 0 1\"",[33,103267,102397],{"class":47},[14,103269,103270,103271,103274,103275,103278,103279,103282,103283,103286],{},"这行给 box body 添加一个盒子形状。",[30,103272,103273],{},"type=\"box\""," 表示形状是盒子。",[30,103276,103277],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[30,103280,103281],{},"mass=\"1\""," 表示质量是 1。",[30,103284,103285],{},"rgba=\"1 0 0 1\""," 表示红色。",[23,103288,103290],{"className":31631,"code":103289,"language":31633,"meta":28,"style":28},"def main() -> None:\n",[30,103291,103292],{"__ignoreMap":28},[33,103293,103294,103296,103298,103300,103302],{"class":35,"line":36},[33,103295,33200],{"class":39},[33,103297,44],{"class":43},[33,103299,102651],{"class":47},[33,103301,96939],{"class":76},[33,103303,5141],{"class":47},[14,103305,103306,103308,103309,103312,103313,103316],{},[30,103307,33200],{}," 用来定义函数。这里定义了一个叫 ",[30,103310,103311],{},"main"," 的函数。",[30,103314,103315],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[23,103318,103319],{"className":31631,"code":102880,"language":31633,"meta":28,"style":28},[30,103320,103321],{"__ignoreMap":28},[33,103322,103323,103325,103327,103329,103331],{"class":35,"line":36},[33,103324,102887],{"class":47},[33,103326,73],{"class":39},[33,103328,102665],{"class":47},[33,103330,102567],{"class":76},[33,103332,884],{"class":47},[14,103334,103335,103336,103339],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[30,103337,103338],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[23,103341,103342],{"className":31631,"code":102904,"language":31633,"meta":28,"style":28},[30,103343,103344],{"__ignoreMap":28},[33,103345,103346,103348,103350],{"class":35,"line":36},[33,103347,102911],{"class":47},[33,103349,73],{"class":39},[33,103351,102679],{"class":47},[14,103353,103354,103355,103357,103358,103360],{},"这行创建仿真数据。",[30,103356,34654],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[30,103359,34654],{}," 都会变化。",[23,103362,103364],{"className":31631,"code":103363,"language":31633,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[30,103365,103366,103376,103386],{"__ignoreMap":28},[33,103367,103368,103370,103372,103374],{"class":35,"line":36},[33,103369,31668],{"class":76},[33,103371,345],{"class":47},[33,103373,102692],{"class":119},[33,103375,102695],{"class":47},[33,103377,103378,103380,103382,103384],{"class":35,"line":51},[33,103379,31668],{"class":76},[33,103381,345],{"class":47},[33,103383,102704],{"class":119},[33,103385,102707],{"class":47},[33,103387,103388,103390,103392,103394],{"class":35,"line":57},[33,103389,31668],{"class":76},[33,103391,345],{"class":47},[33,103393,102716],{"class":119},[33,103395,102719],{"class":47},[14,103397,103398,103400,103401,103404,103405,103408,103409,103412,103413,103416],{},[30,103399,31668],{}," 用来输出信息。",[30,103402,103403],{},"model.nq"," 是位置变量数量，",[30,103406,103407],{},"model.nv"," 是速度变量数量，",[30,103410,103411],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[30,103414,103415],{},"nu"," 是 0。",[23,103418,103420],{"className":31631,"code":103419,"language":31633,"meta":28,"style":28},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[30,103421,103422,103432],{"__ignoreMap":28},[33,103423,103424,103426,103428,103430],{"class":35,"line":36},[33,103425,31668],{"class":76},[33,103427,345],{"class":47},[33,103429,102728],{"class":119},[33,103431,102731],{"class":47},[33,103433,103434,103436,103438,103440],{"class":35,"line":51},[33,103435,31668],{"class":76},[33,103437,345],{"class":47},[33,103439,102740],{"class":119},[33,103441,102743],{"class":47},[14,103443,103444,103445,103447,103448,103450,103451,103454],{},"这里打印初始时间和初始位置。",[30,103446,102320],{}," 一开始是 0。",[30,103449,102323],{}," 是位置数组。",[30,103452,103453],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[23,103456,103457],{"className":31631,"code":102929,"language":31633,"meta":28,"style":28},[30,103458,103459,103475],{"__ignoreMap":28},[33,103460,103461,103463,103465,103467,103469,103471,103473],{"class":35,"line":36},[33,103462,4435],{"class":39},[33,103464,102754],{"class":47},[33,103466,27296],{"class":39},[33,103468,33696],{"class":76},[33,103470,345],{"class":47},[33,103472,457],{"class":76},[33,103474,32039],{"class":47},[33,103476,103477],{"class":35,"line":51},[33,103478,102952],{"class":47},[14,103480,103481,103483,103484,103487,103488,103490,103491,103493],{},[30,103482,4435],{}," 是循环。",[30,103485,103486],{},"range(100)"," 表示循环 100 次。",[30,103489,2587],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[30,103492,102468],{},"，仿真就前进一步。",[23,103495,103497],{"className":31631,"code":103496,"language":31633,"meta":28,"style":28},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[30,103498,103499,103509],{"__ignoreMap":28},[33,103500,103501,103503,103505,103507],{"class":35,"line":36},[33,103502,31668],{"class":76},[33,103504,345],{"class":47},[33,103506,102782],{"class":119},[33,103508,102731],{"class":47},[33,103510,103511,103513,103515,103517],{"class":35,"line":51},[33,103512,31668],{"class":76},[33,103514,345],{"class":47},[33,103516,102793],{"class":119},[33,103518,102743],{"class":47},[14,103520,103521],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[23,103523,103525],{"className":31631,"code":103524,"language":31633,"meta":28,"style":28},"if __name__ == \"__main__\":\n    main()\n",[30,103526,103527,103539],{"__ignoreMap":28},[33,103528,103529,103531,103533,103535,103537],{"class":35,"line":36},[33,103530,2987],{"class":39},[33,103532,32473],{"class":76},[33,103534,102812],{"class":39},[33,103536,102815],{"class":119},[33,103538,5141],{"class":47},[33,103540,103541],{"class":35,"line":51},[33,103542,102822],{"class":47},[14,103544,103545,103546,103549,103550,29638],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[30,103547,103548],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[30,103551,103548],{},[14,103553,103554],{},"运行:",[23,103556,103558],{"className":25074,"code":103557,"language":25076,"meta":28,"style":28},"python ch1_first_sim.py\n",[30,103559,103560],{"__ignoreMap":28},[33,103561,103562,103564],{"class":35,"line":36},[33,103563,31633],{"class":43},[33,103565,102539],{"class":119},[18,103567,103569],{"id":103568},"_5运行结果说明","5.运行结果说明",[14,103571,103572],{},"你应该看到类似输出:",[23,103574,103577],{"className":103575,"code":103576,"language":6578,"meta":28},[6576],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[30,103578,103576],{"__ignoreMap":28},[14,103580,103581,103583,103584,103587,103588,29638],{},[30,103582,102873],{}," 有 7 个位置变量: ",[30,103585,103586],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[30,103589,103590],{},"vx vy vz wx wy wz",[14,103592,103593,103594,103597],{},"你还会看到 ",[30,103595,103596],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[18,103599,103601],{"id":103600},"_6验证步骤","6.验证步骤",[14,103603,103604],{},"确认版本:",[23,103606,103607],{"className":25074,"code":102192,"language":25076,"meta":28,"style":28},[30,103608,103609],{"__ignoreMap":28},[33,103610,103611,103613,103615],{"class":35,"line":36},[33,103612,31633],{"class":43},[33,103614,31611],{"class":76},[33,103616,102203],{"class":119},[14,103618,103619],{},"确认导入的是官方 bindings:",[23,103621,103623],{"className":25074,"code":103622,"language":25076,"meta":28,"style":28},"python -c \"import mujoco; print(mujoco)\"\n",[30,103624,103625],{"__ignoreMap":28},[33,103626,103627,103629,103631],{"class":35,"line":36},[33,103628,31633],{"class":43},[33,103630,31611],{"class":76},[33,103632,103633],{"class":119}," \"import mujoco; print(mujoco)\"\n",[14,103635,103636],{},"运行程序:",[23,103638,103639],{"className":25074,"code":103557,"language":25076,"meta":28,"style":28},[30,103640,103641],{"__ignoreMap":28},[33,103642,103643,103645],{"class":35,"line":36},[33,103644,31633],{"class":43},[33,103646,102539],{"class":119},[14,103648,103649,103650,103653,103654,29638],{},"检查 ",[30,103651,103652],{},"final time"," 是否约等于 ",[30,103655,103656],{},"1.0",[14,103658,103659],{},"再做几个小实验：",[574,103661,103662,103672,103680,103693],{},[564,103663,103664,103665,103667,103668,103671],{},"把 ",[30,103666,103192],{}," 改成 ",[30,103669,103670],{},"pos=\"0 0 2\"","，观察初始高度变化。",[564,103673,103664,103674,103667,103676,103679],{},[30,103675,103081],{},[30,103677,103678],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[564,103681,103664,103682,103667,103684,103687,103688,103690,103691,29638],{},[30,103683,103077],{},[30,103685,103686],{},"timestep=\"0.005\"","，观察 100 步后的 ",[30,103689,103652],{}," 是否变成约 ",[30,103692,36582],{},[564,103694,103695,103696,103699],{},"删除 ",[30,103697,103698],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,103701,103702],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[18,103704,103706],{"id":103705},"_7常见错误与解决方案","7.常见错误与解决方案",[1599,103708,103710],{"id":103709},"modulenotfounderror-no-module-named-mujoco",[30,103711,103712],{},"ModuleNotFoundError: No module named 'mujoco'",[14,103714,103715],{},"解决:",[23,103717,103719],{"className":25074,"code":103718,"language":25076,"meta":28,"style":28},"pip install \"mujoco>=2.3\"\n",[30,103720,103721],{"__ignoreMap":28},[33,103722,103723,103725,103727],{"class":35,"line":36},[33,103724,25083],{"class":43},[33,103726,25086],{"class":119},[33,103728,103729],{"class":119}," \"mujoco>=2.3\"\n",[1599,103731,103733],{"id":103732},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,103735,103736],{},"先安装系统依赖:",[23,103738,103740],{"className":25074,"code":103739,"language":25076,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[30,103741,103742],{"__ignoreMap":28},[33,103743,103744,103746,103748,103750,103752,103755,103757,103760,103762,103765,103767],{"class":35,"line":36},[33,103745,25829],{"class":43},[33,103747,27568],{"class":119},[33,103749,25086],{"class":119},[33,103751,27653],{"class":76},[33,103753,103754],{"class":119}," mesa-libGL",[33,103756,102067],{"class":119},[33,103758,103759],{"class":119}," glfw",[33,103761,102087],{"class":119},[33,103763,103764],{"class":119}," libX11",[33,103766,102100],{"class":119},[33,103768,103769],{"class":119}," libXrandr\n",[1599,103771,103773],{"id":103772},"xml-解析失败","XML 解析失败",[14,103775,103776],{},"检查:",[574,103778,103779,103782,103785,103791],{},[564,103780,103781],{},"标签是否闭合",[564,103783,103784],{},"属性是否带引号",[564,103786,103787,103788],{},"根节点是否是 ",[30,103789,103790],{},"\u003Cmujoco>",[564,103792,103793,103795,103796,103799],{},[30,103794,53053],{}," 是否放在 ",[30,103797,103798],{},"\u003Cworldbody>"," 内部",[1599,103801,103803,103805,103806],{"id":103802},"final-time-不是严格等于-10",[30,103804,103652],{}," 不是严格等于 ",[30,103807,103656],{},[14,103809,103810],{},"这通常不是错误。浮点数计算可能得到：",[23,103812,103815],{"className":103813,"code":103814,"language":6578,"meta":28},[6576],"1.0000000000000007\n",[30,103816,103814],{"__ignoreMap":28},[14,103818,103819,103820,103822],{},"只要接近 ",[30,103821,103656],{}," 就正常。",[1599,103824,103825],{"id":103825},"方块没有掉下来",[14,103827,103828],{},"检查：",[574,103830,103831,103837,103843,103848],{},[564,103832,103833,103834],{},"方块 body 里是否有 ",[30,103835,103836],{},"\u003Cfreejoint\u002F>",[564,103838,103839,103840],{},"重力是否是 ",[30,103841,103842],{},"0 0 -9.81",[564,103844,103845,103846],{},"是否真的调用了 ",[30,103847,101938],{},[564,103849,103850,103851,103853,103854],{},"你看的是否是 ",[30,103852,103596],{},"，不是 ",[30,103855,103856],{},"initial qpos",[18,103858,103860],{"id":103859},"_8本章小结","8.本章小结",[14,103862,103863],{},"本章你已经完成了 MuJoCo 的最小闭环：",[23,103865,103868],{"className":103866,"code":103867,"language":6578,"meta":28},[6576],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[30,103869,103867],{"__ignoreMap":28},[14,103871,103872],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1544,103874,103875],{},"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":28,"searchDepth":51,"depth":51,"links":103877},[103878,103879,103880,103885,103889,103890,103891,103899],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":103881},[103882,103883,103884],{"id":102335,"depth":57,"text":102336},{"id":102429,"depth":57,"text":102430},{"id":102481,"depth":57,"text":102482},{"id":102505,"depth":51,"text":102506,"children":103886},[103887,103888],{"id":102825,"depth":57,"text":102825},{"id":102961,"depth":57,"text":102961},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":103892},[103893,103894,103895,103896,103898],{"id":103709,"depth":57,"text":103712},{"id":103732,"depth":57,"text":103733},{"id":103772,"depth":57,"text":103773},{"id":103802,"depth":57,"text":103897},"final time 不是严格等于 1.0",{"id":103825,"depth":57,"text":103825},{"id":103859,"depth":51,"text":103860},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101891,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103906,"title":103907,"body":103908,"description":28,"extension":1557,"meta":105564,"navigation":159,"path":105565,"seo":105566,"stem":105567,"__hash__":105568},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103909,"toc":105540},[103910,103913,103915,103918,103921,103938,104033,104036,104042,104044,104046,104070,104073,104087,104090,104131,104133,104146,104148,104151,104199,104211,104214,104217,104223,104236,104303,104306,104325,104328,104331,104337,104339,104348,104351,104355,104364,104446,104455,104459,104465,104479,104489,104491,104821,104824,104836,104838,104849,104851,104854,104872,104875,104878,104896,104907,104910,104925,104935,104937,104958,104975,104995,105001,105041,105057,105073,105079,105082,105106,105122,105127,105157,105174,105199,105202,105217,105226,105241,105250,105265,105272,105274,105284,105297,105304,105307,105346,105353,105355,105407,105409,105415,105418,105425,105432,105435,105437,105455,105458,105461,105495,105507,105509,105512,105534,105537],[10,103911,103907],{"id":103912},"_2xml-与-mjcf-物理建模基础",[18,103914,101900],{"id":101899},[14,103916,103917],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,103919,103920],{},"本章结束后，你应该能看懂一个简单模型里：",[574,103922,103923,103926,103929,103932,103935],{},[564,103924,103925],{},"地面在哪里。",[564,103927,103928],{},"物体初始位置在哪里。",[564,103930,103931],{},"几何体是什么形状。",[564,103933,103934],{},"哪些 body 可以自由运动。",[564,103936,103937],{},"如何用名字在 Python 里找到 XML 中的对象。",[1756,103939,103940,103950],{},[1759,103941,103942],{},[1762,103943,103944,103947],{},[1765,103945,103946],{"align":24988},"标签",[1765,103948,103949],{"align":24988},"作用",[1802,103951,103952,103961,103971,103980,103990,104000,104013,104023],{},[1762,103953,103954,103958],{},[1807,103955,103956],{"align":24988},[30,103957,103790],{},[1807,103959,103960],{"align":24988},"根节点",[1762,103962,103963,103968],{},[1807,103964,103965],{"align":24988},[30,103966,103967],{},"\u003Coption>",[1807,103969,103970],{"align":24988},"仿真参数",[1762,103972,103973,103977],{},[1807,103974,103975],{"align":24988},[30,103976,103798],{},[1807,103978,103979],{"align":24988},"世界中的物体",[1762,103981,103982,103987],{},[1807,103983,103984],{"align":24988},[30,103985,103986],{},"\u003Cbody>",[1807,103988,103989],{"align":24988},"刚体",[1762,103991,103992,103997],{},[1807,103993,103994],{"align":24988},[30,103995,103996],{},"\u003Cgeom>",[1807,103998,103999],{"align":24988},"几何体、碰撞体、可视体",[1762,104001,104002,104010],{},[1807,104003,104004,26231,104007],{"align":24988},[30,104005,104006],{},"\u003Cjoint>",[30,104008,104009],{},"\u003Cfreejoint>",[1807,104011,104012],{"align":24988},"关节",[1762,104014,104015,104020],{},[1807,104016,104017],{"align":24988},[30,104018,104019],{},"\u003Csite>",[1807,104021,104022],{"align":24988},"标记点",[1762,104024,104025,104030],{},[1807,104026,104027],{"align":24988},[30,104028,104029],{},"\u003Cactuator>",[1807,104031,104032],{"align":24988},"控制器",[14,104034,104035],{},"初学时可以先记住：",[23,104037,104040],{"className":104038,"code":104039,"language":6578,"meta":28},[6576],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[30,104041,104039],{"__ignoreMap":28},[18,104043,102023],{"id":102022},[14,104045,102026],{},[23,104047,104049],{"className":25074,"code":104048,"language":25076,"meta":28,"style":28},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[30,104050,104051],{"__ignoreMap":28},[33,104052,104053,104055,104057,104059,104061,104063,104065,104067],{"class":35,"line":36},[33,104054,25829],{"class":43},[33,104056,27568],{"class":119},[33,104058,25086],{"class":119},[33,104060,27653],{"class":76},[33,104062,103754],{"class":119},[33,104064,102067],{"class":119},[33,104066,103759],{"class":119},[33,104068,104069],{"class":119}," glfw-devel\n",[14,104071,104072],{},"pip:",[23,104074,104075],{"className":25074,"code":102172,"language":25076,"meta":28,"style":28},[30,104076,104077],{"__ignoreMap":28},[33,104078,104079,104081,104083,104085],{"class":35,"line":36},[33,104080,25083],{"class":43},[33,104082,25086],{"class":119},[33,104084,102183],{"class":119},[33,104086,102186],{"class":119},[14,104088,104089],{},"conda:",[23,104091,104093],{"className":25074,"code":104092,"language":25076,"meta":28,"style":28},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[30,104094,104095,104112,104121],{"__ignoreMap":28},[33,104096,104097,104099,104101,104103,104106,104108,104110],{"class":35,"line":36},[33,104098,31583],{"class":43},[33,104100,30429],{"class":119},[33,104102,26368],{"class":76},[33,104104,104105],{"class":119}," mujoco-xml",[33,104107,102228],{"class":119},[33,104109,102231],{"class":76},[33,104111,102234],{"class":76},[33,104113,104114,104116,104118],{"class":35,"line":51},[33,104115,31583],{"class":43},[33,104117,102241],{"class":119},[33,104119,104120],{"class":119}," mujoco-xml\n",[33,104122,104123,104125,104127,104129],{"class":35,"line":57},[33,104124,25083],{"class":43},[33,104126,25086],{"class":119},[33,104128,102183],{"class":119},[33,104130,102186],{"class":119},[14,104132,102257],{},[574,104134,104135,104138,104143],{},[564,104136,104137],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[564,104139,104140,104141,29638],{},"本章使用基础标签，适用于 ",[30,104142,102280],{},[564,104144,104145],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[18,104147,102298],{"id":102297},[14,104149,104150],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[23,104152,104154],{"className":54320,"code":104153,"language":54322,"meta":28,"style":28},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[30,104155,104156,104170,104178,104183,104191],{"__ignoreMap":28},[33,104157,104158,104160,104162,104164,104166,104168],{"class":35,"line":36},[33,104159,875],{"class":47},[33,104161,102274],{"class":52553},[33,104163,103028],{"class":43},[33,104165,73],{"class":47},[33,104167,63932],{"class":119},[33,104169,52560],{"class":47},[33,104171,104172,104174,104176],{"class":35,"line":51},[33,104173,53397],{"class":47},[33,104175,103094],{"class":52553},[33,104177,52560],{"class":47},[33,104179,104180],{"class":35,"line":57},[33,104181,104182],{"class":47},"    ...\n",[33,104184,104185,104187,104189],{"class":35,"line":64},[33,104186,53670],{"class":47},[33,104188,103094],{"class":52553},[33,104190,52560],{"class":47},[33,104192,104193,104195,104197],{"class":35,"line":83},[33,104194,53038],{"class":47},[33,104196,102274],{"class":52553},[33,104198,52560],{"class":47},[14,104200,104201,104203,104204,104206,104207,104210],{},[30,104202,53053],{}," 表示刚体。",[30,104205,102373],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[30,104208,104209],{},"joint"," 表示刚体相对父刚体如何运动。",[1599,104212,104213],{"id":104213},"层级结构非常重要",[14,104215,104216],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[23,104218,104221],{"className":104219,"code":104220,"language":6578,"meta":28},[6576],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[30,104222,104220],{"__ignoreMap":28},[14,104224,104225,102271,104228,104231,104232,104235],{},[30,104226,104227],{},"red_box_geom",[30,104229,104230],{},"box_center"," 都属于 ",[30,104233,104234],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[23,104237,104239],{"className":54320,"code":104238,"language":54322,"meta":28,"style":28},"\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",[30,104240,104241,104261,104275,104295],{"__ignoreMap":28},[33,104242,104243,104245,104247,104249,104251,104253,104255,104257,104259],{"class":35,"line":36},[33,104244,875],{"class":47},[33,104246,53053],{"class":52553},[33,104248,16171],{"class":43},[33,104250,73],{"class":47},[33,104252,54744],{"class":119},[33,104254,102359],{"class":43},[33,104256,73],{"class":47},[33,104258,102364],{"class":119},[33,104260,52560],{"class":47},[33,104262,104263,104265,104267,104269,104271,104273],{"class":35,"line":51},[33,104264,53397],{"class":47},[33,104266,102873],{"class":52553},[33,104268,16171],{"class":43},[33,104270,73],{"class":47},[33,104272,103214],{"class":119},[33,104274,102397],{"class":47},[33,104276,104277,104279,104281,104283,104285,104287,104289,104291,104293],{"class":35,"line":57},[33,104278,53397],{"class":47},[33,104280,102373],{"class":52553},[33,104282,55077],{"class":43},[33,104284,73],{"class":47},[33,104286,54744],{"class":119},[33,104288,102389],{"class":43},[33,104290,73],{"class":47},[33,104292,102394],{"class":119},[33,104294,102397],{"class":47},[33,104296,104297,104299,104301],{"class":35,"line":64},[33,104298,53038],{"class":47},[33,104300,53053],{"class":52553},[33,104302,52560],{"class":47},[14,104304,104305],{},"含义:",[574,104307,104308,104314,104319,104322],{},[564,104309,104310,104311,104313],{},"创建名为 ",[30,104312,54967],{}," 的刚体",[564,104315,104316,104317],{},"初始位置在世界坐标 ",[30,104318,102422],{},[564,104320,104321],{},"它有一个自由关节",[564,104323,104324],{},"它有一个盒子几何体",[1599,104326,104327],{"id":104327},"坐标怎么理解",[14,104329,104330],{},"MuJoCo 默认使用三维坐标：",[23,104332,104335],{"className":104333,"code":104334,"language":6578,"meta":28},[6576],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[30,104336,104334],{"__ignoreMap":28},[14,104338,15884],{},[23,104340,104342],{"className":54320,"code":104341,"language":54322,"meta":28,"style":28},"pos=\"0 0 1\"\n",[30,104343,104344],{"__ignoreMap":28},[33,104345,104346],{"class":35,"line":36},[33,104347,104341],{"class":47},[14,104349,104350],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[1599,104352,104354],{"id":104353},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,104356,104357,104358,83783,104361,104363],{},"不同 ",[30,104359,104360],{},"type",[30,104362,32749],{}," 含义不同：",[1756,104365,104366,104381],{},[1759,104367,104368],{},[1762,104369,104370,104374,104379],{},[1765,104371,104372],{"align":24988},[30,104373,104360],{},[1765,104375,104376,104378],{"align":24988},[30,104377,32749],{}," 示例",[1765,104380,101953],{"align":24988},[1802,104382,104383,104397,104412,104431],{},[1762,104384,104385,104389,104394],{},[1807,104386,104387],{"align":24988},[30,104388,54967],{},[1807,104390,104391],{"align":24988},[30,104392,104393],{},"size=\"0.1 0.2 0.3\"",[1807,104395,104396],{"align":24988},"x\u002Fy\u002Fz 半边长，不是完整长度",[1762,104398,104399,104404,104409],{},[1807,104400,104401],{"align":24988},[30,104402,104403],{},"sphere",[1807,104405,104406],{"align":24988},[30,104407,104408],{},"size=\"0.1\"",[1807,104410,104411],{"align":24988},"球半径",[1762,104413,104414,104419,104424],{},[1807,104415,104416],{"align":24988},[30,104417,104418],{},"capsule",[1807,104420,104421],{"align":24988},[30,104422,104423],{},"size=\"0.03\"",[1807,104425,104426,104427,104430],{"align":24988},"胶囊半径，长度常用 ",[30,104428,104429],{},"fromto"," 指定",[1762,104432,104433,104438,104443],{},[1807,104434,104435],{"align":24988},[30,104436,104437],{},"plane",[1807,104439,104440],{"align":24988},[30,104441,104442],{},"size=\"3 3 0.1\"",[1807,104444,104445],{"align":24988},"可视平面大小，通常当地面",[14,104447,104448,104449,104451,104452,104454],{},"最容易踩坑的是 box：",[30,104450,103277],{}," 表示边长大约是 ",[30,104453,33290],{},"，因为 MuJoCo 用的是半边长。",[1599,104456,104458],{"id":104457},"site-是什么","site 是什么",[14,104460,104461,104464],{},[30,104462,104463],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[574,104466,104467,104470,104473,104476],{},[564,104468,104469],{},"标记机械臂末端。",[564,104471,104472],{},"标记目标位置。",[564,104474,104475],{},"放传感器或相机参考点。",[564,104477,104478],{},"在 Python 中读取某个关键点的世界坐标。",[14,104480,104481,104482,102271,104485,104488],{},"在后面的 Reacher 任务中，",[30,104483,104484],{},"tip",[30,104486,104487],{},"target"," 就会用 site 表示。",[18,104490,102506],{"id":102505},[23,104492,104494],{"className":31631,"code":104493,"language":31633,"meta":28,"style":28},"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",[30,104495,104496,104502,104512,104516,104520,104528,104533,104537,104541,104545,104550,104554,104559,104564,104569,104574,104578,104582,104586,104590,104594,104598,104610,104622,104630,104634,104649,104664,104668,104681,104696,104709,104722,104726,104742,104746,104750,104761,104773,104785,104797,104801,104805,104817],{"__ignoreMap":28},[33,104497,104498,104500],{"class":35,"line":36},[33,104499,31645],{"class":39},[33,104501,102554],{"class":47},[33,104503,104504,104506,104508,104510],{"class":35,"line":51},[33,104505,31645],{"class":39},[33,104507,32633],{"class":47},[33,104509,32636],{"class":39},[33,104511,32639],{"class":47},[33,104513,104514],{"class":35,"line":57},[33,104515,160],{"emptyLinePlaceholder":159},[33,104517,104518],{"class":35,"line":64},[33,104519,160],{"emptyLinePlaceholder":159},[33,104521,104522,104524,104526],{"class":35,"line":83},[33,104523,102567],{"class":76},[33,104525,14815],{"class":39},[33,104527,102572],{"class":119},[33,104529,104530],{"class":35,"line":89},[33,104531,104532],{"class":119},"\u003Cmujoco model=\"xml_basic\">\n",[33,104534,104535],{"class":35,"line":98},[33,104536,102582],{"class":119},[33,104538,104539],{"class":35,"line":110},[33,104540,160],{"emptyLinePlaceholder":159},[33,104542,104543],{"class":35,"line":134},[33,104544,102591],{"class":119},[33,104546,104547],{"class":35,"line":156},[33,104548,104549],{"class":119},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[33,104551,104552],{"class":35,"line":163},[33,104553,160],{"emptyLinePlaceholder":159},[33,104555,104556],{"class":35,"line":169},[33,104557,104558],{"class":119},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[33,104560,104561],{"class":35,"line":175},[33,104562,104563],{"class":119},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[33,104565,104566],{"class":35,"line":181},[33,104567,104568],{"class":119},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,104570,104571],{"class":35,"line":196},[33,104572,104573],{"class":119},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104575,104576],{"class":35,"line":213},[33,104577,102620],{"class":119},[33,104579,104580],{"class":35,"line":228},[33,104581,102625],{"class":119},[33,104583,104584],{"class":35,"line":1345},[33,104585,102630],{"class":119},[33,104587,104588],{"class":35,"line":1350},[33,104589,96951],{"class":119},[33,104591,104592],{"class":35,"line":1359},[33,104593,160],{"emptyLinePlaceholder":159},[33,104595,104596],{"class":35,"line":1364},[33,104597,160],{"emptyLinePlaceholder":159},[33,104599,104600,104602,104604,104606,104608],{"class":35,"line":1370},[33,104601,33200],{"class":39},[33,104603,44],{"class":43},[33,104605,102651],{"class":47},[33,104607,96939],{"class":76},[33,104609,5141],{"class":47},[33,104611,104612,104614,104616,104618,104620],{"class":35,"line":1425},[33,104613,102660],{"class":47},[33,104615,73],{"class":39},[33,104617,102665],{"class":47},[33,104619,102567],{"class":76},[33,104621,884],{"class":47},[33,104623,104624,104626,104628],{"class":35,"line":1438},[33,104625,102674],{"class":47},[33,104627,73],{"class":39},[33,104629,102679],{"class":47},[33,104631,104632],{"class":35,"line":1451},[33,104633,160],{"emptyLinePlaceholder":159},[33,104635,104636,104639,104641,104644,104647],{"class":35,"line":1457},[33,104637,104638],{"class":47},"    box_body_id ",[33,104640,73],{"class":39},[33,104642,104643],{"class":47}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[33,104645,104646],{"class":119},"\"red_box\"",[33,104648,884],{"class":47},[33,104650,104651,104654,104656,104659,104662],{"class":35,"line":1466},[33,104652,104653],{"class":47},"    site_id ",[33,104655,73],{"class":39},[33,104657,104658],{"class":47}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[33,104660,104661],{"class":119},"\"box_center\"",[33,104663,884],{"class":47},[33,104665,104666],{"class":35,"line":1471},[33,104667,160],{"emptyLinePlaceholder":159},[33,104669,104670,104672,104675,104677,104679],{"class":35,"line":1477},[33,104671,4509],{"class":39},[33,104673,104674],{"class":47}," box_body_id ",[33,104676,875],{"class":39},[33,104678,5492],{"class":76},[33,104680,5141],{"class":47},[33,104682,104683,104686,104689,104691,104694],{"class":35,"line":1504},[33,104684,104685],{"class":39},"        raise",[33,104687,104688],{"class":76}," RuntimeError",[33,104690,345],{"class":47},[33,104692,104693],{"class":119},"\"body red_box not found\"",[33,104695,884],{"class":47},[33,104697,104698,104700,104703,104705,104707],{"class":35,"line":1509},[33,104699,4509],{"class":39},[33,104701,104702],{"class":47}," site_id ",[33,104704,875],{"class":39},[33,104706,5492],{"class":76},[33,104708,5141],{"class":47},[33,104710,104711,104713,104715,104717,104720],{"class":35,"line":1525},[33,104712,104685],{"class":39},[33,104714,104688],{"class":76},[33,104716,345],{"class":47},[33,104718,104719],{"class":119},"\"site box_center not found\"",[33,104721,884],{"class":47},[33,104723,104724],{"class":35,"line":1535},[33,104725,160],{"emptyLinePlaceholder":159},[33,104727,104728,104730,104732,104734,104736,104738,104740],{"class":35,"line":1540},[33,104729,857],{"class":39},[33,104731,102754],{"class":47},[33,104733,27296],{"class":39},[33,104735,33696],{"class":76},[33,104737,345],{"class":47},[33,104739,3163],{"class":76},[33,104741,32039],{"class":47},[33,104743,104744],{"class":35,"line":4027},[33,104745,102769],{"class":47},[33,104747,104748],{"class":35,"line":4032},[33,104749,160],{"emptyLinePlaceholder":159},[33,104751,104752,104754,104756,104759],{"class":35,"line":9199},[33,104753,32552],{"class":76},[33,104755,345],{"class":47},[33,104757,104758],{"class":119},"\"simulation time:\"",[33,104760,102731],{"class":47},[33,104762,104763,104765,104767,104770],{"class":35,"line":9223},[33,104764,32552],{"class":76},[33,104766,345],{"class":47},[33,104768,104769],{"class":119},"\"box body position:\"",[33,104771,104772],{"class":47},", data.xpos[box_body_id].copy())\n",[33,104774,104775,104777,104779,104782],{"class":35,"line":9228},[33,104776,32552],{"class":76},[33,104778,345],{"class":47},[33,104780,104781],{"class":119},"\"site position:\"",[33,104783,104784],{"class":47},", data.site_xpos[site_id].copy())\n",[33,104786,104787,104789,104791,104794],{"class":35,"line":9234},[33,104788,32552],{"class":76},[33,104790,345],{"class":47},[33,104792,104793],{"class":119},"\"box qpos:\"",[33,104795,104796],{"class":47},", np.array(data.qpos))\n",[33,104798,104799],{"class":35,"line":9261},[33,104800,160],{"emptyLinePlaceholder":159},[33,104802,104803],{"class":35,"line":9266},[33,104804,160],{"emptyLinePlaceholder":159},[33,104806,104807,104809,104811,104813,104815],{"class":35,"line":9272},[33,104808,2987],{"class":39},[33,104810,32473],{"class":76},[33,104812,102812],{"class":39},[33,104814,102815],{"class":119},[33,104816,5141],{"class":47},[33,104818,104819],{"class":35,"line":9284},[33,104820,102822],{"class":47},[14,104822,104823],{},"保存为：",[23,104825,104827],{"className":25074,"code":104826,"language":25076,"meta":28,"style":28},"touch ch2_xml_basic.py\n",[30,104828,104829],{"__ignoreMap":28},[33,104830,104831,104833],{"class":35,"line":36},[33,104832,102536],{"class":43},[33,104834,104835],{"class":119}," ch2_xml_basic.py\n",[14,104837,103554],{},[23,104839,104841],{"className":25074,"code":104840,"language":25076,"meta":28,"style":28},"python ch2_xml_basic.py\n",[30,104842,104843],{"__ignoreMap":28},[33,104844,104845,104847],{"class":35,"line":36},[33,104846,31633],{"class":43},[33,104848,104835],{"class":119},[1599,104850,102825],{"id":102825},[14,104852,104853],{},"用名字查找 body：",[23,104855,104857],{"className":31631,"code":104856,"language":31633,"meta":28,"style":28},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[30,104858,104859],{"__ignoreMap":28},[33,104860,104861,104864,104866,104868,104870],{"class":35,"line":36},[33,104862,104863],{"class":47},"box_body_id ",[33,104865,73],{"class":39},[33,104867,104643],{"class":47},[33,104869,104646],{"class":119},[33,104871,884],{"class":47},[14,104873,104874],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,104876,104877],{},"用名字查找 site：",[23,104879,104881],{"className":31631,"code":104880,"language":31633,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[30,104882,104883],{"__ignoreMap":28},[33,104884,104885,104888,104890,104892,104894],{"class":35,"line":36},[33,104886,104887],{"class":47},"site_id ",[33,104889,73],{"class":39},[33,104891,104658],{"class":47},[33,104893,104661],{"class":119},[33,104895,884],{"class":47},[14,104897,104898,104899,104902,104903,104906],{},"注意第二个参数是对象类型。查 body 就用 ",[30,104900,104901],{},"mjOBJ_BODY","，查 site 就用 ",[30,104904,104905],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,104908,104909],{},"读取世界坐标：",[23,104911,104913],{"className":31631,"code":104912,"language":31633,"meta":28,"style":28},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[30,104914,104915,104920],{"__ignoreMap":28},[33,104916,104917],{"class":35,"line":36},[33,104918,104919],{"class":47},"data.xpos[box_body_id]\n",[33,104921,104922],{"class":35,"line":51},[33,104923,104924],{"class":47},"data.site_xpos[site_id]\n",[14,104926,104927,104930,104931,104934],{},[30,104928,104929],{},"xpos"," 是 body 的世界坐标，",[30,104932,104933],{},"site_xpos"," 是 site 的世界坐标。",[1599,104936,102961],{"id":102961},[23,104938,104940],{"className":31631,"code":104939,"language":31633,"meta":28,"style":28},"import mujoco\nimport numpy as np\n",[30,104941,104942,104948],{"__ignoreMap":28},[33,104943,104944,104946],{"class":35,"line":36},[33,104945,31645],{"class":39},[33,104947,102554],{"class":47},[33,104949,104950,104952,104954,104956],{"class":35,"line":51},[33,104951,31645],{"class":39},[33,104953,32633],{"class":47},[33,104955,32636],{"class":39},[33,104957,32639],{"class":47},[14,104959,104960,104961,104964,104965,104968,104969,1829,104972,29638],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[30,104962,104963],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[30,104966,104967],{},"as np"," 是习惯写法，后面就可以写 ",[30,104970,104971],{},"np.array(...)",[30,104973,104974],{},"np.round(...)",[23,104976,104977],{"className":31631,"code":102848,"language":31633,"meta":28,"style":28},[30,104978,104979,104987,104991],{"__ignoreMap":28},[33,104980,104981,104983,104985],{"class":35,"line":36},[33,104982,102567],{"class":76},[33,104984,14815],{"class":39},[33,104986,102572],{"class":119},[33,104988,104989],{"class":35,"line":51},[33,104990,102863],{"class":119},[33,104992,104993],{"class":35,"line":57},[33,104994,96951],{"class":119},[14,104996,104997,104998,29638],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[30,104999,105000],{},"mujoco.MjModel.from_xml_string(XML)",[23,105002,105004],{"className":54320,"code":105003,"language":54322,"meta":28,"style":28},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,105005,105006],{"__ignoreMap":28},[33,105007,105008,105010,105012,105014,105016,105018,105020,105022,105025,105027,105029,105032,105034,105036,105039],{"class":35,"line":36},[33,105009,875],{"class":47},[33,105011,104463],{"class":52553},[33,105013,16171],{"class":43},[33,105015,73],{"class":47},[33,105017,104661],{"class":119},[33,105019,102359],{"class":43},[33,105021,73],{"class":47},[33,105023,105024],{"class":119},"\"0 0 0\"",[33,105026,102389],{"class":43},[33,105028,73],{"class":47},[33,105030,105031],{"class":119},"\"0.03\"",[33,105033,80020],{"class":43},[33,105035,73],{"class":47},[33,105037,105038],{"class":119},"\"0 1 0 1\"",[33,105040,102397],{"class":47},[14,105042,105043,105045,105046,105049,105050,105052,105053,105056],{},[30,105044,104463],{}," 是标记点。",[30,105047,105048],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[30,105051,104423],{}," 表示显示出来的小球大小。",[30,105054,105055],{},"rgba=\"0 1 0 1\""," 表示绿色。",[23,105058,105059],{"className":31631,"code":104856,"language":31633,"meta":28,"style":28},[30,105060,105061],{"__ignoreMap":28},[33,105062,105063,105065,105067,105069,105071],{"class":35,"line":36},[33,105064,104863],{"class":47},[33,105066,73],{"class":39},[33,105068,104643],{"class":47},[33,105070,104646],{"class":119},[33,105072,884],{"class":47},[14,105074,105075,105076,105078],{},"这行的作用是：根据名字 ",[30,105077,104646],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,105080,105081],{},"拆开看：",[574,105083,105084,105090,105095,105101],{},[564,105085,105086,105089],{},[30,105087,105088],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[564,105091,105092,105094],{},[30,105093,103338],{}," 是被查询的模型。",[564,105096,105097,105100],{},[30,105098,105099],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[564,105102,105103,105105],{},[30,105104,104646],{}," 是 XML 里写的名字。",[23,105107,105108],{"className":31631,"code":104880,"language":31633,"meta":28,"style":28},[30,105109,105110],{"__ignoreMap":28},[33,105111,105112,105114,105116,105118,105120],{"class":35,"line":36},[33,105113,104887],{"class":47},[33,105115,73],{"class":39},[33,105117,104658],{"class":47},[33,105119,104661],{"class":119},[33,105121,884],{"class":47},[14,105123,105124,105125,29638],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[30,105126,104661],{},[23,105128,105130],{"className":31631,"code":105129,"language":31633,"meta":28,"style":28},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[30,105131,105132,105144],{"__ignoreMap":28},[33,105133,105134,105136,105138,105140,105142],{"class":35,"line":36},[33,105135,2987],{"class":39},[33,105137,104674],{"class":47},[33,105139,875],{"class":39},[33,105141,5492],{"class":76},[33,105143,5141],{"class":47},[33,105145,105146,105149,105151,105153,105155],{"class":35,"line":51},[33,105147,105148],{"class":39},"    raise",[33,105150,104688],{"class":76},[33,105152,345],{"class":47},[33,105154,104693],{"class":119},[33,105156,884],{"class":47},[14,105158,105159,105161,105162,105165,105166,105169,105170,105173],{},[30,105160,2987],{}," 是条件判断。",[30,105163,105164],{},"mj_name2id"," 找不到对象时会返回 ",[30,105167,105168],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[30,105171,105172],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[23,105175,105177],{"className":31631,"code":105176,"language":31633,"meta":28,"style":28},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[30,105178,105179,105195],{"__ignoreMap":28},[33,105180,105181,105183,105185,105187,105189,105191,105193],{"class":35,"line":36},[33,105182,4435],{"class":39},[33,105184,102754],{"class":47},[33,105186,27296],{"class":39},[33,105188,33696],{"class":76},[33,105190,345],{"class":47},[33,105192,3163],{"class":76},[33,105194,32039],{"class":47},[33,105196,105197],{"class":35,"line":51},[33,105198,102952],{"class":47},[14,105200,105201],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[23,105203,105205],{"className":31631,"code":105204,"language":31633,"meta":28,"style":28},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[30,105206,105207],{"__ignoreMap":28},[33,105208,105209,105211,105213,105215],{"class":35,"line":36},[33,105210,31668],{"class":76},[33,105212,345],{"class":47},[33,105214,104769],{"class":119},[33,105216,104772],{"class":47},[14,105218,105219,105221,105222,105225],{},[30,105220,102332],{}," 保存所有 body 的世界坐标。",[30,105223,105224],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[23,105227,105229],{"className":31631,"code":105228,"language":31633,"meta":28,"style":28},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[30,105230,105231],{"__ignoreMap":28},[33,105232,105233,105235,105237,105239],{"class":35,"line":36},[33,105234,31668],{"class":76},[33,105236,345],{"class":47},[33,105238,104781],{"class":119},[33,105240,104784],{"class":47},[14,105242,105243,105246,105247,105249],{},[30,105244,105245],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[30,105248,104230],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[23,105251,105253],{"className":31631,"code":105252,"language":31633,"meta":28,"style":28},"print(\"box qpos:\", np.array(data.qpos))\n",[30,105254,105255],{"__ignoreMap":28},[33,105256,105257,105259,105261,105263],{"class":35,"line":36},[33,105258,31668],{"class":76},[33,105260,345],{"class":47},[33,105262,104793],{"class":119},[33,105264,104796],{"class":47},[14,105266,105267,105268,105271],{},"这里打印广义位置数组。",[30,105269,105270],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[18,105273,103569],{"id":103568},[14,105275,105276,105277,105280,105281,29638],{},"程序会输出 ",[30,105278,105279],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[30,105282,105283],{},"qpos",[14,105285,105286,105288,105289,105292,105293,105296],{},[30,105287,105224],{}," 是 body 的世界坐标位置。",[30,105290,105291],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[30,105294,105295],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,105298,83475,105299,83783,105301,105303],{},[30,105300,104230],{},[30,105302,105048],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,105305,105306],{},"如果你把 site 改成：",[23,105308,105310],{"className":54320,"code":105309,"language":54322,"meta":28,"style":28},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[30,105311,105312],{"__ignoreMap":28},[33,105313,105314,105316,105318,105320,105322,105325,105327,105329,105332,105334,105336,105338,105340,105342,105344],{"class":35,"line":36},[33,105315,875],{"class":47},[33,105317,104463],{"class":52553},[33,105319,16171],{"class":43},[33,105321,73],{"class":47},[33,105323,105324],{"class":119},"\"box_top\"",[33,105326,102359],{"class":43},[33,105328,73],{"class":47},[33,105330,105331],{"class":119},"\"0 0 0.15\"",[33,105333,102389],{"class":43},[33,105335,73],{"class":47},[33,105337,105031],{"class":119},[33,105339,80020],{"class":43},[33,105341,73],{"class":47},[33,105343,105038],{"class":119},[33,105345,102397],{"class":47},[14,105347,105348,105349,105352],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[30,105350,105351],{},"site position"," 就会比 body position 的 z 坐标更高。",[18,105354,103601],{"id":103600},[574,105356,105357,105366,105369,105376,105382,105393],{},[564,105358,103664,105359,105361,105362,103667,105364,29638],{},[30,105360,104234],{}," 的初始高度从 ",[30,105363,701],{},[30,105365,707],{},[564,105367,105368],{},"重新运行程序。",[564,105370,105371,105372,105375],{},"观察 ",[30,105373,105374],{},"box qpos"," 和最终位置是否变化。",[564,105377,105378,105379,105381],{},"故意把 ",[30,105380,104463],{}," 名称改错，确认程序能报错。",[564,105383,103664,105384,105386,105387,103667,105389,105392],{},[30,105385,102373],{}," 的颜色 ",[30,105388,103285],{},[30,105390,105391],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[564,105394,103664,105395,83783,105397,103667,105400,105403,105404,105406],{},[30,105396,104230],{},[30,105398,105399],{},"pos",[30,105401,105402],{},"0 0 0.2","，观察 ",[30,105405,105351],{}," 如何变化。",[18,105408,103706],{"id":103705},[1599,105410,105412],{"id":105411},"xml-error-schema-violation",[30,105413,105414],{},"XML Error: Schema violation",[14,105416,105417],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[1599,105419,105421,82543,105423],{"id":105420},"mj_name2id-返回-1",[30,105422,105164],{},[30,105424,105168],{},[14,105426,105427,105428,105431],{},"说明名字没有找到。检查 XML 中 ",[30,105429,105430],{},"name=\"...\"","，并确认对象类型正确。",[1599,105433,105434],{"id":105434},"物体不下落",[14,105436,103776],{},[574,105438,105439,105444,105449],{},[564,105440,105441,105442],{},"body 是否有 ",[30,105443,102873],{},[564,105445,105446,105447],{},"gravity 是否为 ",[30,105448,103842],{},[564,105450,105451,105452,105454],{},"body 是否被固定在 ",[30,105453,103094],{}," 中",[1599,105456,105457],{"id":105457},"坐标看起来不符合预期",[14,105459,105460],{},"先区分两种坐标：",[1756,105462,105463,105472],{},[1759,105464,105465],{},[1762,105466,105467,105470],{},[1765,105468,105469],{"align":24988},"坐标",[1765,105471,101953],{"align":24988},[1802,105473,105474,105484],{},[1762,105475,105476,105481],{},[1807,105477,105478,105479],{"align":24988},"XML 里的 ",[30,105480,105399],{},[1807,105482,105483],{"align":24988},"相对父 body 的局部坐标",[1762,105485,105486,105492],{},[1807,105487,105488,26231,105490],{"align":24988},[30,105489,102332],{},[30,105491,105245],{},[1807,105493,105494],{"align":24988},"仿真更新后的世界坐标",[14,105496,105497,105498,105500,105501,83792,105504,105506],{},"如果你修改了 ",[30,105499,102323],{},"，但还没调用 ",[30,105502,105503],{},"mj_forward",[30,105505,102468],{},"，世界坐标可能还没有更新。",[18,105508,103860],{"id":103859},[14,105510,105511],{},"MJCF 建模先掌握四件事：",[574,105513,105514,105519,105524,105529],{},[564,105515,105516,105518],{},[30,105517,53053],{}," 表示刚体层级。",[564,105520,105521,105523],{},[30,105522,102373],{}," 表示形状、碰撞和质量。",[564,105525,105526,105528],{},[30,105527,104209],{}," 决定 body 能不能动、怎么动。",[564,105530,105531,105533],{},[30,105532,104463],{}," 用来标记关键点，方便 Python 读取位置。",[14,105535,105536],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1544,105538,105539],{},"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":28,"searchDepth":51,"depth":51,"links":105541},[105542,105543,105544,105550,105554,105555,105556,105563],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":105545},[105546,105547,105548,105549],{"id":104213,"depth":57,"text":104213},{"id":104327,"depth":57,"text":104327},{"id":104353,"depth":57,"text":104354},{"id":104457,"depth":57,"text":104458},{"id":102505,"depth":51,"text":102506,"children":105551},[105552,105553],{"id":102825,"depth":57,"text":102825},{"id":102961,"depth":57,"text":102961},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":105557},[105558,105559,105561,105562],{"id":105411,"depth":57,"text":105414},{"id":105420,"depth":57,"text":105560},"mj_name2id 返回 -1",{"id":105434,"depth":57,"text":105434},{"id":105457,"depth":57,"text":105457},{"id":103859,"depth":51,"text":103860},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103907,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105570,"title":105571,"body":105572,"description":28,"extension":1557,"meta":107067,"navigation":159,"path":107068,"seo":107069,"stem":107070,"__hash__":107071},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105573,"toc":107039},[105574,105577,105579,105582,105585,105623,105626,105632,105635,105637,105639,105666,105668,105682,105684,105725,105727,105751,105753,105756,105765,105774,105777,105786,105794,105803,105806,105816,105819,105871,105878,105884,105892,105940,105943,105962,105965,105973,105977,105986,106019,106021,106369,106371,106383,106385,106396,106398,106401,106422,106428,106431,106456,106466,106469,106477,106480,106483,106504,106515,106517,106537,106540,106561,106570,106589,106595,106620,106623,106637,106644,106668,106671,106679,106688,106704,106716,106724,106733,106735,106738,106762,106767,106770,106792,106794,106833,106835,106842,106844,106852,106855,106858,106870,106911,106918,106929,106936,106939,106988,106991,106994,107000,107002,107007,107033,107036],[10,105575,105571],{"id":105576},"_3python-控制接口读取状态与推进仿真",[18,105578,101900],{"id":101899},[14,105580,105581],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,105583,105584],{},"你将学习:",[574,105586,105587,105592,105597,105601,105606,105617],{},[564,105588,105589],{},[30,105590,105591],{},"MjModel.from_xml_string",[564,105593,105594],{},[30,105595,105596],{},"MjData(model)",[564,105598,105599],{},[30,105600,102468],{},[564,105602,105603],{},[30,105604,105605],{},"mj_resetData",[564,105607,105608,105609,1829,105611,1829,105614],{},"读取 ",[30,105610,105283],{},[30,105612,105613],{},"qvel",[30,105615,105616],{},"ctrl",[564,105618,105619,105620],{},"使用 ",[30,105621,105622],{},"model.opt.timestep",[14,105624,105625],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[23,105627,105630],{"className":105628,"code":105629,"language":6578,"meta":28},[6576],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[30,105631,105629],{"__ignoreMap":28},[14,105633,105634],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[18,105636,102023],{"id":102022},[14,105638,102026],{},[23,105640,105642],{"className":25074,"code":105641,"language":25076,"meta":28,"style":28},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[30,105643,105644],{"__ignoreMap":28},[33,105645,105646,105648,105650,105652,105654,105657,105659,105661,105663],{"class":35,"line":36},[33,105647,25829],{"class":43},[33,105649,27568],{"class":119},[33,105651,25086],{"class":119},[33,105653,27653],{"class":76},[33,105655,105656],{"class":119}," python3",[33,105658,102051],{"class":119},[33,105660,103754],{"class":119},[33,105662,102067],{"class":119},[33,105664,105665],{"class":119}," glfw\n",[14,105667,104072],{},[23,105669,105670],{"className":25074,"code":102172,"language":25076,"meta":28,"style":28},[30,105671,105672],{"__ignoreMap":28},[33,105673,105674,105676,105678,105680],{"class":35,"line":36},[33,105675,25083],{"class":43},[33,105677,25086],{"class":119},[33,105679,102183],{"class":119},[33,105681,102186],{"class":119},[14,105683,104089],{},[23,105685,105687],{"className":25074,"code":105686,"language":25076,"meta":28,"style":28},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[30,105688,105689,105706,105715],{"__ignoreMap":28},[33,105690,105691,105693,105695,105697,105700,105702,105704],{"class":35,"line":36},[33,105692,31583],{"class":43},[33,105694,30429],{"class":119},[33,105696,26368],{"class":76},[33,105698,105699],{"class":119}," mujoco-python-api",[33,105701,102228],{"class":119},[33,105703,102231],{"class":76},[33,105705,102234],{"class":76},[33,105707,105708,105710,105712],{"class":35,"line":51},[33,105709,31583],{"class":43},[33,105711,102241],{"class":119},[33,105713,105714],{"class":119}," mujoco-python-api\n",[33,105716,105717,105719,105721,105723],{"class":35,"line":57},[33,105718,25083],{"class":43},[33,105720,25086],{"class":119},[33,105722,102183],{"class":119},[33,105724,102186],{"class":119},[14,105726,102257],{},[574,105728,105729,105736,105745],{},[564,105730,105731,102271,105733,105735],{},[30,105732,101928],{},[30,105734,101933],{}," 是官方 Python bindings 的类名。",[564,105737,105738,105739,105742,105743,29638],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[30,105740,105741],{},"mjModel"," 在 Python 中是 ",[30,105744,101962],{},[564,105746,105747,105748,29638],{},"不要使用 ",[30,105749,105750],{},"sim = mujoco_py.MjSim(...)",[18,105752,102298],{"id":102297},[14,105754,105755],{},"仿真推进核心代码:",[23,105757,105759],{"className":31631,"code":105758,"language":31633,"meta":28,"style":28},"mujoco.mj_step(model, data)\n",[30,105760,105761],{"__ignoreMap":28},[33,105762,105763],{"class":35,"line":36},[33,105764,105758],{"class":47},[14,105766,105767,105768,1829,105770,1829,105772,29638],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[30,105769,102323],{},[30,105771,102326],{},[30,105773,102320],{},[14,105775,105776],{},"重置仿真:",[23,105778,105780],{"className":31631,"code":105779,"language":31633,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\n",[30,105781,105782],{"__ignoreMap":28},[33,105783,105784],{"class":35,"line":36},[33,105785,105779],{"class":47},[14,105787,105788,105789,83792,105791,105793],{},"如果手动修改了 ",[30,105790,102323],{},[30,105792,102326],{},"，通常应调用:",[23,105795,105797],{"className":31631,"code":105796,"language":31633,"meta":28,"style":28},"mujoco.mj_forward(model, data)\n",[30,105798,105799],{"__ignoreMap":28},[33,105800,105801],{"class":35,"line":36},[33,105802,105796],{"class":47},[14,105804,105805],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[1599,105807,105809,1829,105811,1829,105813,105815],{"id":105808},"qposqvelctrl-是什么",[30,105810,105283],{},[30,105812,105613],{},[30,105814,105616],{}," 是什么",[14,105817,105818],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1756,105820,105821,105833],{},[1759,105822,105823],{},[1762,105824,105825,105828,105830],{},[1765,105826,105827],{"align":24988},"字段",[1765,105829,101953],{"align":24988},[1765,105831,105832],{"align":24988},"谁来修改",[1802,105834,105835,105847,105859],{},[1762,105836,105837,105841,105844],{},[1807,105838,105839],{"align":24988},[30,105840,102323],{},[1807,105842,105843],{"align":24988},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1807,105845,105846],{"align":24988},"MuJoCo 更新，也可以手动设置初始状态",[1762,105848,105849,105853,105856],{},[1807,105850,105851],{"align":24988},[30,105852,102326],{},[1807,105854,105855],{"align":24988},"广义速度，例如小车速度、关节角速度",[1807,105857,105858],{"align":24988},"MuJoCo 更新，也可以手动清零",[1762,105860,105861,105865,105868],{},[1807,105862,105863],{"align":24988},[30,105864,102329],{},[1807,105866,105867],{"align":24988},"actuator 的控制输入",[1807,105869,105870],{"align":24988},"主要由你的控制代码写入",[14,105872,10276,105873,102271,105875,105877],{},[30,105874,105283],{},[30,105876,105613],{}," 不一定同维。自由刚体就是典型例子：",[23,105879,105882],{"className":105880,"code":105881,"language":6578,"meta":28},[6576],"freejoint: qpos 7 维，qvel 6 维\n",[30,105883,105881],{"__ignoreMap":28},[1599,105885,105887,102271,105889,105891],{"id":105886},"mj_step-和-mj_forward-的区别",[30,105888,102468],{},[30,105890,105503],{}," 的区别",[1756,105893,105894,105907],{},[1759,105895,105896],{},[1762,105897,105898,105901,105904],{},[1765,105899,105900],{"align":24988},"函数",[1765,105902,105903],{"align":24988},"是否推进时间",[1765,105905,105906],{"align":24988},"什么时候用",[1802,105908,105909,105922],{},[1762,105910,105911,105916,105919],{},[1807,105912,105913],{"align":24988},[30,105914,105915],{},"mj_step(model, data)",[1807,105917,105918],{"align":24988},"是",[1807,105920,105921],{"align":24988},"正常仿真循环，每调用一次前进一步",[1762,105923,105924,105929,105932],{},[1807,105925,105926],{"align":24988},[30,105927,105928],{},"mj_forward(model, data)",[1807,105930,105931],{"align":24988},"否",[1807,105933,105934,105935,1829,105937,105939],{"align":24988},"手动改了 ",[30,105936,105283],{},[30,105938,105613],{}," 后，刷新派生量",[14,105941,105942],{},"例如你写：",[23,105944,105946],{"className":31631,"code":105945,"language":31633,"meta":28,"style":28},"data.qpos[2] = 2.0\n",[30,105947,105948],{"__ignoreMap":28},[33,105949,105950,105953,105955,105957,105959],{"class":35,"line":36},[33,105951,105952],{"class":47},"data.qpos[",[33,105954,707],{"class":76},[33,105956,5840],{"class":47},[33,105958,73],{"class":39},[33,105960,105961],{"class":76}," 2.0\n",[14,105963,105964],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[23,105966,105967],{"className":31631,"code":105796,"language":31633,"meta":28,"style":28},[30,105968,105969],{"__ignoreMap":28},[33,105970,105971],{"class":35,"line":36},[33,105972,105796],{"class":47},[1599,105974,105976],{"id":105975},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105978,105979,105982,105983,105985],{},[30,105980,105981],{},"mujoco.mj_resetData(model, data)"," 会把 ",[30,105984,34654],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[23,105987,105989],{"className":31631,"code":105988,"language":31633,"meta":28,"style":28},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[30,105990,105991,105995,106005,106015],{"__ignoreMap":28},[33,105992,105993],{"class":35,"line":36},[33,105994,105779],{"class":47},[33,105996,105997,106000,106002],{"class":35,"line":51},[33,105998,105999],{"class":47},"data.qpos[:] ",[33,106001,73],{"class":39},[33,106003,106004],{"class":47}," random_qpos\n",[33,106006,106007,106010,106012],{"class":35,"line":57},[33,106008,106009],{"class":47},"data.qvel[:] ",[33,106011,73],{"class":39},[33,106013,106014],{"class":76}," 0.0\n",[33,106016,106017],{"class":35,"line":64},[33,106018,105796],{"class":47},[18,106020,102506],{"id":102505},[23,106022,106024],{"className":31631,"code":106023,"language":31633,"meta":28,"style":28},"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",[30,106025,106026,106032,106042,106046,106050,106058,106063,106067,106071,106075,106080,106084,106089,106094,106099,106103,106107,106111,106115,106119,106123,106142,106149,106161,106172,106188,106204,106208,106212,106224,106236,106244,106248,106259,106263,106279,106283,106287,106296,106300,106305,106314,106318,106331,106336,106345,106349,106353,106365],{"__ignoreMap":28},[33,106027,106028,106030],{"class":35,"line":36},[33,106029,31645],{"class":39},[33,106031,102554],{"class":47},[33,106033,106034,106036,106038,106040],{"class":35,"line":51},[33,106035,31645],{"class":39},[33,106037,32633],{"class":47},[33,106039,32636],{"class":39},[33,106041,32639],{"class":47},[33,106043,106044],{"class":35,"line":57},[33,106045,160],{"emptyLinePlaceholder":159},[33,106047,106048],{"class":35,"line":64},[33,106049,160],{"emptyLinePlaceholder":159},[33,106051,106052,106054,106056],{"class":35,"line":83},[33,106053,102567],{"class":76},[33,106055,14815],{"class":39},[33,106057,102572],{"class":119},[33,106059,106060],{"class":35,"line":89},[33,106061,106062],{"class":119},"\u003Cmujoco model=\"state_api\">\n",[33,106064,106065],{"class":35,"line":98},[33,106066,102582],{"class":119},[33,106068,106069],{"class":35,"line":110},[33,106070,160],{"emptyLinePlaceholder":159},[33,106072,106073],{"class":35,"line":134},[33,106074,102591],{"class":119},[33,106076,106077],{"class":35,"line":156},[33,106078,106079],{"class":119},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[33,106081,106082],{"class":35,"line":163},[33,106083,160],{"emptyLinePlaceholder":159},[33,106085,106086],{"class":35,"line":169},[33,106087,106088],{"class":119},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[33,106090,106091],{"class":35,"line":175},[33,106092,106093],{"class":119},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[33,106095,106096],{"class":35,"line":181},[33,106097,106098],{"class":119},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[33,106100,106101],{"class":35,"line":196},[33,106102,102620],{"class":119},[33,106104,106105],{"class":35,"line":213},[33,106106,102625],{"class":119},[33,106108,106109],{"class":35,"line":228},[33,106110,102630],{"class":119},[33,106112,106113],{"class":35,"line":1345},[33,106114,96951],{"class":119},[33,106116,106117],{"class":35,"line":1350},[33,106118,160],{"emptyLinePlaceholder":159},[33,106120,106121],{"class":35,"line":1359},[33,106122,160],{"emptyLinePlaceholder":159},[33,106124,106125,106127,106130,106133,106135,106138,106140],{"class":35,"line":1364},[33,106126,33200],{"class":39},[33,106128,106129],{"class":43}," print_state",[33,106131,106132],{"class":47},"(prefix: ",[33,106134,2760],{"class":76},[33,106136,106137],{"class":47},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,106139,96939],{"class":76},[33,106141,5141],{"class":47},[33,106143,106144,106146],{"class":35,"line":1370},[33,106145,32552],{"class":76},[33,106147,106148],{"class":47},"(prefix)\n",[33,106150,106151,106153,106155,106158],{"class":35,"line":1425},[33,106152,32552],{"class":76},[33,106154,345],{"class":47},[33,106156,106157],{"class":119},"\"  timestep:\"",[33,106159,106160],{"class":47},", model.opt.timestep)\n",[33,106162,106163,106165,106167,106170],{"class":35,"line":1438},[33,106164,32552],{"class":76},[33,106166,345],{"class":47},[33,106168,106169],{"class":119},"\"  time:\"",[33,106171,102731],{"class":47},[33,106173,106174,106176,106178,106181,106184,106186],{"class":35,"line":1451},[33,106175,32552],{"class":76},[33,106177,345],{"class":47},[33,106179,106180],{"class":119},"\"  qpos:\"",[33,106182,106183],{"class":47},", np.round(data.qpos.copy(), ",[33,106185,717],{"class":76},[33,106187,31750],{"class":47},[33,106189,106190,106192,106194,106197,106200,106202],{"class":35,"line":1457},[33,106191,32552],{"class":76},[33,106193,345],{"class":47},[33,106195,106196],{"class":119},"\"  qvel:\"",[33,106198,106199],{"class":47},", np.round(data.qvel.copy(), ",[33,106201,717],{"class":76},[33,106203,31750],{"class":47},[33,106205,106206],{"class":35,"line":1466},[33,106207,160],{"emptyLinePlaceholder":159},[33,106209,106210],{"class":35,"line":1471},[33,106211,160],{"emptyLinePlaceholder":159},[33,106213,106214,106216,106218,106220,106222],{"class":35,"line":1477},[33,106215,33200],{"class":39},[33,106217,44],{"class":43},[33,106219,102651],{"class":47},[33,106221,96939],{"class":76},[33,106223,5141],{"class":47},[33,106225,106226,106228,106230,106232,106234],{"class":35,"line":1504},[33,106227,102660],{"class":47},[33,106229,73],{"class":39},[33,106231,102665],{"class":47},[33,106233,102567],{"class":76},[33,106235,884],{"class":47},[33,106237,106238,106240,106242],{"class":35,"line":1509},[33,106239,102674],{"class":47},[33,106241,73],{"class":39},[33,106243,102679],{"class":47},[33,106245,106246],{"class":35,"line":1525},[33,106247,160],{"emptyLinePlaceholder":159},[33,106249,106250,106253,106256],{"class":35,"line":1535},[33,106251,106252],{"class":47},"    print_state(",[33,106254,106255],{"class":119},"\"initial\"",[33,106257,106258],{"class":47},", model, data)\n",[33,106260,106261],{"class":35,"line":1540},[33,106262,160],{"emptyLinePlaceholder":159},[33,106264,106265,106267,106269,106271,106273,106275,106277],{"class":35,"line":4027},[33,106266,857],{"class":39},[33,106268,102754],{"class":47},[33,106270,27296],{"class":39},[33,106272,33696],{"class":76},[33,106274,345],{"class":47},[33,106276,2256],{"class":76},[33,106278,32039],{"class":47},[33,106280,106281],{"class":35,"line":4032},[33,106282,102769],{"class":47},[33,106284,106285],{"class":35,"line":9199},[33,106286,160],{"emptyLinePlaceholder":159},[33,106288,106289,106291,106294],{"class":35,"line":9223},[33,106290,106252],{"class":47},[33,106292,106293],{"class":119},"\"after 50 steps\"",[33,106295,106258],{"class":47},[33,106297,106298],{"class":35,"line":9228},[33,106299,160],{"emptyLinePlaceholder":159},[33,106301,106302],{"class":35,"line":9234},[33,106303,106304],{"class":47},"    mujoco.mj_resetData(model, data)\n",[33,106306,106307,106309,106312],{"class":35,"line":9261},[33,106308,106252],{"class":47},[33,106310,106311],{"class":119},"\"after reset\"",[33,106313,106258],{"class":47},[33,106315,106316],{"class":35,"line":9266},[33,106317,160],{"emptyLinePlaceholder":159},[33,106319,106320,106323,106325,106327,106329],{"class":35,"line":9272},[33,106321,106322],{"class":47},"    data.qpos[",[33,106324,707],{"class":76},[33,106326,5840],{"class":47},[33,106328,73],{"class":39},[33,106330,105961],{"class":76},[33,106332,106333],{"class":35,"line":9284},[33,106334,106335],{"class":47},"    mujoco.mj_forward(model, data)\n",[33,106337,106338,106340,106343],{"class":35,"line":9296},[33,106339,106252],{"class":47},[33,106341,106342],{"class":119},"\"after manual qpos edit\"",[33,106344,106258],{"class":47},[33,106346,106347],{"class":35,"line":9308},[33,106348,160],{"emptyLinePlaceholder":159},[33,106350,106351],{"class":35,"line":10967},[33,106352,160],{"emptyLinePlaceholder":159},[33,106354,106355,106357,106359,106361,106363],{"class":35,"line":10992},[33,106356,2987],{"class":39},[33,106358,32473],{"class":76},[33,106360,102812],{"class":39},[33,106362,102815],{"class":119},[33,106364,5141],{"class":47},[33,106366,106367],{"class":35,"line":11015},[33,106368,102822],{"class":47},[14,106370,104823],{},[23,106372,106374],{"className":25074,"code":106373,"language":25076,"meta":28,"style":28},"touch ch3_python_state.py\n",[30,106375,106376],{"__ignoreMap":28},[33,106377,106378,106380],{"class":35,"line":36},[33,106379,102536],{"class":43},[33,106381,106382],{"class":119}," ch3_python_state.py\n",[14,106384,103554],{},[23,106386,106388],{"className":25074,"code":106387,"language":25076,"meta":28,"style":28},"python ch3_python_state.py\n",[30,106389,106390],{"__ignoreMap":28},[33,106391,106392,106394],{"class":35,"line":36},[33,106393,31633],{"class":43},[33,106395,106382],{"class":119},[1599,106397,102825],{"id":102825},[14,106399,106400],{},"打印状态的函数：",[23,106402,106404],{"className":31631,"code":106403,"language":31633,"meta":28,"style":28},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[30,106405,106406],{"__ignoreMap":28},[33,106407,106408,106410,106412,106414,106416,106418,106420],{"class":35,"line":36},[33,106409,33200],{"class":39},[33,106411,106129],{"class":43},[33,106413,106132],{"class":47},[33,106415,2760],{"class":76},[33,106417,106137],{"class":47},[33,106419,96939],{"class":76},[33,106421,5141],{"class":47},[14,106423,106424,106425,106427],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[30,106426,34654],{}," 里发生了什么。",[14,106429,106430],{},"推进 50 步：",[23,106432,106434],{"className":31631,"code":106433,"language":31633,"meta":28,"style":28},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[30,106435,106436,106452],{"__ignoreMap":28},[33,106437,106438,106440,106442,106444,106446,106448,106450],{"class":35,"line":36},[33,106439,4435],{"class":39},[33,106441,102754],{"class":47},[33,106443,27296],{"class":39},[33,106445,33696],{"class":76},[33,106447,345],{"class":47},[33,106449,2256],{"class":76},[33,106451,32039],{"class":47},[33,106453,106454],{"class":35,"line":51},[33,106455,102952],{"class":47},[14,106457,106458,106459,106462,106463,106465],{},"由于 ",[30,106460,106461],{},"timestep=0.01","，所以 50 步后时间约为 ",[30,106464,36582],{}," 秒。",[14,106467,106468],{},"重置：",[23,106470,106471],{"className":31631,"code":105779,"language":31633,"meta":28,"style":28},[30,106472,106473],{"__ignoreMap":28},[33,106474,106475],{"class":35,"line":36},[33,106476,105779],{"class":47},[14,106478,106479],{},"这会把时间、位置、速度恢复到初始状态。",[14,106481,106482],{},"手动改高度：",[23,106484,106486],{"className":31631,"code":106485,"language":31633,"meta":28,"style":28},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[30,106487,106488,106500],{"__ignoreMap":28},[33,106489,106490,106492,106494,106496,106498],{"class":35,"line":36},[33,106491,105952],{"class":47},[33,106493,707],{"class":76},[33,106495,5840],{"class":47},[33,106497,73],{"class":39},[33,106499,105961],{"class":76},[33,106501,106502],{"class":35,"line":51},[33,106503,105796],{"class":47},[14,106505,106506,106507,106510,106511,106514],{},"这个例子里 ",[30,106508,106509],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[30,106512,106513],{},"2.0"," 表示把小球放到更高的位置。",[1599,106516,102961],{"id":102961},[23,106518,106519],{"className":31631,"code":106403,"language":31633,"meta":28,"style":28},[30,106520,106521],{"__ignoreMap":28},[33,106522,106523,106525,106527,106529,106531,106533,106535],{"class":35,"line":36},[33,106524,33200],{"class":39},[33,106526,106129],{"class":43},[33,106528,106132],{"class":47},[33,106530,2760],{"class":76},[33,106532,106137],{"class":47},[33,106534,96939],{"class":76},[33,106536,5141],{"class":47},[14,106538,106539],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[574,106541,106542,106551,106556],{},[564,106543,106544,106547,106548,106550],{},[30,106545,106546],{},"prefix","：一段文字，比如 ",[30,106549,106255],{},"，用来说明现在打印的是哪个阶段。",[564,106552,106553,106555],{},[30,106554,103338],{},"：MuJoCo 模型。",[564,106557,106558,106560],{},[30,106559,34654],{},"：MuJoCo 当前状态。",[14,106562,106563,1829,106566,106569],{},[30,106564,106565],{},"prefix: str",[30,106567,106568],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[23,106571,106573],{"className":31631,"code":106572,"language":31633,"meta":28,"style":28},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[30,106574,106575],{"__ignoreMap":28},[33,106576,106577,106579,106581,106583,106585,106587],{"class":35,"line":36},[33,106578,31668],{"class":76},[33,106580,345],{"class":47},[33,106582,106180],{"class":119},[33,106584,106183],{"class":47},[33,106586,717],{"class":76},[33,106588,31750],{"class":47},[14,106590,106591,106594],{},[30,106592,106593],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[23,106596,106598],{"className":31631,"code":106597,"language":31633,"meta":28,"style":28},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[30,106599,106600,106612],{"__ignoreMap":28},[33,106601,106602,106604,106606,106608,106610],{"class":35,"line":36},[33,106603,102887],{"class":47},[33,106605,73],{"class":39},[33,106607,102665],{"class":47},[33,106609,102567],{"class":76},[33,106611,884],{"class":47},[33,106613,106614,106616,106618],{"class":35,"line":51},[33,106615,102911],{"class":47},[33,106617,73],{"class":39},[33,106619,102679],{"class":47},[14,106621,106622],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[23,106624,106626],{"className":31631,"code":106625,"language":31633,"meta":28,"style":28},"print_state(\"initial\", model, data)\n",[30,106627,106628],{"__ignoreMap":28},[33,106629,106630,106633,106635],{"class":35,"line":36},[33,106631,106632],{"class":47},"print_state(",[33,106634,106255],{"class":119},[33,106636,106258],{"class":47},[14,106638,106639,106640,106643],{},"调用刚才定义的 ",[30,106641,106642],{},"print_state"," 函数，打印初始状态。",[23,106645,106646],{"className":31631,"code":106433,"language":31633,"meta":28,"style":28},[30,106647,106648,106664],{"__ignoreMap":28},[33,106649,106650,106652,106654,106656,106658,106660,106662],{"class":35,"line":36},[33,106651,4435],{"class":39},[33,106653,102754],{"class":47},[33,106655,27296],{"class":39},[33,106657,33696],{"class":76},[33,106659,345],{"class":47},[33,106661,2256],{"class":76},[33,106663,32039],{"class":47},[33,106665,106666],{"class":35,"line":51},[33,106667,102952],{"class":47},[14,106669,106670],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[23,106672,106673],{"className":31631,"code":105779,"language":31633,"meta":28,"style":28},[30,106674,106675],{"__ignoreMap":28},[33,106676,106677],{"class":35,"line":36},[33,106678,105779],{"class":47},[14,106680,106681,106682,106684,106685,106687],{},"重置 ",[30,106683,34654],{},"。注意它不会重新创建 ",[30,106686,103338],{},"，因为模型结构没有变，只是状态回到初始值。",[23,106689,106690],{"className":31631,"code":105945,"language":31633,"meta":28,"style":28},[30,106691,106692],{"__ignoreMap":28},[33,106693,106694,106696,106698,106700,106702],{"class":35,"line":36},[33,106695,105952],{"class":47},[33,106697,707],{"class":76},[33,106699,5840],{"class":47},[33,106701,73],{"class":39},[33,106703,105961],{"class":76},[14,106705,106706,106707,1829,106710,1829,106713,106715],{},"这行是“手动改状态”。在 freejoint 中，",[30,106708,106709],{},"qpos[0]",[30,106711,106712],{},"qpos[1]",[30,106714,106509],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[23,106717,106718],{"className":31631,"code":105796,"language":31633,"meta":28,"style":28},[30,106719,106720],{"__ignoreMap":28},[33,106721,106722],{"class":35,"line":36},[33,106723,105796],{"class":47},[14,106725,106726,106727,106729,106730,106732],{},"手动改完 ",[30,106728,105283],{}," 后，调用 ",[30,106731,105503],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[18,106734,103569],{"id":103568},[14,106736,106737],{},"你会看到:",[574,106739,106740,106745,106750,106753],{},[564,106741,106742,106743],{},"初始时间为 ",[30,106744,766],{},[564,106746,106747,106748],{},"50 步后时间约为 ",[30,106749,36582],{},[564,106751,106752],{},"reset 后状态恢复",[564,106754,106755,106756,106759,106760],{},"手动修改 ",[30,106757,106758],{},"data.qpos[2]"," 后，小球高度变为 ",[30,106761,106513],{},[14,106763,106764,106766],{},[30,106765,106509],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,106768,106769],{},"输出里可以重点看三件事：",[574,106771,106772,106780,106785],{},[564,106773,106774,106776,106777,106779],{},[30,106775,3807],{}," 是否随着 ",[30,106778,102468],{}," 增加。",[564,106781,106782,106784],{},[30,106783,105283],{}," 的 z 坐标是否因为下落而变化。",[564,106786,106787,106789,106790,29638],{},[30,106788,105605],{}," 后时间是否回到 ",[30,106791,766],{},[18,106793,103601],{"id":103600},[574,106795,106796,106802,106808,106814,106817,106826],{},[564,106797,106798,106799,29638],{},"修改 timestep 为 ",[30,106800,106801],{},"0.005",[564,106803,106804,106805,29638],{},"重新运行，检查 50 步后时间是否约为 ",[30,106806,106807],{},"0.25",[564,106809,106810,106811,29638],{},"修改重力为 ",[30,106812,106813],{},"0 0 -1.0",[564,106815,106816],{},"观察小球下降速度是否变慢。",[564,106818,103664,106819,103667,106822,106825],{},[30,106820,106821],{},"data.qpos[2] = 2.0",[30,106823,106824],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[564,106827,106828,106829,106832],{},"注释掉 ",[30,106830,106831],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[18,106834,103706],{"id":103705},[1599,106836,106838,106839,106841],{"id":106837},"修改-dataqpos-后位置没有更新","修改 ",[30,106840,102323],{}," 后位置没有更新",[14,106843,103715],{},[23,106845,106846],{"className":31631,"code":105796,"language":31633,"meta":28,"style":28},[30,106847,106848],{"__ignoreMap":28},[33,106849,106850],{"class":35,"line":36},[33,106851,105796],{"class":47},[1599,106853,106854],{"id":106854},"数组维度看不懂",[14,106856,106857],{},"打印模型维度:",[23,106859,106861],{"className":31631,"code":106860,"language":31633,"meta":28,"style":28},"print(model.nq, model.nv, model.nu)\n",[30,106862,106863],{"__ignoreMap":28},[33,106864,106865,106867],{"class":35,"line":36},[33,106866,31668],{"class":76},[33,106868,106869],{"class":47},"(model.nq, model.nv, model.nu)\n",[1756,106871,106872,106880],{},[1759,106873,106874],{},[1762,106875,106876,106878],{},[1765,106877,105827],{"align":24988},[1765,106879,101953],{"align":24988},[1802,106881,106882,106892,106902],{},[1762,106883,106884,106889],{},[1807,106885,106886],{"align":24988},[30,106887,106888],{},"nq",[1807,106890,106891],{"align":24988},"位置变量数量",[1762,106893,106894,106899],{},[1807,106895,106896],{"align":24988},[30,106897,106898],{},"nv",[1807,106900,106901],{"align":24988},"速度变量数量",[1762,106903,106904,106908],{},[1807,106905,106906],{"align":24988},[30,106907,103415],{},[1807,106909,106910],{"align":24988},"控制输入数量",[1599,106912,106914,106915,106917],{"id":106913},"误以为-qpos-一定等于关节数","误以为 ",[30,106916,105283],{}," 一定等于关节数",[14,106919,106920,106921,83783,106923,106925,106926,106928],{},"不是。例如 ",[30,106922,102873],{},[30,106924,105283],{}," 是 7 维，但 ",[30,106927,105613],{}," 是 6 维。",[1599,106930,106932,106933,106935],{"id":106931},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[30,106934,105283],{}," 的第几位",[14,106937,106938],{},"初学时可以先打印：",[23,106940,106942],{"className":31631,"code":106941,"language":31633,"meta":28,"style":28},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[30,106943,106944,106954,106964,106976],{"__ignoreMap":28},[33,106945,106946,106948,106950,106952],{"class":35,"line":36},[33,106947,31668],{"class":76},[33,106949,345],{"class":47},[33,106951,102692],{"class":119},[33,106953,102695],{"class":47},[33,106955,106956,106958,106960,106962],{"class":35,"line":51},[33,106957,31668],{"class":76},[33,106959,345],{"class":47},[33,106961,102704],{"class":119},[33,106963,102707],{"class":47},[33,106965,106966,106968,106970,106973],{"class":35,"line":57},[33,106967,31668],{"class":76},[33,106969,345],{"class":47},[33,106971,106972],{"class":119},"\"qpos:\"",[33,106974,106975],{"class":47},", data.qpos)\n",[33,106977,106978,106980,106982,106985],{"class":35,"line":64},[33,106979,31668],{"class":76},[33,106981,345],{"class":47},[33,106983,106984],{"class":119},"\"qvel:\"",[33,106986,106987],{"class":47},", data.qvel)\n",[14,106989,106990],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[1599,106992,106993],{"id":106993},"仿真结果每次都一样",[14,106995,106996,106997,106999],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[30,106998,105283],{},"、目标点或控制输入。",[18,107001,103860],{"id":103859},[14,107003,107004,107005,25871],{},"Python 控制 MuJoCo 的核心就是读写 ",[30,107006,34654],{},[574,107008,107009,107017,107022,107027],{},[564,107010,107011,107012,102271,107014,107016],{},"用 ",[30,107013,102323],{},[30,107015,102326],{}," 读取状态。",[564,107018,107011,107019,107021],{},[30,107020,102329],{}," 写入控制。",[564,107023,107011,107024,107026],{},[30,107025,102468],{}," 推进时间。",[564,107028,107029,107030,107032],{},"手动改状态后用 ",[30,107031,105503],{}," 刷新派生量。",[14,107034,107035],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1544,107037,107038],{},"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":28,"searchDepth":51,"depth":51,"links":107040},[107041,107042,107043,107050,107054,107055,107056,107066],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":107044},[107045,107047,107049],{"id":105808,"depth":57,"text":107046},"qpos、qvel、ctrl 是什么",{"id":105886,"depth":57,"text":107048},"mj_step 和 mj_forward 的区别",{"id":105975,"depth":57,"text":105976},{"id":102505,"depth":51,"text":102506,"children":107051},[107052,107053],{"id":102825,"depth":57,"text":102825},{"id":102961,"depth":57,"text":102961},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":107057},[107058,107060,107061,107063,107065],{"id":106837,"depth":57,"text":107059},"修改 data.qpos 后位置没有更新",{"id":106854,"depth":57,"text":106854},{"id":106913,"depth":57,"text":107062},"误以为 qpos 一定等于关节数",{"id":106931,"depth":57,"text":107064},"不知道某个元素在 qpos 的第几位",{"id":106993,"depth":57,"text":106993},{"id":103859,"depth":51,"text":103860},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105571,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107073,"title":107074,"body":107075,"description":28,"extension":1557,"meta":108765,"navigation":159,"path":108766,"seo":108767,"stem":108768,"__hash__":108769},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107076,"toc":108741},[107077,107080,107082,107085,107087,107112,107115,107134,107137,107139,107141,107165,107167,107181,107183,107224,107226,107250,107252,107255,107289,107291,107304,107307,107375,107384,107388,107391,107425,107431,107434,107438,107477,107480,107500,107504,107547,107549,107578,107581,107587,107590,107592,107986,107988,108000,108002,108013,108015,108018,108047,108055,108058,108093,108096,108098,108106,108109,108111,108122,108132,108152,108155,108191,108203,108251,108270,108312,108325,108353,108358,108379,108389,108407,108410,108444,108447,108467,108470,108489,108495,108497,108500,108506,108512,108522,108525,108531,108540,108542,108588,108590,108596,108602,108605,108608,108628,108631,108637,108643,108645,108668,108671,108674,108683,108686,108724,108726,108729,108735,108738],[10,107078,107074],{"id":107079},"_4关节actuator-与力控制",[18,107081,101900],{"id":101899},[14,107083,107084],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,107086,105584],{},[574,107088,107089,107095,107100,107104,107109],{},[564,107090,107091,107094],{},[30,107092,107093],{},"hinge"," 关节",[564,107096,107097],{},[30,107098,107099],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[564,107101,107102],{},[30,107103,102329],{},[564,107105,107106],{},[30,107107,107108],{},"ctrlrange",[564,107110,107111],{},"读取关节角和角速度",[14,107113,107114],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[23,107116,107118],{"className":31631,"code":107117,"language":31633,"meta":28,"style":28},"data.ctrl[0] = ...\n",[30,107119,107120],{"__ignoreMap":28},[33,107121,107122,107125,107127,107129,107131],{"class":35,"line":36},[33,107123,107124],{"class":47},"data.ctrl[",[33,107126,766],{"class":76},[33,107128,5840],{"class":47},[33,107130,73],{"class":39},[33,107132,107133],{"class":76}," ...\n",[14,107135,107136],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[18,107138,102023],{"id":102022},[14,107140,102026],{},[23,107142,107143],{"className":25074,"code":105641,"language":25076,"meta":28,"style":28},[30,107144,107145],{"__ignoreMap":28},[33,107146,107147,107149,107151,107153,107155,107157,107159,107161,107163],{"class":35,"line":36},[33,107148,25829],{"class":43},[33,107150,27568],{"class":119},[33,107152,25086],{"class":119},[33,107154,27653],{"class":76},[33,107156,105656],{"class":119},[33,107158,102051],{"class":119},[33,107160,103754],{"class":119},[33,107162,102067],{"class":119},[33,107164,105665],{"class":119},[14,107166,104072],{},[23,107168,107169],{"className":25074,"code":102172,"language":25076,"meta":28,"style":28},[30,107170,107171],{"__ignoreMap":28},[33,107172,107173,107175,107177,107179],{"class":35,"line":36},[33,107174,25083],{"class":43},[33,107176,25086],{"class":119},[33,107178,102183],{"class":119},[33,107180,102186],{"class":119},[14,107182,104089],{},[23,107184,107186],{"className":25074,"code":107185,"language":25076,"meta":28,"style":28},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[30,107187,107188,107205,107214],{"__ignoreMap":28},[33,107189,107190,107192,107194,107196,107199,107201,107203],{"class":35,"line":36},[33,107191,31583],{"class":43},[33,107193,30429],{"class":119},[33,107195,26368],{"class":76},[33,107197,107198],{"class":119}," mujoco-control",[33,107200,102228],{"class":119},[33,107202,102231],{"class":76},[33,107204,102234],{"class":76},[33,107206,107207,107209,107211],{"class":35,"line":51},[33,107208,31583],{"class":43},[33,107210,102241],{"class":119},[33,107212,107213],{"class":119}," mujoco-control\n",[33,107215,107216,107218,107220,107222],{"class":35,"line":57},[33,107217,25083],{"class":43},[33,107219,25086],{"class":119},[33,107221,102183],{"class":119},[33,107223,102186],{"class":119},[14,107225,102257],{},[574,107227,107228,107234,107241,107247],{},[564,107229,107230,107233],{},[30,107231,107232],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[564,107235,107236,107238,107239,29638],{},[30,107237,102329],{}," 长度等于 ",[30,107240,103411],{},[564,107242,83475,107243,107246],{},[30,107244,107245],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[564,107248,107249],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[18,107251,102298],{"id":102297},[14,107253,107254],{},"关节决定 body 如何运动:",[23,107256,107258],{"className":54320,"code":107257,"language":54322,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,107259,107260],{"__ignoreMap":28},[33,107261,107262,107264,107266,107268,107270,107273,107275,107277,107279,107282,107284,107287],{"class":35,"line":36},[33,107263,875],{"class":47},[33,107265,104209],{"class":52553},[33,107267,16171],{"class":43},[33,107269,73],{"class":47},[33,107271,107272],{"class":119},"\"hinge\"",[33,107274,55077],{"class":43},[33,107276,73],{"class":47},[33,107278,107272],{"class":119},[33,107280,107281],{"class":43}," axis",[33,107283,73],{"class":47},[33,107285,107286],{"class":119},"\"0 1 0\"",[33,107288,102397],{"class":47},[14,107290,104305],{},[574,107292,107293,107298,107301],{},[564,107294,107295,107296],{},"名字是 ",[30,107297,107093],{},[564,107299,107300],{},"类型是旋转关节",[564,107302,107303],{},"绕 y 轴旋转",[14,107305,107306],{},"actuator 决定如何施加控制:",[23,107308,107310],{"className":54320,"code":107309,"language":54322,"meta":28,"style":28},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[30,107311,107312,107321,107367],{"__ignoreMap":28},[33,107313,107314,107316,107319],{"class":35,"line":36},[33,107315,875],{"class":47},[33,107317,107318],{"class":52553},"actuator",[33,107320,52560],{"class":47},[33,107322,107323,107325,107328,107330,107332,107335,107338,107340,107342,107345,107347,107349,107352,107354,107357,107360,107362,107365],{"class":35,"line":51},[33,107324,53397],{"class":47},[33,107326,107327],{"class":52553},"motor",[33,107329,16171],{"class":43},[33,107331,73],{"class":47},[33,107333,107334],{"class":119},"\"hinge_motor\"",[33,107336,107337],{"class":43}," joint",[33,107339,73],{"class":47},[33,107341,107272],{"class":119},[33,107343,107344],{"class":43}," gear",[33,107346,73],{"class":47},[33,107348,5080],{"class":119},[33,107350,107351],{"class":43}," ctrlrange",[33,107353,73],{"class":47},[33,107355,107356],{"class":119},"\"-2 2\"",[33,107358,107359],{"class":43}," ctrllimited",[33,107361,73],{"class":47},[33,107363,107364],{"class":119},"\"true\"",[33,107366,102397],{"class":47},[33,107368,107369,107371,107373],{"class":35,"line":57},[33,107370,53038],{"class":47},[33,107372,107318],{"class":52553},[33,107374,52560],{"class":47},[14,107376,107377,107380,107381,29638],{},[30,107378,107379],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[30,107382,107383],{},"[-2, 2]",[1599,107385,107387],{"id":107386},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,107389,107390],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1756,107392,107393,107403],{},[1759,107394,107395],{},[1762,107396,107397,107399,107401],{},[1765,107398,27006],{"align":24988},[1765,107400,103949],{"align":24988},[1765,107402,101987],{"align":24988},[1802,107404,107405,107415],{},[1762,107406,107407,107409,107412],{},[1807,107408,104209],{"align":24988},[1807,107410,107411],{"align":24988},"定义能怎么动",[1807,107413,107414],{"align":24988},"门轴允许门旋转",[1762,107416,107417,107419,107422],{},[1807,107418,107318],{"align":24988},[1807,107420,107421],{"align":24988},"定义怎么施力或控制",[1807,107423,107424],{"align":24988},"人推门、马达带动门",[14,107426,107427,107428,107430],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[30,107429,102329],{}," 主动控制它。",[14,107432,107433],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[1599,107435,107437],{"id":107436},"hinge-joint","hinge joint",[23,107439,107441],{"className":54320,"code":107440,"language":54322,"meta":28,"style":28},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[30,107442,107443],{"__ignoreMap":28},[33,107444,107445,107447,107449,107451,107453,107455,107457,107459,107461,107463,107465,107467,107470,107472,107475],{"class":35,"line":36},[33,107446,875],{"class":47},[33,107448,104209],{"class":52553},[33,107450,16171],{"class":43},[33,107452,73],{"class":47},[33,107454,107272],{"class":119},[33,107456,55077],{"class":43},[33,107458,73],{"class":47},[33,107460,107272],{"class":119},[33,107462,107281],{"class":43},[33,107464,73],{"class":47},[33,107466,107286],{"class":119},[33,107468,107469],{"class":43}," damping",[33,107471,73],{"class":47},[33,107473,107474],{"class":119},"\"0.1\"",[33,107476,102397],{"class":47},[14,107478,107479],{},"含义：",[574,107481,107482,107488,107494],{},[564,107483,107484,107487],{},[30,107485,107486],{},"type=\"hinge\"","：只能绕一个轴旋转。",[564,107489,107490,107493],{},[30,107491,107492],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[564,107495,107496,107499],{},[30,107497,107498],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[1599,107501,107503],{"id":107502},"motor-actuator","motor actuator",[23,107505,107507],{"className":54320,"code":107506,"language":54322,"meta":28,"style":28},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[30,107508,107509],{"__ignoreMap":28},[33,107510,107511,107513,107515,107517,107519,107521,107523,107525,107527,107529,107531,107533,107535,107537,107539,107541,107543,107545],{"class":35,"line":36},[33,107512,875],{"class":47},[33,107514,107327],{"class":52553},[33,107516,16171],{"class":43},[33,107518,73],{"class":47},[33,107520,107334],{"class":119},[33,107522,107337],{"class":43},[33,107524,73],{"class":47},[33,107526,107272],{"class":119},[33,107528,107344],{"class":43},[33,107530,73],{"class":47},[33,107532,5080],{"class":119},[33,107534,107351],{"class":43},[33,107536,73],{"class":47},[33,107538,107356],{"class":119},[33,107540,107359],{"class":43},[33,107542,73],{"class":47},[33,107544,107364],{"class":119},[33,107546,102397],{"class":47},[14,107548,107479],{},[574,107550,107551,107560,107566,107572],{},[564,107552,107553,107556,107557,107559],{},[30,107554,107555],{},"joint=\"hinge\"","：这个电机作用在名为 ",[30,107558,107093],{}," 的关节上。",[564,107561,107562,107565],{},[30,107563,107564],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[564,107567,107568,107571],{},[30,107569,107570],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[564,107573,107574,107577],{},[30,107575,107576],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,107579,107580],{},"简单理解：",[23,107582,107585],{"className":107583,"code":107584,"language":6578,"meta":28},[6576],"实际施加效果 ≈ data.ctrl[0] * gear\n",[30,107586,107584],{"__ignoreMap":28},[14,107588,107589],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[18,107591,102506],{"id":102505},[23,107593,107595],{"className":31631,"code":107594,"language":31633,"meta":28,"style":28},"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",[30,107596,107597,107604,107608,107614,107624,107628,107632,107640,107645,107650,107654,107658,107663,107668,107672,107677,107682,107687,107692,107696,107700,107704,107709,107714,107719,107723,107727,107731,107735,107747,107759,107767,107771,107781,107791,107801,107805,107818,107831,107835,107852,107866,107901,107905,107909,107920,107935,107950,107962,107966,107970,107982],{"__ignoreMap":28},[33,107598,107599,107601],{"class":35,"line":36},[33,107600,31645],{"class":39},[33,107602,107603],{"class":47}," math\n",[33,107605,107606],{"class":35,"line":51},[33,107607,160],{"emptyLinePlaceholder":159},[33,107609,107610,107612],{"class":35,"line":57},[33,107611,31645],{"class":39},[33,107613,102554],{"class":47},[33,107615,107616,107618,107620,107622],{"class":35,"line":64},[33,107617,31645],{"class":39},[33,107619,32633],{"class":47},[33,107621,32636],{"class":39},[33,107623,32639],{"class":47},[33,107625,107626],{"class":35,"line":83},[33,107627,160],{"emptyLinePlaceholder":159},[33,107629,107630],{"class":35,"line":89},[33,107631,160],{"emptyLinePlaceholder":159},[33,107633,107634,107636,107638],{"class":35,"line":98},[33,107635,102567],{"class":76},[33,107637,14815],{"class":39},[33,107639,102572],{"class":119},[33,107641,107642],{"class":35,"line":110},[33,107643,107644],{"class":119},"\u003Cmujoco model=\"one_link_motor\">\n",[33,107646,107647],{"class":35,"line":134},[33,107648,107649],{"class":119},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[33,107651,107652],{"class":35,"line":156},[33,107653,160],{"emptyLinePlaceholder":159},[33,107655,107656],{"class":35,"line":163},[33,107657,102591],{"class":119},[33,107659,107660],{"class":35,"line":169},[33,107661,107662],{"class":119},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[33,107664,107665],{"class":35,"line":175},[33,107666,107667],{"class":119},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[33,107669,107670],{"class":35,"line":181},[33,107671,160],{"emptyLinePlaceholder":159},[33,107673,107674],{"class":35,"line":196},[33,107675,107676],{"class":119},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[33,107678,107679],{"class":35,"line":213},[33,107680,107681],{"class":119},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,107683,107684],{"class":35,"line":228},[33,107685,107686],{"class":119},"        \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",[33,107688,107689],{"class":35,"line":1345},[33,107690,107691],{"class":119},"      \u003C\u002Fbody>\n",[33,107693,107694],{"class":35,"line":1350},[33,107695,102620],{"class":119},[33,107697,107698],{"class":35,"line":1359},[33,107699,102625],{"class":119},[33,107701,107702],{"class":35,"line":1364},[33,107703,160],{"emptyLinePlaceholder":159},[33,107705,107706],{"class":35,"line":1370},[33,107707,107708],{"class":119},"  \u003Cactuator>\n",[33,107710,107711],{"class":35,"line":1425},[33,107712,107713],{"class":119},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,107715,107716],{"class":35,"line":1438},[33,107717,107718],{"class":119},"  \u003C\u002Factuator>\n",[33,107720,107721],{"class":35,"line":1451},[33,107722,102630],{"class":119},[33,107724,107725],{"class":35,"line":1457},[33,107726,96951],{"class":119},[33,107728,107729],{"class":35,"line":1466},[33,107730,160],{"emptyLinePlaceholder":159},[33,107732,107733],{"class":35,"line":1471},[33,107734,160],{"emptyLinePlaceholder":159},[33,107736,107737,107739,107741,107743,107745],{"class":35,"line":1477},[33,107738,33200],{"class":39},[33,107740,44],{"class":43},[33,107742,102651],{"class":47},[33,107744,96939],{"class":76},[33,107746,5141],{"class":47},[33,107748,107749,107751,107753,107755,107757],{"class":35,"line":1504},[33,107750,102660],{"class":47},[33,107752,73],{"class":39},[33,107754,102665],{"class":47},[33,107756,102567],{"class":76},[33,107758,884],{"class":47},[33,107760,107761,107763,107765],{"class":35,"line":1509},[33,107762,102674],{"class":47},[33,107764,73],{"class":39},[33,107766,102679],{"class":47},[33,107768,107769],{"class":35,"line":1525},[33,107770,160],{"emptyLinePlaceholder":159},[33,107772,107773,107775,107777,107779],{"class":35,"line":1535},[33,107774,32552],{"class":76},[33,107776,345],{"class":47},[33,107778,102692],{"class":119},[33,107780,102695],{"class":47},[33,107782,107783,107785,107787,107789],{"class":35,"line":1540},[33,107784,32552],{"class":76},[33,107786,345],{"class":47},[33,107788,102704],{"class":119},[33,107790,102707],{"class":47},[33,107792,107793,107795,107797,107799],{"class":35,"line":4027},[33,107794,32552],{"class":76},[33,107796,345],{"class":47},[33,107798,102716],{"class":119},[33,107800,102719],{"class":47},[33,107802,107803],{"class":35,"line":4032},[33,107804,160],{"emptyLinePlaceholder":159},[33,107806,107807,107809,107812,107814,107816],{"class":35,"line":9199},[33,107808,4509],{"class":39},[33,107810,107811],{"class":47}," model.nu ",[33,107813,22199],{"class":39},[33,107815,26371],{"class":76},[33,107817,5141],{"class":47},[33,107819,107820,107822,107824,107826,107829],{"class":35,"line":9223},[33,107821,104685],{"class":39},[33,107823,104688],{"class":76},[33,107825,345],{"class":47},[33,107827,107828],{"class":119},"\"expected exactly one actuator\"",[33,107830,884],{"class":47},[33,107832,107833],{"class":35,"line":9228},[33,107834,160],{"emptyLinePlaceholder":159},[33,107836,107837,107839,107841,107843,107845,107847,107850],{"class":35,"line":9234},[33,107838,857],{"class":39},[33,107840,32869],{"class":47},[33,107842,27296],{"class":39},[33,107844,33696],{"class":76},[33,107846,345],{"class":47},[33,107848,107849],{"class":76},"2000",[33,107851,32039],{"class":47},[33,107853,107854,107857,107859,107861,107863],{"class":35,"line":9261},[33,107855,107856],{"class":47},"        t ",[33,107858,73],{"class":39},[33,107860,32869],{"class":47},[33,107862,2057],{"class":39},[33,107864,107865],{"class":47}," model.opt.timestep\n",[33,107867,107868,107871,107873,107875,107877,107880,107882,107885,107887,107889,107892,107894,107896,107898],{"class":35,"line":9266},[33,107869,107870],{"class":47},"        data.ctrl[",[33,107872,766],{"class":76},[33,107874,5840],{"class":47},[33,107876,73],{"class":39},[33,107878,107879],{"class":76}," 1.5",[33,107881,303],{"class":39},[33,107883,107884],{"class":47}," math.sin(",[33,107886,106513],{"class":76},[33,107888,303],{"class":39},[33,107890,107891],{"class":47}," math.pi ",[33,107893,2057],{"class":39},[33,107895,63120],{"class":76},[33,107897,303],{"class":39},[33,107899,107900],{"class":47}," t)\n",[33,107902,107903],{"class":35,"line":9272},[33,107904,102769],{"class":47},[33,107906,107907],{"class":35,"line":9284},[33,107908,160],{"emptyLinePlaceholder":159},[33,107910,107911,107913,107915,107918],{"class":35,"line":9296},[33,107912,32552],{"class":76},[33,107914,345],{"class":47},[33,107916,107917],{"class":119},"\"time:\"",[33,107919,102731],{"class":47},[33,107921,107922,107924,107926,107929,107931,107933],{"class":35,"line":9308},[33,107923,32552],{"class":76},[33,107925,345],{"class":47},[33,107927,107928],{"class":119},"\"joint qpos:\"",[33,107930,106183],{"class":47},[33,107932,717],{"class":76},[33,107934,31750],{"class":47},[33,107936,107937,107939,107941,107944,107946,107948],{"class":35,"line":10967},[33,107938,32552],{"class":76},[33,107940,345],{"class":47},[33,107942,107943],{"class":119},"\"joint qvel:\"",[33,107945,106199],{"class":47},[33,107947,717],{"class":76},[33,107949,31750],{"class":47},[33,107951,107952,107954,107956,107959],{"class":35,"line":10992},[33,107953,32552],{"class":76},[33,107955,345],{"class":47},[33,107957,107958],{"class":119},"\"last ctrl:\"",[33,107960,107961],{"class":47},", data.ctrl.copy())\n",[33,107963,107964],{"class":35,"line":11015},[33,107965,160],{"emptyLinePlaceholder":159},[33,107967,107968],{"class":35,"line":11039},[33,107969,160],{"emptyLinePlaceholder":159},[33,107971,107972,107974,107976,107978,107980],{"class":35,"line":11044},[33,107973,2987],{"class":39},[33,107975,32473],{"class":76},[33,107977,102812],{"class":39},[33,107979,102815],{"class":119},[33,107981,5141],{"class":47},[33,107983,107984],{"class":35,"line":11049},[33,107985,102822],{"class":47},[14,107987,104823],{},[23,107989,107991],{"className":25074,"code":107990,"language":25076,"meta":28,"style":28},"touch ch4_joint_motor.py\n",[30,107992,107993],{"__ignoreMap":28},[33,107994,107995,107997],{"class":35,"line":36},[33,107996,102536],{"class":43},[33,107998,107999],{"class":119}," ch4_joint_motor.py\n",[14,108001,103554],{},[23,108003,108005],{"className":25074,"code":108004,"language":25076,"meta":28,"style":28},"python ch4_joint_motor.py\n",[30,108006,108007],{"__ignoreMap":28},[33,108008,108009,108011],{"class":35,"line":36},[33,108010,31633],{"class":43},[33,108012,107999],{"class":119},[1599,108014,102825],{"id":102825},[14,108016,108017],{},"检查 actuator 数量：",[23,108019,108021],{"className":31631,"code":108020,"language":31633,"meta":28,"style":28},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[30,108022,108023,108035],{"__ignoreMap":28},[33,108024,108025,108027,108029,108031,108033],{"class":35,"line":36},[33,108026,2987],{"class":39},[33,108028,107811],{"class":47},[33,108030,22199],{"class":39},[33,108032,26371],{"class":76},[33,108034,5141],{"class":47},[33,108036,108037,108039,108041,108043,108045],{"class":35,"line":51},[33,108038,105148],{"class":39},[33,108040,104688],{"class":76},[33,108042,345],{"class":47},[33,108044,107828],{"class":119},[33,108046,884],{"class":47},[14,108048,108049,108051,108052,108054],{},[30,108050,103411],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[30,108053,102329],{}," 长度应该是 1。",[14,108056,108057],{},"产生正弦控制信号：",[23,108059,108061],{"className":31631,"code":108060,"language":31633,"meta":28,"style":28},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[30,108062,108063],{"__ignoreMap":28},[33,108064,108065,108067,108069,108071,108073,108075,108077,108079,108081,108083,108085,108087,108089,108091],{"class":35,"line":36},[33,108066,107124],{"class":47},[33,108068,766],{"class":76},[33,108070,5840],{"class":47},[33,108072,73],{"class":39},[33,108074,107879],{"class":76},[33,108076,303],{"class":39},[33,108078,107884],{"class":47},[33,108080,106513],{"class":76},[33,108082,303],{"class":39},[33,108084,107891],{"class":47},[33,108086,2057],{"class":39},[33,108088,63120],{"class":76},[33,108090,303],{"class":39},[33,108092,107900],{"class":47},[14,108094,108095],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,108097,102926],{},[23,108099,108100],{"className":31631,"code":105758,"language":31633,"meta":28,"style":28},[30,108101,108102],{"__ignoreMap":28},[33,108103,108104],{"class":35,"line":36},[33,108105,105758],{"class":47},[14,108107,108108],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[1599,108110,102961],{"id":102961},[23,108112,108114],{"className":31631,"code":108113,"language":31633,"meta":28,"style":28},"import math\n",[30,108115,108116],{"__ignoreMap":28},[33,108117,108118,108120],{"class":35,"line":36},[33,108119,31645],{"class":39},[33,108121,107603],{"class":47},[14,108123,108124,108125,102271,108128,108131],{},"导入 Python 标准库里的数学模块。后面要用 ",[30,108126,108127],{},"math.sin",[30,108129,108130],{},"math.pi"," 生成周期变化的控制信号。",[23,108133,108134],{"className":31631,"code":104939,"language":31633,"meta":28,"style":28},[30,108135,108136,108142],{"__ignoreMap":28},[33,108137,108138,108140],{"class":35,"line":36},[33,108139,31645],{"class":39},[33,108141,102554],{"class":47},[33,108143,108144,108146,108148,108150],{"class":35,"line":51},[33,108145,31645],{"class":39},[33,108147,32633],{"class":47},[33,108149,32636],{"class":39},[33,108151,32639],{"class":47},[14,108153,108154],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[23,108156,108157],{"className":54320,"code":107440,"language":54322,"meta":28,"style":28},[30,108158,108159],{"__ignoreMap":28},[33,108160,108161,108163,108165,108167,108169,108171,108173,108175,108177,108179,108181,108183,108185,108187,108189],{"class":35,"line":36},[33,108162,875],{"class":47},[33,108164,104209],{"class":52553},[33,108166,16171],{"class":43},[33,108168,73],{"class":47},[33,108170,107272],{"class":119},[33,108172,55077],{"class":43},[33,108174,73],{"class":47},[33,108176,107272],{"class":119},[33,108178,107281],{"class":43},[33,108180,73],{"class":47},[33,108182,107286],{"class":119},[33,108184,107469],{"class":43},[33,108186,73],{"class":47},[33,108188,107474],{"class":119},[33,108190,102397],{"class":47},[14,108192,108193,108194,108196,108197,108199,108200,108202],{},"这行定义关节。",[30,108195,107093],{}," 表示旋转关节。",[30,108198,107492],{}," 表示绕 y 轴旋转。",[30,108201,107498],{}," 表示有一点阻尼，运动不会完全无损耗。",[23,108204,108206],{"className":54320,"code":108205,"language":54322,"meta":28,"style":28},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[30,108207,108208],{"__ignoreMap":28},[33,108209,108210,108212,108214,108216,108218,108221,108223,108225,108228,108231,108233,108236,108238,108240,108242,108244,108246,108249],{"class":35,"line":36},[33,108211,875],{"class":47},[33,108213,102373],{"class":52553},[33,108215,16171],{"class":43},[33,108217,73],{"class":47},[33,108219,108220],{"class":119},"\"link_geom\"",[33,108222,55077],{"class":43},[33,108224,73],{"class":47},[33,108226,108227],{"class":119},"\"capsule\"",[33,108229,108230],{"class":43}," fromto",[33,108232,73],{"class":47},[33,108234,108235],{"class":119},"\"0 0 0 0 0 0.5\"",[33,108237,102389],{"class":43},[33,108239,73],{"class":47},[33,108241,105031],{"class":119},[33,108243,103254],{"class":43},[33,108245,73],{"class":47},[33,108247,108248],{"class":119},"\"0.5\"",[33,108250,102397],{"class":47},[14,108252,108253,108254,108256,108257,108259,108260,108263,108264,29638,108267,108269],{},"这行定义摆杆的形状。",[30,108255,104418],{}," 是胶囊体，适合表示杆子。",[30,108258,104429],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[30,108261,108262],{},"(0,0,0)"," 延伸到 ",[30,108265,108266],{},"(0,0,0.5)",[30,108268,104423],{}," 是半径。",[23,108271,108272],{"className":54320,"code":107506,"language":54322,"meta":28,"style":28},[30,108273,108274],{"__ignoreMap":28},[33,108275,108276,108278,108280,108282,108284,108286,108288,108290,108292,108294,108296,108298,108300,108302,108304,108306,108308,108310],{"class":35,"line":36},[33,108277,875],{"class":47},[33,108279,107327],{"class":52553},[33,108281,16171],{"class":43},[33,108283,73],{"class":47},[33,108285,107334],{"class":119},[33,108287,107337],{"class":43},[33,108289,73],{"class":47},[33,108291,107272],{"class":119},[33,108293,107344],{"class":43},[33,108295,73],{"class":47},[33,108297,5080],{"class":119},[33,108299,107351],{"class":43},[33,108301,73],{"class":47},[33,108303,107356],{"class":119},[33,108305,107359],{"class":43},[33,108307,73],{"class":47},[33,108309,107364],{"class":119},[33,108311,102397],{"class":47},[14,108313,108314,108315,108317,108318,108321,108322,108324],{},"这行定义电机。它作用在 ",[30,108316,107093],{}," 关节上。",[30,108319,108320],{},"gear"," 可以理解成放大倍数。",[30,108323,107108],{}," 限制控制输入范围。",[23,108326,108327],{"className":31631,"code":108020,"language":31633,"meta":28,"style":28},[30,108328,108329,108341],{"__ignoreMap":28},[33,108330,108331,108333,108335,108337,108339],{"class":35,"line":36},[33,108332,2987],{"class":39},[33,108334,107811],{"class":47},[33,108336,22199],{"class":39},[33,108338,26371],{"class":76},[33,108340,5141],{"class":47},[33,108342,108343,108345,108347,108349,108351],{"class":35,"line":51},[33,108344,105148],{"class":39},[33,108346,104688],{"class":76},[33,108348,345],{"class":47},[33,108350,107828],{"class":119},[33,108352,884],{"class":47},[14,108354,108355,108357],{},[30,108356,103411],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[23,108359,108361],{"className":31631,"code":108360,"language":31633,"meta":28,"style":28},"for step in range(2000):\n",[30,108362,108363],{"__ignoreMap":28},[33,108364,108365,108367,108369,108371,108373,108375,108377],{"class":35,"line":36},[33,108366,4435],{"class":39},[33,108368,32869],{"class":47},[33,108370,27296],{"class":39},[33,108372,33696],{"class":76},[33,108374,345],{"class":47},[33,108376,107849],{"class":76},[33,108378,32039],{"class":47},[14,108380,108381,108382,108384,108385,108388],{},"循环 2000 步。这里没有用 ",[30,108383,2587],{},"，而是用 ",[30,108386,108387],{},"step","，因为后面要用当前步数计算时间。",[23,108390,108392],{"className":31631,"code":108391,"language":31633,"meta":28,"style":28},"t = step * model.opt.timestep\n",[30,108393,108394],{"__ignoreMap":28},[33,108395,108396,108399,108401,108403,108405],{"class":35,"line":36},[33,108397,108398],{"class":47},"t ",[33,108400,73],{"class":39},[33,108402,32869],{"class":47},[33,108404,2057],{"class":39},[33,108406,107865],{"class":47},[14,108408,108409],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[23,108411,108412],{"className":31631,"code":108060,"language":31633,"meta":28,"style":28},[30,108413,108414],{"__ignoreMap":28},[33,108415,108416,108418,108420,108422,108424,108426,108428,108430,108432,108434,108436,108438,108440,108442],{"class":35,"line":36},[33,108417,107124],{"class":47},[33,108419,766],{"class":76},[33,108421,5840],{"class":47},[33,108423,73],{"class":39},[33,108425,107879],{"class":76},[33,108427,303],{"class":39},[33,108429,107884],{"class":47},[33,108431,106513],{"class":76},[33,108433,303],{"class":39},[33,108435,107891],{"class":47},[33,108437,2057],{"class":39},[33,108439,63120],{"class":76},[33,108441,303],{"class":39},[33,108443,107900],{"class":47},[14,108445,108446],{},"这行给电机输入一个正弦波。拆开看：",[574,108448,108449,108455,108461],{},[564,108450,108451,108454],{},[30,108452,108453],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[564,108456,108457,108460],{},[30,108458,108459],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[564,108462,108463,108466],{},[30,108464,108465],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,108468,108469],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[23,108471,108473],{"className":31631,"code":108472,"language":31633,"meta":28,"style":28},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[30,108474,108475],{"__ignoreMap":28},[33,108476,108477,108479,108481,108483,108485,108487],{"class":35,"line":36},[33,108478,31668],{"class":76},[33,108480,345],{"class":47},[33,108482,107928],{"class":119},[33,108484,106183],{"class":47},[33,108486,717],{"class":76},[33,108488,31750],{"class":47},[14,108490,108491,108492,108494],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[30,108493,102323],{}," 只有一个数。",[18,108496,103569],{"id":103568},[14,108498,108499],{},"输出类似:",[23,108501,108504],{"className":108502,"code":108503,"language":6578,"meta":28},[6576],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[30,108505,108503],{"__ignoreMap":28},[14,108507,108508,108509,108511],{},"这里 ",[30,108510,107379],{}," 是电机输入。",[14,108513,108514,108517,108518,108521],{},[30,108515,108516],{},"joint qpos"," 是关节角度，单位通常是弧度。",[30,108519,108520],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,108523,108524],{},"角度单位提示：",[23,108526,108529],{"className":108527,"code":108528,"language":6578,"meta":28},[6576],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[30,108530,108528],{"__ignoreMap":28},[14,108532,108533,108534,108536,108537,108539],{},"如果你看到 ",[30,108535,105283],{}," 是 ",[30,108538,36582],{},"，大约就是 28.6 度。",[18,108541,103601],{"id":103600},[574,108543,108544,108551,108554,108561,108564,108572,108580],{},[564,108545,103664,108546,103667,108548,29638],{},[30,108547,107564],{},[30,108549,108550],{},"gear=\"5\"",[564,108552,108553],{},"重新运行，观察关节运动是否更剧烈。",[564,108555,103664,108556,103667,108558,29638],{},[30,108557,107108],{},[30,108559,108560],{},"-0.2 0.2",[564,108562,108563],{},"重新运行，观察控制能力是否变弱。",[564,108565,108566,108567,108569,108570,29638],{},"去掉 actuator，确认 ",[30,108568,103411],{}," 变成 ",[30,108571,766],{},[564,108573,103664,108574,103667,108576,108579],{},[30,108575,107498],{},[30,108577,108578],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[564,108581,103664,108582,103667,108584,108587],{},[30,108583,107492],{},[30,108585,108586],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[18,108589,103706],{"id":103705},[1599,108591,108593],{"id":108592},"indexerror-index-0-is-out-of-bounds",[30,108594,108595],{},"IndexError: index 0 is out of bounds",[14,108597,108598,108599,108601],{},"原因是 ",[30,108600,107245],{},"，没有 actuator。",[1599,108603,108604],{"id":108604},"关节几乎不动",[14,108606,108607],{},"可能原因:",[574,108609,108610,108615,108619,108625],{},[564,108611,108612,108614],{},[30,108613,108320],{}," 太小",[564,108616,108617,108614],{},[30,108618,107108],{},[564,108620,108621,108624],{},[30,108622,108623],{},"damping"," 太大",[564,108626,108627],{},"重力方向导致运动不明显",[1599,108629,108630],{"id":108630},"模型编译失败",[14,108632,108633,108634,108636],{},"检查 actuator 引用的 ",[30,108635,107555],{}," 是否存在，joint 名称是否拼写一致。",[1599,108638,108640,108642],{"id":108639},"datactrl0-写了但没有效果",[30,108641,107379],{}," 写了但没有效果",[14,108644,103828],{},[574,108646,108647,108652,108655,108660,108665],{},[564,108648,108649,108651],{},[30,108650,103411],{}," 是否大于 0。",[564,108653,108654],{},"motor 是否引用了正确 joint。",[564,108656,108657,108659],{},[30,108658,108320],{}," 是否太小。",[564,108661,108662,108664],{},[30,108663,107108],{}," 是否把输入限制得太小。",[564,108666,108667],{},"body 是否真的有可动 joint。",[1599,108669,108670],{"id":108670},"控制输入超过范围会怎样",[14,108672,108673],{},"如果设置了：",[23,108675,108677],{"className":54320,"code":108676,"language":54322,"meta":28,"style":28},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[30,108678,108679],{"__ignoreMap":28},[33,108680,108681],{"class":35,"line":36},[33,108682,108676],{"class":47},[14,108684,108685],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[23,108687,108689],{"className":31631,"code":108688,"language":31633,"meta":28,"style":28},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[30,108690,108691,108711],{"__ignoreMap":28},[33,108692,108693,108696,108698,108701,108703,108705,108707,108709],{"class":35,"line":36},[33,108694,108695],{"class":47},"action ",[33,108697,73],{"class":39},[33,108699,108700],{"class":47}," np.clip(action, ",[33,108702,1199],{"class":39},[33,108704,106513],{"class":76},[33,108706,13686],{"class":47},[33,108708,106513],{"class":76},[33,108710,884],{"class":47},[33,108712,108713,108715,108717,108719,108721],{"class":35,"line":51},[33,108714,107124],{"class":47},[33,108716,766],{"class":76},[33,108718,5840],{"class":47},[33,108720,73],{"class":39},[33,108722,108723],{"class":47}," action\n",[18,108725,103860],{"id":103859},[14,108727,108728],{},"这一章建立了控制任务的基本形式：",[23,108730,108733],{"className":108731,"code":108732,"language":6578,"meta":28},[6576],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[30,108734,108732],{"__ignoreMap":28},[14,108736,108737],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1544,108739,108740],{},"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":28,"searchDepth":51,"depth":51,"links":108742},[108743,108744,108745,108750,108754,108755,108756,108764],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":108746},[108747,108748,108749],{"id":107386,"depth":57,"text":107387},{"id":107436,"depth":57,"text":107437},{"id":107502,"depth":57,"text":107503},{"id":102505,"depth":51,"text":102506,"children":108751},[108752,108753],{"id":102825,"depth":57,"text":102825},{"id":102961,"depth":57,"text":102961},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":108757},[108758,108759,108760,108761,108763],{"id":108592,"depth":57,"text":108595},{"id":108604,"depth":57,"text":108604},{"id":108630,"depth":57,"text":108630},{"id":108639,"depth":57,"text":108762},"data.ctrl[0] 写了但没有效果",{"id":108670,"depth":57,"text":108670},{"id":103859,"depth":51,"text":103860},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107074,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108771,"title":108772,"body":108773,"description":28,"extension":1557,"meta":110682,"navigation":159,"path":110683,"seo":110684,"stem":110685,"__hash__":110686},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108774,"toc":110658},[108775,108778,108780,108783,108791,108794,108811,108814,108839,108842,108888,108890,108892,108947,108949,108968,108970,109013,109016,109033,109036,109052,109062,109069,109071,109074,109077,109111,109114,109162,109166,109169,109183,109192,109196,109199,109224,109227,109231,109244,109247,109253,109256,109271,109273,109276,109536,109538,109550,109553,109865,109867,109879,109881,109884,109899,109904,109907,109929,109932,109935,109969,109972,109976,109987,109990,110007,110010,110024,110031,110051,110058,110072,110075,110087,110102,110122,110125,110147,110150,110154,110169,110180,110195,110198,110228,110244,110273,110281,110305,110308,110326,110336,110348,110355,110364,110370,110379,110382,110384,110393,110396,110411,110413,110416,110427,110430,110441,110444,110462,110464,110481,110484,110512,110514,110518,110521,110551,110557,110560,110564,110572,110575,110577,110598,110601,110604,110620,110623,110639,110641,110644,110655],[10,108776,108772],{"id":108777},"_5viewer-可视化与-renderer-离屏渲染",[18,108779,101900],{"id":101899},[14,108781,108782],{},"本章掌握两类可视化方式:",[574,108784,108785,108788],{},[564,108786,108787],{},"交互式 viewer: 适合人工观察仿真",[564,108789,108790],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,108792,108793],{},"使用官方接口:",[23,108795,108797],{"className":31631,"code":108796,"language":31633,"meta":28,"style":28},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[30,108798,108799,108806],{"__ignoreMap":28},[33,108800,108801,108803],{"class":35,"line":36},[33,108802,31645],{"class":39},[33,108804,108805],{"class":47}," mujoco.viewer\n",[33,108807,108808],{"class":35,"line":51},[33,108809,108810],{"class":47},"mujoco.viewer.launch_passive(model, data)\n",[14,108812,108813],{},"以及:",[23,108815,108817],{"className":31631,"code":108816,"language":31633,"meta":28,"style":28},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[30,108818,108819,108829],{"__ignoreMap":28},[33,108820,108821,108824,108826],{"class":35,"line":36},[33,108822,108823],{"class":47},"renderer ",[33,108825,73],{"class":39},[33,108827,108828],{"class":47}," mujoco.Renderer(model)\n",[33,108830,108831,108834,108836],{"class":35,"line":51},[33,108832,108833],{"class":47},"image ",[33,108835,73],{"class":39},[33,108837,108838],{"class":47}," renderer.render()\n",[14,108840,108841],{},"新手建议先理解二者区别：",[1756,108843,108844,108860],{},[1759,108845,108846],{},[1762,108847,108848,108851,108854,108857],{},[1765,108849,108850],{"align":24988},"工具",[1765,108852,108853],{"align":24988},"用途",[1765,108855,108856],{"align":24988},"是否打开窗口",[1765,108858,108859],{"align":24988},"常见场景",[1802,108861,108862,108875],{},[1762,108863,108864,108867,108870,108872],{},[1807,108865,108866],{"align":24988},"Viewer",[1807,108868,108869],{"align":24988},"人眼实时观察仿真",[1807,108871,105918],{"align":24988},[1807,108873,108874],{"align":24988},"调试模型、看控制效果",[1762,108876,108877,108880,108883,108885],{},[1807,108878,108879],{"align":24988},"Renderer",[1807,108881,108882],{"align":24988},"生成图像数组",[1807,108884,105931],{"align":24988},[1807,108886,108887],{"align":24988},"保存图片、训练视觉策略、服务器批量采集",[18,108889,102023],{"id":102022},[14,108891,102026],{},[23,108893,108895],{"className":25074,"code":108894,"language":25076,"meta":28,"style":28},"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",[30,108896,108897,108909,108919,108927,108935],{"__ignoreMap":28},[33,108898,108899,108901,108903,108905,108907],{"class":35,"line":36},[33,108900,25829],{"class":43},[33,108902,27568],{"class":119},[33,108904,25086],{"class":119},[33,108906,27653],{"class":76},[33,108908,25931],{"class":76},[33,108910,108911,108913,108915,108917],{"class":35,"line":51},[33,108912,102061],{"class":119},[33,108914,102064],{"class":119},[33,108916,102067],{"class":119},[33,108918,25931],{"class":76},[33,108920,108921,108923,108925],{"class":35,"line":57},[33,108922,102074],{"class":119},[33,108924,102077],{"class":119},[33,108926,25931],{"class":76},[33,108928,108929,108931,108933],{"class":35,"line":64},[33,108930,102084],{"class":119},[33,108932,102087],{"class":119},[33,108934,25931],{"class":76},[33,108936,108937,108939,108941,108943,108945],{"class":35,"line":83},[33,108938,102094],{"class":119},[33,108940,102097],{"class":119},[33,108942,102100],{"class":119},[33,108944,102103],{"class":119},[33,108946,103769],{"class":119},[14,108948,104072],{},[23,108950,108952],{"className":25074,"code":108951,"language":25076,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy pillow\n",[30,108953,108954],{"__ignoreMap":28},[33,108955,108956,108958,108960,108962,108965],{"class":35,"line":36},[33,108957,25083],{"class":43},[33,108959,25086],{"class":119},[33,108961,102183],{"class":119},[33,108963,108964],{"class":119}," numpy",[33,108966,108967],{"class":119}," pillow\n",[14,108969,104089],{},[23,108971,108973],{"className":25074,"code":108972,"language":25076,"meta":28,"style":28},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[30,108974,108975,108992,109001],{"__ignoreMap":28},[33,108976,108977,108979,108981,108983,108986,108988,108990],{"class":35,"line":36},[33,108978,31583],{"class":43},[33,108980,30429],{"class":119},[33,108982,26368],{"class":76},[33,108984,108985],{"class":119}," mujoco-render",[33,108987,102228],{"class":119},[33,108989,102231],{"class":76},[33,108991,102234],{"class":76},[33,108993,108994,108996,108998],{"class":35,"line":51},[33,108995,31583],{"class":43},[33,108997,102241],{"class":119},[33,108999,109000],{"class":119}," mujoco-render\n",[33,109002,109003,109005,109007,109009,109011],{"class":35,"line":57},[33,109004,25083],{"class":43},[33,109006,25086],{"class":119},[33,109008,102183],{"class":119},[33,109010,108964],{"class":119},[33,109012,108967],{"class":119},[14,109014,109015],{},"离屏渲染后端:",[23,109017,109019],{"className":25074,"code":109018,"language":25076,"meta":28,"style":28},"export MUJOCO_GL=egl\n",[30,109020,109021],{"__ignoreMap":28},[33,109022,109023,109025,109028,109030],{"class":35,"line":36},[33,109024,26295],{"class":39},[33,109026,109027],{"class":47}," MUJOCO_GL",[33,109029,73],{"class":39},[33,109031,109032],{"class":47},"egl\n",[14,109034,109035],{},"或:",[23,109037,109039],{"className":25074,"code":109038,"language":25076,"meta":28,"style":28},"export MUJOCO_GL=osmesa\n",[30,109040,109041],{"__ignoreMap":28},[33,109042,109043,109045,109047,109049],{"class":35,"line":36},[33,109044,26295],{"class":39},[33,109046,109027],{"class":47},[33,109048,73],{"class":39},[33,109050,109051],{"class":47},"osmesa\n",[14,109053,109054,109055,109058,109059,29638],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[30,109056,109057],{},"egl"," 失败，再尝试 ",[30,109060,109061],{},"osmesa",[14,109063,109064,109065,109068],{},"如果你在本机桌面环境运行，通常先不要设置 ",[30,109066,109067],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[18,109070,102298],{"id":102297},[14,109072,109073],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,109075,109076],{},"典型 viewer 流程:",[23,109078,109080],{"className":31631,"code":109079,"language":31633,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[30,109081,109082,109095,109102,109106],{"__ignoreMap":28},[33,109083,109084,109087,109090,109092],{"class":35,"line":36},[33,109085,109086],{"class":39},"with",[33,109088,109089],{"class":47}," mujoco.viewer.launch_passive(model, data) ",[33,109091,32636],{"class":39},[33,109093,109094],{"class":47}," viewer:\n",[33,109096,109097,109099],{"class":35,"line":51},[33,109098,3673],{"class":39},[33,109100,109101],{"class":47}," viewer.is_running():\n",[33,109103,109104],{"class":35,"line":57},[33,109105,102769],{"class":47},[33,109107,109108],{"class":35,"line":64},[33,109109,109110],{"class":47},"        viewer.sync()\n",[14,109112,109113],{},"典型 renderer 流程:",[23,109115,109117],{"className":31631,"code":109116,"language":31633,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[30,109118,109119,109145,109149,109154],{"__ignoreMap":28},[33,109120,109121,109123,109125,109128,109130,109132,109134,109136,109138,109140,109143],{"class":35,"line":36},[33,109122,108823],{"class":47},[33,109124,73],{"class":39},[33,109126,109127],{"class":47}," mujoco.Renderer(model, ",[33,109129,26234],{"class":955},[33,109131,73],{"class":39},[33,109133,43595],{"class":76},[33,109135,13686],{"class":47},[33,109137,26230],{"class":955},[33,109139,73],{"class":39},[33,109141,109142],{"class":76},"640",[33,109144,884],{"class":47},[33,109146,109147],{"class":35,"line":51},[33,109148,105758],{"class":47},[33,109150,109151],{"class":35,"line":57},[33,109152,109153],{"class":47},"renderer.update_scene(data)\n",[33,109155,109156,109158,109160],{"class":35,"line":64},[33,109157,108833],{"class":47},[33,109159,73],{"class":39},[33,109161,108838],{"class":47},[1599,109163,109165],{"id":109164},"viewer-的同步逻辑","viewer 的同步逻辑",[14,109167,109168],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[23,109170,109172],{"className":31631,"code":109171,"language":31633,"meta":28,"style":28},"mujoco.mj_step(model, data)\nviewer.sync()\n",[30,109173,109174,109178],{"__ignoreMap":28},[33,109175,109176],{"class":35,"line":36},[33,109177,105758],{"class":47},[33,109179,109180],{"class":35,"line":51},[33,109181,109182],{"class":47},"viewer.sync()\n",[14,109184,109185,109187,109188,109191],{},[30,109186,102468],{}," 负责算物理，",[30,109189,109190],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[1599,109193,109195],{"id":109194},"为什么要-sleep","为什么要 sleep",[14,109197,109198],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[23,109200,109202],{"className":31631,"code":109201,"language":31633,"meta":28,"style":28},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[30,109203,109204],{"__ignoreMap":28},[33,109205,109206,109209,109211,109214,109216,109219,109221],{"class":35,"line":36},[33,109207,109208],{"class":47},"sleep_time ",[33,109210,73],{"class":39},[33,109212,109213],{"class":47}," model.opt.timestep ",[33,109215,1199],{"class":39},[33,109217,109218],{"class":47}," (time.time() ",[33,109220,1199],{"class":39},[33,109222,109223],{"class":47}," step_start)\n",[14,109225,109226],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[1599,109228,109230],{"id":109229},"renderer-输出是什么","renderer 输出是什么",[23,109232,109234],{"className":31631,"code":109233,"language":31633,"meta":28,"style":28},"image = renderer.render()\n",[30,109235,109236],{"__ignoreMap":28},[33,109237,109238,109240,109242],{"class":35,"line":36},[33,109239,108833],{"class":47},[33,109241,73],{"class":39},[33,109243,108838],{"class":47},[14,109245,109246],{},"得到的是 NumPy 数组，形状通常是：",[23,109248,109251],{"className":109249,"code":109250,"language":6578,"meta":28},[6576],"(height, width, 3)\n",[30,109252,109250],{"__ignoreMap":28},[14,109254,109255],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[23,109257,109259],{"className":31631,"code":109258,"language":31633,"meta":28,"style":28},"Image.fromarray(image).save(\"render_output.png\")\n",[30,109260,109261],{"__ignoreMap":28},[33,109262,109263,109266,109269],{"class":35,"line":36},[33,109264,109265],{"class":47},"Image.fromarray(image).save(",[33,109267,109268],{"class":119},"\"render_output.png\"",[33,109270,884],{"class":47},[18,109272,102506],{"id":102505},[14,109274,109275],{},"交互式 Viewer:",[23,109277,109279],{"className":31631,"code":109278,"language":31633,"meta":28,"style":28},"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",[30,109280,109281,109287,109291,109297,109303,109307,109311,109319,109324,109328,109332,109336,109341,109346,109350,109354,109358,109363,109367,109371,109375,109379,109383,109387,109399,109411,109419,109423,109433,109453,109463,109468,109473,109477,109494,109507,109512,109516,109520,109532],{"__ignoreMap":28},[33,109282,109283,109285],{"class":35,"line":36},[33,109284,31645],{"class":39},[33,109286,33082],{"class":47},[33,109288,109289],{"class":35,"line":51},[33,109290,160],{"emptyLinePlaceholder":159},[33,109292,109293,109295],{"class":35,"line":57},[33,109294,31645],{"class":39},[33,109296,102554],{"class":47},[33,109298,109299,109301],{"class":35,"line":64},[33,109300,31645],{"class":39},[33,109302,108805],{"class":47},[33,109304,109305],{"class":35,"line":83},[33,109306,160],{"emptyLinePlaceholder":159},[33,109308,109309],{"class":35,"line":89},[33,109310,160],{"emptyLinePlaceholder":159},[33,109312,109313,109315,109317],{"class":35,"line":98},[33,109314,102567],{"class":76},[33,109316,14815],{"class":39},[33,109318,102572],{"class":119},[33,109320,109321],{"class":35,"line":110},[33,109322,109323],{"class":119},"\u003Cmujoco model=\"viewer_demo\">\n",[33,109325,109326],{"class":35,"line":134},[33,109327,102582],{"class":119},[33,109329,109330],{"class":35,"line":156},[33,109331,160],{"emptyLinePlaceholder":159},[33,109333,109334],{"class":35,"line":163},[33,109335,102591],{"class":119},[33,109337,109338],{"class":35,"line":169},[33,109339,109340],{"class":119},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[33,109342,109343],{"class":35,"line":175},[33,109344,109345],{"class":119},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,109347,109348],{"class":35,"line":181},[33,109349,160],{"emptyLinePlaceholder":159},[33,109351,109352],{"class":35,"line":196},[33,109353,102605],{"class":119},[33,109355,109356],{"class":35,"line":213},[33,109357,102610],{"class":119},[33,109359,109360],{"class":35,"line":228},[33,109361,109362],{"class":119},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,109364,109365],{"class":35,"line":1345},[33,109366,102620],{"class":119},[33,109368,109369],{"class":35,"line":1350},[33,109370,102625],{"class":119},[33,109372,109373],{"class":35,"line":1359},[33,109374,102630],{"class":119},[33,109376,109377],{"class":35,"line":1364},[33,109378,96951],{"class":119},[33,109380,109381],{"class":35,"line":1370},[33,109382,160],{"emptyLinePlaceholder":159},[33,109384,109385],{"class":35,"line":1425},[33,109386,160],{"emptyLinePlaceholder":159},[33,109388,109389,109391,109393,109395,109397],{"class":35,"line":1438},[33,109390,33200],{"class":39},[33,109392,44],{"class":43},[33,109394,102651],{"class":47},[33,109396,96939],{"class":76},[33,109398,5141],{"class":47},[33,109400,109401,109403,109405,109407,109409],{"class":35,"line":1451},[33,109402,102660],{"class":47},[33,109404,73],{"class":39},[33,109406,102665],{"class":47},[33,109408,102567],{"class":76},[33,109410,884],{"class":47},[33,109412,109413,109415,109417],{"class":35,"line":1457},[33,109414,102674],{"class":47},[33,109416,73],{"class":39},[33,109418,102679],{"class":47},[33,109420,109421],{"class":35,"line":1466},[33,109422,160],{"emptyLinePlaceholder":159},[33,109424,109425,109427,109429,109431],{"class":35,"line":1471},[33,109426,35431],{"class":39},[33,109428,109089],{"class":47},[33,109430,32636],{"class":39},[33,109432,109094],{"class":47},[33,109434,109435,109438,109441,109443,109446,109448,109451],{"class":35,"line":1477},[33,109436,109437],{"class":39},"        while",[33,109439,109440],{"class":47}," viewer.is_running() ",[33,109442,31715],{"class":39},[33,109444,109445],{"class":47}," data.time ",[33,109447,875],{"class":39},[33,109449,109450],{"class":76}," 5.0",[33,109452,5141],{"class":47},[33,109454,109455,109458,109460],{"class":35,"line":1504},[33,109456,109457],{"class":47},"            step_start ",[33,109459,73],{"class":39},[33,109461,109462],{"class":47}," time.time()\n",[33,109464,109465],{"class":35,"line":1509},[33,109466,109467],{"class":47},"            mujoco.mj_step(model, data)\n",[33,109469,109470],{"class":35,"line":1525},[33,109471,109472],{"class":47},"            viewer.sync()\n",[33,109474,109475],{"class":35,"line":1535},[33,109476,160],{"emptyLinePlaceholder":159},[33,109478,109479,109482,109484,109486,109488,109490,109492],{"class":35,"line":1540},[33,109480,109481],{"class":47},"            sleep_time ",[33,109483,73],{"class":39},[33,109485,109213],{"class":47},[33,109487,1199],{"class":39},[33,109489,109218],{"class":47},[33,109491,1199],{"class":39},[33,109493,109223],{"class":47},[33,109495,109496,109498,109501,109503,109505],{"class":35,"line":4027},[33,109497,1259],{"class":39},[33,109499,109500],{"class":47}," sleep_time ",[33,109502,1265],{"class":39},[33,109504,5492],{"class":76},[33,109506,5141],{"class":47},[33,109508,109509],{"class":35,"line":4032},[33,109510,109511],{"class":47},"                time.sleep(sleep_time)\n",[33,109513,109514],{"class":35,"line":9199},[33,109515,160],{"emptyLinePlaceholder":159},[33,109517,109518],{"class":35,"line":9223},[33,109519,160],{"emptyLinePlaceholder":159},[33,109521,109522,109524,109526,109528,109530],{"class":35,"line":9228},[33,109523,2987],{"class":39},[33,109525,32473],{"class":76},[33,109527,102812],{"class":39},[33,109529,102815],{"class":119},[33,109531,5141],{"class":47},[33,109533,109534],{"class":35,"line":9234},[33,109535,102822],{"class":47},[14,109537,104823],{},[23,109539,109541],{"className":25074,"code":109540,"language":25076,"meta":28,"style":28},"touch ch5_viewer.py\n",[30,109542,109543],{"__ignoreMap":28},[33,109544,109545,109547],{"class":35,"line":36},[33,109546,102536],{"class":43},[33,109548,109549],{"class":119}," ch5_viewer.py\n",[14,109551,109552],{},"离屏 Renderer 保存图片:",[23,109554,109556],{"className":31631,"code":109555,"language":31633,"meta":28,"style":28},"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",[30,109557,109558,109570,109574,109580,109590,109594,109598,109606,109611,109615,109619,109623,109627,109632,109636,109640,109644,109648,109652,109656,109660,109664,109668,109672,109676,109688,109700,109708,109733,109737,109753,109757,109761,109776,109785,109789,109803,109808,109813,109817,109829,109841,109845,109849,109861],{"__ignoreMap":28},[33,109559,109560,109562,109565,109567],{"class":35,"line":36},[33,109561,31990],{"class":39},[33,109563,109564],{"class":47}," pathlib ",[33,109566,31645],{"class":39},[33,109568,109569],{"class":47}," Path\n",[33,109571,109572],{"class":35,"line":51},[33,109573,160],{"emptyLinePlaceholder":159},[33,109575,109576,109578],{"class":35,"line":57},[33,109577,31645],{"class":39},[33,109579,102554],{"class":47},[33,109581,109582,109584,109586,109588],{"class":35,"line":64},[33,109583,31990],{"class":39},[33,109585,48516],{"class":76},[33,109587,48519],{"class":39},[33,109589,48522],{"class":47},[33,109591,109592],{"class":35,"line":83},[33,109593,160],{"emptyLinePlaceholder":159},[33,109595,109596],{"class":35,"line":89},[33,109597,160],{"emptyLinePlaceholder":159},[33,109599,109600,109602,109604],{"class":35,"line":98},[33,109601,102567],{"class":76},[33,109603,14815],{"class":39},[33,109605,102572],{"class":119},[33,109607,109608],{"class":35,"line":110},[33,109609,109610],{"class":119},"\u003Cmujoco model=\"renderer_demo\">\n",[33,109612,109613],{"class":35,"line":134},[33,109614,102582],{"class":119},[33,109616,109617],{"class":35,"line":156},[33,109618,160],{"emptyLinePlaceholder":159},[33,109620,109621],{"class":35,"line":163},[33,109622,102591],{"class":119},[33,109624,109625],{"class":35,"line":169},[33,109626,109340],{"class":119},[33,109628,109629],{"class":35,"line":175},[33,109630,109631],{"class":119},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,109633,109634],{"class":35,"line":181},[33,109635,109345],{"class":119},[33,109637,109638],{"class":35,"line":196},[33,109639,160],{"emptyLinePlaceholder":159},[33,109641,109642],{"class":35,"line":213},[33,109643,102605],{"class":119},[33,109645,109646],{"class":35,"line":228},[33,109647,102610],{"class":119},[33,109649,109650],{"class":35,"line":1345},[33,109651,109362],{"class":119},[33,109653,109654],{"class":35,"line":1350},[33,109655,102620],{"class":119},[33,109657,109658],{"class":35,"line":1359},[33,109659,102625],{"class":119},[33,109661,109662],{"class":35,"line":1364},[33,109663,102630],{"class":119},[33,109665,109666],{"class":35,"line":1370},[33,109667,96951],{"class":119},[33,109669,109670],{"class":35,"line":1425},[33,109671,160],{"emptyLinePlaceholder":159},[33,109673,109674],{"class":35,"line":1438},[33,109675,160],{"emptyLinePlaceholder":159},[33,109677,109678,109680,109682,109684,109686],{"class":35,"line":1451},[33,109679,33200],{"class":39},[33,109681,44],{"class":43},[33,109683,102651],{"class":47},[33,109685,96939],{"class":76},[33,109687,5141],{"class":47},[33,109689,109690,109692,109694,109696,109698],{"class":35,"line":1457},[33,109691,102660],{"class":47},[33,109693,73],{"class":39},[33,109695,102665],{"class":47},[33,109697,102567],{"class":76},[33,109699,884],{"class":47},[33,109701,109702,109704,109706],{"class":35,"line":1466},[33,109703,102674],{"class":47},[33,109705,73],{"class":39},[33,109707,102679],{"class":47},[33,109709,109710,109713,109715,109717,109719,109721,109723,109725,109727,109729,109731],{"class":35,"line":1471},[33,109711,109712],{"class":47},"    renderer ",[33,109714,73],{"class":39},[33,109716,109127],{"class":47},[33,109718,26234],{"class":955},[33,109720,73],{"class":39},[33,109722,43595],{"class":76},[33,109724,13686],{"class":47},[33,109726,26230],{"class":955},[33,109728,73],{"class":39},[33,109730,109142],{"class":76},[33,109732,884],{"class":47},[33,109734,109735],{"class":35,"line":1477},[33,109736,160],{"emptyLinePlaceholder":159},[33,109738,109739,109741,109743,109745,109747,109749,109751],{"class":35,"line":1504},[33,109740,857],{"class":39},[33,109742,102754],{"class":47},[33,109744,27296],{"class":39},[33,109746,33696],{"class":76},[33,109748,345],{"class":47},[33,109750,457],{"class":76},[33,109752,32039],{"class":47},[33,109754,109755],{"class":35,"line":1509},[33,109756,102769],{"class":47},[33,109758,109759],{"class":35,"line":1525},[33,109760,160],{"emptyLinePlaceholder":159},[33,109762,109763,109766,109769,109771,109774],{"class":35,"line":1535},[33,109764,109765],{"class":47},"    renderer.update_scene(data, ",[33,109767,109768],{"class":955},"camera",[33,109770,73],{"class":39},[33,109772,109773],{"class":119},"\"fixed_camera\"",[33,109775,884],{"class":47},[33,109777,109778,109781,109783],{"class":35,"line":1540},[33,109779,109780],{"class":47},"    image ",[33,109782,73],{"class":39},[33,109784,108838],{"class":47},[33,109786,109787],{"class":35,"line":4027},[33,109788,160],{"emptyLinePlaceholder":159},[33,109790,109791,109794,109796,109799,109801],{"class":35,"line":4032},[33,109792,109793],{"class":47},"    output_path ",[33,109795,73],{"class":39},[33,109797,109798],{"class":47}," Path(",[33,109800,109268],{"class":119},[33,109802,884],{"class":47},[33,109804,109805],{"class":35,"line":9199},[33,109806,109807],{"class":47},"    Image.fromarray(image).save(output_path)\n",[33,109809,109810],{"class":35,"line":9223},[33,109811,109812],{"class":47},"    renderer.close()\n",[33,109814,109815],{"class":35,"line":9228},[33,109816,160],{"emptyLinePlaceholder":159},[33,109818,109819,109821,109823,109826],{"class":35,"line":9234},[33,109820,32552],{"class":76},[33,109822,345],{"class":47},[33,109824,109825],{"class":119},"\"saved:\"",[33,109827,109828],{"class":47},", output_path.resolve())\n",[33,109830,109831,109833,109835,109838],{"class":35,"line":9261},[33,109832,32552],{"class":76},[33,109834,345],{"class":47},[33,109836,109837],{"class":119},"\"image shape:\"",[33,109839,109840],{"class":47},", image.shape)\n",[33,109842,109843],{"class":35,"line":9266},[33,109844,160],{"emptyLinePlaceholder":159},[33,109846,109847],{"class":35,"line":9272},[33,109848,160],{"emptyLinePlaceholder":159},[33,109850,109851,109853,109855,109857,109859],{"class":35,"line":9284},[33,109852,2987],{"class":39},[33,109854,32473],{"class":76},[33,109856,102812],{"class":39},[33,109858,102815],{"class":119},[33,109860,5141],{"class":47},[33,109862,109863],{"class":35,"line":9296},[33,109864,102822],{"class":47},[14,109866,104823],{},[23,109868,109870],{"className":25074,"code":109869,"language":25076,"meta":28,"style":28},"touch ch5_renderer.py\n",[30,109871,109872],{"__ignoreMap":28},[33,109873,109874,109876],{"class":35,"line":36},[33,109875,102536],{"class":43},[33,109877,109878],{"class":119}," ch5_renderer.py\n",[1599,109880,102825],{"id":102825},[14,109882,109883],{},"viewer 上下文：",[23,109885,109887],{"className":31631,"code":109886,"language":31633,"meta":28,"style":28},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[30,109888,109889],{"__ignoreMap":28},[33,109890,109891,109893,109895,109897],{"class":35,"line":36},[33,109892,109086],{"class":39},[33,109894,109089],{"class":47},[33,109896,32636],{"class":39},[33,109898,109094],{"class":47},[14,109900,109901,109903],{},[30,109902,109086],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,109905,109906],{},"窗口循环：",[23,109908,109910],{"className":31631,"code":109909,"language":31633,"meta":28,"style":28},"while viewer.is_running() and data.time \u003C 5.0:\n",[30,109911,109912],{"__ignoreMap":28},[33,109913,109914,109917,109919,109921,109923,109925,109927],{"class":35,"line":36},[33,109915,109916],{"class":39},"while",[33,109918,109440],{"class":47},[33,109920,31715],{"class":39},[33,109922,109445],{"class":47},[33,109924,875],{"class":39},[33,109926,109450],{"class":76},[33,109928,5141],{"class":47},[14,109930,109931],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,109933,109934],{},"固定相机：",[23,109936,109938],{"className":54320,"code":109937,"language":54322,"meta":28,"style":28},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[30,109939,109940],{"__ignoreMap":28},[33,109941,109942,109944,109946,109948,109950,109952,109954,109956,109959,109962,109964,109967],{"class":35,"line":36},[33,109943,875],{"class":47},[33,109945,109768],{"class":52553},[33,109947,16171],{"class":43},[33,109949,73],{"class":47},[33,109951,109773],{"class":119},[33,109953,102359],{"class":43},[33,109955,73],{"class":47},[33,109957,109958],{"class":119},"\"1.5 -2.0 1.2\"",[33,109960,109961],{"class":43}," xyaxes",[33,109963,73],{"class":47},[33,109965,109966],{"class":119},"\"1 0.75 0 0 0 1\"",[33,109968,102397],{"class":47},[14,109970,109971],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[1599,109973,109975],{"id":109974},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[23,109977,109979],{"className":31631,"code":109978,"language":31633,"meta":28,"style":28},"import time\n",[30,109980,109981],{"__ignoreMap":28},[33,109982,109983,109985],{"class":35,"line":36},[33,109984,31645],{"class":39},[33,109986,33082],{"class":47},[14,109988,109989],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[23,109991,109993],{"className":31631,"code":109992,"language":31633,"meta":28,"style":28},"import mujoco\nimport mujoco.viewer\n",[30,109994,109995,110001],{"__ignoreMap":28},[33,109996,109997,109999],{"class":35,"line":36},[33,109998,31645],{"class":39},[33,110000,102554],{"class":47},[33,110002,110003,110005],{"class":35,"line":51},[33,110004,31645],{"class":39},[33,110006,108805],{"class":47},[14,110008,110009],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[23,110011,110012],{"className":31631,"code":109886,"language":31633,"meta":28,"style":28},[30,110013,110014],{"__ignoreMap":28},[33,110015,110016,110018,110020,110022],{"class":35,"line":36},[33,110017,109086],{"class":39},[33,110019,109089],{"class":47},[33,110021,32636],{"class":39},[33,110023,109094],{"class":47},[14,110025,110026,110027,110030],{},"打开一个 viewer 窗口。",[30,110028,110029],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[23,110032,110033],{"className":31631,"code":109909,"language":31633,"meta":28,"style":28},[30,110034,110035],{"__ignoreMap":28},[33,110036,110037,110039,110041,110043,110045,110047,110049],{"class":35,"line":36},[33,110038,109916],{"class":39},[33,110040,109440],{"class":47},[33,110042,31715],{"class":39},[33,110044,109445],{"class":47},[33,110046,875],{"class":39},[33,110048,109450],{"class":76},[33,110050,5141],{"class":47},[14,110052,110053,110054,110057],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[30,110055,110056],{},"viewer.is_running()"," 会变成 false，循环结束。",[23,110059,110061],{"className":31631,"code":110060,"language":31633,"meta":28,"style":28},"step_start = time.time()\n",[30,110062,110063],{"__ignoreMap":28},[33,110064,110065,110068,110070],{"class":35,"line":36},[33,110066,110067],{"class":47},"step_start ",[33,110069,73],{"class":39},[33,110071,109462],{"class":47},[14,110073,110074],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[23,110076,110077],{"className":31631,"code":109171,"language":31633,"meta":28,"style":28},[30,110078,110079,110083],{"__ignoreMap":28},[33,110080,110081],{"class":35,"line":36},[33,110082,105758],{"class":47},[33,110084,110085],{"class":35,"line":51},[33,110086,109182],{"class":47},[14,110088,110089,110091,110092,110094,110095,110097,110098,110101],{},[30,110090,102468],{}," 推进物理仿真。",[30,110093,109190],{}," 把最新的 ",[30,110096,34654],{}," 同步到窗口里显示。没有 ",[30,110099,110100],{},"sync()","，窗口可能看不到最新状态。",[23,110103,110104],{"className":31631,"code":109201,"language":31633,"meta":28,"style":28},[30,110105,110106],{"__ignoreMap":28},[33,110107,110108,110110,110112,110114,110116,110118,110120],{"class":35,"line":36},[33,110109,109208],{"class":47},[33,110111,73],{"class":39},[33,110113,109213],{"class":47},[33,110115,1199],{"class":39},[33,110117,109218],{"class":47},[33,110119,1199],{"class":39},[33,110121,109223],{"class":47},[14,110123,110124],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[23,110126,110128],{"className":31631,"code":110127,"language":31633,"meta":28,"style":28},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[30,110129,110130,110142],{"__ignoreMap":28},[33,110131,110132,110134,110136,110138,110140],{"class":35,"line":36},[33,110133,2987],{"class":39},[33,110135,109500],{"class":47},[33,110137,1265],{"class":39},[33,110139,5492],{"class":76},[33,110141,5141],{"class":47},[33,110143,110144],{"class":35,"line":51},[33,110145,110146],{"class":47},"    time.sleep(sleep_time)\n",[14,110148,110149],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[1599,110151,110153],{"id":110152},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[23,110155,110157],{"className":31631,"code":110156,"language":31633,"meta":28,"style":28},"from pathlib import Path\n",[30,110158,110159],{"__ignoreMap":28},[33,110160,110161,110163,110165,110167],{"class":35,"line":36},[33,110162,31990],{"class":39},[33,110164,109564],{"class":47},[33,110166,31645],{"class":39},[33,110168,109569],{"class":47},[14,110170,110171,110172,110175,110176,110179],{},"导入 ",[30,110173,110174],{},"Path","，用来处理文件路径。相比直接写字符串，",[30,110177,110178],{},"Path(\"render_output.png\")"," 更清晰。",[23,110181,110183],{"className":31631,"code":110182,"language":31633,"meta":28,"style":28},"from PIL import Image\n",[30,110184,110185],{"__ignoreMap":28},[33,110186,110187,110189,110191,110193],{"class":35,"line":36},[33,110188,31990],{"class":39},[33,110190,48516],{"class":76},[33,110192,48519],{"class":39},[33,110194,48522],{"class":47},[14,110196,110197],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[23,110199,110200],{"className":54320,"code":109937,"language":54322,"meta":28,"style":28},[30,110201,110202],{"__ignoreMap":28},[33,110203,110204,110206,110208,110210,110212,110214,110216,110218,110220,110222,110224,110226],{"class":35,"line":36},[33,110205,875],{"class":47},[33,110207,109768],{"class":52553},[33,110209,16171],{"class":43},[33,110211,73],{"class":47},[33,110213,109773],{"class":119},[33,110215,102359],{"class":43},[33,110217,73],{"class":47},[33,110219,109958],{"class":119},[33,110221,109961],{"class":43},[33,110223,73],{"class":47},[33,110225,109966],{"class":119},[33,110227,102397],{"class":47},[14,110229,110230,110231,110233,110234,110236,110237,110240,110241,110243],{},"定义一个相机。",[30,110232,81063],{}," 是相机名字。",[30,110235,105399],{}," 是相机在世界里的位置。",[30,110238,110239],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[30,110242,105399],{}," 来调视角。",[23,110245,110247],{"className":31631,"code":110246,"language":31633,"meta":28,"style":28},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[30,110248,110249],{"__ignoreMap":28},[33,110250,110251,110253,110255,110257,110259,110261,110263,110265,110267,110269,110271],{"class":35,"line":36},[33,110252,108823],{"class":47},[33,110254,73],{"class":39},[33,110256,109127],{"class":47},[33,110258,26234],{"class":955},[33,110260,73],{"class":39},[33,110262,43595],{"class":76},[33,110264,13686],{"class":47},[33,110266,26230],{"class":955},[33,110268,73],{"class":39},[33,110270,109142],{"class":76},[33,110272,884],{"class":47},[14,110274,110275,110276,102271,110278,110280],{},"创建离屏渲染器。",[30,110277,26234],{},[30,110279,26230],{}," 决定输出图片大小。",[23,110282,110283],{"className":31631,"code":102929,"language":31633,"meta":28,"style":28},[30,110284,110285,110301],{"__ignoreMap":28},[33,110286,110287,110289,110291,110293,110295,110297,110299],{"class":35,"line":36},[33,110288,4435],{"class":39},[33,110290,102754],{"class":47},[33,110292,27296],{"class":39},[33,110294,33696],{"class":76},[33,110296,345],{"class":47},[33,110298,457],{"class":76},[33,110300,32039],{"class":47},[33,110302,110303],{"class":35,"line":51},[33,110304,102952],{"class":47},[14,110306,110307],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[23,110309,110311],{"className":31631,"code":110310,"language":31633,"meta":28,"style":28},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[30,110312,110313],{"__ignoreMap":28},[33,110314,110315,110318,110320,110322,110324],{"class":35,"line":36},[33,110316,110317],{"class":47},"renderer.update_scene(data, ",[33,110319,109768],{"class":955},[33,110321,73],{"class":39},[33,110323,109773],{"class":119},[33,110325,884],{"class":47},[14,110327,110328,110329,110331,110332,110335],{},"告诉 renderer：用当前 ",[30,110330,34654],{}," 的状态更新画面，并使用名为 ",[30,110333,110334],{},"fixed_camera"," 的相机视角。",[23,110337,110338],{"className":31631,"code":109233,"language":31633,"meta":28,"style":28},[30,110339,110340],{"__ignoreMap":28},[33,110341,110342,110344,110346],{"class":35,"line":36},[33,110343,108833],{"class":47},[33,110345,73],{"class":39},[33,110347,108838],{"class":47},[14,110349,110350,110351,110354],{},"真正渲染出图像。",[30,110352,110353],{},"image"," 是一个 NumPy 数组，不是文件。",[23,110356,110358],{"className":31631,"code":110357,"language":31633,"meta":28,"style":28},"Image.fromarray(image).save(output_path)\n",[30,110359,110360],{"__ignoreMap":28},[33,110361,110362],{"class":35,"line":36},[33,110363,110357],{"class":47},[14,110365,110366,110367,29638],{},"把数组转换成图片，并保存到 ",[30,110368,110369],{},"render_output.png",[23,110371,110373],{"className":31631,"code":110372,"language":31633,"meta":28,"style":28},"renderer.close()\n",[30,110374,110375],{"__ignoreMap":28},[33,110376,110377],{"class":35,"line":36},[33,110378,110372],{"class":47},[14,110380,110381],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[18,110383,103569],{"id":103568},[14,110385,110386,110387,110389,110390,29638],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[30,110388,110369],{},"，并输出图像数组形状，例如 ",[30,110391,110392],{},"(480, 640, 3)",[14,110394,110395],{},"如果图片里看不到方块，先检查：",[574,110397,110398,110401,110404],{},[564,110399,110400],{},"方块是否掉到相机视野外。",[564,110402,110403],{},"camera 位置是否合理。",[564,110405,110406,110407,110410],{},"是否在 ",[30,110408,110409],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[18,110412,103601],{"id":103600},[14,110414,110415],{},"运行 viewer:",[23,110417,110419],{"className":25074,"code":110418,"language":25076,"meta":28,"style":28},"python ch5_viewer.py\n",[30,110420,110421],{"__ignoreMap":28},[33,110422,110423,110425],{"class":35,"line":36},[33,110424,31633],{"class":43},[33,110426,109549],{"class":119},[14,110428,110429],{},"运行 renderer:",[23,110431,110433],{"className":25074,"code":110432,"language":25076,"meta":28,"style":28},"python ch5_renderer.py\n",[30,110434,110435],{"__ignoreMap":28},[33,110436,110437,110439],{"class":35,"line":36},[33,110438,31633],{"class":43},[33,110440,109878],{"class":119},[14,110442,110443],{},"如果在服务器上运行:",[23,110445,110447],{"className":25074,"code":110446,"language":25076,"meta":28,"style":28},"MUJOCO_GL=egl python ch5_renderer.py\n",[30,110448,110449],{"__ignoreMap":28},[33,110450,110451,110453,110455,110457,110460],{"class":35,"line":36},[33,110452,109067],{"class":47},[33,110454,73],{"class":39},[33,110456,109057],{"class":119},[33,110458,110459],{"class":43}," python",[33,110461,109878],{"class":119},[14,110463,109035],{},[23,110465,110467],{"className":25074,"code":110466,"language":25076,"meta":28,"style":28},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[30,110468,110469],{"__ignoreMap":28},[33,110470,110471,110473,110475,110477,110479],{"class":35,"line":36},[33,110472,109067],{"class":47},[33,110474,73],{"class":39},[33,110476,109061],{"class":119},[33,110478,110459],{"class":43},[33,110480,109878],{"class":119},[14,110482,110483],{},"再做几个练习：",[574,110485,110486,110493,110496,110502],{},[564,110487,110488,110489,110492],{},"把 renderer 分辨率改成 ",[30,110490,110491],{},"height=240, width=320","，观察输出 shape。",[564,110494,110495],{},"把方块颜色改成蓝色，重新保存图片。",[564,110497,110498,110499,110501],{},"把相机 ",[30,110500,105399],{}," 改远一点，观察画面中物体是否变小。",[564,110503,110504,110505,103667,110508,110511],{},"把 viewer 示例中的 ",[30,110506,110507],{},"data.time \u003C 5.0",[30,110509,110510],{},"data.time \u003C 20.0","，观察更长时间。",[18,110513,103706],{"id":103705},[1599,110515,110517],{"id":110516},"viewer-窗口打不开","viewer 窗口打不开",[14,110519,110520],{},"安装:",[23,110522,110524],{"className":25074,"code":110523,"language":25076,"meta":28,"style":28},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[30,110525,110526],{"__ignoreMap":28},[33,110527,110528,110530,110532,110534,110536,110538,110540,110542,110544,110546,110548],{"class":35,"line":36},[33,110529,25829],{"class":43},[33,110531,27568],{"class":119},[33,110533,25086],{"class":119},[33,110535,27653],{"class":76},[33,110537,103759],{"class":119},[33,110539,102087],{"class":119},[33,110541,103764],{"class":119},[33,110543,102100],{"class":119},[33,110545,102106],{"class":119},[33,110547,102097],{"class":119},[33,110549,110550],{"class":119}," libXinerama\n",[1599,110552,110554],{"id":110553},"glfwerror",[30,110555,110556],{},"GLFWError",[14,110558,110559],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[1599,110561,110563],{"id":110562},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,110565,110566,110567,83792,110569,110571],{},"尝试 ",[30,110568,102290],{},[30,110570,102293],{},"。可能存在版本差异。",[1599,110573,110574],{"id":110574},"保存图片是黑的",[14,110576,103828],{},[574,110578,110579,110582,110585,110595],{},[564,110580,110581],{},"XML 里是否有 light。",[564,110583,110584],{},"相机是否对着模型。",[564,110586,110587,110588,110591,110592,29638],{},"是否先 ",[30,110589,110590],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[30,110593,110594],{},"renderer.render()",[564,110596,110597],{},"物体是否已经掉出视野。",[1599,110599,110600],{"id":110600},"远程服务器没有显示器",[14,110602,110603],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[23,110605,110606],{"className":25074,"code":110446,"language":25076,"meta":28,"style":28},[30,110607,110608],{"__ignoreMap":28},[33,110609,110610,110612,110614,110616,110618],{"class":35,"line":36},[33,110611,109067],{"class":47},[33,110613,73],{"class":39},[33,110615,109057],{"class":119},[33,110617,110459],{"class":43},[33,110619,109878],{"class":119},[14,110621,110622],{},"如果 EGL 不可用，再尝试：",[23,110624,110625],{"className":25074,"code":110466,"language":25076,"meta":28,"style":28},[30,110626,110627],{"__ignoreMap":28},[33,110628,110629,110631,110633,110635,110637],{"class":35,"line":36},[33,110630,109067],{"class":47},[33,110632,73],{"class":39},[33,110634,109061],{"class":119},[33,110636,110459],{"class":43},[33,110638,109878],{"class":119},[18,110640,103860],{"id":103859},[14,110642,110643],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[574,110645,110646,110649,110652],{},[564,110647,110648],{},"先用 viewer 看模型和控制是否正常。",[564,110650,110651],{},"再用 renderer 保存图片或构造视觉观测。",[564,110653,110654],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1544,110656,110657],{},"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":28,"searchDepth":51,"depth":51,"links":110659},[110660,110661,110662,110667,110672,110673,110674,110681],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":110663},[110664,110665,110666],{"id":109164,"depth":57,"text":109165},{"id":109194,"depth":57,"text":109195},{"id":109229,"depth":57,"text":109230},{"id":102505,"depth":51,"text":102506,"children":110668},[110669,110670,110671],{"id":102825,"depth":57,"text":102825},{"id":109974,"depth":57,"text":109975},{"id":110152,"depth":57,"text":110153},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":110675},[110676,110677,110678,110679,110680],{"id":110516,"depth":57,"text":110517},{"id":110553,"depth":57,"text":110556},{"id":110562,"depth":57,"text":110563},{"id":110574,"depth":57,"text":110574},{"id":110600,"depth":57,"text":110600},{"id":103859,"depth":51,"text":103860},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108772,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110688,"title":110689,"body":110690,"description":28,"extension":1557,"meta":112601,"navigation":159,"path":112602,"seo":112603,"stem":112604,"__hash__":112605},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110691,"toc":112577},[110692,110695,110697,110700,110702,110721,110724,110730,110733,110735,110737,110761,110763,110777,110779,110820,110822,110833,110835,110838,110844,110847,110881,110884,110916,110919,110951,110955,110958,110998,111001,111007,111010,111016,111020,111023,111029,111032,111036,111039,111079,111081,111094,111097,111099,111681,111683,111695,111698,111709,111711,111714,111733,111745,111748,111769,111772,111775,111818,111821,111824,111844,111851,111853,111871,111886,111889,111895,111898,111904,111921,111928,111959,111970,112004,112015,112032,112041,112049,112054,112068,112071,112092,112098,112112,112117,112147,112157,112182,112190,112213,112216,112232,112235,112243,112249,112271,112284,112305,112314,112353,112364,112366,112369,112375,112378,112381,112387,112390,112410,112413,112415,112454,112456,112459,112467,112470,112473,112500,112503,112513,112519,112522,112528,112530,112536,112540,112543,112545,112548,112572,112575],[10,110693,110689],{"id":110694},"_6控制任务cartpole",[18,110696,101900],{"id":101899},[14,110698,110699],{},"本章搭建一个最小 Cartpole 控制任务。",[14,110701,105584],{},[574,110703,110704,110707,110709,110712,110715,110718],{},[564,110705,110706],{},"slide joint",[564,110708,107437],{},[564,110710,110711],{},"cart force actuator",[564,110713,110714],{},"状态观测",[564,110716,110717],{},"简单控制循环",[564,110719,110720],{},"reward 设计雏形",[14,110722,110723],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[23,110725,110728],{"className":110726,"code":110727,"language":6578,"meta":28},[6576],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[30,110729,110727],{"__ignoreMap":28},[14,110731,110732],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[18,110734,102023],{"id":102022},[14,110736,102026],{},[23,110738,110739],{"className":25074,"code":105641,"language":25076,"meta":28,"style":28},[30,110740,110741],{"__ignoreMap":28},[33,110742,110743,110745,110747,110749,110751,110753,110755,110757,110759],{"class":35,"line":36},[33,110744,25829],{"class":43},[33,110746,27568],{"class":119},[33,110748,25086],{"class":119},[33,110750,27653],{"class":76},[33,110752,105656],{"class":119},[33,110754,102051],{"class":119},[33,110756,103754],{"class":119},[33,110758,102067],{"class":119},[33,110760,105665],{"class":119},[14,110762,104072],{},[23,110764,110765],{"className":25074,"code":102172,"language":25076,"meta":28,"style":28},[30,110766,110767],{"__ignoreMap":28},[33,110768,110769,110771,110773,110775],{"class":35,"line":36},[33,110770,25083],{"class":43},[33,110772,25086],{"class":119},[33,110774,102183],{"class":119},[33,110776,102186],{"class":119},[14,110778,104089],{},[23,110780,110782],{"className":25074,"code":110781,"language":25076,"meta":28,"style":28},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[30,110783,110784,110801,110810],{"__ignoreMap":28},[33,110785,110786,110788,110790,110792,110795,110797,110799],{"class":35,"line":36},[33,110787,31583],{"class":43},[33,110789,30429],{"class":119},[33,110791,26368],{"class":76},[33,110793,110794],{"class":119}," mujoco-cartpole",[33,110796,102228],{"class":119},[33,110798,102231],{"class":76},[33,110800,102234],{"class":76},[33,110802,110803,110805,110807],{"class":35,"line":51},[33,110804,31583],{"class":43},[33,110806,102241],{"class":119},[33,110808,110809],{"class":119}," mujoco-cartpole\n",[33,110811,110812,110814,110816,110818],{"class":35,"line":57},[33,110813,25083],{"class":43},[33,110815,25086],{"class":119},[33,110817,102183],{"class":119},[33,110819,102186],{"class":119},[14,110821,102257],{},[574,110823,110824,110827,110830],{},[564,110825,110826],{},"本章不依赖 Gymnasium。",[564,110828,110829],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[564,110831,110832],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[18,110834,102298],{"id":102297},[14,110836,110837],{},"Cartpole 的模型结构:",[23,110839,110842],{"className":110840,"code":110841,"language":6578,"meta":28},[6576],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[30,110843,110841],{"__ignoreMap":28},[14,110845,110846],{},"小车通过 slide joint 左右移动:",[23,110848,110850],{"className":54320,"code":110849,"language":54322,"meta":28,"style":28},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[30,110851,110852],{"__ignoreMap":28},[33,110853,110854,110856,110858,110860,110862,110865,110867,110869,110872,110874,110876,110879],{"class":35,"line":36},[33,110855,875],{"class":47},[33,110857,104209],{"class":52553},[33,110859,16171],{"class":43},[33,110861,73],{"class":47},[33,110863,110864],{"class":119},"\"cart_x\"",[33,110866,55077],{"class":43},[33,110868,73],{"class":47},[33,110870,110871],{"class":119},"\"slide\"",[33,110873,107281],{"class":43},[33,110875,73],{"class":47},[33,110877,110878],{"class":119},"\"1 0 0\"",[33,110880,102397],{"class":47},[14,110882,110883],{},"杆子通过 hinge joint 旋转:",[23,110885,110887],{"className":54320,"code":110886,"language":54322,"meta":28,"style":28},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[30,110888,110889],{"__ignoreMap":28},[33,110890,110891,110893,110895,110897,110899,110902,110904,110906,110908,110910,110912,110914],{"class":35,"line":36},[33,110892,875],{"class":47},[33,110894,104209],{"class":52553},[33,110896,16171],{"class":43},[33,110898,73],{"class":47},[33,110900,110901],{"class":119},"\"pole_hinge\"",[33,110903,55077],{"class":43},[33,110905,73],{"class":47},[33,110907,107272],{"class":119},[33,110909,107281],{"class":43},[33,110911,73],{"class":47},[33,110913,107286],{"class":119},[33,110915,102397],{"class":47},[14,110917,110918],{},"控制力作用在小车 slide joint 上:",[23,110920,110922],{"className":54320,"code":110921,"language":54322,"meta":28,"style":28},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[30,110923,110924],{"__ignoreMap":28},[33,110925,110926,110928,110930,110932,110934,110937,110939,110941,110943,110945,110947,110949],{"class":35,"line":36},[33,110927,875],{"class":47},[33,110929,107327],{"class":52553},[33,110931,16171],{"class":43},[33,110933,73],{"class":47},[33,110935,110936],{"class":119},"\"cart_motor\"",[33,110938,107337],{"class":43},[33,110940,73],{"class":47},[33,110942,110864],{"class":119},[33,110944,107344],{"class":43},[33,110946,73],{"class":47},[33,110948,55569],{"class":119},[33,110950,102397],{"class":47},[1599,110952,110954],{"id":110953},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,110956,110957],{},"这个简化模型有两个关节：",[1756,110959,110960,110971],{},[1759,110961,110962],{},[1762,110963,110964,110966,110968],{},[1765,110965,104012],{"align":24988},[1765,110967,24989],{"align":24988},[1765,110969,110970],{"align":24988},"对应状态",[1802,110972,110973,110986],{},[1762,110974,110975,110980,110983],{},[1807,110976,110977],{"align":24988},[30,110978,110979],{},"cart_x",[1807,110981,110982],{"align":24988},"slide",[1807,110984,110985],{"align":24988},"小车 x 位置",[1762,110987,110988,110993,110995],{},[1807,110989,110990],{"align":24988},[30,110991,110992],{},"pole_hinge",[1807,110994,107093],{"align":24988},[1807,110996,110997],{"align":24988},"杆子角度",[14,110999,111000],{},"所以：",[23,111002,111005],{"className":111003,"code":111004,"language":6578,"meta":28},[6576],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[30,111006,111004],{"__ignoreMap":28},[14,111008,111009],{},"把它们拼起来就是观测：",[23,111011,111014],{"className":111012,"code":111013,"language":6578,"meta":28},[6576],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,111015,111013],{"__ignoreMap":28},[1599,111017,111019],{"id":111018},"action-是什么","action 是什么",[14,111021,111022],{},"本章只有一个 actuator：",[23,111024,111027],{"className":111025,"code":111026,"language":6578,"meta":28},[6576],"data.ctrl[0] = action\n",[30,111028,111026],{"__ignoreMap":28},[14,111030,111031],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[1599,111033,111035],{"id":111034},"reward-是什么","reward 是什么",[14,111037,111038],{},"奖励函数：",[23,111040,111042],{"className":31631,"code":111041,"language":31633,"meta":28,"style":28},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[30,111043,111044],{"__ignoreMap":28},[33,111045,111046,111048,111051,111053,111055,111057,111060,111062,111065,111067,111069,111071,111074,111076],{"class":35,"line":36},[33,111047,18297],{"class":39},[33,111049,111050],{"class":76}," float",[33,111052,345],{"class":47},[33,111054,103656],{"class":76},[33,111056,53524],{"class":39},[33,111058,111059],{"class":76}," 0.1",[33,111061,303],{"class":39},[33,111063,111064],{"class":47}," cart_x ",[33,111066,2057],{"class":39},[33,111068,111064],{"class":47},[33,111070,1199],{"class":39},[33,111072,111073],{"class":47}," pole_angle ",[33,111075,2057],{"class":39},[33,111077,111078],{"class":47}," pole_angle)\n",[14,111080,107479],{},[574,111082,111083,111088,111091],{},[564,111084,111085,111086,29638],{},"基础奖励是 ",[30,111087,103656],{},[564,111089,111090],{},"小车离中心越远，扣分越多。",[564,111092,111093],{},"杆子角度越大，扣分越多。",[14,111095,111096],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[18,111098,102506],{"id":102505},[23,111100,111102],{"className":31631,"code":111101,"language":31633,"meta":28,"style":28},"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",[30,111103,111104,111110,111120,111124,111128,111136,111141,111145,111149,111153,111158,111162,111167,111172,111177,111181,111186,111191,111196,111200,111204,111208,111212,111216,111221,111225,111229,111233,111237,111241,111251,111258,111262,111266,111280,111294,111307,111337,111341,111345,111357,111369,111377,111381,111394,111398,111402,111411,111415,111431,111441,111454,111467,111471,111494,111512,111516,111528,111532,111536,111546,111556,111560,111576,111617,111621,111641,111657,111661,111665,111677],{"__ignoreMap":28},[33,111105,111106,111108],{"class":35,"line":36},[33,111107,31645],{"class":39},[33,111109,102554],{"class":47},[33,111111,111112,111114,111116,111118],{"class":35,"line":51},[33,111113,31645],{"class":39},[33,111115,32633],{"class":47},[33,111117,32636],{"class":39},[33,111119,32639],{"class":47},[33,111121,111122],{"class":35,"line":57},[33,111123,160],{"emptyLinePlaceholder":159},[33,111125,111126],{"class":35,"line":64},[33,111127,160],{"emptyLinePlaceholder":159},[33,111129,111130,111132,111134],{"class":35,"line":83},[33,111131,102567],{"class":76},[33,111133,14815],{"class":39},[33,111135,102572],{"class":119},[33,111137,111138],{"class":35,"line":89},[33,111139,111140],{"class":119},"\u003Cmujoco model=\"cartpole\">\n",[33,111142,111143],{"class":35,"line":98},[33,111144,102582],{"class":119},[33,111146,111147],{"class":35,"line":110},[33,111148,160],{"emptyLinePlaceholder":159},[33,111150,111151],{"class":35,"line":134},[33,111152,102591],{"class":119},[33,111154,111155],{"class":35,"line":156},[33,111156,111157],{"class":119},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,111159,111160],{"class":35,"line":163},[33,111161,160],{"emptyLinePlaceholder":159},[33,111163,111164],{"class":35,"line":169},[33,111165,111166],{"class":119},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[33,111168,111169],{"class":35,"line":175},[33,111170,111171],{"class":119},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[33,111173,111174],{"class":35,"line":181},[33,111175,111176],{"class":119},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[33,111178,111179],{"class":35,"line":196},[33,111180,160],{"emptyLinePlaceholder":159},[33,111182,111183],{"class":35,"line":213},[33,111184,111185],{"class":119},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[33,111187,111188],{"class":35,"line":228},[33,111189,111190],{"class":119},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[33,111192,111193],{"class":35,"line":1345},[33,111194,111195],{"class":119},"        \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",[33,111197,111198],{"class":35,"line":1350},[33,111199,107691],{"class":119},[33,111201,111202],{"class":35,"line":1359},[33,111203,102620],{"class":119},[33,111205,111206],{"class":35,"line":1364},[33,111207,102625],{"class":119},[33,111209,111210],{"class":35,"line":1370},[33,111211,160],{"emptyLinePlaceholder":159},[33,111213,111214],{"class":35,"line":1425},[33,111215,107708],{"class":119},[33,111217,111218],{"class":35,"line":1438},[33,111219,111220],{"class":119},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,111222,111223],{"class":35,"line":1451},[33,111224,107718],{"class":119},[33,111226,111227],{"class":35,"line":1457},[33,111228,102630],{"class":119},[33,111230,111231],{"class":35,"line":1466},[33,111232,96951],{"class":119},[33,111234,111235],{"class":35,"line":1471},[33,111236,160],{"emptyLinePlaceholder":159},[33,111238,111239],{"class":35,"line":1477},[33,111240,160],{"emptyLinePlaceholder":159},[33,111242,111243,111245,111248],{"class":35,"line":1504},[33,111244,33200],{"class":39},[33,111246,111247],{"class":43}," get_observation",[33,111249,111250],{"class":47},"(data: mujoco.MjData) -> np.ndarray:\n",[33,111252,111253,111255],{"class":35,"line":1509},[33,111254,5489],{"class":39},[33,111256,111257],{"class":47}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,111259,111260],{"class":35,"line":1525},[33,111261,160],{"emptyLinePlaceholder":159},[33,111263,111264],{"class":35,"line":1535},[33,111265,160],{"emptyLinePlaceholder":159},[33,111267,111268,111270,111273,111276,111278],{"class":35,"line":1540},[33,111269,33200],{"class":39},[33,111271,111272],{"class":43}," compute_reward",[33,111274,111275],{"class":47},"(obs: np.ndarray) -> ",[33,111277,1666],{"class":76},[33,111279,5141],{"class":47},[33,111281,111282,111285,111287,111290,111292],{"class":35,"line":4027},[33,111283,111284],{"class":47},"    cart_x ",[33,111286,73],{"class":39},[33,111288,111289],{"class":47}," obs[",[33,111291,766],{"class":76},[33,111293,34499],{"class":47},[33,111295,111296,111299,111301,111303,111305],{"class":35,"line":4032},[33,111297,111298],{"class":47},"    pole_angle ",[33,111300,73],{"class":39},[33,111302,111289],{"class":47},[33,111304,701],{"class":76},[33,111306,34499],{"class":47},[33,111308,111309,111311,111313,111315,111317,111319,111321,111323,111325,111327,111329,111331,111333,111335],{"class":35,"line":9199},[33,111310,5489],{"class":39},[33,111312,111050],{"class":76},[33,111314,345],{"class":47},[33,111316,103656],{"class":76},[33,111318,53524],{"class":39},[33,111320,111059],{"class":76},[33,111322,303],{"class":39},[33,111324,111064],{"class":47},[33,111326,2057],{"class":39},[33,111328,111064],{"class":47},[33,111330,1199],{"class":39},[33,111332,111073],{"class":47},[33,111334,2057],{"class":39},[33,111336,111078],{"class":47},[33,111338,111339],{"class":35,"line":9223},[33,111340,160],{"emptyLinePlaceholder":159},[33,111342,111343],{"class":35,"line":9228},[33,111344,160],{"emptyLinePlaceholder":159},[33,111346,111347,111349,111351,111353,111355],{"class":35,"line":9234},[33,111348,33200],{"class":39},[33,111350,44],{"class":43},[33,111352,102651],{"class":47},[33,111354,96939],{"class":76},[33,111356,5141],{"class":47},[33,111358,111359,111361,111363,111365,111367],{"class":35,"line":9261},[33,111360,102660],{"class":47},[33,111362,73],{"class":39},[33,111364,102665],{"class":47},[33,111366,102567],{"class":76},[33,111368,884],{"class":47},[33,111370,111371,111373,111375],{"class":35,"line":9266},[33,111372,102674],{"class":47},[33,111374,73],{"class":39},[33,111376,102679],{"class":47},[33,111378,111379],{"class":35,"line":9272},[33,111380,160],{"emptyLinePlaceholder":159},[33,111382,111383,111385,111387,111389,111391],{"class":35,"line":9284},[33,111384,106322],{"class":47},[33,111386,701],{"class":76},[33,111388,5840],{"class":47},[33,111390,73],{"class":39},[33,111392,111393],{"class":76}," 0.1\n",[33,111395,111396],{"class":35,"line":9296},[33,111397,106335],{"class":47},[33,111399,111400],{"class":35,"line":9308},[33,111401,160],{"emptyLinePlaceholder":159},[33,111403,111404,111407,111409],{"class":35,"line":10967},[33,111405,111406],{"class":47},"    total_reward ",[33,111408,73],{"class":39},[33,111410,106014],{"class":76},[33,111412,111413],{"class":35,"line":10992},[33,111414,160],{"emptyLinePlaceholder":159},[33,111416,111417,111419,111421,111423,111425,111427,111429],{"class":35,"line":11015},[33,111418,857],{"class":39},[33,111420,32869],{"class":47},[33,111422,27296],{"class":39},[33,111424,33696],{"class":76},[33,111426,345],{"class":47},[33,111428,191],{"class":76},[33,111430,32039],{"class":47},[33,111432,111433,111436,111438],{"class":35,"line":11039},[33,111434,111435],{"class":47},"        obs ",[33,111437,73],{"class":39},[33,111439,111440],{"class":47}," get_observation(data)\n",[33,111442,111443,111446,111448,111450,111452],{"class":35,"line":11044},[33,111444,111445],{"class":47},"        pole_angle ",[33,111447,73],{"class":39},[33,111449,111289],{"class":47},[33,111451,701],{"class":76},[33,111453,34499],{"class":47},[33,111455,111456,111459,111461,111463,111465],{"class":35,"line":11049},[33,111457,111458],{"class":47},"        pole_angular_velocity ",[33,111460,73],{"class":39},[33,111462,111289],{"class":47},[33,111464,712],{"class":76},[33,111466,34499],{"class":47},[33,111468,111469],{"class":35,"line":11054},[33,111470,160],{"emptyLinePlaceholder":159},[33,111472,111473,111476,111478,111481,111483,111485,111487,111489,111491],{"class":35,"line":11063},[33,111474,111475],{"class":47},"        action ",[33,111477,73],{"class":39},[33,111479,111480],{"class":76}," 2.0",[33,111482,303],{"class":39},[33,111484,111073],{"class":47},[33,111486,1271],{"class":39},[33,111488,63120],{"class":76},[33,111490,303],{"class":39},[33,111492,111493],{"class":47}," pole_angular_velocity\n",[33,111495,111496,111498,111500,111502,111504,111506,111508,111510],{"class":35,"line":11068},[33,111497,111475],{"class":47},[33,111499,73],{"class":39},[33,111501,108700],{"class":47},[33,111503,1199],{"class":39},[33,111505,103656],{"class":76},[33,111507,13686],{"class":47},[33,111509,103656],{"class":76},[33,111511,884],{"class":47},[33,111513,111514],{"class":35,"line":11074},[33,111515,160],{"emptyLinePlaceholder":159},[33,111517,111518,111520,111522,111524,111526],{"class":35,"line":11095},[33,111519,107870],{"class":47},[33,111521,766],{"class":76},[33,111523,5840],{"class":47},[33,111525,73],{"class":39},[33,111527,108723],{"class":47},[33,111529,111530],{"class":35,"line":11101},[33,111531,102769],{"class":47},[33,111533,111534],{"class":35,"line":11115},[33,111535,160],{"emptyLinePlaceholder":159},[33,111537,111538,111541,111543],{"class":35,"line":11121},[33,111539,111540],{"class":47},"        reward ",[33,111542,73],{"class":39},[33,111544,111545],{"class":47}," compute_reward(get_observation(data))\n",[33,111547,111548,111551,111553],{"class":35,"line":11148},[33,111549,111550],{"class":47},"        total_reward ",[33,111552,10728],{"class":39},[33,111554,111555],{"class":47}," reward\n",[33,111557,111558],{"class":35,"line":11157},[33,111559,160],{"emptyLinePlaceholder":159},[33,111561,111562,111564,111566,111568,111570,111572,111574],{"class":35,"line":11163},[33,111563,3915],{"class":39},[33,111565,32869],{"class":47},[33,111567,1939],{"class":39},[33,111569,7141],{"class":76},[33,111571,102812],{"class":39},[33,111573,5492],{"class":76},[33,111575,5141],{"class":47},[33,111577,111578,111580,111582,111585,111588,111591,111594,111596,111599,111602,111604,111606,111608,111610,111613,111615],{"class":35,"line":11171},[33,111579,35903],{"class":76},[33,111581,345],{"class":47},[33,111583,111584],{"class":119},"\"step:\"",[33,111586,111587],{"class":47},", step, ",[33,111589,111590],{"class":119},"\"obs:\"",[33,111592,111593],{"class":47},", np.round(obs, ",[33,111595,712],{"class":76},[33,111597,111598],{"class":47},"), ",[33,111600,111601],{"class":119},"\"action:\"",[33,111603,13686],{"class":47},[33,111605,33271],{"class":76},[33,111607,345],{"class":47},[33,111609,1666],{"class":76},[33,111611,111612],{"class":47},"(action), ",[33,111614,712],{"class":76},[33,111616,31750],{"class":47},[33,111618,111619],{"class":35,"line":11176},[33,111620,160],{"emptyLinePlaceholder":159},[33,111622,111623,111625,111627,111630,111632,111634,111637,111639],{"class":35,"line":17855},[33,111624,32552],{"class":76},[33,111626,345],{"class":47},[33,111628,111629],{"class":119},"\"total_reward:\"",[33,111631,13686],{"class":47},[33,111633,33271],{"class":76},[33,111635,111636],{"class":47},"(total_reward, ",[33,111638,712],{"class":76},[33,111640,31750],{"class":47},[33,111642,111643,111645,111647,111650,111653,111655],{"class":35,"line":17861},[33,111644,32552],{"class":76},[33,111646,345],{"class":47},[33,111648,111649],{"class":119},"\"final obs:\"",[33,111651,111652],{"class":47},", np.round(get_observation(data), ",[33,111654,712],{"class":76},[33,111656,31750],{"class":47},[33,111658,111659],{"class":35,"line":17884},[33,111660,160],{"emptyLinePlaceholder":159},[33,111662,111663],{"class":35,"line":17890},[33,111664,160],{"emptyLinePlaceholder":159},[33,111666,111667,111669,111671,111673,111675],{"class":35,"line":17913},[33,111668,2987],{"class":39},[33,111670,32473],{"class":76},[33,111672,102812],{"class":39},[33,111674,102815],{"class":119},[33,111676,5141],{"class":47},[33,111678,111679],{"class":35,"line":17927},[33,111680,102822],{"class":47},[14,111682,104823],{},[23,111684,111686],{"className":25074,"code":111685,"language":25076,"meta":28,"style":28},"touch ch6_cartpole.py\n",[30,111687,111688],{"__ignoreMap":28},[33,111689,111690,111692],{"class":35,"line":36},[33,111691,102536],{"class":43},[33,111693,111694],{"class":119}," ch6_cartpole.py\n",[14,111696,111697],{},"运行：",[23,111699,111701],{"className":25074,"code":111700,"language":25076,"meta":28,"style":28},"python ch6_cartpole.py\n",[30,111702,111703],{"__ignoreMap":28},[33,111704,111705,111707],{"class":35,"line":36},[33,111706,31633],{"class":43},[33,111708,111694],{"class":119},[1599,111710,102825],{"id":102825},[14,111712,111713],{},"构造观测：",[23,111715,111717],{"className":31631,"code":111716,"language":31633,"meta":28,"style":28},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[30,111718,111719,111727],{"__ignoreMap":28},[33,111720,111721,111723,111725],{"class":35,"line":36},[33,111722,33200],{"class":39},[33,111724,111247],{"class":43},[33,111726,111250],{"class":47},[33,111728,111729,111731],{"class":35,"line":51},[33,111730,5489],{"class":39},[33,111732,111257],{"class":47},[14,111734,111735,111738,111739,111741,111742,111744],{},[30,111736,111737],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[30,111740,105283],{}," 2 维，",[30,111743,105613],{}," 2 维，所以 obs 是 4 维。",[14,111746,111747],{},"设置初始角度：",[23,111749,111751],{"className":31631,"code":111750,"language":31633,"meta":28,"style":28},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[30,111752,111753,111765],{"__ignoreMap":28},[33,111754,111755,111757,111759,111761,111763],{"class":35,"line":36},[33,111756,105952],{"class":47},[33,111758,701],{"class":76},[33,111760,5840],{"class":47},[33,111762,73],{"class":39},[33,111764,111393],{"class":76},[33,111766,111767],{"class":35,"line":51},[33,111768,105796],{"class":47},[14,111770,111771],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,111773,111774],{},"简单反馈控制：",[23,111776,111778],{"className":31631,"code":111777,"language":31633,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[30,111779,111780,111800],{"__ignoreMap":28},[33,111781,111782,111784,111786,111788,111790,111792,111794,111796,111798],{"class":35,"line":36},[33,111783,108695],{"class":47},[33,111785,73],{"class":39},[33,111787,111480],{"class":76},[33,111789,303],{"class":39},[33,111791,111073],{"class":47},[33,111793,1271],{"class":39},[33,111795,63120],{"class":76},[33,111797,303],{"class":39},[33,111799,111493],{"class":47},[33,111801,111802,111804,111806,111808,111810,111812,111814,111816],{"class":35,"line":51},[33,111803,108695],{"class":47},[33,111805,73],{"class":39},[33,111807,108700],{"class":47},[33,111809,1199],{"class":39},[33,111811,103656],{"class":76},[33,111813,13686],{"class":47},[33,111815,103656],{"class":76},[33,111817,884],{"class":47},[14,111819,111820],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,111822,111823],{},"限制动作：",[23,111825,111827],{"className":31631,"code":111826,"language":31633,"meta":28,"style":28},"np.clip(action, -1.0, 1.0)\n",[30,111828,111829],{"__ignoreMap":28},[33,111830,111831,111834,111836,111838,111840,111842],{"class":35,"line":36},[33,111832,111833],{"class":47},"np.clip(action, ",[33,111835,1199],{"class":39},[33,111837,103656],{"class":76},[33,111839,13686],{"class":47},[33,111841,103656],{"class":76},[33,111843,884],{"class":47},[14,111845,111846,111847,111850],{},"因为 XML 里 ",[30,111848,111849],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[1599,111852,102961],{"id":102961},[23,111854,111855],{"className":31631,"code":111716,"language":31633,"meta":28,"style":28},[30,111856,111857,111865],{"__ignoreMap":28},[33,111858,111859,111861,111863],{"class":35,"line":36},[33,111860,33200],{"class":39},[33,111862,111247],{"class":43},[33,111864,111250],{"class":47},[33,111866,111867,111869],{"class":35,"line":51},[33,111868,5489],{"class":39},[33,111870,111257],{"class":47},[14,111872,111873,111874,111877,111878,111881,111882,111885],{},"这段定义了一个函数，用来获取当前观测。",[30,111875,111876],{},"data.qpos.copy()"," 是位置数组副本，",[30,111879,111880],{},"data.qvel.copy()"," 是速度数组副本。",[30,111883,111884],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,111887,111888],{},"在本章模型里：",[23,111890,111893],{"className":111891,"code":111892,"language":6578,"meta":28},[6576],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[30,111894,111892],{"__ignoreMap":28},[14,111896,111897],{},"所以返回的 obs 是：",[23,111899,111902],{"className":111900,"code":111901,"language":6578,"meta":28},[6576],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[30,111903,111901],{"__ignoreMap":28},[23,111905,111907],{"className":31631,"code":111906,"language":31633,"meta":28,"style":28},"def compute_reward(obs: np.ndarray) -> float:\n",[30,111908,111909],{"__ignoreMap":28},[33,111910,111911,111913,111915,111917,111919],{"class":35,"line":36},[33,111912,33200],{"class":39},[33,111914,111272],{"class":43},[33,111916,111275],{"class":47},[33,111918,1666],{"class":76},[33,111920,5141],{"class":47},[14,111922,111923,111924,111927],{},"这行定义奖励函数。输入是观测 ",[30,111925,111926],{},"obs","，输出是一个浮点数奖励。",[23,111929,111931],{"className":31631,"code":111930,"language":31633,"meta":28,"style":28},"cart_x = obs[0]\npole_angle = obs[1]\n",[30,111932,111933,111946],{"__ignoreMap":28},[33,111934,111935,111938,111940,111942,111944],{"class":35,"line":36},[33,111936,111937],{"class":47},"cart_x ",[33,111939,73],{"class":39},[33,111941,111289],{"class":47},[33,111943,766],{"class":76},[33,111945,34499],{"class":47},[33,111947,111948,111951,111953,111955,111957],{"class":35,"line":51},[33,111949,111950],{"class":47},"pole_angle ",[33,111952,73],{"class":39},[33,111954,111289],{"class":47},[33,111956,701],{"class":76},[33,111958,34499],{"class":47},[14,111960,111961,111962,111965,111966,111969],{},"数组索引从 0 开始。",[30,111963,111964],{},"obs[0]"," 是第一个元素，也就是小车位置。",[30,111967,111968],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[23,111971,111972],{"className":31631,"code":111041,"language":31633,"meta":28,"style":28},[30,111973,111974],{"__ignoreMap":28},[33,111975,111976,111978,111980,111982,111984,111986,111988,111990,111992,111994,111996,111998,112000,112002],{"class":35,"line":36},[33,111977,18297],{"class":39},[33,111979,111050],{"class":76},[33,111981,345],{"class":47},[33,111983,103656],{"class":76},[33,111985,53524],{"class":39},[33,111987,111059],{"class":76},[33,111989,303],{"class":39},[33,111991,111064],{"class":47},[33,111993,2057],{"class":39},[33,111995,111064],{"class":47},[33,111997,1199],{"class":39},[33,111999,111073],{"class":47},[33,112001,2057],{"class":39},[33,112003,111078],{"class":47},[14,112005,112006,112007,112010,112011,112014],{},"这行计算奖励。",[30,112008,112009],{},"cart_x * cart_x"," 是小车位置的平方，",[30,112012,112013],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[23,112016,112018],{"className":31631,"code":112017,"language":31633,"meta":28,"style":28},"data.qpos[1] = 0.1\n",[30,112019,112020],{"__ignoreMap":28},[33,112021,112022,112024,112026,112028,112030],{"class":35,"line":36},[33,112023,105952],{"class":47},[33,112025,701],{"class":76},[33,112027,5840],{"class":47},[33,112029,73],{"class":39},[33,112031,111393],{"class":76},[14,112033,112034,112035,112037,112038,112040],{},"手动设置杆子的初始角度。因为 ",[30,112036,106709],{}," 是小车位置，",[30,112039,106712],{}," 是杆子角度，所以这里改的是杆子。",[23,112042,112043],{"className":31631,"code":105796,"language":31633,"meta":28,"style":28},[30,112044,112045],{"__ignoreMap":28},[33,112046,112047],{"class":35,"line":36},[33,112048,105796],{"class":47},[14,112050,106755,112051,112053],{},[30,112052,105283],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[23,112055,112057],{"className":31631,"code":112056,"language":31633,"meta":28,"style":28},"total_reward = 0.0\n",[30,112058,112059],{"__ignoreMap":28},[33,112060,112061,112064,112066],{"class":35,"line":36},[33,112062,112063],{"class":47},"total_reward ",[33,112065,73],{"class":39},[33,112067,106014],{"class":76},[14,112069,112070],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[23,112072,112074],{"className":31631,"code":112073,"language":31633,"meta":28,"style":28},"for step in range(1000):\n",[30,112075,112076],{"__ignoreMap":28},[33,112077,112078,112080,112082,112084,112086,112088,112090],{"class":35,"line":36},[33,112079,4435],{"class":39},[33,112081,32869],{"class":47},[33,112083,27296],{"class":39},[33,112085,33696],{"class":76},[33,112087,345],{"class":47},[33,112089,191],{"class":76},[33,112091,32039],{"class":47},[14,112093,112094,112095,112097],{},"循环 1000 步。",[30,112096,108387],{}," 是当前步数，从 0 到 999。",[23,112099,112101],{"className":31631,"code":112100,"language":31633,"meta":28,"style":28},"obs = get_observation(data)\n",[30,112102,112103],{"__ignoreMap":28},[33,112104,112105,112108,112110],{"class":35,"line":36},[33,112106,112107],{"class":47},"obs ",[33,112109,73],{"class":39},[33,112111,111440],{"class":47},[14,112113,112114,112115,29638],{},"读取当前状态，保存到 ",[30,112116,111926],{},[23,112118,112120],{"className":31631,"code":112119,"language":31633,"meta":28,"style":28},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[30,112121,112122,112134],{"__ignoreMap":28},[33,112123,112124,112126,112128,112130,112132],{"class":35,"line":36},[33,112125,111950],{"class":47},[33,112127,73],{"class":39},[33,112129,111289],{"class":47},[33,112131,701],{"class":76},[33,112133,34499],{"class":47},[33,112135,112136,112139,112141,112143,112145],{"class":35,"line":51},[33,112137,112138],{"class":47},"pole_angular_velocity ",[33,112140,73],{"class":39},[33,112142,111289],{"class":47},[33,112144,712],{"class":76},[33,112146,34499],{"class":47},[14,112148,112149,112150,112153,112154,29638],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[30,112151,112152],{},"obs[3]","？因为 obs 的顺序是 ",[30,112155,112156],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[23,112158,112160],{"className":31631,"code":112159,"language":31633,"meta":28,"style":28},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[30,112161,112162],{"__ignoreMap":28},[33,112163,112164,112166,112168,112170,112172,112174,112176,112178,112180],{"class":35,"line":36},[33,112165,108695],{"class":47},[33,112167,73],{"class":39},[33,112169,111480],{"class":76},[33,112171,303],{"class":39},[33,112173,111073],{"class":47},[33,112175,1271],{"class":39},[33,112177,63120],{"class":76},[33,112179,303],{"class":39},[33,112181,111493],{"class":47},[14,112183,112184,112185,102271,112187,112189],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[30,112186,106513],{},[30,112188,36582],{}," 是人为设置的系数，不是固定公式。",[23,112191,112193],{"className":31631,"code":112192,"language":31633,"meta":28,"style":28},"action = np.clip(action, -1.0, 1.0)\n",[30,112194,112195],{"__ignoreMap":28},[33,112196,112197,112199,112201,112203,112205,112207,112209,112211],{"class":35,"line":36},[33,112198,108695],{"class":47},[33,112200,73],{"class":39},[33,112202,108700],{"class":47},[33,112204,1199],{"class":39},[33,112206,103656],{"class":76},[33,112208,13686],{"class":47},[33,112210,103656],{"class":76},[33,112212,884],{"class":47},[14,112214,112215],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[23,112217,112218],{"className":31631,"code":111026,"language":31633,"meta":28,"style":28},[30,112219,112220],{"__ignoreMap":28},[33,112221,112222,112224,112226,112228,112230],{"class":35,"line":36},[33,112223,107124],{"class":47},[33,112225,766],{"class":76},[33,112227,5840],{"class":47},[33,112229,73],{"class":39},[33,112231,108723],{"class":47},[14,112233,112234],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[23,112236,112237],{"className":31631,"code":105758,"language":31633,"meta":28,"style":28},[30,112238,112239],{"__ignoreMap":28},[33,112240,112241],{"class":35,"line":36},[33,112242,105758],{"class":47},[14,112244,112245,112246,112248],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[30,112247,107379],{}," 计算小车和杆子的下一刻状态。",[23,112250,112252],{"className":31631,"code":112251,"language":31633,"meta":28,"style":28},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[30,112253,112254,112263],{"__ignoreMap":28},[33,112255,112256,112259,112261],{"class":35,"line":36},[33,112257,112258],{"class":47},"reward ",[33,112260,73],{"class":39},[33,112262,111545],{"class":47},[33,112264,112265,112267,112269],{"class":35,"line":51},[33,112266,112063],{"class":47},[33,112268,10728],{"class":39},[33,112270,111555],{"class":47},[14,112272,112273,112274,112276,112277,112280,112281,29638],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[30,112275,10728],{}," 是简写，",[30,112278,112279],{},"total_reward += reward"," 等价于 ",[30,112282,112283],{},"total_reward = total_reward + reward",[23,112285,112287],{"className":31631,"code":112286,"language":31633,"meta":28,"style":28},"if step % 100 == 0:\n",[30,112288,112289],{"__ignoreMap":28},[33,112290,112291,112293,112295,112297,112299,112301,112303],{"class":35,"line":36},[33,112292,2987],{"class":39},[33,112294,32869],{"class":47},[33,112296,1939],{"class":39},[33,112298,7141],{"class":76},[33,112300,102812],{"class":39},[33,112302,5492],{"class":76},[33,112304,5141],{"class":47},[14,112306,112307,112309,112310,112313],{},[30,112308,1939],{}," 是取余数。",[30,112311,112312],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[23,112315,112317],{"className":31631,"code":112316,"language":31633,"meta":28,"style":28},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[30,112318,112319],{"__ignoreMap":28},[33,112320,112321,112323,112325,112327,112329,112331,112333,112335,112337,112339,112341,112343,112345,112347,112349,112351],{"class":35,"line":36},[33,112322,31668],{"class":76},[33,112324,345],{"class":47},[33,112326,111584],{"class":119},[33,112328,111587],{"class":47},[33,112330,111590],{"class":119},[33,112332,111593],{"class":47},[33,112334,712],{"class":76},[33,112336,111598],{"class":47},[33,112338,111601],{"class":119},[33,112340,13686],{"class":47},[33,112342,33271],{"class":76},[33,112344,345],{"class":47},[33,112346,1666],{"class":76},[33,112348,111612],{"class":47},[33,112350,712],{"class":76},[33,112352,31750],{"class":47},[14,112354,112355,112356,112359,112360,112363],{},"打印当前步数、观测和动作。",[30,112357,112358],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[30,112361,112362],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[18,112365,103569],{"id":103568},[14,112367,112368],{},"观测向量:",[23,112370,112373],{"className":112371,"code":112372,"language":6578,"meta":28},[6576],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[30,112374,112372],{"__ignoreMap":28},[14,112376,112377],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,112379,112380],{},"每隔 100 步会打印一次：",[23,112382,112385],{"className":112383,"code":112384,"language":6578,"meta":28},[6576],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[30,112386,112384],{"__ignoreMap":28},[14,112388,112389],{},"重点观察：",[574,112391,112392,112398,112403],{},[564,112393,112394,112397],{},[30,112395,112396],{},"pole_angle"," 是否越来越大。",[564,112399,112400,112402],{},[30,112401,110979],{}," 是否跑得太远。",[564,112404,112405,112406,83792,112408,29638],{},"action 是否经常被 clip 到 ",[30,112407,105168],{},[30,112409,701],{},[14,112411,112412],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[18,112414,103601],{"id":103600},[574,112416,112417,112423,112426,112432,112442,112448,112451],{},[564,112418,112419,112420,29638],{},"把初始角度改为 ",[30,112421,112422],{},"data.qpos[1] = 0.3",[564,112424,112425],{},"重新运行，观察控制是否变差。",[564,112427,112428,112429,112431],{},"把 actuator ",[30,112430,108320],{}," 改小。",[564,112433,112434,112435,112438,112439,29638],{},"打印 ",[30,112436,112437],{},"model.nq, model.nv, model.nu","，应为 ",[30,112440,112441],{},"2 2 1",[564,112443,112444,112445,112447],{},"把 reward 里的 ",[30,112446,112013],{}," 系数改大，观察总奖励变化。",[564,112449,112450],{},"把控制器改成反号，观察杆子是否更容易倒。",[564,112452,112453],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[18,112455,103706],{"id":103705},[1599,112457,112458],{"id":112458},"杆子方向和预期不一致",[14,112460,103649,112461,112463,112464,112466],{},[30,112462,107492],{}," 和 capsule 的 ",[30,112465,104429],{},"，必要时用 viewer 可视化确认。",[1599,112468,112469],{"id":112469},"控制器越控越倒",[14,112471,112472],{},"说明反馈符号可能反了，尝试:",[23,112474,112476],{"className":31631,"code":112475,"language":31633,"meta":28,"style":28},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[30,112477,112478],{"__ignoreMap":28},[33,112479,112480,112482,112484,112486,112488,112490,112492,112494,112496,112498],{"class":35,"line":36},[33,112481,108695],{"class":47},[33,112483,73],{"class":39},[33,112485,53524],{"class":39},[33,112487,106513],{"class":76},[33,112489,303],{"class":39},[33,112491,111073],{"class":47},[33,112493,1199],{"class":39},[33,112495,63120],{"class":76},[33,112497,303],{"class":39},[33,112499,111493],{"class":47},[1599,112501,112502],{"id":112502},"小车飞走",[14,112504,112505,112506,112508,112509,112512],{},"降低 ",[30,112507,108320],{}," 或缩小 ",[30,112510,112511],{},"action"," 的 clip 范围。",[1599,112514,112516,112518],{"id":112515},"obs3-为什么是杆子角速度",[30,112517,112152],{}," 为什么是杆子角速度",[14,112520,112521],{},"因为这个模型里：",[23,112523,112526],{"className":112524,"code":112525,"language":6578,"meta":28},[6576],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[30,112527,112525],{"__ignoreMap":28},[14,112529,111000],{},[23,112531,112534],{"className":112532,"code":112533,"language":6578,"meta":28},[6576],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[30,112535,112533],{"__ignoreMap":28},[1599,112537,112539],{"id":112538},"reward-变成负数是否错误","reward 变成负数是否错误",[14,112541,112542],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[18,112544,103860],{"id":103859},[14,112546,112547],{},"一个控制任务通常包含：",[574,112549,112550,112553,112561,112566,112569],{},[564,112551,112552],{},"模型：Cartpole 的 body、joint、actuator。",[564,112554,112555,112556,1829,112558,112560],{},"观测：从 ",[30,112557,105283],{},[30,112559,105613],{}," 里取状态。",[564,112562,112563,112564,29638],{},"动作：写入 ",[30,112565,102329],{},[564,112567,112568],{},"奖励：根据任务目标打分。",[564,112570,112571],{},"循环：obs -> action -> step -> reward。",[14,112573,112574],{},"这就是后面 Gymnasium 环境的基本骨架。",[1544,112576,105539],{},{"title":28,"searchDepth":51,"depth":51,"links":112578},[112579,112580,112581,112586,112590,112591,112592,112600],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":112582},[112583,112584,112585],{"id":110953,"depth":57,"text":110954},{"id":111018,"depth":57,"text":111019},{"id":111034,"depth":57,"text":111035},{"id":102505,"depth":51,"text":102506,"children":112587},[112588,112589],{"id":102825,"depth":57,"text":102825},{"id":102961,"depth":57,"text":102961},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":112593},[112594,112595,112596,112597,112599],{"id":112458,"depth":57,"text":112458},{"id":112469,"depth":57,"text":112469},{"id":112502,"depth":57,"text":112502},{"id":112515,"depth":57,"text":112598},"obs[3] 为什么是杆子角速度",{"id":112538,"depth":57,"text":112539},{"id":103859,"depth":51,"text":103860},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110689,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112607,"title":112608,"body":112609,"description":28,"extension":1557,"meta":114623,"navigation":159,"path":114624,"seo":114625,"stem":114626,"__hash__":114627},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112610,"toc":114599},[112611,112614,112616,112619,112621,112638,112641,112644,112650,112653,112655,112657,112681,112683,112697,112699,112740,112742,112760,112762,112765,112771,112774,112802,112806,112812,112837,112840,112871,112878,112881,112884,112890,112893,112899,112902,112908,112912,112915,112940,112943,112945,113705,113707,113719,113721,113732,113734,113737,113754,113757,113759,113770,113773,113775,113821,113824,113837,113840,113922,113925,113927,113943,113953,113966,113969,114008,114018,114029,114039,114052,114055,114084,114087,114097,114100,114106,114123,114134,114136,114142,114159,114170,114191,114194,114206,114209,114230,114233,114241,114249,114266,114269,114338,114345,114353,114356,114369,114376,114378,114381,114387,114390,114393,114399,114405,114407,114447,114449,114455,114464,114467,114469,114489,114492,114495,114501,114505,114507,114534,114537,114540,114567,114573,114576,114579,114581,114584,114587,114593,114596],[10,112612,112608],{"id":112613},"_7控制任务reacher-机械臂到达目标",[18,112615,101900],{"id":101899},[14,112617,112618],{},"本章搭建一个二维两关节 reacher 任务。",[14,112620,105584],{},[574,112622,112623,112626,112629,112632,112635],{},[564,112624,112625],{},"两个 hinge joint",[564,112627,112628],{},"两个 motor actuator",[564,112630,112631],{},"site 作为末端点和目标点",[564,112633,112634],{},"根据末端和目标距离设计 reward",[564,112636,112637],{},"构造机械臂任务的基本形式",[14,112639,112640],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,112642,112643],{},"Reacher 任务可以理解为：",[23,112645,112648],{"className":112646,"code":112647,"language":6578,"meta":28},[6576],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[30,112649,112647],{"__ignoreMap":28},[14,112651,112652],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[18,112654,102023],{"id":102022},[14,112656,102026],{},[23,112658,112659],{"className":25074,"code":105641,"language":25076,"meta":28,"style":28},[30,112660,112661],{"__ignoreMap":28},[33,112662,112663,112665,112667,112669,112671,112673,112675,112677,112679],{"class":35,"line":36},[33,112664,25829],{"class":43},[33,112666,27568],{"class":119},[33,112668,25086],{"class":119},[33,112670,27653],{"class":76},[33,112672,105656],{"class":119},[33,112674,102051],{"class":119},[33,112676,103754],{"class":119},[33,112678,102067],{"class":119},[33,112680,105665],{"class":119},[14,112682,104072],{},[23,112684,112685],{"className":25074,"code":102172,"language":25076,"meta":28,"style":28},[30,112686,112687],{"__ignoreMap":28},[33,112688,112689,112691,112693,112695],{"class":35,"line":36},[33,112690,25083],{"class":43},[33,112692,25086],{"class":119},[33,112694,102183],{"class":119},[33,112696,102186],{"class":119},[14,112698,104089],{},[23,112700,112702],{"className":25074,"code":112701,"language":25076,"meta":28,"style":28},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[30,112703,112704,112721,112730],{"__ignoreMap":28},[33,112705,112706,112708,112710,112712,112715,112717,112719],{"class":35,"line":36},[33,112707,31583],{"class":43},[33,112709,30429],{"class":119},[33,112711,26368],{"class":76},[33,112713,112714],{"class":119}," mujoco-reacher",[33,112716,102228],{"class":119},[33,112718,102231],{"class":76},[33,112720,102234],{"class":76},[33,112722,112723,112725,112727],{"class":35,"line":51},[33,112724,31583],{"class":43},[33,112726,102241],{"class":119},[33,112728,112729],{"class":119}," mujoco-reacher\n",[33,112731,112732,112734,112736,112738],{"class":35,"line":57},[33,112733,25083],{"class":43},[33,112735,25086],{"class":119},[33,112737,102183],{"class":119},[33,112739,102186],{"class":119},[14,112741,102257],{},[574,112743,112744,112747,112750],{},[564,112745,112746],{},"本章使用低维状态，不使用图像输入。",[564,112748,112749],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[564,112751,112752,112753,1829,112755,1829,112757,112759],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[30,112754,105283],{},[30,112756,105613],{},[30,112758,104933],{}," 的方法一致。",[18,112761,102298],{"id":102297},[14,112763,112764],{},"Reacher 任务核心:",[23,112766,112769],{"className":112767,"code":112768,"language":6578,"meta":28},[6576],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[30,112770,112768],{"__ignoreMap":28},[14,112772,112773],{},"读取 site 世界坐标:",[23,112775,112777],{"className":31631,"code":112776,"language":31633,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[30,112778,112779,112792],{"__ignoreMap":28},[33,112780,112781,112783,112785,112787,112790],{"class":35,"line":36},[33,112782,104887],{"class":47},[33,112784,73],{"class":39},[33,112786,104658],{"class":47},[33,112788,112789],{"class":119},"\"tip\"",[33,112791,884],{"class":47},[33,112793,112794,112797,112799],{"class":35,"line":51},[33,112795,112796],{"class":47},"tip_pos ",[33,112798,73],{"class":39},[33,112800,112801],{"class":47}," data.site_xpos[site_id]\n",[1599,112803,112805],{"id":112804},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,112807,112808,112809,112811],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[30,112810,105283],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[23,112813,112815],{"className":31631,"code":112814,"language":31633,"meta":28,"style":28},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[30,112816,112817,112827],{"__ignoreMap":28},[33,112818,112819,112822,112824],{"class":35,"line":36},[33,112820,112821],{"class":47},"tip ",[33,112823,73],{"class":39},[33,112825,112826],{"class":47}," data.site_xpos[tip_site_id]\n",[33,112828,112829,112832,112834],{"class":35,"line":51},[33,112830,112831],{"class":47},"target ",[33,112833,73],{"class":39},[33,112835,112836],{"class":47}," data.site_xpos[target_site_id]\n",[14,112838,112839],{},"这样 reward 就很容易写：",[23,112841,112843],{"className":31631,"code":112842,"language":31633,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[30,112844,112845,112860],{"__ignoreMap":28},[33,112846,112847,112850,112852,112855,112857],{"class":35,"line":36},[33,112848,112849],{"class":47},"dist ",[33,112851,73],{"class":39},[33,112853,112854],{"class":47}," np.linalg.norm(tip ",[33,112856,1199],{"class":39},[33,112858,112859],{"class":47}," target)\n",[33,112861,112862,112864,112866,112868],{"class":35,"line":51},[33,112863,112258],{"class":47},[33,112865,73],{"class":39},[33,112867,53524],{"class":39},[33,112869,112870],{"class":47},"dist\n",[14,112872,112873,112874,112877],{},"距离越小，",[30,112875,112876],{},"-dist"," 越接近 0，奖励越高。",[1599,112879,112880],{"id":112880},"两关节机械臂的状态",[14,112882,112883],{},"这个模型有两个 hinge joint：",[23,112885,112888],{"className":112886,"code":112887,"language":6578,"meta":28},[6576],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[30,112889,112887],{"__ignoreMap":28},[14,112891,112892],{},"再加上末端和目标位置：",[23,112894,112897],{"className":112895,"code":112896,"language":6578,"meta":28},[6576],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[30,112898,112896],{"__ignoreMap":28},[14,112900,112901],{},"总维度：",[23,112903,112906],{"className":112904,"code":112905,"language":6578,"meta":28},[6576],"2 + 2 + 3 + 3 = 10\n",[30,112907,112905],{"__ignoreMap":28},[1599,112909,112911],{"id":112910},"为什么-gravity-是-0","为什么 gravity 是 0",[14,112913,112914],{},"本章把重力设为：",[23,112916,112918],{"className":54320,"code":112917,"language":54322,"meta":28,"style":28},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[30,112919,112920],{"__ignoreMap":28},[33,112921,112922,112924,112926,112928,112930,112932,112934,112936,112938],{"class":35,"line":36},[33,112923,875],{"class":47},[33,112925,70419],{"class":52553},[33,112927,102447],{"class":43},[33,112929,73],{"class":47},[33,112931,102452],{"class":119},[33,112933,102455],{"class":43},[33,112935,73],{"class":47},[33,112937,105024],{"class":119},[33,112939,102397],{"class":47},[14,112941,112942],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[18,112944,102506],{"id":102505},[23,112946,112948],{"className":31631,"code":112947,"language":31633,"meta":28,"style":28},"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",[30,112949,112950,112956,112966,112970,112974,112982,112987,112992,112996,113000,113005,113010,113014,113019,113024,113029,113033,113038,113043,113048,113053,113057,113061,113065,113069,113073,113078,113083,113087,113091,113095,113099,113103,113118,113127,113139,113162,113169,113173,113177,113187,113201,113215,113222,113226,113230,113244,113256,113268,113281,113296,113313,113317,113321,113333,113345,113353,113361,113365,113381,113386,113399,113412,113427,113431,113466,113498,113502,113506,113515,113519,113535,113545,113556,113572,113588,113604,113620,113624,113642,113662,113681,113685,113689,113701],{"__ignoreMap":28},[33,112951,112952,112954],{"class":35,"line":36},[33,112953,31645],{"class":39},[33,112955,102554],{"class":47},[33,112957,112958,112960,112962,112964],{"class":35,"line":51},[33,112959,31645],{"class":39},[33,112961,32633],{"class":47},[33,112963,32636],{"class":39},[33,112965,32639],{"class":47},[33,112967,112968],{"class":35,"line":57},[33,112969,160],{"emptyLinePlaceholder":159},[33,112971,112972],{"class":35,"line":64},[33,112973,160],{"emptyLinePlaceholder":159},[33,112975,112976,112978,112980],{"class":35,"line":83},[33,112977,102567],{"class":76},[33,112979,14815],{"class":39},[33,112981,102572],{"class":119},[33,112983,112984],{"class":35,"line":89},[33,112985,112986],{"class":119},"\u003Cmujoco model=\"two_link_reacher\">\n",[33,112988,112989],{"class":35,"line":98},[33,112990,112991],{"class":119},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,112993,112994],{"class":35,"line":110},[33,112995,160],{"emptyLinePlaceholder":159},[33,112997,112998],{"class":35,"line":134},[33,112999,102591],{"class":119},[33,113001,113002],{"class":35,"line":156},[33,113003,113004],{"class":119},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[33,113006,113007],{"class":35,"line":163},[33,113008,113009],{"class":119},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[33,113011,113012],{"class":35,"line":169},[33,113013,160],{"emptyLinePlaceholder":159},[33,113015,113016],{"class":35,"line":175},[33,113017,113018],{"class":119},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[33,113020,113021],{"class":35,"line":181},[33,113022,113023],{"class":119},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,113025,113026],{"class":35,"line":196},[33,113027,113028],{"class":119},"      \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",[33,113030,113031],{"class":35,"line":213},[33,113032,160],{"emptyLinePlaceholder":159},[33,113034,113035],{"class":35,"line":228},[33,113036,113037],{"class":119},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[33,113039,113040],{"class":35,"line":1345},[33,113041,113042],{"class":119},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,113044,113045],{"class":35,"line":1350},[33,113046,113047],{"class":119},"        \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",[33,113049,113050],{"class":35,"line":1359},[33,113051,113052],{"class":119},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[33,113054,113055],{"class":35,"line":1364},[33,113056,107691],{"class":119},[33,113058,113059],{"class":35,"line":1370},[33,113060,102620],{"class":119},[33,113062,113063],{"class":35,"line":1425},[33,113064,102625],{"class":119},[33,113066,113067],{"class":35,"line":1438},[33,113068,160],{"emptyLinePlaceholder":159},[33,113070,113071],{"class":35,"line":1451},[33,113072,107708],{"class":119},[33,113074,113075],{"class":35,"line":1457},[33,113076,113077],{"class":119},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,113079,113080],{"class":35,"line":1466},[33,113081,113082],{"class":119},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[33,113084,113085],{"class":35,"line":1471},[33,113086,107718],{"class":119},[33,113088,113089],{"class":35,"line":1477},[33,113090,102630],{"class":119},[33,113092,113093],{"class":35,"line":1504},[33,113094,96951],{"class":119},[33,113096,113097],{"class":35,"line":1509},[33,113098,160],{"emptyLinePlaceholder":159},[33,113100,113101],{"class":35,"line":1525},[33,113102,160],{"emptyLinePlaceholder":159},[33,113104,113105,113107,113110,113113,113115],{"class":35,"line":1535},[33,113106,33200],{"class":39},[33,113108,113109],{"class":43}," site_position",[33,113111,113112],{"class":47},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[33,113114,2760],{"class":76},[33,113116,113117],{"class":47},") -> np.ndarray:\n",[33,113119,113120,113122,113124],{"class":35,"line":1540},[33,113121,104653],{"class":47},[33,113123,73],{"class":39},[33,113125,113126],{"class":47}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,113128,113129,113131,113133,113135,113137],{"class":35,"line":4027},[33,113130,4509],{"class":39},[33,113132,104702],{"class":47},[33,113134,875],{"class":39},[33,113136,5492],{"class":76},[33,113138,5141],{"class":47},[33,113140,113141,113143,113145,113147,113149,113152,113154,113156,113158,113160],{"class":35,"line":4032},[33,113142,104685],{"class":39},[33,113144,104688],{"class":76},[33,113146,345],{"class":47},[33,113148,1677],{"class":39},[33,113150,113151],{"class":119},"\"site not found: ",[33,113153,698],{"class":76},[33,113155,81063],{"class":47},[33,113157,2542],{"class":76},[33,113159,1866],{"class":119},[33,113161,884],{"class":47},[33,113163,113164,113166],{"class":35,"line":9199},[33,113165,5489],{"class":39},[33,113167,113168],{"class":47}," data.site_xpos[site_id].copy()\n",[33,113170,113171],{"class":35,"line":9223},[33,113172,160],{"emptyLinePlaceholder":159},[33,113174,113175],{"class":35,"line":9228},[33,113176,160],{"emptyLinePlaceholder":159},[33,113178,113179,113181,113184],{"class":35,"line":9234},[33,113180,33200],{"class":39},[33,113182,113183],{"class":43}," get_obs",[33,113185,113186],{"class":47},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,113188,113189,113192,113194,113197,113199],{"class":35,"line":9261},[33,113190,113191],{"class":47},"    tip ",[33,113193,73],{"class":39},[33,113195,113196],{"class":47}," site_position(model, data, ",[33,113198,112789],{"class":119},[33,113200,884],{"class":47},[33,113202,113203,113206,113208,113210,113213],{"class":35,"line":9266},[33,113204,113205],{"class":47},"    target ",[33,113207,73],{"class":39},[33,113209,113196],{"class":47},[33,113211,113212],{"class":119},"\"target\"",[33,113214,884],{"class":47},[33,113216,113217,113219],{"class":35,"line":9272},[33,113218,5489],{"class":39},[33,113220,113221],{"class":47}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,113223,113224],{"class":35,"line":9284},[33,113225,160],{"emptyLinePlaceholder":159},[33,113227,113228],{"class":35,"line":9296},[33,113229,160],{"emptyLinePlaceholder":159},[33,113231,113232,113234,113237,113240,113242],{"class":35,"line":9308},[33,113233,33200],{"class":39},[33,113235,113236],{"class":43}," reward",[33,113238,113239],{"class":47},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[33,113241,1666],{"class":76},[33,113243,5141],{"class":47},[33,113245,113246,113248,113250,113252,113254],{"class":35,"line":10967},[33,113247,113191],{"class":47},[33,113249,73],{"class":39},[33,113251,113196],{"class":47},[33,113253,112789],{"class":119},[33,113255,884],{"class":47},[33,113257,113258,113260,113262,113264,113266],{"class":35,"line":10992},[33,113259,113205],{"class":47},[33,113261,73],{"class":39},[33,113263,113196],{"class":47},[33,113265,113212],{"class":119},[33,113267,884],{"class":47},[33,113269,113270,113273,113275,113277,113279],{"class":35,"line":11015},[33,113271,113272],{"class":47},"    dist ",[33,113274,73],{"class":39},[33,113276,112854],{"class":47},[33,113278,1199],{"class":39},[33,113280,112859],{"class":47},[33,113282,113283,113286,113288,113291,113293],{"class":35,"line":11039},[33,113284,113285],{"class":47},"    control_cost ",[33,113287,73],{"class":39},[33,113289,113290],{"class":76}," 0.01",[33,113292,303],{"class":39},[33,113294,113295],{"class":47}," np.sum(np.square(data.ctrl))\n",[33,113297,113298,113300,113302,113304,113306,113308,113310],{"class":35,"line":11044},[33,113299,5489],{"class":39},[33,113301,111050],{"class":76},[33,113303,345],{"class":47},[33,113305,1199],{"class":39},[33,113307,112849],{"class":47},[33,113309,1199],{"class":39},[33,113311,113312],{"class":47}," control_cost)\n",[33,113314,113315],{"class":35,"line":11049},[33,113316,160],{"emptyLinePlaceholder":159},[33,113318,113319],{"class":35,"line":11054},[33,113320,160],{"emptyLinePlaceholder":159},[33,113322,113323,113325,113327,113329,113331],{"class":35,"line":11063},[33,113324,33200],{"class":39},[33,113326,44],{"class":43},[33,113328,102651],{"class":47},[33,113330,96939],{"class":76},[33,113332,5141],{"class":47},[33,113334,113335,113337,113339,113341,113343],{"class":35,"line":11068},[33,113336,102660],{"class":47},[33,113338,73],{"class":39},[33,113340,102665],{"class":47},[33,113342,102567],{"class":76},[33,113344,884],{"class":47},[33,113346,113347,113349,113351],{"class":35,"line":11074},[33,113348,102674],{"class":47},[33,113350,73],{"class":39},[33,113352,102679],{"class":47},[33,113354,113355,113357,113359],{"class":35,"line":11095},[33,113356,111406],{"class":47},[33,113358,73],{"class":39},[33,113360,106014],{"class":76},[33,113362,113363],{"class":35,"line":11101},[33,113364,160],{"emptyLinePlaceholder":159},[33,113366,113367,113369,113371,113373,113375,113377,113379],{"class":35,"line":11115},[33,113368,857],{"class":39},[33,113370,32869],{"class":47},[33,113372,27296],{"class":39},[33,113374,33696],{"class":76},[33,113376,345],{"class":47},[33,113378,66327],{"class":76},[33,113380,32039],{"class":47},[33,113382,113383],{"class":35,"line":11121},[33,113384,113385],{"class":47},"        mujoco.mj_forward(model, data)\n",[33,113387,113388,113391,113393,113395,113397],{"class":35,"line":11148},[33,113389,113390],{"class":47},"        tip ",[33,113392,73],{"class":39},[33,113394,113196],{"class":47},[33,113396,112789],{"class":119},[33,113398,884],{"class":47},[33,113400,113401,113404,113406,113408,113410],{"class":35,"line":11157},[33,113402,113403],{"class":47},"        target ",[33,113405,73],{"class":39},[33,113407,113196],{"class":47},[33,113409,113212],{"class":119},[33,113411,884],{"class":47},[33,113413,113414,113417,113419,113422,113424],{"class":35,"line":11163},[33,113415,113416],{"class":47},"        error ",[33,113418,73],{"class":39},[33,113420,113421],{"class":47}," target ",[33,113423,1199],{"class":39},[33,113425,113426],{"class":47}," tip\n",[33,113428,113429],{"class":35,"line":11171},[33,113430,160],{"emptyLinePlaceholder":159},[33,113432,113433,113435,113437,113439,113441,113444,113446,113448,113451,113453,113456,113458,113460,113462,113464],{"class":35,"line":11176},[33,113434,107870],{"class":47},[33,113436,766],{"class":76},[33,113438,5840],{"class":47},[33,113440,73],{"class":39},[33,113442,113443],{"class":47}," np.clip(",[33,113445,106513],{"class":76},[33,113447,303],{"class":39},[33,113449,113450],{"class":47}," error[",[33,113452,707],{"class":76},[33,113454,113455],{"class":47},"], ",[33,113457,1199],{"class":39},[33,113459,103656],{"class":76},[33,113461,13686],{"class":47},[33,113463,103656],{"class":76},[33,113465,884],{"class":47},[33,113467,113468,113470,113472,113474,113476,113478,113480,113482,113484,113486,113488,113490,113492,113494,113496],{"class":35,"line":17855},[33,113469,107870],{"class":47},[33,113471,701],{"class":76},[33,113473,5840],{"class":47},[33,113475,73],{"class":39},[33,113477,113443],{"class":47},[33,113479,106513],{"class":76},[33,113481,303],{"class":39},[33,113483,113450],{"class":47},[33,113485,766],{"class":76},[33,113487,113455],{"class":47},[33,113489,1199],{"class":39},[33,113491,103656],{"class":76},[33,113493,13686],{"class":47},[33,113495,103656],{"class":76},[33,113497,884],{"class":47},[33,113499,113500],{"class":35,"line":17861},[33,113501,160],{"emptyLinePlaceholder":159},[33,113503,113504],{"class":35,"line":17884},[33,113505,102769],{"class":47},[33,113507,113508,113510,113512],{"class":35,"line":17890},[33,113509,111550],{"class":47},[33,113511,10728],{"class":39},[33,113513,113514],{"class":47}," reward(model, data)\n",[33,113516,113517],{"class":35,"line":17913},[33,113518,160],{"emptyLinePlaceholder":159},[33,113520,113521,113523,113525,113527,113529,113531,113533],{"class":35,"line":17927},[33,113522,3915],{"class":39},[33,113524,32869],{"class":47},[33,113526,1939],{"class":39},[33,113528,7141],{"class":76},[33,113530,102812],{"class":39},[33,113532,5492],{"class":76},[33,113534,5141],{"class":47},[33,113536,113537,113540,113542],{"class":35,"line":17947},[33,113538,113539],{"class":47},"            obs ",[33,113541,73],{"class":39},[33,113543,113544],{"class":47}," get_obs(model, data)\n",[33,113546,113547,113549,113551,113553],{"class":35,"line":17953},[33,113548,35903],{"class":76},[33,113550,345],{"class":47},[33,113552,111584],{"class":119},[33,113554,113555],{"class":47},", step)\n",[33,113557,113558,113560,113562,113565,113568,113570],{"class":35,"line":17964},[33,113559,35903],{"class":76},[33,113561,345],{"class":47},[33,113563,113564],{"class":119},"\"  tip:\"",[33,113566,113567],{"class":47},", np.round(tip, ",[33,113569,712],{"class":76},[33,113571,31750],{"class":47},[33,113573,113574,113576,113578,113581,113584,113586],{"class":35,"line":17987},[33,113575,35903],{"class":76},[33,113577,345],{"class":47},[33,113579,113580],{"class":119},"\"  target:\"",[33,113582,113583],{"class":47},", np.round(target, ",[33,113585,712],{"class":76},[33,113587,31750],{"class":47},[33,113589,113590,113592,113594,113597,113600,113602],{"class":35,"line":18009},[33,113591,35903],{"class":76},[33,113593,345],{"class":47},[33,113595,113596],{"class":119},"\"  ctrl:\"",[33,113598,113599],{"class":47},", np.round(data.ctrl.copy(), ",[33,113601,712],{"class":76},[33,113603,31750],{"class":47},[33,113605,113606,113608,113610,113613,113616,113618],{"class":35,"line":18014},[33,113607,35903],{"class":76},[33,113609,345],{"class":47},[33,113611,113612],{"class":119},"\"  obs_dim:\"",[33,113614,113615],{"class":47},", obs.shape[",[33,113617,766],{"class":76},[33,113619,1276],{"class":47},[33,113621,113622],{"class":35,"line":18020},[33,113623,160],{"emptyLinePlaceholder":159},[33,113625,113626,113628,113630,113632,113634,113636,113638,113640],{"class":35,"line":18034},[33,113627,32552],{"class":76},[33,113629,345],{"class":47},[33,113631,111629],{"class":119},[33,113633,13686],{"class":47},[33,113635,33271],{"class":76},[33,113637,111636],{"class":47},[33,113639,712],{"class":76},[33,113641,31750],{"class":47},[33,113643,113644,113646,113648,113651,113654,113656,113658,113660],{"class":35,"line":18047},[33,113645,32552],{"class":76},[33,113647,345],{"class":47},[33,113649,113650],{"class":119},"\"final tip:\"",[33,113652,113653],{"class":47},", np.round(site_position(model, data, ",[33,113655,112789],{"class":119},[33,113657,111598],{"class":47},[33,113659,712],{"class":76},[33,113661,31750],{"class":47},[33,113663,113664,113666,113668,113671,113673,113675,113677,113679],{"class":35,"line":18052},[33,113665,32552],{"class":76},[33,113667,345],{"class":47},[33,113669,113670],{"class":119},"\"target:\"",[33,113672,113653],{"class":47},[33,113674,113212],{"class":119},[33,113676,111598],{"class":47},[33,113678,712],{"class":76},[33,113680,31750],{"class":47},[33,113682,113683],{"class":35,"line":18066},[33,113684,160],{"emptyLinePlaceholder":159},[33,113686,113687],{"class":35,"line":18071},[33,113688,160],{"emptyLinePlaceholder":159},[33,113690,113691,113693,113695,113697,113699],{"class":35,"line":18077},[33,113692,2987],{"class":39},[33,113694,32473],{"class":76},[33,113696,102812],{"class":39},[33,113698,102815],{"class":119},[33,113700,5141],{"class":47},[33,113702,113703],{"class":35,"line":18082},[33,113704,102822],{"class":47},[14,113706,104823],{},[23,113708,113710],{"className":25074,"code":113709,"language":25076,"meta":28,"style":28},"touch ch7_reacher.py\n",[30,113711,113712],{"__ignoreMap":28},[33,113713,113714,113716],{"class":35,"line":36},[33,113715,102536],{"class":43},[33,113717,113718],{"class":119}," ch7_reacher.py\n",[14,113720,111697],{},[23,113722,113724],{"className":25074,"code":113723,"language":25076,"meta":28,"style":28},"python ch7_reacher.py\n",[30,113725,113726],{"__ignoreMap":28},[33,113727,113728,113730],{"class":35,"line":36},[33,113729,31633],{"class":43},[33,113731,113718],{"class":119},[1599,113733,102825],{"id":102825},[14,113735,113736],{},"读取 site 坐标：",[23,113738,113740],{"className":31631,"code":113739,"language":31633,"meta":28,"style":28},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[30,113741,113742],{"__ignoreMap":28},[33,113743,113744,113746,113748,113750,113752],{"class":35,"line":36},[33,113745,33200],{"class":39},[33,113747,113109],{"class":43},[33,113749,113112],{"class":47},[33,113751,2760],{"class":76},[33,113753,113117],{"class":47},[14,113755,113756],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,113758,111713],{},[23,113760,113762],{"className":31631,"code":113761,"language":31633,"meta":28,"style":28},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[30,113763,113764],{"__ignoreMap":28},[33,113765,113766,113768],{"class":35,"line":36},[33,113767,18297],{"class":39},[33,113769,113221],{"class":47},[14,113771,113772],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,113774,111038],{},[23,113776,113778],{"className":31631,"code":113777,"language":31633,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[30,113779,113780,113792,113805],{"__ignoreMap":28},[33,113781,113782,113784,113786,113788,113790],{"class":35,"line":36},[33,113783,112849],{"class":47},[33,113785,73],{"class":39},[33,113787,112854],{"class":47},[33,113789,1199],{"class":39},[33,113791,112859],{"class":47},[33,113793,113794,113797,113799,113801,113803],{"class":35,"line":51},[33,113795,113796],{"class":47},"control_cost ",[33,113798,73],{"class":39},[33,113800,113290],{"class":76},[33,113802,303],{"class":39},[33,113804,113295],{"class":47},[33,113806,113807,113809,113811,113813,113815,113817,113819],{"class":35,"line":57},[33,113808,18297],{"class":39},[33,113810,111050],{"class":76},[33,113812,345],{"class":47},[33,113814,1199],{"class":39},[33,113816,112849],{"class":47},[33,113818,1199],{"class":39},[33,113820,113312],{"class":47},[14,113822,113823],{},"奖励由两部分组成：",[574,113825,113826,113831],{},[564,113827,113828,113830],{},[30,113829,112876],{},"：末端离目标越远，奖励越低。",[564,113832,113833,113836],{},[30,113834,113835],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,113838,113839],{},"简单控制器：",[23,113841,113843],{"className":31631,"code":113842,"language":31633,"meta":28,"style":28},"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",[30,113844,113845,113858,113890],{"__ignoreMap":28},[33,113846,113847,113850,113852,113854,113856],{"class":35,"line":36},[33,113848,113849],{"class":47},"error ",[33,113851,73],{"class":39},[33,113853,113421],{"class":47},[33,113855,1199],{"class":39},[33,113857,113426],{"class":47},[33,113859,113860,113862,113864,113866,113868,113870,113872,113874,113876,113878,113880,113882,113884,113886,113888],{"class":35,"line":51},[33,113861,107124],{"class":47},[33,113863,766],{"class":76},[33,113865,5840],{"class":47},[33,113867,73],{"class":39},[33,113869,113443],{"class":47},[33,113871,106513],{"class":76},[33,113873,303],{"class":39},[33,113875,113450],{"class":47},[33,113877,707],{"class":76},[33,113879,113455],{"class":47},[33,113881,1199],{"class":39},[33,113883,103656],{"class":76},[33,113885,13686],{"class":47},[33,113887,103656],{"class":76},[33,113889,884],{"class":47},[33,113891,113892,113894,113896,113898,113900,113902,113904,113906,113908,113910,113912,113914,113916,113918,113920],{"class":35,"line":57},[33,113893,107124],{"class":47},[33,113895,701],{"class":76},[33,113897,5840],{"class":47},[33,113899,73],{"class":39},[33,113901,113443],{"class":47},[33,113903,106513],{"class":76},[33,113905,303],{"class":39},[33,113907,113450],{"class":47},[33,113909,766],{"class":76},[33,113911,113455],{"class":47},[33,113913,1199],{"class":39},[33,113915,103656],{"class":76},[33,113917,13686],{"class":47},[33,113919,103656],{"class":76},[33,113921,884],{"class":47},[14,113923,113924],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[1599,113926,102961],{"id":102961},[23,113928,113929],{"className":31631,"code":113739,"language":31633,"meta":28,"style":28},[30,113930,113931],{"__ignoreMap":28},[33,113932,113933,113935,113937,113939,113941],{"class":35,"line":36},[33,113934,33200],{"class":39},[33,113936,113109],{"class":43},[33,113938,113112],{"class":47},[33,113940,2760],{"class":76},[33,113942,113117],{"class":47},[14,113944,113945,113946,113948,113949,83792,113951,29638],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[30,113947,81063],{}," 是 site 的名字，比如 ",[30,113950,112789],{},[30,113952,113212],{},[23,113954,113956],{"className":31631,"code":113955,"language":31633,"meta":28,"style":28},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[30,113957,113958],{"__ignoreMap":28},[33,113959,113960,113962,113964],{"class":35,"line":36},[33,113961,104887],{"class":47},[33,113963,73],{"class":39},[33,113965,113126],{"class":47},[14,113967,113968],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[23,113970,113972],{"className":31631,"code":113971,"language":31633,"meta":28,"style":28},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[30,113973,113974,113986],{"__ignoreMap":28},[33,113975,113976,113978,113980,113982,113984],{"class":35,"line":36},[33,113977,2987],{"class":39},[33,113979,104702],{"class":47},[33,113981,875],{"class":39},[33,113983,5492],{"class":76},[33,113985,5141],{"class":47},[33,113987,113988,113990,113992,113994,113996,113998,114000,114002,114004,114006],{"class":35,"line":51},[33,113989,105148],{"class":39},[33,113991,104688],{"class":76},[33,113993,345],{"class":47},[33,113995,1677],{"class":39},[33,113997,113151],{"class":119},[33,113999,698],{"class":76},[33,114001,81063],{"class":47},[33,114003,2542],{"class":76},[33,114005,1866],{"class":119},[33,114007,884],{"class":47},[14,114009,114010,114011,114014,114015,114017],{},"如果 site 没找到，就主动报错。",[30,114012,114013],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[30,114016,81063],{}," 的值放进字符串里。",[23,114019,114021],{"className":31631,"code":114020,"language":31633,"meta":28,"style":28},"return data.site_xpos[site_id].copy()\n",[30,114022,114023],{"__ignoreMap":28},[33,114024,114025,114027],{"class":35,"line":36},[33,114026,18297],{"class":39},[33,114028,113168],{"class":47},[14,114030,114031,114032,114034,114035,114038],{},"返回这个 site 的世界坐标。",[30,114033,104933],{}," 里的每一行都是一个 site 的 ",[30,114036,114037],{},"(x, y, z)"," 坐标。",[23,114040,114042],{"className":31631,"code":114041,"language":31633,"meta":28,"style":28},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[30,114043,114044],{"__ignoreMap":28},[33,114045,114046,114048,114050],{"class":35,"line":36},[33,114047,33200],{"class":39},[33,114049,113183],{"class":43},[33,114051,113186],{"class":47},[14,114053,114054],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[23,114056,114058],{"className":31631,"code":114057,"language":31633,"meta":28,"style":28},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[30,114059,114060,114072],{"__ignoreMap":28},[33,114061,114062,114064,114066,114068,114070],{"class":35,"line":36},[33,114063,112821],{"class":47},[33,114065,73],{"class":39},[33,114067,113196],{"class":47},[33,114069,112789],{"class":119},[33,114071,884],{"class":47},[33,114073,114074,114076,114078,114080,114082],{"class":35,"line":51},[33,114075,112831],{"class":47},[33,114077,73],{"class":39},[33,114079,113196],{"class":47},[33,114081,113212],{"class":119},[33,114083,884],{"class":47},[14,114085,114086],{},"分别读取末端点和目标点的世界坐标。",[23,114088,114089],{"className":31631,"code":113761,"language":31633,"meta":28,"style":28},[30,114090,114091],{"__ignoreMap":28},[33,114092,114093,114095],{"class":35,"line":36},[33,114094,18297],{"class":39},[33,114096,113221],{"class":47},[14,114098,114099],{},"把四部分拼成一个观测数组：",[23,114101,114104],{"className":114102,"code":114103,"language":6578,"meta":28},[6576],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[30,114105,114103],{"__ignoreMap":28},[23,114107,114109],{"className":31631,"code":114108,"language":31633,"meta":28,"style":28},"dist = np.linalg.norm(tip - target)\n",[30,114110,114111],{"__ignoreMap":28},[33,114112,114113,114115,114117,114119,114121],{"class":35,"line":36},[33,114114,112849],{"class":47},[33,114116,73],{"class":39},[33,114118,112854],{"class":47},[33,114120,1199],{"class":39},[33,114122,112859],{"class":47},[14,114124,114125,114126,114129,114130,114133],{},"计算 tip 到 target 的距离。",[30,114127,114128],{},"tip - target"," 得到一个三维向量，",[30,114131,114132],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,114135,15884],{},[23,114137,114140],{"className":114138,"code":114139,"language":6578,"meta":28},[6576],"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",[30,114141,114139],{"__ignoreMap":28},[23,114143,114145],{"className":31631,"code":114144,"language":31633,"meta":28,"style":28},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[30,114146,114147],{"__ignoreMap":28},[33,114148,114149,114151,114153,114155,114157],{"class":35,"line":36},[33,114150,113796],{"class":47},[33,114152,73],{"class":39},[33,114154,113290],{"class":76},[33,114156,303],{"class":39},[33,114158,113295],{"class":47},[14,114160,114161,114162,114165,114166,114169],{},"计算动作惩罚。",[30,114163,114164],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[30,114167,114168],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[23,114171,114173],{"className":31631,"code":114172,"language":31633,"meta":28,"style":28},"return float(-dist - control_cost)\n",[30,114174,114175],{"__ignoreMap":28},[33,114176,114177,114179,114181,114183,114185,114187,114189],{"class":35,"line":36},[33,114178,18297],{"class":39},[33,114180,111050],{"class":76},[33,114182,345],{"class":47},[33,114184,1199],{"class":39},[33,114186,112849],{"class":47},[33,114188,1199],{"class":39},[33,114190,113312],{"class":47},[14,114192,114193],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[23,114195,114196],{"className":31631,"code":112056,"language":31633,"meta":28,"style":28},[30,114197,114198],{"__ignoreMap":28},[33,114199,114200,114202,114204],{"class":35,"line":36},[33,114201,112063],{"class":47},[33,114203,73],{"class":39},[33,114205,106014],{"class":76},[14,114207,114208],{},"累计奖励变量，记录整个运行过程的总分。",[23,114210,114212],{"className":31631,"code":114211,"language":31633,"meta":28,"style":28},"for step in range(500):\n",[30,114213,114214],{"__ignoreMap":28},[33,114215,114216,114218,114220,114222,114224,114226,114228],{"class":35,"line":36},[33,114217,4435],{"class":39},[33,114219,32869],{"class":47},[33,114221,27296],{"class":39},[33,114223,33696],{"class":76},[33,114225,345],{"class":47},[33,114227,66327],{"class":76},[33,114229,32039],{"class":47},[14,114231,114232],{},"运行 500 个控制步。",[23,114234,114235],{"className":31631,"code":105796,"language":31633,"meta":28,"style":28},[30,114236,114237],{"__ignoreMap":28},[33,114238,114239],{"class":35,"line":36},[33,114240,105796],{"class":47},[14,114242,114243,114244,102271,114246,114248],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[30,114245,104484],{},[30,114247,104487],{}," 是当前状态下的坐标。",[23,114250,114252],{"className":31631,"code":114251,"language":31633,"meta":28,"style":28},"error = target - tip\n",[30,114253,114254],{"__ignoreMap":28},[33,114255,114256,114258,114260,114262,114264],{"class":35,"line":36},[33,114257,113849],{"class":47},[33,114259,73],{"class":39},[33,114261,113421],{"class":47},[33,114263,1199],{"class":39},[33,114265,113426],{"class":47},[14,114267,114268],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[23,114270,114272],{"className":31631,"code":114271,"language":31633,"meta":28,"style":28},"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",[30,114273,114274,114306],{"__ignoreMap":28},[33,114275,114276,114278,114280,114282,114284,114286,114288,114290,114292,114294,114296,114298,114300,114302,114304],{"class":35,"line":36},[33,114277,107124],{"class":47},[33,114279,766],{"class":76},[33,114281,5840],{"class":47},[33,114283,73],{"class":39},[33,114285,113443],{"class":47},[33,114287,106513],{"class":76},[33,114289,303],{"class":39},[33,114291,113450],{"class":47},[33,114293,707],{"class":76},[33,114295,113455],{"class":47},[33,114297,1199],{"class":39},[33,114299,103656],{"class":76},[33,114301,13686],{"class":47},[33,114303,103656],{"class":76},[33,114305,884],{"class":47},[33,114307,114308,114310,114312,114314,114316,114318,114320,114322,114324,114326,114328,114330,114332,114334,114336],{"class":35,"line":51},[33,114309,107124],{"class":47},[33,114311,701],{"class":76},[33,114313,5840],{"class":47},[33,114315,73],{"class":39},[33,114317,113443],{"class":47},[33,114319,106513],{"class":76},[33,114321,303],{"class":39},[33,114323,113450],{"class":47},[33,114325,766],{"class":76},[33,114327,113455],{"class":47},[33,114329,1199],{"class":39},[33,114331,103656],{"class":76},[33,114333,13686],{"class":47},[33,114335,103656],{"class":76},[33,114337,884],{"class":47},[14,114339,114340,114341,114344],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[30,114342,114343],{},"error -> ctrl -> step"," 的流程。",[23,114346,114347],{"className":31631,"code":105758,"language":31633,"meta":28,"style":28},[30,114348,114349],{"__ignoreMap":28},[33,114350,114351],{"class":35,"line":36},[33,114352,105758],{"class":47},[14,114354,114355],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[23,114357,114359],{"className":31631,"code":114358,"language":31633,"meta":28,"style":28},"obs = get_obs(model, data)\n",[30,114360,114361],{"__ignoreMap":28},[33,114362,114363,114365,114367],{"class":35,"line":36},[33,114364,112107],{"class":47},[33,114366,73],{"class":39},[33,114368,113544],{"class":47},[14,114370,114371,114372,114375],{},"读取最新观测。后面打印 ",[30,114373,114374],{},"obs.shape[0]","，用来确认观测维度是 10。",[18,114377,103569],{"id":103568},[14,114379,114380],{},"观测维度为:",[23,114382,114385],{"className":114383,"code":114384,"language":6578,"meta":28},[6576],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[30,114386,114384],{"__ignoreMap":28},[14,114388,114389],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,114391,114392],{},"程序每 100 步打印：",[23,114394,114397],{"className":114395,"code":114396,"language":6578,"meta":28},[6576],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[30,114398,114396],{"__ignoreMap":28},[14,114400,114401,114402,114404],{},"如果控制有效，你应该看到最终 ",[30,114403,104484],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[18,114406,103601],{"id":103600},[574,114408,114409,114412,114415,114421,114427,114434,114444],{},[564,114410,114411],{},"修改目标点位置。",[564,114413,114414],{},"重新运行，观察最终 tip 是否变化。",[564,114416,114417,114418,114420],{},"把 gravity 改成 ",[30,114419,103842],{},"，观察控制是否变差。",[564,114422,112434,114423,112438,114425,29638],{},[30,114424,103411],{},[30,114426,707],{},[564,114428,103664,114429,103667,114431,114433],{},[30,114430,111849],{},[30,114432,108560],{},"，观察机械臂是否更难移动。",[564,114435,103664,114436,83783,114438,103667,114440,114443],{},[30,114437,104487],{},[30,114439,105399],{},[30,114441,114442],{},"0.2 0 0.6","，观察 reward 和 final tip。",[564,114445,114446],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[18,114448,103706],{"id":103705},[1599,114450,114452],{"id":114451},"site-not-found",[30,114453,114454],{},"site not found",[14,114456,114457,114458,102271,114461,29638],{},"检查 XML 中是否有 ",[30,114459,114460],{},"site name=\"tip\"",[30,114462,114463],{},"site name=\"target\"",[1599,114465,114466],{"id":114466},"机械臂完全不动",[14,114468,103776],{},[574,114470,114471,114476,114479,114484],{},[564,114472,114473,114475],{},[30,114474,103411],{}," 是否为 2",[564,114477,114478],{},"actuator 是否引用正确 joint",[564,114480,114481,114483],{},[30,114482,102329],{}," 是否被赋值",[564,114485,114486,114487],{},"是否执行了 ",[30,114488,101938],{},[1599,114490,114491],{"id":114491},"控制效果不好",[14,114493,114494],{},"正常。本章重点不是控制器最优，而是任务结构:",[23,114496,114499],{"className":114497,"code":114498,"language":6578,"meta":28},[6576],"obs → action → mj_step → reward → next_obs\n",[30,114500,114498],{"__ignoreMap":28},[1599,114502,114504],{"id":114503},"tip-坐标不变化","tip 坐标不变化",[14,114506,103828],{},[574,114508,114509,114514,114522,114531],{},[564,114510,114511,114512,29638],{},"是否每步调用了 ",[30,114513,101938],{},[564,114515,114516,114517,102271,114519,29638],{},"是否写入了 ",[30,114518,107379],{},[30,114520,114521],{},"data.ctrl[1]",[564,114523,114524,114525,1829,114528,29638],{},"actuator 是否正确引用 ",[30,114526,114527],{},"joint1",[30,114529,114530],{},"joint2",[564,114532,114533],{},"控制输入是否太小。",[1599,114535,114536],{"id":114536},"目标点不会动",[14,114538,114539],{},"本章的 target 是固定 site：",[23,114541,114543],{"className":54320,"code":114542,"language":54322,"meta":28,"style":28},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[30,114544,114545],{"__ignoreMap":28},[33,114546,114547,114549,114551,114553,114555,114557,114559,114561,114564],{"class":35,"line":36},[33,114548,875],{"class":47},[33,114550,104463],{"class":52553},[33,114552,16171],{"class":43},[33,114554,73],{"class":47},[33,114556,113212],{"class":119},[33,114558,102359],{"class":43},[33,114560,73],{"class":47},[33,114562,114563],{"class":119},"\"0.5 0 0.4\"",[33,114565,114566],{"class":47}," ...\u002F>\n",[14,114568,114569,114570,114572],{},"它直接挂在 ",[30,114571,103094],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[1599,114574,114575],{"id":114575},"机械臂不像真实机械臂",[14,114577,114578],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[18,114580,103860],{"id":103859},[14,114582,114583],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,114585,114586],{},"核心公式：",[23,114588,114591],{"className":114589,"code":114590,"language":6578,"meta":28},[6576],"distance = ||tip - target||\nreward = -distance - action_cost\n",[30,114592,114590],{"__ignoreMap":28},[14,114594,114595],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1544,114597,114598],{},"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":28,"searchDepth":51,"depth":51,"links":114600},[114601,114602,114603,114608,114612,114613,114614,114622],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":114604},[114605,114606,114607],{"id":112804,"depth":57,"text":112805},{"id":112880,"depth":57,"text":112880},{"id":112910,"depth":57,"text":112911},{"id":102505,"depth":51,"text":102506,"children":114609},[114610,114611],{"id":102825,"depth":57,"text":102825},{"id":102961,"depth":57,"text":102961},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":114615},[114616,114617,114618,114619,114620,114621],{"id":114451,"depth":57,"text":114454},{"id":114466,"depth":57,"text":114466},{"id":114491,"depth":57,"text":114491},{"id":114503,"depth":57,"text":114504},{"id":114536,"depth":57,"text":114536},{"id":114575,"depth":57,"text":114575},{"id":103859,"depth":51,"text":103860},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112608,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114629,"title":114630,"body":114631,"description":28,"extension":1557,"meta":118093,"navigation":159,"path":118094,"seo":118095,"stem":118096,"__hash__":118097},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114632,"toc":118064},[114633,114636,114638,114641,114644,114669,114672,114678,114681,114687,114689,114691,114715,114717,114735,114737,114780,114782,114809,114811,114814,114866,114869,114875,114884,114887,114925,114928,114967,114970,114978,114985,114988,114994,114996,115050,115057,115102,115105,115109,115125,115135,115137,116398,116400,116412,116414,116425,116427,116430,116451,116454,116457,116490,116496,116499,116532,116535,116538,116579,116584,116598,116601,116614,116619,116642,116644,116659,116669,116684,116691,116711,116726,116744,116747,116764,116772,116788,116794,116826,116839,116871,116881,116916,116930,116976,116990,117032,117043,117056,117062,117095,117098,117125,117135,117175,117185,117202,117209,117227,117230,117271,117284,117299,117302,117325,117328,117340,117343,117362,117367,117388,117391,117406,117409,117443,117455,117470,117473,117498,117501,117520,117523,117555,117558,117582,117588,117618,117625,117638,117641,117643,117645,117651,117654,117657,117669,117672,117674,117728,117730,117734,117740,117749,117752,117759,117761,117784,117787,117791,117793,117811,117817,117819,117852,117855,117861,117865,117868,117888,117893,117897,117904,117924,117929,117933,117936,117956,117959,118045,118049,118052,118058,118061],[10,114634,114630],{"id":114635},"_8gymnasium-风格强化学习接口基础",[18,114637,101900],{"id":101899},[14,114639,114640],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,114642,114643],{},"你将实现:",[23,114645,114647],{"className":31631,"code":114646,"language":31633,"meta":28,"style":28},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[30,114648,114649,114659],{"__ignoreMap":28},[33,114650,114651,114654,114656],{"class":35,"line":36},[33,114652,114653],{"class":47},"obs, info ",[33,114655,73],{"class":39},[33,114657,114658],{"class":47}," env.reset()\n",[33,114660,114661,114664,114666],{"class":35,"line":51},[33,114662,114663],{"class":47},"obs, reward, terminated, truncated, info ",[33,114665,73],{"class":39},[33,114667,114668],{"class":47}," env.step(action)\n",[14,114670,114671],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,114673,114674,114675,114677],{},"前面章节的代码都是“脚本式”的：在 ",[30,114676,103548],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,114679,114680],{},"可以先记住 Gymnasium 环境的核心交互：",[23,114682,114685],{"className":114683,"code":114684,"language":6578,"meta":28},[6576],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[30,114686,114684],{"__ignoreMap":28},[18,114688,102023],{"id":102022},[14,114690,102026],{},[23,114692,114693],{"className":25074,"code":105641,"language":25076,"meta":28,"style":28},[30,114694,114695],{"__ignoreMap":28},[33,114696,114697,114699,114701,114703,114705,114707,114709,114711,114713],{"class":35,"line":36},[33,114698,25829],{"class":43},[33,114700,27568],{"class":119},[33,114702,25086],{"class":119},[33,114704,27653],{"class":76},[33,114706,105656],{"class":119},[33,114708,102051],{"class":119},[33,114710,103754],{"class":119},[33,114712,102067],{"class":119},[33,114714,105665],{"class":119},[14,114716,104072],{},[23,114718,114720],{"className":25074,"code":114719,"language":25076,"meta":28,"style":28},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[30,114721,114722],{"__ignoreMap":28},[33,114723,114724,114726,114728,114730,114732],{"class":35,"line":36},[33,114725,25083],{"class":43},[33,114727,25086],{"class":119},[33,114729,102183],{"class":119},[33,114731,108964],{"class":119},[33,114733,114734],{"class":119}," gymnasium\n",[14,114736,104089],{},[23,114738,114740],{"className":25074,"code":114739,"language":25076,"meta":28,"style":28},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[30,114741,114742,114759,114768],{"__ignoreMap":28},[33,114743,114744,114746,114748,114750,114753,114755,114757],{"class":35,"line":36},[33,114745,31583],{"class":43},[33,114747,30429],{"class":119},[33,114749,26368],{"class":76},[33,114751,114752],{"class":119}," mujoco-gym-api",[33,114754,102228],{"class":119},[33,114756,102231],{"class":76},[33,114758,102234],{"class":76},[33,114760,114761,114763,114765],{"class":35,"line":51},[33,114762,31583],{"class":43},[33,114764,102241],{"class":119},[33,114766,114767],{"class":119}," mujoco-gym-api\n",[33,114769,114770,114772,114774,114776,114778],{"class":35,"line":57},[33,114771,25083],{"class":43},[33,114773,25086],{"class":119},[33,114775,102183],{"class":119},[33,114777,108964],{"class":119},[33,114779,114734],{"class":119},[14,114781,102257],{},[574,114783,114784,114794,114797,114803],{},[564,114785,114786,114787,114790,114791,29638],{},"本章使用 ",[30,114788,114789],{},"gymnasium","，不是旧版 ",[30,114792,114793],{},"gym",[564,114795,114796],{},"Gymnasium API 与旧 Gym API 有差异。",[564,114798,114799,114800,29638],{},"旧 Gym 常见返回值是 4 个: ",[30,114801,114802],{},"obs, reward, done, info",[564,114804,114805,114806,29638],{},"Gymnasium 返回值是 5 个: ",[30,114807,114808],{},"obs, reward, terminated, truncated, info",[18,114810,102298],{"id":102297},[14,114812,114813],{},"强化学习环境接口包含:",[1756,114815,114816,114825],{},[1759,114817,114818],{},[1762,114819,114820,114823],{},[1765,114821,114822],{"align":24988},"方法",[1765,114824,103949],{"align":24988},[1802,114826,114827,114837,114847,114857],{},[1762,114828,114829,114834],{},[1807,114830,114831],{"align":24988},[30,114832,114833],{},"reset()",[1807,114835,114836],{"align":24988},"重置环境",[1762,114838,114839,114844],{},[1807,114840,114841],{"align":24988},[30,114842,114843],{},"step(action)",[1807,114845,114846],{"align":24988},"执行动作",[1762,114848,114849,114854],{},[1807,114850,114851],{"align":24988},[30,114852,114853],{},"observation_space",[1807,114855,114856],{"align":24988},"观测空间",[1762,114858,114859,114864],{},[1807,114860,114861],{"align":24988},[30,114862,114863],{},"action_space",[1807,114865,24906],{"align":24988},[14,114867,114868],{},"一个最小环境需要完成:",[23,114870,114873],{"className":114871,"code":114872,"language":6578,"meta":28},[6576],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[30,114874,114872],{"__ignoreMap":28},[1599,114876,114878,102271,114881,105891],{"id":114877},"terminated-和-truncated-的区别",[30,114879,114880],{},"terminated",[30,114882,114883],{},"truncated",[14,114885,114886],{},"Gymnasium 把“结束”拆成两个概念：",[1756,114888,114889,114899],{},[1759,114890,114891],{},[1762,114892,114893,114895,114897],{},[1765,114894,105827],{"align":24988},[1765,114896,101953],{"align":24988},[1765,114898,22438],{"align":24988},[1802,114900,114901,114913],{},[1762,114902,114903,114907,114910],{},[1807,114904,114905],{"align":24988},[30,114906,114880],{},[1807,114908,114909],{"align":24988},"任务自然结束",[1807,114911,114912],{"align":24988},"机械臂到达目标、机器人摔倒",[1762,114914,114915,114919,114922],{},[1807,114916,114917],{"align":24988},[30,114918,114883],{},[1807,114920,114921],{"align":24988},"因外部限制截断",[1807,114923,114924],{"align":24988},"达到最大步数、时间限制",[14,114926,114927],{},"本章中：",[23,114929,114931],{"className":31631,"code":114930,"language":31633,"meta":28,"style":28},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[30,114932,114933,114948],{"__ignoreMap":28},[33,114934,114935,114938,114940,114943,114945],{"class":35,"line":36},[33,114936,114937],{"class":47},"terminated ",[33,114939,73],{"class":39},[33,114941,114942],{"class":47}," dist ",[33,114944,875],{"class":39},[33,114946,114947],{"class":76}," 0.05\n",[33,114949,114950,114953,114955,114957,114960,114962,114964],{"class":35,"line":51},[33,114951,114952],{"class":47},"truncated ",[33,114954,73],{"class":39},[33,114956,40126],{"class":76},[33,114958,114959],{"class":47},".steps ",[33,114961,3151],{"class":39},[33,114963,40126],{"class":76},[33,114965,114966],{"class":47},".max_steps\n",[14,114968,114969],{},"也就是：",[574,114971,114972,114975],{},[564,114973,114974],{},"末端距离目标小于 0.05，任务成功结束。",[564,114976,114977],{},"步数超过上限，episode 被截断。",[1599,114979,114981,102271,114983],{"id":114980},"observation_space-和-action_space",[30,114982,114853],{},[30,114984,114863],{},[14,114986,114987],{},"这两个对象告诉算法：",[23,114989,114992],{"className":114990,"code":114991,"language":6578,"meta":28},[6576],"观测长什么样\n动作允许多大\n",[30,114993,114991],{"__ignoreMap":28},[14,114995,15884],{},[23,114997,114999],{"className":31631,"code":114998,"language":31633,"meta":28,"style":28},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[30,115000,115001],{"__ignoreMap":28},[33,115002,115003,115005,115008,115010,115013,115016,115019,115021,115023,115026,115028,115030,115032,115034,115036,115038,115040,115043,115045,115047],{"class":35,"line":36},[33,115004,32076],{"class":76},[33,115006,115007],{"class":47},".action_space ",[33,115009,73],{"class":39},[33,115011,115012],{"class":47}," spaces.Box(",[33,115014,115015],{"class":955},"low",[33,115017,115018],{"class":39},"=-",[33,115020,103656],{"class":76},[33,115022,13686],{"class":47},[33,115024,115025],{"class":955},"high",[33,115027,73],{"class":39},[33,115029,103656],{"class":76},[33,115031,13686],{"class":47},[33,115033,97216],{"class":955},[33,115035,73],{"class":39},[33,115037,345],{"class":47},[33,115039,707],{"class":76},[33,115041,115042],{"class":47},",), ",[33,115044,94753],{"class":955},[33,115046,73],{"class":39},[33,115048,115049],{"class":47},"np.float32)\n",[14,115051,115052,115053,115056],{},"表示动作是 2 维数组，每个值都在 ",[30,115054,115055],{},"[-1, 1]"," 范围内。",[23,115058,115060],{"className":31631,"code":115059,"language":31633,"meta":28,"style":28},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[30,115061,115062],{"__ignoreMap":28},[33,115063,115064,115066,115069,115071,115073,115075,115077,115080,115082,115084,115086,115088,115090,115092,115094,115096,115098,115100],{"class":35,"line":36},[33,115065,32076],{"class":76},[33,115067,115068],{"class":47},".observation_space ",[33,115070,73],{"class":39},[33,115072,115012],{"class":47},[33,115074,115015],{"class":955},[33,115076,115018],{"class":39},[33,115078,115079],{"class":47},"np.inf, ",[33,115081,115025],{"class":955},[33,115083,73],{"class":39},[33,115085,115079],{"class":47},[33,115087,97216],{"class":955},[33,115089,73],{"class":39},[33,115091,345],{"class":47},[33,115093,77],{"class":76},[33,115095,115042],{"class":47},[33,115097,94753],{"class":955},[33,115099,73],{"class":39},[33,115101,115049],{"class":47},[14,115103,115104],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[1599,115106,115108],{"id":115107},"frame_skip-是什么","frame_skip 是什么",[23,115110,115112],{"className":31631,"code":115111,"language":31633,"meta":28,"style":28},"self.frame_skip = 5\n",[30,115113,115114],{"__ignoreMap":28},[33,115115,115116,115118,115121,115123],{"class":35,"line":36},[33,115117,32076],{"class":76},[33,115119,115120],{"class":47},".frame_skip ",[33,115122,73],{"class":39},[33,115124,55680],{"class":76},[14,115126,115127,115128,115131,115132,115134],{},"表示外部调用一次 ",[30,115129,115130],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[30,115133,102468],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[18,115136,102506],{"id":102505},[23,115138,115140],{"className":31631,"code":115139,"language":31633,"meta":28,"style":28},"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",[30,115141,115142,115154,115160,115170,115181,115185,115189,115197,115202,115206,115210,115214,115218,115222,115226,115230,115235,115239,115243,115247,115252,115256,115260,115264,115268,115272,115276,115280,115284,115288,115292,115296,115300,115304,115322,115337,115341,115354,115364,115379,115396,115400,115421,115440,115465,115479,115483,115493,115505,115515,115519,115561,115599,115603,115613,115629,115644,115663,115670,115674,115687,115702,115717,115730,115749,115765,115769,115810,115825,115840,115844,115883,115894,115907,115911,115921,115930,115934,115944,115959,115977,115981,115992,116009,116022,116026,116036,116040,116051,116062,116066,116080,116094,116110,116114,116127,116144,116159,116166,116170,116174,116186,116196,116214,116226,116238,116242,116250,116266,116275,116284,116292,116334,116347,116352,116356,116374,116378,116382,116394],{"__ignoreMap":28},[33,115143,115144,115146,115149,115151],{"class":35,"line":36},[33,115145,31645],{"class":39},[33,115147,115148],{"class":47}," gymnasium ",[33,115150,32636],{"class":39},[33,115152,115153],{"class":47}," gym\n",[33,115155,115156,115158],{"class":35,"line":51},[33,115157,31645],{"class":39},[33,115159,102554],{"class":47},[33,115161,115162,115164,115166,115168],{"class":35,"line":57},[33,115163,31645],{"class":39},[33,115165,32633],{"class":47},[33,115167,32636],{"class":39},[33,115169,32639],{"class":47},[33,115171,115172,115174,115176,115178],{"class":35,"line":64},[33,115173,31990],{"class":39},[33,115175,115148],{"class":47},[33,115177,31645],{"class":39},[33,115179,115180],{"class":47}," spaces\n",[33,115182,115183],{"class":35,"line":83},[33,115184,160],{"emptyLinePlaceholder":159},[33,115186,115187],{"class":35,"line":89},[33,115188,160],{"emptyLinePlaceholder":159},[33,115190,115191,115193,115195],{"class":35,"line":98},[33,115192,102567],{"class":76},[33,115194,14815],{"class":39},[33,115196,102572],{"class":119},[33,115198,115199],{"class":35,"line":110},[33,115200,115201],{"class":119},"\u003Cmujoco model=\"gym_reacher\">\n",[33,115203,115204],{"class":35,"line":134},[33,115205,112991],{"class":119},[33,115207,115208],{"class":35,"line":156},[33,115209,160],{"emptyLinePlaceholder":159},[33,115211,115212],{"class":35,"line":163},[33,115213,102591],{"class":119},[33,115215,115216],{"class":35,"line":169},[33,115217,113009],{"class":119},[33,115219,115220],{"class":35,"line":175},[33,115221,160],{"emptyLinePlaceholder":159},[33,115223,115224],{"class":35,"line":181},[33,115225,113018],{"class":119},[33,115227,115228],{"class":35,"line":196},[33,115229,113023],{"class":119},[33,115231,115232],{"class":35,"line":213},[33,115233,115234],{"class":119},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,115236,115237],{"class":35,"line":228},[33,115238,160],{"emptyLinePlaceholder":159},[33,115240,115241],{"class":35,"line":1345},[33,115242,113037],{"class":119},[33,115244,115245],{"class":35,"line":1350},[33,115246,113042],{"class":119},[33,115248,115249],{"class":35,"line":1359},[33,115250,115251],{"class":119},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[33,115253,115254],{"class":35,"line":1364},[33,115255,113052],{"class":119},[33,115257,115258],{"class":35,"line":1370},[33,115259,107691],{"class":119},[33,115261,115262],{"class":35,"line":1425},[33,115263,102620],{"class":119},[33,115265,115266],{"class":35,"line":1438},[33,115267,102625],{"class":119},[33,115269,115270],{"class":35,"line":1451},[33,115271,160],{"emptyLinePlaceholder":159},[33,115273,115274],{"class":35,"line":1457},[33,115275,107708],{"class":119},[33,115277,115278],{"class":35,"line":1466},[33,115279,113077],{"class":119},[33,115281,115282],{"class":35,"line":1471},[33,115283,113082],{"class":119},[33,115285,115286],{"class":35,"line":1477},[33,115287,107718],{"class":119},[33,115289,115290],{"class":35,"line":1504},[33,115291,102630],{"class":119},[33,115293,115294],{"class":35,"line":1509},[33,115295,96951],{"class":119},[33,115297,115298],{"class":35,"line":1525},[33,115299,160],{"emptyLinePlaceholder":159},[33,115301,115302],{"class":35,"line":1535},[33,115303,160],{"emptyLinePlaceholder":159},[33,115305,115306,115308,115311,115313,115315,115317,115320],{"class":35,"line":1540},[33,115307,15945],{"class":39},[33,115309,115310],{"class":43}," ReacherEnv",[33,115312,345],{"class":47},[33,115314,114793],{"class":43},[33,115316,2158],{"class":47},[33,115318,115319],{"class":43},"Env",[33,115321,32039],{"class":47},[33,115323,115324,115327,115329,115331,115334],{"class":35,"line":4027},[33,115325,115326],{"class":47},"    metadata ",[33,115328,73],{"class":39},[33,115330,5845],{"class":47},[33,115332,115333],{"class":119},"\"render_modes\"",[33,115335,115336],{"class":47},": []}\n",[33,115338,115339],{"class":35,"line":4032},[33,115340,160],{"emptyLinePlaceholder":159},[33,115342,115343,115345,115347,115350,115352],{"class":35,"line":9199},[33,115344,32054],{"class":39},[33,115346,32057],{"class":76},[33,115348,115349],{"class":47},"(self) -> ",[33,115351,96939],{"class":76},[33,115353,5141],{"class":47},[33,115355,115356,115358,115360,115362],{"class":35,"line":9223},[33,115357,32070],{"class":76},[33,115359,18512],{"class":47},[33,115361,32082],{"class":76},[33,115363,48],{"class":47},[33,115365,115366,115368,115371,115373,115375,115377],{"class":35,"line":9228},[33,115367,32098],{"class":76},[33,115369,115370],{"class":47},".model ",[33,115372,73],{"class":39},[33,115374,102665],{"class":47},[33,115376,102567],{"class":76},[33,115378,884],{"class":47},[33,115380,115381,115383,115386,115388,115391,115393],{"class":35,"line":9234},[33,115382,32098],{"class":76},[33,115384,115385],{"class":47},".data ",[33,115387,73],{"class":39},[33,115389,115390],{"class":47}," mujoco.MjData(",[33,115392,32076],{"class":76},[33,115394,115395],{"class":47},".model)\n",[33,115397,115398],{"class":35,"line":9261},[33,115399,160],{"emptyLinePlaceholder":159},[33,115401,115402,115404,115407,115409,115412,115414,115417,115419],{"class":35,"line":9266},[33,115403,32098],{"class":76},[33,115405,115406],{"class":47},".tip_site_id ",[33,115408,73],{"class":39},[33,115410,115411],{"class":47}," mujoco.mj_name2id(",[33,115413,32076],{"class":76},[33,115415,115416],{"class":47},".model, mujoco.mjtObj.mjOBJ_SITE, ",[33,115418,112789],{"class":119},[33,115420,884],{"class":47},[33,115422,115423,115425,115428,115430,115432,115434,115436,115438],{"class":35,"line":9272},[33,115424,32098],{"class":76},[33,115426,115427],{"class":47},".target_site_id ",[33,115429,73],{"class":39},[33,115431,115411],{"class":47},[33,115433,32076],{"class":76},[33,115435,115416],{"class":47},[33,115437,113212],{"class":119},[33,115439,884],{"class":47},[33,115441,115442,115444,115446,115448,115450,115452,115455,115457,115459,115461,115463],{"class":35,"line":9284},[33,115443,3915],{"class":39},[33,115445,40126],{"class":76},[33,115447,115406],{"class":47},[33,115449,875],{"class":39},[33,115451,5492],{"class":76},[33,115453,115454],{"class":39}," or",[33,115456,40126],{"class":76},[33,115458,115427],{"class":47},[33,115460,875],{"class":39},[33,115462,5492],{"class":76},[33,115464,5141],{"class":47},[33,115466,115467,115470,115472,115474,115477],{"class":35,"line":9296},[33,115468,115469],{"class":39},"            raise",[33,115471,104688],{"class":76},[33,115473,345],{"class":47},[33,115475,115476],{"class":119},"\"required sites not found\"",[33,115478,884],{"class":47},[33,115480,115481],{"class":35,"line":9308},[33,115482,160],{"emptyLinePlaceholder":159},[33,115484,115485,115487,115489,115491],{"class":35,"line":10967},[33,115486,32098],{"class":76},[33,115488,115120],{"class":47},[33,115490,73],{"class":39},[33,115492,55680],{"class":76},[33,115494,115495,115497,115500,115502],{"class":35,"line":10992},[33,115496,32098],{"class":76},[33,115498,115499],{"class":47},".max_steps ",[33,115501,73],{"class":39},[33,115503,115504],{"class":76}," 200\n",[33,115506,115507,115509,115511,115513],{"class":35,"line":11015},[33,115508,32098],{"class":76},[33,115510,114959],{"class":47},[33,115512,73],{"class":39},[33,115514,48586],{"class":76},[33,115516,115517],{"class":35,"line":11039},[33,115518,160],{"emptyLinePlaceholder":159},[33,115520,115521,115523,115525,115527,115529,115531,115533,115535,115537,115539,115541,115543,115545,115547,115549,115551,115553,115555,115557,115559],{"class":35,"line":11044},[33,115522,32098],{"class":76},[33,115524,115007],{"class":47},[33,115526,73],{"class":39},[33,115528,115012],{"class":47},[33,115530,115015],{"class":955},[33,115532,115018],{"class":39},[33,115534,103656],{"class":76},[33,115536,13686],{"class":47},[33,115538,115025],{"class":955},[33,115540,73],{"class":39},[33,115542,103656],{"class":76},[33,115544,13686],{"class":47},[33,115546,97216],{"class":955},[33,115548,73],{"class":39},[33,115550,345],{"class":47},[33,115552,707],{"class":76},[33,115554,115042],{"class":47},[33,115556,94753],{"class":955},[33,115558,73],{"class":39},[33,115560,115049],{"class":47},[33,115562,115563,115565,115567,115569,115571,115573,115575,115577,115579,115581,115583,115585,115587,115589,115591,115593,115595,115597],{"class":35,"line":11049},[33,115564,32098],{"class":76},[33,115566,115068],{"class":47},[33,115568,73],{"class":39},[33,115570,115012],{"class":47},[33,115572,115015],{"class":955},[33,115574,115018],{"class":39},[33,115576,115079],{"class":47},[33,115578,115025],{"class":955},[33,115580,73],{"class":39},[33,115582,115079],{"class":47},[33,115584,97216],{"class":955},[33,115586,73],{"class":39},[33,115588,345],{"class":47},[33,115590,77],{"class":76},[33,115592,115042],{"class":47},[33,115594,94753],{"class":955},[33,115596,73],{"class":39},[33,115598,115049],{"class":47},[33,115600,115601],{"class":35,"line":11054},[33,115602,160],{"emptyLinePlaceholder":159},[33,115604,115605,115607,115610],{"class":35,"line":11063},[33,115606,32054],{"class":39},[33,115608,115609],{"class":43}," _get_obs",[33,115611,115612],{"class":47},"(self) -> np.ndarray:\n",[33,115614,115615,115617,115619,115621,115624,115626],{"class":35,"line":11068},[33,115616,113390],{"class":47},[33,115618,73],{"class":39},[33,115620,40126],{"class":76},[33,115622,115623],{"class":47},".data.site_xpos[",[33,115625,32076],{"class":76},[33,115627,115628],{"class":47},".tip_site_id].copy()\n",[33,115630,115631,115633,115635,115637,115639,115641],{"class":35,"line":11074},[33,115632,113403],{"class":47},[33,115634,73],{"class":39},[33,115636,40126],{"class":76},[33,115638,115623],{"class":47},[33,115640,32076],{"class":76},[33,115642,115643],{"class":47},".target_site_id].copy()\n",[33,115645,115646,115648,115650,115653,115655,115658,115660],{"class":35,"line":11095},[33,115647,111435],{"class":47},[33,115649,73],{"class":39},[33,115651,115652],{"class":47}," np.concatenate([",[33,115654,32076],{"class":76},[33,115656,115657],{"class":47},".data.qpos.copy(), ",[33,115659,32076],{"class":76},[33,115661,115662],{"class":47},".data.qvel.copy(), tip, target])\n",[33,115664,115665,115667],{"class":35,"line":11101},[33,115666,16003],{"class":39},[33,115668,115669],{"class":47}," obs.astype(np.float32)\n",[33,115671,115672],{"class":35,"line":11115},[33,115673,160],{"emptyLinePlaceholder":159},[33,115675,115676,115678,115681,115683,115685],{"class":35,"line":11121},[33,115677,32054],{"class":39},[33,115679,115680],{"class":43}," _get_reward",[33,115682,115349],{"class":47},[33,115684,1666],{"class":76},[33,115686,5141],{"class":47},[33,115688,115689,115691,115693,115695,115697,115699],{"class":35,"line":11148},[33,115690,113390],{"class":47},[33,115692,73],{"class":39},[33,115694,40126],{"class":76},[33,115696,115623],{"class":47},[33,115698,32076],{"class":76},[33,115700,115701],{"class":47},".tip_site_id]\n",[33,115703,115704,115706,115708,115710,115712,115714],{"class":35,"line":11157},[33,115705,113403],{"class":47},[33,115707,73],{"class":39},[33,115709,40126],{"class":76},[33,115711,115623],{"class":47},[33,115713,32076],{"class":76},[33,115715,115716],{"class":47},".target_site_id]\n",[33,115718,115719,115722,115724,115726,115728],{"class":35,"line":11163},[33,115720,115721],{"class":47},"        dist ",[33,115723,73],{"class":39},[33,115725,112854],{"class":47},[33,115727,1199],{"class":39},[33,115729,112859],{"class":47},[33,115731,115732,115735,115737,115739,115741,115744,115746],{"class":35,"line":11171},[33,115733,115734],{"class":47},"        control_cost ",[33,115736,73],{"class":39},[33,115738,113290],{"class":76},[33,115740,303],{"class":39},[33,115742,115743],{"class":47}," np.sum(np.square(",[33,115745,32076],{"class":76},[33,115747,115748],{"class":47},".data.ctrl))\n",[33,115750,115751,115753,115755,115757,115759,115761,115763],{"class":35,"line":11176},[33,115752,16003],{"class":39},[33,115754,111050],{"class":76},[33,115756,345],{"class":47},[33,115758,1199],{"class":39},[33,115760,112849],{"class":47},[33,115762,1199],{"class":39},[33,115764,113312],{"class":47},[33,115766,115767],{"class":35,"line":17855},[33,115768,160],{"emptyLinePlaceholder":159},[33,115770,115771,115773,115776,115779,115781,115784,115786,115788,115790,115792,115794,115797,115800,115802,115804,115806,115808],{"class":35,"line":17861},[33,115772,32054],{"class":39},[33,115774,115775],{"class":43}," reset",[33,115777,115778],{"class":47},"(self, ",[33,115780,2057],{"class":39},[33,115782,115783],{"class":47},", seed: ",[33,115785,40],{"class":76},[33,115787,26362],{"class":39},[33,115789,40186],{"class":76},[33,115791,14815],{"class":39},[33,115793,40186],{"class":76},[33,115795,115796],{"class":47},", options: ",[33,115798,115799],{"class":76},"dict",[33,115801,26362],{"class":39},[33,115803,40186],{"class":76},[33,115805,14815],{"class":39},[33,115807,40186],{"class":76},[33,115809,32039],{"class":47},[33,115811,115812,115814,115817,115820,115822],{"class":35,"line":17884},[33,115813,32070],{"class":76},[33,115815,115816],{"class":47},"().reset(",[33,115818,115819],{"class":955},"seed",[33,115821,73],{"class":39},[33,115823,115824],{"class":47},"seed)\n",[33,115826,115827,115830,115832,115835,115837],{"class":35,"line":17890},[33,115828,115829],{"class":47},"        mujoco.mj_resetData(",[33,115831,32076],{"class":76},[33,115833,115834],{"class":47},".model, ",[33,115836,32076],{"class":76},[33,115838,115839],{"class":47},".data)\n",[33,115841,115842],{"class":35,"line":17913},[33,115843,160],{"emptyLinePlaceholder":159},[33,115845,115846,115848,115851,115853,115855,115858,115860,115862,115864,115866,115868,115870,115872,115874,115876,115878,115880],{"class":35,"line":17927},[33,115847,32098],{"class":76},[33,115849,115850],{"class":47},".data.qpos[:] ",[33,115852,73],{"class":39},[33,115854,40126],{"class":76},[33,115856,115857],{"class":47},".np_random.uniform(",[33,115859,115015],{"class":955},[33,115861,115018],{"class":39},[33,115863,87463],{"class":76},[33,115865,13686],{"class":47},[33,115867,115025],{"class":955},[33,115869,73],{"class":39},[33,115871,87463],{"class":76},[33,115873,13686],{"class":47},[33,115875,32749],{"class":955},[33,115877,73],{"class":39},[33,115879,32076],{"class":76},[33,115881,115882],{"class":47},".model.nq)\n",[33,115884,115885,115887,115890,115892],{"class":35,"line":17947},[33,115886,32098],{"class":76},[33,115888,115889],{"class":47},".data.qvel[:] ",[33,115891,73],{"class":39},[33,115893,106014],{"class":76},[33,115895,115896,115899,115901,115903,115905],{"class":35,"line":17953},[33,115897,115898],{"class":47},"        mujoco.mj_forward(",[33,115900,32076],{"class":76},[33,115902,115834],{"class":47},[33,115904,32076],{"class":76},[33,115906,115839],{"class":47},[33,115908,115909],{"class":35,"line":17964},[33,115910,160],{"emptyLinePlaceholder":159},[33,115912,115913,115915,115917,115919],{"class":35,"line":17987},[33,115914,32098],{"class":76},[33,115916,114959],{"class":47},[33,115918,73],{"class":39},[33,115920,48586],{"class":76},[33,115922,115923,115925,115927],{"class":35,"line":18009},[33,115924,16003],{"class":39},[33,115926,40126],{"class":76},[33,115928,115929],{"class":47},"._get_obs(), {}\n",[33,115931,115932],{"class":35,"line":18014},[33,115933,160],{"emptyLinePlaceholder":159},[33,115935,115936,115938,115941],{"class":35,"line":18020},[33,115937,32054],{"class":39},[33,115939,115940],{"class":43}," step",[33,115942,115943],{"class":47},"(self, action):\n",[33,115945,115946,115948,115950,115953,115955,115957],{"class":35,"line":18034},[33,115947,111475],{"class":47},[33,115949,73],{"class":39},[33,115951,115952],{"class":47}," np.asarray(action, ",[33,115954,94753],{"class":955},[33,115956,73],{"class":39},[33,115958,115049],{"class":47},[33,115960,115961,115963,115965,115967,115969,115972,115974],{"class":35,"line":18047},[33,115962,111475],{"class":47},[33,115964,73],{"class":39},[33,115966,108700],{"class":47},[33,115968,32076],{"class":76},[33,115970,115971],{"class":47},".action_space.low, ",[33,115973,32076],{"class":76},[33,115975,115976],{"class":47},".action_space.high)\n",[33,115978,115979],{"class":35,"line":18052},[33,115980,160],{"emptyLinePlaceholder":159},[33,115982,115983,115985,115988,115990],{"class":35,"line":18066},[33,115984,32098],{"class":76},[33,115986,115987],{"class":47},".data.ctrl[:] ",[33,115989,73],{"class":39},[33,115991,108723],{"class":47},[33,115993,115994,115996,115998,116000,116002,116004,116006],{"class":35,"line":18071},[33,115995,1216],{"class":39},[33,115997,102754],{"class":47},[33,115999,27296],{"class":39},[33,116001,33696],{"class":76},[33,116003,345],{"class":47},[33,116005,32076],{"class":76},[33,116007,116008],{"class":47},".frame_skip):\n",[33,116010,116011,116014,116016,116018,116020],{"class":35,"line":18077},[33,116012,116013],{"class":47},"            mujoco.mj_step(",[33,116015,32076],{"class":76},[33,116017,115834],{"class":47},[33,116019,32076],{"class":76},[33,116021,115839],{"class":47},[33,116023,116024],{"class":35,"line":18082},[33,116025,160],{"emptyLinePlaceholder":159},[33,116027,116028,116030,116032,116034],{"class":35,"line":18096},[33,116029,32098],{"class":76},[33,116031,114959],{"class":47},[33,116033,10728],{"class":39},[33,116035,56952],{"class":76},[33,116037,116038],{"class":35,"line":18101},[33,116039,160],{"emptyLinePlaceholder":159},[33,116041,116042,116044,116046,116048],{"class":35,"line":18106},[33,116043,111435],{"class":47},[33,116045,73],{"class":39},[33,116047,40126],{"class":76},[33,116049,116050],{"class":47},"._get_obs()\n",[33,116052,116053,116055,116057,116059],{"class":35,"line":18120},[33,116054,111540],{"class":47},[33,116056,73],{"class":39},[33,116058,40126],{"class":76},[33,116060,116061],{"class":47},"._get_reward()\n",[33,116063,116064],{"class":35,"line":18132},[33,116065,160],{"emptyLinePlaceholder":159},[33,116067,116068,116070,116072,116074,116076,116078],{"class":35,"line":18137},[33,116069,113390],{"class":47},[33,116071,73],{"class":39},[33,116073,40126],{"class":76},[33,116075,115623],{"class":47},[33,116077,32076],{"class":76},[33,116079,115701],{"class":47},[33,116081,116082,116084,116086,116088,116090,116092],{"class":35,"line":18150},[33,116083,113403],{"class":47},[33,116085,73],{"class":39},[33,116087,40126],{"class":76},[33,116089,115623],{"class":47},[33,116091,32076],{"class":76},[33,116093,115716],{"class":47},[33,116095,116096,116098,116100,116102,116105,116107],{"class":35,"line":18155},[33,116097,115721],{"class":47},[33,116099,73],{"class":39},[33,116101,111050],{"class":76},[33,116103,116104],{"class":47},"(np.linalg.norm(tip ",[33,116106,1199],{"class":39},[33,116108,116109],{"class":47}," target))\n",[33,116111,116112],{"class":35,"line":18160},[33,116113,160],{"emptyLinePlaceholder":159},[33,116115,116116,116119,116121,116123,116125],{"class":35,"line":18165},[33,116117,116118],{"class":47},"        terminated ",[33,116120,73],{"class":39},[33,116122,114942],{"class":47},[33,116124,875],{"class":39},[33,116126,114947],{"class":76},[33,116128,116129,116132,116134,116136,116138,116140,116142],{"class":35,"line":18178},[33,116130,116131],{"class":47},"        truncated ",[33,116133,73],{"class":39},[33,116135,40126],{"class":76},[33,116137,114959],{"class":47},[33,116139,3151],{"class":39},[33,116141,40126],{"class":76},[33,116143,114966],{"class":47},[33,116145,116146,116149,116151,116153,116156],{"class":35,"line":18183},[33,116147,116148],{"class":47},"        info ",[33,116150,73],{"class":39},[33,116152,5845],{"class":47},[33,116154,116155],{"class":119},"\"distance\"",[33,116157,116158],{"class":47},": dist}\n",[33,116160,116161,116163],{"class":35,"line":33886},[33,116162,16003],{"class":39},[33,116164,116165],{"class":47}," obs, reward, terminated, truncated, info\n",[33,116167,116168],{"class":35,"line":33892},[33,116169,160],{"emptyLinePlaceholder":159},[33,116171,116172],{"class":35,"line":33898},[33,116173,160],{"emptyLinePlaceholder":159},[33,116175,116176,116178,116180,116182,116184],{"class":35,"line":33904},[33,116177,33200],{"class":39},[33,116179,44],{"class":43},[33,116181,102651],{"class":47},[33,116183,96939],{"class":76},[33,116185,5141],{"class":47},[33,116187,116188,116191,116193],{"class":35,"line":33910},[33,116189,116190],{"class":47},"    env ",[33,116192,73],{"class":39},[33,116194,116195],{"class":47}," ReacherEnv()\n",[33,116197,116198,116201,116203,116206,116208,116210,116212],{"class":35,"line":33921},[33,116199,116200],{"class":47},"    obs, info ",[33,116202,73],{"class":39},[33,116204,116205],{"class":47}," env.reset(",[33,116207,115819],{"class":955},[33,116209,73],{"class":39},[33,116211,766],{"class":76},[33,116213,884],{"class":47},[33,116215,116216,116218,116220,116223],{"class":35,"line":33927},[33,116217,32552],{"class":76},[33,116219,345],{"class":47},[33,116221,116222],{"class":119},"\"initial obs shape:\"",[33,116224,116225],{"class":47},", obs.shape)\n",[33,116227,116228,116230,116232,116235],{"class":35,"line":33947},[33,116229,32552],{"class":76},[33,116231,345],{"class":47},[33,116233,116234],{"class":119},"\"initial info:\"",[33,116236,116237],{"class":47},", info)\n",[33,116239,116240],{"class":35,"line":33953},[33,116241,160],{"emptyLinePlaceholder":159},[33,116243,116244,116246,116248],{"class":35,"line":33964},[33,116245,111406],{"class":47},[33,116247,73],{"class":39},[33,116249,106014],{"class":76},[33,116251,116252,116254,116256,116258,116260,116262,116264],{"class":35,"line":33970},[33,116253,857],{"class":39},[33,116255,32869],{"class":47},[33,116257,27296],{"class":39},[33,116259,33696],{"class":76},[33,116261,345],{"class":47},[33,116263,1045],{"class":76},[33,116265,32039],{"class":47},[33,116267,116268,116270,116272],{"class":35,"line":33976},[33,116269,111475],{"class":47},[33,116271,73],{"class":39},[33,116273,116274],{"class":47}," env.action_space.sample()\n",[33,116276,116277,116280,116282],{"class":35,"line":33982},[33,116278,116279],{"class":47},"        obs, reward, terminated, truncated, info ",[33,116281,73],{"class":39},[33,116283,114668],{"class":47},[33,116285,116286,116288,116290],{"class":35,"line":33988},[33,116287,111550],{"class":47},[33,116289,10728],{"class":39},[33,116291,111555],{"class":47},[33,116293,116294,116296,116298,116300,116302,116305,116307,116309,116312,116314,116316,116319,116321,116323,116326,116328,116330,116332],{"class":35,"line":33994},[33,116295,33704],{"class":76},[33,116297,345],{"class":47},[33,116299,111584],{"class":119},[33,116301,111587],{"class":47},[33,116303,116304],{"class":119},"\"reward:\"",[33,116306,13686],{"class":47},[33,116308,33271],{"class":76},[33,116310,116311],{"class":47},"(reward, ",[33,116313,712],{"class":76},[33,116315,111598],{"class":47},[33,116317,116318],{"class":119},"\"distance:\"",[33,116320,13686],{"class":47},[33,116322,33271],{"class":76},[33,116324,116325],{"class":47},"(info[",[33,116327,116155],{"class":119},[33,116329,113455],{"class":47},[33,116331,712],{"class":76},[33,116333,31750],{"class":47},[33,116335,116336,116338,116341,116344],{"class":35,"line":34000},[33,116337,3915],{"class":39},[33,116339,116340],{"class":47}," terminated ",[33,116342,116343],{"class":39},"or",[33,116345,116346],{"class":47}," truncated:\n",[33,116348,116349],{"class":35,"line":34006},[33,116350,116351],{"class":39},"            break\n",[33,116353,116354],{"class":35,"line":34026},[33,116355,160],{"emptyLinePlaceholder":159},[33,116357,116358,116360,116362,116364,116366,116368,116370,116372],{"class":35,"line":34032},[33,116359,32552],{"class":76},[33,116361,345],{"class":47},[33,116363,111629],{"class":119},[33,116365,13686],{"class":47},[33,116367,33271],{"class":76},[33,116369,111636],{"class":47},[33,116371,712],{"class":76},[33,116373,31750],{"class":47},[33,116375,116376],{"class":35,"line":34048},[33,116377,160],{"emptyLinePlaceholder":159},[33,116379,116380],{"class":35,"line":34054},[33,116381,160],{"emptyLinePlaceholder":159},[33,116383,116384,116386,116388,116390,116392],{"class":35,"line":34068},[33,116385,2987],{"class":39},[33,116387,32473],{"class":76},[33,116389,102812],{"class":39},[33,116391,102815],{"class":119},[33,116393,5141],{"class":47},[33,116395,116396],{"class":35,"line":34074},[33,116397,102822],{"class":47},[14,116399,104823],{},[23,116401,116403],{"className":25074,"code":116402,"language":25076,"meta":28,"style":28},"touch ch8_gym_env.py\n",[30,116404,116405],{"__ignoreMap":28},[33,116406,116407,116409],{"class":35,"line":36},[33,116408,102536],{"class":43},[33,116410,116411],{"class":119}," ch8_gym_env.py\n",[14,116413,111697],{},[23,116415,116417],{"className":25074,"code":116416,"language":25076,"meta":28,"style":28},"python ch8_gym_env.py\n",[30,116418,116419],{"__ignoreMap":28},[33,116420,116421,116423],{"class":35,"line":36},[33,116422,31633],{"class":43},[33,116424,116411],{"class":119},[1599,116426,102825],{"id":102825},[14,116428,116429],{},"继承 Gymnasium 环境：",[23,116431,116433],{"className":31631,"code":116432,"language":31633,"meta":28,"style":28},"class ReacherEnv(gym.Env):\n",[30,116434,116435],{"__ignoreMap":28},[33,116436,116437,116439,116441,116443,116445,116447,116449],{"class":35,"line":36},[33,116438,15945],{"class":39},[33,116440,115310],{"class":43},[33,116442,345],{"class":47},[33,116444,114793],{"class":43},[33,116446,2158],{"class":47},[33,116448,115319],{"class":43},[33,116450,32039],{"class":47},[14,116452,116453],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,116455,116456],{},"初始化模型：",[23,116458,116460],{"className":31631,"code":116459,"language":31633,"meta":28,"style":28},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[30,116461,116462,116476],{"__ignoreMap":28},[33,116463,116464,116466,116468,116470,116472,116474],{"class":35,"line":36},[33,116465,32076],{"class":76},[33,116467,115370],{"class":47},[33,116469,73],{"class":39},[33,116471,102665],{"class":47},[33,116473,102567],{"class":76},[33,116475,884],{"class":47},[33,116477,116478,116480,116482,116484,116486,116488],{"class":35,"line":51},[33,116479,32076],{"class":76},[33,116481,115385],{"class":47},[33,116483,73],{"class":39},[33,116485,115390],{"class":47},[33,116487,32076],{"class":76},[33,116489,115395],{"class":47},[14,116491,116492,116493,116495],{},"这和前面章节一样，只是现在放到了类的 ",[30,116494,32082],{}," 里。",[14,116497,116498],{},"缓存 site ID：",[23,116500,116502],{"className":31631,"code":116501,"language":31633,"meta":28,"style":28},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[30,116503,116504,116518],{"__ignoreMap":28},[33,116505,116506,116508,116510,116512,116514,116516],{"class":35,"line":36},[33,116507,32076],{"class":76},[33,116509,115406],{"class":47},[33,116511,73],{"class":39},[33,116513,115411],{"class":47},[33,116515,90807],{"class":76},[33,116517,884],{"class":47},[33,116519,116520,116522,116524,116526,116528,116530],{"class":35,"line":51},[33,116521,32076],{"class":76},[33,116523,115427],{"class":47},[33,116525,73],{"class":39},[33,116527,115411],{"class":47},[33,116529,90807],{"class":76},[33,116531,884],{"class":47},[14,116533,116534],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,116536,116537],{},"reset：",[23,116539,116541],{"className":31631,"code":116540,"language":31633,"meta":28,"style":28},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[30,116542,116543],{"__ignoreMap":28},[33,116544,116545,116547,116549,116551,116553,116555,116557,116559,116561,116563,116565,116567,116569,116571,116573,116575,116577],{"class":35,"line":36},[33,116546,33200],{"class":39},[33,116548,115775],{"class":43},[33,116550,115778],{"class":47},[33,116552,2057],{"class":39},[33,116554,115783],{"class":47},[33,116556,40],{"class":76},[33,116558,26362],{"class":39},[33,116560,40186],{"class":76},[33,116562,14815],{"class":39},[33,116564,40186],{"class":76},[33,116566,115796],{"class":47},[33,116568,115799],{"class":76},[33,116570,26362],{"class":39},[33,116572,40186],{"class":76},[33,116574,14815],{"class":39},[33,116576,40186],{"class":76},[33,116578,32039],{"class":47},[14,116580,116581,116583],{},[30,116582,71309],{}," 做四件事：",[574,116585,116586,116589,116592,116595],{},[564,116587,116588],{},"设置随机种子。",[564,116590,116591],{},"重置 MuJoCo data。",[564,116593,116594],{},"随机初始化关节角。",[564,116596,116597],{},"返回初始观测和 info。",[14,116599,116600],{},"step：",[23,116602,116604],{"className":31631,"code":116603,"language":31633,"meta":28,"style":28},"def step(self, action):\n",[30,116605,116606],{"__ignoreMap":28},[33,116607,116608,116610,116612],{"class":35,"line":36},[33,116609,33200],{"class":39},[33,116611,115940],{"class":43},[33,116613,115943],{"class":47},[14,116615,116616,116618],{},[30,116617,108387],{}," 做六件事：",[574,116620,116621,116624,116630,116633,116636,116639],{},[564,116622,116623],{},"检查并裁剪 action。",[564,116625,116626,116627,29638],{},"写入 ",[30,116628,116629],{},"self.data.ctrl",[564,116631,116632],{},"连续推进若干个 MuJoCo 物理步。",[564,116634,116635],{},"计算新观测。",[564,116637,116638],{},"计算奖励和结束条件。",[564,116640,116641],{},"返回 Gymnasium 标准五元组。",[1599,116643,102961],{"id":102961},[23,116645,116647],{"className":31631,"code":116646,"language":31633,"meta":28,"style":28},"import gymnasium as gym\n",[30,116648,116649],{"__ignoreMap":28},[33,116650,116651,116653,116655,116657],{"class":35,"line":36},[33,116652,31645],{"class":39},[33,116654,115148],{"class":47},[33,116656,32636],{"class":39},[33,116658,115153],{"class":47},[14,116660,116661,116662,116664,116665,116668],{},"导入 Gymnasium，并起别名 ",[30,116663,114793],{},"。后面写 ",[30,116666,116667],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[23,116670,116672],{"className":31631,"code":116671,"language":31633,"meta":28,"style":28},"from gymnasium import spaces\n",[30,116673,116674],{"__ignoreMap":28},[33,116675,116676,116678,116680,116682],{"class":35,"line":36},[33,116677,31990],{"class":39},[33,116679,115148],{"class":47},[33,116681,31645],{"class":39},[33,116683,115180],{"class":47},[14,116685,116686,116687,116690],{},"导入空间定义工具。",[30,116688,116689],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[23,116692,116693],{"className":31631,"code":116432,"language":31633,"meta":28,"style":28},[30,116694,116695],{"__ignoreMap":28},[33,116696,116697,116699,116701,116703,116705,116707,116709],{"class":35,"line":36},[33,116698,15945],{"class":39},[33,116700,115310],{"class":43},[33,116702,345],{"class":47},[33,116704,114793],{"class":43},[33,116706,2158],{"class":47},[33,116708,115319],{"class":43},[33,116710,32039],{"class":47},[14,116712,116713,116714,116717,116718,116720,116721,102271,116723,116725],{},"定义一个类，名字叫 ",[30,116715,116716],{},"ReacherEnv","。括号里的 ",[30,116719,116667],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[30,116722,71309],{},[30,116724,108387],{}," 这两个核心方法。",[23,116727,116729],{"className":31631,"code":116728,"language":31633,"meta":28,"style":28},"metadata = {\"render_modes\": []}\n",[30,116730,116731],{"__ignoreMap":28},[33,116732,116733,116736,116738,116740,116742],{"class":35,"line":36},[33,116734,116735],{"class":47},"metadata ",[33,116737,73],{"class":39},[33,116739,5845],{"class":47},[33,116741,115333],{"class":119},[33,116743,115336],{"class":47},[14,116745,116746],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[23,116748,116750],{"className":31631,"code":116749,"language":31633,"meta":28,"style":28},"def __init__(self) -> None:\n",[30,116751,116752],{"__ignoreMap":28},[33,116753,116754,116756,116758,116760,116762],{"class":35,"line":36},[33,116755,33200],{"class":39},[33,116757,32057],{"class":76},[33,116759,115349],{"class":47},[33,116761,96939],{"class":76},[33,116763,5141],{"class":47},[14,116765,116766,116768,116769,29638],{},[30,116767,32082],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[30,116770,116771],{},"env = ReacherEnv()",[23,116773,116775],{"className":31631,"code":116774,"language":31633,"meta":28,"style":28},"super().__init__()\n",[30,116776,116777],{"__ignoreMap":28},[33,116778,116779,116782,116784,116786],{"class":35,"line":36},[33,116780,116781],{"class":76},"super",[33,116783,18512],{"class":47},[33,116785,32082],{"class":76},[33,116787,48],{"class":47},[14,116789,116790,116791,116793],{},"调用父类 ",[30,116792,116667],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[23,116795,116796],{"className":31631,"code":116459,"language":31633,"meta":28,"style":28},[30,116797,116798,116812],{"__ignoreMap":28},[33,116799,116800,116802,116804,116806,116808,116810],{"class":35,"line":36},[33,116801,32076],{"class":76},[33,116803,115370],{"class":47},[33,116805,73],{"class":39},[33,116807,102665],{"class":47},[33,116809,102567],{"class":76},[33,116811,884],{"class":47},[33,116813,116814,116816,116818,116820,116822,116824],{"class":35,"line":51},[33,116815,32076],{"class":76},[33,116817,115385],{"class":47},[33,116819,73],{"class":39},[33,116821,115390],{"class":47},[33,116823,32076],{"class":76},[33,116825,115395],{"class":47},[14,116827,116828,116829,116831,116832,102271,116835,116838],{},"把 MuJoCo 模型和状态保存到 ",[30,116830,32076],{}," 上。",[30,116833,116834],{},"self.model",[30,116836,116837],{},"self.data"," 表示这个环境对象自己的模型和状态。",[23,116840,116841],{"className":31631,"code":116501,"language":31633,"meta":28,"style":28},[30,116842,116843,116857],{"__ignoreMap":28},[33,116844,116845,116847,116849,116851,116853,116855],{"class":35,"line":36},[33,116846,32076],{"class":76},[33,116848,115406],{"class":47},[33,116850,73],{"class":39},[33,116852,115411],{"class":47},[33,116854,90807],{"class":76},[33,116856,884],{"class":47},[33,116858,116859,116861,116863,116865,116867,116869],{"class":35,"line":51},[33,116860,32076],{"class":76},[33,116862,115427],{"class":47},[33,116864,73],{"class":39},[33,116866,115411],{"class":47},[33,116868,90807],{"class":76},[33,116870,884],{"class":47},[14,116872,116873,116874,102271,116877,116880],{},"提前查好 tip 和 target 的 site ID。这样 ",[30,116875,116876],{},"_get_obs",[30,116878,116879],{},"_get_reward"," 里就不用每次按名字查找。",[23,116882,116884],{"className":31631,"code":116883,"language":31633,"meta":28,"style":28},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[30,116885,116886,116896,116906],{"__ignoreMap":28},[33,116887,116888,116890,116892,116894],{"class":35,"line":36},[33,116889,32076],{"class":76},[33,116891,115120],{"class":47},[33,116893,73],{"class":39},[33,116895,55680],{"class":76},[33,116897,116898,116900,116902,116904],{"class":35,"line":51},[33,116899,32076],{"class":76},[33,116901,115499],{"class":47},[33,116903,73],{"class":39},[33,116905,115504],{"class":76},[33,116907,116908,116910,116912,116914],{"class":35,"line":57},[33,116909,32076],{"class":76},[33,116911,114959],{"class":47},[33,116913,73],{"class":39},[33,116915,48586],{"class":76},[14,116917,116918,116921,116922,116925,116926,116929],{},[30,116919,116920],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[30,116923,116924],{},"max_steps"," 是一个 episode 最多运行多少步。",[30,116927,116928],{},"steps"," 记录当前 episode 已经走了多少步。",[23,116931,116932],{"className":31631,"code":114998,"language":31633,"meta":28,"style":28},[30,116933,116934],{"__ignoreMap":28},[33,116935,116936,116938,116940,116942,116944,116946,116948,116950,116952,116954,116956,116958,116960,116962,116964,116966,116968,116970,116972,116974],{"class":35,"line":36},[33,116937,32076],{"class":76},[33,116939,115007],{"class":47},[33,116941,73],{"class":39},[33,116943,115012],{"class":47},[33,116945,115015],{"class":955},[33,116947,115018],{"class":39},[33,116949,103656],{"class":76},[33,116951,13686],{"class":47},[33,116953,115025],{"class":955},[33,116955,73],{"class":39},[33,116957,103656],{"class":76},[33,116959,13686],{"class":47},[33,116961,97216],{"class":955},[33,116963,73],{"class":39},[33,116965,345],{"class":47},[33,116967,707],{"class":76},[33,116969,115042],{"class":47},[33,116971,94753],{"class":955},[33,116973,73],{"class":39},[33,116975,115049],{"class":47},[14,116977,116978,116979,116982,116983,102271,116986,116989],{},"定义动作空间。",[30,116980,116981],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[30,116984,116985],{},"low=-1.0",[30,116987,116988],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[23,116991,116992],{"className":31631,"code":115059,"language":31633,"meta":28,"style":28},[30,116993,116994],{"__ignoreMap":28},[33,116995,116996,116998,117000,117002,117004,117006,117008,117010,117012,117014,117016,117018,117020,117022,117024,117026,117028,117030],{"class":35,"line":36},[33,116997,32076],{"class":76},[33,116999,115068],{"class":47},[33,117001,73],{"class":39},[33,117003,115012],{"class":47},[33,117005,115015],{"class":955},[33,117007,115018],{"class":39},[33,117009,115079],{"class":47},[33,117011,115025],{"class":955},[33,117013,73],{"class":39},[33,117015,115079],{"class":47},[33,117017,97216],{"class":955},[33,117019,73],{"class":39},[33,117021,345],{"class":47},[33,117023,77],{"class":76},[33,117025,115042],{"class":47},[33,117027,94753],{"class":955},[33,117029,73],{"class":39},[33,117031,115049],{"class":47},[14,117033,117034,117035,117038,117039,117042],{},"定义观测空间。",[30,117036,117037],{},"shape=(10,)"," 表示观测是 10 个数。",[30,117040,117041],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[23,117044,117046],{"className":31631,"code":117045,"language":31633,"meta":28,"style":28},"def _get_obs(self) -> np.ndarray:\n",[30,117047,117048],{"__ignoreMap":28},[33,117049,117050,117052,117054],{"class":35,"line":36},[33,117051,33200],{"class":39},[33,117053,115609],{"class":43},[33,117055,115612],{"class":47},[14,117057,117058,117059,117061],{},"定义内部函数，用来生成观测。函数名前面的 ",[30,117060,2587],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[23,117063,117065],{"className":31631,"code":117064,"language":31633,"meta":28,"style":28},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[30,117066,117067,117081],{"__ignoreMap":28},[33,117068,117069,117071,117073,117075,117077,117079],{"class":35,"line":36},[33,117070,112821],{"class":47},[33,117072,73],{"class":39},[33,117074,40126],{"class":76},[33,117076,115623],{"class":47},[33,117078,32076],{"class":76},[33,117080,115628],{"class":47},[33,117082,117083,117085,117087,117089,117091,117093],{"class":35,"line":51},[33,117084,112831],{"class":47},[33,117086,73],{"class":39},[33,117088,40126],{"class":76},[33,117090,115623],{"class":47},[33,117092,32076],{"class":76},[33,117094,115643],{"class":47},[14,117096,117097],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[23,117099,117101],{"className":31631,"code":117100,"language":31633,"meta":28,"style":28},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[30,117102,117103,117119],{"__ignoreMap":28},[33,117104,117105,117107,117109,117111,117113,117115,117117],{"class":35,"line":36},[33,117106,112107],{"class":47},[33,117108,73],{"class":39},[33,117110,115652],{"class":47},[33,117112,32076],{"class":76},[33,117114,115657],{"class":47},[33,117116,32076],{"class":76},[33,117118,115662],{"class":47},[33,117120,117121,117123],{"class":35,"line":51},[33,117122,18297],{"class":39},[33,117124,115669],{"class":47},[14,117126,117127,117128,117131,117132,117134],{},"拼接观测，并转换成 ",[30,117129,117130],{},"float32","。很多强化学习库默认使用 ",[30,117133,117130],{},"，所以这里主动转换。",[23,117136,117137],{"className":31631,"code":116540,"language":31633,"meta":28,"style":28},[30,117138,117139],{"__ignoreMap":28},[33,117140,117141,117143,117145,117147,117149,117151,117153,117155,117157,117159,117161,117163,117165,117167,117169,117171,117173],{"class":35,"line":36},[33,117142,33200],{"class":39},[33,117144,115775],{"class":43},[33,117146,115778],{"class":47},[33,117148,2057],{"class":39},[33,117150,115783],{"class":47},[33,117152,40],{"class":76},[33,117154,26362],{"class":39},[33,117156,40186],{"class":76},[33,117158,14815],{"class":39},[33,117160,40186],{"class":76},[33,117162,115796],{"class":47},[33,117164,115799],{"class":76},[33,117166,26362],{"class":39},[33,117168,40186],{"class":76},[33,117170,14815],{"class":39},[33,117172,40186],{"class":76},[33,117174,32039],{"class":47},[14,117176,117177,117178,117180,117181,117184],{},"定义 reset。",[30,117179,115819],{}," 用来控制随机数，保证实验可以复现。",[30,117182,117183],{},"options"," 用来接收额外配置，本章暂时不用。",[23,117186,117188],{"className":31631,"code":117187,"language":31633,"meta":28,"style":28},"super().reset(seed=seed)\n",[30,117189,117190],{"__ignoreMap":28},[33,117191,117192,117194,117196,117198,117200],{"class":35,"line":36},[33,117193,116781],{"class":76},[33,117195,115816],{"class":47},[33,117197,115819],{"class":955},[33,117199,73],{"class":39},[33,117201,115824],{"class":47},[14,117203,117204,117205,117208],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[30,117206,117207],{},"self.np_random"," 生成可复现的随机数。",[23,117210,117212],{"className":31631,"code":117211,"language":31633,"meta":28,"style":28},"mujoco.mj_resetData(self.model, self.data)\n",[30,117213,117214],{"__ignoreMap":28},[33,117215,117216,117219,117221,117223,117225],{"class":35,"line":36},[33,117217,117218],{"class":47},"mujoco.mj_resetData(",[33,117220,32076],{"class":76},[33,117222,115834],{"class":47},[33,117224,32076],{"class":76},[33,117226,115839],{"class":47},[14,117228,117229],{},"把 MuJoCo 状态重置到默认状态。",[23,117231,117233],{"className":31631,"code":117232,"language":31633,"meta":28,"style":28},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[30,117234,117235],{"__ignoreMap":28},[33,117236,117237,117239,117241,117243,117245,117247,117249,117251,117253,117255,117257,117259,117261,117263,117265,117267,117269],{"class":35,"line":36},[33,117238,32076],{"class":76},[33,117240,115850],{"class":47},[33,117242,73],{"class":39},[33,117244,40126],{"class":76},[33,117246,115857],{"class":47},[33,117248,115015],{"class":955},[33,117250,115018],{"class":39},[33,117252,87463],{"class":76},[33,117254,13686],{"class":47},[33,117256,115025],{"class":955},[33,117258,73],{"class":39},[33,117260,87463],{"class":76},[33,117262,13686],{"class":47},[33,117264,32749],{"class":955},[33,117266,73],{"class":39},[33,117268,32076],{"class":76},[33,117270,115882],{"class":47},[14,117272,116594,117273,117276,117277,117280,117281,117283],{},[30,117274,117275],{},"[:]"," 表示修改整个数组。",[30,117278,117279],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[30,117282,103403],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[23,117285,117287],{"className":31631,"code":117286,"language":31633,"meta":28,"style":28},"self.data.qvel[:] = 0.0\n",[30,117288,117289],{"__ignoreMap":28},[33,117290,117291,117293,117295,117297],{"class":35,"line":36},[33,117292,32076],{"class":76},[33,117294,115889],{"class":47},[33,117296,73],{"class":39},[33,117298,106014],{"class":76},[14,117300,117301],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[23,117303,117305],{"className":31631,"code":117304,"language":31633,"meta":28,"style":28},"self.steps = 0\nreturn self._get_obs(), {}\n",[30,117306,117307,117317],{"__ignoreMap":28},[33,117308,117309,117311,117313,117315],{"class":35,"line":36},[33,117310,32076],{"class":76},[33,117312,114959],{"class":47},[33,117314,73],{"class":39},[33,117316,48586],{"class":76},[33,117318,117319,117321,117323],{"class":35,"line":51},[33,117320,18297],{"class":39},[33,117322,40126],{"class":76},[33,117324,115929],{"class":47},[14,117326,117327],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[23,117329,117330],{"className":31631,"code":116603,"language":31633,"meta":28,"style":28},[30,117331,117332],{"__ignoreMap":28},[33,117333,117334,117336,117338],{"class":35,"line":36},[33,117335,33200],{"class":39},[33,117337,115940],{"class":43},[33,117339,115943],{"class":47},[14,117341,117342],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[23,117344,117346],{"className":31631,"code":117345,"language":31633,"meta":28,"style":28},"action = np.asarray(action, dtype=np.float32)\n",[30,117347,117348],{"__ignoreMap":28},[33,117349,117350,117352,117354,117356,117358,117360],{"class":35,"line":36},[33,117351,108695],{"class":47},[33,117353,73],{"class":39},[33,117355,115952],{"class":47},[33,117357,94753],{"class":955},[33,117359,73],{"class":39},[33,117361,115049],{"class":47},[14,117363,117364,117365,29638],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[30,117366,117130],{},[23,117368,117370],{"className":31631,"code":117369,"language":31633,"meta":28,"style":28},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[30,117371,117372],{"__ignoreMap":28},[33,117373,117374,117376,117378,117380,117382,117384,117386],{"class":35,"line":36},[33,117375,108695],{"class":47},[33,117377,73],{"class":39},[33,117379,108700],{"class":47},[33,117381,32076],{"class":76},[33,117383,115971],{"class":47},[33,117385,32076],{"class":76},[33,117387,115976],{"class":47},[14,117389,117390],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[23,117392,117394],{"className":31631,"code":117393,"language":31633,"meta":28,"style":28},"self.data.ctrl[:] = action\n",[30,117395,117396],{"__ignoreMap":28},[33,117397,117398,117400,117402,117404],{"class":35,"line":36},[33,117399,32076],{"class":76},[33,117401,115987],{"class":47},[33,117403,73],{"class":39},[33,117405,108723],{"class":47},[14,117407,117408],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[23,117410,117412],{"className":31631,"code":117411,"language":31633,"meta":28,"style":28},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[30,117413,117414,117430],{"__ignoreMap":28},[33,117415,117416,117418,117420,117422,117424,117426,117428],{"class":35,"line":36},[33,117417,4435],{"class":39},[33,117419,102754],{"class":47},[33,117421,27296],{"class":39},[33,117423,33696],{"class":76},[33,117425,345],{"class":47},[33,117427,32076],{"class":76},[33,117429,116008],{"class":47},[33,117431,117432,117435,117437,117439,117441],{"class":35,"line":51},[33,117433,117434],{"class":47},"    mujoco.mj_step(",[33,117436,32076],{"class":76},[33,117438,115834],{"class":47},[33,117440,32076],{"class":76},[33,117442,115839],{"class":47},[14,117444,117445,117446,117449,117450,117452,117453,29638],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[30,117447,117448],{},"frame_skip=5","，所以外部调用一次 ",[30,117451,115130],{},"，内部实际执行 5 次 ",[30,117454,102468],{},[23,117456,117458],{"className":31631,"code":117457,"language":31633,"meta":28,"style":28},"self.steps += 1\n",[30,117459,117460],{"__ignoreMap":28},[33,117461,117462,117464,117466,117468],{"class":35,"line":36},[33,117463,32076],{"class":76},[33,117465,114959],{"class":47},[33,117467,10728],{"class":39},[33,117469,56952],{"class":76},[14,117471,117472],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[23,117474,117476],{"className":31631,"code":117475,"language":31633,"meta":28,"style":28},"obs = self._get_obs()\nreward = self._get_reward()\n",[30,117477,117478,117488],{"__ignoreMap":28},[33,117479,117480,117482,117484,117486],{"class":35,"line":36},[33,117481,112107],{"class":47},[33,117483,73],{"class":39},[33,117485,40126],{"class":76},[33,117487,116050],{"class":47},[33,117489,117490,117492,117494,117496],{"class":35,"line":51},[33,117491,112258],{"class":47},[33,117493,73],{"class":39},[33,117495,40126],{"class":76},[33,117497,116061],{"class":47},[14,117499,117500],{},"计算新的观测和奖励。",[23,117502,117504],{"className":31631,"code":117503,"language":31633,"meta":28,"style":28},"dist = float(np.linalg.norm(tip - target))\n",[30,117505,117506],{"__ignoreMap":28},[33,117507,117508,117510,117512,117514,117516,117518],{"class":35,"line":36},[33,117509,112849],{"class":47},[33,117511,73],{"class":39},[33,117513,111050],{"class":76},[33,117515,116104],{"class":47},[33,117517,1199],{"class":39},[33,117519,116109],{"class":47},[14,117521,117522],{},"计算末端到目标的距离，并转换成 Python float。",[23,117524,117525],{"className":31631,"code":114930,"language":31633,"meta":28,"style":28},[30,117526,117527,117539],{"__ignoreMap":28},[33,117528,117529,117531,117533,117535,117537],{"class":35,"line":36},[33,117530,114937],{"class":47},[33,117532,73],{"class":39},[33,117534,114942],{"class":47},[33,117536,875],{"class":39},[33,117538,114947],{"class":76},[33,117540,117541,117543,117545,117547,117549,117551,117553],{"class":35,"line":51},[33,117542,114952],{"class":47},[33,117544,73],{"class":39},[33,117546,40126],{"class":76},[33,117548,114959],{"class":47},[33,117550,3151],{"class":39},[33,117552,40126],{"class":76},[33,117554,114966],{"class":47},[14,117556,117557],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[23,117559,117561],{"className":31631,"code":117560,"language":31633,"meta":28,"style":28},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[30,117562,117563,117576],{"__ignoreMap":28},[33,117564,117565,117568,117570,117572,117574],{"class":35,"line":36},[33,117566,117567],{"class":47},"info ",[33,117569,73],{"class":39},[33,117571,5845],{"class":47},[33,117573,116155],{"class":119},[33,117575,116158],{"class":47},[33,117577,117578,117580],{"class":35,"line":51},[33,117579,18297],{"class":39},[33,117581,116165],{"class":47},[14,117583,117584,117587],{},[30,117585,117586],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[23,117589,117591],{"className":31631,"code":117590,"language":31633,"meta":28,"style":28},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[30,117592,117593,117602],{"__ignoreMap":28},[33,117594,117595,117598,117600],{"class":35,"line":36},[33,117596,117597],{"class":47},"env ",[33,117599,73],{"class":39},[33,117601,116195],{"class":47},[33,117603,117604,117606,117608,117610,117612,117614,117616],{"class":35,"line":51},[33,117605,114653],{"class":47},[33,117607,73],{"class":39},[33,117609,116205],{"class":47},[33,117611,115819],{"class":955},[33,117613,73],{"class":39},[33,117615,766],{"class":76},[33,117617,884],{"class":47},[14,117619,117620,117621,117624],{},"创建环境并重置。",[30,117622,117623],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[23,117626,117628],{"className":31631,"code":117627,"language":31633,"meta":28,"style":28},"action = env.action_space.sample()\n",[30,117629,117630],{"__ignoreMap":28},[33,117631,117632,117634,117636],{"class":35,"line":36},[33,117633,108695],{"class":47},[33,117635,73],{"class":39},[33,117637,116274],{"class":47},[14,117639,117640],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[18,117642,103569],{"id":103568},[14,117644,106737],{},[23,117646,117649],{"className":117647,"code":117648,"language":6578,"meta":28},[6576],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[30,117650,117648],{"__ignoreMap":28},[14,117652,117653],{},"这个环境已经具备强化学习环境的基本结构。",[14,117655,117656],{},"主函数里使用随机动作：",[23,117658,117659],{"className":31631,"code":117627,"language":31633,"meta":28,"style":28},[30,117660,117661],{"__ignoreMap":28},[33,117662,117663,117665,117667],{"class":35,"line":36},[33,117664,108695],{"class":47},[33,117666,73],{"class":39},[33,117668,116274],{"class":47},[14,117670,117671],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[18,117673,103601],{"id":103600},[574,117675,117676,117679,117685,117694,117703,117712,117718],{},[564,117677,117678],{},"运行程序。",[564,117680,117681,117682,29638],{},"确认 ",[30,117683,117684],{},"obs.shape == (10,)",[564,117686,112434,117687,117690,117691,29638],{},[30,117688,117689],{},"env.action_space","，应类似 ",[30,117692,117693],{},"Box(-1.0, 1.0, (2,), float32)",[564,117695,106838,117696,117699,117700,29638],{},[30,117697,117698],{},"self.max_steps = 10","，确认环境会更快 ",[30,117701,117702],{},"truncated=True",[564,117704,103664,117705,103667,117708,117711],{},[30,117706,117707],{},"terminated = dist \u003C 0.05",[30,117709,117710],{},"dist \u003C 0.2","，观察是否更容易结束。",[564,117713,103664,117714,117717],{},[30,117715,117716],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[564,117719,117720,117721,117723,117724,117727],{},"在 ",[30,117722,117586],{}," 里加入 ",[30,117725,117726],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[18,117729,103706],{"id":103705},[1599,117731,117733],{"id":117732},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,117735,117736,117737,117739],{},"Gymnasium 的 ",[30,117738,108387],{}," 返回 5 个值:",[23,117741,117743],{"className":31631,"code":117742,"language":31633,"meta":28,"style":28},"obs, reward, terminated, truncated, info\n",[30,117744,117745],{"__ignoreMap":28},[33,117746,117747],{"class":35,"line":36},[33,117748,117742],{"class":47},[14,117750,117751],{},"不是旧 Gym 的 4 个值。",[1599,117753,117755,117758],{"id":117754},"datactrl-action-维度错误",[30,117756,117757],{},"data.ctrl[:] = action"," 维度错误",[14,117760,103776],{},[23,117762,117764],{"className":31631,"code":117763,"language":31633,"meta":28,"style":28},"print(self.model.nu)\nprint(action.shape)\n",[30,117765,117766,117777],{"__ignoreMap":28},[33,117767,117768,117770,117772,117774],{"class":35,"line":36},[33,117769,31668],{"class":76},[33,117771,345],{"class":47},[33,117773,32076],{"class":76},[33,117775,117776],{"class":47},".model.nu)\n",[33,117778,117779,117781],{"class":35,"line":51},[33,117780,31668],{"class":76},[33,117782,117783],{"class":47},"(action.shape)\n",[14,117785,117786],{},"两者必须匹配。",[1599,117788,117790],{"id":117789},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,117792,103715],{},[23,117794,117796],{"className":31631,"code":117795,"language":31633,"meta":28,"style":28},"mujoco.mj_forward(self.model, self.data)\n",[30,117797,117798],{"__ignoreMap":28},[33,117799,117800,117803,117805,117807,117809],{"class":35,"line":36},[33,117801,117802],{"class":47},"mujoco.mj_forward(",[33,117804,32076],{"class":76},[33,117806,115834],{"class":47},[33,117808,32076],{"class":76},[33,117810,115839],{"class":47},[1599,117812,117814,117816],{"id":117813},"observation_space-维度和-obs-不一致",[30,117815,114853],{}," 维度和 obs 不一致",[14,117818,103828],{},[23,117820,117822],{"className":31631,"code":117821,"language":31633,"meta":28,"style":28},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[30,117823,117824,117834,117841],{"__ignoreMap":28},[33,117825,117826,117828,117830,117832],{"class":35,"line":36},[33,117827,112107],{"class":47},[33,117829,73],{"class":39},[33,117831,40126],{"class":76},[33,117833,116050],{"class":47},[33,117835,117836,117838],{"class":35,"line":51},[33,117837,31668],{"class":76},[33,117839,117840],{"class":47},"(obs.shape)\n",[33,117842,117843,117845,117847,117849],{"class":35,"line":57},[33,117844,31668],{"class":76},[33,117846,345],{"class":47},[33,117848,32076],{"class":76},[33,117850,117851],{"class":47},".observation_space.shape)\n",[14,117853,117854],{},"两者必须一致。本章观测是：",[23,117856,117859],{"className":117857,"code":117858,"language":6578,"meta":28},[6576],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[30,117860,117858],{"__ignoreMap":28},[1599,117862,117864],{"id":117863},"action-超过范围","action 超过范围",[14,117866,117867],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[23,117869,117870],{"className":31631,"code":117369,"language":31633,"meta":28,"style":28},[30,117871,117872],{"__ignoreMap":28},[33,117873,117874,117876,117878,117880,117882,117884,117886],{"class":35,"line":36},[33,117875,108695],{"class":47},[33,117877,73],{"class":39},[33,117879,108700],{"class":47},[33,117881,32076],{"class":76},[33,117883,115971],{"class":47},[33,117885,32076],{"class":76},[33,117887,115976],{"class":47},[14,117889,117890,117891,29638],{},"这能避免无效动作直接写入 ",[30,117892,102329],{},[1599,117894,117896],{"id":117895},"忘记返回-info","忘记返回 info",[14,117898,117736,117899,102271,117901,117903],{},[30,117900,71309],{},[30,117902,108387],{}," 都会返回 info：",[23,117905,117906],{"className":31631,"code":114646,"language":31633,"meta":28,"style":28},[30,117907,117908,117916],{"__ignoreMap":28},[33,117909,117910,117912,117914],{"class":35,"line":36},[33,117911,114653],{"class":47},[33,117913,73],{"class":39},[33,117915,114658],{"class":47},[33,117917,117918,117920,117922],{"class":35,"line":51},[33,117919,114663],{"class":47},[33,117921,73],{"class":39},[33,117923,114668],{"class":47},[14,117925,117926,117927,29638],{},"即使暂时没有额外信息，也返回 ",[30,117928,33712],{},[18,117930,117932],{"id":117931},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,117934,117935],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[574,117937,117938,117941,117944,117947,117950,117953],{},[564,117939,117940],{},"更稳定的 reward。",[564,117942,117943],{},"合理的 episode 长度。",[564,117945,117946],{},"可重复的随机目标采样。",[564,117948,117949],{},"render 接口。",[564,117951,117952],{},"环境注册代码。",[564,117954,117955],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,117957,117958],{},"如果只是自己写训练循环，最小形式是：",[23,117960,117962],{"className":31631,"code":117961,"language":31633,"meta":28,"style":28},"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",[30,117963,117964,117972,117988,117992,118008,118017,118026,118036],{"__ignoreMap":28},[33,117965,117966,117968,117970],{"class":35,"line":36},[33,117967,117597],{"class":47},[33,117969,73],{"class":39},[33,117971,116195],{"class":47},[33,117973,117974,117976,117978,117980,117982,117984,117986],{"class":35,"line":51},[33,117975,114653],{"class":47},[33,117977,73],{"class":39},[33,117979,116205],{"class":47},[33,117981,115819],{"class":955},[33,117983,73],{"class":39},[33,117985,766],{"class":76},[33,117987,884],{"class":47},[33,117989,117990],{"class":35,"line":57},[33,117991,160],{"emptyLinePlaceholder":159},[33,117993,117994,117996,117998,118000,118002,118004,118006],{"class":35,"line":64},[33,117995,4435],{"class":39},[33,117997,102754],{"class":47},[33,117999,27296],{"class":39},[33,118001,33696],{"class":76},[33,118003,345],{"class":47},[33,118005,191],{"class":76},[33,118007,32039],{"class":47},[33,118009,118010,118013,118015],{"class":35,"line":83},[33,118011,118012],{"class":47},"    action ",[33,118014,73],{"class":39},[33,118016,116274],{"class":47},[33,118018,118019,118022,118024],{"class":35,"line":89},[33,118020,118021],{"class":47},"    obs, reward, terminated, truncated, info ",[33,118023,73],{"class":39},[33,118025,114668],{"class":47},[33,118027,118028,118030,118032,118034],{"class":35,"line":98},[33,118029,4509],{"class":39},[33,118031,116340],{"class":47},[33,118033,116343],{"class":39},[33,118035,116346],{"class":47},[33,118037,118038,118041,118043],{"class":35,"line":110},[33,118039,118040],{"class":47},"        obs, info ",[33,118042,73],{"class":39},[33,118044,114658],{"class":47},[18,118046,118048],{"id":118047},"_9本章小结","9.本章小结",[14,118050,118051],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[23,118053,118056],{"className":118054,"code":118055,"language":6578,"meta":28},[6576],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[30,118057,118055],{"__ignoreMap":28},[14,118059,118060],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1544,118062,118063],{},"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":28,"searchDepth":51,"depth":51,"links":118065},[118066,118067,118068,118075,118079,118080,118081,118091,118092],{"id":101899,"depth":51,"text":101900},{"id":102022,"depth":51,"text":102023},{"id":102297,"depth":51,"text":102298,"children":118069},[118070,118072,118074],{"id":114877,"depth":57,"text":118071},"terminated 和 truncated 的区别",{"id":114980,"depth":57,"text":118073},"observation_space 和 action_space",{"id":115107,"depth":57,"text":115108},{"id":102505,"depth":51,"text":102506,"children":118076},[118077,118078],{"id":102825,"depth":57,"text":102825},{"id":102961,"depth":57,"text":102961},{"id":103568,"depth":51,"text":103569},{"id":103600,"depth":51,"text":103601},{"id":103705,"depth":51,"text":103706,"children":118082},[118083,118084,118086,118087,118089,118090],{"id":117732,"depth":57,"text":117733},{"id":117754,"depth":57,"text":118085},"data.ctrl[:] = action 维度错误",{"id":117789,"depth":57,"text":117790},{"id":117813,"depth":57,"text":118088},"observation_space 维度和 obs 不一致",{"id":117863,"depth":57,"text":117864},{"id":117895,"depth":57,"text":117896},{"id":117931,"depth":51,"text":117932},{"id":118047,"depth":51,"text":118048},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114630,"description":28},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118099,"title":118100,"body":118101,"description":118524,"extension":1557,"meta":118525,"navigation":159,"path":118526,"seo":118527,"stem":118528,"__hash__":118529},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118102,"toc":118514},[118103,118107,118110,118113,118133,118139,118145,118155,118158,118161,118181,118184,118188,118191,118197,118200,118214,118217,118220,118294,118297,118303,118306,118329,118332,118382,118385,118391,118394,118397,118400,118419,118422,118428,118431,118434,118437,118457,118460,118463,118466,118511],[10,118104,118106],{"id":118105},"mujoco-学习","MuJoCo 学习",[14,118108,118109],{},"初版",[14,118111,118112],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[574,118114,118115,118118,118121,118130],{},[564,118116,118117],{},"MuJoCo 模型文件在描述什么。",[564,118119,118120],{},"Python 代码怎样读取和推进仿真。",[564,118122,118123,1829,118125,1829,118127,118129],{},[30,118124,105283],{},[30,118126,105613],{},[30,118128,105616],{}," 这些数组为什么重要。",[564,118131,118132],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,118134,118135,118136,118138],{},"默认环境为 Fedora 44、Python >= 3.10、",[30,118137,102280],{}," 官方 Python bindings。",[14,118140,118141,118142,118144],{},"注意：本文禁止使用 ",[30,118143,102265],{},"。所有示例均使用：",[23,118146,118147],{"className":31631,"code":102831,"language":31633,"meta":28,"style":28},[30,118148,118149],{"__ignoreMap":28},[33,118150,118151,118153],{"class":35,"line":36},[33,118152,31645],{"class":39},[33,118154,102554],{"class":47},[18,118156,118157],{"id":118157},"适合谁阅读",[14,118159,118160],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[574,118162,118163,118166,118169,118172],{},[564,118164,118165],{},"没学过 MuJoCo，只会一点 Python。",[564,118167,118168],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[564,118170,118171],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[564,118173,118174,118175,118177,118178,118180],{},"以前接触过 ",[30,118176,102265],{},"，现在想迁移到官方 ",[30,118179,102274],{}," Python bindings。",[14,118182,118183],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[18,118185,118187],{"id":118186},"mujoco-到底是什么","MuJoCo 到底是什么",[14,118189,118190],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[23,118192,118195],{"className":118193,"code":118194,"language":6578,"meta":28},[6576],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[30,118196,118194],{"__ignoreMap":28},[14,118198,118199],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[574,118201,118202,118205,118208,118211],{},[564,118203,118204],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[564,118206,118207],{},"快速测试控制算法，不必一开始就上真实机器人。",[564,118209,118210],{},"生成强化学习环境。",[564,118212,118213],{},"采集状态、动作、图像、奖励等训练数据。",[18,118215,118216],{"id":118216},"学习前的心智模型",[14,118218,118219],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1756,118221,118222,118234],{},[1759,118223,118224],{},[1762,118225,118226,118229,118232],{},[1765,118227,118228],{"align":24988},"部分",[1765,118230,118231],{"align":24988},"负责什么",[1765,118233,22438],{"align":24988},[1802,118235,118236,118247,118259,118271,118283],{},[1762,118237,118238,118241,118244],{},[1807,118239,118240],{"align":24988},"MJCF XML",[1807,118242,118243],{"align":24988},"定义世界和机器人结构",[1807,118245,118246],{"align":24988},"地面、盒子、关节、电机、摄像头",[1762,118248,118249,118253,118256],{},[1807,118250,118251],{"align":24988},[30,118252,101962],{},[1807,118254,118255],{"align":24988},"编译后的静态模型",[1807,118257,118258],{"align":24988},"有几个关节、有几个电机、时间步长是多少",[1762,118260,118261,118265,118268],{},[1807,118262,118263],{"align":24988},[30,118264,101972],{},[1807,118266,118267],{"align":24988},"运行中的动态状态",[1807,118269,118270],{"align":24988},"当前时间、位置、速度、电机输入",[1762,118272,118273,118277,118280],{},[1807,118274,118275],{"align":24988},[30,118276,102468],{},[1807,118278,118279],{"align":24988},"推进一步物理仿真",[1807,118281,118282],{"align":24988},"根据重力、力、碰撞更新状态",[1762,118284,118285,118288,118291],{},[1807,118286,118287],{"align":24988},"Viewer \u002F Renderer",[1807,118289,118290],{"align":24988},"把仿真显示出来",[1807,118292,118293],{"align":24988},"打开窗口或保存图片",[14,118295,118296],{},"一句话总结：",[23,118298,118301],{"className":118299,"code":118300,"language":6578,"meta":28},[6576],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[30,118302,118300],{"__ignoreMap":28},[14,118304,118305],{},"参考来源：",[561,118307,118308,118315,118322],{},[564,118309,118310,118311],{},"MuJoCo Python 官方文档：",[126,118312,118313],{"href":118313,"rel":118314},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25117],[564,118316,118317,118318],{},"MuJoCo XML Reference：",[126,118319,118320],{"href":118320,"rel":118321},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25117],[564,118323,118324,118325],{},"MuJoCo Overview：",[126,118326,118327],{"href":118327,"rel":118328},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25117],[18,118330,118331],{"id":118331},"章节目录",[574,118333,118334,118340,118346,118352,118358,118364,118370,118376],{},[564,118335,118336],{},[126,118337,118339],{"href":118338},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[564,118341,118342],{},[126,118343,118345],{"href":118344},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[564,118347,118348],{},[126,118349,118351],{"href":118350},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[564,118353,118354],{},[126,118355,118357],{"href":118356},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[564,118359,118360],{},[126,118361,118363],{"href":118362},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[564,118365,118366],{},[126,118367,118369],{"href":118368},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[564,118371,118372],{},[126,118373,118375],{"href":118374},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[564,118377,118378],{},[126,118379,118381],{"href":118380},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[18,118383,118384],{"id":118384},"推荐学习路线",[23,118386,118389],{"className":118387,"code":118388,"language":6578,"meta":28},[6576],"环境安装\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",[30,118390,118388],{"__ignoreMap":28},[14,118392,118393],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[18,118395,118396],{"id":118396},"建议的目录结构",[14,118398,118399],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[23,118401,118403],{"className":25074,"code":118402,"language":25076,"meta":28,"style":28},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[30,118404,118405,118413],{"__ignoreMap":28},[33,118406,118407,118409,118411],{"class":35,"line":36},[33,118408,102519],{"class":43},[33,118410,30469],{"class":76},[33,118412,102524],{"class":119},[33,118414,118415,118417],{"class":35,"line":51},[33,118416,102529],{"class":76},[33,118418,102524],{"class":119},[14,118420,118421],{},"每一章的代码都单独保存：",[23,118423,118426],{"className":118424,"code":118425,"language":6578,"meta":28},[6576],"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",[30,118427,118425],{"__ignoreMap":28},[14,118429,118430],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[18,118432,118433],{"id":118433},"学习方法",[14,118435,118436],{},"每章建议按这个顺序操作：",[574,118438,118439,118442,118445,118448,118451,118454],{},[564,118440,118441],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[564,118443,118444],{},"复制最小可运行代码，保存成指定文件。",[564,118446,118447],{},"运行代码，确认没有报错。",[564,118449,118450],{},"对照“运行结果说明”理解输出。",[564,118452,118453],{},"做“验证步骤”，主动改一两个参数。",[564,118455,118456],{},"遇到报错先看“常见错误与解决方案”。",[14,118458,118459],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[18,118461,118462],{"id":118462},"全局排错顺序",[14,118464,118465],{},"遇到问题时，按下面顺序查：",[574,118467,118468,118474,118480,118485,118488,118491,118498,118508],{},[564,118469,118470,118471],{},"Python 环境是否激活：",[30,118472,118473],{},"which python",[564,118475,118476,118477],{},"MuJoCo 是否能导入：",[30,118478,118479],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[564,118481,118482,118483],{},"是否误装了 ",[30,118484,102265],{},[564,118486,118487],{},"XML 标签是否闭合、属性是否拼写正确",[564,118489,118490],{},"actuator 引用的 joint 名字是否存在",[564,118492,118493,118495,118496],{},[30,118494,102329],{}," 的长度是否等于 ",[30,118497,103411],{},[564,118499,106838,118500,83792,118502,118504,118505],{},[30,118501,105283],{},[30,118503,105613],{}," 后是否调用了 ",[30,118506,118507],{},"mujoco.mj_forward",[564,118509,118510],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1544,118512,118513],{},"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":28,"searchDepth":51,"depth":51,"links":118515},[118516,118517,118518,118519,118520,118521,118522,118523],{"id":118157,"depth":51,"text":118157},{"id":118186,"depth":51,"text":118187},{"id":118216,"depth":51,"text":118216},{"id":118331,"depth":51,"text":118331},{"id":118384,"depth":51,"text":118384},{"id":118396,"depth":51,"text":118396},{"id":118433,"depth":51,"text":118433},{"id":118462,"depth":51,"text":118462},"仿真搭建。",{"category":24630},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118100,"description":118524},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118531,"title":118532,"body":118533,"description":24628,"extension":1557,"meta":118988,"navigation":159,"path":118989,"seo":118990,"stem":118991,"__hash__":118992},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118534,"toc":118986},[118535,118538,118541,118547,118983],[10,118536,118532],{"id":118537},"_1-最常用的基本操作更新",[14,118539,118540],{},"装linux系统教程：",[14,118542,118543],{},[126,118544,118545],{"href":118545,"rel":118546},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25117],[23,118548,118552],{"className":118549,"code":118550,"language":118551,"meta":28,"style":28},"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",[30,118553,118554,118559,118564,118573,118578,118587,118592,118612,118617,118628,118633,118642,118647,118675,118680,118699,118704,118723,118727,118732,118748,118752,118757,118787,118791,118796,118812,118816,118821,118836,118840,118845,118861,118865,118870,118882,118894,118898,118903,118920,118924,118929,118947,118951,118956,118965,118969,118974],{"__ignoreMap":28},[33,118555,118556],{"class":35,"line":36},[33,118557,118558],{"class":60},"#更新相关的知识\n",[33,118560,118561],{"class":35,"line":51},[33,118562,118563],{"class":60},"# 更新软件包列表（从服务器获取最新软件信息）\n",[33,118565,118566,118568,118571],{"class":35,"line":57},[33,118567,25829],{"class":43},[33,118569,118570],{"class":119}," apt",[33,118572,27495],{"class":119},[33,118574,118575],{"class":35,"line":64},[33,118576,118577],{"class":60},"# 升级所有可更新的软件包（不删除旧包）\n",[33,118579,118580,118582,118584],{"class":35,"line":83},[33,118581,25829],{"class":43},[33,118583,118570],{"class":119},[33,118585,118586],{"class":119}," upgrade\n",[33,118588,118589],{"class":35,"line":89},[33,118590,118591],{"class":60},"#更新和升级软件包\n",[33,118593,118594,118596,118598,118601,118603,118605,118607,118610],{"class":35,"line":98},[33,118595,25829],{"class":43},[33,118597,118570],{"class":119},[33,118599,118600],{"class":119}," update",[33,118602,27443],{"class":47},[33,118604,25829],{"class":43},[33,118606,118570],{"class":119},[33,118608,118609],{"class":119}," upgrade",[33,118611,102234],{"class":76},[33,118613,118614],{"class":35,"line":110},[33,118615,118616],{"class":60},"#列出可更新的软件包及版本信息\n",[33,118618,118619,118622,118625],{"class":35,"line":134},[33,118620,118621],{"class":43},"apt",[33,118623,118624],{"class":119}," list",[33,118626,118627],{"class":76}," --upgradable\n",[33,118629,118630],{"class":35,"line":156},[33,118631,118632],{"class":60},"#彻底升级（处理依赖关系，可能删除旧包）\n",[33,118634,118635,118637,118639],{"class":35,"line":163},[33,118636,25829],{"class":43},[33,118638,118570],{"class":119},[33,118640,118641],{"class":119}," full-upgrade\n",[33,118643,118644],{"class":35,"line":169},[33,118645,118646],{"class":60},"#设置指定版本\n",[33,118648,118649,118651,118653,118655,118657,118660,118662,118664,118666,118668,118671,118673],{"class":35,"line":175},[33,118650,25829],{"class":43},[33,118652,118570],{"class":119},[33,118654,25086],{"class":119},[33,118656,30155],{"class":39},[33,118658,118659],{"class":119},"package_nam",[33,118661,1696],{"class":47},[33,118663,1265],{"class":39},[33,118665,73],{"class":119},[33,118667,875],{"class":39},[33,118669,118670],{"class":119},"version_numbe",[33,118672,2270],{"class":47},[33,118674,52560],{"class":39},[33,118676,118677],{"class":35,"line":181},[33,118678,118679],{"class":60},"#只安装软件包不升级\n",[33,118681,118682,118684,118686,118688,118690,118692,118694,118696],{"class":35,"line":196},[33,118683,25829],{"class":43},[33,118685,118570],{"class":119},[33,118687,25086],{"class":119},[33,118689,30155],{"class":39},[33,118691,118659],{"class":119},[33,118693,1696],{"class":47},[33,118695,1265],{"class":39},[33,118697,118698],{"class":76}," --no-upgrade\n",[33,118700,118701],{"class":35,"line":213},[33,118702,118703],{"class":60},"#只升级，不存在就不安装\n",[33,118705,118706,118708,118710,118712,118714,118716,118718,118720],{"class":35,"line":228},[33,118707,25829],{"class":43},[33,118709,118570],{"class":119},[33,118711,25086],{"class":119},[33,118713,30155],{"class":39},[33,118715,118659],{"class":119},[33,118717,1696],{"class":47},[33,118719,1265],{"class":39},[33,118721,118722],{"class":76}," --only-upgrade\n",[33,118724,118725],{"class":35,"line":1345},[33,118726,160],{"emptyLinePlaceholder":159},[33,118728,118729],{"class":35,"line":1350},[33,118730,118731],{"class":60},"#安装指定的软件命令\n",[33,118733,118734,118736,118738,118740,118742,118744,118746],{"class":35,"line":1359},[33,118735,25829],{"class":43},[33,118737,118570],{"class":119},[33,118739,25086],{"class":119},[33,118741,30155],{"class":39},[33,118743,118659],{"class":119},[33,118745,1696],{"class":47},[33,118747,52560],{"class":39},[33,118749,118750],{"class":35,"line":1364},[33,118751,160],{"emptyLinePlaceholder":159},[33,118753,118754],{"class":35,"line":1370},[33,118755,118756],{"class":60},"#安装多个软件包\n",[33,118758,118759,118761,118763,118765,118767,118770,118773,118775,118777,118780,118782,118784],{"class":35,"line":1425},[33,118760,25829],{"class":43},[33,118762,118570],{"class":119},[33,118764,25086],{"class":119},[33,118766,30155],{"class":39},[33,118768,118769],{"class":119},"package_",[33,118771,118772],{"class":39},"1>",[33,118774,30155],{"class":39},[33,118776,118769],{"class":119},[33,118778,118779],{"class":39},"2>",[33,118781,30155],{"class":39},[33,118783,118769],{"class":119},[33,118785,118786],{"class":39},"3>\n",[33,118788,118789],{"class":35,"line":1438},[33,118790,160],{"emptyLinePlaceholder":159},[33,118792,118793],{"class":35,"line":1451},[33,118794,118795],{"class":60},"#更新指定的软件命令\n",[33,118797,118798,118800,118802,118804,118806,118808,118810],{"class":35,"line":1457},[33,118799,25829],{"class":43},[33,118801,118570],{"class":119},[33,118803,118600],{"class":119},[33,118805,30155],{"class":39},[33,118807,118659],{"class":119},[33,118809,1696],{"class":47},[33,118811,52560],{"class":39},[33,118813,118814],{"class":35,"line":1466},[33,118815,160],{"emptyLinePlaceholder":159},[33,118817,118818],{"class":35,"line":1471},[33,118819,118820],{"class":60},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[33,118822,118823,118825,118828,118830,118832,118834],{"class":35,"line":1477},[33,118824,118621],{"class":43},[33,118826,118827],{"class":119}," show",[33,118829,30155],{"class":39},[33,118831,118659],{"class":119},[33,118833,1696],{"class":47},[33,118835,52560],{"class":39},[33,118837,118838],{"class":35,"line":1504},[33,118839,160],{"emptyLinePlaceholder":159},[33,118841,118842],{"class":35,"line":1509},[33,118843,118844],{"class":60},"#删除软件包命令\n",[33,118846,118847,118849,118851,118853,118855,118857,118859],{"class":35,"line":1525},[33,118848,25829],{"class":43},[33,118850,118570],{"class":119},[33,118852,27332],{"class":119},[33,118854,30155],{"class":39},[33,118856,118659],{"class":119},[33,118858,1696],{"class":47},[33,118860,52560],{"class":39},[33,118862,118863],{"class":35,"line":1535},[33,118864,160],{"emptyLinePlaceholder":159},[33,118866,118867],{"class":35,"line":1540},[33,118868,118869],{"class":60},"# 清理旧版本和缓存（释放磁盘空间）\n",[33,118871,118872,118874,118876,118879],{"class":35,"line":4027},[33,118873,25829],{"class":43},[33,118875,118570],{"class":119},[33,118877,118878],{"class":119}," autoremove",[33,118880,118881],{"class":60},"  # 删除不再需要的依赖和库文件\n",[33,118883,118884,118886,118888,118891],{"class":35,"line":4032},[33,118885,25829],{"class":43},[33,118887,118570],{"class":119},[33,118889,118890],{"class":119}," clean",[33,118892,118893],{"class":60},"       # 清理下载的缓存包\n",[33,118895,118896],{"class":35,"line":9199},[33,118897,160],{"emptyLinePlaceholder":159},[33,118899,118900],{"class":35,"line":9223},[33,118901,118902],{"class":60},"#移除软件包及配置文件\n",[33,118904,118905,118907,118909,118912,118914,118916,118918],{"class":35,"line":9228},[33,118906,25829],{"class":43},[33,118908,118570],{"class":119},[33,118910,118911],{"class":119}," purge",[33,118913,30155],{"class":39},[33,118915,118659],{"class":119},[33,118917,1696],{"class":47},[33,118919,52560],{"class":39},[33,118921,118922],{"class":35,"line":9234},[33,118923,160],{"emptyLinePlaceholder":159},[33,118925,118926],{"class":35,"line":9261},[33,118927,118928],{"class":60},"#查找软件包命令\n",[33,118930,118931,118933,118935,118938,118940,118943,118945],{"class":35,"line":9266},[33,118932,25829],{"class":43},[33,118934,118570],{"class":119},[33,118936,118937],{"class":119}," search",[33,118939,30155],{"class":39},[33,118941,118942],{"class":119},"keywor",[33,118944,1926],{"class":47},[33,118946,52560],{"class":39},[33,118948,118949],{"class":35,"line":9272},[33,118950,160],{"emptyLinePlaceholder":159},[33,118952,118953],{"class":35,"line":9284},[33,118954,118955],{"class":60},"#列出所有已安装的包\n",[33,118957,118958,118960,118962],{"class":35,"line":9296},[33,118959,118621],{"class":43},[33,118961,118624],{"class":119},[33,118963,118964],{"class":76}," --installed\n",[33,118966,118967],{"class":35,"line":9308},[33,118968,160],{"emptyLinePlaceholder":159},[33,118970,118971],{"class":35,"line":10967},[33,118972,118973],{"class":60},"#列出所有已安装的包的版本信息\n",[33,118975,118976,118978,118980],{"class":35,"line":10992},[33,118977,118621],{"class":43},[33,118979,118624],{"class":119},[33,118981,118982],{"class":76}," --all-versions\n",[1544,118984,118985],{},"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":28,"searchDepth":51,"depth":51,"links":118987},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118532,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118994,"title":118995,"body":118996,"description":24628,"extension":1557,"meta":119737,"navigation":159,"path":119738,"seo":119739,"stem":119740,"__hash__":119741},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118997,"toc":119724},[118998,119001,119005,119008,119014,119018,119022,119028,119033,119038,119043,119048,119053,119056,119059,119062,119065,119069,119072,119077,119080,119085,119088,119093,119100,119103,119106,119109,119112,119115,119126,119130,119134,119139,119144,119148,119153,119157,119162,119166,119170,119175,119178,119223,119228,119232,119236,119241,119247,119252,119262,119267,119277,119282,119287,119314,119318,119321,119326,119329,119354,119358,119363,119366,119371,119376,119396,119401,119404,119419,119423,119476,119479,119484,119488,119491,119506,119509,119512,119517,119521,119525,119528,119532,119536,119539,119544,119549,119553,119560,119568,119571,119578,119583,119588,119591,119596,119603,119608,119615,119619,119621,119626,119630,119633,119636,119641,119644,119649,119652,119657,119662,119667,119671,119676,119680,119721],[10,118999,118995],{"id":119000},"_2-linux装机教程",[18,119002,119004],{"id":119003},"_21-实体机","2.1 实体机",[14,119006,119007],{},"使用清华源：（Ubuntu24.04）",[14,119009,119010],{},[126,119011,119012],{"href":119012,"rel":119013},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25117],[18,119015,119017],{"id":119016},"_22-普通虚拟机","2.2 普通虚拟机",[1599,119019,119021],{"id":119020},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,119023,119024],{},[126,119025,119026],{"href":119026,"rel":119027},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25117],[14,119029,119030],{},[2918,119031],{"alt":28,"src":119032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,119034,119035],{},[2918,119036],{"alt":28,"src":119037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,119039,119040],{},[2918,119041],{"alt":28,"src":119042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,119044,119045],{},[2918,119046],{"alt":28,"src":119047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,119049,119050],{},[2918,119051],{"alt":28,"src":119052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,119054,119055],{},"内存4G（4096MB）；",[14,119057,119058],{},"CPU给4个核；",[14,119060,119061],{},"硬盘动态分配60G；",[14,119063,119064],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[1599,119066,119068],{"id":119067},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,119070,119071],{},"按照1.1的步骤下载Ubuntu",[14,119073,119074],{},[2918,119075],{"alt":28,"src":119076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,119078,119079],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,119081,119082],{},[2918,119083],{"alt":28,"src":119084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,119086,119087],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,119089,119090],{},[2918,119091],{"alt":28,"src":119092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,119094,119095,119096,119099],{},"选择“正常安装”(找不到都用Alt+F7)， ",[480,119097,119098],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,119101,119102],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,119104,119105],{},"将改动写入磁盘吗 继续",[14,119107,119108],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,119110,119111],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,119113,119114],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,119116,119117,119118,119121,119122,119125],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[480,119119,119120],{},"除了"," 选不发送系统信息与不升级之外， ",[480,119123,119124],{},"其它"," 都跳过或前进）",[1599,119127,119129],{"id":119128},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23249,119131,119133],{"id":119132},"_2231-全屏","2.2.3.1 全屏",[14,119135,119136],{},[2918,119137],{"alt":28,"src":119138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,119140,119141],{},[2918,119142],{"alt":28,"src":119143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23249,119145,119147],{"id":119146},"_2232-文件交换","2.2.3.2 文件交换",[14,119149,119150],{},[2918,119151],{"alt":28,"src":119152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23249,119154,119156],{"id":119155},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,119158,119159],{},[2918,119160],{"alt":28,"src":119161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[18,119163,119165],{"id":119164},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[1599,119167,119169],{"id":119168},"_231-简介与优缺点","2.3.1 简介与优缺点",[574,119171,119172],{},[564,119173,119174],{},"什么情况下推荐？",[14,119176,119177],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[574,119179,119180],{"start":51},[564,119181,119182,119183],{},"优缺点：",[574,119184,119185,119215],{},[564,119186,119187,119188],{},"优点：",[574,119189,119190,119193,119200,119203,119206,119209,119212],{},[564,119191,119192],{},"WSL2是最好的Linux发行版;(bushi)",[564,119194,119195,119196,119199],{},"性能损耗极低。且比在Windows上跑深度性能 ",[480,119197,119198],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[564,119201,119202],{},"非常方便调用USB设备，可以USB直通;",[564,119204,119205],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[564,119207,119208],{},"非常方便Win与WSL2互相传文件等协同操作;",[564,119210,119211],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[564,119213,119214],{},"非常方便使用Windows的VScode远程开发;",[564,119216,119217,119218],{},"缺点：",[574,119219,119220],{},[564,119221,119222],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,119224,119225],{},[2918,119226],{"alt":28,"src":119227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[1599,119229,119231],{"id":119230},"_232-安装教程","2.3.2 安装教程",[23249,119233,119235],{"id":119234},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[574,119237,119238],{},[564,119239,119240],{},"方法一(图形界面)",[14,119242,119243,119244,25871],{},"用Win+R输入",[30,119245,119246],{},"appwiz.cpl",[14,119248,119249],{},[2918,119250],{"alt":28,"src":119251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,119253,119254,119255,119258,119259,27726],{},"点击OK进入 ",[480,119256,119257],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[480,119260,119261],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,119263,119264],{},[2918,119265],{"alt":28,"src":119266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,119268,119269,119270,102271,119273,119276],{},"选择 ",[480,119271,119272],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[480,119274,119275],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,119278,119279],{},[2918,119280],{"alt":28,"src":119281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[574,119283,119284],{"start":51},[564,119285,119286],{},"方法二(命令行)",[23,119288,119292],{"className":119289,"code":119290,"language":119291,"meta":28,"style":28},"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",[30,119293,119294,119299,119304,119309],{"__ignoreMap":28},[33,119295,119296],{"class":35,"line":36},[33,119297,119298],{},"# 开启 Linux 子系统\n",[33,119300,119301],{"class":35,"line":51},[33,119302,119303],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[33,119305,119306],{"class":35,"line":57},[33,119307,119308],{},"# 开启虚拟机平台\n",[33,119310,119311],{"class":35,"line":64},[33,119312,119313],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23249,119315,119317],{"id":119316},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,119319,119320],{},"用管理员权限打开powershell",[14,119322,119323],{},[2918,119324],{"alt":28,"src":119325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,119327,119328],{},"升级WSL并设置默认版本为WSL2",[23,119330,119332],{"className":119289,"code":119331,"language":119291,"meta":28,"style":28},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[30,119333,119334,119339,119344,119349],{"__ignoreMap":28},[33,119335,119336],{"class":35,"line":36},[33,119337,119338],{},"# 更新 wsl\n",[33,119340,119341],{"class":35,"line":51},[33,119342,119343],{},"wsl --update\n",[33,119345,119346],{"class":35,"line":57},[33,119347,119348],{},"# 将 wsl 版本设置为 wsl2\n",[33,119350,119351],{"class":35,"line":64},[33,119352,119353],{},"wsl --set-default-version 2\n",[23249,119355,119357],{"id":119356},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[574,119359,119360],{},[564,119361,119362],{},"方式一(商店下载)",[14,119364,119365],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,119367,119368],{},[2918,119369],{"alt":28,"src":119370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[574,119372,119373],{"start":51},[564,119374,119375],{},"方式二(命令行安装)",[23,119377,119379],{"className":119289,"code":119378,"language":119291,"meta":28,"style":28},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[30,119380,119381,119386,119391],{"__ignoreMap":28},[33,119382,119383],{"class":35,"line":36},[33,119384,119385],{},"# 列出可安装的 Linux 版本\n",[33,119387,119388],{"class":35,"line":51},[33,119389,119390],{},"#（需要科学手段）\n",[33,119392,119393],{"class":35,"line":57},[33,119394,119395],{},"wsl --list --online\n",[14,119397,119398],{},[2918,119399],{"alt":28,"src":119400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,119402,119403],{},"选择对应发行版并安装",[23,119405,119407],{"className":119289,"code":119406,"language":119291,"meta":28,"style":28},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[30,119408,119409,119414],{"__ignoreMap":28},[33,119410,119411],{"class":35,"line":36},[33,119412,119413],{},"# Ubuntu安装完毕后需要重启系统\n",[33,119415,119416],{"class":35,"line":51},[33,119417,119418],{},"wsl --install -d Ubuntu-24.04\n",[23249,119420,119422],{"id":119421},"_2324-查看系统状态","2.3.2.4 查看系统状态",[23,119424,119426],{"className":119289,"code":119425,"language":119291,"meta":28,"style":28},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[30,119427,119428,119433,119438,119443,119448,119452,119456,119461,119466,119471],{"__ignoreMap":28},[33,119429,119430],{"class":35,"line":36},[33,119431,119432],{},"# 查看 wsl\n",[33,119434,119435],{"class":35,"line":51},[33,119436,119437],{},"wsl -l\n",[33,119439,119440],{"class":35,"line":57},[33,119441,119442],{},"# 查看 wsl 运行版本或模式\n",[33,119444,119445],{"class":35,"line":64},[33,119446,119447],{},"wsl -l -v\n",[33,119449,119450],{"class":35,"line":83},[33,119451,160],{"emptyLinePlaceholder":159},[33,119453,119454],{"class":35,"line":89},[33,119455,160],{"emptyLinePlaceholder":159},[33,119457,119458],{"class":35,"line":98},[33,119459,119460],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[33,119462,119463],{"class":35,"line":110},[33,119464,119465],{},"wsl --set-version \u003Cdistro> 2\n",[33,119467,119468],{"class":35,"line":134},[33,119469,119470],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[33,119472,119473],{"class":35,"line":156},[33,119474,119475],{},"wsl --unregister \u003Cdistro>\n",[14,119477,119478],{},"输出Version为2即正常",[14,119480,119481],{},[2918,119482],{"alt":28,"src":119483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23249,119485,119487],{"id":119486},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,119489,119490],{},"直接在Powershell里输入wsl命令进入子系统",[23,119492,119494],{"className":119289,"code":119493,"language":119291,"meta":28,"style":28},"# 进入子系统\nwsl\n",[30,119495,119496,119501],{"__ignoreMap":28},[33,119497,119498],{"class":35,"line":36},[33,119499,119500],{},"# 进入子系统\n",[33,119502,119503],{"class":35,"line":51},[33,119504,119505],{},"wsl\n",[14,119507,119508],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,119510,119511],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,119513,119514],{},[2918,119515],{"alt":28,"src":119516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[1599,119518,119520],{"id":119519},"_233-配置各种环境","2.3.3 配置各种环境",[23249,119522,119524],{"id":119523},"_2331-换源","2.3.3.1 换源",[14,119526,119527],{},"(同实体机LINUX，往下找教程)",[23249,119529,119531],{"id":119530},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24161,119533,119535],{"id":119534},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,119537,119538],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,119540,119541],{},[2918,119542],{"alt":28,"src":119543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,119545,119546],{},[2918,119547],{"alt":28,"src":119548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24161,119550,119552],{"id":119551},"_23322-cuda","2.3.3.2.2 CUDA",[14,119554,119555,119556],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[126,119557,119558],{"href":119558,"rel":119559},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25117],[14,119561,119562,119565],{},[2918,119563],{"alt":28,"src":119564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2918,119566],{"alt":28,"src":119567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,119569,119570],{},"在下方的网站，选择合适的版本。",[14,119572,119573,119574],{},"WSL2 专属 CUDA 指南：",[126,119575,119576],{"href":119576,"rel":119577},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25117],[14,119579,119580],{},[480,119581,119582],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,119584,119585],{},[2918,119586],{"alt":28,"src":119587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,119589,119590],{},"挨行敲一遍",[14,119592,119593],{},[2918,119594],{"alt":28,"src":119595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,119597,119598,119599,119602],{},"敲完后，输入",[30,119600,119601],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,119604,119605],{},[2918,119606],{"alt":28,"src":119607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,119609,119610,119611,119614],{},"（请详看下方教程的",[480,119612,119613],{},"安装CUDA的配置环境来看","如何配置环境）",[24161,119616,119618],{"id":119617},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,119620,119527],{},[14,119622,119623],{},[2918,119624],{"alt":28,"src":119625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23249,119627,119629],{"id":119628},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,119631,119632],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,119634,119635],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,119637,119638],{},[2918,119639],{"alt":28,"src":119640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,119642,119643],{},"连接WSL2",[14,119645,119646],{},[2918,119647],{"alt":28,"src":119648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,119650,119651],{},"远程开发成功。",[14,119653,119654],{},[2918,119655],{"alt":28,"src":119656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,119658,119659],{},[2918,119660],{"alt":28,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,119663,119664],{},[2918,119665],{"alt":28,"src":119666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23249,119668,119670],{"id":119669},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,119672,119673],{},[2918,119674],{"alt":28,"src":119675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23249,119677,119679],{"id":119678},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[23,119681,119683],{"className":118549,"code":119682,"language":118551,"meta":28,"style":28},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[30,119684,119685,119693,119701,119712,119716],{"__ignoreMap":28},[33,119686,119687,119689,119691],{"class":35,"line":36},[33,119688,25829],{"class":43},[33,119690,118570],{"class":119},[33,119692,27495],{"class":119},[33,119694,119695,119697,119699],{"class":35,"line":51},[33,119696,25829],{"class":43},[33,119698,118570],{"class":119},[33,119700,118586],{"class":119},[33,119702,119703,119705,119707,119709],{"class":35,"line":57},[33,119704,25829],{"class":43},[33,119706,118570],{"class":119},[33,119708,25086],{"class":119},[33,119710,119711],{"class":119}," mesa-utils\n",[33,119713,119714],{"class":35,"line":64},[33,119715,160],{"emptyLinePlaceholder":159},[33,119717,119718],{"class":35,"line":83},[33,119719,119720],{"class":60},"#然后重启wsl2即可\n",[1544,119722,119723],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"searchDepth":51,"depth":51,"links":119725},[119726,119727,119732],{"id":119003,"depth":51,"text":119004},{"id":119016,"depth":51,"text":119017,"children":119728},[119729,119730,119731],{"id":119020,"depth":57,"text":119021},{"id":119067,"depth":57,"text":119068},{"id":119128,"depth":57,"text":119129},{"id":119164,"depth":51,"text":119165,"children":119733},[119734,119735,119736],{"id":119168,"depth":57,"text":119169},{"id":119230,"depth":57,"text":119231},{"id":119519,"depth":57,"text":119520},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118995,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119743,"title":119744,"body":119745,"description":24628,"extension":1557,"meta":122681,"navigation":159,"path":122682,"seo":122683,"stem":122684,"__hash__":122685},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119746,"toc":122653},[119747,119750,119754,119760,119764,119770,119774,119962,119965,119970,119974,119978,119981,119984,119990,119995,119998,120001,120006,120039,120044,120048,120125,120128,120133,120137,120140,120179,120182,120191,120209,120214,120221,120338,120343,120346,120373,120378,120382,120391,120441,120448,120452,120455,120469,120476,120510,120515,120519,120542,120545,120550,120554,120557,120560,120563,120605,120609,120612,120615,120656,120660,120664,120667,120672,120677,120680,120703,120706,120714,120719,120722,120727,120732,120735,120740,120744,120749,120772,120777,120839,120847,120852,120857,120860,120865,120868,120873,120878,120896,120901,120907,120912,120926,120930,120933,120936,120939,120982,120985,120990,121091,121094,121099,121103,121107,121144,121148,121152,121156,121202,121206,121251,121255,121262,121270,121325,121328,121405,121408,121431,121435,121438,121443,121448,121456,121459,121464,121469,121474,121477,121482,121491,121494,121499,121502,121573,121578,121581,121586,121589,121594,121597,121602,121605,121610,121615,121618,121693,121696,121709,121714,121717,121731,121734,121763,121768,121797,121800,121805,121809,121814,121823,121826,121831,121834,121839,121842,121845,121850,121853,121858,121863,121866,121871,121874,121999,122004,122034,122037,122042,122047,122064,122067,122110,122113,122140,122145,122158,122301,122305,122310,122324,122327,122378,122381,122411,122414,122430,122435,122449,122452,122519,122524,122533,122538,122541,122553,122558,122565,122589,122592,122597,122600,122619,122624,122631,122643,122650],[10,119748,119744],{"id":119749},"_3-安装必备配置",[18,119751,119753],{"id":119752},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[23,119755,119758],{"className":119756,"code":119757,"language":6578},[6576],"  打开下方网站（注意，该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",[30,119759,119757],{"__ignoreMap":28},[1599,119761,119763],{"id":119762},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[23,119765,119768],{"className":119766,"code":119767,"language":6578},[6576],"  输入以下命令\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",[30,119769,119767],{"__ignoreMap":28},[1599,119771,119773],{"id":119772},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[23,119775,119779],{"className":119776,"code":119777,"language":119778,"meta":28,"style":28},"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",[30,119780,119781,119789,119800,119812,119826,119830,119840,119845,119849,119853,119858,119862,119874,119878,119883,119887,119898,119902,119918,119922,119933,119937,119942,119946,119954],{"__ignoreMap":28},[33,119782,119783,119785,119787],{"class":35,"line":36},[33,119784,25829],{"class":43},[33,119786,118570],{"class":119},[33,119788,27495],{"class":119},[33,119790,119791,119793,119795,119797],{"class":35,"line":51},[33,119792,25829],{"class":43},[33,119794,118570],{"class":119},[33,119796,25086],{"class":119},[33,119798,119799],{"class":119}," vim\n",[33,119801,119802,119804,119807,119809],{"class":35,"line":57},[33,119803,25829],{"class":43},[33,119805,119806],{"class":119}," rm",[33,119808,26578],{"class":76},[33,119810,119811],{"class":119}," \u002Fetc\u002Fapt\u002Fsources.list\n",[33,119813,119814,119816,119818,119820,119823],{"class":35,"line":64},[33,119815,25829],{"class":43},[33,119817,119806],{"class":119},[33,119819,26578],{"class":76},[33,119821,119822],{"class":119}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[33,119824,119825],{"class":76},"**\n",[33,119827,119828],{"class":35,"line":83},[33,119829,160],{"emptyLinePlaceholder":159},[33,119831,119832,119834,119837],{"class":35,"line":89},[33,119833,25829],{"class":43},[33,119835,119836],{"class":119}," vim",[33,119838,119839],{"class":119}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[33,119841,119842],{"class":35,"line":98},[33,119843,119844],{"class":119},"```\n",[33,119846,119847],{"class":35,"line":110},[33,119848,160],{"emptyLinePlaceholder":159},[33,119850,119851],{"class":35,"line":134},[33,119852,160],{"emptyLinePlaceholder":159},[33,119854,119855],{"class":35,"line":156},[33,119856,119857],{"class":43},"选择好Ubuntu版本后，复制下方的内容。\n",[33,119859,119860],{"class":35,"line":163},[33,119861,160],{"emptyLinePlaceholder":159},[33,119863,119864,119866,119869,119872],{"class":35,"line":169},[33,119865,1842],{"class":39},[33,119867,119868],{"class":119},"[](",[33,119870,119871],{"class":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[33,119873,884],{"class":119},[33,119875,119876],{"class":35,"line":175},[33,119877,160],{"emptyLinePlaceholder":159},[33,119879,119880],{"class":35,"line":181},[33,119881,119882],{"class":43},"粘贴进去\n",[33,119884,119885],{"class":35,"line":196},[33,119886,160],{"emptyLinePlaceholder":159},[33,119888,119889,119891,119893,119896],{"class":35,"line":213},[33,119890,1842],{"class":39},[33,119892,119868],{"class":119},[33,119894,119895],{"class":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[33,119897,884],{"class":119},[33,119899,119900],{"class":35,"line":228},[33,119901,160],{"emptyLinePlaceholder":159},[33,119903,119904,119907,119910,119913,119915],{"class":35,"line":1345},[33,119905,119906],{"class":43},"按一下ESC，然后英文冒号，输入",[33,119908,119909],{"class":119}," `",[33,119911,119912],{"class":43},":wq!",[33,119914,2567],{"class":119},[33,119916,119917],{"class":43},"然后回车\n",[33,119919,119920],{"class":35,"line":1350},[33,119921,160],{"emptyLinePlaceholder":159},[33,119923,119924,119926,119928,119931],{"class":35,"line":1359},[33,119925,1842],{"class":39},[33,119927,119868],{"class":119},[33,119929,119930],{"class":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[33,119932,884],{"class":119},[33,119934,119935],{"class":35,"line":1364},[33,119936,160],{"emptyLinePlaceholder":159},[33,119938,119939],{"class":35,"line":1370},[33,119940,119941],{"class":43},"输入以下命令\n",[33,119943,119944],{"class":35,"line":1425},[33,119945,160],{"emptyLinePlaceholder":159},[33,119947,119948,119951],{"class":35,"line":1438},[33,119949,119950],{"class":119},"```",[33,119952,119953],{"class":43},"Bash\n",[33,119955,119956,119958,119960],{"class":35,"line":1451},[33,119957,25829],{"class":43},[33,119959,118570],{"class":119},[33,119961,27495],{"class":119},[14,119963,119964],{},"这里被替换成对应学校则成功",[14,119966,119967],{},[2918,119968],{"alt":28,"src":119969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[18,119971,119973],{"id":119972},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[1599,119975,119977],{"id":119976},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119979,119980],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119982,119983],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119985,119986],{},[126,119987,119988],{"href":119988,"rel":119989},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25117],[14,119991,119992],{},[2918,119993],{"alt":28,"src":119994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119996,119997],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119999,120000],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,120002,120003],{},[2918,120004],{"alt":28,"src":120005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[23,120007,120009],{"className":118549,"code":120008,"language":118551,"meta":28,"style":28},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[30,120010,120011,120016,120023,120028],{"__ignoreMap":28},[33,120012,120013],{"class":35,"line":36},[33,120014,120015],{"class":60},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[33,120017,120018,120020],{"class":35,"line":51},[33,120019,102529],{"class":76},[33,120021,120022],{"class":119}," ~\u002FDownloads\n",[33,120024,120025],{"class":35,"line":57},[33,120026,120027],{"class":60},"#下方chrome安装包名不一定是这个，根据名字来看\n",[33,120029,120030,120032,120034,120036],{"class":35,"line":64},[33,120031,25829],{"class":43},[33,120033,118570],{"class":119},[33,120035,25086],{"class":119},[33,120037,120038],{"class":119}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,120040,120041],{},[2918,120042],{"alt":28,"src":120043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[1599,120045,120047],{"id":120046},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[23,120049,120051],{"className":118549,"code":120050,"language":118551,"meta":28,"style":28},"# 老版\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",[30,120052,120053,120058,120066,120077,120082,120086,120091,120101,120109,120120],{"__ignoreMap":28},[33,120054,120055],{"class":35,"line":36},[33,120056,120057],{"class":60},"# 老版\n",[33,120059,120060,120062,120064],{"class":35,"line":51},[33,120061,25829],{"class":43},[33,120063,118570],{"class":119},[33,120065,27495],{"class":119},[33,120067,120068,120070,120072,120074],{"class":35,"line":57},[33,120069,25829],{"class":43},[33,120071,118570],{"class":119},[33,120073,25086],{"class":119},[33,120075,120076],{"class":119}," neofetch\n",[33,120078,120079],{"class":35,"line":64},[33,120080,120081],{"class":43},"neofetch\n",[33,120083,120084],{"class":35,"line":83},[33,120085,160],{"emptyLinePlaceholder":159},[33,120087,120088],{"class":35,"line":89},[33,120089,120090],{"class":60},"# 新版\n",[33,120092,120093,120095,120098],{"class":35,"line":98},[33,120094,25829],{"class":43},[33,120096,120097],{"class":119}," add-apt-repository",[33,120099,120100],{"class":119}," ppa:zhangsongcui3371\u002Ffastfetch\n",[33,120102,120103,120105,120107],{"class":35,"line":110},[33,120104,25829],{"class":43},[33,120106,118570],{"class":119},[33,120108,27495],{"class":119},[33,120110,120111,120113,120115,120117],{"class":35,"line":134},[33,120112,25829],{"class":43},[33,120114,118570],{"class":119},[33,120116,25086],{"class":119},[33,120118,120119],{"class":119}," fastfetch\n",[33,120121,120122],{"class":35,"line":156},[33,120123,120124],{"class":43},"fastfetch\n",[14,120126,120127],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,120129,120130],{},[2918,120131],{"alt":28,"src":120132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[1599,120134,120136],{"id":120135},"_323-移除snap应用","3.2.3 移除snap应用",[14,120138,120139],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[23,120141,120143],{"className":118549,"code":120142,"language":118551,"meta":28,"style":28},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[30,120144,120145,120157,120168],{"__ignoreMap":28},[33,120146,120147,120149,120151,120154],{"class":35,"line":36},[33,120148,25829],{"class":43},[33,120150,27766],{"class":119},[33,120152,120153],{"class":119}," disable",[33,120155,120156],{"class":119}," snapd.service\n",[33,120158,120159,120161,120163,120165],{"class":35,"line":51},[33,120160,25829],{"class":43},[33,120162,27766],{"class":119},[33,120164,120153],{"class":119},[33,120166,120167],{"class":119}," snapd.socket\n",[33,120169,120170,120172,120174,120176],{"class":35,"line":57},[33,120171,25829],{"class":43},[33,120173,27766],{"class":119},[33,120175,120153],{"class":119},[33,120177,120178],{"class":119}," snapd.seeded.service\n",[14,120180,120181],{},"然后查看snap应用列表",[14,120183,120184,120185,120190],{},"根据你安装的选择不同（最小安装或普通安装），有",[126,120186,120189],{"href":120187,"rel":120188},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25117],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[23,120192,120194],{"className":118549,"code":120193,"language":118551,"meta":28,"style":28},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[30,120195,120196,120201],{"__ignoreMap":28},[33,120197,120198],{"class":35,"line":36},[33,120199,120200],{"class":60},"# 查询当前系统上snap安装了哪些app\n",[33,120202,120203,120206],{"class":35,"line":51},[33,120204,120205],{"class":43},"snap",[33,120207,120208],{"class":119}," list\n",[14,120210,120211],{},[2918,120212],{"alt":28,"src":120213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,120215,120216,120217,120220],{},"卸载掉图中所有应用，按照 ",[480,120218,120219],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[23,120222,120224],{"className":118549,"code":120223,"language":118551,"meta":28,"style":28},"#移除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",[30,120225,120226,120231,120243,120248,120259,120264,120275,120280,120291,120296,120300,120305,120316,120327],{"__ignoreMap":28},[33,120227,120228],{"class":35,"line":36},[33,120229,120230],{"class":60},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[33,120232,120233,120235,120238,120240],{"class":35,"line":51},[33,120234,25829],{"class":43},[33,120236,120237],{"class":119}," snap",[33,120239,27332],{"class":119},[33,120241,120242],{"class":119}," snap-store\n",[33,120244,120245],{"class":35,"line":57},[33,120246,120247],{"class":60},"#移除firefox浏览器\n",[33,120249,120250,120252,120254,120256],{"class":35,"line":64},[33,120251,25829],{"class":43},[33,120253,120237],{"class":119},[33,120255,27332],{"class":119},[33,120257,120258],{"class":119}," firefox\n",[33,120260,120261],{"class":35,"line":83},[33,120262,120263],{"class":60},"#移除gnome-42-2204\n",[33,120265,120266,120268,120270,120272],{"class":35,"line":89},[33,120267,25829],{"class":43},[33,120269,120237],{"class":119},[33,120271,27332],{"class":119},[33,120273,120274],{"class":119}," gnome-42-2204\n",[33,120276,120277],{"class":35,"line":98},[33,120278,120279],{"class":60},"#移除gtk-common-themes\n",[33,120281,120282,120284,120286,120288],{"class":35,"line":110},[33,120283,25829],{"class":43},[33,120285,120237],{"class":119},[33,120287,27332],{"class":119},[33,120289,120290],{"class":119}," gtk-common-themes\n",[33,120292,120293],{"class":35,"line":134},[33,120294,120295],{"class":60},"#移除其它...\n",[33,120297,120298],{"class":35,"line":156},[33,120299,4085],{"class":47},[33,120301,120302],{"class":35,"line":163},[33,120303,120304],{"class":60},"#移除core22,bare以及snapd\n",[33,120306,120307,120309,120311,120313],{"class":35,"line":169},[33,120308,25829],{"class":43},[33,120310,120237],{"class":119},[33,120312,27332],{"class":119},[33,120314,120315],{"class":119}," core22\n",[33,120317,120318,120320,120322,120324],{"class":35,"line":175},[33,120319,25829],{"class":43},[33,120321,120237],{"class":119},[33,120323,27332],{"class":119},[33,120325,120326],{"class":119}," bare\n",[33,120328,120329,120331,120333,120335],{"class":35,"line":181},[33,120330,25829],{"class":43},[33,120332,120237],{"class":119},[33,120334,27332],{"class":119},[33,120336,120337],{"class":119}," snapd\n",[14,120339,120340],{},[2918,120341],{"alt":28,"src":120342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,120344,120345],{},"输入以下命令查看是否还有snap包",[23,120347,120349],{"className":118549,"code":120348,"language":118551,"meta":28,"style":28},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[30,120350,120351,120357,120361,120365,120369],{"__ignoreMap":28},[33,120352,120353,120355],{"class":35,"line":36},[33,120354,120205],{"class":43},[33,120356,120208],{"class":119},[33,120358,120359],{"class":35,"line":51},[33,120360,120057],{"class":60},[33,120362,120363],{"class":35,"line":57},[33,120364,120081],{"class":43},[33,120366,120367],{"class":35,"line":64},[33,120368,120090],{"class":60},[33,120370,120371],{"class":35,"line":83},[33,120372,120124],{"class":43},[14,120374,120375],{},[2918,120376],{"alt":28,"src":120377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[1599,120379,120381],{"id":120380},"_324-移除snap","3.2.4 移除snap",[14,120383,120384,120385,120390],{},"在删除掉",[126,120386,120389],{"href":120387,"rel":120388},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25117],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[23,120392,120394],{"className":118549,"code":120393,"language":118551,"meta":28,"style":28}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[30,120395,120396,120401,120414,120419,120430],{"__ignoreMap":28},[33,120397,120398],{"class":35,"line":36},[33,120399,120400],{"class":60}," #使用apt移除掉snap\n",[33,120402,120403,120405,120407,120409,120412],{"class":35,"line":51},[33,120404,25829],{"class":43},[33,120406,118570],{"class":119},[33,120408,118878],{"class":119},[33,120410,120411],{"class":76}," --purge",[33,120413,120337],{"class":119},[33,120415,120416],{"class":35,"line":57},[33,120417,120418],{"class":60},"#移除snapd的一些目录\n",[33,120420,120421,120423,120425,120427],{"class":35,"line":64},[33,120422,25829],{"class":43},[33,120424,119806],{"class":119},[33,120426,26578],{"class":76},[33,120428,120429],{"class":119}," \u002Fvar\u002Fcache\u002Fsnapd\n",[33,120431,120432,120434,120436,120438],{"class":35,"line":83},[33,120433,25829],{"class":43},[33,120435,119806],{"class":119},[33,120437,26578],{"class":76},[33,120439,120440],{"class":119}," ~\u002Fsnap\n",[14,120442,120443,120444,120447],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[30,120445,120446],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[1599,120449,120451],{"id":120450},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,120453,120454],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[23,120456,120458],{"className":118549,"code":120457,"language":118551,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[30,120459,120460],{"__ignoreMap":28},[33,120461,120462,120464,120466],{"class":35,"line":36},[33,120463,25829],{"class":43},[33,120465,119836],{"class":119},[33,120467,120468],{"class":119}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,120470,120471,120472,120475],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[30,120473,120474],{},":wq"," 回车",[23,120477,120479],{"className":118549,"code":120478,"language":118551,"meta":28,"style":28},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[30,120480,120481,120488,120502],{"__ignoreMap":28},[33,120482,120483,120486],{"class":35,"line":36},[33,120484,120485],{"class":43},"Package:",[33,120487,120337],{"class":119},[33,120489,120490,120493,120496,120499],{"class":35,"line":51},[33,120491,120492],{"class":43},"Pin:",[33,120494,120495],{"class":119}," release",[33,120497,120498],{"class":119}," a=",[33,120500,120501],{"class":76},"*\n",[33,120503,120504,120507],{"class":35,"line":57},[33,120505,120506],{"class":43},"Pin-Priority:",[33,120508,120509],{"class":76}," -10\n",[14,120511,120512],{},[2918,120513],{"alt":28,"src":120514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[1599,120516,120518],{"id":120517},"_326-测试是否成功","3.2.6 测试是否成功",[23,120520,120522],{"className":118549,"code":120521,"language":118551,"meta":28,"style":28},"sudo apt update\nsudo apt install firefox\n",[30,120523,120524,120532],{"__ignoreMap":28},[33,120525,120526,120528,120530],{"class":35,"line":36},[33,120527,25829],{"class":43},[33,120529,118570],{"class":119},[33,120531,27495],{"class":119},[33,120533,120534,120536,120538,120540],{"class":35,"line":51},[33,120535,25829],{"class":43},[33,120537,118570],{"class":119},[33,120539,25086],{"class":119},[33,120541,120258],{"class":119},[14,120543,120544],{},"这里提示snapd无法被安装，就证明成功了",[14,120546,120547],{},[2918,120548],{"alt":28,"src":120549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[1599,120551,120553],{"id":120552},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,120555,120556],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,120558,120559],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,120561,120562],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[23,120564,120566],{"className":118549,"code":120565,"language":118551,"meta":28,"style":28},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[30,120567,120568,120573,120582,120587,120595],{"__ignoreMap":28},[33,120569,120570],{"class":35,"line":36},[33,120571,120572],{"class":60},"# 添加Mozilla提供的源\n",[33,120574,120575,120577,120579],{"class":35,"line":51},[33,120576,25829],{"class":43},[33,120578,120097],{"class":119},[33,120580,120581],{"class":119}," ppa:mozillateam\u002Fppa\n",[33,120583,120584],{"class":35,"line":57},[33,120585,120586],{"class":60},"# 安装Firefox\n",[33,120588,120589,120591,120593],{"class":35,"line":64},[33,120590,25829],{"class":43},[33,120592,118570],{"class":119},[33,120594,27495],{"class":119},[33,120596,120597,120599,120601,120603],{"class":35,"line":83},[33,120598,25829],{"class":43},[33,120600,118570],{"class":119},[33,120602,25086],{"class":119},[33,120604,120258],{"class":119},[1599,120606,120608],{"id":120607},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,120610,120611],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,120613,120614],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[23,120616,120618],{"className":118549,"code":120617,"language":118551,"meta":28,"style":28},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[30,120619,120620,120625,120635,120643,120647],{"__ignoreMap":28},[33,120621,120622],{"class":35,"line":36},[33,120623,120624],{"class":60},"#删掉禁止安装snap的配置文件\n",[33,120626,120627,120629,120631,120633],{"class":35,"line":51},[33,120628,25829],{"class":43},[33,120630,119806],{"class":119},[33,120632,26578],{"class":76},[33,120634,120468],{"class":119},[33,120636,120637,120639,120641],{"class":35,"line":57},[33,120638,25829],{"class":43},[33,120640,118570],{"class":119},[33,120642,27495],{"class":119},[33,120644,120645],{"class":35,"line":64},[33,120646,160],{"emptyLinePlaceholder":159},[33,120648,120649,120651,120653],{"class":35,"line":83},[33,120650,25829],{"class":43},[33,120652,118570],{"class":119},[33,120654,120655],{"class":119}," dist-update\n",[18,120657,120659],{"id":120658},"_33-中文输入法","3.3 中文输入法",[1599,120661,120663],{"id":120662},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,120665,120666],{},"官网下载搜狗输入法",[14,120668,120669],{},[2918,120670],{"alt":28,"src":120671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,120673,120674],{},[2918,120675],{"alt":28,"src":120676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,120678,120679],{},"打开终端输入如下",[23,120681,120683],{"className":118549,"code":120682,"language":118551,"meta":28,"style":28},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[30,120684,120685,120692],{"__ignoreMap":28},[33,120686,120687,120689],{"class":35,"line":36},[33,120688,102529],{"class":76},[33,120690,120691],{"class":119}," ~\u002FDownloads\u002F\n",[33,120693,120694,120696,120698,120700],{"class":35,"line":51},[33,120695,25829],{"class":43},[33,120697,118570],{"class":119},[33,120699,25086],{"class":119},[33,120701,120702],{"class":119}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,120704,120705],{},"打开Fcitx",[14,120707,120708,120711],{},[2918,120709],{"alt":28,"src":120710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2918,120712],{"alt":28,"src":120713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,120715,120716],{},[2918,120717],{"alt":28,"src":120718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,120720,120721],{},"添加搜狗输入法",[14,120723,120724],{},[2918,120725],{"alt":28,"src":120726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,120728,120729],{},[2918,120730],{"alt":28,"src":120731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,120733,120734],{},"将搜狗输入法设置为唯一输入法",[14,120736,120737],{},[2918,120738],{"alt":28,"src":120739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[1599,120741,120743],{"id":120742},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[574,120745,120746],{},[564,120747,120748],{},"卸载旧输入法",[23,120750,120752],{"className":119776,"code":120751,"language":119778,"meta":28,"style":28},"sudo apt purge fcitx* ibus*\n",[30,120753,120754],{"__ignoreMap":28},[33,120755,120756,120758,120760,120762,120765,120767,120770],{"class":35,"line":36},[33,120757,25829],{"class":43},[33,120759,118570],{"class":119},[33,120761,118911],{"class":119},[33,120763,120764],{"class":119}," fcitx",[33,120766,2057],{"class":76},[33,120768,120769],{"class":119}," ibus",[33,120771,120501],{"class":76},[574,120773,120774],{"start":51},[564,120775,120776],{},"安装Fcitx5",[23,120778,120780],{"className":118549,"code":120779,"language":118551,"meta":28,"style":28},"# 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",[30,120781,120782,120787,120801,120805,120810,120819,120827],{"__ignoreMap":28},[33,120783,120784],{"class":35,"line":36},[33,120785,120786],{"class":60},"# Ubuntu22.04及以上、Debian12及以上\n",[33,120788,120789,120791,120793,120795,120798],{"class":35,"line":51},[33,120790,25829],{"class":43},[33,120792,118570],{"class":119},[33,120794,25086],{"class":119},[33,120796,120797],{"class":119}," fcitx5",[33,120799,120800],{"class":119}," fcitx5-chinese-addons\n",[33,120802,120803],{"class":35,"line":57},[33,120804,160],{"emptyLinePlaceholder":159},[33,120806,120807],{"class":35,"line":64},[33,120808,120809],{"class":60},"# Ubuntu20.04\n",[33,120811,120812,120814,120816],{"class":35,"line":83},[33,120813,25829],{"class":43},[33,120815,120097],{"class":119},[33,120817,120818],{"class":119}," ppa:zhsj\u002Ffcitx5\n",[33,120820,120821,120823,120825],{"class":35,"line":89},[33,120822,25829],{"class":43},[33,120824,118570],{"class":119},[33,120826,27495],{"class":119},[33,120828,120829,120831,120833,120835,120837],{"class":35,"line":98},[33,120830,25829],{"class":43},[33,120832,118570],{"class":119},[33,120834,25086],{"class":119},[33,120836,120797],{"class":119},[33,120838,120800],{"class":119},[574,120840,120841,120844],{"start":57},[564,120842,120843],{},"Reboot System",[564,120845,120846],{},"启动Fcitx5",[14,120848,120849],{},[2918,120850],{"alt":28,"src":120851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[574,120853,120854],{"start":83},[564,120855,120856],{},"修改一些设置",[14,120858,120859],{},"将Pinyin和Keyboard - English US加入到左边。",[14,120861,120862],{},[2918,120863],{"alt":28,"src":120864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,120866,120867],{},"添加快捷键以便于更好切换中英文",[14,120869,120870],{},[2918,120871],{"alt":28,"src":120872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[574,120874,120875],{"start":89},[564,120876,120877],{},"重启",[23,120879,120881],{"className":119776,"code":120880,"language":119778,"meta":28,"style":28},"sudo shutdown -r now\n",[30,120882,120883],{"__ignoreMap":28},[33,120884,120885,120887,120890,120893],{"class":35,"line":36},[33,120886,25829],{"class":43},[33,120888,120889],{"class":119}," shutdown",[33,120891,120892],{"class":76}," -r",[33,120894,120895],{"class":119}," now\n",[574,120897,120898],{"start":98},[564,120899,120900],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,120902,120903],{},[126,120904,120905],{"href":120905,"rel":120906},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25117],[574,120908,120909],{"start":110},[564,120910,120911],{},"再重启",[23,120913,120914],{"className":119776,"code":120880,"language":119778,"meta":28,"style":28},[30,120915,120916],{"__ignoreMap":28},[33,120917,120918,120920,120922,120924],{"class":35,"line":36},[33,120919,25829],{"class":43},[33,120921,120889],{"class":119},[33,120923,120892],{"class":76},[33,120925,120895],{"class":119},[18,120927,120929],{"id":120928},"_34-pip3源替换","3.4 pip3源替换",[14,120931,120932],{},"非Debian系发行版需要做。",[14,120934,120935],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,120937,120938],{},"使用dnf的系统也可能不用做。",[23,120940,120942],{"className":118549,"code":120941,"language":118551,"meta":28,"style":28},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,120943,120944,120949,120956,120961,120966],{"__ignoreMap":28},[33,120945,120946],{"class":35,"line":36},[33,120947,120948],{"class":60},"# 检查是否已安装 pip\n",[33,120950,120951,120954],{"class":35,"line":51},[33,120952,120953],{"class":43},"pip3",[33,120955,27546],{"class":76},[33,120957,120958],{"class":35,"line":57},[33,120959,120960],{"class":60},"# 如果未安装，先安装 pip3（见下方）\n",[33,120962,120963],{"class":35,"line":64},[33,120964,120965],{"class":60},"# 配置 pip 使用清华源\n",[33,120967,120968,120970,120973,120976,120979],{"class":35,"line":83},[33,120969,120953],{"class":43},[33,120971,120972],{"class":119}," config",[33,120974,120975],{"class":119}," set",[33,120977,120978],{"class":119}," global.index-url",[33,120980,120981],{"class":119}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120983,120984],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120986,120987],{},[2918,120988],{"alt":28,"src":120989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[23,120991,120993],{"className":118549,"code":120992,"language":118551,"meta":28,"style":28},"#安装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",[30,120994,120995,121000,121008,121019,121023,121028,121047,121051,121056,121068,121072,121077],{"__ignoreMap":28},[33,120996,120997],{"class":35,"line":36},[33,120998,120999],{"class":60},"#安装pip3\n",[33,121001,121002,121004,121006],{"class":35,"line":51},[33,121003,25829],{"class":43},[33,121005,118570],{"class":119},[33,121007,27495],{"class":119},[33,121009,121010,121012,121014,121016],{"class":35,"line":57},[33,121011,25829],{"class":43},[33,121013,27329],{"class":119},[33,121015,25086],{"class":119},[33,121017,121018],{"class":119}," python3-pip\n",[33,121020,121021],{"class":35,"line":64},[33,121022,160],{"emptyLinePlaceholder":159},[33,121024,121025],{"class":35,"line":83},[33,121026,121027],{"class":60},"#更新pip3\n",[33,121029,121030,121032,121034,121036,121038,121040,121043,121045],{"class":35,"line":89},[33,121031,102132],{"class":43},[33,121033,102135],{"class":76},[33,121035,102158],{"class":119},[33,121037,25086],{"class":119},[33,121039,27683],{"class":76},[33,121041,121042],{"class":119}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[33,121044,102163],{"class":76},[33,121046,102166],{"class":119},[33,121048,121049],{"class":35,"line":98},[33,121050,160],{"emptyLinePlaceholder":159},[33,121052,121053],{"class":35,"line":110},[33,121054,121055],{"class":60},"#设置pip源为清华源\n",[33,121057,121058,121060,121062,121064,121066],{"class":35,"line":134},[33,121059,120953],{"class":43},[33,121061,120972],{"class":119},[33,121063,120975],{"class":119},[33,121065,120978],{"class":119},[33,121067,120981],{"class":119},[33,121069,121070],{"class":35,"line":156},[33,121071,160],{"emptyLinePlaceholder":159},[33,121073,121074],{"class":35,"line":163},[33,121075,121076],{"class":60},"#测试\n",[33,121078,121079,121081,121083,121085,121087,121089],{"class":35,"line":169},[33,121080,102132],{"class":43},[33,121082,102135],{"class":76},[33,121084,102158],{"class":119},[33,121086,25086],{"class":119},[33,121088,102163],{"class":76},[33,121090,102166],{"class":119},[14,121092,121093],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,121095,121096],{},[2918,121097],{"alt":28,"src":121098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[18,121100,121102],{"id":121101},"_35-显卡驱动安装","3.5 显卡驱动安装",[1599,121104,121106],{"id":121105},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[23,121108,121110],{"className":119776,"code":121109,"language":119778,"meta":28,"style":28},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[30,121111,121112,121117,121132,121137],{"__ignoreMap":28},[33,121113,121114],{"class":35,"line":36},[33,121115,121116],{"class":60},"# 如果是使用apt安装的驱动\n",[33,121118,121119,121121,121123,121125,121127,121130],{"class":35,"line":51},[33,121120,25829],{"class":43},[33,121122,27329],{"class":119},[33,121124,27332],{"class":119},[33,121126,120411],{"class":76},[33,121128,121129],{"class":119}," nvidia",[33,121131,120501],{"class":76},[33,121133,121134],{"class":35,"line":57},[33,121135,121136],{"class":60},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[33,121138,121139,121141],{"class":35,"line":64},[33,121140,25829],{"class":43},[33,121142,121143],{"class":119}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[1599,121145,121147],{"id":121146},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23249,121149,121151],{"id":121150},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24161,121153,121155],{"id":121154},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[23,121157,121159],{"className":119776,"code":121158,"language":119778,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,121160,121161,121166,121177,121182,121192,121197],{"__ignoreMap":28},[33,121162,121163],{"class":35,"line":36},[33,121164,121165],{"class":60},"# 安装英伟达驱动\n",[33,121167,121168,121170,121172,121174],{"class":35,"line":51},[33,121169,25829],{"class":43},[33,121171,118570],{"class":119},[33,121173,25086],{"class":119},[33,121175,121176],{"class":119}," nvidia-driver-版本号\n",[33,121178,121179],{"class":35,"line":57},[33,121180,121181],{"class":60},"# 重启 \n",[33,121183,121184,121186,121188,121190],{"class":35,"line":64},[33,121185,25829],{"class":43},[33,121187,120889],{"class":119},[33,121189,120892],{"class":76},[33,121191,120895],{"class":119},[33,121193,121194],{"class":35,"line":83},[33,121195,121196],{"class":60},"# 检查驱动是否安装成功\n",[33,121198,121199],{"class":35,"line":89},[33,121200,121201],{"class":43},"nvidia-smi\n",[24161,121203,121205],{"id":121204},"_35212-debian","3.5.2.1.2 Debian",[23,121207,121209],{"className":119776,"code":121208,"language":119778,"meta":28,"style":28},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,121210,121211,121215,121229,121233,121243,121247],{"__ignoreMap":28},[33,121212,121213],{"class":35,"line":36},[33,121214,121165],{"class":60},[33,121216,121217,121219,121221,121223,121226],{"class":35,"line":51},[33,121218,25829],{"class":43},[33,121220,118570],{"class":119},[33,121222,25086],{"class":119},[33,121224,121225],{"class":119}," nvidia-driver",[33,121227,121228],{"class":119}," nvidia-settings\n",[33,121230,121231],{"class":35,"line":57},[33,121232,121181],{"class":60},[33,121234,121235,121237,121239,121241],{"class":35,"line":64},[33,121236,25829],{"class":43},[33,121238,120889],{"class":119},[33,121240,120892],{"class":76},[33,121242,120895],{"class":119},[33,121244,121245],{"class":35,"line":83},[33,121246,121196],{"class":60},[33,121248,121249],{"class":35,"line":89},[33,121250,121201],{"class":43},[23249,121252,121254],{"id":121253},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,121256,121257,121258,121261],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[480,121259,121260],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,121263,121264,121265],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24805,121266,121267],{},[480,121268,121269],{},"（也可以不禁用桌面环境，直接进行下一步。）",[23,121271,121273],{"className":119776,"code":121272,"language":119778,"meta":28,"style":28},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[30,121274,121275,121280,121290,121295,121308,121313],{"__ignoreMap":28},[33,121276,121277],{"class":35,"line":36},[33,121278,121279],{"class":60},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[33,121281,121282,121284,121287],{"class":35,"line":51},[33,121283,25829],{"class":43},[33,121285,121286],{"class":119}," telinit",[33,121288,121289],{"class":76}," 3\n",[33,121291,121292],{"class":35,"line":57},[33,121293,121294],{"class":60},"# ubuntu 使用下方命令\n",[33,121296,121297,121299,121302,121305],{"class":35,"line":64},[33,121298,25829],{"class":43},[33,121300,121301],{"class":119}," service",[33,121303,121304],{"class":119}," lightdm",[33,121306,121307],{"class":119}," stop\n",[33,121309,121310],{"class":35,"line":83},[33,121311,121312],{"class":60},"# Fedora 使用下方命令\n",[33,121314,121315,121317,121319,121322],{"class":35,"line":89},[33,121316,25829],{"class":43},[33,121318,27766],{"class":119},[33,121320,121321],{"class":119}," isolate",[33,121323,121324],{"class":119}," multi-user.target\n",[14,121326,121327],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[23,121329,121331],{"className":119776,"code":121330,"language":119778,"meta":28,"style":28},"# 编译环境+准备工作\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",[30,121332,121333,121338,121349,121354,121361,121366,121378,121383,121390,121395],{"__ignoreMap":28},[33,121334,121335],{"class":35,"line":36},[33,121336,121337],{"class":60},"# 编译环境+准备工作\n",[33,121339,121340,121342,121344,121346],{"class":35,"line":51},[33,121341,25829],{"class":43},[33,121343,118570],{"class":119},[33,121345,25086],{"class":119},[33,121347,121348],{"class":119}," build-essential\n",[33,121350,121351],{"class":35,"line":57},[33,121352,121353],{"class":60},"# 进入到.run目录中\n",[33,121355,121356,121358],{"class":35,"line":64},[33,121357,102529],{"class":76},[33,121359,121360],{"class":119}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[33,121362,121363],{"class":35,"line":83},[33,121364,121365],{"class":60},"# 给驱动文件增加可执行权限：\n",[33,121367,121368,121370,121372,121375],{"class":35,"line":89},[33,121369,25829],{"class":43},[33,121371,25832],{"class":119},[33,121373,121374],{"class":119}," a+x",[33,121376,121377],{"class":119}," NVIDIA-Linux-x86_64-550.107.02.run\n",[33,121379,121380],{"class":35,"line":98},[33,121381,121382],{"class":60},"# 然后执行安装：\n",[33,121384,121385,121387],{"class":35,"line":110},[33,121386,25829],{"class":43},[33,121388,121389],{"class":119}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[33,121391,121392],{"class":35,"line":134},[33,121393,121394],{"class":60},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[33,121396,121397,121399,121402],{"class":35,"line":156},[33,121398,25829],{"class":43},[33,121400,121401],{"class":119}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[33,121403,121404],{"class":76},"  --no-opengl-files\n",[14,121406,121407],{},"安装完毕重启即可",[23,121409,121411],{"className":119776,"code":121410,"language":119778,"meta":28,"style":28},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[30,121412,121413,121417,121423,121427],{"__ignoreMap":28},[33,121414,121415],{"class":35,"line":36},[33,121416,121181],{"class":60},[33,121418,121419,121421],{"class":35,"line":51},[33,121420,25829],{"class":43},[33,121422,27900],{"class":119},[33,121424,121425],{"class":35,"line":57},[33,121426,121196],{"class":60},[33,121428,121429],{"class":35,"line":64},[33,121430,121201],{"class":43},[1599,121432,121434],{"id":121433},"_353-安装cuda","3.5.3 安装CUDA",[14,121436,121437],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,121439,121440],{},[2918,121441],{"alt":28,"src":121442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[574,121444,121445],{},[564,121446,121447],{},"先查看显卡驱动所支持的最高CUDA版本",[23,121449,121450],{"className":119776,"code":121201,"language":119778,"meta":28,"style":28},[30,121451,121452],{"__ignoreMap":28},[33,121453,121454],{"class":35,"line":36},[33,121455,121201],{"class":43},[14,121457,121458],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,121460,121461],{},[2918,121462],{"alt":28,"src":121463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[574,121465,121466],{"start":51},[564,121467,121468],{},"下载CUDA并安装CUDA",[14,121470,119555,121471],{},[126,121472,119558],{"href":119558,"rel":121473},[25117],[14,121475,121476],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,121478,121479],{},[2918,121480],{"alt":28,"src":121481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,121483,121484,121485,121490],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[126,121486,121489],{"href":121487,"rel":121488},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25117],"Vinci机器人队单片机教程","）",[14,121492,121493],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,121495,121496],{},[2918,121497],{"alt":28,"src":121498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,121500,121501],{},"将最下方框框里的命令敲入终端",[23,121503,121505],{"className":119776,"code":121504,"language":119778,"meta":28,"style":28},"# 在当前文件夹下创建一个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",[30,121506,121507,121512,121521,121526,121533,121538,121546,121551,121562,121567],{"__ignoreMap":28},[33,121508,121509],{"class":35,"line":36},[33,121510,121511],{"class":60},"# 在当前文件夹下创建一个ttt的子文件夹\n",[33,121513,121514,121516,121518],{"class":35,"line":51},[33,121515,102519],{"class":43},[33,121517,30469],{"class":76},[33,121519,121520],{"class":119}," .\u002Fttt\n",[33,121522,121523],{"class":35,"line":57},[33,121524,121525],{"class":60},"# 进入ttt文件夹\n",[33,121527,121528,121530],{"class":35,"line":64},[33,121529,102529],{"class":76},[33,121531,121532],{"class":119}," ttt\n",[33,121534,121535],{"class":35,"line":83},[33,121536,121537],{"class":60},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[33,121539,121540,121543],{"class":35,"line":89},[33,121541,121542],{"class":43},"wget",[33,121544,121545],{"class":119}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,121547,121548],{"class":35,"line":98},[33,121549,121550],{"class":60},"# 给予权限\n",[33,121552,121553,121555,121557,121559],{"class":35,"line":110},[33,121554,25829],{"class":43},[33,121556,25832],{"class":119},[33,121558,121374],{"class":119},[33,121560,121561],{"class":119}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,121563,121564],{"class":35,"line":134},[33,121565,121566],{"class":60},"# 运行脚本\n",[33,121568,121569,121571],{"class":35,"line":156},[33,121570,25829],{"class":43},[33,121572,121561],{"class":119},[14,121574,121575],{},[2918,121576],{"alt":28,"src":121577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,121579,121580],{},"正在安装中：",[14,121582,121583],{},[2918,121584],{"alt":28,"src":121585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,121587,121588],{},"输入accept接受即可",[14,121590,121591],{},[2918,121592],{"alt":28,"src":121593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,121595,121596],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,121598,121599],{},[2918,121600],{"alt":28,"src":121601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,121603,121604],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,121606,121607],{},[2918,121608],{"alt":28,"src":121609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[574,121611,121612],{"start":57},[564,121613,121614],{},"配置环境",[14,121616,121617],{},"根据上方确认一下路径，比如我上面红色框起来的为",[23,121619,121621],{"className":119776,"code":121620,"language":119778,"meta":28,"style":28},"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",[30,121622,121623,121639,121654],{"__ignoreMap":28},[33,121624,121625,121628,121631,121634,121637],{"class":35,"line":36},[33,121626,121627],{"class":43},"Please",[33,121629,121630],{"class":119}," make",[33,121632,121633],{"class":119}," sure",[33,121635,121636],{"class":119}," that",[33,121638,4085],{"class":47},[33,121640,121641,121643,121646,121649,121652],{"class":35,"line":51},[33,121642,53524],{"class":43},[33,121644,121645],{"class":119},"   PATH",[33,121647,121648],{"class":119}," includes",[33,121650,121651],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[33,121653,4085],{"class":47},[33,121655,121656,121658,121661,121663,121666,121669,121671,121674,121677,121680,121683,121685,121688,121690],{"class":35,"line":57},[33,121657,53524],{"class":43},[33,121659,121660],{"class":119},"   LD_LIBRARY_PATH",[33,121662,121648],{"class":119},[33,121664,121665],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[33,121667,121668],{"class":119}," or,",[33,121670,6600],{"class":119},[33,121672,121673],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[33,121675,121676],{"class":119}," to",[33,121678,121679],{"class":119}," \u002Fetc\u002Fld.so.conf",[33,121681,121682],{"class":119}," and",[33,121684,28483],{"class":119},[33,121686,121687],{"class":119}," ldconfig",[33,121689,65857],{"class":119},[33,121691,121692],{"class":119}," root\n",[14,121694,121695],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[23,121697,121699],{"className":119776,"code":121698,"language":119778,"meta":28,"style":28},"which nvcc\n",[30,121700,121701],{"__ignoreMap":28},[33,121702,121703,121706],{"class":35,"line":36},[33,121704,121705],{"class":76},"which",[33,121707,121708],{"class":119}," nvcc\n",[14,121710,121711],{},[2918,121712],{"alt":28,"src":121713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,121715,121716],{},"所以我进行以下操作：",[23,121718,121720],{"className":119776,"code":121719,"language":119778,"meta":28,"style":28},"sudo vim ~\u002F.bashrc\n",[30,121721,121722],{"__ignoreMap":28},[33,121723,121724,121726,121728],{"class":35,"line":36},[33,121725,25829],{"class":43},[33,121727,119836],{"class":119},[33,121729,121730],{"class":119}," ~\u002F.bashrc\n",[14,121732,121733],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[23,121735,121737],{"className":119776,"code":121736,"language":119778,"meta":28,"style":28},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[30,121738,121739,121751],{"__ignoreMap":28},[33,121740,121741,121743,121746,121748],{"class":35,"line":36},[33,121742,26295],{"class":39},[33,121744,121745],{"class":47}," PATH",[33,121747,73],{"class":39},[33,121749,121750],{"class":47},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[33,121752,121753,121755,121758,121760],{"class":35,"line":51},[33,121754,26295],{"class":39},[33,121756,121757],{"class":47}," LD_LIBRARY_PATH",[33,121759,73],{"class":39},[33,121761,121762],{"class":47},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,121764,121765],{},[2918,121766],{"alt":28,"src":121767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[23,121769,121771],{"className":119776,"code":121770,"language":119778,"meta":28,"style":28},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[30,121772,121773,121778,121784,121789],{"__ignoreMap":28},[33,121774,121775],{"class":35,"line":36},[33,121776,121777],{"class":60},"# 刷新当前终端的环境变量\n",[33,121779,121780,121782],{"class":35,"line":51},[33,121781,102146],{"class":76},[33,121783,121730],{"class":119},[33,121785,121786],{"class":35,"line":57},[33,121787,121788],{"class":60},"# 验证CUDA是否安装成功\n",[33,121790,121791,121794],{"class":35,"line":64},[33,121792,121793],{"class":43},"nvcc",[33,121795,121796],{"class":76}," -V\n",[14,121798,121799],{},"出现下图这种则安装成功。",[14,121801,121802],{},[2918,121803],{"alt":28,"src":121804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[1599,121806,121808],{"id":121807},"_354-安装cudnn","3.5.4 安装cuDNN",[574,121810,121811],{},[564,121812,121813],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,121815,121816,121817,121822],{},"前往 NVIDIA cuDNN 下载页面：",[126,121818,121821],{"href":121819,"rel":121820},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25117],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,121824,121825],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,121827,121828],{},[2918,121829],{"alt":28,"src":121830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,121832,121833],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,121835,121836],{},[2918,121837],{"alt":28,"src":121838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,121840,121841],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,121843,121844],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,121846,121847],{},[480,121848,121849],{},"我这里选择所有Linux X86_64最通用的办法：",[14,121851,121852],{},"下载好的：",[14,121854,121855],{},[2918,121856],{"alt":28,"src":121857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[574,121859,121860],{"start":51},[564,121861,121862],{},"安装cuDNN",[14,121864,121865],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,121867,121868],{},[2918,121869],{"alt":28,"src":121870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,121872,121873],{},"解压文件，并复制到对应位置完成安装",[23,121875,121877],{"className":119776,"code":121876,"language":119778,"meta":28,"style":28},"# 解压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",[30,121878,121879,121884,121895,121900,121907,121912,121928,121942,121947,121958,121967,121971,121987],{"__ignoreMap":28},[33,121880,121881],{"class":35,"line":36},[33,121882,121883],{"class":60},"# 解压cuDNN文件\n",[33,121885,121886,121889,121892],{"class":35,"line":51},[33,121887,121888],{"class":43},"tar",[33,121890,121891],{"class":76}," -xvf",[33,121893,121894],{"class":119}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[33,121896,121897],{"class":35,"line":57},[33,121898,121899],{"class":60},"# cd进文件夹\n",[33,121901,121902,121904],{"class":35,"line":64},[33,121903,102529],{"class":76},[33,121905,121906],{"class":119}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[33,121908,121909],{"class":35,"line":83},[33,121910,121911],{"class":60},"# 复制cuDNN文件到CUDA目录\n",[33,121913,121914,121916,121918,121921,121923,121926],{"class":35,"line":89},[33,121915,25829],{"class":43},[33,121917,29114],{"class":119},[33,121919,121920],{"class":119}," include\u002Fcudnn",[33,121922,2057],{"class":76},[33,121924,121925],{"class":119},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[33,121927,4085],{"class":47},[33,121929,121930,121932,121934,121937,121939],{"class":35,"line":98},[33,121931,25829],{"class":43},[33,121933,29114],{"class":119},[33,121935,121936],{"class":119}," lib\u002Flibcudnn",[33,121938,2057],{"class":76},[33,121940,121941],{"class":119},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[33,121943,121944],{"class":35,"line":110},[33,121945,121946],{"class":60},"# 对比一下有没有缺文件\n",[33,121948,121949,121951,121954,121956],{"class":35,"line":134},[33,121950,28014],{"class":43},[33,121952,121953],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[33,121955,2057],{"class":76},[33,121957,4085],{"class":47},[33,121959,121960,121962,121965],{"class":35,"line":156},[33,121961,28014],{"class":43},[33,121963,121964],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[33,121966,120501],{"class":76},[33,121968,121969],{"class":35,"line":163},[33,121970,121550],{"class":60},[33,121972,121973,121975,121977,121980,121982,121984],{"class":35,"line":169},[33,121974,25829],{"class":43},[33,121976,25832],{"class":119},[33,121978,121979],{"class":119}," a+r",[33,121981,121953],{"class":119},[33,121983,2057],{"class":76},[33,121985,121986],{"class":47},"   \n",[33,121988,121989,121991,121993,121995,121997],{"class":35,"line":175},[33,121990,25829],{"class":43},[33,121992,25832],{"class":119},[33,121994,121979],{"class":119},[33,121996,121964],{"class":119},[33,121998,120501],{"class":76},[574,122000,122001],{"start":57},[564,122002,122003],{},"检查是否安装成功",[23,122005,122007],{"className":119776,"code":122006,"language":119778,"meta":28,"style":28},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[30,122008,122009,122014],{"__ignoreMap":28},[33,122010,122011],{"class":35,"line":36},[33,122012,122013],{"class":60},"# 检查cuDNN版本命令\n",[33,122015,122016,122019,122022,122024,122026,122029,122032],{"class":35,"line":51},[33,122017,122018],{"class":43},"cat",[33,122020,122021],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[33,122023,26362],{"class":39},[33,122025,31489],{"class":43},[33,122027,122028],{"class":119}," CUDNN_MAJOR",[33,122030,122031],{"class":76}," -A",[33,122033,48976],{"class":76},[14,122035,122036],{},"出现下图这样的就是安装成功了",[14,122038,122039],{},[2918,122040],{"alt":28,"src":122041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[574,122043,122044],{"start":64},[564,122045,122046],{},"软链接(一般不需要)",[23,122048,122050],{"className":119776,"code":122049,"language":119778,"meta":28,"style":28},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[30,122051,122052,122057],{"__ignoreMap":28},[33,122053,122054],{"class":35,"line":36},[33,122055,122056],{"class":60},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[33,122058,122059,122061],{"class":35,"line":51},[33,122060,25829],{"class":43},[33,122062,122063],{"class":119}," ldconfig\n",[14,122065,122066],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[23,122068,122073],{"className":122069,"code":122070,"language":122071,"meta":122072,"style":28},"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",[30,122074,122075,122080,122085,122090,122095,122100,122105],{"__ignoreMap":28},[33,122076,122077],{"class":35,"line":36},[33,122078,122079],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[33,122081,122082],{"class":35,"line":51},[33,122083,122084],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[33,122086,122087],{"class":35,"line":57},[33,122088,122089],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[33,122091,122092],{"class":35,"line":64},[33,122093,122094],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[33,122096,122097],{"class":35,"line":83},[33,122098,122099],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[33,122101,122102],{"class":35,"line":89},[33,122103,122104],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[33,122106,122107],{"class":35,"line":98},[33,122108,122109],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,122111,122112],{},"运行下方的命令",[23,122114,122116],{"className":119776,"code":122115,"language":119778,"meta":28,"style":28},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[30,122117,122118,122123,122130,122135],{"__ignoreMap":28},[33,122119,122120],{"class":35,"line":36},[33,122121,122122],{"class":60},"# cd进入CUDA路径\n",[33,122124,122125,122127],{"class":35,"line":51},[33,122126,102529],{"class":76},[33,122128,122129],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[33,122131,122132],{"class":35,"line":57},[33,122133,122134],{"class":60}," # 查看本路径下的需要软链接的文件名\n",[33,122136,122137],{"class":35,"line":64},[33,122138,122139],{"class":43}," ls\n",[14,122141,122142],{},[2918,122143],{"alt":28,"src":122144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,122146,122147,122148,19661,122151,19661,122154,122157],{},"如上图，我需要将",[30,122149,122150],{},"libcudnn_xxx_xxxxx.so.8.9.7",[30,122152,122153],{},"libcudnn_xxx_xxxxx.so.8",[30,122155,122156],{},"libcudnn_xxx_xxxxx.so","软链接",[23,122159,122161],{"className":119776,"code":122160,"language":119778,"meta":28,"style":28},"# 创建符号链接。对于每个 .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",[30,122162,122163,122168,122184,122198,122212,122226,122240,122254,122268,122273,122279,122284],{"__ignoreMap":28},[33,122164,122165],{"class":35,"line":36},[33,122166,122167],{"class":60},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[33,122169,122170,122172,122175,122178,122181],{"class":35,"line":51},[33,122171,25829],{"class":43},[33,122173,122174],{"class":119}," ln",[33,122176,122177],{"class":76}," -sf",[33,122179,122180],{"class":119}," libcudnn_cnn_train.so.8.9.7",[33,122182,122183],{"class":119}," libcudnn_cnn_train.so.8\n",[33,122185,122186,122188,122190,122192,122195],{"class":35,"line":57},[33,122187,25829],{"class":43},[33,122189,122174],{"class":119},[33,122191,122177],{"class":76},[33,122193,122194],{"class":119}," libcudnn_adv_infer.so.8.9.7",[33,122196,122197],{"class":119}," libcudnn_adv_infer.so.8\n",[33,122199,122200,122202,122204,122206,122209],{"class":35,"line":64},[33,122201,25829],{"class":43},[33,122203,122174],{"class":119},[33,122205,122177],{"class":76},[33,122207,122208],{"class":119}," libcudnn_adv_train.so.8.9.7",[33,122210,122211],{"class":119}," libcudnn_adv_train.so.8\n",[33,122213,122214,122216,122218,122220,122223],{"class":35,"line":83},[33,122215,25829],{"class":43},[33,122217,122174],{"class":119},[33,122219,122177],{"class":76},[33,122221,122222],{"class":119}," libcudnn_cnn_infer.so.8.9.7",[33,122224,122225],{"class":119}," libcudnn_cnn_infer.so.8\n",[33,122227,122228,122230,122232,122234,122237],{"class":35,"line":89},[33,122229,25829],{"class":43},[33,122231,122174],{"class":119},[33,122233,122177],{"class":76},[33,122235,122236],{"class":119}," libcudnn.so.8.9.7",[33,122238,122239],{"class":119}," libcudnn.so.8\n",[33,122241,122242,122244,122246,122248,122251],{"class":35,"line":98},[33,122243,25829],{"class":43},[33,122245,122174],{"class":119},[33,122247,122177],{"class":76},[33,122249,122250],{"class":119}," libcudnn_ops_infer.so.8.9.7",[33,122252,122253],{"class":119}," libcudnn_ops_infer.so.8\n",[33,122255,122256,122258,122260,122262,122265],{"class":35,"line":110},[33,122257,25829],{"class":43},[33,122259,122174],{"class":119},[33,122261,122177],{"class":76},[33,122263,122264],{"class":119}," libcudnn_ops_train.so.8.9.7",[33,122266,122267],{"class":119}," libcudnn_ops_train.so.8\n",[33,122269,122270],{"class":35,"line":134},[33,122271,122272],{"class":60},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[33,122274,122275,122277],{"class":35,"line":156},[33,122276,25829],{"class":43},[33,122278,122063],{"class":119},[33,122280,122281],{"class":35,"line":163},[33,122282,122283],{"class":60},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[33,122285,122286,122288,122291,122294,122296,122299],{"class":35,"line":169},[33,122287,28014],{"class":43},[33,122289,122290],{"class":76}," -l",[33,122292,122293],{"class":119}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[33,122295,2057],{"class":76},[33,122297,122298],{"class":119},".so",[33,122300,120501],{"class":76},[1599,122302,122304],{"id":122303},"_355-常见问题","3.5.5 常见问题",[574,122306,122307],{},[564,122308,122309],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[23,122311,122313],{"className":119776,"code":122312,"language":119778,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[30,122314,122315],{"__ignoreMap":28},[33,122316,122317,122319,122321],{"class":35,"line":36},[33,122318,25829],{"class":43},[33,122320,119836],{"class":119},[33,122322,122323],{"class":119}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,122325,122326],{},"blacklist-nouveau.conf文件内容如下：",[23,122328,122330],{"className":119776,"code":122329,"language":119778,"meta":28,"style":28},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[30,122331,122332,122340,122347,122359,122369],{"__ignoreMap":28},[33,122333,122334,122337],{"class":35,"line":36},[33,122335,122336],{"class":43},"blacklist",[33,122338,122339],{"class":119}," nouveau\n",[33,122341,122342,122344],{"class":35,"line":51},[33,122343,122336],{"class":43},[33,122345,122346],{"class":119}," lbm-nouveau\n",[33,122348,122349,122351,122354,122357],{"class":35,"line":57},[33,122350,117183],{"class":43},[33,122352,122353],{"class":119}," nouveau",[33,122355,122356],{"class":119}," modeset=",[33,122358,4493],{"class":76},[33,122360,122361,122364,122366],{"class":35,"line":64},[33,122362,122363],{"class":76},"alias",[33,122365,122353],{"class":119},[33,122367,122368],{"class":119}," off\n",[33,122370,122371,122373,122376],{"class":35,"line":83},[33,122372,122363],{"class":76},[33,122374,122375],{"class":119}," lbm-nouveau",[33,122377,122368],{"class":119},[14,122379,122380],{},"接着运行下方命令",[23,122382,122384],{"className":119776,"code":122383,"language":119778,"meta":28,"style":28},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[30,122385,122386,122396,122401],{"__ignoreMap":28},[33,122387,122388,122390,122393],{"class":35,"line":36},[33,122389,25829],{"class":43},[33,122391,122392],{"class":119}," update-initramfs",[33,122394,122395],{"class":76}," -u\n",[33,122397,122398],{"class":35,"line":51},[33,122399,122400],{"class":43},"或者\n",[33,122402,122403,122405,122408],{"class":35,"line":57},[33,122404,25829],{"class":43},[33,122406,122407],{"class":119}," dracut",[33,122409,122410],{"class":76}," --force\n",[14,122412,122413],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[23,122415,122417],{"className":119776,"code":122416,"language":119778,"meta":28,"style":28},"lsmod | grep nouveau\n",[30,122418,122419],{"__ignoreMap":28},[33,122420,122421,122424,122426,122428],{"class":35,"line":36},[33,122422,122423],{"class":43},"lsmod",[33,122425,26362],{"class":39},[33,122427,31489],{"class":43},[33,122429,122339],{"class":119},[574,122431,122432],{"start":51},[564,122433,122434],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[23,122436,122438],{"className":119776,"code":122437,"language":119778,"meta":28,"style":28},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[30,122439,122440],{"__ignoreMap":28},[33,122441,122442,122444,122446],{"class":35,"line":36},[33,122443,25829],{"class":43},[33,122445,119836],{"class":119},[33,122447,122448],{"class":119}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,122450,122451],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[23,122453,122455],{"className":119776,"code":122454,"language":119778,"meta":28,"style":28},"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",[30,122456,122457,122465,122473,122481,122488,122496,122506,122514],{"__ignoreMap":28},[33,122458,122459,122462],{"class":35,"line":36},[33,122460,122461],{"class":43},"Section",[33,122463,122464],{"class":119}," \"OutputClass\"\n",[33,122466,122467,122470],{"class":35,"line":51},[33,122468,122469],{"class":43},"   Identifier",[33,122471,122472],{"class":119}," \"nvidia\"\n",[33,122474,122475,122478],{"class":35,"line":57},[33,122476,122477],{"class":43},"   MatchDriver",[33,122479,122480],{"class":119}," \"nvidia-drm\"\n",[33,122482,122483,122486],{"class":35,"line":64},[33,122484,122485],{"class":43},"   Driver",[33,122487,122472],{"class":119},[33,122489,122490,122493],{"class":35,"line":83},[33,122491,122492],{"class":43},"   Option",[33,122494,122495],{"class":119}," \"AllowEmptyInitialConfiguration\"\n",[33,122497,122498,122500,122503],{"class":35,"line":89},[33,122499,122492],{"class":43},[33,122501,122502],{"class":119}," \"PrimaryGPU\"",[33,122504,122505],{"class":119}," \"yes\"\n",[33,122507,122508,122511],{"class":35,"line":98},[33,122509,122510],{"class":43},"   ModulePath",[33,122512,122513],{"class":119}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[33,122515,122516],{"class":35,"line":110},[33,122517,122518],{"class":43},"EndSection\n",[574,122520,122521],{"start":57},[564,122522,122523],{},"安装N卡驱动提示错误",[23,122525,122527],{"className":122069,"code":122526,"language":122071,"meta":122072,"style":28},"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",[30,122528,122529],{"__ignoreMap":28},[33,122530,122531],{"class":35,"line":36},[33,122532,122526],{},[574,122534,122535],{},[564,122536,122537],{},"检查当前运行的内核版本：",[14,122539,122540],{},"运行以下命令以查看你当前正在使用的内核版本：",[23,122542,122544],{"className":118549,"code":122543,"language":118551,"meta":28,"style":28},"uname -r\n",[30,122545,122546],{"__ignoreMap":28},[33,122547,122548,122550],{"class":35,"line":36},[33,122549,71457],{"class":43},[33,122551,122552],{"class":76}," -r\n",[574,122554,122555],{"start":51},[564,122556,122557],{},"安装内核开发文件：",[14,122559,122560,122561,122564],{},"确保你已经安装了与当前内核版本相匹配的 ",[30,122562,122563],{},"kernel-devel"," 包。运行以下命令来安装：",[23,122566,122568],{"className":118549,"code":122567,"language":118551,"meta":28,"style":28},"sudo dnf install kernel-devel-$(uname -r)\n",[30,122569,122570],{"__ignoreMap":28},[33,122571,122572,122574,122576,122578,122581,122583,122585,122587],{"class":35,"line":36},[33,122573,25829],{"class":43},[33,122575,27568],{"class":119},[33,122577,25086],{"class":119},[33,122579,122580],{"class":119}," kernel-devel-",[33,122582,26352],{"class":47},[33,122584,71457],{"class":43},[33,122586,120892],{"class":76},[33,122588,884],{"class":47},[14,122590,122591],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[574,122593,122594],{"start":57},[564,122595,122596],{},"安装内核源代码（如果需要）：",[14,122598,122599],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[23,122601,122603],{"className":118549,"code":122602,"language":118551,"meta":28,"style":28},"sudo dnf install kernel-headers kernel-source\n",[30,122604,122605],{"__ignoreMap":28},[33,122606,122607,122609,122611,122613,122616],{"class":35,"line":36},[33,122608,25829],{"class":43},[33,122610,27568],{"class":119},[33,122612,25086],{"class":119},[33,122614,122615],{"class":119}," kernel-headers",[33,122617,122618],{"class":119}," kernel-source\n",[574,122620,122621],{"start":64},[564,122622,122623],{},"检查安装：",[14,122625,122626,122627,122630],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[30,122628,122629],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[23,122632,122634],{"className":118549,"code":122633,"language":118551,"meta":28,"style":28},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[30,122635,122636],{"__ignoreMap":28},[33,122637,122638,122640],{"class":35,"line":36},[33,122639,28014],{"class":43},[33,122641,122642],{"class":119}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,122644,122645,122646,122649],{},"如果仍然遇到问题，可以通过 ",[30,122647,122648],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1544,122651,122652],{},"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":28,"searchDepth":51,"depth":51,"links":122654},[122655,122659,122669,122673,122674],{"id":119752,"depth":51,"text":119753,"children":122656},[122657,122658],{"id":119762,"depth":57,"text":119763},{"id":119772,"depth":57,"text":119773},{"id":119972,"depth":51,"text":119973,"children":122660},[122661,122662,122663,122664,122665,122666,122667,122668],{"id":119976,"depth":57,"text":119977},{"id":120046,"depth":57,"text":120047},{"id":120135,"depth":57,"text":120136},{"id":120380,"depth":57,"text":120381},{"id":120450,"depth":57,"text":120451},{"id":120517,"depth":57,"text":120518},{"id":120552,"depth":57,"text":120553},{"id":120607,"depth":57,"text":120608},{"id":120658,"depth":51,"text":120659,"children":122670},[122671,122672],{"id":120662,"depth":57,"text":120663},{"id":120742,"depth":57,"text":120743},{"id":120928,"depth":51,"text":120929},{"id":121101,"depth":51,"text":121102,"children":122675},[122676,122677,122678,122679,122680],{"id":121105,"depth":57,"text":121106},{"id":121146,"depth":57,"text":121147},{"id":121433,"depth":57,"text":121434},{"id":121807,"depth":57,"text":121808},{"id":122303,"depth":57,"text":122304},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119744,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122687,"title":122688,"body":122689,"description":24628,"extension":1557,"meta":123029,"navigation":159,"path":123030,"seo":123031,"stem":123032,"__hash__":123033},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122690,"toc":123027},[122691,122694,122699,122702,122948,122953,122956,122992,122995,123024],[10,122692,122688],{"id":122693},"_4-命令教程长期积累",[574,122695,122696],{},[564,122697,122698],{},"大多数命令",[14,122700,122701],{},"常用 Linux 命令速查：",[23,122703,122705],{"className":118549,"code":122704,"language":118551,"meta":28,"style":28},"# 文件与目录\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",[30,122706,122707,122712,122719,122726,122734,122741,122748,122756,122764,122771,122778,122786,122790,122795,122802,122810,122817,122821,122826,122833,122841,122849,122857,122865,122869,122874,122882,122889,122896,122904,122912,122916,122921,122930,122939],{"__ignoreMap":28},[33,122708,122709],{"class":35,"line":36},[33,122710,122711],{"class":60},"# 文件与目录\n",[33,122713,122714,122716],{"class":35,"line":51},[33,122715,28014],{"class":43},[33,122717,122718],{"class":60},"        # 列出目录内容\n",[33,122720,122721,122723],{"class":35,"line":57},[33,122722,102529],{"class":76},[33,122724,122725],{"class":60},"        # 切换目录\n",[33,122727,122728,122731],{"class":35,"line":64},[33,122729,122730],{"class":76},"pwd",[33,122732,122733],{"class":60},"       # 显示当前路径\n",[33,122735,122736,122738],{"class":35,"line":83},[33,122737,102519],{"class":43},[33,122739,122740],{"class":60},"     # 创建目录\n",[33,122742,122743,122745],{"class":35,"line":89},[33,122744,26575],{"class":43},[33,122746,122747],{"class":60},"        # 删除文件或目录\n",[33,122749,122750,122753],{"class":35,"line":98},[33,122751,122752],{"class":43},"cp",[33,122754,122755],{"class":60},"        # 复制文件或目录\n",[33,122757,122758,122761],{"class":35,"line":110},[33,122759,122760],{"class":43},"mv",[33,122762,122763],{"class":60},"        # 移动\u002F重命名文件或目录\n",[33,122765,122766,122768],{"class":35,"line":134},[33,122767,102536],{"class":43},[33,122769,122770],{"class":60},"     # 创建空文件\n",[33,122772,122773,122775],{"class":35,"line":156},[33,122774,122018],{"class":43},[33,122776,122777],{"class":60},"       # 查看文件内容\n",[33,122779,122780,122783],{"class":35,"line":163},[33,122781,122782],{"class":43},"head\u002Ftail",[33,122784,122785],{"class":60}," # 查看文件头部\u002F尾部\n",[33,122787,122788],{"class":35,"line":169},[33,122789,160],{"emptyLinePlaceholder":159},[33,122791,122792],{"class":35,"line":175},[33,122793,122794],{"class":60},"# 权限管理\n",[33,122796,122797,122799],{"class":35,"line":181},[33,122798,25864],{"class":43},[33,122800,122801],{"class":60},"     # 修改文件权限\n",[33,122803,122804,122807],{"class":35,"line":196},[33,122805,122806],{"class":43},"chown",[33,122808,122809],{"class":60},"     # 修改文件所有者\n",[33,122811,122812,122814],{"class":35,"line":213},[33,122813,25829],{"class":43},[33,122815,122816],{"class":60},"      # 以管理员身份执行\n",[33,122818,122819],{"class":35,"line":228},[33,122820,160],{"emptyLinePlaceholder":159},[33,122822,122823],{"class":35,"line":1345},[33,122824,122825],{"class":60},"# 系统信息\n",[33,122827,122828,122830],{"class":35,"line":1350},[33,122829,71457],{"class":43},[33,122831,122832],{"class":60},"     # 系统信息\n",[33,122834,122835,122838],{"class":35,"line":1359},[33,122836,122837],{"class":43},"df",[33,122839,122840],{"class":60},"        # 磁盘使用情况\n",[33,122842,122843,122846],{"class":35,"line":1364},[33,122844,122845],{"class":43},"free",[33,122847,122848],{"class":60},"      # 内存使用情况\n",[33,122850,122851,122854],{"class":35,"line":1370},[33,122852,122853],{"class":43},"top\u002Fhtop",[33,122855,122856],{"class":60},"  # 进程监控\n",[33,122858,122859,122862],{"class":35,"line":1425},[33,122860,122861],{"class":43},"ps",[33,122863,122864],{"class":60},"        # 查看进程\n",[33,122866,122867],{"class":35,"line":1438},[33,122868,160],{"emptyLinePlaceholder":159},[33,122870,122871],{"class":35,"line":1451},[33,122872,122873],{"class":60},"# 网络\n",[33,122875,122876,122879],{"class":35,"line":1457},[33,122877,122878],{"class":43},"ping",[33,122880,122881],{"class":60},"      # 测试网络连通性\n",[33,122883,122884,122886],{"class":35,"line":1466},[33,122885,28102],{"class":43},[33,122887,122888],{"class":60},"      # 发送 HTTP 请求\n",[33,122890,122891,122893],{"class":35,"line":1471},[33,122892,121542],{"class":43},[33,122894,122895],{"class":60},"      # 下载文件\n",[33,122897,122898,122901],{"class":35,"line":1477},[33,122899,122900],{"class":43},"ssh",[33,122902,122903],{"class":60},"       # 远程登录\n",[33,122905,122906,122909],{"class":35,"line":1504},[33,122907,122908],{"class":43},"scp",[33,122910,122911],{"class":60},"       # 远程文件传输\n",[33,122913,122914],{"class":35,"line":1509},[33,122915,160],{"emptyLinePlaceholder":159},[33,122917,122918],{"class":35,"line":1525},[33,122919,122920],{"class":60},"# 包管理（Debian\u002FUbuntu）\n",[33,122922,122923,122925,122927],{"class":35,"line":1535},[33,122924,118621],{"class":43},[33,122926,118600],{"class":119},[33,122928,122929],{"class":60},"   # 更新软件源\n",[33,122931,122932,122934,122936],{"class":35,"line":1540},[33,122933,118621],{"class":43},[33,122935,25086],{"class":119},[33,122937,122938],{"class":60},"  # 安装软件包\n",[33,122940,122941,122943,122945],{"class":35,"line":4027},[33,122942,118621],{"class":43},[33,122944,27332],{"class":119},[33,122946,122947],{"class":60},"   # 卸载软件包\n",[574,122949,122950],{"start":51},[564,122951,122952],{},"KDE Dolphin 以root打开",[14,122954,122955],{},"kde5",[23,122957,122959],{"className":118549,"code":122958,"language":118551,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[30,122960,122961],{"__ignoreMap":28},[33,122962,122963,122966,122969,122972,122974,122976,122979,122982,122984,122987,122989],{"class":35,"line":36},[33,122964,122965],{"class":43},"pkexec",[33,122967,122968],{"class":119}," env",[33,122970,122971],{"class":119}," DISPLAY=",[33,122973,29396],{"class":47},[33,122975,29454],{"class":119},[33,122977,122978],{"class":47},"$XAUTHORITY ",[33,122980,122981],{"class":119},"KDE_SESSION_VERSION=",[33,122983,722],{"class":76},[33,122985,122986],{"class":119}," KDE_FULL_SESSION=",[33,122988,2820],{"class":76},[33,122990,122991],{"class":119}," dolphin\n",[14,122993,122994],{},"kde6",[23,122996,122998],{"className":118549,"code":122997,"language":118551,"meta":28,"style":28},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[30,122999,123000],{"__ignoreMap":28},[33,123001,123002,123004,123006,123008,123010,123012,123014,123016,123018,123020,123022],{"class":35,"line":36},[33,123003,122965],{"class":43},[33,123005,122968],{"class":119},[33,123007,122971],{"class":119},[33,123009,29396],{"class":47},[33,123011,29454],{"class":119},[33,123013,122978],{"class":47},[33,123015,122981],{"class":119},[33,123017,727],{"class":76},[33,123019,122986],{"class":119},[33,123021,2820],{"class":76},[33,123023,122991],{"class":119},[1544,123025,123026],{},"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":28,"searchDepth":51,"depth":51,"links":123028},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122688,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123035,"title":123036,"body":123037,"description":24628,"extension":1557,"meta":123051,"navigation":159,"path":123052,"seo":123053,"stem":123054,"__hash__":123055},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123038,"toc":123049},[123039,123042],[10,123040,123036],{"id":123041},"_5-各种环境配置",[14,123043,123044],{},[126,123045,123048],{"href":123046,"rel":123047},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25117],"电控组环境搭建大全",{"title":28,"searchDepth":51,"depth":51,"links":123050},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123036,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123057,"title":123058,"body":123059,"description":24628,"extension":1557,"meta":123407,"navigation":159,"path":123408,"seo":123409,"stem":123410,"__hash__":123411},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123060,"toc":123399},[123061,123064,123068,123072,123076,123081,123088,123092,123385,123389,123396],[10,123062,123058],{"id":123063},"_6-拓展功能",[18,123065,123067],{"id":123066},"_61-wine","6.1 Wine",[18,123069,123071],{"id":123070},"_62-android","6.2 Android",[1599,123073,123075],{"id":123074},"_621-i卡a卡","6.2.1 I卡、A卡",[574,123077,123078],{},[564,123079,123080],{},"Wayland-Waydroid(体验超级好)",[14,123082,123083,123084],{},"Waydroid 官网与安装指南：",[126,123085,123086],{"href":123086,"rel":123087},"https:\u002F\u002Fwaydro.id\u002F",[25117],[1599,123089,123091],{"id":123090},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[574,123093,123094],{},[564,123095,123096,123097,123099,123100,123104,123106,123109,123114,123311],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54969,123098],{},"BlissOS 官网下载：",[126,123101,123102],{"href":123102,"rel":123103},"https:\u002F\u002Fblissos.org\u002F",[25117],[54969,123105],{},[2918,123107],{"alt":28,"src":123108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[574,123110,123111],{"start":57},[564,123112,123113],{},"比较推荐的配置",[23,123115,123117],{"className":118549,"code":123116,"language":118551,"meta":28,"style":28},"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",[30,123118,123119,123126,123136,123146,123156,123168,123178,123185,123195,123204,123213,123223,123233,123242,123252,123262,123274,123284,123293,123303],{"__ignoreMap":28},[33,123120,123121,123124],{"class":35,"line":36},[33,123122,123123],{"class":43},"qemu-system-x86_64",[33,123125,25931],{"class":76},[33,123127,123128,123131,123134],{"class":35,"line":51},[33,123129,123130],{"class":76},"        -M",[33,123132,123133],{"class":119}," q35,vmport=off",[33,123135,25931],{"class":76},[33,123137,123138,123141,123144],{"class":35,"line":57},[33,123139,123140],{"class":76},"        -accel",[33,123142,123143],{"class":119}," kvm",[33,123145,25931],{"class":76},[33,123147,123148,123151,123154],{"class":35,"line":64},[33,123149,123150],{"class":76},"        -cpu",[33,123152,123153],{"class":119}," qemu64,+sse3,+sse4.2",[33,123155,25931],{"class":76},[33,123157,123158,123161,123164,123166],{"class":35,"line":83},[33,123159,123160],{"class":76},"        -smp",[33,123162,123163],{"class":119}," 8,cores=",[33,123165,717],{"class":76},[33,123167,25931],{"class":76},[33,123169,123170,123173,123176],{"class":35,"line":89},[33,123171,123172],{"class":76},"        -m",[33,123174,123175],{"class":119}," 6G",[33,123177,25931],{"class":76},[33,123179,123180,123183],{"class":35,"line":98},[33,123181,123182],{"class":76},"        -usb",[33,123184,25931],{"class":76},[33,123186,123187,123190,123193],{"class":35,"line":110},[33,123188,123189],{"class":76},"        -device",[33,123191,123192],{"class":119}," virtio-tablet",[33,123194,25931],{"class":76},[33,123196,123197,123199,123202],{"class":35,"line":134},[33,123198,123189],{"class":76},[33,123200,123201],{"class":119}," virtio-keyboard",[33,123203,25931],{"class":76},[33,123205,123206,123208,123211],{"class":35,"line":156},[33,123207,123189],{"class":76},[33,123209,123210],{"class":119}," usb-tablet",[33,123212,25931],{"class":76},[33,123214,123215,123218,123221],{"class":35,"line":163},[33,123216,123217],{"class":76},"        -bios",[33,123219,123220],{"class":119}," OVMF-pure-efi64.fd",[33,123222,25931],{"class":76},[33,123224,123225,123228,123231],{"class":35,"line":169},[33,123226,123227],{"class":76},"        -net",[33,123229,123230],{"class":119}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[33,123232,25931],{"class":76},[33,123234,123235,123237,123240],{"class":35,"line":175},[33,123236,123227],{"class":76},[33,123238,123239],{"class":119}," nic,model=virtio",[33,123241,25931],{"class":76},[33,123243,123244,123247,123250],{"class":35,"line":181},[33,123245,123246],{"class":76},"        -audio",[33,123248,123249],{"class":119}," sdl,model=hda",[33,123251,25931],{"class":76},[33,123253,123254,123257,123260],{"class":35,"line":196},[33,123255,123256],{"class":76},"        -display",[33,123258,123259],{"class":119}," sdl,gl=on,show-cursor=on",[33,123261,25931],{"class":76},[33,123263,123264,123266,123269,123272],{"class":35,"line":213},[33,123265,123189],{"class":76},[33,123267,123268],{"class":119}," virtio-vga-gl,xres=1920,yres=",[33,123270,123271],{"class":76},"1080",[33,123273,25931],{"class":76},[33,123275,123276,123279,123282],{"class":35,"line":228},[33,123277,123278],{"class":76},"        -drive",[33,123280,123281],{"class":119}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[33,123283,25931],{"class":76},[33,123285,123286,123288,123291],{"class":35,"line":1345},[33,123287,123278],{"class":76},[33,123289,123290],{"class":119}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[33,123292,25931],{"class":76},[33,123294,123295,123298,123301],{"class":35,"line":1350},[33,123296,123297],{"class":76},"        -monitor",[33,123299,123300],{"class":119}," stdio",[33,123302,25931],{"class":76},[33,123304,123305,123308],{"class":35,"line":1359},[33,123306,123307],{"class":76},"        -serial",[33,123309,123310],{"class":119}," none\n",[574,123312,123313],{"start":83},[564,123314,123315,123316],{},"常用操作：",[574,123317,123318,123321,123377],{},[564,123319,123320],{},"全屏：Ctrl+Alt+F",[564,123322,123323,123324,123329],{},"adb调试",[574,123325,123326],{},[564,123327,123328],{},"使Linux与Android用ADB连接。",[23,123330,123332],{"className":118549,"code":123331,"language":118551,"meta":28,"style":28},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[30,123333,123334,123339,123350,123355,123367,123372],{"__ignoreMap":28},[33,123335,123336],{"class":35,"line":36},[33,123337,123338],{"class":60},"# 连接安卓\n",[33,123340,123341,123344,123347],{"class":35,"line":51},[33,123342,123343],{"class":43},"adb",[33,123345,123346],{"class":119}," connect",[33,123348,123349],{"class":76}," 127.0.0.1\n",[33,123351,123352],{"class":35,"line":57},[33,123353,123354],{"class":60},"# 打开shell\n",[33,123356,123357,123359,123361,123364],{"class":35,"line":64},[33,123358,123343],{"class":43},[33,123360,28136],{"class":76},[33,123362,123363],{"class":119}," 127.0.0.1:5555",[33,123365,123366],{"class":119}," shell\n",[33,123368,123369],{"class":35,"line":83},[33,123370,123371],{"class":60},"# 使用root权限\n",[33,123373,123374],{"class":35,"line":89},[33,123375,123376],{"class":43},"su\n",[564,123378,123379,123380],{},"中文输入法",[574,123381,123382],{},[564,123383,123384],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[18,123386,123388],{"id":123387},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,123390,123391,123392],{},"rEFInd 官网与文档：",[126,123393,123394],{"href":123394,"rel":123395},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25117],[1544,123397,123398],{},"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":28,"searchDepth":51,"depth":51,"links":123400},[123401,123402,123406],{"id":123066,"depth":51,"text":123067},{"id":123070,"depth":51,"text":123071,"children":123403},[123404,123405],{"id":123074,"depth":57,"text":123075},{"id":123090,"depth":57,"text":123091},{"id":123387,"depth":51,"text":123388},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123058,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123413,"title":123414,"body":123415,"description":24628,"extension":1557,"meta":126714,"navigation":159,"path":126715,"seo":126716,"stem":126717,"__hash__":126718},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123416,"toc":126688},[123417,123420,123424,123427,123434,123684,123687,123759,123762,123766,123770,123775,123778,123781,123784,123789,123792,123795,123798,123803,123806,123811,123814,123817,123822,123825,123830,123833,123837,123841,123844,123849,123852,123866,123869,123872,123881,123884,123893,123896,123899,123908,123911,123920,123923,123926,123935,123938,123941,123956,123959,123962,123971,123976,123979,123982,123991,123994,124003,124006,124015,124018,124027,124032,124035,124043,124048,124051,124060,124063,124071,124076,124079,124088,124091,124094,124098,124101,124106,124109,124114,124128,124133,124138,124149,124154,124160,124165,124180,124185,124188,124193,124198,124203,124211,124216,124223,124228,124239,124244,124247,124251,124254,124257,124262,124265,124284,124289,124292,124301,124306,124309,124331,124334,124364,124367,124372,124375,124389,124394,124413,124416,124419,124424,124436,124441,124446,124449,124454,124457,124472,124475,124480,124485,124489,124494,124534,124537,124541,124547,124553,124558,124561,124568,124573,124580,124583,124586,124593,124607,124610,124670,124673,124687,124699,124702,124705,124708,124772,124775,124778,124781,124801,124804,124809,124816,124820,124823,124827,124832,124837,124841,124844,124847,124889,124894,124897,124919,124934,124936,124941,124953,125013,125015,125017,125071,125073,125075,125081,125086,125089,125094,125098,125101,125163,125168,125171,125173,125177,125189,125271,125273,125275,125329,125335,125337,125341,125346,125348,125353,125357,125377,125412,125416,125419,125422,125425,125432,125435,125447,125450,125465,125468,125487,125535,125538,125555,125558,125572,125577,125580,125589,125604,125616,125654,125659,125668,125673,125678,125704,125713,125717,125721,125726,125729,125733,125737,125742,125745,125750,125753,125758,125761,125766,125769,125773,125778,125781,125786,125789,125793,125798,125801,125806,125809,125814,125817,125821,125826,125829,125834,125837,125842,125845,125849,125854,125857,125862,125865,125870,125873,125878,125881,125886,125889,125894,125897,125901,125906,125909,125914,125921,125925,125930,125933,125938,125941,125945,125950,125953,125956,125959,125962,125965,125969,125972,125982,125987,125992,126014,126019,126024,126031,126035,126040,126043,126046,126051,126054,126057,126060,126063,126066,126069,126072,126075,126078,126081,126084,126087,126092,126097,126102,126107,126112,126117,126122,126125,126129,126132,126136,126141,126146,126151,126156,126160,126166,126174,126179,126182,126187,126202,126205,126210,126244,126259,126262,126317,126343,126355,126358,126367,126370,126385,126390,126393,126399,126404,126407,126412,126415,126420,126425,126432,126435,126450,126453,126488,126493,126501,126539,126542,126545,126550,126553,126558,126569,126603,126608,126611,126620,126625,126631,126634,126639,126648,126653,126656,126659,126664,126672,126675,126680,126685],[10,123418,123414],{"id":123419},"_7-其他操作",[18,123421,123423],{"id":123422},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,123425,123426],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,123428,123429,123430,123433],{},"进入工控机的硬盘目录，进入",[30,123431,123432],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[23,123435,123439],{"className":123436,"code":123437,"language":123438,"meta":28,"style":28},"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",[30,123440,123441,123449,123460,123467,123474,123486,123493,123505,123516,123527,123534,123541,123548,123560,123572,123579,123591,123603,123610,123622,123634,123646,123657,123664,123675],{"__ignoreMap":28},[33,123442,123443,123446],{"class":35,"line":36},[33,123444,123445],{"class":52553},"network",[33,123447,123448],{"class":47},": \n",[33,123450,123451,123454,123456,123458],{"class":35,"line":51},[33,123452,123453],{"class":52553},"  version",[33,123455,52690],{"class":47},[33,123457,707],{"class":76},[33,123459,4085],{"class":47},[33,123461,123462,123465],{"class":35,"line":57},[33,123463,123464],{"class":52553},"  wifis",[33,123466,123448],{"class":47},[33,123468,123469,123472],{"class":35,"line":64},[33,123470,123471],{"class":52553},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[33,123473,123448],{"class":47},[33,123475,123476,123479,123481,123484],{"class":35,"line":83},[33,123477,123478],{"class":52553},"      renderer",[33,123480,52690],{"class":47},[33,123482,123483],{"class":119},"NetworkManager",[33,123485,4085],{"class":47},[33,123487,123488,123491],{"class":35,"line":89},[33,123489,123490],{"class":52553},"      match",[33,123492,123448],{"class":47},[33,123494,123495,123498,123500,123503],{"class":35,"line":98},[33,123496,123497],{"class":52553},"        name",[33,123499,52690],{"class":47},[33,123501,123502],{"class":119},"\"wlan0\"",[33,123504,4085],{"class":47},[33,123506,123507,123510,123512,123514],{"class":35,"line":110},[33,123508,123509],{"class":52553},"      dhcp4",[33,123511,52690],{"class":47},[33,123513,2820],{"class":76},[33,123515,4085],{"class":47},[33,123517,123518,123521,123523,123525],{"class":35,"line":134},[33,123519,123520],{"class":52553},"      dhcp6",[33,123522,52690],{"class":47},[33,123524,2820],{"class":76},[33,123526,4085],{"class":47},[33,123528,123529,123532],{"class":35,"line":156},[33,123530,123531],{"class":52553},"      access-points",[33,123533,123448],{"class":47},[33,123535,123536,123539],{"class":35,"line":163},[33,123537,123538],{"class":119},"        \"EMIS_Vinci_Robocon_5G\"",[33,123540,123448],{"class":47},[33,123542,123543,123546],{"class":35,"line":169},[33,123544,123545],{"class":52553},"          auth",[33,123547,123448],{"class":47},[33,123549,123550,123553,123555,123558],{"class":35,"line":175},[33,123551,123552],{"class":52553},"            key-management",[33,123554,52690],{"class":47},[33,123556,123557],{"class":119},"\"psk\"",[33,123559,4085],{"class":47},[33,123561,123562,123565,123567,123570],{"class":35,"line":181},[33,123563,123564],{"class":52553},"            password",[33,123566,52690],{"class":47},[33,123568,123569],{"class":119},"\"vinci666\"",[33,123571,4085],{"class":47},[33,123573,123574,123577],{"class":35,"line":196},[33,123575,123576],{"class":52553},"          networkmanager",[33,123578,123448],{"class":47},[33,123580,123581,123584,123586,123589],{"class":35,"line":213},[33,123582,123583],{"class":52553},"            uuid",[33,123585,52690],{"class":47},[33,123587,123588],{"class":119},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[33,123590,4085],{"class":47},[33,123592,123593,123596,123598,123601],{"class":35,"line":228},[33,123594,123595],{"class":52553},"            name",[33,123597,52690],{"class":47},[33,123599,123600],{"class":119},"\"EMIS_Vinci_Robocon_5G\"",[33,123602,4085],{"class":47},[33,123604,123605,123608],{"class":35,"line":1345},[33,123606,123607],{"class":52553},"            passthrough",[33,123609,123448],{"class":47},[33,123611,123612,123615,123617,123620],{"class":35,"line":1350},[33,123613,123614],{"class":52553},"              wifi-security.auth-alg",[33,123616,52690],{"class":47},[33,123618,123619],{"class":119},"\"open\"",[33,123621,4085],{"class":47},[33,123623,123624,123627,123629,123632],{"class":35,"line":1359},[33,123625,123626],{"class":52553},"              ipv6.addr-gen-mode",[33,123628,52690],{"class":47},[33,123630,123631],{"class":119},"\"default\"",[33,123633,4085],{"class":47},[33,123635,123636,123639,123641,123644],{"class":35,"line":1364},[33,123637,123638],{"class":52553},"              ipv6.ip6-privacy",[33,123640,52690],{"class":47},[33,123642,123643],{"class":119},"\"-1\"",[33,123645,4085],{"class":47},[33,123647,123648,123651,123653,123655],{"class":35,"line":1370},[33,123649,123650],{"class":52553},"              proxy._",[33,123652,52690],{"class":47},[33,123654,1520],{"class":119},[33,123656,4085],{"class":47},[33,123658,123659,123662],{"class":35,"line":1425},[33,123660,123661],{"class":52553},"      networkmanager",[33,123663,123448],{"class":47},[33,123665,123666,123669,123671,123673],{"class":35,"line":1438},[33,123667,123668],{"class":52553},"        uuid",[33,123670,52690],{"class":47},[33,123672,123588],{"class":119},[33,123674,4085],{"class":47},[33,123676,123677,123679,123681],{"class":35,"line":1451},[33,123678,123497],{"class":52553},[33,123680,52690],{"class":47},[33,123682,123683],{"class":119},"\"EMIS_Vinci_Robocon_5G\"\n",[14,123685,123686],{},"将其改为新wifi的名和密码：",[23,123688,123690],{"className":123436,"code":123689,"language":123438,"meta":28,"style":28},"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",[30,123691,123692,123698,123707,123713,123720,123729,123737,123743,123749],{"__ignoreMap":28},[33,123693,123694,123696],{"class":35,"line":36},[33,123695,123445],{"class":52553},[33,123697,5141],{"class":47},[33,123699,123700,123702,123704],{"class":35,"line":51},[33,123701,123453],{"class":52553},[33,123703,52690],{"class":47},[33,123705,123706],{"class":76},"2\n",[33,123708,123709,123711],{"class":35,"line":57},[33,123710,123464],{"class":52553},[33,123712,5141],{"class":47},[33,123714,123715,123718],{"class":35,"line":64},[33,123716,123717],{"class":52553},"    wlan0",[33,123719,5141],{"class":47},[33,123721,123722,123724,123726],{"class":35,"line":83},[33,123723,123509],{"class":52553},[33,123725,52690],{"class":47},[33,123727,123728],{"class":76},"true\n",[33,123730,123731,123733,123735],{"class":35,"line":89},[33,123732,123520],{"class":52553},[33,123734,52690],{"class":47},[33,123736,123728],{"class":76},[33,123738,123739,123741],{"class":35,"line":98},[33,123740,123531],{"class":52553},[33,123742,5141],{"class":47},[33,123744,123745,123747],{"class":35,"line":110},[33,123746,123538],{"class":119},[33,123748,5141],{"class":47},[33,123750,123751,123754,123756],{"class":35,"line":134},[33,123752,123753],{"class":52553},"          password",[33,123755,52690],{"class":47},[33,123757,123758],{"class":119},"\"vinci666\"\n",[14,123760,123761],{},"工控机开机即可连上网。",[18,123763,123765],{"id":123764},"_72-ssh远程开发","7.2 SSH远程开发",[1599,123767,123769],{"id":123768},"_721-环境准备","7.2.1 环境准备",[14,123771,123772],{},[480,123773,123774],{},"1.硬件准备",[14,123776,123777],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,123779,123780],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,123782,123783],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,123785,123786],{},[480,123787,123788],{},"2.设置固定IP",[14,123790,123791],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,123793,123794],{},"1.进入设置界面",[14,123796,123797],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,123799,123800],{},[2918,123801],{"alt":28,"src":123802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,123804,123805],{},"2.配置所连接的网络",[14,123807,123808],{},[2918,123809],{"alt":28,"src":123810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,123812,123813],{},"3.设置固定IP",[14,123815,123816],{},"查看当前IP地址。",[14,123818,123819],{},[2918,123820],{"alt":28,"src":123821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,123823,123824],{},"设置固定IP。",[14,123826,123827],{},[2918,123828],{"alt":28,"src":123829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,123831,123832],{},"至此，IP配置完毕。",[1599,123834,123836],{"id":123835},"_722-环境搭建","7.2.2 环境搭建",[14,123838,123839],{},[480,123840,27006],{},[14,123842,123843],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,123845,123846],{},[480,123847,123848],{},"实现",[14,123850,123851],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[574,123853,123854,123857,123860,123863],{},[564,123855,123856],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[564,123858,123859],{},"远程主机启动SSH服务；",[564,123861,123862],{},"本地主机登陆远程主机；",[564,123864,123865],{},"实现数据传输。",[14,123867,123868],{},"1.安装SSH客户端与服务端",[14,123870,123871],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[23,123873,123875],{"className":122069,"code":123874,"language":122071,"meta":122072,"style":28}," sudo apt install openssh-server\n",[30,123876,123877],{"__ignoreMap":28},[33,123878,123879],{"class":35,"line":36},[33,123880,123874],{},[14,123882,123883],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[23,123885,123887],{"className":122069,"code":123886,"language":122071,"meta":122072,"style":28},"sudo apt install openssh-client\n",[30,123888,123889],{"__ignoreMap":28},[33,123890,123891],{"class":35,"line":36},[33,123892,123886],{},[14,123894,123895],{},"2.远程主机启动SSH服务",[14,123897,123898],{},"远程主机启动 ssh 服务命令如下：",[23,123900,123902],{"className":122069,"code":123901,"language":122071,"meta":122072,"style":28},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[30,123903,123904],{"__ignoreMap":28},[33,123905,123906],{"class":35,"line":36},[33,123907,123901],{},[14,123909,123910],{},"启动后可使用如下命令查看服务是否正常运行：",[23,123912,123914],{"className":122069,"code":123913,"language":122071,"meta":122072,"style":28},"ps -e | grep ssh\n",[30,123915,123916],{"__ignoreMap":28},[33,123917,123918],{"class":35,"line":36},[33,123919,123913],{},[14,123921,123922],{},"如果启动成功，会包含 sshd 程序。",[14,123924,123925],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[23,123927,123929],{"className":122069,"code":123928,"language":122071,"meta":122072,"style":28},"sudo systemctl enable ssh\n",[30,123930,123931],{"__ignoreMap":28},[33,123932,123933],{"class":35,"line":36},[33,123934,123928],{},[14,123936,123937],{},"3.本地远程登录",[14,123939,123940],{},"登录远程主机可以调用如下命令:",[23,123942,123944],{"className":118549,"code":123943,"language":118551,"meta":28,"style":28},"ssh -X 用户名@ip地址\n",[30,123945,123946],{"__ignoreMap":28},[33,123947,123948,123950,123953],{"class":35,"line":36},[33,123949,122900],{"class":43},[33,123951,123952],{"class":76}," -X",[33,123954,123955],{"class":119}," 用户名@ip地址\n",[14,123957,123958],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,123960,123961],{},"如果退出，可以调用exit命令：",[23,123963,123965],{"className":122069,"code":123964,"language":122071,"meta":122072,"style":28},"exit\n",[30,123966,123967],{"__ignoreMap":28},[33,123968,123969],{"class":35,"line":36},[33,123970,123964],{},[14,123972,123973],{},[480,123974,123975],{},"4.实现数据传输",[14,123977,123978],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123980,123981],{},"上传文件指令格式如下：",[23,123983,123985],{"className":122069,"code":123984,"language":122071,"meta":122072,"style":28},"scp 本地文件路径 账号@ip:路径\n",[30,123986,123987],{"__ignoreMap":28},[33,123988,123989],{"class":35,"line":36},[33,123990,123984],{},[14,123992,123993],{},"上传文件夹指令格式如下：",[23,123995,123997],{"className":122069,"code":123996,"language":122071,"meta":122072,"style":28},"scp -r 本地文件夹路径 账号@ip:路径\n",[30,123998,123999],{"__ignoreMap":28},[33,124000,124001],{"class":35,"line":36},[33,124002,123996],{},[14,124004,124005],{},"下载文件指令格式如下：",[23,124007,124009],{"className":122069,"code":124008,"language":122071,"meta":122072,"style":28},"scp 账号@ip:路径 本地文件夹路径\n",[30,124010,124011],{"__ignoreMap":28},[33,124012,124013],{"class":35,"line":36},[33,124014,124008],{},[14,124016,124017],{},"下载文件夹指令格式如下：",[23,124019,124021],{"className":122069,"code":124020,"language":122071,"meta":122072,"style":28},"scp -r 账号@ip:路径 本地文件夹路径\n",[30,124022,124023],{"__ignoreMap":28},[33,124024,124025],{"class":35,"line":36},[33,124026,124020],{},[14,124028,124029],{},[480,124030,124031],{},"优化",[14,124033,124034],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[574,124036,124037,124040],{},[564,124038,124039],{},"本地生成密钥对；",[564,124041,124042],{},"将公钥上传至远程主机。",[14,124044,124045],{},[480,124046,124047],{},"1.生成密钥对",[14,124049,124050],{},"本地客户端生成公私钥：（一路回车默认即可）",[23,124052,124054],{"className":122069,"code":124053,"language":122071,"meta":122072,"style":28},"ssh-keygen\n",[30,124055,124056],{"__ignoreMap":28},[33,124057,124058],{"class":35,"line":36},[33,124059,124053],{},[14,124061,124062],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[574,124064,124065,124068],{},[564,124066,124067],{},"id_rsa （私钥）；",[564,124069,124070],{},"id_rsa.pub (公钥)。",[14,124072,124073],{},[480,124074,124075],{},"2.公钥上传",[14,124077,124078],{},"上传指令如下：",[23,124080,124082],{"className":122069,"code":124081,"language":122071,"meta":122072,"style":28},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[30,124083,124084],{"__ignoreMap":28},[33,124085,124086],{"class":35,"line":36},[33,124087,124081],{},[14,124089,124090],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,124092,124093],{},"以后再远程登录就无需录入密码了。",[1599,124095,124097],{"id":124096},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,124099,124100],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,124102,124103],{},[480,124104,124105],{},"1.准备工作",[14,124107,124108],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,124110,124111],{},[480,124112,124113],{},"2.为VScode安装远程开发插件",[14,124115,124116,124117,124120,124121,124124,124125,29638],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[30,124118,124119],{},"扩展：商店","的搜索栏输入",[30,124122,124123],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[30,124126,124127],{},"安装",[14,124129,124130],{},[2918,124131],{"alt":28,"src":124132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,124134,124135],{},[480,124136,124137],{},"3.配置远程连接",[14,124139,124140,124141,124144,124145,124148],{},"步骤1：使用快捷键",[30,124142,124143],{},"ctrl + shift + p","打开命令输入窗口，并输入",[30,124146,124147],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,124150,124151],{},[2918,124152],{"alt":28,"src":124153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,124155,124156,124157,29638],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[30,124158,124159],{},"Add New SSH Host",[14,124161,124162],{},[2918,124163],{"alt":28,"src":124164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,124166,124167,124168,124171,124172,124175,124176,124179],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[30,124169,124170],{},"ssh +X ubuntu@192.168.43.164","，其中，",[30,124173,124174],{},"ubuntu","需要替换为你的登录用户名，",[30,124177,124178],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,124181,124182],{},[2918,124183],{"alt":28,"src":124184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,124186,124187],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,124189,124190],{},[2918,124191],{"alt":28,"src":124192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,124194,124195],{},[2918,124196],{"alt":28,"src":124197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,124199,124200],{},[480,124201,124202],{},"4.使用",[14,124204,124205,124206,124144,124208,124210],{},"步骤1：继续使用快捷键",[30,124207,124143],{},[30,124209,124147],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,124212,124213],{},[2918,124214],{"alt":28,"src":124215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,124217,124218,124219,124222],{},"或者，也可以点击侧边栏的",[30,124220,124221],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,124224,124225],{},[2918,124226],{"alt":28,"src":124227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,124229,124230,124231,124234,124235,124238],{},"步骤2：选择菜单栏的",[30,124232,124233],{},"文件","下的",[30,124236,124237],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,124240,124241],{},[2918,124242],{"alt":28,"src":124243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,124245,124246],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[18,124248,124250],{"id":124249},"_73-远程桌面","7.3 远程桌面",[14,124252,124253],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,124255,124256],{},"我们选择使用VNC来看。",[574,124258,124259],{},[564,124260,124261],{},"安装VNC服务器：",[14,124263,124264],{},"这里以TigerVNC为例进行安装：",[23,124266,124268],{"className":118549,"code":124267,"language":118551,"meta":28,"style":28},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[30,124269,124270],{"__ignoreMap":28},[33,124271,124272,124274,124276,124278,124281],{"class":35,"line":36},[33,124273,25829],{"class":43},[33,124275,118570],{"class":119},[33,124277,25086],{"class":119},[33,124279,124280],{"class":119}," tigervnc-standalone-server",[33,124282,124283],{"class":119}," tigervnc-common\n",[574,124285,124286],{"start":51},[564,124287,124288],{},"设置VNC密码：",[14,124290,124291],{},"为VNC用户设置密码，运行以下命令：",[23,124293,124295],{"className":118549,"code":124294,"language":118551,"meta":28,"style":28},"vncpasswd\n",[30,124296,124297],{"__ignoreMap":28},[33,124298,124299],{"class":35,"line":36},[33,124300,124294],{"class":43},[574,124302,124303],{"start":57},[564,124304,124305],{},"配置VNC启动脚本:",[14,124307,124308],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[23,124310,124312],{"className":118549,"code":124311,"language":118551,"meta":28,"style":28},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[30,124313,124314,124323],{"__ignoreMap":28},[33,124315,124316,124318,124320],{"class":35,"line":36},[33,124317,102519],{"class":43},[33,124319,30469],{"class":76},[33,124321,124322],{"class":119}," ~\u002F.vnc\n",[33,124324,124325,124328],{"class":35,"line":51},[33,124326,124327],{"class":43},"nano",[33,124329,124330],{"class":119}," ~\u002F.vnc\u002Fxstartup\n",[14,124332,124333],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[23,124335,124337],{"className":118549,"code":124336,"language":118551,"meta":28,"style":28},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[30,124338,124339,124344,124352,124359],{"__ignoreMap":28},[33,124340,124341],{"class":35,"line":36},[33,124342,124343],{"class":60},"#!\u002Fbin\u002Fsh\n",[33,124345,124346,124349],{"class":35,"line":51},[33,124347,124348],{"class":76},"unset",[33,124350,124351],{"class":119}," SESSION_MANAGER\n",[33,124353,124354,124356],{"class":35,"line":57},[33,124355,124348],{"class":76},[33,124357,124358],{"class":119}," DBUS_SESSION_BUS_ADDRESS\n",[33,124360,124361],{"class":35,"line":64},[33,124362,124363],{"class":43},"gnome-session\n",[14,124365,124366],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[574,124368,124369],{"start":64},[564,124370,124371],{},"给予执行权限：",[14,124373,124374],{},"为xstartup文件设置执行权限：",[23,124376,124378],{"className":118549,"code":124377,"language":118551,"meta":28,"style":28},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[30,124379,124380],{"__ignoreMap":28},[33,124381,124382,124384,124387],{"class":35,"line":36},[33,124383,25864],{"class":43},[33,124385,124386],{"class":119}," +x",[33,124388,124330],{"class":119},[574,124390,124391],{"start":83},[564,124392,124393],{},"启动VNC服务器：",[23,124395,124397],{"className":118549,"code":124396,"language":118551,"meta":28,"style":28},"vncserver -geometry 1920x1080 -localhost=0\n",[30,124398,124399],{"__ignoreMap":28},[33,124400,124401,124404,124407,124410],{"class":35,"line":36},[33,124402,124403],{"class":43},"vncserver",[33,124405,124406],{"class":76}," -geometry",[33,124408,124409],{"class":119}," 1920x1080",[33,124411,124412],{"class":76}," -localhost=0\n",[14,124414,124415],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,124417,124418],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[574,124420,124421],{"start":89},[564,124422,124423],{},"查看已开启的VNC服务器：",[23,124425,124427],{"className":118549,"code":124426,"language":118551,"meta":28,"style":28},"vncserver -list\n",[30,124428,124429],{"__ignoreMap":28},[33,124430,124431,124433],{"class":35,"line":36},[33,124432,124403],{"class":43},[33,124434,124435],{"class":76}," -list\n",[14,124437,124438],{},[2918,124439],{"alt":28,"src":124440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[574,124442,124443],{"start":98},[564,124444,124445],{},"连接到VNC服务器：",[14,124447,124448],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[574,124450,124451],{"start":110},[564,124452,124453],{},"停止VNC服务器：",[14,124455,124456],{},"如果需要停止VNC服务器，可以使用以下命令：",[23,124458,124460],{"className":118549,"code":124459,"language":118551,"meta":28,"style":28},"vncserver -kill :1\n",[30,124461,124462],{"__ignoreMap":28},[33,124463,124464,124466,124469],{"class":35,"line":36},[33,124465,124403],{"class":43},[33,124467,124468],{"class":76}," -kill",[33,124470,124471],{"class":119}," :1\n",[14,124473,124474],{},"将:1替换为你实际使用的显示编号。",[14,124476,124477],{},[2918,124478],{"alt":28,"src":124479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,124481,124482],{},[2918,124483],{"alt":28,"src":124484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[18,124486,124488],{"id":124487},"_74-usb端口设置","7.4 USB端口设置",[14,124490,124491],{},[480,124492,124493],{},"首先先配置好权限",[23,124495,124497],{"className":118549,"code":124496,"language":118551,"meta":28,"style":28},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[30,124498,124499,124504,124517,124524,124529],{"__ignoreMap":28},[33,124500,124501],{"class":35,"line":36},[33,124502,124503],{"class":60},"# 将用户权限提高\n",[33,124505,124506,124508,124510,124512,124515],{"class":35,"line":51},[33,124507,25829],{"class":43},[33,124509,27827],{"class":119},[33,124511,27830],{"class":76},[33,124513,124514],{"class":119}," dialout",[33,124516,27835],{"class":47},[33,124518,124519,124521],{"class":35,"line":57},[33,124520,27854],{"class":43},[33,124522,124523],{"class":119}," dialout\n",[33,124525,124526],{"class":35,"line":64},[33,124527,124528],{"class":60},"# 查看下面命令是否输出dialout（若输出才正常）\n",[33,124530,124531],{"class":35,"line":83},[33,124532,124533],{"class":43},"groups\n",[14,124535,124536],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[1599,124538,124540],{"id":124539},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,124542,124543,124546],{},[480,124544,124545],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,124548,124549,124552],{},[480,124550,124551],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,124554,124555],{},[480,124556,124557],{},"流程如下：",[14,124559,124560],{},"（1）.查找设备idVendor和idProduct",[14,124562,124563,124564,124567],{},"接入两个USB设备，在终端调用指令",[30,124565,124566],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,124569,124570],{},[2918,124571],{"alt":28,"src":124572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,124574,124575,124576,124579],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[30,124577,124578],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,124581,124582],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,124584,124585],{},"（2）.编写映射规则",[14,124587,124588,124589,124592],{},"在",[30,124590,124591],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[23,124594,124596],{"className":118549,"code":124595,"language":118551,"meta":28,"style":28},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[30,124597,124598],{"__ignoreMap":28},[33,124599,124600,124602,124604],{"class":35,"line":36},[33,124601,25829],{"class":43},[33,124603,119836],{"class":119},[33,124605,124606],{"class":119}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,124608,124609],{},"输入如下内容：",[23,124611,124613],{"className":118549,"code":124612,"language":118551,"meta":28,"style":28},"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",[30,124614,124615,124645],{"__ignoreMap":28},[33,124616,124617,124620,124622,124625,124628,124631,124634,124636,124639,124642],{"class":35,"line":36},[33,124618,124619],{"class":47},"KERNEL",[33,124621,73],{"class":39},[33,124623,124624],{"class":119},"=\"ttyUSB*\",",[33,124626,124627],{"class":43}," ATTRS",[33,124629,124630],{"class":119},"{idVendor}==",[33,124632,124633],{"class":43},"\"10c4\"",[33,124635,704],{"class":43},[33,124637,124638],{"class":119}," ATTRS{idProduct}==\"ea60\",",[33,124640,124641],{"class":119}," MODE:=\"0777\",",[33,124643,124644],{"class":119}," SYMLINK+=\"mylidar\"\n",[33,124646,124647,124649,124651,124653,124655,124657,124660,124662,124665,124667],{"class":35,"line":51},[33,124648,124619],{"class":47},[33,124650,73],{"class":39},[33,124652,124624],{"class":119},[33,124654,124627],{"class":43},[33,124656,124630],{"class":119},[33,124658,124659],{"class":43},"\"1a86\"",[33,124661,704],{"class":43},[33,124663,124664],{"class":119}," ATTRS{idProduct}==\"7523\",",[33,124666,124641],{"class":119},[33,124668,124669],{"class":119}," SYMLINK+=\"mycar\"\n",[14,124671,124672],{},"代码解释：",[561,124674,124675,124678,124681,124684],{},[564,124676,124677],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[564,124679,124680],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[564,124682,124683],{},"SYMLINK是符号连接，即绑定的别名；",[564,124685,124686],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,124688,124689,124690,124693,124696],{},"***小提示：***",[24805,124691,124692],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[30,124694,124695],{},"\u002Fetc\u002Fudev\u002Frule.d",[24805,124697,124698],{},"目录即可。",[14,124700,124701],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,124703,124704],{},"（3）.使规则生效",[14,124706,124707],{},"在终端下输入如下指令：",[23,124709,124711],{"className":118549,"code":124710,"language":118551,"meta":28,"style":28},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[30,124712,124713,124718,124730,124741,124745,124750,124763],{"__ignoreMap":28},[33,124714,124715],{"class":35,"line":36},[33,124716,124717],{"class":60},"# Ubuntu用下方命令\n",[33,124719,124720,124722,124724,124727],{"class":35,"line":51},[33,124721,25829],{"class":43},[33,124723,121301],{"class":119},[33,124725,124726],{"class":119}," udev",[33,124728,124729],{"class":119}," reload\n",[33,124731,124732,124734,124736,124738],{"class":35,"line":57},[33,124733,25829],{"class":43},[33,124735,121301],{"class":119},[33,124737,124726],{"class":119},[33,124739,124740],{"class":119}," restart\n",[33,124742,124743],{"class":35,"line":64},[33,124744,160],{"emptyLinePlaceholder":159},[33,124746,124747],{"class":35,"line":83},[33,124748,124749],{"class":60},"#Fedora用下方命令\n",[33,124751,124752,124754,124757,124760],{"class":35,"line":89},[33,124753,25829],{"class":43},[33,124755,124756],{"class":119}," udevadm",[33,124758,124759],{"class":119}," control",[33,124761,124762],{"class":76}," --reload\n",[33,124764,124765,124767,124769],{"class":35,"line":98},[33,124766,25829],{"class":43},[33,124768,124756],{"class":119},[33,124770,124771],{"class":119}," trigger\n",[14,124773,124774],{},"再重新插拔设备即可。",[14,124776,124777],{},"（4）.测试",[14,124779,124780],{},"终端下输入如下指令",[23,124782,124784],{"className":118549,"code":124783,"language":118551,"meta":28,"style":28},"ll \u002Fdev | grep ttyUSB\n",[30,124785,124786],{"__ignoreMap":28},[33,124787,124788,124791,124794,124796,124798],{"class":35,"line":36},[33,124789,124790],{"class":43},"ll",[33,124792,124793],{"class":119}," \u002Fdev",[33,124795,26362],{"class":39},[33,124797,31489],{"class":43},[33,124799,124800],{"class":119}," ttyUSB\n",[14,124802,124803],{},"运行结果如下：",[14,124805,124806],{},[2918,124807],{"alt":28,"src":124808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,124810,124811,124812,124815],{},"也可以多次插拔USB设备，会发现设备端口",[30,124813,124814],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,124817,124818],{},[480,124819,119217],{},[14,124821,124822],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[1599,124824,124826],{"id":124825},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,124828,124829,124831],{},[480,124830,124545],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,124833,124834,124836],{},[480,124835,124551],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,124838,124839],{},[480,124840,124557],{},[14,124842,124843],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,124845,124846],{},"调用如下指令查看第一台雷达的USB信息：",[23,124848,124850],{"className":118549,"code":124849,"language":118551,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[30,124851,124852,124872],{"__ignoreMap":28},[33,124853,124854,124857,124859,124862,124865,124867,124869],{"class":35,"line":36},[33,124855,124856],{"class":43},"udevadm",[33,124858,71074],{"class":119},[33,124860,124861],{"class":76}," --attribute-walk",[33,124863,124864],{"class":76}," --name=\u002Fdev\u002FttyUSB0",[33,124866,26362],{"class":39},[33,124868,31489],{"class":43},[33,124870,124871],{"class":119}," KERNELS\n",[33,124873,124874,124876,124878,124880,124883,124885,124887],{"class":35,"line":51},[33,124875,124856],{"class":43},[33,124877,71074],{"class":119},[33,124879,124861],{"class":76},[33,124881,124882],{"class":76}," --name=\u002Fdev\u002FttyACM0",[33,124884,26362],{"class":39},[33,124886,31489],{"class":43},[33,124888,124871],{"class":119},[14,124890,124891],{},[2918,124892],{"alt":28,"src":124893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,124895,124896],{},"调用如下指令查看第二台雷达的USB信息：",[23,124898,124900],{"className":118549,"code":124899,"language":118551,"meta":28,"style":28},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[30,124901,124902],{"__ignoreMap":28},[33,124903,124904,124906,124908,124910,124913,124915,124917],{"class":35,"line":36},[33,124905,124856],{"class":43},[33,124907,71074],{"class":119},[33,124909,124861],{"class":76},[33,124911,124912],{"class":76}," --name=\u002Fdev\u002FttyUSB1",[33,124914,26362],{"class":39},[33,124916,31489],{"class":43},[33,124918,124871],{"class":119},[14,124920,124921,124922,124925,124926,124929,124930,124933],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[30,124923,124924],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[30,124927,124928],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[480,124931,124932],{},"唯一性标识","”。",[14,124935,124585],{},[14,124937,124588,124938,124940],{},[30,124939,124591],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[23,124942,124943],{"className":118549,"code":124595,"language":118551,"meta":28,"style":28},[30,124944,124945],{"__ignoreMap":28},[33,124946,124947,124949,124951],{"class":35,"line":36},[33,124948,25829],{"class":43},[33,124950,119836],{"class":119},[33,124952,124606],{"class":119},[23,124954,124956],{"className":118549,"code":124955,"language":118551,"meta":28,"style":28},"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",[30,124957,124958,124987],{"__ignoreMap":28},[33,124959,124960,124962,124964,124966,124969,124971,124974,124977,124979,124982,124984],{"class":35,"line":36},[33,124961,124619],{"class":47},[33,124963,73],{"class":39},[33,124965,124624],{"class":119},[33,124967,124968],{"class":47}," KERNELS",[33,124970,73],{"class":39},[33,124972,124973],{"class":119},"=\"1-1.3:1.0\",",[33,124975,124976],{"class":43}," MODE:",[33,124978,73],{"class":119},[33,124980,124981],{"class":43},"\"0777\"",[33,124983,704],{"class":43},[33,124985,124986],{"class":119}," SYMLINK+=\"rplidar_front\"\n",[33,124988,124989,124991,124993,124995,124997,124999,125002,125004,125006,125008,125010],{"class":35,"line":51},[33,124990,124619],{"class":47},[33,124992,73],{"class":39},[33,124994,124624],{"class":119},[33,124996,124968],{"class":47},[33,124998,73],{"class":39},[33,125000,125001],{"class":119},"=\"1-1.4:1.0\",",[33,125003,124976],{"class":43},[33,125005,73],{"class":119},[33,125007,124981],{"class":43},[33,125009,704],{"class":43},[33,125011,125012],{"class":119}," SYMLINK+=\"rplidar_back\"\n",[14,125014,124704],{},[14,125016,124707],{},[23,125018,125019],{"className":118549,"code":124710,"language":118551,"meta":28,"style":28},[30,125020,125021,125025,125035,125045,125049,125053,125063],{"__ignoreMap":28},[33,125022,125023],{"class":35,"line":36},[33,125024,124717],{"class":60},[33,125026,125027,125029,125031,125033],{"class":35,"line":51},[33,125028,25829],{"class":43},[33,125030,121301],{"class":119},[33,125032,124726],{"class":119},[33,125034,124729],{"class":119},[33,125036,125037,125039,125041,125043],{"class":35,"line":57},[33,125038,25829],{"class":43},[33,125040,121301],{"class":119},[33,125042,124726],{"class":119},[33,125044,124740],{"class":119},[33,125046,125047],{"class":35,"line":64},[33,125048,160],{"emptyLinePlaceholder":159},[33,125050,125051],{"class":35,"line":83},[33,125052,124749],{"class":60},[33,125054,125055,125057,125059,125061],{"class":35,"line":89},[33,125056,25829],{"class":43},[33,125058,124756],{"class":119},[33,125060,124759],{"class":119},[33,125062,124762],{"class":76},[33,125064,125065,125067,125069],{"class":35,"line":98},[33,125066,25829],{"class":43},[33,125068,124756],{"class":119},[33,125070,124771],{"class":119},[14,125072,124774],{},[14,125074,124777],{},[14,125076,124780,125077,125080],{},[30,125078,125079],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,125082,125083],{},[2918,125084],{"alt":28,"src":125085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,125087,125088],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,125090,125091,125093],{},[480,125092,119217],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[1599,125095,125097],{"id":125096},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,125099,125100],{},"（1）.查看所连接的主机USB接口的信息",[23,125102,125104],{"className":118549,"code":125103,"language":118551,"meta":28,"style":28},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[30,125105,125106,125136],{"__ignoreMap":28},[33,125107,125108,125110,125112,125115,125117,125119,125121,125123,125126,125129,125131,125134],{"class":35,"line":36},[33,125109,124856],{"class":43},[33,125111,71074],{"class":119},[33,125113,125114],{"class":76}," -a",[33,125116,30469],{"class":76},[33,125118,29675],{"class":47},[33,125120,124856],{"class":43},[33,125122,71074],{"class":119},[33,125124,125125],{"class":76}," -q",[33,125127,125128],{"class":119}," path",[33,125130,26368],{"class":76},[33,125132,125133],{"class":119}," \u002Fdev\u002FttyACM0",[33,125135,884],{"class":47},[33,125137,125138,125140,125142,125144,125146,125148,125150,125152,125154,125156,125158,125161],{"class":35,"line":51},[33,125139,124856],{"class":43},[33,125141,71074],{"class":119},[33,125143,125114],{"class":76},[33,125145,30469],{"class":76},[33,125147,29675],{"class":47},[33,125149,124856],{"class":43},[33,125151,71074],{"class":119},[33,125153,125125],{"class":76},[33,125155,125128],{"class":119},[33,125157,26368],{"class":76},[33,125159,125160],{"class":119}," \u002Fdev\u002FttyUSB0",[33,125162,884],{"class":47},[14,125164,125165],{},[2918,125166],{"alt":28,"src":125167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,125169,125170],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,125172,124585],{},[14,125174,124588,125175,124940],{},[30,125176,124591],{},[23,125178,125179],{"className":118549,"code":124595,"language":118551,"meta":28,"style":28},[30,125180,125181],{"__ignoreMap":28},[33,125182,125183,125185,125187],{"class":35,"line":36},[33,125184,25829],{"class":43},[33,125186,119836],{"class":119},[33,125188,124606],{"class":119},[23,125190,125192],{"className":118549,"code":125191,"language":118551,"meta":28,"style":28},"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",[30,125193,125194,125222,125248],{"__ignoreMap":28},[33,125195,125196,125198,125200,125203,125205,125207,125209,125211,125214,125217,125219],{"class":35,"line":36},[33,125197,124619],{"class":47},[33,125199,73],{"class":39},[33,125201,125202],{"class":119},"=\"ttyACM*\",",[33,125204,124627],{"class":43},[33,125206,124630],{"class":119},[33,125208,124659],{"class":43},[33,125210,704],{"class":43},[33,125212,125213],{"class":119}," ATTRS{idProduct}==\"55d4\",",[33,125215,125216],{"class":119}," ATTRS{serial}==\"0001\",",[33,125218,124641],{"class":119},[33,125220,125221],{"class":119}," SYMLINK+=\"ttyACM_MCU\"\n",[33,125223,125224,125226,125228,125230,125232,125234,125236,125238,125240,125243,125245],{"class":35,"line":51},[33,125225,124619],{"class":47},[33,125227,73],{"class":39},[33,125229,125202],{"class":119},[33,125231,124627],{"class":43},[33,125233,124630],{"class":119},[33,125235,124659],{"class":43},[33,125237,704],{"class":43},[33,125239,125213],{"class":119},[33,125241,125242],{"class":119}," ATTRS{serial}==\"0002\",",[33,125244,124641],{"class":119},[33,125246,125247],{"class":119}," SYMLINK+=\"ttyACM_Lidar\"\n",[33,125249,125250,125252,125254,125256,125258,125260,125262,125264,125266,125268],{"class":35,"line":57},[33,125251,124619],{"class":47},[33,125253,73],{"class":39},[33,125255,124624],{"class":119},[33,125257,124627],{"class":43},[33,125259,124630],{"class":119},[33,125261,124659],{"class":43},[33,125263,704],{"class":43},[33,125265,124664],{"class":119},[33,125267,124641],{"class":119},[33,125269,125270],{"class":119}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,125272,124704],{},[14,125274,124707],{},[23,125276,125277],{"className":118549,"code":124710,"language":118551,"meta":28,"style":28},[30,125278,125279,125283,125293,125303,125307,125311,125321],{"__ignoreMap":28},[33,125280,125281],{"class":35,"line":36},[33,125282,124717],{"class":60},[33,125284,125285,125287,125289,125291],{"class":35,"line":51},[33,125286,25829],{"class":43},[33,125288,121301],{"class":119},[33,125290,124726],{"class":119},[33,125292,124729],{"class":119},[33,125294,125295,125297,125299,125301],{"class":35,"line":57},[33,125296,25829],{"class":43},[33,125298,121301],{"class":119},[33,125300,124726],{"class":119},[33,125302,124740],{"class":119},[33,125304,125305],{"class":35,"line":64},[33,125306,160],{"emptyLinePlaceholder":159},[33,125308,125309],{"class":35,"line":83},[33,125310,124749],{"class":60},[33,125312,125313,125315,125317,125319],{"class":35,"line":89},[33,125314,25829],{"class":43},[33,125316,124756],{"class":119},[33,125318,124759],{"class":119},[33,125320,124762],{"class":76},[33,125322,125323,125325,125327],{"class":35,"line":98},[33,125324,25829],{"class":43},[33,125326,124756],{"class":119},[33,125328,124771],{"class":119},[14,125330,125331,125332],{},"再重新插拔设备即可，或者 ",[480,125333,125334],{},"直接重启系统。",[14,125336,124777],{},[14,125338,124780,125339,125080],{},[30,125340,125079],{},[14,125342,125343],{},[2918,125344],{"alt":28,"src":125345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,125347,125088],{},[14,125349,125350,125352],{},[480,125351,119217],{}," 一些设备可能没有串口号等。",[1599,125354,125356],{"id":125355},"_744-其他注意事项","7.4.4 其他注意事项",[14,125358,125359,125360,125362,125363,125366,125367,19661,125370,125373,125374,125376],{},"并非所有的USB设备端口号都是",[30,125361,124814],{},"的格式，比如Arduino的端口号可能是",[30,125364,125365],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[30,125368,125369],{},"videon",[30,125371,125372],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[30,125375,125369],{},"端口，绑定时需要关联的也是该接口。",[14,125378,125379,125380,125383,125384,125387,125388,125390,125391,125394,125395,125398,125399,125402,125403,125402,125406,125402,125409,29638],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[30,125381,125382],{},"KERNEL==\"ttyUSB*\"","修改为",[30,125385,125386],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[30,125389,125382],{},"修改为类似于",[30,125392,125393],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[30,125396,125397],{},"video[0,2,4,6]","表示可以绑定的端口为",[30,125400,125401],{},"video0","或",[30,125404,125405],{},"video2",[30,125407,125408],{},"video4",[30,125410,125411],{},"video6",[18,125413,125415],{"id":125414},"_75-挂载内网网页","7.5 挂载内网网页",[14,125417,125418],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,125420,125421],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,125423,125424],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,125426,125427,125428],{},"Termux 下载地址（F-Droid）：",[126,125429,125430],{"href":125430,"rel":125431},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25117],[14,125433,125434],{},"首先打开app后，先更新软件缓存：",[23,125436,125438],{"className":118549,"code":125437,"language":118551,"meta":28,"style":28},"pkg update\n",[30,125439,125440],{"__ignoreMap":28},[33,125441,125442,125445],{"class":35,"line":36},[33,125443,125444],{"class":43},"pkg",[33,125446,27495],{"class":119},[14,125448,125449],{},"然后换源",[23,125451,125453],{"className":118549,"code":125452,"language":118551,"meta":28,"style":28},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[30,125454,125455],{"__ignoreMap":28},[33,125456,125457,125459,125462],{"class":35,"line":36},[33,125458,124327],{"class":43},[33,125460,125461],{"class":47}," $PREFIX",[33,125463,125464],{"class":119},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,125466,125467],{},"将该文件内容替换为下面：",[23,125469,125471],{"className":118549,"code":125470,"language":118551,"meta":28,"style":28},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[30,125472,125473],{"__ignoreMap":28},[33,125474,125475,125478,125481,125484],{"class":35,"line":36},[33,125476,125477],{"class":43},"deb",[33,125479,125480],{"class":119}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[33,125482,125483],{"class":119}," stable",[33,125485,125486],{"class":119}," main\n",[561,125488,125489,125516],{},[564,125490,125491,125492,125494,125495],{},"如果你使用的是",[30,125493,124327],{},"编辑器：",[561,125496,125497,125504,125510],{},[564,125498,125499,125500,125503],{},"按 ",[30,125501,125502],{},"Ctrl+O"," 保存文件。",[564,125505,125499,125506,125509],{},[30,125507,125508],{},"Enter"," 确认文件名。",[564,125511,125499,125512,125515],{},[30,125513,125514],{},"Ctrl+X"," 退出编辑器。",[564,125517,125491,125518,125494,125521],{},[30,125519,125520],{},"vim",[561,125522,125523,125529],{},[564,125524,125499,125525,125528],{},[30,125526,125527],{},"Esc"," 退出编辑模式。",[564,125530,125531,125532,125534],{},"输入 ",[30,125533,120474],{}," 保存并退出。",[14,125536,125537],{},"接下来重新更新软件源：",[23,125539,125541],{"className":118549,"code":125540,"language":118551,"meta":28,"style":28},"pkg update && pkg upgrade\n",[30,125542,125543],{"__ignoreMap":28},[33,125544,125545,125547,125549,125551,125553],{"class":35,"line":36},[33,125546,125444],{"class":43},[33,125548,118600],{"class":119},[33,125550,27443],{"class":47},[33,125552,125444],{"class":43},[33,125554,118586],{"class":119},[14,125556,125557],{},"安装python：",[23,125559,125561],{"className":118549,"code":125560,"language":118551,"meta":28,"style":28},"pkg install python\n",[30,125562,125563],{"__ignoreMap":28},[33,125564,125565,125567,125569],{"class":35,"line":36},[33,125566,125444],{"class":43},[33,125568,25086],{"class":119},[33,125570,125571],{"class":119}," python\n",[14,125573,125574,27726],{},[480,125575,125576],{},"通过Termux访问设备存储",[14,125578,125579],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[23,125581,125583],{"className":118549,"code":125582,"language":118551,"meta":28,"style":28},"termux-setup-storage\n",[30,125584,125585],{"__ignoreMap":28},[33,125586,125587],{"class":35,"line":36},[33,125588,125582],{"class":43},[574,125590,125591],{},[564,125592,125593,27726,125596],{},[480,125594,125595],{},"进入HTML文件所在的目录",[574,125597,125598],{},[564,125599,125600,125601,125603],{},"使用",[30,125602,102529],{},"命令进入HTML文件所在的目录：",[23,125605,125607],{"className":118549,"code":125606,"language":118551,"meta":28,"style":28},"cd ~\u002Fyour_html_folder\n",[30,125608,125609],{"__ignoreMap":28},[33,125610,125611,125613],{"class":35,"line":36},[33,125612,102529],{"class":76},[33,125614,125615],{"class":119}," ~\u002Fyour_html_folder\n",[574,125617,125618],{"start":51},[564,125619,125620,27726,125623,125628,125645],{},[480,125621,125622],{},"启动Python HTTP服务器",[574,125624,125625],{},[564,125626,125627],{},"运行以下命令启动一个简单的HTTP服务器：",[23,125629,125631],{"className":118549,"code":125630,"language":118551,"meta":28,"style":28},"python -m http.server 8000\n",[30,125632,125633],{"__ignoreMap":28},[33,125634,125635,125637,125639,125642],{"class":35,"line":36},[33,125636,31633],{"class":43},[33,125638,102135],{"class":76},[33,125640,125641],{"class":119}," http.server",[33,125643,125644],{"class":76}," 8000\n",[574,125646,125647],{"start":57},[564,125648,125649,125650,125653],{},"这会在端口",[30,125651,125652],{},"8000","上启动一个Web服务器。",[561,125655,125656],{},[564,125657,125658],{},"启动服务器后，Termux会显示日志信息，例如：",[23,125660,125662],{"className":122069,"code":125661,"language":122071,"meta":122072,"style":28},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[30,125663,125664],{"__ignoreMap":28},[33,125665,125666],{"class":35,"line":36},[33,125667,125661],{},[561,125669,125670],{},[564,125671,125672],{},"这表示服务器已成功启动。",[14,125674,125675],{},[480,125676,125677],{},"在浏览器中访问HTML文件",[574,125679,125680],{},[564,125681,125682,27726,125685,125690],{},[480,125683,125684],{},"在同一设备上访问",[574,125686,125687],{},[564,125688,125689],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[23,125691,125694],{"className":125692,"code":125693,"language":72917,"meta":28,"style":28},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[30,125695,125696],{"__ignoreMap":28},[33,125697,125698,125701],{"class":35,"line":36},[33,125699,125700],{"class":47},"http:",[33,125702,125703],{"class":60},"\u002F\u002Flocalhost:8000\n",[561,125705,125706],{},[564,125707,125708,125709,125712],{},"如果HTML文件中有",[30,125710,125711],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[18,125714,125716],{"id":125715},"_76-linux重点知识","7.6 Linux重点知识",[1599,125718,125720],{"id":125719},"_761-关于点的说明","7.6.1 关于点的说明",[14,125722,125723],{},[2918,125724],{"alt":28,"src":125725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,125727,125728],{},"一点本目录，两点上目录",[1599,125730,125732],{"id":125731},"_762-目录","7.6.2 目录",[23249,125734,125736],{"id":125735},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,125738,125739],{},[480,125740,125741],{},"\u002Fboot:",[14,125743,125744],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,125746,125747],{},[480,125748,125749],{},"\u002Fetc:",[14,125751,125752],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,125754,125755],{},[480,125756,125757],{},"\u002Flib：",[14,125759,125760],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,125762,125763],{},[480,125764,125765],{},"\u002Fsys:",[14,125767,125768],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23249,125770,125772],{"id":125771},"_7622-指令集合","7.6.2.2 指令集合",[14,125774,125775],{},[480,125776,125777],{},"\u002Fbin:",[14,125779,125780],{},"为二进制文件的缩写，存放最经常使用的命令",[14,125782,125783],{},[480,125784,125785],{},"\u002Fsbin:",[14,125787,125788],{},"只有系统管理员才能使用的程序和指令",[23249,125790,125792],{"id":125791},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,125794,125795],{},[480,125796,125797],{},"\u002Fdev:",[14,125799,125800],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,125802,125803],{},[480,125804,125805],{},"\u002Fmedia:",[14,125807,125808],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,125810,125811],{},[480,125812,125813],{},"\u002Fmnt:",[14,125815,125816],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23249,125818,125820],{"id":125819},"_7624-临时文件","7.6.2.4 临时文件",[14,125822,125823],{},[480,125824,125825],{},"\u002Frun:",[14,125827,125828],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,125830,125831],{},[480,125832,125833],{},"\u002Flost+found:",[14,125835,125836],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,125838,125839],{},[480,125840,125841],{},"\u002Ftmp:",[14,125843,125844],{},"这个目录是用来存放一些临时文件的",[23249,125846,125848],{"id":125847},"_7625-账户","7.6.2.5 账户",[14,125850,125851],{},[480,125852,125853],{},"\u002Froot：",[14,125855,125856],{},"系统管理员的用户主目录",[14,125858,125859,27726],{},[480,125860,125861],{},"\u002Fhome",[14,125863,125864],{},"用户的主目录，以用户的账号命名的",[14,125866,125867,27726],{},[480,125868,125869],{},"\u002Fusr",[14,125871,125872],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,125874,125875],{},[480,125876,125877],{},"\u002Fusr\u002Fbin：",[14,125879,125880],{},"系统用户使用的应用程序与指令",[14,125882,125883],{},[480,125884,125885],{},"\u002Fusr\u002Fsbin：",[14,125887,125888],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,125890,125891],{},[480,125892,125893],{},"\u002Fusr\u002Fsrc：",[14,125895,125896],{},"内核源代码默认的放置目录",[23249,125898,125900],{"id":125899},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,125902,125903],{},[480,125904,125905],{},"\u002Fvar：",[14,125907,125908],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,125910,125911],{},[480,125912,125913],{},"\u002Fproc:",[14,125915,125916,125917,125920],{},"管理 ",[480,125918,125919],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23249,125922,125924],{"id":125923},"_7627-扩展用的","7.6.2.7 扩展用的",[14,125926,125927],{},[480,125928,125929],{},"\u002Fopt:",[14,125931,125932],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,125934,125935],{},[480,125936,125937],{},"\u002Fsrv:",[14,125939,125940],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[1599,125942,125944],{"id":125943},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,125946,125947],{},[2918,125948],{"alt":28,"src":125949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,125951,125952],{},"windows-->linux:",[14,125954,125955],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,125957,125958],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,125960,125961],{},"linux传输文件到windows",[14,125963,125964],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[1599,125966,125968],{"id":125967},"_764-易忘知识","7.6.4 易忘知识",[14,125970,125971],{},"操作系统内核查看",[23,125973,125974],{"className":118549,"code":122543,"language":118551,"meta":28,"style":28},[30,125975,125976],{"__ignoreMap":28},[33,125977,125978,125980],{"class":35,"line":36},[33,125979,71457],{"class":43},[33,125981,122552],{"class":76},[14,125983,125984],{},[2918,125985],{"alt":28,"src":125986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125988,125989],{},[2918,125990],{"alt":28,"src":125991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[23,125993,125995],{"className":118549,"code":125994,"language":118551,"meta":28,"style":28},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[30,125996,125997,126009],{"__ignoreMap":28},[33,125998,125999,126001,126004,126007],{"class":35,"line":36},[33,126000,122760],{"class":43},[33,126002,126003],{"class":119}," mvtest",[33,126005,126006],{"class":119}," mvtest2",[33,126008,4085],{"class":47},[33,126010,126011],{"class":35,"line":51},[33,126012,126013],{"class":43},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,126015,126016],{},[2918,126017],{"alt":28,"src":126018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,126020,126021],{},[2918,126022],{"alt":28,"src":126023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,126025,126026,126027,126030],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[30,126028,126029],{},"du -a"," 可以快速查看磁盘使用细节。",[1599,126032,126034],{"id":126033},"_765-vim","7.6.5 Vim",[14,126036,126037],{},[2918,126038],{"alt":28,"src":126039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,126041,126042],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,126044,126045],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,126047,126048],{},[480,126049,126050],{},"1.命令模式：",[14,126052,126053],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,126055,126056],{},"x 删除当前光标所在处的字符",[14,126058,126059],{},"：切换到底线命令模式，以在最底一行输入命令",[14,126061,126062],{},"a 进行插入模式，在光标下一个位置输入文本",[14,126064,126065],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,126067,126068],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,126070,126071],{},"dd 剪切当前行",[14,126073,126074],{},"yy 复制当前行",[14,126076,126077],{},"p 粘贴剪贴板内容到光标下方",[14,126079,126080],{},"P 粘贴剪贴板内容到光标上方",[14,126082,126083],{},"u 撤销上一次操作",[14,126085,126086],{},"ctrl+r 重做上一次操作",[14,126088,126089,126091],{},[2394,126090],{}," 保存文件",[14,126093,126094,126096],{},[2245,126095],{}," 退出Vim编辑器",[14,126098,126099,126101],{},[2245,126100],{},"! 强制退出Vim编辑器，不保存修改",[14,126103,126104],{},[480,126105,126106],{},"2.输入模式：",[14,126108,126109],{},[2918,126110],{"alt":28,"src":126111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,126113,126114],{},[480,126115,126116],{},"3.底线命令模式：",[14,126118,126119],{},[2918,126120],{"alt":28,"src":126121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,126123,126124],{},"按下esc可以退出底线命令模式",[1599,126126,126128],{"id":126127},"_766-apt","7.6.6 apt",[14,126130,126131],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[1599,126133,126135],{"id":126134},"_767-home与root的区别","7.6.7 home与root的区别",[14,126137,126138],{},[2918,126139],{"alt":28,"src":126140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,126142,126143],{},[2918,126144],{"alt":28,"src":126145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,126147,126148],{},[2918,126149],{"alt":28,"src":126150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,126152,126153],{},[2918,126154],{"alt":28,"src":126155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[1599,126157,126159],{"id":126158},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,126161,126162],{},[126,126163,126164],{"href":126164,"rel":126165},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25117],[574,126167,126168,126171],{},[564,126169,126170],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[564,126172,126173],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,126175,126176],{},[2918,126177],{"alt":28,"src":126178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,126180,126181],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,126183,126184],{},[2918,126185],{"alt":28,"src":126186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[23,126188,126190],{"className":122069,"code":126189,"language":122071,"meta":122072,"style":28},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[30,126191,126192,126197],{"__ignoreMap":28},[33,126193,126194],{"class":35,"line":36},[33,126195,126196],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[33,126198,126199],{"class":35,"line":51},[33,126200,126201],{},".\u002Fpycharm.sh\n",[14,126203,126204],{},"3️⃣创建.desktop文件",[14,126206,126207],{},[480,126208,126209],{},"原理：",[561,126211,126212,126222],{},[564,126213,126214,126215,126221],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[480,126216,126217,126220],{},[30,126218,126219],{},".desktop"," 文件"," 来识别应用。",[564,126223,126224,126226,126227],{},[30,126225,126219],{}," 文件相当于一个“应用注册表”，告诉系统：",[561,126228,126229,126232,126235,126238,126241],{},[564,126230,126231],{},"应用名字（Name）",[564,126233,126234],{},"图标（Icon）",[564,126236,126237],{},"执行命令（Exec）",[564,126239,126240],{},"分类（Categories）",[564,126242,126243],{},"是否需要终端（Terminal）",[23,126245,126247],{"className":122069,"code":126246,"language":122071,"meta":122072,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[30,126248,126249,126254],{"__ignoreMap":28},[33,126250,126251],{"class":35,"line":36},[33,126252,126253],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[33,126255,126256],{"class":35,"line":51},[33,126257,126258],{},"nano pycharm.desktop\n",[14,126260,126261],{},"nano是一个命令行下的编辑器，也可以使用vim",[23,126263,126265],{"className":122069,"code":126264,"language":122071,"meta":122072,"style":28},"[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",[30,126266,126267,126272,126277,126282,126287,126292,126297,126302,126307,126312],{"__ignoreMap":28},[33,126268,126269],{"class":35,"line":36},[33,126270,126271],{},"[Desktop Entry]\n",[33,126273,126274],{"class":35,"line":51},[33,126275,126276],{},"Version=1.0\n",[33,126278,126279],{"class":35,"line":57},[33,126280,126281],{},"Type=Application\n",[33,126283,126284],{"class":35,"line":64},[33,126285,126286],{},"Name=PyCharm\n",[33,126288,126289],{"class":35,"line":83},[33,126290,126291],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[33,126293,126294],{"class":35,"line":89},[33,126295,126296],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[33,126298,126299],{"class":35,"line":98},[33,126300,126301],{},"Comment=JetBrains PyCharm IDE\n",[33,126303,126304],{"class":35,"line":110},[33,126305,126306],{},"Categories=Development;IDE;\n",[33,126308,126309],{"class":35,"line":134},[33,126310,126311],{},"Terminal=false\n",[33,126313,126314],{"class":35,"line":156},[33,126315,126316],{},"StartupWMClass=jetbrains-pycharm\n",[561,126318,126319,126325,126331,126337],{},[564,126320,126321,126324],{},[30,126322,126323],{},"Exec"," → 点击图标时执行的命令",[564,126326,126327,126330],{},[30,126328,126329],{},"Icon"," → 显示在菜单和桌面上的图标",[564,126332,126333,126336],{},[30,126334,126335],{},"Terminal=false"," → 不打开终端",[564,126338,126339,126342],{},[30,126340,126341],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126344,126345,126346],"blockquote",{},[14,126347,126348,126349,126351,126352],{},"可以理解成 ",[30,126350,126219],{}," 文件是 Linux 的 ",[480,126353,126354],{},"快捷方式配置文件",[14,126356,126357],{},"4️⃣设置可执行权限",[23,126359,126361],{"className":122069,"code":126360,"language":122071,"meta":122072,"style":28},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[30,126362,126363],{"__ignoreMap":28},[33,126364,126365],{"class":35,"line":36},[33,126366,126360],{},[14,126368,126369],{},"5️⃣桌面图标启动的话如下：",[23,126371,126373],{"className":122069,"code":126372,"language":122071,"meta":122072,"style":28},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[30,126374,126375,126380],{"__ignoreMap":28},[33,126376,126377],{"class":35,"line":36},[33,126378,126379],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[33,126381,126382],{"class":35,"line":51},[33,126383,126384],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[574,126386,126387],{"start":57},[564,126388,126389],{},"下载Appimage文件实现软件的安装",[14,126391,126392],{},"1️⃣先下载appimage",[14,126394,126395],{},[126,126396,126397],{"href":126397,"rel":126398},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25117],[14,126400,126401],{},[2918,126402],{"alt":28,"src":126403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,126405,126406],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,126408,126409],{},[2918,126410],{"alt":28,"src":126411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,126413,126414],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,126416,126417],{},[2918,126418],{"alt":28,"src":126419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,126421,126422],{},[2918,126423],{"alt":28,"src":126424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,126426,126427,126428,126431],{},"3️⃣给他们放在",[30,126429,126430],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,126433,126434],{},"4️⃣给软件执行权限",[23,126436,126438],{"className":122069,"code":126437,"language":122071,"meta":122072,"style":28},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[30,126439,126440,126445],{"__ignoreMap":28},[33,126441,126442],{"class":35,"line":36},[33,126443,126444],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[33,126446,126447],{"class":35,"line":51},[33,126448,126449],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,126451,126452],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[23,126454,126456],{"className":118549,"code":126455,"language":118551,"meta":28,"style":28},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[30,126457,126458,126465,126472,126478],{"__ignoreMap":28},[33,126459,126460,126462],{"class":35,"line":36},[33,126461,102529],{"class":76},[33,126463,126464],{"class":119}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[33,126466,126467,126469],{"class":35,"line":51},[33,126468,102536],{"class":43},[33,126470,126471],{"class":119}," .\u002Fqqmusic.desktop\n",[33,126473,126474,126476],{"class":35,"line":57},[33,126475,125520],{"class":43},[33,126477,126471],{"class":119},[33,126479,126480,126482,126484,126486],{"class":35,"line":64},[33,126481,25829],{"class":43},[33,126483,25832],{"class":119},[33,126485,124386],{"class":119},[33,126487,126471],{"class":119},[14,126489,126490,126492],{},[30,126491,102536],{},"：一个 Linux 命令，主要功能是：",[561,126494,126495,126498],{},[564,126496,126497],{},"如果文件不存在，就创建一个新的空文件",[564,126499,126500],{},"如果文件已存在，就更新该文件的最后修改时间",[23,126502,126504],{"className":122069,"code":126503,"language":122071,"meta":122072,"style":28},"[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",[30,126505,126506,126510,126515,126520,126525,126529,126534],{"__ignoreMap":28},[33,126507,126508],{"class":35,"line":36},[33,126509,126271],{},[33,126511,126512],{"class":35,"line":51},[33,126513,126514],{},"Name=QQ音乐\n",[33,126516,126517],{"class":35,"line":57},[33,126518,126519],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[33,126521,126522],{"class":35,"line":64},[33,126523,126524],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[33,126526,126527],{"class":35,"line":83},[33,126528,126281],{},[33,126530,126531],{"class":35,"line":89},[33,126532,126533],{},"Categories=Audio;Music;Player;\n",[33,126535,126536],{"class":35,"line":98},[33,126537,126538],{},"Comment=QQ Music Client for Linux\n",[14,126540,126541],{},"将文件复制进去",[14,126543,126544],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,126546,126547],{},[2918,126548],{"alt":28,"src":126549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,126551,126552],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,126554,126555],{},[2918,126556],{"alt":28,"src":126557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,126559,126560,126561,126564,126565,126568],{},"如果你用的不是KDE，那么也可以直接修改",[30,126562,126563],{},"qqmuic.desktop","：在exec的末尾加上",[30,126566,126567],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[23,126570,126572],{"className":122069,"code":126571,"language":122071,"meta":122072,"style":28},"[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",[30,126573,126574,126578,126582,126587,126591,126595,126599],{"__ignoreMap":28},[33,126575,126576],{"class":35,"line":36},[33,126577,126271],{},[33,126579,126580],{"class":35,"line":51},[33,126581,126514],{},[33,126583,126584],{"class":35,"line":57},[33,126585,126586],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[33,126588,126589],{"class":35,"line":64},[33,126590,126524],{},[33,126592,126593],{"class":35,"line":83},[33,126594,126281],{},[33,126596,126597],{"class":35,"line":89},[33,126598,126533],{},[33,126600,126601],{"class":35,"line":98},[33,126602,126538],{},[14,126604,126605],{},[2918,126606],{"alt":28,"src":126607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,126609,126610],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[23,126612,126614],{"className":122069,"code":126613,"language":122071,"meta":122072,"style":28},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[30,126615,126616],{"__ignoreMap":28},[33,126617,126618],{"class":35,"line":36},[33,126619,126613],{},[574,126621,126622],{"start":64},[564,126623,126624],{},"去Flathub上安装软件",[14,126626,126627],{},[126,126628,126629],{"href":126629,"rel":126630},"https:\u002F\u002Fflathub.org\u002F",[25117],[14,126632,126633],{},"1️⃣去上面的官网搜索软件+下载软件",[14,126635,126636],{},[2918,126637],{"alt":28,"src":126638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[23,126640,126642],{"className":122069,"code":126641,"language":122071,"meta":122072,"style":28},"flatpak install flathub com.obsproject.Studio\n",[30,126643,126644],{"__ignoreMap":28},[33,126645,126646],{"class":35,"line":36},[33,126647,126641],{},[14,126649,126650],{},[2918,126651],{"alt":28,"src":126652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,126654,126655],{},"2️⃣运行软件",[14,126657,126658],{},"a.官方方式：",[14,126660,126661],{},[2918,126662],{"alt":28,"src":126663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[23,126665,126666],{"className":122069,"code":126641,"language":122071,"meta":122072,"style":28},[30,126667,126668],{"__ignoreMap":28},[33,126669,126670],{"class":35,"line":36},[33,126671,126641],{},[14,126673,126674],{},"b.当普通软件运行：",[14,126676,126677],{},[2918,126678],{"alt":28,"src":126679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,126681,126682],{},[2918,126683],{"alt":28,"src":126684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1544,126686,126687],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"searchDepth":51,"depth":51,"links":126689},[126690,126691,126696,126697,126703,126704],{"id":123422,"depth":51,"text":123423},{"id":123764,"depth":51,"text":123765,"children":126692},[126693,126694,126695],{"id":123768,"depth":57,"text":123769},{"id":123835,"depth":57,"text":123836},{"id":124096,"depth":57,"text":124097},{"id":124249,"depth":51,"text":124250},{"id":124487,"depth":51,"text":124488,"children":126698},[126699,126700,126701,126702],{"id":124539,"depth":57,"text":124540},{"id":124825,"depth":57,"text":124826},{"id":125096,"depth":57,"text":125097},{"id":125355,"depth":57,"text":125356},{"id":125414,"depth":51,"text":125415},{"id":125715,"depth":51,"text":125716,"children":126705},[126706,126707,126708,126709,126710,126711,126712,126713],{"id":125719,"depth":57,"text":125720},{"id":125731,"depth":57,"text":125732},{"id":125943,"depth":57,"text":125944},{"id":125967,"depth":57,"text":125968},{"id":126033,"depth":57,"text":126034},{"id":126127,"depth":57,"text":126128},{"id":126134,"depth":57,"text":126135},{"id":126158,"depth":57,"text":126159},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123414,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126720,"title":126721,"body":126722,"description":24628,"extension":1557,"meta":126726,"navigation":159,"path":126727,"seo":126728,"stem":126729,"__hash__":126730},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126723,"toc":126724},[],{"title":28,"searchDepth":51,"depth":51,"links":126725},[],{"category":31516},"\u002Fwiki\u002F2025-01-27-linux",{"title":126721,"description":24628},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126732,"title":126733,"body":126734,"description":126738,"extension":1557,"meta":127129,"navigation":159,"path":127130,"seo":127131,"stem":127132,"__hash__":127133},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126735,"toc":127127},[126736,126739,126743,126760,126763,126816,126820,126822,126862,126871,126875,126878,127119,127124],[14,126737,126738],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126740,126742],{"id":126741},"_1ubuntu环境配置","1.Ubuntu环境配置",[574,126744,126745,126748,126751,126754,126757],{},[564,126746,126747],{},"ubuntu环境换源",[564,126749,126750],{},"安装cuda",[564,126752,126753],{},"安装miniconda",[564,126755,126756],{},"安装pytorch",[564,126758,126759],{},"安装genesis",[14,126761,126762],{},"参考链接：",[23,126764,126766],{"className":25074,"code":126765,"language":25076,"meta":28,"style":28},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[30,126767,126768],{"__ignoreMap":28},[33,126769,126770,126773,126776,126779,126781,126784,126787,126789,126792,126795,126797,126800,126803,126805,126808,126811,126813],{"class":35,"line":36},[33,126771,126772],{"class":43},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[33,126774,126775],{"class":119},"=blogdetail",[33,126777,126778],{"class":47},"&sharetype",[33,126780,73],{"class":39},[33,126782,126783],{"class":119},"blogdetail",[33,126785,126786],{"class":47},"&sharerId",[33,126788,73],{"class":39},[33,126790,126791],{"class":119},"144728092",[33,126793,126794],{"class":47},"&sharerefer",[33,126796,73],{"class":39},[33,126798,126799],{"class":119},"PC",[33,126801,126802],{"class":47},"&sharesource",[33,126804,73],{"class":39},[33,126806,126807],{"class":119},"qq_69379513",[33,126809,126810],{"class":47},"&sharefrom",[33,126812,73],{"class":39},[33,126814,126815],{"class":119},"from_link\n",[10,126817,126819],{"id":126818},"_2genesis-报错issue","2.Genesis 报错issue",[14,126821,126762],{},[23,126823,126824],{"className":25074,"code":126765,"language":25076,"meta":28,"style":28},[30,126825,126826],{"__ignoreMap":28},[33,126827,126828,126830,126832,126834,126836,126838,126840,126842,126844,126846,126848,126850,126852,126854,126856,126858,126860],{"class":35,"line":36},[33,126829,126772],{"class":43},[33,126831,126775],{"class":119},[33,126833,126778],{"class":47},[33,126835,73],{"class":39},[33,126837,126783],{"class":119},[33,126839,126786],{"class":47},[33,126841,73],{"class":39},[33,126843,126791],{"class":119},[33,126845,126794],{"class":47},[33,126847,73],{"class":39},[33,126849,126799],{"class":119},[33,126851,126802],{"class":47},[33,126853,73],{"class":39},[33,126855,126807],{"class":119},[33,126857,126810],{"class":47},[33,126859,73],{"class":39},[33,126861,126815],{"class":119},[23,126863,126865],{"className":25074,"code":126864,"language":25076,"meta":28,"style":28},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[30,126866,126867],{"__ignoreMap":28},[33,126868,126869],{"class":35,"line":36},[33,126870,126864],{"class":43},[10,126872,126874],{"id":126873},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,126876,126877],{},"hello_robot.py",[23,126879,126881],{"className":31631,"code":126880,"language":31633,"meta":28,"style":28},"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",[30,126882,126883,126889,126904,126908,126920,126932,126936,126949,126953,126972,126982,126992,127006,127010,127014,127019,127023,127033,127040,127054,127061,127071,127076,127080,127098,127103,127107,127114],{"__ignoreMap":28},[33,126884,126885,126887],{"class":35,"line":36},[33,126886,31645],{"class":39},[33,126888,46558],{"class":47},[33,126890,126891,126894,126897,126899,126901],{"class":35,"line":51},[33,126892,126893],{"class":47},"os.environ[",[33,126895,126896],{"class":119},"'PYOPENGL_PLATFORM'",[33,126898,5840],{"class":47},[33,126900,73],{"class":39},[33,126902,126903],{"class":119}," 'glx'\n",[33,126905,126906],{"class":35,"line":57},[33,126907,160],{"emptyLinePlaceholder":159},[33,126909,126910,126912,126915,126917],{"class":35,"line":64},[33,126911,31645],{"class":39},[33,126913,126914],{"class":47}," genesis ",[33,126916,32636],{"class":39},[33,126918,126919],{"class":47}," gs\n",[33,126921,126922,126924,126927,126929],{"class":35,"line":83},[33,126923,31990],{"class":39},[33,126925,126926],{"class":47}," pynput ",[33,126928,31645],{"class":39},[33,126930,126931],{"class":47}," keyboard\n",[33,126933,126934],{"class":35,"line":89},[33,126935,160],{"emptyLinePlaceholder":159},[33,126937,126938,126941,126944,126946],{"class":35,"line":98},[33,126939,126940],{"class":47},"gs.init(",[33,126942,126943],{"class":955},"backend",[33,126945,73],{"class":39},[33,126947,126948],{"class":47},"gs.gpu)\n",[33,126950,126951],{"class":35,"line":110},[33,126952,160],{"emptyLinePlaceholder":159},[33,126954,126955,126958,126960,126963,126966,126968,126970],{"class":35,"line":134},[33,126956,126957],{"class":47},"scene ",[33,126959,73],{"class":39},[33,126961,126962],{"class":47}," gs.Scene(",[33,126964,126965],{"class":955},"show_viewer",[33,126967,73],{"class":39},[33,126969,32729],{"class":76},[33,126971,884],{"class":47},[33,126973,126974,126977,126979],{"class":35,"line":156},[33,126975,126976],{"class":47},"plane ",[33,126978,73],{"class":39},[33,126980,126981],{"class":47}," scene.add_entity(gs.morphs.Plane())\n",[33,126983,126984,126987,126989],{"class":35,"line":163},[33,126985,126986],{"class":47},"franka ",[33,126988,73],{"class":39},[33,126990,126991],{"class":47}," scene.add_entity(\n",[33,126993,126994,126997,126999,127001,127004],{"class":35,"line":169},[33,126995,126996],{"class":47},"    gs.morphs.MJCF(",[33,126998,46607],{"class":955},[33,127000,73],{"class":39},[33,127002,127003],{"class":119},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[33,127005,39300],{"class":47},[33,127007,127008],{"class":35,"line":175},[33,127009,884],{"class":47},[33,127011,127012],{"class":35,"line":181},[33,127013,160],{"emptyLinePlaceholder":159},[33,127015,127016],{"class":35,"line":196},[33,127017,127018],{"class":47},"scene.build()\n",[33,127020,127021],{"class":35,"line":213},[33,127022,160],{"emptyLinePlaceholder":159},[33,127024,127025,127027,127030],{"class":35,"line":228},[33,127026,33200],{"class":39},[33,127028,127029],{"class":43}," on_press",[33,127031,127032],{"class":47},"(key):\n",[33,127034,127035,127038],{"class":35,"line":1345},[33,127036,127037],{"class":39},"    try",[33,127039,5141],{"class":47},[33,127041,127042,127044,127047,127049,127052],{"class":35,"line":1350},[33,127043,3915],{"class":39},[33,127045,127046],{"class":47}," key.char ",[33,127048,4359],{"class":39},[33,127050,127051],{"class":119}," 'q'",[33,127053,5141],{"class":47},[33,127055,127056,127058],{"class":35,"line":1359},[33,127057,16983],{"class":39},[33,127059,127060],{"class":76}," False\n",[33,127062,127063,127066,127069],{"class":35,"line":1364},[33,127064,127065],{"class":39},"    except",[33,127067,127068],{"class":76}," AttributeError",[33,127070,5141],{"class":47},[33,127072,127073],{"class":35,"line":1370},[33,127074,127075],{"class":39},"        pass\n",[33,127077,127078],{"class":35,"line":1425},[33,127079,160],{"emptyLinePlaceholder":159},[33,127081,127082,127085,127087,127090,127093,127095],{"class":35,"line":1438},[33,127083,127084],{"class":47},"listener ",[33,127086,73],{"class":39},[33,127088,127089],{"class":47}," keyboard.Listener(",[33,127091,127092],{"class":955},"on_press",[33,127094,73],{"class":39},[33,127096,127097],{"class":47},"on_press)\n",[33,127099,127100],{"class":35,"line":1451},[33,127101,127102],{"class":47},"listener.start()\n",[33,127104,127105],{"class":35,"line":1457},[33,127106,160],{"emptyLinePlaceholder":159},[33,127108,127109,127111],{"class":35,"line":1466},[33,127110,109916],{"class":39},[33,127112,127113],{"class":47}," listener.running:\n",[33,127115,127116],{"class":35,"line":1471},[33,127117,127118],{"class":47},"    scene.step()\n",[14,127120,127121],{},[2918,127122],{"alt":28,"src":127123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1544,127125,127126],{},"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":28,"searchDepth":51,"depth":51,"links":127128},[],{"category":24630},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126733,"description":126738},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127135,"title":127136,"body":127137,"description":24628,"extension":1557,"meta":127152,"navigation":159,"path":127153,"seo":127154,"stem":127155,"__hash__":127156},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127138,"toc":127149},[127139,127142,127146],[10,127140,127136],{"id":127141},"_1-基础知识",[18,127143,127145],{"id":127144},"_11-js的组成","1.1 js的组成",[14,127147,127148],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":28,"searchDepth":51,"depth":51,"links":127150},[127151],{"id":127144,"depth":51,"text":127145},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127136,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127158,"title":127159,"body":127160,"description":24628,"extension":1557,"meta":127299,"navigation":159,"path":127300,"seo":127301,"stem":127302,"__hash__":127303},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127161,"toc":127287},[127162,127165,127169,127172,127176,127186,127190,127193,127196,127199,127203,127210,127216,127220,127226,127237,127241,127244,127248,127251,127255,127258,127262,127265,127269,127272,127275,127278,127281,127284],[10,127163,127159],{"id":127164},"_2-vscode必备内容",[18,127166,127168],{"id":127167},"_21-标签分类","2.1 标签分类",[14,127170,127171],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[18,127173,127175],{"id":127174},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,127177,127178,127179,127181,127182,127185],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[30,127180,1842],{}," 然后按 ",[30,127183,127184],{},"Tab","，快速自动生成基本结构。",[18,127187,127189],{"id":127188},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,127191,127192],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,127194,127195],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,127197,127198],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[18,127200,127202],{"id":127201},"_24-视图缩放","2.4 视图缩放",[14,127204,127205,127206,127209],{},"缩放视图 ",[30,127207,127208],{},"ctrl+"," 可实现代码增大。",[14,127211,127212,127215],{},[30,127213,127214],{},"ctrl-"," 可实现代码减小。",[18,127217,127219],{"id":127218},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,127221,127222,127223,29638],{},"VSCode 新建文件快捷键为 ",[30,127224,127225],{},"ctrl+N",[14,127227,127228,127229,127232,127233,127236],{},"保存快捷键为 ",[30,127230,127231],{},"ctrl+S","，将文本保存为 ",[30,127234,127235],{},".html"," 文件。",[18,127238,127240],{"id":127239},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,127242,127243],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[18,127245,127247],{"id":127246},"_27-vscode-icons","2.7 vscode-icons",[14,127249,127250],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[18,127252,127254],{"id":127253},"_28-easy-less","2.8 Easy LESS",[14,127256,127257],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[18,127259,127261],{"id":127260},"_29-会了吧插件","2.9 会了吧插件",[14,127263,127264],{},"会了吧插件可以展示代码中英语单词的意思。",[18,127266,127268],{"id":127267},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,127270,127271],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,127273,127274],{},"②选定多个相同的单词:ctrl+D",[14,127276,127277],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,127279,127280],{},"④全局替换某些单词:ctrl+h",[14,127282,127283],{},"⑤快速定位到某一行:ctrl+g",[14,127285,127286],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":28,"searchDepth":51,"depth":51,"links":127288},[127289,127290,127291,127292,127293,127294,127295,127296,127297,127298],{"id":127167,"depth":51,"text":127168},{"id":127174,"depth":51,"text":127175},{"id":127188,"depth":51,"text":127189},{"id":127201,"depth":51,"text":127202},{"id":127218,"depth":51,"text":127219},{"id":127239,"depth":51,"text":127240},{"id":127246,"depth":51,"text":127247},{"id":127253,"depth":51,"text":127254},{"id":127260,"depth":51,"text":127261},{"id":127267,"depth":51,"text":127268},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127159,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127305,"title":127306,"body":127307,"description":24628,"extension":1557,"meta":127466,"navigation":159,"path":127467,"seo":127468,"stem":127469,"__hash__":127470},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127308,"toc":127458},[127309,127312,127316,127326,127332,127338,127342,127351,127355,127360,127363,127366,127370,127373,127383,127392,127401,127410,127420,127427,127432,127437,127450],[10,127310,127306],{"id":127311},"_3-html文本与容器标签",[18,127313,127315],{"id":127314},"_31-标题标签","3.1 标题标签",[14,127317,127318,127321,127322,127325],{},[30,127319,127320],{},"\u003Ch1>","我是一级标签",[30,127323,127324],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,127327,127328,127321,127330],{},[30,127329,127320],{},[30,127331,127324],{},[14,127333,124588,127334,127337],{},[30,127335,127336],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[18,127339,127341],{"id":127340},"_32-段落标签","3.2 段落标签",[14,127343,127344,127347,127348],{},[30,127345,127346],{},"\u003Cp>","....",[30,127349,127350],{},"\u003C\u002Fp>",[18,127352,127354],{"id":127353},"_33-换行标签","3.3 换行标签",[14,127356,127357],{},[30,127358,127359],{},"\u003Cbr \u002F>",[14,127361,127362],{},"具有强制换行的作用",[14,127364,127365],{},"单标签",[18,127367,127369],{"id":127368},"_34-文本格式化标签","3.4 文本格式化标签",[14,127371,127372],{},"提供粗体、斜体和下划线等效果",[14,127374,127375,127376,83792,127379,127382],{},"加粗：",[30,127377,127378],{},"\u003Cstrong>...\u003C\u002Fstrong>",[30,127380,127381],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,127384,127385,127386,83792,127389,127382],{},"斜体：",[30,127387,127388],{},"\u003Cem>...\u003C\u002Fem>",[30,127390,127391],{},"\u003Ci>...\u003C\u002Fi>",[14,127393,127394,127395,83792,127398,127382],{},"删除线：",[30,127396,127397],{},"\u003Cdel>...\u003C\u002Fdel>",[30,127399,127400],{},"\u003Cs>...\u003C\u002Fs>",[14,127402,127403,127404,83792,127407,127382],{},"下划线：",[30,127405,127406],{},"\u003Cins>...\u003C\u002Fins>",[30,127408,127409],{},"\u003Cu>...\u003C\u002Fu>",[18,127411,127413,127414,19661,127417,103946],{"id":127412},"_35-div和span标签","3.5 ",[30,127415,127416],{},"\u003Cdiv>",[30,127418,127419],{},"\u003Cspan>",[14,127421,127422,102271,127424,127426],{},[30,127423,127416],{},[30,127425,127419],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,127428,127429],{},[30,127430,127431],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,127433,127434],{},[30,127435,127436],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,127438,127439,127440,127442,127443,127445,127446,127449],{},"两者特点：①",[30,127441,127416],{}," 标签用来布局，但一行通常只放一个 ",[30,127444,127416],{},"。可以理解为一个大盒子，独占一行，在 ",[30,127447,127448],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,127451,78502,127452,127454,127455,127457],{},[30,127453,127419],{}," 标签也可用于布局，一行可以放多个 ",[30,127456,127419],{},"，可理解为小盒子。",{"title":28,"searchDepth":51,"depth":51,"links":127459},[127460,127461,127462,127463,127464],{"id":127314,"depth":51,"text":127315},{"id":127340,"depth":51,"text":127341},{"id":127353,"depth":51,"text":127354},{"id":127368,"depth":51,"text":127369},{"id":127412,"depth":51,"text":127465},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127306,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127472,"title":127473,"body":127474,"description":24628,"extension":1557,"meta":127671,"navigation":159,"path":127672,"seo":127673,"stem":127674,"__hash__":127675},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127475,"toc":127663},[127476,127479,127483,127486,127492,127499,127505,127511,127514,127517,127520,127523,127526,127529,127532,127536,127539,127542,127545,127551,127557,127563,127570,127574,127580,127586,127589,127592,127598,127604,127610,127613,127616,127620,127623,127633,127639,127643,127652,127656,127659],[10,127477,127473],{"id":127478},"_4-html图像与链接",[18,127480,127482],{"id":127481},"_41-图像标签","4.1 图像标签",[14,127484,127485],{},"（1）标签",[14,127487,127488,127491],{},[30,127489,127490],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,127493,127494,127495,127498],{},"src是",[30,127496,127497],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,127500,127501,127502],{},"alt:文本，替换文本。图像不能显示的文字 ",[30,127503,127504],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,127506,127507,127508],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[30,127509,127510],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,127512,127513],{},"width:像素，设置图像的宽度",[14,127515,127516],{},"height:像素，设置图像的高度",[14,127518,127519],{},"border：像素，设置图像的边框粗细",[14,127521,127522],{},"（2）图像标签属性的注意点：",[14,127524,127525],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,127527,127528],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,127530,127531],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[18,127533,127535],{"id":127534},"_42-路径注意要点","4.2 路径注意要点：",[14,127537,127538],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,127540,127541],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,127543,127544],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,127546,127547,127548],{},"①同一级路径：图像文件位于HTML文件同一级，如",[30,127549,127550],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,127552,127553,127554],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[30,127555,127556],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,127558,127559,127560],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[30,127561,127562],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,127564,127565,127566,1866],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[126,127567,127568],{"href":127568,"rel":127569},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25117],[18,127571,127573],{"id":127572},"_43-超链接标签","4.3 超链接标签",[14,127575,127576,127579],{},[30,127577,127578],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,127581,127582,127583],{},"①语法格式：",[30,127584,127585],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,127587,127588],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,127590,127591],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,127593,127594,127595],{},"③链接分类：外部链接：",[30,127596,127597],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,127599,127600,127601],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[30,127602,127603],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,127605,127606,127607],{},"空链接：如果当时没有确定链接目标时，",[30,127608,127609],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,127611,127612],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,127614,127615],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[18,127617,127619],{"id":127618},"_44-锚点链接","4.4 锚点链接",[14,127621,127622],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,127624,127625,127626,127629,127630],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[30,127627,127628],{},"\u003Ca href=\"#two\">","第二级",[30,127631,127632],{},"\u003C\u002Fa>",[14,127634,127635,127636],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[30,127637,127638],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[18,127640,127642],{"id":127641},"_45-注释标签","4.5 注释标签",[14,127644,127645,127648,127649],{},[30,127646,127647],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[30,127650,127651],{},"ctrl+\u002F",[18,127653,127655],{"id":127654},"_46-特殊字符","4.6 特殊字符",[14,127657,127658],{},"可以实现添加多个空格",[2918,127660],{"style":127661,"src":127662},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":28,"searchDepth":51,"depth":51,"links":127664},[127665,127666,127667,127668,127669,127670],{"id":127481,"depth":51,"text":127482},{"id":127534,"depth":51,"text":127535},{"id":127572,"depth":51,"text":127573},{"id":127618,"depth":51,"text":127619},{"id":127641,"depth":51,"text":127642},{"id":127654,"depth":51,"text":127655},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127473,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127677,"title":127678,"body":127679,"description":24628,"extension":1557,"meta":127972,"navigation":159,"path":127973,"seo":127974,"stem":127975,"__hash__":127976},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127680,"toc":127963},[127681,127684,127688,127691,127694,127697,127700,127703,127706,127709,127712,127715,127735,127741,127745,127748,127751,127754,127757,127760,127763,127767,127770,127773,127776,127779,127792,127797,127800,127803,127818,127821,127824,127827,127830,127833,127837,127840,127847,127850,127853,127856,127859,127862,127868,127871,127874,127880,127883,127886,127889,127895,127898,127901,127915,127922,127925,127928,127935,127944,127947,127950,127953,127957,127960],[10,127682,127678],{"id":127683},"_5-html表格列表与表单",[18,127685,127687],{"id":127686},"_51-表格标签","5.1 表格标签",[14,127689,127690],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,127692,127693],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,127695,127696],{},"②表格基本语法：",[2918,127698],{"style":127661,"src":127699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,127701,127702],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2918,127704],{"style":127661,"src":127705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,127707,127708],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2918,127710],{"style":127661,"src":127711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,127713,127714],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,127716,127717,127720,127721,127723,127724,127727,127728,127730,127731,127734],{},[30,127718,127719],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[30,127722,127719],{},"内部必须拥有",[30,127725,127726],{},"\u003Ctr>","标签，一般位于第一行，",[30,127729,127719],{},"比",[30,127732,127733],{},"\u003Cth>","范围广",[14,127736,127737,127740],{},[30,127738,127739],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[18,127742,127744],{"id":127743},"_52-合并单元格","5.2 合并单元格",[14,127746,127747],{},"（1）合并单元格方式：",[14,127749,127750],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,127752,127753],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,127755,127756],{},"（2）目标单元格：",[14,127758,127759],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,127761,127762],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[18,127764,127766],{"id":127765},"_53-列表标签","5.3 列表标签",[14,127768,127769],{},"（1）分类：无序列表、有序列表、自定义列表",[14,127771,127772],{},"①无序列表：",[2918,127774],{"style":127661,"src":127775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,127777,127778],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,127780,127781,127784,127785,127788,127789,127791],{},[30,127782,127783],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[30,127786,127787],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[30,127790,127783],{},"中输入其他标签或文字是不对的",[14,127793,127794,127796],{},[30,127795,127787],{},"之间相当于一个容器，可以容纳所有元素",[14,127798,127799],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,127801,127802],{},"在css中去除前边的小圆点采用如下代码:",[23,127804,127808],{"className":127805,"code":127806,"language":127807,"meta":28,"style":28},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[30,127809,127810],{"__ignoreMap":28},[33,127811,127812,127815],{"class":35,"line":36},[33,127813,127814],{"class":52553},"list-style",[33,127816,127817],{"class":47},": none;\n",[14,127819,127820],{},"②有序列表：",[2918,127822],{"style":127661,"src":127823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,127825,127826],{},"③自定义列表：",[2918,127828],{"style":127661,"src":127829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2918,127831],{"style":127661,"src":127832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[18,127834,127836],{"id":127835},"_54-表单标签","5.4 表单标签",[14,127838,127839],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,127841,127842,127843,127846],{},"（1）表单域：包含单元素的区域，",[30,127844,127845],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2918,127848],{"style":127661,"src":127849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,127851,127852],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,127854,127855],{},"表单元素提交必须有name属性",[14,127857,127858],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,127860,127861],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,127863,78479,127864,127867],{},[30,127865,127866],{},"\u003Cinput>","输入表单元素",[2918,127869],{"style":127661,"src":127870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2918,127872],{"style":127661,"src":127873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,127875,127876,127877],{},"单选按钮：",[30,127878,127879],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2918,127881],{"style":127661,"src":127882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,127884,127885],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2918,127887],{"style":127661,"src":127888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,127890,127891,127894],{},[480,127892,127893],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,127896,127897],{},"②select下拉表单元素：可以节约页面控件",[2918,127899],{"style":127661,"src":127900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,127902,127903,15046,127905,127908,127909,127911,127912,127914],{},[480,127904,1656],{},[30,127906,127907],{},"\u003Cselect>","中至少包含一对",[30,127910,103967],{},"；在",[30,127913,103967],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,127916,127917,127918,127921],{},"③",[30,127919,127920],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2918,127923],{"style":127661,"src":127924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,127926,127927],{},"3行20列",[18,127929,127931,127932,103946],{"id":127930},"_55-lable标签","5.5 ",[30,127933,127934],{},"\u003Clable>",[14,127936,127937,127938,127940,127941,127943],{},"它不是表单标签，但常常与表单标签搭配使用，",[30,127939,127934],{},"标签用于绑定一个表单标签，当点击",[30,127942,127934],{},"标签内的文本",[14,127945,127946],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2918,127948],{"style":127661,"src":127949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2918,127951],{"style":127661,"src":127952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[18,127954,127956],{"id":127955},"_56-实例","5.6 实例",[2918,127958],{"style":127661,"src":127959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1544,127961,127962],{},"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":28,"searchDepth":51,"depth":51,"links":127964},[127965,127966,127967,127968,127969,127971],{"id":127686,"depth":51,"text":127687},{"id":127743,"depth":51,"text":127744},{"id":127765,"depth":51,"text":127766},{"id":127835,"depth":51,"text":127836},{"id":127930,"depth":51,"text":127970},"5.5 \u003Clable>标签",{"id":127955,"depth":51,"text":127956},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127678,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127978,"title":127979,"body":127980,"description":24628,"extension":1557,"meta":128529,"navigation":159,"path":128530,"seo":128531,"stem":128532,"__hash__":128533},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127981,"toc":128504},[127982,127985,127989,127992,127995,127999,128002,128005,128008,128011,128014,128017,128020,128024,128027,128031,128034,128037,128040,128044,128047,128050,128053,128059,128062,128065,128068,128071,128074,128077,128080,128113,128117,128120,128123,128126,128130,128133,128136,128139,128142,128145,128149,128152,128155,128158,128162,128165,128169,128172,128176,128179,128184,128188,128191,128195,128198,128201,128204,128207,128234,128237,128241,128244,128247,128252,128255,128258,128262,128265,128270,128273,128276,128279,128283,128286,128289,128292,128296,128299,128302,128305,128309,128313,128316,128356,128359,128363,128370,128373,128377,128380,128426,128430,128433,128436,128439,128467,128471,128474,128501],[10,127983,127979],{"id":127984},"_6-css语法与文本样式",[18,127986,127988],{"id":127987},"_61-css语法规范","6.1 css语法规范",[14,127990,127991],{},"由两部分组成，选择器及一条或多条声明",[2918,127993],{"style":127661,"src":127994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127996,127997],{},[480,127998,1656],{},[14,128000,128001],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,128003,128004],{},"②属性与属性值以“键值对”的形式出现",[14,128006,128007],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,128009,128010],{},"④属性和属性值之间用英文“;”分开",[2918,128012],{"style":127661,"src":128013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2918,128015],{"style":127661,"src":128016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2918,128018],{"style":127661,"src":128019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[18,128021,128023],{"id":128022},"_62-css选择器","6.2 css选择器",[14,128025,128026],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[1599,128028,128030],{"id":128029},"_621-标签选择器","6.2.1 标签选择器",[14,128032,128033],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,128035,128036],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2918,128038],{"style":127661,"src":128039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[1599,128041,128043],{"id":128042},"_622-类选择器","6.2.2 类选择器",[14,128045,128046],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,128048,128049],{},"②样例",[2918,128051],{"style":127661,"src":128052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,128054,128055,128056,128058],{},"③ ",[480,128057,127893],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,128060,128061],{},"可以理解为给这个标签起了个名字，来表示；",[14,128063,128064],{},"长名称或词组可以使用横线来为选择器命名；",[14,128066,128067],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,128069,128070],{},"命名要有意义；",[2918,128072],{"style":127661,"src":128073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,128075,128076],{},"类选择器也可以指定特殊的元素p.center{}",[14,128078,128079],{},"p.center和.center都对",[23,128081,128083],{"className":127805,"code":128082,"language":127807,"meta":28,"style":28},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[30,128084,128085,128090,128099,128109],{"__ignoreMap":28},[33,128086,128087],{"class":35,"line":36},[33,128088,128089],{"class":60},"\u002F* 类选择器指定特殊元素 *\u002F\n",[33,128091,128092,128094,128097],{"class":35,"line":51},[33,128093,14],{"class":52553},[33,128095,128096],{"class":43},".center",[33,128098,16823],{"class":47},[33,128100,128101,128103,128105,128107],{"class":35,"line":57},[33,128102,71779],{"class":76},[33,128104,52690],{"class":47},[33,128106,52845],{"class":76},[33,128108,80],{"class":47},[33,128110,128111],{"class":35,"line":64},[33,128112,231],{"class":47},[1599,128114,128116],{"id":128115},"_623-多类名使用","6.2.3 多类名使用",[14,128118,128119],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2918,128121],{"style":127661,"src":128122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,128124,128125],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[1599,128127,128129],{"id":128128},"_624-id选择器","6.2.4 id选择器",[14,128131,128132],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,128134,128135],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2918,128137],{"style":127661,"src":128138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,128140,128141],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,128143,128144],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[1599,128146,128148],{"id":128147},"_625-通配符选择器","6.2.5 通配符选择器",[14,128150,128151],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,128153,128154],{},"* {",[14,128156,128157],{},"color=\"red\"}",[1599,128159,128161],{"id":128160},"_626-总结","6.2.6 总结",[2918,128163],{"style":127661,"src":128164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[18,128166,128168],{"id":128167},"_63-css字体属性","6.3 css字体属性",[14,128170,128171],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[1599,128173,128175],{"id":128174},"_631-字体系列","6.3.1 字体系列",[14,128177,128178],{},"font-family: '宋体';",[14,128180,128181,128183],{},[480,128182,1656],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[1599,128185,128187],{"id":128186},"_632-字体大小","6.3.2 字体大小",[14,128189,128190],{},"font-size: 20px",[14,128192,128193,27726],{},[480,128194,127893],{},[14,128196,128197],{},"①px（像素）大小是网页的最常用单位",[14,128199,128200],{},"②谷歌浏览器默认为16px",[14,128202,128203],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,128205,128206],{},"④可以给body指定整个页面的大小：会自动引用",[23,128208,128210],{"className":127805,"code":128209,"language":127807,"meta":28,"style":28},"body {\n  font-size: 16px;\n}\n",[30,128211,128212,128218,128230],{"__ignoreMap":28},[33,128213,128214,128216],{"class":35,"line":36},[33,128215,53053],{"class":52553},[33,128217,16823],{"class":47},[33,128219,128220,128222,128224,128226,128228],{"class":35,"line":51},[33,128221,71879],{"class":76},[33,128223,52690],{"class":47},[33,128225,2201],{"class":76},[33,128227,52745],{"class":39},[33,128229,80],{"class":47},[33,128231,128232],{"class":35,"line":57},[33,128233,231],{"class":47},[14,128235,128236],{},"⑤标题标签比较特殊，需要单独指定大小",[1599,128238,128240],{"id":128239},"_633-字体粗细","6.3.3 字体粗细",[14,128242,128243],{},"font-weight: bold;",[14,128245,128246],{},"font-weight: 100；",[14,128248,128249,128251],{},[480,128250,1656],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,128253,128254],{},"font-weight= 400;",[14,128256,128257],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[1599,128259,128261],{"id":128260},"_634-文字样式","6.3.4 文字样式",[14,128263,128264],{},"font-style: normal；",[14,128266,128267,27726],{},[480,128268,128269],{},"属性值",[14,128271,128272],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,128274,128275],{},"②italic：浏览器会显示斜体的字体样式",[2918,128277],{"style":127661,"src":128278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[1599,128280,128282],{"id":128281},"_635-字体符合属性","6.3.5 字体符合属性",[2918,128284],{"style":127661,"src":128285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2918,128287],{"style":127661,"src":128288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,128290,128291],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,128293,128294,27726],{},[480,128295,127893],{},[14,128297,128298],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,128300,128301],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,128303,128304],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[18,128306,128308],{"id":128307},"_64-css-test文本属性","6.4 css test文本属性",[1599,128310,128312],{"id":128311},"_641-文本颜色","6.4.1 文本颜色",[14,128314,128315],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[23,128317,128319],{"className":127805,"code":128318,"language":127807,"meta":28,"style":28},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[30,128320,128321,128326,128332,128342,128347,128352],{"__ignoreMap":28},[33,128322,128323],{"class":35,"line":36},[33,128324,128325],{"class":60},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[33,128327,128328,128330],{"class":35,"line":51},[33,128329,14],{"class":52553},[33,128331,16823],{"class":47},[33,128333,128334,128336,128338,128340],{"class":35,"line":57},[33,128335,72158],{"class":76},[33,128337,52690],{"class":47},[33,128339,58674],{"class":76},[33,128341,80],{"class":47},[33,128343,128344],{"class":35,"line":64},[33,128345,128346],{"class":60},"  \u002F* color: #ff0000; *\u002F\n",[33,128348,128349],{"class":35,"line":83},[33,128350,128351],{"class":60},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[33,128353,128354],{"class":35,"line":89},[33,128355,231],{"class":47},[2918,128357],{"style":127661,"src":128358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[1599,128360,128362],{"id":128361},"_642-对齐文本","6.4.2 对齐文本",[14,128364,128365,128366,128369],{},"text-align属于用于设置元素内文本内容的 ",[480,128367,128368],{},"水平对齐"," 方式",[14,128371,128372],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[1599,128374,128376],{"id":128375},"_643-装饰文本","6.4.3 装饰文本",[14,128378,128379],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[23,128381,128383],{"className":127805,"code":128382,"language":127807,"meta":28,"style":28},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[30,128384,128385,128391,128401,128405,128411,128422],{"__ignoreMap":28},[33,128386,128387,128389],{"class":35,"line":36},[33,128388,126],{"class":52553},[33,128390,16823],{"class":47},[33,128392,128393,128395,128397,128399],{"class":35,"line":51},[33,128394,71755],{"class":76},[33,128396,52690],{"class":47},[33,128398,55990],{"class":76},[33,128400,80],{"class":47},[33,128402,128403],{"class":35,"line":57},[33,128404,231],{"class":47},[33,128406,128407,128409],{"class":35,"line":64},[33,128408,14],{"class":52553},[33,128410,16823],{"class":47},[33,128412,128413,128415,128417,128420],{"class":35,"line":83},[33,128414,71755],{"class":76},[33,128416,52690],{"class":47},[33,128418,128419],{"class":76},"underline",[33,128421,80],{"class":47},[33,128423,128424],{"class":35,"line":89},[33,128425,231],{"class":47},[1599,128427,128429],{"id":128428},"_644-文本缩进","6.4.4 文本缩进",[14,128431,128432],{},"实现文本的第一行首行缩进自己指定的距离",[14,128434,128435],{},"20px往右边走；-20px往左边走",[14,128437,128438],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[23,128440,128442],{"className":127805,"code":128441,"language":127807,"meta":28,"style":28},"p {\n  text-indent: 2em;\n}\n",[30,128443,128444,128450,128463],{"__ignoreMap":28},[33,128445,128446,128448],{"class":35,"line":36},[33,128447,14],{"class":52553},[33,128449,16823],{"class":47},[33,128451,128452,128455,128457,128459,128461],{"class":35,"line":51},[33,128453,128454],{"class":76},"  text-indent",[33,128456,52690],{"class":47},[33,128458,707],{"class":76},[33,128460,24805],{"class":39},[33,128462,80],{"class":47},[33,128464,128465],{"class":35,"line":57},[33,128466,231],{"class":47},[1599,128468,128470],{"id":128469},"_645-行间距","6.4.5 行间距",[14,128472,128473],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[23,128475,128477],{"className":127805,"code":128476,"language":127807,"meta":28,"style":28},"p {\n  line-height: 1.6;\n}\n",[30,128478,128479,128485,128497],{"__ignoreMap":28},[33,128480,128481,128483],{"class":35,"line":36},[33,128482,14],{"class":52553},[33,128484,16823],{"class":47},[33,128486,128487,128490,128492,128495],{"class":35,"line":51},[33,128488,128489],{"class":76},"  line-height",[33,128491,52690],{"class":47},[33,128493,128494],{"class":76},"1.6",[33,128496,80],{"class":47},[33,128498,128499],{"class":35,"line":57},[33,128500,231],{"class":47},[1544,128502,128503],{},"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":28,"searchDepth":51,"depth":51,"links":128505},[128506,128507,128515,128522],{"id":127987,"depth":51,"text":127988},{"id":128022,"depth":51,"text":128023,"children":128508},[128509,128510,128511,128512,128513,128514],{"id":128029,"depth":57,"text":128030},{"id":128042,"depth":57,"text":128043},{"id":128115,"depth":57,"text":128116},{"id":128128,"depth":57,"text":128129},{"id":128147,"depth":57,"text":128148},{"id":128160,"depth":57,"text":128161},{"id":128167,"depth":51,"text":128168,"children":128516},[128517,128518,128519,128520,128521],{"id":128174,"depth":57,"text":128175},{"id":128186,"depth":57,"text":128187},{"id":128239,"depth":57,"text":128240},{"id":128260,"depth":57,"text":128261},{"id":128281,"depth":57,"text":128282},{"id":128307,"depth":51,"text":128308,"children":128523},[128524,128525,128526,128527,128528],{"id":128311,"depth":57,"text":128312},{"id":128361,"depth":57,"text":128362},{"id":128375,"depth":57,"text":128376},{"id":128428,"depth":57,"text":128429},{"id":128469,"depth":57,"text":128470},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127979,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128535,"title":128536,"body":128537,"description":24628,"extension":1557,"meta":129186,"navigation":159,"path":129187,"seo":129188,"stem":129189,"__hash__":129190},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128538,"toc":129167},[128539,128542,128546,128550,128610,128614,128624,128627,128630,128634,128659,128663,128666,128669,128672,128675,128678,128682,128685,128688,128730,128733,128759,128765,128768,128772,128776,128782,128785,128788,128791,128794,128797,128800,128845,128849,128852,128855,128859,128863,128892,128895,128900,128903,128906,128909,128912,128916,128920,128923,128925,128928,128932,128935,128939,128942,128945,128948,128952,128956,128962,128972,128975,128978,128981,128984,128987,129110,129118,129126,129164],[10,128540,128536],{"id":128541},"_7-css引入方式与选择器进阶",[18,128543,128545],{"id":128544},"_71-css引入方式","7.1 css引入方式",[1599,128547,128549],{"id":128548},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[23,128551,128555],{"className":128552,"code":128553,"language":128554,"meta":28,"style":28},"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",[30,128556,128557,128565,128572,128584,128597,128602],{"__ignoreMap":28},[33,128558,128559,128561,128563],{"class":35,"line":36},[33,128560,875],{"class":47},[33,128562,1544],{"class":52553},[33,128564,52560],{"class":47},[33,128566,128567,128570],{"class":35,"line":51},[33,128568,128569],{"class":52553},"  h1",[33,128571,16823],{"class":47},[33,128573,128574,128577,128579,128582],{"class":35,"line":57},[33,128575,128576],{"class":76},"    color",[33,128578,52690],{"class":47},[33,128580,128581],{"class":76},"blue",[33,128583,80],{"class":47},[33,128585,128586,128589,128591,128593,128595],{"class":35,"line":64},[33,128587,128588],{"class":76},"    font-size",[33,128590,52690],{"class":47},[33,128592,2399],{"class":76},[33,128594,52745],{"class":39},[33,128596,80],{"class":47},[33,128598,128599],{"class":35,"line":83},[33,128600,128601],{"class":47},"  }\n",[33,128603,128604,128606,128608],{"class":35,"line":89},[33,128605,53038],{"class":47},[33,128607,1544],{"class":52553},[33,128609,52560],{"class":47},[14,128611,128612,27726],{},[480,128613,127893],{},[14,128615,78479,128616,128619,128620,128623],{},[30,128617,128618],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[30,128621,128622],{},"\u003Chead>","标签中",[14,128625,128626],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,128628,128629],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[1599,128631,128633],{"id":128632},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[23,128635,128637],{"className":128552,"code":128636,"language":128554,"meta":28,"style":28},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[30,128638,128639],{"__ignoreMap":28},[33,128640,128641,128643,128645,128647,128649,128652,128655,128657],{"class":35,"line":36},[33,128642,875],{"class":47},[33,128644,14],{"class":52553},[33,128646,63879],{"class":43},[33,128648,73],{"class":47},[33,128650,128651],{"class":119},"\"color: red; font-size: 16px;\"",[33,128653,128654],{"class":47},">这是一个段落\u003C\u002F",[33,128656,14],{"class":52553},[33,128658,52560],{"class":47},[14,128660,128661,27726],{},[480,128662,127893],{},[14,128664,128665],{},"①style其实就是标签的属性",[14,128667,128668],{},"②在双引号中间，写法要符合css规范",[14,128670,128671],{},"③可以控制当前的标签设置样式",[14,128673,128674],{},"④书写繁琐，简单时才用",[14,128676,128677],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[1599,128679,128681],{"id":128680},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,128683,128684],{},"使用最多，单独建一个css文件，然后html引用",[14,128686,128687],{},"①css文件部分： style.css",[23,128689,128691],{"className":127805,"code":128690,"language":127807,"meta":28,"style":28},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[30,128692,128693,128698,128704,128714,128726],{"__ignoreMap":28},[33,128694,128695],{"class":35,"line":36},[33,128696,128697],{"class":60},"\u002F* style.css *\u002F\n",[33,128699,128700,128702],{"class":35,"line":51},[33,128701,10],{"class":52553},[33,128703,16823],{"class":47},[33,128705,128706,128708,128710,128712],{"class":35,"line":57},[33,128707,72158],{"class":76},[33,128709,52690],{"class":47},[33,128711,128581],{"class":76},[33,128713,80],{"class":47},[33,128715,128716,128718,128720,128722,128724],{"class":35,"line":64},[33,128717,71879],{"class":76},[33,128719,52690],{"class":47},[33,128721,2399],{"class":76},[33,128723,52745],{"class":39},[33,128725,80],{"class":47},[33,128727,128728],{"class":35,"line":83},[33,128729,231],{"class":47},[14,128731,128732],{},"②html部分",[23,128734,128736],{"className":128552,"code":128735,"language":128554,"meta":28,"style":28},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[30,128737,128738],{"__ignoreMap":28},[33,128739,128740,128742,128744,128746,128748,128750,128752,128754,128757],{"class":35,"line":36},[33,128741,875],{"class":47},[33,128743,70258],{"class":52553},[33,128745,70261],{"class":43},[33,128747,73],{"class":47},[33,128749,70266],{"class":119},[33,128751,62310],{"class":43},[33,128753,73],{"class":47},[33,128755,128756],{"class":119},"\"style.css\"",[33,128758,52560],{"class":47},[14,128760,128761,128764],{},[30,128762,128763],{},"\u003Chr>","水平线标签（但是不常用！）",[14,128766,128767],{},"ctrl+0回到页面原来大小",[18,128769,128771],{"id":128770},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[1599,128773,128775],{"id":128774},"_721-快速生成html","7.2.1 快速生成html",[14,128777,128778,128779],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[30,128780,128781],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,128783,128784],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,128786,128787],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,128789,128790],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,128792,128793],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,128795,128796],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,128798,128799],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[23,128801,128803],{"className":128552,"code":128802,"language":128554,"meta":28,"style":28},"\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",[30,128804,128805,128810,128815,128820,128825,128830,128835,128840],{"__ignoreMap":28},[33,128806,128807],{"class":35,"line":36},[33,128808,128809],{"class":60},"\u003C!-- Emmet 语法示例 -->\n",[33,128811,128812],{"class":35,"line":51},[33,128813,128814],{"class":60},"\u003C!-- div*3        → 生成3个div -->\n",[33,128816,128817],{"class":35,"line":57},[33,128818,128819],{"class":60},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[33,128821,128822],{"class":35,"line":64},[33,128823,128824],{"class":60},"\u003C!-- div+p        → 兄弟div和p -->\n",[33,128826,128827],{"class":35,"line":83},[33,128828,128829],{"class":60},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[33,128831,128832],{"class":35,"line":89},[33,128833,128834],{"class":60},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[33,128836,128837],{"class":35,"line":98},[33,128838,128839],{"class":60},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[33,128841,128842],{"class":35,"line":110},[33,128843,128844],{"class":60},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[1599,128846,128848],{"id":128847},"_722-快速生成css","7.2.2 快速生成css",[14,128850,128851],{},"简写开头",[14,128853,128854],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[18,128856,128858],{"id":128857},"_73-css复合选择器","7.3 css复合选择器",[1599,128860,128862],{"id":128861},"_731-后代选择器","7.3.1 后代选择器",[23,128864,128866],{"className":127805,"code":128865,"language":127807,"meta":28,"style":28},".parent .child {\n  color: blue;\n}\n",[30,128867,128868,128878,128888],{"__ignoreMap":28},[33,128869,128870,128873,128876],{"class":35,"line":36},[33,128871,128872],{"class":43},".parent",[33,128874,128875],{"class":43}," .child",[33,128877,16823],{"class":47},[33,128879,128880,128882,128884,128886],{"class":35,"line":51},[33,128881,72158],{"class":76},[33,128883,52690],{"class":47},[33,128885,128581],{"class":76},[33,128887,80],{"class":47},[33,128889,128890],{"class":35,"line":57},[33,128891,231],{"class":47},[14,128893,128894],{},"元素1 元素2 {样式声明}",[14,128896,128897],{},[480,128898,128899],{},"注意点:",[14,128901,128902],{},"①元素1和元素2中间用空格隔开",[14,128904,128905],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,128907,128908],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,128910,128911],{},"④元素1和元素2可以是任意基础选择器",[1599,128913,128915],{"id":128914},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,128917,128918],{},[480,128919,128899],{},[14,128921,128922],{},"①元素1和元素2中间用大于号隔开",[14,128924,128905],{},[14,128926,128927],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[1599,128929,128931],{"id":128930},"_733-并集选择器","7.3.3 并集选择器",[14,128933,128934],{},"元素1，元素2 {样式声明}",[14,128936,128937],{},[480,128938,128899],{},[14,128940,128941],{},"①元素1和元素2中间用逗号隔开",[14,128943,128944],{},"②逗号可以理解为和的意思",[14,128946,128947],{},"③并集选择器通常用于集体声明",[1599,128949,128951],{"id":128950},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,128953,128954],{},[480,128955,128899],{},[14,128957,128958,128959,128961],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70258,128960],{},"－:visited－:hover－:active。",[14,128963,128964,128965,128968,128969,26993],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128966,128967],"hover",{}," 、 ",[128970,128971],"first-child",{},[14,128973,128974],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128976,128977],{},"link对没访问的进行设置",[14,128979,128980],{},"vistied对已访问的进行改变",[14,128982,128983],{},"hover鼠标经过就会变",[14,128985,128986],{},"active常按(点)就会变",[23,128988,128990],{"className":127805,"code":128989,"language":127807,"meta":28,"style":28},"\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",[30,128991,128992,128997,129006,129016,129026,129030,129039,129050,129054,129062,129072,129082,129086,129095,129106],{"__ignoreMap":28},[33,128993,128994],{"class":35,"line":36},[33,128995,128996],{"class":60},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[33,128998,128999,129001,129004],{"class":35,"line":51},[33,129000,126],{"class":52553},[33,129002,129003],{"class":43},":link",[33,129005,16823],{"class":47},[33,129007,129008,129010,129012,129014],{"class":35,"line":57},[33,129009,72158],{"class":76},[33,129011,52690],{"class":47},[33,129013,63622],{"class":76},[33,129015,80],{"class":47},[33,129017,129018,129020,129022,129024],{"class":35,"line":64},[33,129019,71755],{"class":76},[33,129021,52690],{"class":47},[33,129023,55990],{"class":76},[33,129025,80],{"class":47},[33,129027,129028],{"class":35,"line":83},[33,129029,231],{"class":47},[33,129031,129032,129034,129037],{"class":35,"line":89},[33,129033,126],{"class":52553},[33,129035,129036],{"class":43},":visited",[33,129038,16823],{"class":47},[33,129040,129041,129043,129045,129048],{"class":35,"line":98},[33,129042,72158],{"class":76},[33,129044,52690],{"class":47},[33,129046,129047],{"class":76},"purple",[33,129049,80],{"class":47},[33,129051,129052],{"class":35,"line":110},[33,129053,231],{"class":47},[33,129055,129056,129058,129060],{"class":35,"line":134},[33,129057,126],{"class":52553},[33,129059,62193],{"class":43},[33,129061,16823],{"class":47},[33,129063,129064,129066,129068,129070],{"class":35,"line":156},[33,129065,72158],{"class":76},[33,129067,52690],{"class":47},[33,129069,56142],{"class":76},[33,129071,80],{"class":47},[33,129073,129074,129076,129078,129080],{"class":35,"line":163},[33,129075,71755],{"class":76},[33,129077,52690],{"class":47},[33,129079,128419],{"class":76},[33,129081,80],{"class":47},[33,129083,129084],{"class":35,"line":169},[33,129085,231],{"class":47},[33,129087,129088,129090,129093],{"class":35,"line":175},[33,129089,126],{"class":52553},[33,129091,129092],{"class":43},":active",[33,129094,16823],{"class":47},[33,129096,129097,129099,129101,129104],{"class":35,"line":181},[33,129098,72158],{"class":76},[33,129100,52690],{"class":47},[33,129102,129103],{"class":76},"green",[33,129105,80],{"class":47},[33,129107,129108],{"class":35,"line":196},[33,129109,231],{"class":47},[1599,129111,129113,129114,129117],{"id":129112},"_735-伪类选择器","7.3.5 ",[129115,129116],"focus",{},"伪类选择器",[14,129119,129120,129122,129123,129125],{},[129115,129121],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[30,129124,127866],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[23,129127,129129],{"className":127805,"code":129128,"language":127807,"meta":28,"style":28},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[30,129130,129131,129139,129150,129160],{"__ignoreMap":28},[33,129132,129133,129135,129137],{"class":35,"line":36},[33,129134,55074],{"class":52553},[33,129136,63153],{"class":43},[33,129138,16823],{"class":47},[33,129140,129141,129144,129146,129148],{"class":35,"line":51},[33,129142,129143],{"class":76},"  border-color",[33,129145,52690],{"class":47},[33,129147,56142],{"class":76},[33,129149,80],{"class":47},[33,129151,129152,129154,129156,129158],{"class":35,"line":57},[33,129153,72051],{"class":76},[33,129155,52690],{"class":47},[33,129157,55990],{"class":76},[33,129159,80],{"class":47},[33,129161,129162],{"class":35,"line":64},[33,129163,231],{"class":47},[1544,129165,129166],{},"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":28,"searchDepth":51,"depth":51,"links":129168},[129169,129174,129178],{"id":128544,"depth":51,"text":128545,"children":129170},[129171,129172,129173],{"id":128548,"depth":57,"text":128549},{"id":128632,"depth":57,"text":128633},{"id":128680,"depth":57,"text":128681},{"id":128770,"depth":51,"text":128771,"children":129175},[129176,129177],{"id":128774,"depth":57,"text":128775},{"id":128847,"depth":57,"text":128848},{"id":128857,"depth":51,"text":128858,"children":129179},[129180,129181,129182,129183,129184],{"id":128861,"depth":57,"text":128862},{"id":128914,"depth":57,"text":128915},{"id":128930,"depth":57,"text":128931},{"id":128950,"depth":57,"text":128951},{"id":129112,"depth":57,"text":129185},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128536,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129192,"title":129193,"body":129194,"description":24628,"extension":1557,"meta":131117,"navigation":159,"path":131118,"seo":131119,"stem":131120,"__hash__":131121},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129195,"toc":131091},[129196,129199,129203,129212,129216,129242,129247,129250,129253,129256,129259,129263,129266,129276,129284,129288,129323,129328,129331,129334,129337,129340,129344,129347,129356,129360,129373,129378,129381,129384,129387,129391,129394,129398,129401,129456,129459,129490,129493,129547,129551,129554,129720,129843,129846,129849,129852,129855,129859,129862,129866,129869,129872,129876,129879,129910,129937,129965,129968,129972,129998,130041,130045,130139,130142,130169,130172,130175,130178,130181,130184,130187,130190,130193,130196,130200,130257,130284,130288,130336,130340,130381,130383,130386,130389,130392,130395,130399,130491,130494,130497,130500,130504,130627,130828,130832,130836,130839,130842,130845,130849,130852,130855,130880,130883,130886,130889,130892,130895,130899,130907,130969,130972,131030,131033,131036,131039,131042,131045,131048,131051,131088],[10,129197,129193],{"id":129198},"_8-css显示模式与背景特性",[18,129200,129202],{"id":129201},"_81-css元素显示模式","8.1 css元素显示模式",[14,129204,129205,129206,129208,129209,129211],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[30,129207,127416],{},"自己占一行，比如一行可以放多个",[30,129210,127419],{},"，HTML 元素一般分为块元素和行内元素两种类型",[1599,129213,129215],{"id":129214},"_811-块元素","8.1.1 块元素",[14,129217,129218,129219,129221,129222,1829,129225,1829,129227,1829,129229,1829,129232,1829,129235,129238,129239,129241],{},"常见的块元素有",[30,129220,127320],{},"~",[30,129223,129224],{},"\u003Ch6>",[30,129226,127346],{},[30,129228,127416],{},[30,129230,129231],{},"\u003Cul>",[30,129233,129234],{},"\u003Col>",[30,129236,129237],{},"\u003Cli>","等，其中 ",[30,129240,127416],{}," 标签是最典型的块元素",[14,129243,129244],{},[480,129245,129246],{},"块级元素的特点：",[14,129248,129249],{},"① 比较霸道，自己独占一行。",[14,129251,129252],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,129254,129255],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,129257,129258],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,129260,129261],{},[480,129262,1656],{},[14,129264,129265],{},"①文字类的元素内不能使用块级元素",[14,129267,78502,129268,129270,129271,129273,129274],{},[30,129269,127346],{}," 标签主要用于存放文字，因此 ",[30,129272,127346],{}," 里面不能放块级元素，特别是不能放",[30,129275,127416],{},[14,129277,129278,129279,129221,129281,129283],{},"⑥同理， ",[30,129280,127320],{},[30,129282,129224],{},"等都是文字类块级标签，里面也不能放其他块级元素",[1599,129285,129287],{"id":129286},"_812-行内元素","8.1.2 行内元素",[14,129289,129290,129291,1829,129293,1829,129296,1829,129299,1829,129302,1829,129305,1829,129308,1829,129311,1829,129314,1829,129317,129319,129320,129322],{},"常见的行内元素有 ",[30,129292,127578],{},[30,129294,129295],{},"\u003Cstrong>",[30,129297,129298],{},"\u003Cb>",[30,129300,129301],{},"\u003Cem>",[30,129303,129304],{},"\u003Ci>",[30,129306,129307],{},"\u003Cdel>",[30,129309,129310],{},"\u003Cs>",[30,129312,129313],{},"\u003Cins>",[30,129315,129316],{},"\u003Cu>",[30,129318,127419],{}," 等，其中 ",[30,129321,127419],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,129324,129325],{},[480,129326,129327],{},"特点：",[14,129329,129330],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,129332,129333],{},"② 高、宽直接设置是无效的。",[14,129335,129336],{},"③ 默认宽度就是它本身内容的宽度。",[14,129338,129339],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,129341,129342],{},[480,129343,1656],{},[14,129345,129346],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,129348,129349,129350,129352,129353,129355],{},"②特殊情况链接 ",[30,129351,127578],{}," 里面可以放块级元素，但是给 ",[30,129354,127578],{}," 转换一下块级模式最安全",[1599,129357,129359],{"id":129358},"_813-行内块元素","8.1.3 行内块元素",[14,129361,129362,129363,1829,129366,1829,129369,129372],{},"在行内元素中有几个特殊的标签 —— ",[30,129364,129365],{},"\u003Cimg \u002F>",[30,129367,129368],{},"\u003Cinput \u002F>",[30,129370,129371],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,129374,129375],{},[480,129376,129377],{},"行内块元素的特点：",[14,129379,129380],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,129382,129383],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,129385,129386],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[1599,129388,129390],{"id":129389},"_814-总结","8.1.4 总结",[2918,129392],{"style":127661,"src":129393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[1599,129395,129397],{"id":129396},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,129399,129400],{},"①转换为块元素：display:block;",[23,129402,129404],{"className":127805,"code":129403,"language":127807,"meta":28,"style":28},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[30,129405,129406,129411,129417,129428,129440,129452],{"__ignoreMap":28},[33,129407,129408],{"class":35,"line":36},[33,129409,129410],{"class":60},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[33,129412,129413,129415],{"class":35,"line":51},[33,129414,126],{"class":52553},[33,129416,16823],{"class":47},[33,129418,129419,129422,129424,129426],{"class":35,"line":57},[33,129420,129421],{"class":76},"  display",[33,129423,52690],{"class":47},[33,129425,62122],{"class":76},[33,129427,80],{"class":47},[33,129429,129430,129432,129434,129436,129438],{"class":35,"line":64},[33,129431,71821],{"class":76},[33,129433,52690],{"class":47},[33,129435,457],{"class":76},[33,129437,52745],{"class":39},[33,129439,80],{"class":47},[33,129441,129442,129444,129446,129448,129450],{"class":35,"line":83},[33,129443,72041],{"class":76},[33,129445,52690],{"class":47},[33,129447,2007],{"class":76},[33,129449,52745],{"class":39},[33,129451,80],{"class":47},[33,129453,129454],{"class":35,"line":89},[33,129455,231],{"class":47},[14,129457,129458],{},"②转换为行内元素：display:inline;",[23,129460,129462],{"className":127805,"code":129461,"language":127807,"meta":28,"style":28},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[30,129463,129464,129469,129475,129486],{"__ignoreMap":28},[33,129465,129466],{"class":35,"line":36},[33,129467,129468],{"class":60},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[33,129470,129471,129473],{"class":35,"line":51},[33,129472,52864],{"class":52553},[33,129474,16823],{"class":47},[33,129476,129477,129479,129481,129484],{"class":35,"line":57},[33,129478,129421],{"class":76},[33,129480,52690],{"class":47},[33,129482,129483],{"class":76},"inline",[33,129485,80],{"class":47},[33,129487,129488],{"class":35,"line":64},[33,129489,231],{"class":47},[14,129491,129492],{},"③转换为行内块：display:inline-block;",[23,129494,129496],{"className":127805,"code":129495,"language":127807,"meta":28,"style":28},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[30,129497,129498,129503,129509,129519,129531,129543],{"__ignoreMap":28},[33,129499,129500],{"class":35,"line":36},[33,129501,129502],{"class":60},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[33,129504,129505,129507],{"class":35,"line":51},[33,129506,33],{"class":52553},[33,129508,16823],{"class":47},[33,129510,129511,129513,129515,129517],{"class":35,"line":57},[33,129512,129421],{"class":76},[33,129514,52690],{"class":47},[33,129516,73636],{"class":76},[33,129518,80],{"class":47},[33,129520,129521,129523,129525,129527,129529],{"class":35,"line":64},[33,129522,71821],{"class":76},[33,129524,52690],{"class":47},[33,129526,2212],{"class":76},[33,129528,52745],{"class":39},[33,129530,80],{"class":47},[33,129532,129533,129535,129537,129539,129541],{"class":35,"line":83},[33,129534,72041],{"class":76},[33,129536,52690],{"class":47},[33,129538,2547],{"class":76},[33,129540,52745],{"class":39},[33,129542,80],{"class":47},[33,129544,129545],{"class":35,"line":89},[33,129546,231],{"class":47},[1599,129548,129550],{"id":129549},"_816-小米侧边栏","8.1.6 小米侧边栏",[2918,129552],{"style":127661,"src":129553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[23,129555,129557],{"className":128552,"code":129556,"language":128554,"meta":28,"style":28},"\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",[30,129558,129559,129564,129579,129598,129617,129636,129655,129674,129693,129712],{"__ignoreMap":28},[33,129560,129561],{"class":35,"line":36},[33,129562,129563],{"class":60},"\u003C!-- 小米侧边栏案例 -->\n",[33,129565,129566,129568,129570,129572,129574,129577],{"class":35,"line":51},[33,129567,875],{"class":47},[33,129569,52864],{"class":52553},[33,129571,54739],{"class":43},[33,129573,73],{"class":47},[33,129575,129576],{"class":119},"\"sidebar\"",[33,129578,52560],{"class":47},[33,129580,129581,129583,129585,129587,129589,129591,129594,129596],{"class":35,"line":57},[33,129582,53397],{"class":47},[33,129584,126],{"class":52553},[33,129586,62310],{"class":43},[33,129588,73],{"class":47},[33,129590,62315],{"class":119},[33,129592,129593],{"class":47},">手机 电话卡\u003C\u002F",[33,129595,126],{"class":52553},[33,129597,52560],{"class":47},[33,129599,129600,129602,129604,129606,129608,129610,129613,129615],{"class":35,"line":64},[33,129601,53397],{"class":47},[33,129603,126],{"class":52553},[33,129605,62310],{"class":43},[33,129607,73],{"class":47},[33,129609,62315],{"class":119},[33,129611,129612],{"class":47},">电视 盒子\u003C\u002F",[33,129614,126],{"class":52553},[33,129616,52560],{"class":47},[33,129618,129619,129621,129623,129625,129627,129629,129632,129634],{"class":35,"line":83},[33,129620,53397],{"class":47},[33,129622,126],{"class":52553},[33,129624,62310],{"class":43},[33,129626,73],{"class":47},[33,129628,62315],{"class":119},[33,129630,129631],{"class":47},">笔记本 平板\u003C\u002F",[33,129633,126],{"class":52553},[33,129635,52560],{"class":47},[33,129637,129638,129640,129642,129644,129646,129648,129651,129653],{"class":35,"line":89},[33,129639,53397],{"class":47},[33,129641,126],{"class":52553},[33,129643,62310],{"class":43},[33,129645,73],{"class":47},[33,129647,62315],{"class":119},[33,129649,129650],{"class":47},">出行 穿戴\u003C\u002F",[33,129652,126],{"class":52553},[33,129654,52560],{"class":47},[33,129656,129657,129659,129661,129663,129665,129667,129670,129672],{"class":35,"line":98},[33,129658,53397],{"class":47},[33,129660,126],{"class":52553},[33,129662,62310],{"class":43},[33,129664,73],{"class":47},[33,129666,62315],{"class":119},[33,129668,129669],{"class":47},">智能 路由器\u003C\u002F",[33,129671,126],{"class":52553},[33,129673,52560],{"class":47},[33,129675,129676,129678,129680,129682,129684,129686,129689,129691],{"class":35,"line":110},[33,129677,53397],{"class":47},[33,129679,126],{"class":52553},[33,129681,62310],{"class":43},[33,129683,73],{"class":47},[33,129685,62315],{"class":119},[33,129687,129688],{"class":47},">健康 儿童\u003C\u002F",[33,129690,126],{"class":52553},[33,129692,52560],{"class":47},[33,129694,129695,129697,129699,129701,129703,129705,129708,129710],{"class":35,"line":134},[33,129696,53397],{"class":47},[33,129698,126],{"class":52553},[33,129700,62310],{"class":43},[33,129702,73],{"class":47},[33,129704,62315],{"class":119},[33,129706,129707],{"class":47},">耳机 音响\u003C\u002F",[33,129709,126],{"class":52553},[33,129711,52560],{"class":47},[33,129713,129714,129716,129718],{"class":35,"line":156},[33,129715,53038],{"class":47},[33,129717,52864],{"class":52553},[33,129719,52560],{"class":47},[23,129721,129723],{"className":127805,"code":129722,"language":127807,"meta":28,"style":28},".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",[30,129724,129725,129734,129744,129757,129769,129781,129793,129803,129814,129818,129828,129839],{"__ignoreMap":28},[33,129726,129727,129730,129732],{"class":35,"line":36},[33,129728,129729],{"class":43},".sidebar",[33,129731,70],{"class":52553},[33,129733,16823],{"class":47},[33,129735,129736,129738,129740,129742],{"class":35,"line":51},[33,129737,129421],{"class":76},[33,129739,52690],{"class":47},[33,129741,62122],{"class":76},[33,129743,80],{"class":47},[33,129745,129746,129748,129750,129753,129755],{"class":35,"line":57},[33,129747,71821],{"class":76},[33,129749,52690],{"class":47},[33,129751,129752],{"class":76},"234",[33,129754,52745],{"class":39},[33,129756,80],{"class":47},[33,129758,129759,129761,129763,129765,129767],{"class":35,"line":64},[33,129760,72041],{"class":76},[33,129762,52690],{"class":47},[33,129764,2054],{"class":76},[33,129766,52745],{"class":39},[33,129768,80],{"class":47},[33,129770,129771,129773,129775,129777,129779],{"class":35,"line":83},[33,129772,128489],{"class":76},[33,129774,52690],{"class":47},[33,129776,2054],{"class":76},[33,129778,52745],{"class":39},[33,129780,80],{"class":47},[33,129782,129783,129785,129787,129789,129791],{"class":35,"line":89},[33,129784,72076],{"class":76},[33,129786,52690],{"class":47},[33,129788,2547],{"class":76},[33,129790,52745],{"class":39},[33,129792,80],{"class":47},[33,129794,129795,129797,129799,129801],{"class":35,"line":98},[33,129796,72158],{"class":76},[33,129798,52690],{"class":47},[33,129800,62095],{"class":76},[33,129802,80],{"class":47},[33,129804,129805,129807,129809,129812],{"class":35,"line":110},[33,129806,72131],{"class":76},[33,129808,52690],{"class":47},[33,129810,129811],{"class":76},"#55585a",[33,129813,80],{"class":47},[33,129815,129816],{"class":35,"line":134},[33,129817,231],{"class":47},[33,129819,129820,129822,129824,129826],{"class":35,"line":156},[33,129821,129729],{"class":43},[33,129823,70],{"class":52553},[33,129825,62193],{"class":43},[33,129827,16823],{"class":47},[33,129829,129830,129832,129834,129837],{"class":35,"line":163},[33,129831,72131],{"class":76},[33,129833,52690],{"class":47},[33,129835,129836],{"class":76},"#ff6700",[33,129838,80],{"class":47},[33,129840,129841],{"class":35,"line":169},[33,129842,231],{"class":47},[2918,129844],{"style":127661,"src":129845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,129847,129848],{},"行高=盒子高度：实现文字的垂直居中",[14,129850,129851],{},"原理讲解：",[2918,129853],{"style":127661,"src":129854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[18,129856,129858],{"id":129857},"_82-css背景","8.2 css背景",[14,129860,129861],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[1599,129863,129865],{"id":129864},"_821-背景颜色","8.2.1 背景颜色",[14,129867,129868],{},"background-color:颜色值;",[14,129870,129871],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[1599,129873,129875],{"id":129874},"_822-背景图片","8.2.2 背景图片",[14,129877,129878],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[23,129880,129882],{"className":127805,"code":129881,"language":127807,"meta":28,"style":28},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[30,129883,129884,129890,129906],{"__ignoreMap":28},[33,129885,129886,129888],{"class":35,"line":36},[33,129887,52864],{"class":52553},[33,129889,16823],{"class":47},[33,129891,129892,129895,129897,129899,129901,129904],{"class":35,"line":51},[33,129893,129894],{"class":76},"  background-image",[33,129896,52690],{"class":47},[33,129898,62979],{"class":76},[33,129900,345],{"class":47},[33,129902,129903],{"class":955},"images\u002Fbg.png",[33,129905,4130],{"class":47},[33,129907,129908],{"class":35,"line":57},[33,129909,231],{"class":47},[1756,129911,129912,129921],{},[1759,129913,129914],{},[1762,129915,129916,129919],{},[1765,129917,129918],{"align":24988},"参数值",[1765,129920,103949],{"align":24988},[1802,129922,129923,129930],{},[1762,129924,129925,129927],{},[1807,129926,55990],{"align":24988},[1807,129928,129929],{"align":24988},"无背景图（默认的）",[1762,129931,129932,129934],{},[1807,129933,62979],{"align":24988},[1807,129935,129936],{"align":24988},"使用绝对或相对地址指定背景图像",[23,129938,129939],{"className":127805,"code":129881,"language":127807,"meta":28,"style":28},[30,129940,129941,129947,129961],{"__ignoreMap":28},[33,129942,129943,129945],{"class":35,"line":36},[33,129944,52864],{"class":52553},[33,129946,16823],{"class":47},[33,129948,129949,129951,129953,129955,129957,129959],{"class":35,"line":51},[33,129950,129894],{"class":76},[33,129952,52690],{"class":47},[33,129954,62979],{"class":76},[33,129956,345],{"class":47},[33,129958,129903],{"class":955},[33,129960,4130],{"class":47},[33,129962,129963],{"class":35,"line":57},[33,129964,231],{"class":47},[14,129966,129967],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[1599,129969,129971],{"id":129970},"_823-背景平铺","8.2.3 背景平铺",[23,129973,129975],{"className":127805,"code":129974,"language":127807,"meta":28,"style":28},"div {\n  background-repeat: no-repeat;\n}\n",[30,129976,129977,129983,129994],{"__ignoreMap":28},[33,129978,129979,129981],{"class":35,"line":36},[33,129980,52864],{"class":52553},[33,129982,16823],{"class":47},[33,129984,129985,129988,129990,129992],{"class":35,"line":51},[33,129986,129987],{"class":76},"  background-repeat",[33,129989,52690],{"class":47},[33,129991,62989],{"class":76},[33,129993,80],{"class":47},[33,129995,129996],{"class":35,"line":57},[33,129997,231],{"class":47},[1756,129999,130000,130008],{},[1759,130001,130002],{},[1762,130003,130004,130006],{},[1765,130005,129918],{"align":24988},[1765,130007,103949],{"align":24988},[1802,130009,130010,130018,130025,130033],{},[1762,130011,130012,130015],{},[1807,130013,130014],{"align":24988},"repeat",[1807,130016,130017],{"align":24988},"背景图像在纵向和横向上平铺（默认的）",[1762,130019,130020,130022],{},[1807,130021,62989],{"align":24988},[1807,130023,130024],{"align":24988},"背景图像不平铺",[1762,130026,130027,130030],{},[1807,130028,130029],{"align":24988},"repeat-x",[1807,130031,130032],{"align":24988},"背景图像在横向上平铺",[1762,130034,130035,130038],{},[1807,130036,130037],{"align":24988},"repeat-y",[1807,130039,130040],{"align":24988},"背景图像在纵向平铺",[1599,130042,130044],{"id":130043},"_824-背景图片位置","8.2.4 背景图片位置",[23,130046,130048],{"className":127805,"code":130047,"language":127807,"meta":28,"style":28},"\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",[30,130049,130050,130055,130061,130075,130079,130084,130090,130106,130110,130115,130121,130135],{"__ignoreMap":28},[33,130051,130052],{"class":35,"line":36},[33,130053,130054],{"class":60},"\u002F* 方位名词 *\u002F\n",[33,130056,130057,130059],{"class":35,"line":51},[33,130058,52864],{"class":52553},[33,130060,16823],{"class":47},[33,130062,130063,130066,130068,130070,130073],{"class":35,"line":57},[33,130064,130065],{"class":76},"  background-position",[33,130067,52690],{"class":47},[33,130069,52845],{"class":76},[33,130071,130072],{"class":76}," top",[33,130074,80],{"class":47},[33,130076,130077],{"class":35,"line":64},[33,130078,231],{"class":47},[33,130080,130081],{"class":35,"line":83},[33,130082,130083],{"class":60},"\u002F* 精确单位 *\u002F\n",[33,130085,130086,130088],{"class":35,"line":89},[33,130087,52864],{"class":52553},[33,130089,16823],{"class":47},[33,130091,130092,130094,130096,130098,130100,130102,130104],{"class":35,"line":98},[33,130093,130065],{"class":76},[33,130095,52690],{"class":47},[33,130097,1045],{"class":76},[33,130099,52745],{"class":39},[33,130101,58757],{"class":76},[33,130103,52745],{"class":39},[33,130105,80],{"class":47},[33,130107,130108],{"class":35,"line":110},[33,130109,231],{"class":47},[33,130111,130112],{"class":35,"line":134},[33,130113,130114],{"class":60},"\u002F* 混合单位 *\u002F\n",[33,130116,130117,130119],{"class":35,"line":156},[33,130118,52864],{"class":52553},[33,130120,16823],{"class":47},[33,130122,130123,130125,130127,130129,130131,130133],{"class":35,"line":163},[33,130124,130065],{"class":76},[33,130126,52690],{"class":47},[33,130128,1045],{"class":76},[33,130130,52745],{"class":39},[33,130132,18395],{"class":76},[33,130134,80],{"class":47},[33,130136,130137],{"class":35,"line":169},[33,130138,231],{"class":47},[14,130140,130141],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1756,130143,130144,130152],{},[1759,130145,130146],{},[1762,130147,130148,130150],{},[1765,130149,129918],{"align":24988},[1765,130151,27122],{"align":24988},[1802,130153,130154,130161],{},[1762,130155,130156,130158],{},[1807,130157,53221],{"align":24988},[1807,130159,130160],{"align":24988},"百分数|由浮点数和单位标识符组成的长度值",[1762,130162,130163,130166],{},[1807,130164,130165],{"align":24988},"position",[1807,130167,130168],{"align":24988},"top|center|bottom|left|center|right 方位名词",[14,130170,130171],{},"其他说明：",[14,130173,130174],{},"①参数是方位名词",[14,130176,130177],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,130179,130180],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,130182,130183],{},"②参数是精确单位",[14,130185,130186],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,130188,130189],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,130191,130192],{},"③参数是混合单位",[14,130194,130195],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[1599,130197,130199],{"id":130198},"_825-背景图片固定","8.2.5 背景图片固定",[23,130201,130203],{"className":127805,"code":130202,"language":127807,"meta":28,"style":28},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[30,130204,130205,130210,130216,130228,130232,130237,130243,130253],{"__ignoreMap":28},[33,130206,130207],{"class":35,"line":36},[33,130208,130209],{"class":60},"\u002F* 背景滚动（默认） *\u002F\n",[33,130211,130212,130214],{"class":35,"line":51},[33,130213,52864],{"class":52553},[33,130215,16823],{"class":47},[33,130217,130218,130221,130223,130226],{"class":35,"line":57},[33,130219,130220],{"class":76},"  background-attachment",[33,130222,52690],{"class":47},[33,130224,130225],{"class":76},"scroll",[33,130227,80],{"class":47},[33,130229,130230],{"class":35,"line":64},[33,130231,231],{"class":47},[33,130233,130234],{"class":35,"line":83},[33,130235,130236],{"class":60},"\u002F* 背景固定 *\u002F\n",[33,130238,130239,130241],{"class":35,"line":89},[33,130240,52864],{"class":52553},[33,130242,16823],{"class":47},[33,130244,130245,130247,130249,130251],{"class":35,"line":98},[33,130246,130220],{"class":76},[33,130248,52690],{"class":47},[33,130250,87486],{"class":76},[33,130252,80],{"class":47},[33,130254,130255],{"class":35,"line":110},[33,130256,231],{"class":47},[1756,130258,130259,130268],{},[1759,130260,130261],{},[1762,130262,130263,130266],{},[1765,130264,130265],{"align":24988},"参数",[1765,130267,103949],{"align":24988},[1802,130269,130270,130277],{},[1762,130271,130272,130274],{},[1807,130273,130225],{"align":24988},[1807,130275,130276],{"align":24988},"背景图像是随对象内容滚动",[1762,130278,130279,130281],{},[1807,130280,87486],{"align":24988},[1807,130282,130283],{"align":24988},"背景图像固定",[1599,130285,130287],{"id":130286},"_826-背景样式合写","8.2.6 背景样式合写",[23,130289,130291],{"className":127805,"code":130290,"language":127807,"meta":28,"style":28},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[30,130292,130293,130298,130304,130332],{"__ignoreMap":28},[33,130294,130295],{"class":35,"line":36},[33,130296,130297],{"class":60},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[33,130299,130300,130302],{"class":35,"line":51},[33,130301,52864],{"class":52553},[33,130303,16823],{"class":47},[33,130305,130306,130308,130310,130312,130315,130317,130319,130321,130323,130326,130328,130330],{"class":35,"line":57},[33,130307,71864],{"class":76},[33,130309,52690],{"class":47},[33,130311,62095],{"class":76},[33,130313,130314],{"class":76}," url",[33,130316,345],{"class":47},[33,130318,129903],{"class":955},[33,130320,14965],{"class":47},[33,130322,62989],{"class":76},[33,130324,130325],{"class":76}," fixed",[33,130327,18395],{"class":76},[33,130329,130072],{"class":76},[33,130331,80],{"class":47},[33,130333,130334],{"class":35,"line":64},[33,130335,231],{"class":47},[1599,130337,130339],{"id":130338},"_827-背景色半透明","8.2.7 背景色半透明",[23,130341,130343],{"className":127805,"code":130342,"language":127807,"meta":28,"style":28},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[30,130344,130345,130351,130377],{"__ignoreMap":28},[33,130346,130347,130349],{"class":35,"line":36},[33,130348,52864],{"class":52553},[33,130350,16823],{"class":47},[33,130352,130353,130355,130357,130359,130361,130363,130365,130367,130369,130371,130373,130375],{"class":35,"line":51},[33,130354,71864],{"class":76},[33,130356,52690],{"class":47},[33,130358,56363],{"class":76},[33,130360,345],{"class":47},[33,130362,766],{"class":76},[33,130364,13686],{"class":47},[33,130366,766],{"class":76},[33,130368,13686],{"class":47},[33,130370,766],{"class":76},[33,130372,13686],{"class":47},[33,130374,101774],{"class":76},[33,130376,4130],{"class":47},[33,130378,130379],{"class":35,"line":57},[33,130380,231],{"class":47},[14,130382,100649],{},[14,130384,130385],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,130387,130388],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,130390,130391],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,130393,130394],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[1599,130396,130398],{"id":130397},"_828-总结","8.2.8 总结",[1756,130400,130401,130412],{},[1759,130402,130403],{},[1762,130404,130405,130408,130410],{},[1765,130406,130407],{"align":24988},"属性",[1765,130409,103949],{"align":24988},[1765,130411,1770],{"align":24988},[1802,130413,130414,130425,130436,130447,130458,130469,130480],{},[1762,130415,130416,130419,130422],{},[1807,130417,130418],{"align":24988},"background-color",[1807,130420,130421],{"align":24988},"背景颜色",[1807,130423,130424],{"align":24988},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1762,130426,130427,130430,130433],{},[1807,130428,130429],{"align":24988},"background-image",[1807,130431,130432],{"align":24988},"背景图片",[1807,130434,130435],{"align":24988},"url(图片路径)",[1762,130437,130438,130441,130444],{},[1807,130439,130440],{"align":24988},"background-repeat",[1807,130442,130443],{"align":24988},"是否平铺",[1807,130445,130446],{"align":24988},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1762,130448,130449,130452,130455],{},[1807,130450,130451],{"align":24988},"background-position",[1807,130453,130454],{"align":24988},"背景位置",[1807,130456,130457],{"align":24988},"length\u002Fposition 分别是x和y坐标",[1762,130459,130460,130463,130466],{},[1807,130461,130462],{"align":24988},"background-attachment",[1807,130464,130465],{"align":24988},"背景附着",[1807,130467,130468],{"align":24988},"scroll(背景滚动) \u002Ffixed (背景固定)",[1762,130470,130471,130474,130477],{},[1807,130472,130473],{"align":24988},"背景简写",[1807,130475,130476],{"align":24988},"书写更简单",[1807,130478,130479],{"align":24988},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1762,130481,130482,130485,130488],{},[1807,130483,130484],{"align":24988},"背景半透明",[1807,130486,130487],{"align":24988},"背景颜色半透明",[1807,130489,130490],{"align":24988},"background: rgba(0,0,0.3); 后面必须是4个值",[14,130492,130493],{},"颜色渐变：",[2918,130495],{"style":127661,"src":130496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2918,130498],{"style":127661,"src":130499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[1599,130501,130503],{"id":130502},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[23,130505,130507],{"className":128552,"code":130506,"language":128554,"meta":28,"style":28},"\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",[30,130508,130509,130524,130543,130562,130581,130600,130619],{"__ignoreMap":28},[33,130510,130511,130513,130515,130517,130519,130522],{"class":35,"line":36},[33,130512,875],{"class":47},[33,130514,52864],{"class":52553},[33,130516,54739],{"class":43},[33,130518,73],{"class":47},[33,130520,130521],{"class":119},"\"nav\"",[33,130523,52560],{"class":47},[33,130525,130526,130528,130530,130532,130534,130536,130539,130541],{"class":35,"line":51},[33,130527,53397],{"class":47},[33,130529,126],{"class":52553},[33,130531,62310],{"class":43},[33,130533,73],{"class":47},[33,130535,62315],{"class":119},[33,130537,130538],{"class":47},">五彩导航1\u003C\u002F",[33,130540,126],{"class":52553},[33,130542,52560],{"class":47},[33,130544,130545,130547,130549,130551,130553,130555,130558,130560],{"class":35,"line":57},[33,130546,53397],{"class":47},[33,130548,126],{"class":52553},[33,130550,62310],{"class":43},[33,130552,73],{"class":47},[33,130554,62315],{"class":119},[33,130556,130557],{"class":47},">五彩导航2\u003C\u002F",[33,130559,126],{"class":52553},[33,130561,52560],{"class":47},[33,130563,130564,130566,130568,130570,130572,130574,130577,130579],{"class":35,"line":64},[33,130565,53397],{"class":47},[33,130567,126],{"class":52553},[33,130569,62310],{"class":43},[33,130571,73],{"class":47},[33,130573,62315],{"class":119},[33,130575,130576],{"class":47},">五彩导航3\u003C\u002F",[33,130578,126],{"class":52553},[33,130580,52560],{"class":47},[33,130582,130583,130585,130587,130589,130591,130593,130596,130598],{"class":35,"line":83},[33,130584,53397],{"class":47},[33,130586,126],{"class":52553},[33,130588,62310],{"class":43},[33,130590,73],{"class":47},[33,130592,62315],{"class":119},[33,130594,130595],{"class":47},">五彩导航4\u003C\u002F",[33,130597,126],{"class":52553},[33,130599,52560],{"class":47},[33,130601,130602,130604,130606,130608,130610,130612,130615,130617],{"class":35,"line":89},[33,130603,53397],{"class":47},[33,130605,126],{"class":52553},[33,130607,62310],{"class":43},[33,130609,73],{"class":47},[33,130611,62315],{"class":119},[33,130613,130614],{"class":47},">五彩导航5\u003C\u002F",[33,130616,126],{"class":52553},[33,130618,52560],{"class":47},[33,130620,130621,130623,130625],{"class":35,"line":98},[33,130622,53038],{"class":47},[33,130624,52864],{"class":52553},[33,130626,52560],{"class":47},[23,130628,130630],{"className":127805,"code":130629,"language":127807,"meta":28,"style":28},".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",[30,130631,130632,130641,130651,130663,130675,130685,130697,130707,130711,130736,130759,130782,130805],{"__ignoreMap":28},[33,130633,130634,130637,130639],{"class":35,"line":36},[33,130635,130636],{"class":43},".nav",[33,130638,70],{"class":52553},[33,130640,16823],{"class":47},[33,130642,130643,130645,130647,130649],{"class":35,"line":51},[33,130644,129421],{"class":76},[33,130646,52690],{"class":47},[33,130648,73636],{"class":76},[33,130650,80],{"class":47},[33,130652,130653,130655,130657,130659,130661],{"class":35,"line":57},[33,130654,71821],{"class":76},[33,130656,52690],{"class":47},[33,130658,2416],{"class":76},[33,130660,52745],{"class":39},[33,130662,80],{"class":47},[33,130664,130665,130667,130669,130671,130673],{"class":35,"line":64},[33,130666,72041],{"class":76},[33,130668,52690],{"class":47},[33,130670,2455],{"class":76},[33,130672,52745],{"class":39},[33,130674,80],{"class":47},[33,130676,130677,130679,130681,130683],{"class":35,"line":83},[33,130678,71779],{"class":76},[33,130680,52690],{"class":47},[33,130682,52845],{"class":76},[33,130684,80],{"class":47},[33,130686,130687,130689,130691,130693,130695],{"class":35,"line":89},[33,130688,128489],{"class":76},[33,130690,52690],{"class":47},[33,130692,2455],{"class":76},[33,130694,52745],{"class":39},[33,130696,80],{"class":47},[33,130698,130699,130701,130703,130705],{"class":35,"line":98},[33,130700,72158],{"class":76},[33,130702,52690],{"class":47},[33,130704,62095],{"class":76},[33,130706,80],{"class":47},[33,130708,130709],{"class":35,"line":110},[33,130710,231],{"class":47},[33,130712,130713,130715,130717,130720,130722,130724,130727,130729,130731,130733],{"class":35,"line":134},[33,130714,130636],{"class":43},[33,130716,70],{"class":52553},[33,130718,130719],{"class":43},":nth-child",[33,130721,345],{"class":47},[33,130723,701],{"class":76},[33,130725,130726],{"class":47},") { ",[33,130728,130418],{"class":76},[33,130730,52690],{"class":47},[33,130732,129836],{"class":76},[33,130734,130735],{"class":47},"; }\n",[33,130737,130738,130740,130742,130744,130746,130748,130750,130752,130754,130757],{"class":35,"line":156},[33,130739,130636],{"class":43},[33,130741,70],{"class":52553},[33,130743,130719],{"class":43},[33,130745,345],{"class":47},[33,130747,707],{"class":76},[33,130749,130726],{"class":47},[33,130751,130418],{"class":76},[33,130753,52690],{"class":47},[33,130755,130756],{"class":76},"#ff0000",[33,130758,130735],{"class":47},[33,130760,130761,130763,130765,130767,130769,130771,130773,130775,130777,130780],{"class":35,"line":163},[33,130762,130636],{"class":43},[33,130764,70],{"class":52553},[33,130766,130719],{"class":43},[33,130768,345],{"class":47},[33,130770,712],{"class":76},[33,130772,130726],{"class":47},[33,130774,130418],{"class":76},[33,130776,52690],{"class":47},[33,130778,130779],{"class":76},"#00a4ff",[33,130781,130735],{"class":47},[33,130783,130784,130786,130788,130790,130792,130794,130796,130798,130800,130803],{"class":35,"line":169},[33,130785,130636],{"class":43},[33,130787,70],{"class":52553},[33,130789,130719],{"class":43},[33,130791,345],{"class":47},[33,130793,717],{"class":76},[33,130795,130726],{"class":47},[33,130797,130418],{"class":76},[33,130799,52690],{"class":47},[33,130801,130802],{"class":76},"#ff00ff",[33,130804,130735],{"class":47},[33,130806,130807,130809,130811,130813,130815,130817,130819,130821,130823,130826],{"class":35,"line":175},[33,130808,130636],{"class":43},[33,130810,70],{"class":52553},[33,130812,130719],{"class":43},[33,130814,345],{"class":47},[33,130816,722],{"class":76},[33,130818,130726],{"class":47},[33,130820,130418],{"class":76},[33,130822,52690],{"class":47},[33,130824,130825],{"class":76},"#00ff00",[33,130827,130735],{"class":47},[18,130829,130831],{"id":130830},"_83-css三大特性","8.3 css三大特性",[1599,130833,130835],{"id":130834},"_831-层叠性","8.3.1 层叠性",[14,130837,130838],{},"为了解决样式冲突问题",[14,130840,130841],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,130843,130844],{},"   ②样式不冲突，不会层叠",[1599,130846,130848],{"id":130847},"_832-继承性","8.3.2 继承性",[14,130850,130851],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,130853,130854],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[23,130856,130858],{"className":127805,"code":130857,"language":127807,"meta":28,"style":28},"p {\n  color: #333;\n}\n",[30,130859,130860,130866,130876],{"__ignoreMap":28},[33,130861,130862,130864],{"class":35,"line":36},[33,130863,14],{"class":52553},[33,130865,16823],{"class":47},[33,130867,130868,130870,130872,130874],{"class":35,"line":51},[33,130869,72158],{"class":76},[33,130871,52690],{"class":47},[33,130873,63622],{"class":76},[33,130875,80],{"class":47},[33,130877,130878],{"class":35,"line":57},[33,130879,231],{"class":47},[2918,130881],{"style":127661,"src":130882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,130884,130885],{},"解释：①行高可以跟单位也可以不跟单位",[14,130887,130888],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,130890,130891],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,130893,130894],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[1599,130896,130898],{"id":130897},"_833-优先级","8.3.3 优先级",[574,130900,130901,130904],{},[564,130902,130903],{},"选择器相同，则执行层叠性",[564,130905,130906],{},"选择器不同，则根据选择器权重执行",[1756,130908,130909,130919],{},[1759,130910,130911],{},[1762,130912,130913,130916],{},[1765,130914,130915],{"align":24988},"选择器",[1765,130917,130918],{"align":24988},"选择器权重",[1802,130920,130921,130929,130937,130945,130953,130961],{},[1762,130922,130923,130926],{},[1807,130924,130925],{"align":24988},"继承 或者*",[1807,130927,130928],{"align":24988},"0，0，0，0",[1762,130930,130931,130934],{},[1807,130932,130933],{"align":24988},"标签选择器",[1807,130935,130936],{"align":24988},"0，0，0，1",[1762,130938,130939,130942],{},[1807,130940,130941],{"align":24988},"类选择器，伪类选择器",[1807,130943,130944],{"align":24988},"0，0，1，0",[1762,130946,130947,130950],{},[1807,130948,130949],{"align":24988},"ID选择器",[1807,130951,130952],{"align":24988},"0，1，0，0",[1762,130954,130955,130958],{},[1807,130956,130957],{"align":24988},"行内样式",[1807,130959,130960],{"align":24988},"1，0，0，0",[1762,130962,130963,130966],{},[1807,130964,130965],{"align":24988},"！important",[1807,130967,130968],{"align":24988},"无穷大",[14,130970,130971],{},"! important用法：",[23,130973,130975],{"className":127805,"code":130974,"language":127807,"meta":28,"style":28},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[30,130976,130977,130982,130988,131001,131005,131010,131016,131026],{"__ignoreMap":28},[33,130978,130979],{"class":35,"line":36},[33,130980,130981],{"class":60},"\u002F* !important 拥有最高优先级 *\u002F\n",[33,130983,130984,130986],{"class":35,"line":51},[33,130985,52864],{"class":52553},[33,130987,16823],{"class":47},[33,130989,130990,130992,130994,130996,130999],{"class":35,"line":57},[33,130991,72158],{"class":76},[33,130993,52690],{"class":47},[33,130995,52898],{"class":76},[33,130997,130998],{"class":39}," !important",[33,131000,80],{"class":47},[33,131002,131003],{"class":35,"line":64},[33,131004,231],{"class":47},[33,131006,131007],{"class":35,"line":83},[33,131008,131009],{"class":60},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[33,131011,131012,131014],{"class":35,"line":89},[33,131013,52864],{"class":52553},[33,131015,16823],{"class":47},[33,131017,131018,131020,131022,131024],{"class":35,"line":98},[33,131019,72158],{"class":76},[33,131021,52690],{"class":47},[33,131023,58674],{"class":76},[33,131025,80],{"class":47},[33,131027,131028],{"class":35,"line":110},[33,131029,231],{"class":47},[14,131031,131032],{},"优先级注意点：",[14,131034,131035],{},"①权重是有4组数字组成,但是不会有进位",[14,131037,131038],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,131040,131041],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,131043,131044],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,131046,131047],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,131049,131050],{},"⑥复合选择器",[1756,131052,131053,131063],{},[1759,131054,131055],{},[1762,131056,131057,131060],{},[1765,131058,131059],{"align":24988},"div ul li",[1765,131061,131062],{"align":24988},"0,0,0,3",[1802,131064,131065,131073,131081],{},[1762,131066,131067,131070],{},[1807,131068,131069],{"align":24988},".nav ul li",[1807,131071,131072],{"align":24988},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1762,131074,131075,131078],{},[1807,131076,131077],{"align":24988},"a:hover",[1807,131079,131080],{"align":24988},"0,0,1,1",[1762,131082,131083,131086],{},[1807,131084,131085],{"align":24988},".nav a",[1807,131087,131080],{"align":24988},[1544,131089,131090],{},"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":28,"searchDepth":51,"depth":51,"links":131092},[131093,131101,131112],{"id":129201,"depth":51,"text":129202,"children":131094},[131095,131096,131097,131098,131099,131100],{"id":129214,"depth":57,"text":129215},{"id":129286,"depth":57,"text":129287},{"id":129358,"depth":57,"text":129359},{"id":129389,"depth":57,"text":129390},{"id":129396,"depth":57,"text":129397},{"id":129549,"depth":57,"text":129550},{"id":129857,"depth":51,"text":129858,"children":131102},[131103,131104,131105,131106,131107,131108,131109,131110,131111],{"id":129864,"depth":57,"text":129865},{"id":129874,"depth":57,"text":129875},{"id":129970,"depth":57,"text":129971},{"id":130043,"depth":57,"text":130044},{"id":130198,"depth":57,"text":130199},{"id":130286,"depth":57,"text":130287},{"id":130338,"depth":57,"text":130339},{"id":130397,"depth":57,"text":130398},{"id":130502,"depth":57,"text":130503},{"id":130830,"depth":51,"text":130831,"children":131113},[131114,131115,131116],{"id":130834,"depth":57,"text":130835},{"id":130847,"depth":57,"text":130848},{"id":130897,"depth":57,"text":130898},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129193,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131123,"title":131124,"body":131125,"description":24628,"extension":1557,"meta":132715,"navigation":159,"path":132716,"seo":132717,"stem":132718,"__hash__":132719},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131126,"toc":132694},[131127,131130,131134,131137,131140,131143,131146,131149,131152,131155,131159,131167,131204,131240,131243,131257,131262,131296,131299,131392,131397,131400,131430,131433,131438,131446,131450,131457,131503,131547,131552,131555,131558,131561,131564,131567,131570,131572,131575,131579,131584,131628,131633,131636,131639,131676,131681,131684,131687,131690,131693,131725,131728,131731,131734,131766,131769,131772,131775,131779,131782,131814,131817,131821,131841,131844,131852,131855,131859,131864,131867,131899,131904,131907,131945,131949,131954,131957,131960,131991,131994,132011,132016,132068,132128,132133,132187,132225,132229,132233,132236,132240,132248,132251,132253,132264,132269,132317,132351,132354,132357,132360,132363,132407,132410,132413,132416,132419,132422,132425,132469,132472,132475,132478,132481,132484,132487,132493,132496,132540,132543,132546,132549,132552,132555,132599,132602,132604,132607,132611,132615,132653,132657,132660,132663,132667,132675,132679,132682,132685,132688,132691],[10,131128,131124],{"id":131129},"_9-css盒模型浮动与切图",[18,131131,131133],{"id":131132},"_91-盒子模型","9.1 盒子模型",[14,131135,131136],{},"利用盒子来设计网页",[14,131138,131139],{},"盒子包含：边框、外边距、内边距、实际内容",[14,131141,131142],{},"网页布局设置：",[14,131144,131145],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,131147,131148],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,131150,131151],{},"③往盒子里装内容",[2918,131153],{"style":127661,"src":131154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[1599,131156,131158],{"id":131157},"_911-边框border","9.1.1 边框（border）",[574,131160,131161,131164],{},[564,131162,131163],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[564,131165,131166],{},"语法",[23,131168,131170],{"className":127805,"code":131169,"language":127807,"meta":28,"style":28},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[30,131171,131172,131177,131183,131200],{"__ignoreMap":28},[33,131173,131174],{"class":35,"line":36},[33,131175,131176],{"class":60},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[33,131178,131179,131181],{"class":35,"line":51},[33,131180,52864],{"class":52553},[33,131182,16823],{"class":47},[33,131184,131185,131187,131189,131191,131193,131195,131198],{"class":35,"line":57},[33,131186,72149],{"class":76},[33,131188,52690],{"class":47},[33,131190,701],{"class":76},[33,131192,52745],{"class":39},[33,131194,52774],{"class":76},[33,131196,131197],{"class":76}," #ccc",[33,131199,80],{"class":47},[33,131201,131202],{"class":35,"line":64},[33,131203,231],{"class":47},[1756,131205,131206,131214],{},[1759,131207,131208],{},[1762,131209,131210,131212],{},[1765,131211,130407],{"align":24988},[1765,131213,103949],{"align":24988},[1802,131215,131216,131224,131232],{},[1762,131217,131218,131221],{},[1807,131219,131220],{"align":24988},"border-width",[1807,131222,131223],{"align":24988},"定义边框粗细，单位是px",[1762,131225,131226,131229],{},[1807,131227,131228],{"align":24988},"border-style",[1807,131230,131231],{"align":24988},"边框的样式",[1762,131233,131234,131237],{},[1807,131235,131236],{"align":24988},"border-color",[1807,131238,131239],{"align":24988},"边框的颜色",[14,131241,131242],{},"边框样式 border-style 可以设置如下值：",[561,131244,131245,131248,131251,131254],{},[564,131246,131247],{},"none：没有边框即忽略所有边框的宽度（默认值）",[564,131249,131250],{},"solid：边框为单实线(最为常用的)",[564,131252,131253],{},"dashed：边框为虚线",[564,131255,131256],{},"dotted：边框为点线",[574,131258,131259],{"start":57},[564,131260,131261],{},"边框的合写分写",[23,131263,131264],{"className":127805,"code":131169,"language":127807,"meta":28,"style":28},[30,131265,131266,131270,131276,131292],{"__ignoreMap":28},[33,131267,131268],{"class":35,"line":36},[33,131269,131176],{"class":60},[33,131271,131272,131274],{"class":35,"line":51},[33,131273,52864],{"class":52553},[33,131275,16823],{"class":47},[33,131277,131278,131280,131282,131284,131286,131288,131290],{"class":35,"line":57},[33,131279,72149],{"class":76},[33,131281,52690],{"class":47},[33,131283,701],{"class":76},[33,131285,52745],{"class":39},[33,131287,52774],{"class":76},[33,131289,131197],{"class":76},[33,131291,80],{"class":47},[33,131293,131294],{"class":35,"line":64},[33,131295,231],{"class":47},[14,131297,131298],{},"边框分开写法：",[23,131300,131302],{"className":127805,"code":131301,"language":127807,"meta":28,"style":28},"\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",[30,131303,131304,131309,131315,131333,131351,131370,131388],{"__ignoreMap":28},[33,131305,131306],{"class":35,"line":36},[33,131307,131308],{"class":60},"\u002F* 边框分开写法 *\u002F\n",[33,131310,131311,131313],{"class":35,"line":51},[33,131312,52864],{"class":52553},[33,131314,16823],{"class":47},[33,131316,131317,131320,131322,131324,131326,131328,131331],{"class":35,"line":57},[33,131318,131319],{"class":76},"  border-top",[33,131321,52690],{"class":47},[33,131323,701],{"class":76},[33,131325,52745],{"class":39},[33,131327,52774],{"class":76},[33,131329,131330],{"class":76}," #000",[33,131332,80],{"class":47},[33,131334,131335,131338,131340,131342,131344,131346,131349],{"class":35,"line":64},[33,131336,131337],{"class":76},"  border-right",[33,131339,52690],{"class":47},[33,131341,707],{"class":76},[33,131343,52745],{"class":39},[33,131345,63494],{"class":76},[33,131347,131348],{"class":76}," #333",[33,131350,80],{"class":47},[33,131352,131353,131356,131358,131360,131362,131365,131368],{"class":35,"line":83},[33,131354,131355],{"class":76},"  border-bottom",[33,131357,52690],{"class":47},[33,131359,712],{"class":76},[33,131361,52745],{"class":39},[33,131363,131364],{"class":76}," dotted",[33,131366,131367],{"class":76}," #666",[33,131369,80],{"class":47},[33,131371,131372,131375,131377,131379,131381,131383,131386],{"class":35,"line":89},[33,131373,131374],{"class":76},"  border-left",[33,131376,52690],{"class":47},[33,131378,701],{"class":76},[33,131380,52745],{"class":39},[33,131382,52774],{"class":76},[33,131384,131385],{"class":76}," #999",[33,131387,80],{"class":47},[33,131389,131390],{"class":35,"line":98},[33,131391,231],{"class":47},[574,131393,131394],{"start":64},[564,131395,131396],{},"表格的细线边框",[14,131398,131399],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[23,131401,131403],{"className":127805,"code":131402,"language":127807,"meta":28,"style":28},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[30,131404,131405,131410,131416,131426],{"__ignoreMap":28},[33,131406,131407],{"class":35,"line":36},[33,131408,131409],{"class":60},"\u002F* 表格细线边框合并 *\u002F\n",[33,131411,131412,131414],{"class":35,"line":51},[33,131413,1756],{"class":52553},[33,131415,16823],{"class":47},[33,131417,131418,131420,131422,131424],{"class":35,"line":57},[33,131419,71831],{"class":76},[33,131421,52690],{"class":47},[33,131423,66288],{"class":76},[33,131425,80],{"class":47},[33,131427,131428],{"class":35,"line":64},[33,131429,231],{"class":47},[14,131431,131432],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[574,131434,131435],{"start":83},[564,131436,131437],{},"解决边框额外增加盒子的实际大小的方法：",[561,131439,131440,131443],{},[564,131441,131442],{},"测量盒子大小的时候,不量边框",[564,131444,131445],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[1599,131447,131449],{"id":131448},"_912-内边距","9.1.2 内边距",[574,131451,131452,131455],{},[564,131453,131454],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[564,131456,131166],{},[1756,131458,131459,131469],{},[1759,131460,131461],{},[1762,131462,131463,131466],{},[1765,131464,131465],{"align":24988},"值的个数",[1765,131467,131468],{"align":24988},"表达意思",[1802,131470,131471,131479,131487,131495],{},[1762,131472,131473,131476],{},[1807,131474,131475],{"align":24988},"padding: 5px;",[1807,131477,131478],{"align":24988},"1个值，代表上下左右都有5个元素",[1762,131480,131481,131484],{},[1807,131482,131483],{"align":24988},"padding: 5px 10px;",[1807,131485,131486],{"align":24988},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1762,131488,131489,131492],{},[1807,131490,131491],{"align":24988},"padding: 5px 10px 20px;",[1807,131493,131494],{"align":24988},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1762,131496,131497,131500],{},[1807,131498,131499],{"align":24988},"padding: 5px 10px 20px 30px;",[1807,131501,131502],{"align":24988},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1756,131504,131505,131513],{},[1759,131506,131507],{},[1762,131508,131509,131511],{},[1765,131510,130407],{"align":24988},[1765,131512,103949],{"align":24988},[1802,131514,131515,131523,131531,131539],{},[1762,131516,131517,131520],{},[1807,131518,131519],{"align":24988},"padding-left",[1807,131521,131522],{"align":24988},"左内边距",[1762,131524,131525,131528],{},[1807,131526,131527],{"align":24988},"padding-right",[1807,131529,131530],{"align":24988},"右内边距",[1762,131532,131533,131536],{},[1807,131534,131535],{"align":24988},"padding-top",[1807,131537,131538],{"align":24988},"上内边距",[1762,131540,131541,131544],{},[1807,131542,131543],{"align":24988},"padding-bottom",[1807,131545,131546],{"align":24988},"下内边距",[574,131548,131549],{"start":57},[564,131550,131551],{},"内边距会影响盒子的实际大小",[14,131553,131554],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,131556,131557],{},"①内容和边框有了距离，添加了内边距",[14,131559,131560],{},"②padding影响了盒子实际大小",[14,131562,131563],{},"内边距对盒子大小的影响：",[14,131565,131566],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,131568,131569],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,131571,96473],{},[14,131573,131574],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[1599,131576,131578],{"id":131577},"_913-外边距","9.1.3 外边距",[574,131580,131581],{},[564,131582,131583],{},"控制盒子与盒子之间的距离",[1756,131585,131586,131594],{},[1759,131587,131588],{},[1762,131589,131590,131592],{},[1765,131591,130407],{"align":24988},[1765,131593,103949],{"align":24988},[1802,131595,131596,131604,131612,131620],{},[1762,131597,131598,131601],{},[1807,131599,131600],{"align":24988},"margin-left",[1807,131602,131603],{"align":24988},"左外边距",[1762,131605,131606,131609],{},[1807,131607,131608],{"align":24988},"margin-right",[1807,131610,131611],{"align":24988},"右外边距",[1762,131613,131614,131617],{},[1807,131615,131616],{"align":24988},"margin-top",[1807,131618,131619],{"align":24988},"上外边距",[1762,131621,131622,131625],{},[1807,131623,131624],{"align":24988},"margin-bottom",[1807,131626,131627],{"align":24988},"下外边距",[574,131629,131630],{"start":51},[564,131631,131632],{},"外边距可以让块级盒子水平居中的两个条件：",[14,131634,131635],{},"①盒子必须指定了宽度（width）",[14,131637,131638],{},"②盒子左右的外边距都设置为 auto",[23,131640,131642],{"className":127805,"code":131641,"language":127807,"meta":28,"style":28},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,131643,131644,131649,131656,131672],{"__ignoreMap":28},[33,131645,131646],{"class":35,"line":36},[33,131647,131648],{"class":60},"\u002F* margin 复合写法（同上） *\u002F\n",[33,131650,131651,131654],{"class":35,"line":51},[33,131652,131653],{"class":43},".box",[33,131655,16823],{"class":47},[33,131657,131658,131660,131662,131664,131666,131669],{"class":35,"line":57},[33,131659,71723],{"class":76},[33,131661,52690],{"class":47},[33,131663,766],{"class":76},[33,131665,52809],{"class":76},[33,131667,131668],{"class":47},";  ",[33,131670,131671],{"class":60},"\u002F* 块级盒子水平居中 *\u002F\n",[33,131673,131674],{"class":35,"line":64},[33,131675,231],{"class":47},[574,131677,131678],{"start":57},[564,131679,131680],{},"外边距塌陷问题",[14,131682,131683],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2918,131685],{"style":127661,"src":131686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,131688,131689],{},"解决方案：",[14,131691,131692],{},"①可以为父亲元素定义上边距",[23,131694,131695],{"className":127805,"code":131641,"language":127807,"meta":28,"style":28},[30,131696,131697,131701,131707,131721],{"__ignoreMap":28},[33,131698,131699],{"class":35,"line":36},[33,131700,131648],{"class":60},[33,131702,131703,131705],{"class":35,"line":51},[33,131704,131653],{"class":43},[33,131706,16823],{"class":47},[33,131708,131709,131711,131713,131715,131717,131719],{"class":35,"line":57},[33,131710,71723],{"class":76},[33,131712,52690],{"class":47},[33,131714,766],{"class":76},[33,131716,52809],{"class":76},[33,131718,131668],{"class":47},[33,131720,131671],{"class":60},[33,131722,131723],{"class":35,"line":64},[33,131724,231],{"class":47},[14,131726,131727],{},"②可以为父亲元素定义上内边距",[14,131729,131730],{},"③可以为父亲元素添加overflow:hidden",[2918,131732],{"style":127661,"src":131733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[23,131735,131736],{"className":127805,"code":131641,"language":127807,"meta":28,"style":28},[30,131737,131738,131742,131748,131762],{"__ignoreMap":28},[33,131739,131740],{"class":35,"line":36},[33,131741,131648],{"class":60},[33,131743,131744,131746],{"class":35,"line":51},[33,131745,131653],{"class":43},[33,131747,16823],{"class":47},[33,131749,131750,131752,131754,131756,131758,131760],{"class":35,"line":57},[33,131751,71723],{"class":76},[33,131753,52690],{"class":47},[33,131755,766],{"class":76},[33,131757,52809],{"class":76},[33,131759,131668],{"class":47},[33,131761,131671],{"class":60},[33,131763,131764],{"class":35,"line":64},[33,131765,231],{"class":47},[2918,131767],{"style":127661,"src":131768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,131770,131771],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,131773,131774],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[1599,131776,131778],{"id":131777},"_914-清除内外边距","9.1.4 清除内外边距",[14,131780,131781],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[23,131783,131784],{"className":127805,"code":131641,"language":127807,"meta":28,"style":28},[30,131785,131786,131790,131796,131810],{"__ignoreMap":28},[33,131787,131788],{"class":35,"line":36},[33,131789,131648],{"class":60},[33,131791,131792,131794],{"class":35,"line":51},[33,131793,131653],{"class":43},[33,131795,16823],{"class":47},[33,131797,131798,131800,131802,131804,131806,131808],{"class":35,"line":57},[33,131799,71723],{"class":76},[33,131801,52690],{"class":47},[33,131803,766],{"class":76},[33,131805,52809],{"class":76},[33,131807,131668],{"class":47},[33,131809,131671],{"class":60},[33,131811,131812],{"class":35,"line":64},[33,131813,231],{"class":47},[14,131815,131816],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[1599,131818,131820],{"id":131819},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[561,131822,131823,131826,131829,131832,131835,131838],{},[564,131824,131825],{},"文件→打开 ：可以打开我们要测量的图片",[564,131827,131828],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[564,131830,131831],{},"右击标尺，把里面的单位改为像素",[564,131833,131834],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[564,131836,131837],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[564,131839,131840],{},"用选区拖动 可以测量大小",[2918,131842],{"style":127661,"src":131843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[561,131845,131846,131849],{},[564,131847,131848],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[564,131850,131851],{},"吸管取色工具",[2918,131853],{"style":127661,"src":131854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[1599,131856,131858],{"id":131857},"_916-案例","9.1.6 案例",[574,131860,131861],{},[564,131862,131863],{},"小米商品",[2918,131865],{"style":127661,"src":131866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[23,131868,131869],{"className":127805,"code":131641,"language":127807,"meta":28,"style":28},[30,131870,131871,131875,131881,131895],{"__ignoreMap":28},[33,131872,131873],{"class":35,"line":36},[33,131874,131648],{"class":60},[33,131876,131877,131879],{"class":35,"line":51},[33,131878,131653],{"class":43},[33,131880,16823],{"class":47},[33,131882,131883,131885,131887,131889,131891,131893],{"class":35,"line":57},[33,131884,71723],{"class":76},[33,131886,52690],{"class":47},[33,131888,766],{"class":76},[33,131890,52809],{"class":76},[33,131892,131668],{"class":47},[33,131894,131671],{"class":60},[33,131896,131897],{"class":35,"line":64},[33,131898,231],{"class":47},[574,131900,131901],{"start":51},[564,131902,131903],{},"快报模块",[2918,131905],{"style":127661,"src":131906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[23,131908,131910],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[30,131911,131912,131917,131932,131937],{"__ignoreMap":28},[33,131913,131914],{"class":35,"line":36},[33,131915,131916],{"class":60},"\u003C!-- HTML 代码示例 -->\n",[33,131918,131919,131921,131923,131925,131927,131930],{"class":35,"line":51},[33,131920,875],{"class":47},[33,131922,52864],{"class":52553},[33,131924,54739],{"class":43},[33,131926,73],{"class":47},[33,131928,131929],{"class":119},"\"example\"",[33,131931,52560],{"class":47},[33,131933,131934],{"class":35,"line":57},[33,131935,131936],{"class":47},"  示例内容\n",[33,131938,131939,131941,131943],{"class":35,"line":64},[33,131940,53038],{"class":47},[33,131942,52864],{"class":52553},[33,131944,52560],{"class":47},[1599,131946,131948],{"id":131947},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[574,131950,131951],{},[564,131952,131953],{},"圆角边框",[14,131955,131956],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2918,131958],{"style":127661,"src":131959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[23,131961,131963],{"className":127805,"code":131962,"language":127807,"meta":28,"style":28},"div {\n  border: 1px solid #ccc;\n}\n",[30,131964,131965,131971,131987],{"__ignoreMap":28},[33,131966,131967,131969],{"class":35,"line":36},[33,131968,52864],{"class":52553},[33,131970,16823],{"class":47},[33,131972,131973,131975,131977,131979,131981,131983,131985],{"class":35,"line":51},[33,131974,72149],{"class":76},[33,131976,52690],{"class":47},[33,131978,701],{"class":76},[33,131980,52745],{"class":39},[33,131982,52774],{"class":76},[33,131984,131197],{"class":76},[33,131986,80],{"class":47},[33,131988,131989],{"class":35,"line":57},[33,131990,231],{"class":47},[14,131992,131993],{},"解释:",[561,131995,131996,131999,132002,132005,132008],{},[564,131997,131998],{},"参数值可以为数值或百分比的形式",[564,132000,132001],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[564,132003,132004],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[564,132006,132007],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[564,132009,132010],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[574,132012,132013],{"start":51},[564,132014,132015],{},"盒子阴影",[23,132017,132019],{"className":127805,"code":132018,"language":127807,"meta":28,"style":28},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[30,132020,132021,132027,132064],{"__ignoreMap":28},[33,132022,132023,132025],{"class":35,"line":36},[33,132024,52864],{"class":52553},[33,132026,16823],{"class":47},[33,132028,132029,132032,132034,132036,132038,132040,132042,132044,132046,132048,132050,132052,132054,132056,132058,132060,132062],{"class":35,"line":51},[33,132030,132031],{"class":76},"  box-shadow",[33,132033,52690],{"class":47},[33,132035,766],{"class":76},[33,132037,16006],{"class":76},[33,132039,52745],{"class":39},[33,132041,3461],{"class":76},[33,132043,52745],{"class":39},[33,132045,80020],{"class":76},[33,132047,345],{"class":47},[33,132049,766],{"class":76},[33,132051,13686],{"class":47},[33,132053,766],{"class":76},[33,132055,13686],{"class":47},[33,132057,766],{"class":76},[33,132059,13686],{"class":47},[33,132061,87463],{"class":76},[33,132063,4130],{"class":47},[33,132065,132066],{"class":35,"line":57},[33,132067,231],{"class":47},[1756,132069,132070,132078],{},[1759,132071,132072],{},[1762,132073,132074,132076],{},[1765,132075,1770],{"align":24988},[1765,132077,28742],{"align":24988},[1802,132079,132080,132088,132096,132104,132112,132120],{},[1762,132081,132082,132085],{},[1807,132083,132084],{"align":24988},"h-shadow",[1807,132086,132087],{"align":24988},"必需,水平阴影的位置,允许负值",[1762,132089,132090,132093],{},[1807,132091,132092],{"align":24988},"v-shadow",[1807,132094,132095],{"align":24988},"必需,垂直阴影的位置,允许负值",[1762,132097,132098,132101],{},[1807,132099,132100],{"align":24988},"blur",[1807,132102,132103],{"align":24988},"可选,模糊距离,就是影子的虚实",[1762,132105,132106,132109],{},[1807,132107,132108],{"align":24988},"spread",[1807,132110,132111],{"align":24988},"可选,阴影尺寸",[1762,132113,132114,132117],{},[1807,132115,132116],{"align":24988},"color",[1807,132118,132119],{"align":24988},"可选,阴影的颜色",[1762,132121,132122,132125],{},[1807,132123,132124],{"align":24988},"inset",[1807,132126,132127],{"align":24988},"可选,将外部阴影(outset)改为内部阴影",[574,132129,132130],{"start":57},[564,132131,132132],{},"文字阴影",[23,132134,132136],{"className":127805,"code":132135,"language":127807,"meta":28,"style":28},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[30,132137,132138,132144,132183],{"__ignoreMap":28},[33,132139,132140,132142],{"class":35,"line":36},[33,132141,14],{"class":52553},[33,132143,16823],{"class":47},[33,132145,132146,132149,132151,132153,132155,132157,132159,132161,132163,132165,132167,132169,132171,132173,132175,132177,132179,132181],{"class":35,"line":51},[33,132147,132148],{"class":76},"  text-shadow",[33,132150,52690],{"class":47},[33,132152,701],{"class":76},[33,132154,52745],{"class":39},[33,132156,26371],{"class":76},[33,132158,52745],{"class":39},[33,132160,16006],{"class":76},[33,132162,52745],{"class":39},[33,132164,80020],{"class":76},[33,132166,345],{"class":47},[33,132168,766],{"class":76},[33,132170,13686],{"class":47},[33,132172,766],{"class":76},[33,132174,13686],{"class":47},[33,132176,766],{"class":76},[33,132178,13686],{"class":47},[33,132180,101774],{"class":76},[33,132182,4130],{"class":47},[33,132184,132185],{"class":35,"line":57},[33,132186,231],{"class":47},[1756,132188,132189,132197],{},[1759,132190,132191],{},[1762,132192,132193,132195],{},[1765,132194,1770],{"align":24988},[1765,132196,28742],{"align":24988},[1802,132198,132199,132205,132212,132219],{},[1762,132200,132201,132203],{},[1807,132202,132084],{"align":24988},[1807,132204,132087],{"align":24988},[1762,132206,132207,132209],{},[1807,132208,132092],{"align":24988},[1807,132210,132211],{"align":24988},"必需,垂直阴影位置,允许负值",[1762,132213,132214,132216],{},[1807,132215,132100],{"align":24988},[1807,132217,132218],{"align":24988},"可选,模糊的距离",[1762,132220,132221,132223],{},[1807,132222,132116],{"align":24988},[1807,132224,132119],{"align":24988},[18,132226,132228],{"id":132227},"_92-浮动","9.2 浮动",[1599,132230,132232],{"id":132231},"_921-浮动介绍","9.2.1 浮动介绍",[14,132234,132235],{},"在16.2中详细介绍",[1599,132237,132239],{"id":132238},"_922-清除浮动","9.2.2 清除浮动",[574,132241,132242,132245],{},[564,132243,132244],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[564,132246,132247],{},"清除浮动的本质",[14,132249,132250],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,132252,10276],{},[561,132254,132255,132258,132261],{},[564,132256,132257],{},"如果父盒子本身有高度，则不需要清除浮动",[564,132259,132260],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[564,132262,132263],{},"父级有了高度，就不会影响下面的标准流了",[574,132265,132266],{"start":57},[564,132267,132268],{},"清除浮动样式",[23,132270,132272],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[30,132273,132274,132281,132292,132296,132303,132313],{"__ignoreMap":28},[33,132275,132276,132279],{"class":35,"line":36},[33,132277,132278],{"class":43},".left",[33,132280,16823],{"class":47},[33,132282,132283,132286,132288,132290],{"class":35,"line":51},[33,132284,132285],{"class":76},"  float",[33,132287,52690],{"class":47},[33,132289,24988],{"class":76},[33,132291,80],{"class":47},[33,132293,132294],{"class":35,"line":57},[33,132295,231],{"class":47},[33,132297,132298,132301],{"class":35,"line":64},[33,132299,132300],{"class":43},".right",[33,132302,16823],{"class":47},[33,132304,132305,132307,132309,132311],{"class":35,"line":83},[33,132306,132285],{"class":76},[33,132308,52690],{"class":47},[33,132310,73775],{"class":76},[33,132312,80],{"class":47},[33,132314,132315],{"class":35,"line":89},[33,132316,231],{"class":47},[1756,132318,132319,132327],{},[1759,132320,132321],{},[1762,132322,132323,132325],{},[1765,132324,128269],{"align":24988},[1765,132326,28742],{"align":24988},[1802,132328,132329,132336,132343],{},[1762,132330,132331,132333],{},[1807,132332,24988],{"align":24988},[1807,132334,132335],{"align":24988},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1762,132337,132338,132340],{},[1807,132339,73775],{"align":24988},[1807,132341,132342],{"align":24988},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1762,132344,132345,132348],{},[1807,132346,132347],{"align":24988},"both",[1807,132349,132350],{"align":24988},"同时清除左右侧浮动的影响",[14,132352,132353],{},"法一",[14,132355,132356],{},"额外标签法也称为隔墙法",[14,132358,132359],{},"使用方式：",[14,132361,132362],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[23,132364,132365],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,132366,132367,132373,132383,132387,132393,132403],{"__ignoreMap":28},[33,132368,132369,132371],{"class":35,"line":36},[33,132370,132278],{"class":43},[33,132372,16823],{"class":47},[33,132374,132375,132377,132379,132381],{"class":35,"line":51},[33,132376,132285],{"class":76},[33,132378,52690],{"class":47},[33,132380,24988],{"class":76},[33,132382,80],{"class":47},[33,132384,132385],{"class":35,"line":57},[33,132386,231],{"class":47},[33,132388,132389,132391],{"class":35,"line":64},[33,132390,132300],{"class":43},[33,132392,16823],{"class":47},[33,132394,132395,132397,132399,132401],{"class":35,"line":83},[33,132396,132285],{"class":76},[33,132398,52690],{"class":47},[33,132400,73775],{"class":76},[33,132402,80],{"class":47},[33,132404,132405],{"class":35,"line":89},[33,132406,231],{"class":47},[14,132408,132409],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,132411,132412],{},"优点： 通俗易懂，书写方便",[14,132414,132415],{},"缺点： 添加许多无意义的标签，结构化较差",[14,132417,132418],{},"注意： 要求这个新的空标签必须是块级元素。",[14,132420,132421],{},"法二",[14,132423,132424],{},"父级添加overflow属性",[23,132426,132427],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,132428,132429,132435,132445,132449,132455,132465],{"__ignoreMap":28},[33,132430,132431,132433],{"class":35,"line":36},[33,132432,132278],{"class":43},[33,132434,16823],{"class":47},[33,132436,132437,132439,132441,132443],{"class":35,"line":51},[33,132438,132285],{"class":76},[33,132440,52690],{"class":47},[33,132442,24988],{"class":76},[33,132444,80],{"class":47},[33,132446,132447],{"class":35,"line":57},[33,132448,231],{"class":47},[33,132450,132451,132453],{"class":35,"line":64},[33,132452,132300],{"class":43},[33,132454,16823],{"class":47},[33,132456,132457,132459,132461,132463],{"class":35,"line":83},[33,132458,132285],{"class":76},[33,132460,52690],{"class":47},[33,132462,73775],{"class":76},[33,132464,80],{"class":47},[33,132466,132467],{"class":35,"line":89},[33,132468,231],{"class":47},[14,132470,132471],{},"overflow: hidden;",[14,132473,132474],{},"优点：代码简洁",[14,132476,132477],{},"缺点：无法显示溢出的部分",[14,132479,132480],{},"注意：是给父元素添加代码",[14,132482,132483],{},"法三",[14,132485,132486],{},"父级添加after伪元素",[14,132488,132489,132492],{},[132490,132491],"after",{}," 方式是额外标签法的升级版",[14,132494,132495],{},"使用的时候复制就可以",[23,132497,132498],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,132499,132500,132506,132516,132520,132526,132536],{"__ignoreMap":28},[33,132501,132502,132504],{"class":35,"line":36},[33,132503,132278],{"class":43},[33,132505,16823],{"class":47},[33,132507,132508,132510,132512,132514],{"class":35,"line":51},[33,132509,132285],{"class":76},[33,132511,52690],{"class":47},[33,132513,24988],{"class":76},[33,132515,80],{"class":47},[33,132517,132518],{"class":35,"line":57},[33,132519,231],{"class":47},[33,132521,132522,132524],{"class":35,"line":64},[33,132523,132300],{"class":43},[33,132525,16823],{"class":47},[33,132527,132528,132530,132532,132534],{"class":35,"line":83},[33,132529,132285],{"class":76},[33,132531,52690],{"class":47},[33,132533,73775],{"class":76},[33,132535,80],{"class":47},[33,132537,132538],{"class":35,"line":89},[33,132539,231],{"class":47},[14,132541,132542],{},"优点：没有增加标签，结构更简单",[14,132544,132545],{},"缺点：照顾低版本浏览器",[14,132547,132548],{},"代表网站： 百度、淘宝网、网易等",[14,132550,132551],{},"法四",[14,132553,132554],{},"父级添加双伪元素",[23,132556,132557],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,132558,132559,132565,132575,132579,132585,132595],{"__ignoreMap":28},[33,132560,132561,132563],{"class":35,"line":36},[33,132562,132278],{"class":43},[33,132564,16823],{"class":47},[33,132566,132567,132569,132571,132573],{"class":35,"line":51},[33,132568,132285],{"class":76},[33,132570,52690],{"class":47},[33,132572,24988],{"class":76},[33,132574,80],{"class":47},[33,132576,132577],{"class":35,"line":57},[33,132578,231],{"class":47},[33,132580,132581,132583],{"class":35,"line":64},[33,132582,132300],{"class":43},[33,132584,16823],{"class":47},[33,132586,132587,132589,132591,132593],{"class":35,"line":83},[33,132588,132285],{"class":76},[33,132590,52690],{"class":47},[33,132592,73775],{"class":76},[33,132594,80],{"class":47},[33,132596,132597],{"class":35,"line":89},[33,132598,231],{"class":47},[14,132600,132601],{},"优点：代码更简洁",[14,132603,132545],{},[14,132605,132606],{},"代表网站：小米、腾讯等",[18,132608,132610],{"id":132609},"_93-ps切图","9.3 PS切图",[1599,132612,132614],{"id":132613},"_931-常见图片格式","9.3.1 常见图片格式",[1756,132616,132617,132627],{},[1759,132618,132619],{},[1762,132620,132621,132624],{},[1765,132622,132623],{"align":24988},"jpg图像格式",[1765,132625,132626],{"align":24988},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1802,132628,132629,132637,132645],{},[1762,132630,132631,132634],{},[1807,132632,132633],{"align":24988},"gif图像格式",[1807,132635,132636],{"align":24988},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1762,132638,132639,132642],{},[1807,132640,132641],{"align":24988},"png图像格式",[1807,132643,132644],{"align":24988},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1762,132646,132647,132650],{},[1807,132648,132649],{"align":24988},"PSD图像格式",[1807,132651,132652],{"align":24988},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[1599,132654,132656],{"id":132655},"_932-图层切图","9.3.2 图层切图",[14,132658,132659],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,132661,132662],{},"按住shift选中两个图层->图层菜单->合并图层",[1599,132664,132666],{"id":132665},"_933-切片切图","9.3.3 切片切图",[561,132668,132669,132672],{},[564,132670,132671],{},"利用切片工具手动划出",[564,132673,132674],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[1599,132676,132678],{"id":132677},"_934-切图步骤","9.3.4 切图步骤",[14,132680,132681],{},"用切片工具选中：",[2918,132683],{"style":127661,"src":132684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,132686,132687],{},"文件 -> 导出",[2918,132689],{"style":127661,"src":132690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1544,132692,132693],{},"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":28,"searchDepth":51,"depth":51,"links":132695},[132696,132705,132709],{"id":131132,"depth":51,"text":131133,"children":132697},[132698,132699,132700,132701,132702,132703,132704],{"id":131157,"depth":57,"text":131158},{"id":131448,"depth":57,"text":131449},{"id":131577,"depth":57,"text":131578},{"id":131777,"depth":57,"text":131778},{"id":131819,"depth":57,"text":131820},{"id":131857,"depth":57,"text":131858},{"id":131947,"depth":57,"text":131948},{"id":132227,"depth":51,"text":132228,"children":132706},[132707,132708],{"id":132231,"depth":57,"text":132232},{"id":132238,"depth":57,"text":132239},{"id":132609,"depth":51,"text":132610,"children":132710},[132711,132712,132713,132714],{"id":132613,"depth":57,"text":132614},{"id":132655,"depth":57,"text":132656},{"id":132665,"depth":57,"text":132666},{"id":132677,"depth":57,"text":132678},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131124,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132721,"title":132722,"body":132723,"description":24628,"extension":1557,"meta":133364,"navigation":159,"path":133365,"seo":133366,"stem":133367,"__hash__":133368},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132724,"toc":133352},[132725,132728,132732,132758,132792,132796,132800,132803,132845,132852,132862,132870,132872,132875,132878,132881,132888,132902,132906,132909,132938,132942,132945,132959,132963,132966,132994,132998,133001,133027,133031,133036,133069,133074,133102,133106,133123,133169,133174,133218,133235,133342,133350],[10,132726,132722],{"id":132727},"_10-css规范与学成在线案例",[18,132729,132731],{"id":132730},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[574,132733,132734,132740,132746,132752],{},[564,132735,132736,132739],{},[480,132737,132738],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[564,132741,132742,132745],{},[480,132743,132744],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[564,132747,132748,132751],{},[480,132749,132750],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[564,132753,132754,132757],{},[480,132755,132756],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[23,132759,132760],{"className":127805,"code":131169,"language":127807,"meta":28,"style":28},[30,132761,132762,132766,132772,132788],{"__ignoreMap":28},[33,132763,132764],{"class":35,"line":36},[33,132765,131176],{"class":60},[33,132767,132768,132770],{"class":35,"line":51},[33,132769,52864],{"class":52553},[33,132771,16823],{"class":47},[33,132773,132774,132776,132778,132780,132782,132784,132786],{"class":35,"line":57},[33,132775,72149],{"class":76},[33,132777,52690],{"class":47},[33,132779,701],{"class":76},[33,132781,52745],{"class":39},[33,132783,52774],{"class":76},[33,132785,131197],{"class":76},[33,132787,80],{"class":47},[33,132789,132790],{"class":35,"line":64},[33,132791,231],{"class":47},[18,132793,132795],{"id":132794},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[1599,132797,132799],{"id":132798},"_1021-header头部制作","10.2.1 header头部制作",[2918,132801],{"style":127661,"src":132802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[561,132804,132805,132812,132819,132825,132832,132839],{},[564,132806,132807,132808,132811],{},"1号是版心盒子 ",[480,132809,132810],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[564,132813,132814,132815,132818],{},"版心盒子 里面包含 2号盒子 ",[480,132816,132817],{},"logo"," 图标",[564,132820,132821,132822,132824],{},"版心盒子 里面包含 3号盒子 ",[480,132823,54966],{}," 导航栏",[564,132826,132827,132828,132831],{},"版心盒子 里面包含 4号盒子 ",[480,132829,132830],{},"search"," 搜索框",[564,132833,132834,132835,132838],{},"版心盒子 里面包含 5号盒子 ",[480,132836,132837],{},"user"," 个人信息",[564,132840,132841,132842],{},"注意，要求里面的 ",[480,132843,132844],{},"4个子盒子 必须都浮动",[574,132846,132847],{},[564,132848,132849],{},[480,132850,132851],{},"导航栏注意点:",[14,132853,132854,132855,132858,132859],{},"实际开发中， ",[480,132856,132857],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[480,132860,132861],{},"用 li 包含链接(li+a)的做法",[561,132863,132864,132867],{},[564,132865,132866],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[564,132868,132869],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,132871,10276],{},[14,132873,132874],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,132876,132877],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,132879,132880],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[574,132882,132883],{"start":51},[564,132884,132885],{},[480,132886,132887],{},"4号盒子search的细节：",[561,132889,132890,132893,132896],{},[564,132891,132892],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[564,132894,132895],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[564,132897,132898,132901],{},[30,132899,132900],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[1599,132903,132905],{"id":132904},"_1022-banner制作","10.2.2 banner制作",[2918,132907],{"style":127661,"src":132908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[561,132910,132911,132918,132924,132931],{},[564,132912,132913,132914,132917],{},"1号盒子是通栏的大盒子 ",[480,132915,132916],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[564,132919,132920,132921,132923],{},"2号盒子是版心 ",[480,132922,2394],{}," ， 要水平居中对齐",[564,132925,132926,132927,132930],{},"3号盒子版心内，左对齐 ",[480,132928,132929],{},"subnav"," 侧导航栏",[564,132932,132933,132934,132937],{},"4号盒子版心内，右对齐 ",[480,132935,132936],{},"course"," 课程",[1599,132939,132941],{"id":132940},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2918,132943],{"style":127661,"src":132944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[561,132946,132947,132950,132953,132956],{},[564,132948,132949],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[564,132951,132952],{},"1号盒子是标题 H3 左侧浮动",[564,132954,132955],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[564,132957,132958],{},"3号盒子 右浮动 mod 修改",[1599,132960,132962],{"id":132961},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2918,132964],{"style":127661,"src":132965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[561,132967,132968,132974,132981,132988,132991],{},[564,132969,132970,132971,132973],{},"1号盒子为最大的盒子 ",[480,132972,54967],{}," 版心水平居中对齐",[564,132975,132976,132977,132980],{},"2号盒子为上面部分 ",[480,132978,132979],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[564,132982,132983,132984,132987],{},"3号盒子为底下部分 ",[480,132985,132986],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[564,132989,132990],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[564,132992,132993],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[1599,132995,132997],{"id":132996},"_1025-底部模块制作","10.2.5 底部模块制作",[2918,132999],{"style":127661,"src":133000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[561,133002,133003,133010,133013,133020],{},[564,133004,133005,133006,133009],{},"1号盒子通栏大盒子 底部 ",[480,133007,133008],{},"footer"," 给高度 底色是白色",[564,133011,133012],{},"2号盒子版心水平居中",[564,133014,133015,133016,133019],{},"3号盒子版权 ",[480,133017,133018],{},"copyright"," 左对齐",[564,133021,133022,133023,133026],{},"4号盒子 链接组 ",[480,133024,133025],{},"links"," 右对齐",[1599,133028,133030],{"id":133029},"_1026-代码模块","10.2.6 代码模块",[574,133032,133033],{},[564,133034,133035],{},"html部分",[23,133037,133039],{"className":128552,"code":133038,"language":128554,"meta":28,"style":28},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[30,133040,133041],{"__ignoreMap":28},[33,133042,133043,133045,133047,133049,133051,133054,133057,133059,133062,133065,133067],{"class":35,"line":36},[33,133044,875],{"class":47},[33,133046,126],{"class":52553},[33,133048,62310],{"class":43},[33,133050,73],{"class":47},[33,133052,133053],{"class":119},"\"https:\u002F\u002Fexample.com\"",[33,133055,133056],{"class":43}," target",[33,133058,73],{"class":47},[33,133060,133061],{"class":119},"\"_blank\"",[33,133063,133064],{"class":47},">链接文字\u003C\u002F",[33,133066,126],{"class":52553},[33,133068,52560],{"class":47},[574,133070,133071],{"start":51},[564,133072,133073],{},"css部分",[23,133075,133076],{"className":128552,"code":133038,"language":128554,"meta":28,"style":28},[30,133077,133078],{"__ignoreMap":28},[33,133079,133080,133082,133084,133086,133088,133090,133092,133094,133096,133098,133100],{"class":35,"line":36},[33,133081,875],{"class":47},[33,133083,126],{"class":52553},[33,133085,62310],{"class":43},[33,133087,73],{"class":47},[33,133089,133053],{"class":119},[33,133091,133056],{"class":43},[33,133093,73],{"class":47},[33,133095,133061],{"class":119},[33,133097,133064],{"class":47},[33,133099,126],{"class":52553},[33,133101,52560],{"class":47},[1599,133103,133105],{"id":133104},"_1027-收获","10.2.7 收获",[574,133107,133108,133111,133114,133117,133120],{},[564,133109,133110],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[564,133112,133113],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[564,133115,133116],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[564,133118,133119],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[564,133121,133122],{},"遗忘代码",[23,133124,133126],{"className":127805,"code":133125,"language":127807,"meta":28,"style":28},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[30,133127,133128,133150,133155,133165],{"__ignoreMap":28},[33,133129,133130,133132,133134,133136,133138,133140,133142,133144,133146,133148],{"class":35,"line":36},[33,133131,52864],{"class":52553},[33,133133,13686],{"class":47},[33,133135,14],{"class":52553},[33,133137,13686],{"class":47},[33,133139,10],{"class":52553},[33,133141,13686],{"class":47},[33,133143,561],{"class":52553},[33,133145,13686],{"class":47},[33,133147,564],{"class":52553},[33,133149,16823],{"class":47},[33,133151,133152],{"class":35,"line":51},[33,133153,133154],{"class":60},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[33,133156,133157,133159,133161,133163],{"class":35,"line":57},[33,133158,129421],{"class":76},[33,133160,52690],{"class":47},[33,133162,62122],{"class":76},[33,133164,80],{"class":47},[33,133166,133167],{"class":35,"line":64},[33,133168,231],{"class":47},[574,133170,133171],{"start":89},[564,133172,133173],{},"html引css的程序",[23,133175,133176],{"className":127805,"code":133125,"language":127807,"meta":28,"style":28},[30,133177,133178,133200,133204,133214],{"__ignoreMap":28},[33,133179,133180,133182,133184,133186,133188,133190,133192,133194,133196,133198],{"class":35,"line":36},[33,133181,52864],{"class":52553},[33,133183,13686],{"class":47},[33,133185,14],{"class":52553},[33,133187,13686],{"class":47},[33,133189,10],{"class":52553},[33,133191,13686],{"class":47},[33,133193,561],{"class":52553},[33,133195,13686],{"class":47},[33,133197,564],{"class":52553},[33,133199,16823],{"class":47},[33,133201,133202],{"class":35,"line":51},[33,133203,133154],{"class":60},[33,133205,133206,133208,133210,133212],{"class":35,"line":57},[33,133207,129421],{"class":76},[33,133209,52690],{"class":47},[33,133211,62122],{"class":76},[33,133213,80],{"class":47},[33,133215,133216],{"class":35,"line":64},[33,133217,231],{"class":47},[574,133219,133220,133223,133226,133229,133232],{"start":98},[564,133221,133222],{},"浮动的盒子不会有外边距合并问题",[564,133224,133225],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[564,133227,133228],{},"ctrl+g快速定位行；shift+alt多个光标",[564,133230,133231],{},"学习上方各个模块的选择器起名方法，以后就这样用",[564,133233,133234],{},"在写选择器时尽量写全一些，例如",[23,133236,133238],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},"\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",[30,133239,133240,133245,133261,133266,133281,133286,133301,133306,133321,133326],{"__ignoreMap":28},[33,133241,133242],{"class":35,"line":36},[33,133243,133244],{"class":60},"\u002F* 静态定位（默认） *\u002F\n",[33,133246,133247,133250,133252,133254,133256,133259],{"class":35,"line":51},[33,133248,133249],{"class":43},".static",[33,133251,81060],{"class":47},[33,133253,130165],{"class":76},[33,133255,52690],{"class":47},[33,133257,133258],{"class":76},"static",[33,133260,130735],{"class":47},[33,133262,133263],{"class":35,"line":57},[33,133264,133265],{"class":60},"\u002F* 相对定位 *\u002F\n",[33,133267,133268,133271,133273,133275,133277,133279],{"class":35,"line":64},[33,133269,133270],{"class":43},".relative",[33,133272,81060],{"class":47},[33,133274,130165],{"class":76},[33,133276,52690],{"class":47},[33,133278,56017],{"class":76},[33,133280,130735],{"class":47},[33,133282,133283],{"class":35,"line":83},[33,133284,133285],{"class":60},"\u002F* 绝对定位 *\u002F\n",[33,133287,133288,133291,133293,133295,133297,133299],{"class":35,"line":89},[33,133289,133290],{"class":43},".absolute",[33,133292,81060],{"class":47},[33,133294,130165],{"class":76},[33,133296,52690],{"class":47},[33,133298,56084],{"class":76},[33,133300,130735],{"class":47},[33,133302,133303],{"class":35,"line":98},[33,133304,133305],{"class":60},"\u002F* 固定定位 *\u002F\n",[33,133307,133308,133311,133313,133315,133317,133319],{"class":35,"line":110},[33,133309,133310],{"class":43},".fixed",[33,133312,81060],{"class":47},[33,133314,130165],{"class":76},[33,133316,52690],{"class":47},[33,133318,87486],{"class":76},[33,133320,130735],{"class":47},[33,133322,133323],{"class":35,"line":134},[33,133324,133325],{"class":60},"\u002F* 粘性定位 *\u002F\n",[33,133327,133328,133331,133333,133335,133337,133340],{"class":35,"line":156},[33,133329,133330],{"class":43},".sticky",[33,133332,81060],{"class":47},[33,133334,130165],{"class":76},[33,133336,52690],{"class":47},[33,133338,133339],{"class":76},"sticky",[33,133341,130735],{"class":47},[574,133343,133344,133347],{"start":169},[564,133345,133346],{},"一定要用好注释",[564,133348,133349],{},"浮动的盒子不会有外边距合并的问题",[1544,133351,132693],{},{"title":28,"searchDepth":51,"depth":51,"links":133353},[133354,133355],{"id":132730,"depth":51,"text":132731},{"id":132794,"depth":51,"text":132795,"children":133356},[133357,133358,133359,133360,133361,133362,133363],{"id":132798,"depth":57,"text":132799},{"id":132904,"depth":57,"text":132905},{"id":132940,"depth":57,"text":132941},{"id":132961,"depth":57,"text":132962},{"id":132996,"depth":57,"text":132997},{"id":133029,"depth":57,"text":133030},{"id":133104,"depth":57,"text":133105},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132722,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133370,"title":133371,"body":133372,"description":24628,"extension":1557,"meta":134858,"navigation":159,"path":134859,"seo":134860,"stem":134861,"__hash__":134862},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133373,"toc":134850},[133374,133377,133381,133385,133396,133400,133417,133461,133494,133497,133514,133517,133520,133564,133568,133572,133575,133578,133582,133585,133596,133659,133700,133703,133718,133772,133780,133783,133794,133848,133874,133877,133890,133944,133976,134030,134053,134107,134110,134113,134120,134174,134195,134249,134252,134255,134340,134348,134405,134428,134432,134435,134453,134457,134476,134530,134568,134572,134575,134578,134600,134604,134612,134615,134620,134631,134634,134638,134652,134696,134699,134703,134706,134711,134737,134742,134819,134822,134826,134829,134832,134835,134838,134841,134844,134847],[10,133375,133371],{"id":133376},"_11-传统布局与定位体系",[18,133378,133380],{"id":133379},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[1599,133382,133384],{"id":133383},"_1111-普通流标准流","11.1.1 普通流（标准流）",[561,133386,133387,133390,133393],{},[564,133388,133389],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[564,133391,133392],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[564,133394,133395],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[1599,133397,133399],{"id":133398},"_1112-浮动","11.1.2 浮动",[561,133401,133402,133405,133408,133411,133414],{},[564,133403,133404],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[564,133406,133407],{},"浮动可以改变元素标签默认的排列方式",[564,133409,133410],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[564,133412,133413],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[564,133415,133416],{},"在使用行内块转换时盒子之间是有空隙的",[23,133418,133419],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,133420,133421,133427,133437,133441,133447,133457],{"__ignoreMap":28},[33,133422,133423,133425],{"class":35,"line":36},[33,133424,132278],{"class":43},[33,133426,16823],{"class":47},[33,133428,133429,133431,133433,133435],{"class":35,"line":51},[33,133430,132285],{"class":76},[33,133432,52690],{"class":47},[33,133434,24988],{"class":76},[33,133436,80],{"class":47},[33,133438,133439],{"class":35,"line":57},[33,133440,231],{"class":47},[33,133442,133443,133445],{"class":35,"line":64},[33,133444,132300],{"class":43},[33,133446,16823],{"class":47},[33,133448,133449,133451,133453,133455],{"class":35,"line":83},[33,133450,132285],{"class":76},[33,133452,52690],{"class":47},[33,133454,73775],{"class":76},[33,133456,80],{"class":47},[33,133458,133459],{"class":35,"line":89},[33,133460,231],{"class":47},[1756,133462,133463,133471],{},[1759,133464,133465],{},[1762,133466,133467,133469],{},[1765,133468,128269],{"align":24988},[1765,133470,28742],{"align":24988},[1802,133472,133473,133480,133487],{},[1762,133474,133475,133477],{},[1807,133476,55990],{"align":24988},[1807,133478,133479],{"align":24988},"元素不浮动（默认值）",[1762,133481,133482,133484],{},[1807,133483,24988],{"align":24988},[1807,133485,133486],{"align":24988},"元素向左浮动",[1762,133488,133489,133491],{},[1807,133490,73775],{"align":24988},[1807,133492,133493],{"align":24988},"元素向右浮动",[14,133495,133496],{},"浮动重点：",[561,133498,133499,133502,133505,133508,133511],{},[564,133500,133501],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[564,133503,133504],{},"浮动的元素会一行内显示并且元素顶部对齐",[564,133506,133507],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[564,133509,133510],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[564,133512,133513],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,133515,133516],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,133518,133519],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[23,133521,133522],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,133523,133524,133530,133540,133544,133550,133560],{"__ignoreMap":28},[33,133525,133526,133528],{"class":35,"line":36},[33,133527,132278],{"class":43},[33,133529,16823],{"class":47},[33,133531,133532,133534,133536,133538],{"class":35,"line":51},[33,133533,132285],{"class":76},[33,133535,52690],{"class":47},[33,133537,24988],{"class":76},[33,133539,80],{"class":47},[33,133541,133542],{"class":35,"line":57},[33,133543,231],{"class":47},[33,133545,133546,133548],{"class":35,"line":64},[33,133547,132300],{"class":43},[33,133549,16823],{"class":47},[33,133551,133552,133554,133556,133558],{"class":35,"line":83},[33,133553,132285],{"class":76},[33,133555,52690],{"class":47},[33,133557,73775],{"class":76},[33,133559,80],{"class":47},[33,133561,133562],{"class":35,"line":89},[33,133563,231],{"class":47},[1599,133565,133567],{"id":133566},"_1113-定位","11.1.3 定位",[23249,133569,133571],{"id":133570},"_11131-使用场景","11.1.3.1 使用场景",[14,133573,133574],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,133576,133577],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23249,133579,133581],{"id":133580},"_11132-定位组成","11.1.3.2 定位组成",[14,133583,133584],{},"定位 = 定位模式 + 边偏移",[574,133586,133587],{},[564,133588,133589,133592,133593],{},[480,133590,133591],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[480,133594,133595],{},"定位模式",[23,133597,133599],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[30,133600,133601,133607,133621,133638,133655],{"__ignoreMap":28},[33,133602,133603,133605],{"class":35,"line":36},[33,133604,131653],{"class":43},[33,133606,16823],{"class":47},[33,133608,133609,133612,133614,133616,133618],{"class":35,"line":51},[33,133610,133611],{"class":76},"  position",[33,133613,52690],{"class":47},[33,133615,56017],{"class":76},[33,133617,131668],{"class":47},[33,133619,133620],{"class":60},"\u002F* 定位模式 *\u002F\n",[33,133622,133623,133626,133628,133630,133632,133635],{"class":35,"line":57},[33,133624,133625],{"class":76},"  top",[33,133627,52690],{"class":47},[33,133629,77],{"class":76},[33,133631,52745],{"class":39},[33,133633,133634],{"class":47},";           ",[33,133636,133637],{"class":60},"\u002F* 边偏移：上 *\u002F\n",[33,133639,133640,133643,133645,133647,133649,133652],{"class":35,"line":64},[33,133641,133642],{"class":76},"  left",[33,133644,52690],{"class":47},[33,133646,1045],{"class":76},[33,133648,52745],{"class":39},[33,133650,133651],{"class":47},";          ",[33,133653,133654],{"class":60},"\u002F* 边偏移：左 *\u002F\n",[33,133656,133657],{"class":35,"line":83},[33,133658,231],{"class":47},[1756,133660,133661,133670],{},[1759,133662,133663],{},[1762,133664,133665,133667],{},[1765,133666,1770],{"align":24988},[1765,133668,133669],{"align":24988},"语义",[1802,133671,133672,133679,133686,133693],{},[1762,133673,133674,133676],{},[1807,133675,133258],{"align":24988},[1807,133677,133678],{"align":24988},"静态定位",[1762,133680,133681,133683],{},[1807,133682,56017],{"align":24988},[1807,133684,133685],{"align":24988},"相对定位",[1762,133687,133688,133690],{},[1807,133689,56084],{"align":24988},[1807,133691,133692],{"align":24988},"绝对定位",[1762,133694,133695,133697],{},[1807,133696,87486],{"align":24988},[1807,133698,133699],{"align":24988},"固定定位",[14,133701,133702],{},"（1）静态定位：",[561,133704,133705,133716],{},[564,133706,133707,133708,133711,133712,133715],{},"静态定位是元素的 ",[480,133709,133710],{},"默认定位方式"," ， ",[480,133713,133714],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[564,133717,6572],{},[23,133719,133720],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,133721,133722,133728,133740,133754,133768],{"__ignoreMap":28},[33,133723,133724,133726],{"class":35,"line":36},[33,133725,131653],{"class":43},[33,133727,16823],{"class":47},[33,133729,133730,133732,133734,133736,133738],{"class":35,"line":51},[33,133731,133611],{"class":76},[33,133733,52690],{"class":47},[33,133735,56017],{"class":76},[33,133737,131668],{"class":47},[33,133739,133620],{"class":60},[33,133741,133742,133744,133746,133748,133750,133752],{"class":35,"line":57},[33,133743,133625],{"class":76},[33,133745,52690],{"class":47},[33,133747,77],{"class":76},[33,133749,52745],{"class":39},[33,133751,133634],{"class":47},[33,133753,133637],{"class":60},[33,133755,133756,133758,133760,133762,133764,133766],{"class":35,"line":64},[33,133757,133642],{"class":76},[33,133759,52690],{"class":47},[33,133761,1045],{"class":76},[33,133763,52745],{"class":39},[33,133765,133651],{"class":47},[33,133767,133654],{"class":60},[33,133769,133770],{"class":35,"line":83},[33,133771,231],{"class":47},[561,133773,133774,133777],{},[564,133775,133776],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[564,133778,133779],{},"静态定位在布局时我们几乎不用的",[14,133781,133782],{},"（2）相对定位",[561,133784,133785,133792],{},[564,133786,133787,133788,133791],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[480,133789,133790],{},"原来的位置"," 来说的（自恋型）",[564,133793,6572],{},[23,133795,133796],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,133797,133798,133804,133816,133830,133844],{"__ignoreMap":28},[33,133799,133800,133802],{"class":35,"line":36},[33,133801,131653],{"class":43},[33,133803,16823],{"class":47},[33,133805,133806,133808,133810,133812,133814],{"class":35,"line":51},[33,133807,133611],{"class":76},[33,133809,52690],{"class":47},[33,133811,56017],{"class":76},[33,133813,131668],{"class":47},[33,133815,133620],{"class":60},[33,133817,133818,133820,133822,133824,133826,133828],{"class":35,"line":57},[33,133819,133625],{"class":76},[33,133821,52690],{"class":47},[33,133823,77],{"class":76},[33,133825,52745],{"class":39},[33,133827,133634],{"class":47},[33,133829,133637],{"class":60},[33,133831,133832,133834,133836,133838,133840,133842],{"class":35,"line":64},[33,133833,133642],{"class":76},[33,133835,52690],{"class":47},[33,133837,1045],{"class":76},[33,133839,52745],{"class":39},[33,133841,133651],{"class":47},[33,133843,133654],{"class":60},[33,133845,133846],{"class":35,"line":83},[33,133847,231],{"class":47},[561,133849,133850],{},[564,133851,133852,133853,133855,133856,133858,133859,133862,133863,133866,133867,133869,133870,133873],{},"相对定位的特点：",[54969,133854],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54969,133857],{},"  ② ",[480,133860,133861],{},"原来"," 在标准流的 ",[480,133864,133865],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54969,133868],{},"  ③因此， ",[480,133871,133872],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,133875,133876],{},"（3）绝对定位",[561,133878,133879,133888],{},[564,133880,133881,133883,133884,133887],{},[480,133882,133692],{}," 是元素在移动位置的时候，是相对于它 ",[480,133885,133886],{},"祖先元素"," 来说的（拼爹型）",[564,133889,6572],{},[23,133891,133892],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,133893,133894,133900,133912,133926,133940],{"__ignoreMap":28},[33,133895,133896,133898],{"class":35,"line":36},[33,133897,131653],{"class":43},[33,133899,16823],{"class":47},[33,133901,133902,133904,133906,133908,133910],{"class":35,"line":51},[33,133903,133611],{"class":76},[33,133905,52690],{"class":47},[33,133907,56017],{"class":76},[33,133909,131668],{"class":47},[33,133911,133620],{"class":60},[33,133913,133914,133916,133918,133920,133922,133924],{"class":35,"line":57},[33,133915,133625],{"class":76},[33,133917,52690],{"class":47},[33,133919,77],{"class":76},[33,133921,52745],{"class":39},[33,133923,133634],{"class":47},[33,133925,133637],{"class":60},[33,133927,133928,133930,133932,133934,133936,133938],{"class":35,"line":64},[33,133929,133642],{"class":76},[33,133931,52690],{"class":47},[33,133933,1045],{"class":76},[33,133935,52745],{"class":39},[33,133937,133651],{"class":47},[33,133939,133654],{"class":60},[33,133941,133942],{"class":35,"line":83},[33,133943,231],{"class":47},[561,133945,133946,133961,133970,133973],{},[564,133947,133948,133949,133951,133952,133954,133955,133957,133958,133960],{},"绝对定位的特点：",[54969,133950],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54969,133953],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54969,133956],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54969,133959],{},"  (4)固定定位",[564,133962,133963,133965,133966,133969],{},[480,133964,133699],{}," 是元素 ",[480,133967,133968],{},"固定于浏览器可视区的位置"," 。（认死理型）",[564,133971,133972],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[564,133974,133975],{},"语法:",[23,133977,133978],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,133979,133980,133986,133998,134012,134026],{"__ignoreMap":28},[33,133981,133982,133984],{"class":35,"line":36},[33,133983,131653],{"class":43},[33,133985,16823],{"class":47},[33,133987,133988,133990,133992,133994,133996],{"class":35,"line":51},[33,133989,133611],{"class":76},[33,133991,52690],{"class":47},[33,133993,56017],{"class":76},[33,133995,131668],{"class":47},[33,133997,133620],{"class":60},[33,133999,134000,134002,134004,134006,134008,134010],{"class":35,"line":57},[33,134001,133625],{"class":76},[33,134003,52690],{"class":47},[33,134005,77],{"class":76},[33,134007,52745],{"class":39},[33,134009,133634],{"class":47},[33,134011,133637],{"class":60},[33,134013,134014,134016,134018,134020,134022,134024],{"class":35,"line":64},[33,134015,133642],{"class":76},[33,134017,52690],{"class":47},[33,134019,1045],{"class":76},[33,134021,52745],{"class":39},[33,134023,133651],{"class":47},[33,134025,133654],{"class":60},[33,134027,134028],{"class":35,"line":83},[33,134029,231],{"class":47},[561,134031,134032,134041],{},[564,134033,134034,134035,134037,134038,134040],{},"特点:",[54969,134036],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54969,134039],{},"  ②固定定位不再占有原先的位置,完全脱标",[564,134042,134043,134044,134046,134047,134049,134050,134052],{},"固定在版心位置的方法:",[54969,134045],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54969,134048],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54969,134051],{},"  实例：",[23,134054,134055],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,134056,134057,134063,134075,134089,134103],{"__ignoreMap":28},[33,134058,134059,134061],{"class":35,"line":36},[33,134060,131653],{"class":43},[33,134062,16823],{"class":47},[33,134064,134065,134067,134069,134071,134073],{"class":35,"line":51},[33,134066,133611],{"class":76},[33,134068,52690],{"class":47},[33,134070,56017],{"class":76},[33,134072,131668],{"class":47},[33,134074,133620],{"class":60},[33,134076,134077,134079,134081,134083,134085,134087],{"class":35,"line":57},[33,134078,133625],{"class":76},[33,134080,52690],{"class":47},[33,134082,77],{"class":76},[33,134084,52745],{"class":39},[33,134086,133634],{"class":47},[33,134088,133637],{"class":60},[33,134090,134091,134093,134095,134097,134099,134101],{"class":35,"line":64},[33,134092,133642],{"class":76},[33,134094,52690],{"class":47},[33,134096,1045],{"class":76},[33,134098,52745],{"class":39},[33,134100,133651],{"class":47},[33,134102,133654],{"class":60},[33,134104,134105],{"class":35,"line":83},[33,134106,231],{"class":47},[2918,134108],{"style":127661,"src":134109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,134111,134112],{},"(5)粘性定位",[561,134114,134115,134118],{},[564,134116,134117],{},"粘性定位可以被认为是相对定位和固定定位的混合",[564,134119,6572],{},[23,134121,134122],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,134123,134124,134130,134142,134156,134170],{"__ignoreMap":28},[33,134125,134126,134128],{"class":35,"line":36},[33,134127,131653],{"class":43},[33,134129,16823],{"class":47},[33,134131,134132,134134,134136,134138,134140],{"class":35,"line":51},[33,134133,133611],{"class":76},[33,134135,52690],{"class":47},[33,134137,56017],{"class":76},[33,134139,131668],{"class":47},[33,134141,133620],{"class":60},[33,134143,134144,134146,134148,134150,134152,134154],{"class":35,"line":57},[33,134145,133625],{"class":76},[33,134147,52690],{"class":47},[33,134149,77],{"class":76},[33,134151,52745],{"class":39},[33,134153,133634],{"class":47},[33,134155,133637],{"class":60},[33,134157,134158,134160,134162,134164,134166,134168],{"class":35,"line":64},[33,134159,133642],{"class":76},[33,134161,52690],{"class":47},[33,134163,1045],{"class":76},[33,134165,52745],{"class":39},[33,134167,133651],{"class":47},[33,134169,133654],{"class":60},[33,134171,134172],{"class":35,"line":83},[33,134173,231],{"class":47},[561,134175,134176],{},[564,134177,134178,134179,134181,134182,134184,134185,134187,134188,134191,134192,134194],{},"粘性定位的特点：",[54969,134180],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54969,134183],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54969,134186],{},"  ③必须添加 top 、left、right、bottom ",[480,134189,134190],{},"其中一个"," 才有效",[54969,134193],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[23,134196,134197],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,134198,134199,134205,134217,134231,134245],{"__ignoreMap":28},[33,134200,134201,134203],{"class":35,"line":36},[33,134202,131653],{"class":43},[33,134204,16823],{"class":47},[33,134206,134207,134209,134211,134213,134215],{"class":35,"line":51},[33,134208,133611],{"class":76},[33,134210,52690],{"class":47},[33,134212,56017],{"class":76},[33,134214,131668],{"class":47},[33,134216,133620],{"class":60},[33,134218,134219,134221,134223,134225,134227,134229],{"class":35,"line":57},[33,134220,133625],{"class":76},[33,134222,52690],{"class":47},[33,134224,77],{"class":76},[33,134226,52745],{"class":39},[33,134228,133634],{"class":47},[33,134230,133637],{"class":60},[33,134232,134233,134235,134237,134239,134241,134243],{"class":35,"line":64},[33,134234,133642],{"class":76},[33,134236,52690],{"class":47},[33,134238,1045],{"class":76},[33,134240,52745],{"class":39},[33,134242,133651],{"class":47},[33,134244,133654],{"class":60},[33,134246,134247],{"class":35,"line":83},[33,134248,231],{"class":47},[2918,134250],{"style":127661,"src":134251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,134253,134254],{},"(6)总结",[1756,134256,134257,134272],{},[1759,134258,134259],{},[1762,134260,134261,134263,134266,134269],{},[1765,134262,133595],{"align":24988},[1765,134264,134265],{"align":24988},"是否脱标",[1765,134267,134268],{"align":24988},"移动位置",[1765,134270,134271],{"align":24988},"是否常用",[1802,134273,134274,134287,134301,134315,134328],{},[1762,134275,134276,134279,134281,134284],{},[1807,134277,134278],{"align":24988},"Static 静态定位",[1807,134280,105931],{"align":24988},[1807,134282,134283],{"align":24988},"不能使用边偏移",[1807,134285,134286],{"align":24988},"很少",[1762,134288,134289,134292,134295,134298],{},[1807,134290,134291],{"align":24988},"Relative 相对定位",[1807,134293,134294],{"align":24988},"否(占有位置)",[1807,134296,134297],{"align":24988},"相对于自身位置移动",[1807,134299,134300],{"align":24988},"基本单独使用",[1762,134302,134303,134306,134309,134312],{},[1807,134304,134305],{"align":24988},"Absolute 绝对定位",[1807,134307,134308],{"align":24988},"是(不占有位置)",[1807,134310,134311],{"align":24988},"带有定位的父级",[1807,134313,134314],{"align":24988},"要和定位父级元素搭配使用",[1762,134316,134317,134320,134322,134325],{},[1807,134318,134319],{"align":24988},"Fixed 固定定位",[1807,134321,134308],{"align":24988},[1807,134323,134324],{"align":24988},"浏览器可视区",[1807,134326,134327],{"align":24988},"单独使用,不需要父级",[1762,134329,134330,134333,134335,134337],{},[1807,134331,134332],{"align":24988},"Sticky 粘性定位",[1807,134334,134294],{"align":24988},[1807,134336,134324],{"align":24988},[1807,134338,134339],{"align":24988},"当前阶段少",[574,134341,134342],{"start":51},[564,134343,134344,134347],{},[480,134345,134346],{},"边偏移"," 则决定了该元素的最终位置",[1756,134349,134350,134361],{},[1759,134351,134352],{},[1762,134353,134354,134357,134359],{},[1765,134355,134356],{"align":24988},"边偏移属性",[1765,134358,28745],{"align":24988},[1765,134360,28742],{"align":24988},[1802,134362,134363,134374,134385,134395],{},[1762,134364,134365,134368,134371],{},[1807,134366,134367],{"align":24988},"top",[1807,134369,134370],{"align":24988},"top: 80px;",[1807,134372,134373],{"align":24988},"顶端偏移量，定义元素相对于父元素上边线的距离",[1762,134375,134376,134379,134382],{},[1807,134377,134378],{"align":24988},"bottom",[1807,134380,134381],{"align":24988},"bottom: 80px ;",[1807,134383,134384],{"align":24988},"底部偏移量，定义元素相对于其父元素下边线的距离",[1762,134386,134387,134389,134392],{},[1807,134388,24988],{"align":24988},[1807,134390,134391],{"align":24988},"left: 80px ;",[1807,134393,134394],{"align":24988},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1762,134396,134397,134399,134402],{},[1807,134398,73775],{"align":24988},[1807,134400,134401],{"align":24988},"right: 80px ;",[1807,134403,134404],{"align":24988},"右侧偏移量，定义元素相对于其父元素右边线的距离",[561,134406,134407],{},[564,134408,10276,134409,134411,134412,134414,134415,134417,134418,134421,134422,134424,134425,134427],{},[54969,134410],{},"  ① ",[480,134413,134346],{}," 需要和 ",[480,134416,133595],{}," 联合使用， ",[480,134419,134420],{},"单独使用无效"," ；",[54969,134423],{},"  ②top和bottom不要同时使用",[54969,134426],{},"  ③left和right不要同时使用",[23249,134429,134431],{"id":134430},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,134433,134434],{},"子级是绝对定位的话，父级要用相对定位",[561,134436,134437,134440,134443,134446],{},[564,134438,134439],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[564,134441,134442],{},"父盒子需要加定位限制子盒子在父盒子内显示",[564,134444,134445],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[564,134447,134448,134449,134452],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[480,134450,134451],{},"子绝父绝"," 也会遇到",[23249,134454,134456],{"id":134455},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[561,134458,134459,134474],{},[564,134460,134461,134462,134465,134466,134469,134470,134473],{},"在使用 ",[480,134463,134464],{},"定位"," 布局时，可能会 ",[480,134467,134468],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[480,134471,134472],{},"z-index"," 来控制盒子的前后次序 (z轴)",[564,134475,6572],{},[23,134477,134478],{"className":127805,"code":133598,"language":127807,"meta":28,"style":28},[30,134479,134480,134486,134498,134512,134526],{"__ignoreMap":28},[33,134481,134482,134484],{"class":35,"line":36},[33,134483,131653],{"class":43},[33,134485,16823],{"class":47},[33,134487,134488,134490,134492,134494,134496],{"class":35,"line":51},[33,134489,133611],{"class":76},[33,134491,52690],{"class":47},[33,134493,56017],{"class":76},[33,134495,131668],{"class":47},[33,134497,133620],{"class":60},[33,134499,134500,134502,134504,134506,134508,134510],{"class":35,"line":57},[33,134501,133625],{"class":76},[33,134503,52690],{"class":47},[33,134505,77],{"class":76},[33,134507,52745],{"class":39},[33,134509,133634],{"class":47},[33,134511,133637],{"class":60},[33,134513,134514,134516,134518,134520,134522,134524],{"class":35,"line":64},[33,134515,133642],{"class":76},[33,134517,52690],{"class":47},[33,134519,1045],{"class":76},[33,134521,52745],{"class":39},[33,134523,133651],{"class":47},[33,134525,133654],{"class":60},[33,134527,134528],{"class":35,"line":83},[33,134529,231],{"class":47},[561,134531,134532],{},[564,134533,134534,134535,134411,134537,134539,134540,128968,134543,83792,134546,134548,134549,134551,134552,134555,134556,134421,134559,134561,134562,134565,134567],{},"z-index的特性",[54969,134536],{},[480,134538,128269],{}," ： ",[480,134541,134542],{},"正整数",[480,134544,134545],{},"负整数",[480,134547,766],{}," ，默认值是 0，数值越大，盒子越靠上；",[54969,134550],{},"  ②如果 ",[480,134553,134554],{},"属性值相同"," ，则按照书写顺序， ",[480,134557,134558],{},"后来居上",[54969,134560],{},"  ③数字后面 ",[480,134563,134564],{},"不能加单位",[54969,134566],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23249,134569,134571],{"id":134570},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,134573,134574],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,134576,134577],{},"方法:",[561,134579,134580,134590],{},[564,134581,134582,134583,134586,134587],{},"left: 50%; 让 ",[480,134584,134585],{},"盒子的左侧"," 移动到 ",[480,134588,134589],{},"父级元素的水平中心位置",[564,134591,134592,134593,134596,134597],{},"margin-left: -100px; 让盒子 ",[480,134594,134595],{},"向左"," 移动 ",[480,134598,134599],{},"自身宽度的一半",[23249,134601,134603],{"id":134602},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[574,134605,134606,134609],{},[564,134607,134608],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[564,134610,134611],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,134613,134614],{},"也就是说绝对定位和固定定位和浮动类似",[574,134616,134617],{"start":57},[564,134618,134619],{},"display 是显示模式， 可以改变显示模式有以下方式:",[561,134621,134622,134625,134628],{},[564,134623,134624],{},"可以用inline-block 转换为行内块",[564,134626,134627],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[564,134629,134630],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,134632,134633],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23249,134635,134637],{"id":134636},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[574,134639,134640,134643,134646,134649],{},[564,134641,134642],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[564,134644,134645],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[564,134647,134648],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[564,134650,134651],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[23,134653,134654],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,134655,134656,134662,134672,134676,134682,134692],{"__ignoreMap":28},[33,134657,134658,134660],{"class":35,"line":36},[33,134659,132278],{"class":43},[33,134661,16823],{"class":47},[33,134663,134664,134666,134668,134670],{"class":35,"line":51},[33,134665,132285],{"class":76},[33,134667,52690],{"class":47},[33,134669,24988],{"class":76},[33,134671,80],{"class":47},[33,134673,134674],{"class":35,"line":57},[33,134675,231],{"class":47},[33,134677,134678,134680],{"class":35,"line":64},[33,134679,132300],{"class":43},[33,134681,16823],{"class":47},[33,134683,134684,134686,134688,134690],{"class":35,"line":83},[33,134685,132285],{"class":76},[33,134687,52690],{"class":47},[33,134689,73775],{"class":76},[33,134691,80],{"class":47},[33,134693,134694],{"class":35,"line":89},[33,134695,231],{"class":47},[2918,134697],{"style":127661,"src":134698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23249,134700,134702],{"id":134701},"_11138-轮播图","11.1.3.8 轮播图",[2918,134704],{"style":127661,"src":134705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[574,134707,134708],{},[564,134709,134710],{},"制作顺序:",[561,134712,134713,134716,134719,134728],{},[564,134714,134715],{},"大盒子我们类名为： tb-promo 淘宝广告",[564,134717,134718],{},"里面先放一张图片",[564,134720,134721,134722,134724,134725,134727],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54969,134723],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54969,134726],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[564,134729,134730,134731,134733,134734,134736],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54969,134732],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54969,134735],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[574,134738,134739],{"start":51},[564,134740,134741],{},"代码模块",[23,134743,134745],{"className":127805,"code":134744,"language":127807,"meta":28,"style":28},"\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",[30,134746,134747,134752,134759,134769,134779,134789,134793,134798,134805,134815],{"__ignoreMap":28},[33,134748,134749],{"class":35,"line":36},[33,134750,134751],{"class":60},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[33,134753,134754,134757],{"class":35,"line":51},[33,134755,134756],{"class":43},".son",[33,134758,16823],{"class":47},[33,134760,134761,134763,134765,134767],{"class":35,"line":57},[33,134762,133611],{"class":76},[33,134764,52690],{"class":47},[33,134766,56084],{"class":76},[33,134768,80],{"class":47},[33,134770,134771,134773,134775,134777],{"class":35,"line":64},[33,134772,133625],{"class":76},[33,134774,52690],{"class":47},[33,134776,766],{"class":76},[33,134778,80],{"class":47},[33,134780,134781,134783,134785,134787],{"class":35,"line":83},[33,134782,133642],{"class":76},[33,134784,52690],{"class":47},[33,134786,766],{"class":76},[33,134788,80],{"class":47},[33,134790,134791],{"class":35,"line":89},[33,134792,231],{"class":47},[33,134794,134795],{"class":35,"line":98},[33,134796,134797],{"class":60},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[33,134799,134800,134803],{"class":35,"line":110},[33,134801,134802],{"class":43},".father",[33,134804,16823],{"class":47},[33,134806,134807,134809,134811,134813],{"class":35,"line":134},[33,134808,133611],{"class":76},[33,134810,52690],{"class":47},[33,134812,56017],{"class":76},[33,134814,80],{"class":47},[33,134816,134817],{"class":35,"line":156},[33,134818,231],{"class":47},[14,134820,134821],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[1599,134823,134825],{"id":134824},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2918,134827],{"style":127661,"src":134828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,134830,134831],{},"✨ 黄金口诀：",[14,134833,134834],{},"\"TOP正下负上，LEFT正右负左\"",[14,134836,134837],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,134839,134840],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,134842,134843],{},"✨ 简单记：",[14,134845,134846],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1544,134848,134849],{},"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":28,"searchDepth":51,"depth":51,"links":134851},[134852],{"id":133379,"depth":51,"text":133380,"children":134853},[134854,134855,134856,134857],{"id":133383,"depth":57,"text":133384},{"id":133398,"depth":57,"text":133399},{"id":133566,"depth":57,"text":133567},{"id":134824,"depth":57,"text":134825},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133371,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134864,"title":134865,"body":134866,"description":24628,"extension":1557,"meta":136289,"navigation":159,"path":136290,"seo":136291,"stem":136292,"__hash__":136293},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134867,"toc":136268},[134868,134871,134875,134883,134887,134892,134900,134912,134916,134921,134929,134940,134944,134949,134990,134998,135002,135005,135008,135011,135105,135108,135202,135205,135299,135302,135305,135340,135343,135346,135376,135379,135382,135385,135388,135391,135394,135397,135467,135470,135474,135478,135519,135523,135529,135532,135535,135539,135542,135545,135548,135629,135632,135635,135639,135643,135646,135649,135652,135655,135658,135664,135673,135677,135696,135700,135710,135713,135716,135719,135722,135725,135728,135731,135734,135743,135747,135756,135759,135764,135817,135822,135988,135991,135994,135999,136002,136005,136008,136011,136016,136164,136167,136170,136175,136178,136183,136217,136220,136223,136227,136230,136237,136240,136243,136246,136249,136252,136255,136258,136262,136265],[10,134869,134865],{"id":134870},"_12-显示隐藏与图形资源",[18,134872,134874],{"id":134873},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[561,134876,134877,134880],{},[564,134878,134879],{},"目的:让一个元素在页面中消失或者显示出来",[564,134881,134882],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[1599,134884,134886],{"id":134885},"_1211-display-显示","12.1.1 display 显示",[574,134888,134889],{},[564,134890,134891],{},"display 设置或检索对象是否及如何显示",[561,134893,134894,134897],{},[564,134895,134896],{},"display: none;隐藏对象",[564,134898,134899],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[574,134901,134902,134909],{"start":51},[564,134903,134904,134905,134908],{},"特点： display 隐藏元素后， ",[480,134906,134907],{},"不再占"," 有原来的位置",[564,134910,134911],{},"在js中使用非常的广泛",[1599,134913,134915],{"id":134914},"_1212-visibility可见性","12.1.2 visibility可见性",[574,134917,134918],{},[564,134919,134920],{},"visibility 属性用于指定一个元素应可见还是隐藏",[561,134922,134923,134926],{},[564,134924,134925],{},"visibility： visible；元素可见",[564,134927,134928],{},"visibility：hidden；元素隐藏",[574,134930,134931,134934,134937],{"start":51},[564,134932,134933],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[564,134935,134936],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[564,134938,134939],{},"隐藏后继续占有原有位置",[1599,134941,134943],{"id":134942},"_1213-overflow溢出","12.1.3 overflow溢出",[561,134945,134946],{},[564,134947,134948],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1756,134950,134951,134959],{},[1759,134952,134953],{},[1762,134954,134955,134957],{},[1765,134956,128269],{"align":24988},[1765,134958,28742],{"align":24988},[1802,134960,134961,134969,134976,134983],{},[1762,134962,134963,134966],{},[1807,134964,134965],{"align":24988},"visible",[1807,134967,134968],{"align":24988},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1762,134970,134971,134973],{},[1807,134972,62967],{"align":24988},[1807,134974,134975],{"align":24988},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1762,134977,134978,134980],{},[1807,134979,130225],{"align":24988},[1807,134981,134982],{"align":24988},"不管超出内容否，总是显示滚动条",[1762,134984,134985,134987],{},[1807,134986,73916],{"align":24988},[1807,134988,134989],{"align":24988},"超出自动显示滚动条，不超出不显示滚动条",[561,134991,134992,134995],{},[564,134993,134994],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[564,134996,134997],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[1599,134999,135001],{"id":135000},"_1214-案例收获","12.1.4 案例收获",[2918,135003],{"style":127661,"src":135004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,135006,135007],{},"问题：没做出来动态效果，使用hover没实现",[14,135009,135010],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[23,135012,135013],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},[30,135014,135015,135019,135033,135037,135051,135055,135069,135073,135087,135091],{"__ignoreMap":28},[33,135016,135017],{"class":35,"line":36},[33,135018,133244],{"class":60},[33,135020,135021,135023,135025,135027,135029,135031],{"class":35,"line":51},[33,135022,133249],{"class":43},[33,135024,81060],{"class":47},[33,135026,130165],{"class":76},[33,135028,52690],{"class":47},[33,135030,133258],{"class":76},[33,135032,130735],{"class":47},[33,135034,135035],{"class":35,"line":57},[33,135036,133265],{"class":60},[33,135038,135039,135041,135043,135045,135047,135049],{"class":35,"line":64},[33,135040,133270],{"class":43},[33,135042,81060],{"class":47},[33,135044,130165],{"class":76},[33,135046,52690],{"class":47},[33,135048,56017],{"class":76},[33,135050,130735],{"class":47},[33,135052,135053],{"class":35,"line":83},[33,135054,133285],{"class":60},[33,135056,135057,135059,135061,135063,135065,135067],{"class":35,"line":89},[33,135058,133290],{"class":43},[33,135060,81060],{"class":47},[33,135062,130165],{"class":76},[33,135064,52690],{"class":47},[33,135066,56084],{"class":76},[33,135068,130735],{"class":47},[33,135070,135071],{"class":35,"line":98},[33,135072,133305],{"class":60},[33,135074,135075,135077,135079,135081,135083,135085],{"class":35,"line":110},[33,135076,133310],{"class":43},[33,135078,81060],{"class":47},[33,135080,130165],{"class":76},[33,135082,52690],{"class":47},[33,135084,87486],{"class":76},[33,135086,130735],{"class":47},[33,135088,135089],{"class":35,"line":134},[33,135090,133325],{"class":60},[33,135092,135093,135095,135097,135099,135101,135103],{"class":35,"line":156},[33,135094,133330],{"class":43},[33,135096,81060],{"class":47},[33,135098,130165],{"class":76},[33,135100,52690],{"class":47},[33,135102,133339],{"class":76},[33,135104,130735],{"class":47},[14,135106,135107],{},"完整代码：",[23,135109,135110],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},[30,135111,135112,135116,135130,135134,135148,135152,135166,135170,135184,135188],{"__ignoreMap":28},[33,135113,135114],{"class":35,"line":36},[33,135115,133244],{"class":60},[33,135117,135118,135120,135122,135124,135126,135128],{"class":35,"line":51},[33,135119,133249],{"class":43},[33,135121,81060],{"class":47},[33,135123,130165],{"class":76},[33,135125,52690],{"class":47},[33,135127,133258],{"class":76},[33,135129,130735],{"class":47},[33,135131,135132],{"class":35,"line":57},[33,135133,133265],{"class":60},[33,135135,135136,135138,135140,135142,135144,135146],{"class":35,"line":64},[33,135137,133270],{"class":43},[33,135139,81060],{"class":47},[33,135141,130165],{"class":76},[33,135143,52690],{"class":47},[33,135145,56017],{"class":76},[33,135147,130735],{"class":47},[33,135149,135150],{"class":35,"line":83},[33,135151,133285],{"class":60},[33,135153,135154,135156,135158,135160,135162,135164],{"class":35,"line":89},[33,135155,133290],{"class":43},[33,135157,81060],{"class":47},[33,135159,130165],{"class":76},[33,135161,52690],{"class":47},[33,135163,56084],{"class":76},[33,135165,130735],{"class":47},[33,135167,135168],{"class":35,"line":98},[33,135169,133305],{"class":60},[33,135171,135172,135174,135176,135178,135180,135182],{"class":35,"line":110},[33,135173,133310],{"class":43},[33,135175,81060],{"class":47},[33,135177,130165],{"class":76},[33,135179,52690],{"class":47},[33,135181,87486],{"class":76},[33,135183,130735],{"class":47},[33,135185,135186],{"class":35,"line":134},[33,135187,133325],{"class":60},[33,135189,135190,135192,135194,135196,135198,135200],{"class":35,"line":156},[33,135191,133330],{"class":43},[33,135193,81060],{"class":47},[33,135195,130165],{"class":76},[33,135197,52690],{"class":47},[33,135199,133339],{"class":76},[33,135201,130735],{"class":47},[14,135203,135204],{},"分布思路重点详解：",[23,135206,135207],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},[30,135208,135209,135213,135227,135231,135245,135249,135263,135267,135281,135285],{"__ignoreMap":28},[33,135210,135211],{"class":35,"line":36},[33,135212,133244],{"class":60},[33,135214,135215,135217,135219,135221,135223,135225],{"class":35,"line":51},[33,135216,133249],{"class":43},[33,135218,81060],{"class":47},[33,135220,130165],{"class":76},[33,135222,52690],{"class":47},[33,135224,133258],{"class":76},[33,135226,130735],{"class":47},[33,135228,135229],{"class":35,"line":57},[33,135230,133265],{"class":60},[33,135232,135233,135235,135237,135239,135241,135243],{"class":35,"line":64},[33,135234,133270],{"class":43},[33,135236,81060],{"class":47},[33,135238,130165],{"class":76},[33,135240,52690],{"class":47},[33,135242,56017],{"class":76},[33,135244,130735],{"class":47},[33,135246,135247],{"class":35,"line":83},[33,135248,133285],{"class":60},[33,135250,135251,135253,135255,135257,135259,135261],{"class":35,"line":89},[33,135252,133290],{"class":43},[33,135254,81060],{"class":47},[33,135256,130165],{"class":76},[33,135258,52690],{"class":47},[33,135260,56084],{"class":76},[33,135262,130735],{"class":47},[33,135264,135265],{"class":35,"line":98},[33,135266,133305],{"class":60},[33,135268,135269,135271,135273,135275,135277,135279],{"class":35,"line":110},[33,135270,133310],{"class":43},[33,135272,81060],{"class":47},[33,135274,130165],{"class":76},[33,135276,52690],{"class":47},[33,135278,87486],{"class":76},[33,135280,130735],{"class":47},[33,135282,135283],{"class":35,"line":134},[33,135284,133325],{"class":60},[33,135286,135287,135289,135291,135293,135295,135297],{"class":35,"line":156},[33,135288,133330],{"class":43},[33,135290,81060],{"class":47},[33,135292,130165],{"class":76},[33,135294,52690],{"class":47},[33,135296,133339],{"class":76},[33,135298,130735],{"class":47},[2918,135300],{"style":127661,"src":135301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,135303,135304],{},"图片太大，盒子太小，此时需要修改图片的大小",[23,135306,135308],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[30,135309,135310],{"__ignoreMap":28},[33,135311,135312,135314,135316,135318,135320,135323,135325,135327,135330,135333,135335,135338],{"class":35,"line":36},[33,135313,875],{"class":47},[33,135315,2918],{"class":52553},[33,135317,56492],{"class":43},[33,135319,73],{"class":47},[33,135321,135322],{"class":119},"\"images\u002Fpic.jpg\"",[33,135324,56500],{"class":43},[33,135326,73],{"class":47},[33,135328,135329],{"class":119},"\"描述文字\"",[33,135331,135332],{"class":43}," title",[33,135334,73],{"class":47},[33,135336,135337],{"class":119},"\"悬停提示\"",[33,135339,52560],{"class":47},[2918,135341],{"style":127661,"src":135342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,135344,135345],{},"制造遮罩层",[23,135347,135348],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,135349,135350],{"__ignoreMap":28},[33,135351,135352,135354,135356,135358,135360,135362,135364,135366,135368,135370,135372,135374],{"class":35,"line":36},[33,135353,875],{"class":47},[33,135355,2918],{"class":52553},[33,135357,56492],{"class":43},[33,135359,73],{"class":47},[33,135361,135322],{"class":119},[33,135363,56500],{"class":43},[33,135365,73],{"class":47},[33,135367,135329],{"class":119},[33,135369,135332],{"class":43},[33,135371,73],{"class":47},[33,135373,135337],{"class":119},[33,135375,52560],{"class":47},[14,135377,135378],{},"此时是这样的为标准流",[2918,135380],{"style":127661,"src":135381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,135383,135384],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,135386,135387],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,135389,135390],{},"让他在中间，用center(background-position)",[14,135392,135393],{},"将需要变的尽可能放到一个盒子中",[14,135395,135396],{},"放大盒子上内部盒子发生变化",[23,135398,135400],{"className":127805,"code":135399,"language":127807,"meta":28,"style":28},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[30,135401,135402,135408,135418,135422,135429,135439,135451,135463],{"__ignoreMap":28},[33,135403,135404,135406],{"class":35,"line":36},[33,135405,128872],{"class":43},[33,135407,16823],{"class":47},[33,135409,135410,135412,135414,135416],{"class":35,"line":51},[33,135411,133611],{"class":76},[33,135413,52690],{"class":47},[33,135415,56017],{"class":76},[33,135417,80],{"class":47},[33,135419,135420],{"class":35,"line":57},[33,135421,231],{"class":47},[33,135423,135424,135427],{"class":35,"line":64},[33,135425,135426],{"class":43},".child",[33,135428,16823],{"class":47},[33,135430,135431,135433,135435,135437],{"class":35,"line":83},[33,135432,133611],{"class":76},[33,135434,52690],{"class":47},[33,135436,56084],{"class":76},[33,135438,80],{"class":47},[33,135440,135441,135443,135445,135447,135449],{"class":35,"line":89},[33,135442,133625],{"class":76},[33,135444,52690],{"class":47},[33,135446,2256],{"class":76},[33,135448,1939],{"class":39},[33,135450,80],{"class":47},[33,135452,135453,135455,135457,135459,135461],{"class":35,"line":98},[33,135454,133642],{"class":76},[33,135456,52690],{"class":47},[33,135458,2256],{"class":76},[33,135460,1939],{"class":39},[33,135462,80],{"class":47},[33,135464,135465],{"class":35,"line":110},[33,135466,231],{"class":47},[14,135468,135469],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[18,135471,135473],{"id":135472},"_122-精灵图","12.2 精灵图",[1599,135475,135477],{"id":135476},"_1221-理解","12.2.1 理解",[574,135479,135480,135498],{},[564,135481,135482,135483,133711,135486,135489,135490,135493,135494,135497],{},"目的： ",[480,135484,135485],{},"为了有效地减少服务器接收和发送请求的次数",[480,135487,135488],{},"提高"," 页面的 ",[480,135491,135492],{},"加载速度"," ，出现了 ",[480,135495,135496],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[564,135499,135500,135501,135503,135504,135506,135507,135509,135510,135512,135513,135515,135516,135518],{},"使用精灵图核心：",[54969,135502],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54969,135505],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54969,135508],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54969,135511],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54969,135514],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54969,135517],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[1599,135520,135522],{"id":135521},"_1222-扒图","12.2.2 扒图",[23,135524,135527],{"className":135525,"code":135526,"language":6578},[6576],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[30,135528,135526],{"__ignoreMap":28},[2918,135530],{"style":127661,"src":135531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2918,135533],{"style":127661,"src":135534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[1599,135536,135538],{"id":135537},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2918,135540],{"style":127661,"src":135541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,135543,135544],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2918,135546],{"style":127661,"src":135547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[23,135549,135551],{"className":127805,"code":135550,"language":127807,"meta":28,"style":28},"\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",[30,135552,135553,135558,135565,135577,135589,135608,135625],{"__ignoreMap":28},[33,135554,135555],{"class":35,"line":36},[33,135556,135557],{"class":60},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[33,135559,135560,135563],{"class":35,"line":51},[33,135561,135562],{"class":43},".icon",[33,135564,16823],{"class":47},[33,135566,135567,135569,135571,135573,135575],{"class":35,"line":57},[33,135568,71821],{"class":76},[33,135570,52690],{"class":47},[33,135572,1045],{"class":76},[33,135574,52745],{"class":39},[33,135576,80],{"class":47},[33,135578,135579,135581,135583,135585,135587],{"class":35,"line":64},[33,135580,72041],{"class":76},[33,135582,52690],{"class":47},[33,135584,1045],{"class":76},[33,135586,52745],{"class":39},[33,135588,80],{"class":47},[33,135590,135591,135593,135595,135597,135599,135602,135604,135606],{"class":35,"line":83},[33,135592,71864],{"class":76},[33,135594,52690],{"class":47},[33,135596,62979],{"class":76},[33,135598,345],{"class":47},[33,135600,135601],{"class":955},"sprites.png",[33,135603,14965],{"class":47},[33,135605,62989],{"class":76},[33,135607,80],{"class":47},[33,135609,135610,135612,135614,135616,135618,135621,135623],{"class":35,"line":89},[33,135611,130065],{"class":76},[33,135613,52690],{"class":47},[33,135615,53016],{"class":76},[33,135617,52745],{"class":39},[33,135619,135620],{"class":76}," -20",[33,135622,52745],{"class":39},[33,135624,80],{"class":47},[33,135626,135627],{"class":35,"line":98},[33,135628,231],{"class":47},[2918,135630],{"style":127661,"src":135631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,135633,135634],{},"在前端中坐标轴的正方向是右和下",[18,135636,135638],{"id":135637},"_123-字体图标","12.3 字体图标",[1599,135640,135642],{"id":135641},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,135644,135645],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,135647,135648],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,135650,135651],{},"1.图片文件还是比较大的。",[14,135653,135654],{},"2.图片本身放大和缩小会失真。",[14,135656,135657],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,135659,135660,135661,26993],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[480,135662,135663],{},"字体图标 iconfont",[14,135665,135666,135669,135670,29638],{},[480,135667,135668],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[480,135671,135672],{},"展示的是图标，本质属于字体",[1599,135674,135676],{"id":135675},"_1232-字体图标的优点","12.3.2 字体图标的优点",[561,135678,135679,135684,135687,135690,135693],{},[564,135680,135681,135683],{},[480,135682,27129],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[564,135685,135686],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[564,135688,135689],{},"兼容性：几乎支持所有的浏览器，请放心使用",[564,135691,135692],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[564,135694,135695],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[1599,135697,135699],{"id":135698},"_1233-字体库下载网站","12.3.3 字体库下载网站",[561,135701,135702],{},[564,135703,135704,135705],{},"icomoon字体库：",[126,135706,135709],{"href":135707,"rel":135708},"http:\u002F\u002Ficomoon.io\u002F",[25117],"http:\u002F\u002Ficomoon.io",[14,135711,135712],{},"进去之后点icomoon app",[2918,135714],{"style":127661,"src":135715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,135717,135718],{},"可以对其编辑：",[2918,135720],{"style":127661,"src":135721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,135723,135724],{},"生成字体：",[2918,135726],{"style":127661,"src":135727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,135729,135730],{},"下载：",[2918,135732],{"style":127661,"src":135733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[561,135735,135736],{},[564,135737,135738,135739],{},"阿里iconfont字体库： ",[126,135740,135741],{"href":135741,"rel":135742},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25117],[1599,135744,135746],{"id":135745},"_1234-字体图标的引入","12.3.4 字体图标的引入",[574,135748,135749],{},[564,135750,135751,135752,135755],{},"把下载包里面的 ",[480,135753,135754],{},"fonts"," 文件夹放入页面根目录下",[2918,135757],{"style":127661,"src":135758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[574,135760,135761],{"start":51},[564,135762,135763],{},"字体文件格式",[1756,135765,135766,135775],{},[1759,135767,135768],{},[1762,135769,135770,135773],{},[1765,135771,135772],{"align":24988},"格式",[1765,135774,24992],{"align":24988},[1802,135776,135777,135787,135797,135807],{},[1762,135778,135779,135784],{},[1807,135780,135781],{"align":24988},[480,135782,135783],{},".ttf",[1807,135785,135786],{"align":24988},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1762,135788,135789,135794],{},[1807,135790,135791],{"align":24988},[480,135792,135793],{},".woff",[1807,135795,135796],{"align":24988},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1762,135798,135799,135804],{},[1807,135800,135801],{"align":24988},[480,135802,135803],{},".eot",[1807,135805,135806],{"align":24988},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1762,135808,135809,135814],{},[1807,135810,135811],{"align":24988},[480,135812,135813],{},"svg",[1807,135815,135816],{"align":24988},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[574,135818,135819],{"start":57},[564,135820,135821],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[23,135823,135825],{"className":127805,"code":135824,"language":127807,"meta":28,"style":28},"\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",[30,135826,135827,135832,135839,135851,135867,135892,135913,135933,135953,135957,135963,135973,135984],{"__ignoreMap":28},[33,135828,135829],{"class":35,"line":36},[33,135830,135831],{"class":60},"\u002F* 引入字体图标 *\u002F\n",[33,135833,135834,135837],{"class":35,"line":51},[33,135835,135836],{"class":39},"@font-face",[33,135838,16823],{"class":47},[33,135840,135841,135844,135846,135849],{"class":35,"line":57},[33,135842,135843],{"class":76},"  font-family",[33,135845,52690],{"class":47},[33,135847,135848],{"class":119},"'icomoon'",[33,135850,80],{"class":47},[33,135852,135853,135856,135858,135860,135862,135865],{"class":35,"line":64},[33,135854,135855],{"class":76},"  src",[33,135857,52690],{"class":47},[33,135859,62979],{"class":76},[33,135861,345],{"class":47},[33,135863,135864],{"class":119},"'fonts\u002Ficomoon.eot'",[33,135866,4130],{"class":47},[33,135868,135869,135871,135873,135875,135877,135880,135882,135885,135887,135890],{"class":35,"line":83},[33,135870,135855],{"class":76},[33,135872,52690],{"class":47},[33,135874,62979],{"class":76},[33,135876,345],{"class":47},[33,135878,135879],{"class":119},"'fonts\u002Ficomoon.eot?#iefix'",[33,135881,14965],{"class":47},[33,135883,135884],{"class":76},"format",[33,135886,345],{"class":47},[33,135888,135889],{"class":119},"'embedded-opentype'",[33,135891,39300],{"class":47},[33,135893,135894,135897,135899,135902,135904,135906,135908,135911],{"class":35,"line":89},[33,135895,135896],{"class":76},"       url",[33,135898,345],{"class":47},[33,135900,135901],{"class":119},"'fonts\u002Ficomoon.woff'",[33,135903,14965],{"class":47},[33,135905,135884],{"class":76},[33,135907,345],{"class":47},[33,135909,135910],{"class":119},"'woff'",[33,135912,39300],{"class":47},[33,135914,135915,135917,135919,135922,135924,135926,135928,135931],{"class":35,"line":98},[33,135916,135896],{"class":76},[33,135918,345],{"class":47},[33,135920,135921],{"class":119},"'fonts\u002Ficomoon.ttf'",[33,135923,14965],{"class":47},[33,135925,135884],{"class":76},[33,135927,345],{"class":47},[33,135929,135930],{"class":119},"'truetype'",[33,135932,39300],{"class":47},[33,135934,135935,135937,135939,135942,135944,135946,135948,135951],{"class":35,"line":110},[33,135936,135896],{"class":76},[33,135938,345],{"class":47},[33,135940,135941],{"class":119},"'fonts\u002Ficomoon.svg#icomoon'",[33,135943,14965],{"class":47},[33,135945,135884],{"class":76},[33,135947,345],{"class":47},[33,135949,135950],{"class":119},"'svg'",[33,135952,4130],{"class":47},[33,135954,135955],{"class":35,"line":134},[33,135956,231],{"class":47},[33,135958,135959,135961],{"class":35,"line":156},[33,135960,135562],{"class":43},[33,135962,16823],{"class":47},[33,135964,135965,135967,135969,135971],{"class":35,"line":163},[33,135966,135843],{"class":76},[33,135968,52690],{"class":47},[33,135970,135848],{"class":119},[33,135972,80],{"class":47},[33,135974,135975,135978,135980,135982],{"class":35,"line":169},[33,135976,135977],{"class":76},"  font-style",[33,135979,52690],{"class":47},[33,135981,65094],{"class":76},[33,135983,80],{"class":47},[33,135985,135986],{"class":35,"line":175},[33,135987,231],{"class":47},[14,135989,135990],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2918,135992],{"style":127661,"src":135993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[574,135995,135996],{"start":64},[564,135997,135998],{},"添加字体",[2918,136000],{"style":127661,"src":136001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,136003,136004],{},"复制：",[2918,136006],{"style":127661,"src":136007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,136009,136010],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[574,136012,136013],{"start":83},[564,136014,136015],{},"代码展示：",[23,136017,136018],{"className":127805,"code":135824,"language":127807,"meta":28,"style":28},[30,136019,136020,136024,136030,136040,136054,136076,136094,136112,136130,136134,136140,136150,136160],{"__ignoreMap":28},[33,136021,136022],{"class":35,"line":36},[33,136023,135831],{"class":60},[33,136025,136026,136028],{"class":35,"line":51},[33,136027,135836],{"class":39},[33,136029,16823],{"class":47},[33,136031,136032,136034,136036,136038],{"class":35,"line":57},[33,136033,135843],{"class":76},[33,136035,52690],{"class":47},[33,136037,135848],{"class":119},[33,136039,80],{"class":47},[33,136041,136042,136044,136046,136048,136050,136052],{"class":35,"line":64},[33,136043,135855],{"class":76},[33,136045,52690],{"class":47},[33,136047,62979],{"class":76},[33,136049,345],{"class":47},[33,136051,135864],{"class":119},[33,136053,4130],{"class":47},[33,136055,136056,136058,136060,136062,136064,136066,136068,136070,136072,136074],{"class":35,"line":83},[33,136057,135855],{"class":76},[33,136059,52690],{"class":47},[33,136061,62979],{"class":76},[33,136063,345],{"class":47},[33,136065,135879],{"class":119},[33,136067,14965],{"class":47},[33,136069,135884],{"class":76},[33,136071,345],{"class":47},[33,136073,135889],{"class":119},[33,136075,39300],{"class":47},[33,136077,136078,136080,136082,136084,136086,136088,136090,136092],{"class":35,"line":89},[33,136079,135896],{"class":76},[33,136081,345],{"class":47},[33,136083,135901],{"class":119},[33,136085,14965],{"class":47},[33,136087,135884],{"class":76},[33,136089,345],{"class":47},[33,136091,135910],{"class":119},[33,136093,39300],{"class":47},[33,136095,136096,136098,136100,136102,136104,136106,136108,136110],{"class":35,"line":98},[33,136097,135896],{"class":76},[33,136099,345],{"class":47},[33,136101,135921],{"class":119},[33,136103,14965],{"class":47},[33,136105,135884],{"class":76},[33,136107,345],{"class":47},[33,136109,135930],{"class":119},[33,136111,39300],{"class":47},[33,136113,136114,136116,136118,136120,136122,136124,136126,136128],{"class":35,"line":110},[33,136115,135896],{"class":76},[33,136117,345],{"class":47},[33,136119,135941],{"class":119},[33,136121,14965],{"class":47},[33,136123,135884],{"class":76},[33,136125,345],{"class":47},[33,136127,135950],{"class":119},[33,136129,4130],{"class":47},[33,136131,136132],{"class":35,"line":134},[33,136133,231],{"class":47},[33,136135,136136,136138],{"class":35,"line":156},[33,136137,135562],{"class":43},[33,136139,16823],{"class":47},[33,136141,136142,136144,136146,136148],{"class":35,"line":163},[33,136143,135843],{"class":76},[33,136145,52690],{"class":47},[33,136147,135848],{"class":119},[33,136149,80],{"class":47},[33,136151,136152,136154,136156,136158],{"class":35,"line":169},[33,136153,135977],{"class":76},[33,136155,52690],{"class":47},[33,136157,65094],{"class":76},[33,136159,80],{"class":47},[33,136161,136162],{"class":35,"line":175},[33,136163,231],{"class":47},[2918,136165],{"style":127661,"src":136166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,136168,136169],{},"更加细节展示：",[574,136171,136172],{},[564,136173,136174],{},"html 标签内添加小图标",[2918,136176],{"style":127661,"src":136177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[574,136179,136180],{"start":51},[564,136181,136182],{},"给标签定义字体",[23,136184,136185],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,136186,136187,136191,136205,136209],{"__ignoreMap":28},[33,136188,136189],{"class":35,"line":36},[33,136190,131916],{"class":60},[33,136192,136193,136195,136197,136199,136201,136203],{"class":35,"line":51},[33,136194,875],{"class":47},[33,136196,52864],{"class":52553},[33,136198,54739],{"class":43},[33,136200,73],{"class":47},[33,136202,131929],{"class":119},[33,136204,52560],{"class":47},[33,136206,136207],{"class":35,"line":57},[33,136208,131936],{"class":47},[33,136210,136211,136213,136215],{"class":35,"line":64},[33,136212,53038],{"class":47},[33,136214,52864],{"class":52553},[33,136216,52560],{"class":47},[14,136218,136219],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2918,136221],{"style":127661,"src":136222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[1599,136224,136226],{"id":136225},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,136228,136229],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,136231,136232,136233,136236],{},"把压缩包里面的 ",[480,136234,136235],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,136238,136239],{},"打开网站，点下方：",[2918,136241],{"style":127661,"src":136242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2918,136244],{"style":127661,"src":136245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2918,136247],{"style":127661,"src":136248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,136250,136251],{},"点yes重新加载",[14,136253,136254],{},"然后重复之前的操作就可以实现了",[14,136256,136257],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[1599,136259,136261],{"id":136260},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2918,136263],{"style":127661,"src":136264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1544,136266,136267],{},"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":28,"searchDepth":51,"depth":51,"links":136269},[136270,136276,136281],{"id":134873,"depth":51,"text":134874,"children":136271},[136272,136273,136274,136275],{"id":134885,"depth":57,"text":134886},{"id":134914,"depth":57,"text":134915},{"id":134942,"depth":57,"text":134943},{"id":135000,"depth":57,"text":135001},{"id":135472,"depth":51,"text":135473,"children":136277},[136278,136279,136280],{"id":135476,"depth":57,"text":135477},{"id":135521,"depth":57,"text":135522},{"id":135537,"depth":57,"text":135538},{"id":135637,"depth":51,"text":135638,"children":136282},[136283,136284,136285,136286,136287,136288],{"id":135641,"depth":57,"text":135642},{"id":135675,"depth":57,"text":135676},{"id":135698,"depth":57,"text":135699},{"id":135745,"depth":57,"text":135746},{"id":136225,"depth":57,"text":136226},{"id":136260,"depth":57,"text":136261},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134865,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136295,"title":136296,"body":136297,"description":24628,"extension":1557,"meta":137524,"navigation":159,"path":137525,"seo":137526,"stem":137527,"__hash__":137528},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136298,"toc":137505},[136299,136302,136306,136309,136323,136391,136421,136424,136428,136432,136534,136581,136585,136588,136591,136625,136628,136631,136634,136637,136640,136643,136646,136648,136651,136654,136657,136660,136663,136666,136669,136697,136700,136704,136707,136714,136717,136720,136746,136749,136753,136756,136759,136766,136770,136773,136775,136807,136810,136813,136825,136831,136834,136837,136840,136842,136846,136849,136852,136855,136900,136904,136906,136909,136916,136958,136961,136965,136970,136984,136988,136991,136994,136997,137000,137003,137037,137040,137043,137097,137100,137103,137106,137109,137161,137164,137167,137216,137220,137222,137225,137228,137231,137234,137237,137295,137298,137304,137307,137310,137342,137345,137349,137353,137356,137388,137392,137395,137439,137443,137446,137449,137452,137455,137458,137461,137464,137466,137469,137471,137474,137477,137480,137483,137488,137491,137493,137496,137499,137502],[10,136300,136296],{"id":136301},"_13-界面样式与布局技巧",[18,136303,136305],{"id":136304},"_131-css三角","13.1 css三角",[14,136307,136308],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[561,136310,136311,136314,136317,136320],{},[564,136312,136313],{},"用css 边框可以模拟三角效果",[564,136315,136316],{},"宽度高度为0",[564,136318,136319],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[564,136321,136322],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[23,136324,136326],{"className":127805,"code":136325,"language":127807,"meta":28,"style":28},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[30,136327,136328,136333,136340,136350,136360,136376,136387],{"__ignoreMap":28},[33,136329,136330],{"class":35,"line":36},[33,136331,136332],{"class":60},"\u002F* CSS 实现三角形 *\u002F\n",[33,136334,136335,136338],{"class":35,"line":51},[33,136336,136337],{"class":43},".triangle",[33,136339,16823],{"class":47},[33,136341,136342,136344,136346,136348],{"class":35,"line":57},[33,136343,71821],{"class":76},[33,136345,52690],{"class":47},[33,136347,766],{"class":76},[33,136349,80],{"class":47},[33,136351,136352,136354,136356,136358],{"class":35,"line":64},[33,136353,72041],{"class":76},[33,136355,52690],{"class":47},[33,136357,766],{"class":76},[33,136359,80],{"class":47},[33,136361,136362,136364,136366,136368,136370,136372,136374],{"class":35,"line":83},[33,136363,72149],{"class":76},[33,136365,52690],{"class":47},[33,136367,77],{"class":76},[33,136369,52745],{"class":39},[33,136371,52774],{"class":76},[33,136373,65244],{"class":76},[33,136375,80],{"class":47},[33,136377,136378,136381,136383,136385],{"class":35,"line":89},[33,136379,136380],{"class":76},"  border-bottom-color",[33,136382,52690],{"class":47},[33,136384,63622],{"class":76},[33,136386,80],{"class":47},[33,136388,136389],{"class":35,"line":98},[33,136390,231],{"class":47},[23,136392,136393],{"className":127805,"code":131962,"language":127807,"meta":28,"style":28},[30,136394,136395,136401,136417],{"__ignoreMap":28},[33,136396,136397,136399],{"class":35,"line":36},[33,136398,52864],{"class":52553},[33,136400,16823],{"class":47},[33,136402,136403,136405,136407,136409,136411,136413,136415],{"class":35,"line":51},[33,136404,72149],{"class":76},[33,136406,52690],{"class":47},[33,136408,701],{"class":76},[33,136410,52745],{"class":39},[33,136412,52774],{"class":76},[33,136414,131197],{"class":76},[33,136416,80],{"class":47},[33,136418,136419],{"class":35,"line":57},[33,136420,231],{"class":47},[2918,136422],{"style":127661,"src":136423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[18,136425,136427],{"id":136426},"_132-css用户界面样式","13.2 css用户界面样式",[1599,136429,136431],{"id":136430},"_1321-鼠标样式","13.2.1 鼠标样式",[23,136433,136435],{"className":127805,"code":136434,"language":127807,"meta":28,"style":28},"\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",[30,136436,136437,136442,136461,136479,136498,136515],{"__ignoreMap":28},[33,136438,136439],{"class":35,"line":36},[33,136440,136441],{"class":60},"\u002F* 鼠标样式 *\u002F\n",[33,136443,136444,136446,136448,136451,136453,136455,136458],{"class":35,"line":51},[33,136445,52864],{"class":52553},[33,136447,81060],{"class":47},[33,136449,136450],{"class":76},"cursor",[33,136452,52690],{"class":47},[33,136454,63283],{"class":76},[33,136456,136457],{"class":47},"; }   ",[33,136459,136460],{"class":60},"\u002F* 手型 *\u002F\n",[33,136462,136463,136465,136467,136469,136471,136474,136476],{"class":35,"line":57},[33,136464,52864],{"class":52553},[33,136466,81060],{"class":47},[33,136468,136450],{"class":76},[33,136470,52690],{"class":47},[33,136472,136473],{"class":76},"default",[33,136475,136457],{"class":47},[33,136477,136478],{"class":60},"\u002F* 默认 *\u002F\n",[33,136480,136481,136483,136485,136487,136489,136492,136495],{"class":35,"line":64},[33,136482,52864],{"class":52553},[33,136484,81060],{"class":47},[33,136486,136450],{"class":76},[33,136488,52690],{"class":47},[33,136490,136491],{"class":76},"move",[33,136493,136494],{"class":47},"; }      ",[33,136496,136497],{"class":60},"\u002F* 移动 *\u002F\n",[33,136499,136500,136502,136504,136506,136508,136510,136512],{"class":35,"line":83},[33,136501,52864],{"class":52553},[33,136503,81060],{"class":47},[33,136505,136450],{"class":76},[33,136507,52690],{"class":47},[33,136509,6578],{"class":76},[33,136511,136494],{"class":47},[33,136513,136514],{"class":60},"\u002F* 文本 *\u002F\n",[33,136516,136517,136519,136521,136523,136525,136528,136531],{"class":35,"line":89},[33,136518,52864],{"class":52553},[33,136520,81060],{"class":47},[33,136522,136450],{"class":76},[33,136524,52690],{"class":47},[33,136526,136527],{"class":76},"not-allowed",[33,136529,136530],{"class":47},"; } ",[33,136532,136533],{"class":60},"\u002F* 禁止 *\u002F\n",[1756,136535,136536,136544],{},[1759,136537,136538],{},[1762,136539,136540,136542],{},[1765,136541,128269],{"align":24988},[1765,136543,28742],{"align":24988},[1802,136545,136546,136553,136560,136567,136574],{},[1762,136547,136548,136550],{},[1807,136549,136473],{"align":24988},[1807,136551,136552],{"align":24988},"小白 默认",[1762,136554,136555,136557],{},[1807,136556,63283],{"align":24988},[1807,136558,136559],{"align":24988},"小手",[1762,136561,136562,136564],{},[1807,136563,136491],{"align":24988},[1807,136565,136566],{"align":24988},"移动",[1762,136568,136569,136571],{},[1807,136570,6578],{"align":24988},[1807,136572,136573],{"align":24988},"文本",[1762,136575,136576,136578],{},[1807,136577,136527],{"align":24988},[1807,136579,136580],{"align":24988},"禁止",[1599,136582,136584],{"id":136583},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,136586,136587],{},"去除表单轮廓线",[14,136589,136590],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[23,136592,136593],{"className":127805,"code":131169,"language":127807,"meta":28,"style":28},[30,136594,136595,136599,136605,136621],{"__ignoreMap":28},[33,136596,136597],{"class":35,"line":36},[33,136598,131176],{"class":60},[33,136600,136601,136603],{"class":35,"line":51},[33,136602,52864],{"class":52553},[33,136604,16823],{"class":47},[33,136606,136607,136609,136611,136613,136615,136617,136619],{"class":35,"line":57},[33,136608,72149],{"class":76},[33,136610,52690],{"class":47},[33,136612,701],{"class":76},[33,136614,52745],{"class":39},[33,136616,52774],{"class":76},[33,136618,131197],{"class":76},[33,136620,80],{"class":47},[33,136622,136623],{"class":35,"line":64},[33,136624,231],{"class":47},[14,136626,136627],{},"文本域：",[2918,136629],{"style":127661,"src":136630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,136632,136633],{},"此时会有一个空白区域",[2918,136635],{"style":127661,"src":136636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,136638,136639],{},"写在同一行就不会出现这个问题",[2918,136641],{"style":127661,"src":136642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,136644,136645],{},"文本域是行内块元素，一定记住！！！",[14,136647,99486],{},[2918,136649],{"style":127661,"src":136650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,136652,136653],{},"文本域尽量放在一行",[14,136655,136656],{},"知识回顾：cols是列，rols是行",[2918,136658],{"style":127661,"src":136659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,136661,136662],{},"它可以进行拖动，显然这是我们不愿意看到的",[2918,136664],{"style":127661,"src":136665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,136667,136668],{},"使用resize进行解决",[23,136670,136672],{"className":127805,"code":136671,"language":127807,"meta":28,"style":28},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[30,136673,136674,136680,136693],{"__ignoreMap":28},[33,136675,136676,136678],{"class":35,"line":36},[33,136677,55074],{"class":52553},[33,136679,16823],{"class":47},[33,136681,136682,136684,136686,136688,136690],{"class":35,"line":51},[33,136683,72051],{"class":76},[33,136685,52690],{"class":47},[33,136687,55990],{"class":76},[33,136689,131668],{"class":47},[33,136691,136692],{"class":60},"\u002F* 取消表单轮廓线 *\u002F\n",[33,136694,136695],{"class":35,"line":57},[33,136696,231],{"class":47},[14,136698,136699],{},"此时就无法通过右下方实现拖动了",[1599,136701,136703],{"id":136702},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,136705,136706],{},"实现一个盒子中的文字和图片对齐",[14,136708,136709,136710,136713],{},"用于设置一个元素的 ",[480,136711,136712],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,136715,136716],{},"图片和文字默认是基线对齐",[2918,136718],{"style":127661,"src":136719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[23,136721,136722],{"className":127805,"code":136671,"language":127807,"meta":28,"style":28},[30,136723,136724,136730,136742],{"__ignoreMap":28},[33,136725,136726,136728],{"class":35,"line":36},[33,136727,55074],{"class":52553},[33,136729,16823],{"class":47},[33,136731,136732,136734,136736,136738,136740],{"class":35,"line":51},[33,136733,72051],{"class":76},[33,136735,52690],{"class":47},[33,136737,55990],{"class":76},[33,136739,131668],{"class":47},[33,136741,136692],{"class":60},[33,136743,136744],{"class":35,"line":57},[33,136745,231],{"class":47},[2918,136747],{"style":127661,"src":136748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23249,136750,136752],{"id":136751},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,136754,136755],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2918,136757],{"style":127661,"src":136758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,136760,136761,136762,136765],{},"此时可以给图片、表单这些行内块元素的 ",[480,136763,136764],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23249,136767,136769],{"id":136768},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,136771,136772],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,136774,15884],{},[23,136776,136778],{"className":127805,"code":136777,"language":127807,"meta":28,"style":28},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[30,136779,136780,136785,136791,136803],{"__ignoreMap":28},[33,136781,136782],{"class":35,"line":36},[33,136783,136784],{"class":60},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[33,136786,136787,136789],{"class":35,"line":51},[33,136788,2918],{"class":52553},[33,136790,16823],{"class":47},[33,136792,136793,136796,136798,136801],{"class":35,"line":57},[33,136794,136795],{"class":76},"  vertical-align",[33,136797,52690],{"class":47},[33,136799,136800],{"class":76},"middle",[33,136802,80],{"class":47},[33,136804,136805],{"class":35,"line":64},[33,136806,231],{"class":47},[2918,136808],{"style":127661,"src":136809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,136811,136812],{},"主要解决方法有两种：",[574,136814,136815],{},[564,136816,136817,136820,136821,136824],{},[480,136818,136819],{},"给图片"," 添加 ",[480,136822,136823],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,136826,136827,136828],{},"2.把图片转换为块级元素 ",[480,136829,136830],{},"display: block",[14,136832,136833],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,136835,136836],{},"img {",[14,136838,136839],{},"vertical-align:middle;",[14,136841,2542],{},[1599,136843,136845],{"id":136844},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,136847,136848],{},"效果：",[2918,136850],{"style":127661,"src":136851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,136853,136854],{},"单行文本溢出显示省略号--必须满足三个条件：",[23,136856,136858],{"className":127805,"code":136857,"language":127807,"meta":28,"style":28},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[30,136859,136860,136865,136871,136881,136886,136896],{"__ignoreMap":28},[33,136861,136862],{"class":35,"line":36},[33,136863,136864],{"class":60},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[33,136866,136867,136869],{"class":35,"line":51},[33,136868,2918],{"class":52553},[33,136870,16823],{"class":47},[33,136872,136873,136875,136877,136879],{"class":35,"line":57},[33,136874,136795],{"class":76},[33,136876,52690],{"class":47},[33,136878,136800],{"class":76},[33,136880,80],{"class":47},[33,136882,136883],{"class":35,"line":64},[33,136884,136885],{"class":60},"  \u002F* 或 *\u002F\n",[33,136887,136888,136890,136892,136894],{"class":35,"line":83},[33,136889,129421],{"class":76},[33,136891,52690],{"class":47},[33,136893,62122],{"class":76},[33,136895,80],{"class":47},[33,136897,136898],{"class":35,"line":89},[33,136899,231],{"class":47},[1599,136901,136903],{"id":136902},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,136905,136848],{},[2918,136907],{"style":127661,"src":136908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,136910,136911,136912,136915],{},"多行文本溢出显示省略号， ",[480,136913,136914],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[23,136917,136918],{"className":127805,"code":136857,"language":127807,"meta":28,"style":28},[30,136919,136920,136924,136930,136940,136944,136954],{"__ignoreMap":28},[33,136921,136922],{"class":35,"line":36},[33,136923,136864],{"class":60},[33,136925,136926,136928],{"class":35,"line":51},[33,136927,2918],{"class":52553},[33,136929,16823],{"class":47},[33,136931,136932,136934,136936,136938],{"class":35,"line":57},[33,136933,136795],{"class":76},[33,136935,52690],{"class":47},[33,136937,136800],{"class":76},[33,136939,80],{"class":47},[33,136941,136942],{"class":35,"line":64},[33,136943,136885],{"class":60},[33,136945,136946,136948,136950,136952],{"class":35,"line":83},[33,136947,129421],{"class":76},[33,136949,52690],{"class":47},[33,136951,62122],{"class":76},[33,136953,80],{"class":47},[33,136955,136956],{"class":35,"line":89},[33,136957,231],{"class":47},[14,136959,136960],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[18,136962,136964],{"id":136963},"_133-常见布局技巧","13.3 常见布局技巧",[14,136966,136967],{},[480,136968,136969],{},"巧妙利用一个技术更快更好的布局：",[574,136971,136972,136975,136978,136981],{},[564,136973,136974],{},"margin负值的运用",[564,136976,136977],{},"文字围绕浮动元素",[564,136979,136980],{},"行内块的巧妙运用",[564,136982,136983],{},"CSS三角强化",[1599,136985,136987],{"id":136986},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136989,136990],{},"应用场景：",[2918,136992],{"style":127661,"src":136993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2918,136995],{"style":127661,"src":136996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136998,136999],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,137001,137002],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[23,137004,137005],{"className":127805,"code":131169,"language":127807,"meta":28,"style":28},[30,137006,137007,137011,137017,137033],{"__ignoreMap":28},[33,137008,137009],{"class":35,"line":36},[33,137010,131176],{"class":60},[33,137012,137013,137015],{"class":35,"line":51},[33,137014,52864],{"class":52553},[33,137016,16823],{"class":47},[33,137018,137019,137021,137023,137025,137027,137029,137031],{"class":35,"line":57},[33,137020,72149],{"class":76},[33,137022,52690],{"class":47},[33,137024,701],{"class":76},[33,137026,52745],{"class":39},[33,137028,52774],{"class":76},[33,137030,131197],{"class":76},[33,137032,80],{"class":47},[33,137034,137035],{"class":35,"line":64},[33,137036,231],{"class":47},[2918,137038],{"style":127661,"src":137039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,137041,137042],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[23,137044,137046],{"className":127805,"code":137045,"language":127807,"meta":28,"style":28},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,137047,137048,137053,137059,137069,137081,137093],{"__ignoreMap":28},[33,137049,137050],{"class":35,"line":36},[33,137051,137052],{"class":60},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[33,137054,137055,137057],{"class":35,"line":51},[33,137056,131653],{"class":43},[33,137058,16823],{"class":47},[33,137060,137061,137063,137065,137067],{"class":35,"line":57},[33,137062,133611],{"class":76},[33,137064,52690],{"class":47},[33,137066,56017],{"class":76},[33,137068,80],{"class":47},[33,137070,137071,137073,137075,137077,137079],{"class":35,"line":64},[33,137072,133625],{"class":76},[33,137074,52690],{"class":47},[33,137076,77],{"class":76},[33,137078,52745],{"class":39},[33,137080,80],{"class":47},[33,137082,137083,137085,137087,137089,137091],{"class":35,"line":83},[33,137084,133642],{"class":76},[33,137086,52690],{"class":47},[33,137088,1045],{"class":76},[33,137090,52745],{"class":39},[33,137092,80],{"class":47},[33,137094,137095],{"class":35,"line":89},[33,137096,231],{"class":47},[14,137098,137099],{},"加上上述代码会发现：",[2918,137101],{"style":127661,"src":137102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,137104,137105],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,137107,137108],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[23,137110,137111],{"className":127805,"code":137045,"language":127807,"meta":28,"style":28},[30,137112,137113,137117,137123,137133,137145,137157],{"__ignoreMap":28},[33,137114,137115],{"class":35,"line":36},[33,137116,137052],{"class":60},[33,137118,137119,137121],{"class":35,"line":51},[33,137120,131653],{"class":43},[33,137122,16823],{"class":47},[33,137124,137125,137127,137129,137131],{"class":35,"line":57},[33,137126,133611],{"class":76},[33,137128,52690],{"class":47},[33,137130,56017],{"class":76},[33,137132,80],{"class":47},[33,137134,137135,137137,137139,137141,137143],{"class":35,"line":64},[33,137136,133625],{"class":76},[33,137138,52690],{"class":47},[33,137140,77],{"class":76},[33,137142,52745],{"class":39},[33,137144,80],{"class":47},[33,137146,137147,137149,137151,137153,137155],{"class":35,"line":83},[33,137148,133642],{"class":76},[33,137150,52690],{"class":47},[33,137152,1045],{"class":76},[33,137154,52745],{"class":39},[33,137156,80],{"class":47},[33,137158,137159],{"class":35,"line":89},[33,137160,231],{"class":47},[14,137162,137163],{},"解决方式2：",[14,137165,137166],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[23,137168,137170],{"className":127805,"code":137169,"language":127807,"meta":28,"style":28},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[30,137171,137172,137178,137188,137200,137212],{"__ignoreMap":28},[33,137173,137174,137176],{"class":35,"line":36},[33,137175,52864],{"class":52553},[33,137177,16823],{"class":47},[33,137179,137180,137182,137184,137186],{"class":35,"line":51},[33,137181,133611],{"class":76},[33,137183,52690],{"class":47},[33,137185,56017],{"class":76},[33,137187,80],{"class":47},[33,137189,137190,137192,137194,137196,137198],{"class":35,"line":57},[33,137191,133625],{"class":76},[33,137193,52690],{"class":47},[33,137195,77],{"class":76},[33,137197,52745],{"class":39},[33,137199,80],{"class":47},[33,137201,137202,137204,137206,137208,137210],{"class":35,"line":64},[33,137203,133642],{"class":76},[33,137205,52690],{"class":47},[33,137207,1045],{"class":76},[33,137209,52745],{"class":39},[33,137211,80],{"class":47},[33,137213,137214],{"class":35,"line":83},[33,137215,231],{"class":47},[1599,137217,137219],{"id":137218},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,137221,136990],{},[2918,137223],{"style":127661,"src":137224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,137226,137227],{},"实现结构图：",[2918,137229],{"style":127661,"src":137230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,137232,137233],{},"巧妙运用浮动元素不会压住文字的特性",[14,137235,137236],{},"代码显示：",[23,137238,137240],{"className":127805,"code":137239,"language":127807,"meta":28,"style":28},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[30,137241,137242,137248,137258,137262,137267,137271,137277,137291],{"__ignoreMap":28},[33,137243,137244,137246],{"class":35,"line":36},[33,137245,131653],{"class":43},[33,137247,16823],{"class":47},[33,137249,137250,137252,137254,137256],{"class":35,"line":51},[33,137251,132285],{"class":76},[33,137253,52690],{"class":47},[33,137255,24988],{"class":76},[33,137257,80],{"class":47},[33,137259,137260],{"class":35,"line":57},[33,137261,231],{"class":47},[33,137263,137264],{"class":35,"line":64},[33,137265,137266],{"class":47},"```Css\n",[33,137268,137269],{"class":35,"line":83},[33,137270,131648],{"class":60},[33,137272,137273,137275],{"class":35,"line":89},[33,137274,131653],{"class":43},[33,137276,16823],{"class":47},[33,137278,137279,137281,137283,137285,137287,137289],{"class":35,"line":98},[33,137280,71723],{"class":76},[33,137282,52690],{"class":47},[33,137284,766],{"class":76},[33,137286,52809],{"class":76},[33,137288,131668],{"class":47},[33,137290,131671],{"class":60},[33,137292,137293],{"class":35,"line":110},[33,137294,231],{"class":47},[14,137296,137297],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[23,137299,137302],{"className":137300,"code":137301,"language":6578},[6576],"\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",[30,137303,137301],{"__ignoreMap":28},[2918,137305],{"style":127661,"src":137306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,137308,137309],{},"最终展示结果：",[23,137311,137312],{"className":127805,"code":131641,"language":127807,"meta":28,"style":28},[30,137313,137314,137318,137324,137338],{"__ignoreMap":28},[33,137315,137316],{"class":35,"line":36},[33,137317,131648],{"class":60},[33,137319,137320,137322],{"class":35,"line":51},[33,137321,131653],{"class":43},[33,137323,16823],{"class":47},[33,137325,137326,137328,137330,137332,137334,137336],{"class":35,"line":57},[33,137327,71723],{"class":76},[33,137329,52690],{"class":47},[33,137331,766],{"class":76},[33,137333,52809],{"class":76},[33,137335,131668],{"class":47},[33,137337,131671],{"class":60},[33,137339,137340],{"class":35,"line":64},[33,137341,231],{"class":47},[2918,137343],{"style":127661,"src":137344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[18,137346,137348],{"id":137347},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[1599,137350,137352],{"id":137351},"_1341-原理","13.4.1 原理",[2918,137354],{"style":127661,"src":137355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[23,137357,137358],{"className":127805,"code":131641,"language":127807,"meta":28,"style":28},[30,137359,137360,137364,137370,137384],{"__ignoreMap":28},[33,137361,137362],{"class":35,"line":36},[33,137363,131648],{"class":60},[33,137365,137366,137368],{"class":35,"line":51},[33,137367,131653],{"class":43},[33,137369,16823],{"class":47},[33,137371,137372,137374,137376,137378,137380,137382],{"class":35,"line":57},[33,137373,71723],{"class":76},[33,137375,52690],{"class":47},[33,137377,766],{"class":76},[33,137379,52809],{"class":76},[33,137381,131668],{"class":47},[33,137383,131671],{"class":60},[33,137385,137386],{"class":35,"line":64},[33,137387,231],{"class":47},[1599,137389,137391],{"id":137390},"_1342-实例","13.4.2 实例",[2918,137393],{"style":127661,"src":137394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[23,137396,137397],{"className":127805,"code":132271,"language":127807,"meta":28,"style":28},[30,137398,137399,137405,137415,137419,137425,137435],{"__ignoreMap":28},[33,137400,137401,137403],{"class":35,"line":36},[33,137402,132278],{"class":43},[33,137404,16823],{"class":47},[33,137406,137407,137409,137411,137413],{"class":35,"line":51},[33,137408,132285],{"class":76},[33,137410,52690],{"class":47},[33,137412,24988],{"class":76},[33,137414,80],{"class":47},[33,137416,137417],{"class":35,"line":57},[33,137418,231],{"class":47},[33,137420,137421,137423],{"class":35,"line":64},[33,137422,132300],{"class":43},[33,137424,16823],{"class":47},[33,137426,137427,137429,137431,137433],{"class":35,"line":83},[33,137428,132285],{"class":76},[33,137430,52690],{"class":47},[33,137432,73775],{"class":76},[33,137434,80],{"class":47},[33,137436,137437],{"class":35,"line":89},[33,137438,231],{"class":47},[18,137440,137442],{"id":137441},"_135-css的初始化","13.5 css的初始化",[14,137444,137445],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,137447,137448],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,137450,137451],{},"每个网页都必须首先进行 CSS初始化。",[14,137453,137454],{},"这里我们以 京东CSS初始化代码为例。",[14,137456,137457],{},"在网页右键查看网页源代码",[14,137459,137460],{},"找到css的link引入语句",[14,137462,137463],{},"然后ctrl+f 输入body",[14,137465,78479],{},[2918,137467],{"style":127661,"src":137468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,137470,78502],{},[2918,137472],{"style":127661,"src":137473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,137475,137476],{},"③打开了网页上传压缩的代码",[2918,137478],{"style":127661,"src":137479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,137481,137482],{},"④从body前可以查看这个网页的初始化代码",[14,137484,137485],{},[480,137486,137487],{},"Unicode编码字体：",[14,137489,137490],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,137492,84460],{},[14,137494,137495],{},"黑体 \\9ED1\\4F53",[14,137497,137498],{},"宋体 \\5B8B\\4F53",[14,137500,137501],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1544,137503,137504],{},"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":28,"searchDepth":51,"depth":51,"links":137506},[137507,137508,137515,137519,137523],{"id":136304,"depth":51,"text":136305},{"id":136426,"depth":51,"text":136427,"children":137509},[137510,137511,137512,137513,137514],{"id":136430,"depth":57,"text":136431},{"id":136583,"depth":57,"text":136584},{"id":136702,"depth":57,"text":136703},{"id":136844,"depth":57,"text":136845},{"id":136902,"depth":57,"text":136903},{"id":136963,"depth":51,"text":136964,"children":137516},[137517,137518],{"id":136986,"depth":57,"text":136987},{"id":137218,"depth":57,"text":137219},{"id":137347,"depth":51,"text":137348,"children":137520},[137521,137522],{"id":137351,"depth":57,"text":137352},{"id":137390,"depth":57,"text":137391},{"id":137441,"depth":51,"text":137442},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136296,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137530,"title":137531,"body":137532,"description":24628,"extension":1557,"meta":139218,"navigation":159,"path":139219,"seo":139220,"stem":139221,"__hash__":139222},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137533,"toc":139207},[137534,137537,137541,137545,137548,137555,137558,137561,137599,137602,137604,137618,137622,137631,137635,137640,137643,137646,137649,137684,137689,137692,137722,137725,137730,137733,137736,137766,137769,137823,137826,137830,137835,137847,137850,137854,137884,137887,137892,137895,137925,137928,137932,137949,137953,137957,137960,137993,137996,138000,138003,138006,138009,138012,138015,138126,138129,138132,138135,138237,138240,138244,138248,138252,138255,138295,138298,138300,138316,138320,138323,138328,138409,138412,138415,138541,138546,138549,138557,138560,138565,138650,138653,138657,138660,138663,138667,138687,138692,138776,138779,138784,138787,138790,138868,138871,138874,138877,138880,138883,138888,138891,138894,138966,138969,138974,138977,139074,139077,139083,139086,139089,139092,139095,139098,139101,139104,139107,139111,139116,139119,139152,139157,139160,139201,139204],[10,137535,137531],{"id":137536},"_14-html5与css3新特性",[18,137538,137540],{"id":137539},"_141-html5的新特性","14.1 HTML5的新特性",[1599,137542,137544],{"id":137543},"_1411-基本标签","14.1.1 基本标签",[14,137546,137547],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,137549,137550,137551,137554],{},"这些新特性都有兼容性问题，基本是 ",[480,137552,137553],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,137556,137557],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,137559,137560],{},"现在使用的是新特性：",[561,137562,137563,137569,137575,137581,137587,137593],{},[564,137564,137565,137568],{},[30,137566,137567],{},"\u003Cheader>"," 头部标签",[564,137570,137571,137574],{},[30,137572,137573],{},"\u003Cnav>"," 导航标签",[564,137576,137577,137580],{},[30,137578,137579],{},"\u003Carticle>"," 内容标签",[564,137582,137583,137586],{},[30,137584,137585],{},"\u003Csection>"," 定义文档某个区域",[564,137588,137589,137592],{},[30,137590,137591],{},"\u003Caside>"," 侧边栏标签",[564,137594,137595,137598],{},[30,137596,137597],{},"\u003Cfooter>"," 尾部标签",[2918,137600],{"style":127661,"src":137601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,137603,1656],{},[561,137605,137606,137609,137612,137615],{},[564,137607,137608],{},"这种语义化标准主要是针对搜索引擎的",[564,137610,137611],{},"这些标签页面中可以经常使用",[564,137613,137614],{},"在IE9中，需要把这些元素转换为块级元素",[564,137616,137617],{},"移动端更喜欢使用这些标签",[1599,137619,137621],{"id":137620},"_1412-多媒体标签","14.1.2 多媒体标签",[14,137623,137624,137625,137627,137628,137630],{},"音频 ",[480,137626,29427],{}," 和视频 ",[480,137629,29436],{}," 两个标签",[23249,137632,137634],{"id":137633},"_14121-视频标签-video","14.1.2.1 视频标签- video",[574,137636,137637],{},[564,137638,137639],{},"支持格式：",[2918,137641],{"style":127661,"src":137642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,137644,137645],{},"尽量使用MP4，兼容性好",[14,137647,137648],{},"用MP4就可以",[23,137650,137652],{"className":128552,"code":137651,"language":128554,"meta":28,"style":28},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[30,137653,137654],{"__ignoreMap":28},[33,137655,137656,137658,137660,137662,137664,137667,137669,137672,137675,137678,137680,137682],{"class":35,"line":36},[33,137657,875],{"class":47},[33,137659,29436],{"class":52553},[33,137661,56492],{"class":43},[33,137663,73],{"class":47},[33,137665,137666],{"class":119},"\"movie.mp4\"",[33,137668,93676],{"class":43},[33,137670,137671],{"class":43}," autoplay",[33,137673,137674],{"class":43}," muted",[33,137676,137677],{"class":43}," loop",[33,137679,56567],{"class":47},[33,137681,29436],{"class":52553},[33,137683,52560],{"class":47},[574,137685,137686],{"start":51},[564,137687,137688],{},"兼容写法",[14,137690,137691],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[23,137693,137694],{"className":128552,"code":137651,"language":128554,"meta":28,"style":28},[30,137695,137696],{"__ignoreMap":28},[33,137697,137698,137700,137702,137704,137706,137708,137710,137712,137714,137716,137718,137720],{"class":35,"line":36},[33,137699,875],{"class":47},[33,137701,29436],{"class":52553},[33,137703,56492],{"class":43},[33,137705,73],{"class":47},[33,137707,137666],{"class":119},[33,137709,93676],{"class":43},[33,137711,137671],{"class":43},[33,137713,137674],{"class":43},[33,137715,137677],{"class":43},[33,137717,56567],{"class":47},[33,137719,29436],{"class":52553},[33,137721,52560],{"class":47},[14,137723,137724],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[574,137726,137727],{"start":57},[564,137728,137729],{},"video常用属性",[2918,137731],{"style":127661,"src":137732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,137734,137735],{},"poster属性后面是跟的等待加载图片的地址",[23,137737,137738],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,137739,137740],{"__ignoreMap":28},[33,137741,137742,137744,137746,137748,137750,137752,137754,137756,137758,137760,137762,137764],{"class":35,"line":36},[33,137743,875],{"class":47},[33,137745,2918],{"class":52553},[33,137747,56492],{"class":43},[33,137749,73],{"class":47},[33,137751,135322],{"class":119},[33,137753,56500],{"class":43},[33,137755,73],{"class":47},[33,137757,135329],{"class":119},[33,137759,135332],{"class":43},[33,137761,73],{"class":47},[33,137763,135337],{"class":119},[33,137765,52560],{"class":47},[14,137767,137768],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[23,137770,137772],{"className":127805,"code":137771,"language":127807,"meta":28,"style":28},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[30,137773,137774,137779,137785,137809,137814,137819],{"__ignoreMap":28},[33,137775,137776],{"class":35,"line":36},[33,137777,137778],{"class":60},"\u002F* 2D 位移 *\u002F\n",[33,137780,137781,137783],{"class":35,"line":51},[33,137782,52864],{"class":52553},[33,137784,16823],{"class":47},[33,137786,137787,137790,137792,137795,137797,137799,137801,137803,137805,137807],{"class":35,"line":57},[33,137788,137789],{"class":76},"  transform",[33,137791,52690],{"class":47},[33,137793,137794],{"class":76},"translate",[33,137796,345],{"class":47},[33,137798,457],{"class":76},[33,137800,52745],{"class":39},[33,137802,13686],{"class":47},[33,137804,2256],{"class":76},[33,137806,52745],{"class":39},[33,137808,4130],{"class":47},[33,137810,137811],{"class":35,"line":64},[33,137812,137813],{"class":60},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[33,137815,137816],{"class":35,"line":83},[33,137817,137818],{"class":60},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[33,137820,137821],{"class":35,"line":89},[33,137822,231],{"class":47},[14,137824,137825],{},"muted:自动静音属性",[23249,137827,137829],{"id":137828},"_14122-音频标签audio","14.1.2.2 音频标签audio",[574,137831,137832],{},[564,137833,137834],{},"基本使用",[14,137836,137837,137838,137843,137844],{},"当前 ",[480,137839,137840],{},[30,137841,137842],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[480,137845,137846],{},"mp3格式",[2918,137848],{"style":127661,"src":137849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[574,137851,137852],{"start":51},[564,137853,137688],{},[23,137855,137856],{"className":128552,"code":137651,"language":128554,"meta":28,"style":28},[30,137857,137858],{"__ignoreMap":28},[33,137859,137860,137862,137864,137866,137868,137870,137872,137874,137876,137878,137880,137882],{"class":35,"line":36},[33,137861,875],{"class":47},[33,137863,29436],{"class":52553},[33,137865,56492],{"class":43},[33,137867,73],{"class":47},[33,137869,137666],{"class":119},[33,137871,93676],{"class":43},[33,137873,137671],{"class":43},[33,137875,137674],{"class":43},[33,137877,137677],{"class":43},[33,137879,56567],{"class":47},[33,137881,29436],{"class":52553},[33,137883,52560],{"class":47},[14,137885,137886],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[574,137888,137889],{"start":57},[564,137890,137891],{},"常用属性",[2918,137893],{"style":127661,"src":137894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[23,137896,137897],{"className":128552,"code":137651,"language":128554,"meta":28,"style":28},[30,137898,137899],{"__ignoreMap":28},[33,137900,137901,137903,137905,137907,137909,137911,137913,137915,137917,137919,137921,137923],{"class":35,"line":36},[33,137902,875],{"class":47},[33,137904,29436],{"class":52553},[33,137906,56492],{"class":43},[33,137908,73],{"class":47},[33,137910,137666],{"class":119},[33,137912,93676],{"class":43},[33,137914,137671],{"class":43},[33,137916,137674],{"class":43},[33,137918,137677],{"class":43},[33,137920,56567],{"class":47},[33,137922,29436],{"class":52553},[33,137924,52560],{"class":47},[14,137926,137927],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23249,137929,137931],{"id":137930},"_14123-总结","14.1.2.3 总结",[561,137933,137934,137937,137940,137943,137946],{},[564,137935,137936],{},"音频标签和视频标签使用方式基本一致",[564,137938,137939],{},"浏览器支持情况不同",[564,137941,137942],{},"谷歌浏览器把音频和视频自动播放禁止了",[564,137944,137945],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[564,137947,137948],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[1599,137950,137952],{"id":137951},"_1413-表单元素","14.1.3 表单元素",[23249,137954,137956],{"id":137955},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2918,137958],{"style":127661,"src":137959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[23,137961,137963],{"className":128552,"code":137962,"language":128554,"meta":28,"style":28},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[30,137964,137965],{"__ignoreMap":28},[33,137966,137967,137969,137971,137973,137975,137977,137979,137981,137984,137986,137988,137991],{"class":35,"line":36},[33,137968,875],{"class":47},[33,137970,55074],{"class":52553},[33,137972,55077],{"class":43},[33,137974,73],{"class":47},[33,137976,63952],{"class":119},[33,137978,16171],{"class":43},[33,137980,73],{"class":47},[33,137982,137983],{"class":119},"\"username\"",[33,137985,62273],{"class":43},[33,137987,73],{"class":47},[33,137989,137990],{"class":119},"\"请输入用户名\"",[33,137992,52560],{"class":47},[2918,137994],{"style":127661,"src":137995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23249,137997,137999],{"id":137998},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2918,138001],{"style":127661,"src":138002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,138004,138005],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,138007,138008],{},"快捷操作：",[2918,138010],{"style":127661,"src":138011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,138013,138014],{},"例子1：",[23,138016,138018],{"className":128552,"code":138017,"language":128554,"meta":28,"style":28},"\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",[30,138019,138020,138043,138070,138099,138118],{"__ignoreMap":28},[33,138021,138022,138024,138026,138028,138030,138033,138036,138038,138041],{"class":35,"line":36},[33,138023,875],{"class":47},[33,138025,67878],{"class":52553},[33,138027,67881],{"class":43},[33,138029,73],{"class":47},[33,138031,138032],{"class":119},"\"\u002Fsubmit\"",[33,138034,138035],{"class":43}," method",[33,138037,73],{"class":47},[33,138039,138040],{"class":119},"\"post\"",[33,138042,52560],{"class":47},[33,138044,138045,138047,138049,138051,138053,138055,138057,138059,138061,138063,138065,138068],{"class":35,"line":51},[33,138046,53397],{"class":47},[33,138048,55074],{"class":52553},[33,138050,55077],{"class":43},[33,138052,73],{"class":47},[33,138054,63952],{"class":119},[33,138056,16171],{"class":43},[33,138058,73],{"class":47},[33,138060,137983],{"class":119},[33,138062,62273],{"class":43},[33,138064,73],{"class":47},[33,138066,138067],{"class":119},"\"用户名\"",[33,138069,52560],{"class":47},[33,138071,138072,138074,138076,138078,138080,138083,138085,138087,138090,138092,138094,138097],{"class":35,"line":57},[33,138073,53397],{"class":47},[33,138075,55074],{"class":52553},[33,138077,55077],{"class":43},[33,138079,73],{"class":47},[33,138081,138082],{"class":119},"\"password\"",[33,138084,16171],{"class":43},[33,138086,73],{"class":47},[33,138088,138089],{"class":119},"\"pwd\"",[33,138091,62273],{"class":43},[33,138093,73],{"class":47},[33,138095,138096],{"class":119},"\"密码\"",[33,138098,52560],{"class":47},[33,138100,138101,138103,138105,138107,138109,138111,138114,138116],{"class":35,"line":64},[33,138102,53397],{"class":47},[33,138104,55140],{"class":52553},[33,138106,55077],{"class":43},[33,138108,73],{"class":47},[33,138110,67901],{"class":119},[33,138112,138113],{"class":47},">提交\u003C\u002F",[33,138115,55140],{"class":52553},[33,138117,52560],{"class":47},[33,138119,138120,138122,138124],{"class":35,"line":83},[33,138121,53038],{"class":47},[33,138123,67878],{"class":52553},[33,138125,52560],{"class":47},[2918,138127],{"style":127661,"src":138128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,138130,138131],{},"value是表单域的内容",[14,138133,138134],{},"例子2：",[23,138136,138137],{"className":128552,"code":138017,"language":128554,"meta":28,"style":28},[30,138138,138139,138159,138185,138211,138229],{"__ignoreMap":28},[33,138140,138141,138143,138145,138147,138149,138151,138153,138155,138157],{"class":35,"line":36},[33,138142,875],{"class":47},[33,138144,67878],{"class":52553},[33,138146,67881],{"class":43},[33,138148,73],{"class":47},[33,138150,138032],{"class":119},[33,138152,138035],{"class":43},[33,138154,73],{"class":47},[33,138156,138040],{"class":119},[33,138158,52560],{"class":47},[33,138160,138161,138163,138165,138167,138169,138171,138173,138175,138177,138179,138181,138183],{"class":35,"line":51},[33,138162,53397],{"class":47},[33,138164,55074],{"class":52553},[33,138166,55077],{"class":43},[33,138168,73],{"class":47},[33,138170,63952],{"class":119},[33,138172,16171],{"class":43},[33,138174,73],{"class":47},[33,138176,137983],{"class":119},[33,138178,62273],{"class":43},[33,138180,73],{"class":47},[33,138182,138067],{"class":119},[33,138184,52560],{"class":47},[33,138186,138187,138189,138191,138193,138195,138197,138199,138201,138203,138205,138207,138209],{"class":35,"line":57},[33,138188,53397],{"class":47},[33,138190,55074],{"class":52553},[33,138192,55077],{"class":43},[33,138194,73],{"class":47},[33,138196,138082],{"class":119},[33,138198,16171],{"class":43},[33,138200,73],{"class":47},[33,138202,138089],{"class":119},[33,138204,62273],{"class":43},[33,138206,73],{"class":47},[33,138208,138096],{"class":119},[33,138210,52560],{"class":47},[33,138212,138213,138215,138217,138219,138221,138223,138225,138227],{"class":35,"line":64},[33,138214,53397],{"class":47},[33,138216,55140],{"class":52553},[33,138218,55077],{"class":43},[33,138220,73],{"class":47},[33,138222,67901],{"class":119},[33,138224,138113],{"class":47},[33,138226,55140],{"class":52553},[33,138228,52560],{"class":47},[33,138230,138231,138233,138235],{"class":35,"line":83},[33,138232,53038],{"class":47},[33,138234,67878],{"class":52553},[33,138236,52560],{"class":47},[2918,138238],{"style":127661,"src":138239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[18,138241,138243],{"id":138242},"_142-css新特性","14.2 CSS新特性",[1599,138245,138247],{"id":138246},"_1421-新增选择器","14.2.1 新增选择器",[23249,138249,138251],{"id":138250},"_14211-属性选择器","14.2.1.1 属性选择器",[2918,138253],{"style":127661,"src":138254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[23,138256,138258],{"className":127805,"code":138257,"language":127807,"meta":28,"style":28},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[30,138259,138260,138275,138291],{"__ignoreMap":28},[33,138261,138262,138264,138266,138268,138270,138272],{"class":35,"line":36},[33,138263,55074],{"class":52553},[33,138265,2489],{"class":47},[33,138267,104360],{"class":43},[33,138269,73],{"class":39},[33,138271,63952],{"class":119},[33,138273,138274],{"class":47},"] {\n",[33,138276,138277,138279,138281,138283,138285,138287,138289],{"class":35,"line":51},[33,138278,72149],{"class":76},[33,138280,52690],{"class":47},[33,138282,701],{"class":76},[33,138284,52745],{"class":39},[33,138286,52774],{"class":76},[33,138288,131385],{"class":76},[33,138290,80],{"class":47},[33,138292,138293],{"class":35,"line":57},[33,138294,231],{"class":47},[2918,138296],{"style":127661,"src":138297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,138299,1656],{},[561,138301,138302,138305,138308,138311],{},[564,138303,138304],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[564,138306,138307],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[564,138309,138310],{},"属性选择器也可以选择出来自定义的属性",[564,138312,138313,138315],{},[480,138314,10276],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23249,138317,138319],{"id":138318},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2918,138321],{"style":127661,"src":138322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[574,138324,138325],{},[564,138326,138327],{},"fist-child",[23,138329,138331],{"className":127805,"code":138330,"language":127807,"meta":28,"style":28},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[30,138332,138333,138338,138353,138373,138391],{"__ignoreMap":28},[33,138334,138335],{"class":35,"line":36},[33,138336,138337],{"class":60},"\u002F* 属性选择器 *\u002F\n",[33,138339,138340,138342,138344,138346,138348,138350],{"class":35,"line":51},[33,138341,55074],{"class":52553},[33,138343,2489],{"class":47},[33,138345,104360],{"class":43},[33,138347,73],{"class":39},[33,138349,63952],{"class":119},[33,138351,138352],{"class":47},"] { }\n",[33,138354,138355,138357,138359,138361,138364,138367,138370],{"class":35,"line":57},[33,138356,55074],{"class":52553},[33,138358,2489],{"class":47},[33,138360,15945],{"class":43},[33,138362,138363],{"class":39},"^=",[33,138365,138366],{"class":119},"\"icon\"",[33,138368,138369],{"class":47},"] { }  ",[33,138371,138372],{"class":60},"\u002F* 以 icon 开头 *\u002F\n",[33,138374,138375,138377,138379,138381,138384,138386,138388],{"class":35,"line":64},[33,138376,55074],{"class":52553},[33,138378,2489],{"class":47},[33,138380,15945],{"class":43},[33,138382,138383],{"class":39},"$=",[33,138385,138366],{"class":119},[33,138387,138369],{"class":47},[33,138389,138390],{"class":60},"\u002F* 以 icon 结尾 *\u002F\n",[33,138392,138393,138395,138397,138399,138402,138404,138406],{"class":35,"line":83},[33,138394,55074],{"class":52553},[33,138396,2489],{"class":47},[33,138398,15945],{"class":43},[33,138400,138401],{"class":39},"*=",[33,138403,138366],{"class":119},[33,138405,138369],{"class":47},[33,138407,138408],{"class":60},"\u002F* 包含 icon *\u002F\n",[14,138410,138411],{},"ul的第一个儿子文本为红色",[14,138413,138414],{},"一定要在冒号前加空格，不然就是选中所有的了",[23,138416,138418],{"className":127805,"code":138417,"language":127807,"meta":28,"style":28},".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",[30,138419,138420,138426,138436,138440,138444,138449,138462,138475,138491,138508,138525],{"__ignoreMap":28},[33,138421,138422,138424],{"class":35,"line":36},[33,138423,128096],{"class":43},[33,138425,16823],{"class":47},[33,138427,138428,138430,138432,138434],{"class":35,"line":51},[33,138429,72158],{"class":76},[33,138431,52690],{"class":47},[33,138433,58674],{"class":76},[33,138435,80],{"class":47},[33,138437,138438],{"class":35,"line":57},[33,138439,231],{"class":47},[33,138441,138442],{"class":35,"line":64},[33,138443,137266],{"class":47},[33,138445,138446],{"class":35,"line":83},[33,138447,138448],{"class":60},"\u002F* 结构伪类选择器 *\u002F\n",[33,138450,138451,138453,138456,138459],{"class":35,"line":89},[33,138452,564],{"class":52553},[33,138454,138455],{"class":43},":first-child",[33,138457,138458],{"class":47}," { }           ",[33,138460,138461],{"class":60},"\u002F* 第一个 *\u002F\n",[33,138463,138464,138466,138469,138472],{"class":35,"line":98},[33,138465,564],{"class":52553},[33,138467,138468],{"class":43},":last-child",[33,138470,138471],{"class":47}," { }            ",[33,138473,138474],{"class":60},"\u002F* 最后一个 *\u002F\n",[33,138476,138477,138479,138481,138483,138485,138488],{"class":35,"line":110},[33,138478,564],{"class":52553},[33,138480,130719],{"class":43},[33,138482,345],{"class":47},[33,138484,707],{"class":76},[33,138486,138487],{"class":47},") { }          ",[33,138489,138490],{"class":60},"\u002F* 第2个 *\u002F\n",[33,138492,138493,138495,138497,138499,138502,138505],{"class":35,"line":134},[33,138494,564],{"class":52553},[33,138496,130719],{"class":43},[33,138498,345],{"class":47},[33,138500,138501],{"class":76},"2n",[33,138503,138504],{"class":47},") { }         ",[33,138506,138507],{"class":60},"\u002F* 偶数 *\u002F\n",[33,138509,138510,138512,138514,138516,138519,138522],{"class":35,"line":156},[33,138511,564],{"class":52553},[33,138513,130719],{"class":43},[33,138515,345],{"class":47},[33,138517,138518],{"class":76},"2n+1",[33,138520,138521],{"class":47},") { }       ",[33,138523,138524],{"class":60},"\u002F* 奇数 *\u002F\n",[33,138526,138527,138529,138531,138533,138536,138538],{"class":35,"line":163},[33,138528,564],{"class":52553},[33,138530,130719],{"class":43},[33,138532,345],{"class":47},[33,138534,138535],{"class":76},"-n+3",[33,138537,138521],{"class":47},[33,138539,138540],{"class":60},"\u002F* 前3个 *\u002F\n",[52864,138542,138545],{"className":138543},[138544],"example","\n  示例内容\n",[14,138547,138548],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[561,138550,138551],{},[564,138552,138553,138556],{},[30,138554,138555],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,138558,138559],{},"也就是说它选择的是熊大",[574,138561,138562],{"start":89},[564,138563,138564],{},"权重",[23,138566,138568],{"className":127805,"code":138567,"language":127807,"meta":28,"style":28},"\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",[30,138569,138570,138574,138584,138594,138608,138622,138636],{"__ignoreMap":28},[33,138571,138572],{"class":35,"line":36},[33,138573,138448],{"class":60},[33,138575,138576,138578,138580,138582],{"class":35,"line":51},[33,138577,564],{"class":52553},[33,138579,138455],{"class":43},[33,138581,138458],{"class":47},[33,138583,138461],{"class":60},[33,138585,138586,138588,138590,138592],{"class":35,"line":57},[33,138587,564],{"class":52553},[33,138589,138468],{"class":43},[33,138591,138471],{"class":47},[33,138593,138474],{"class":60},[33,138595,138596,138598,138600,138602,138604,138606],{"class":35,"line":64},[33,138597,564],{"class":52553},[33,138599,130719],{"class":43},[33,138601,345],{"class":47},[33,138603,707],{"class":76},[33,138605,138487],{"class":47},[33,138607,138490],{"class":60},[33,138609,138610,138612,138614,138616,138618,138620],{"class":35,"line":83},[33,138611,564],{"class":52553},[33,138613,130719],{"class":43},[33,138615,345],{"class":47},[33,138617,138501],{"class":76},[33,138619,138504],{"class":47},[33,138621,138507],{"class":60},[33,138623,138624,138626,138628,138630,138632,138634],{"class":35,"line":89},[33,138625,564],{"class":52553},[33,138627,130719],{"class":43},[33,138629,345],{"class":47},[33,138631,138518],{"class":76},[33,138633,138521],{"class":47},[33,138635,138524],{"class":60},[33,138637,138638,138640,138642,138644,138646,138648],{"class":35,"line":98},[33,138639,564],{"class":52553},[33,138641,130719],{"class":43},[33,138643,345],{"class":47},[33,138645,138535],{"class":76},[33,138647,138521],{"class":47},[33,138649,138540],{"class":60},[14,138651,138652],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23249,138654,138656],{"id":138655},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,138658,138659],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2918,138661],{"style":127661,"src":138662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[574,138664,138665],{},[564,138666,1656],{},[561,138668,138669,138672,138675,138678,138681,138684],{},[564,138670,138671],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[564,138673,138674],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[564,138676,138677],{},"语法： element::before {}",[564,138679,138680],{},"before 和 after 必须有 content 属性",[564,138682,138683],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[564,138685,138686],{},"伪元素选择器和标签选择器一样，权重为 1",[574,138688,138689],{"start":51},[564,138690,138691],{},"实例",[23,138693,138694],{"className":127805,"code":138567,"language":127807,"meta":28,"style":28},[30,138695,138696,138700,138710,138720,138734,138748,138762],{"__ignoreMap":28},[33,138697,138698],{"class":35,"line":36},[33,138699,138448],{"class":60},[33,138701,138702,138704,138706,138708],{"class":35,"line":51},[33,138703,564],{"class":52553},[33,138705,138455],{"class":43},[33,138707,138458],{"class":47},[33,138709,138461],{"class":60},[33,138711,138712,138714,138716,138718],{"class":35,"line":57},[33,138713,564],{"class":52553},[33,138715,138468],{"class":43},[33,138717,138471],{"class":47},[33,138719,138474],{"class":60},[33,138721,138722,138724,138726,138728,138730,138732],{"class":35,"line":64},[33,138723,564],{"class":52553},[33,138725,130719],{"class":43},[33,138727,345],{"class":47},[33,138729,707],{"class":76},[33,138731,138487],{"class":47},[33,138733,138490],{"class":60},[33,138735,138736,138738,138740,138742,138744,138746],{"class":35,"line":83},[33,138737,564],{"class":52553},[33,138739,130719],{"class":43},[33,138741,345],{"class":47},[33,138743,138501],{"class":76},[33,138745,138504],{"class":47},[33,138747,138507],{"class":60},[33,138749,138750,138752,138754,138756,138758,138760],{"class":35,"line":89},[33,138751,564],{"class":52553},[33,138753,130719],{"class":43},[33,138755,345],{"class":47},[33,138757,138518],{"class":76},[33,138759,138521],{"class":47},[33,138761,138524],{"class":60},[33,138763,138764,138766,138768,138770,138772,138774],{"class":35,"line":98},[33,138765,564],{"class":52553},[33,138767,130719],{"class":43},[33,138769,345],{"class":47},[33,138771,138535],{"class":76},[33,138773,138521],{"class":47},[33,138775,138540],{"class":60},[2918,138777],{"style":127661,"src":138778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[574,138780,138781],{"start":57},[564,138782,138783],{},"使用场景1",[2918,138785],{"style":127661,"src":138786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,138788,138789],{},"不需要再加盒子来整红色那部分了",[23,138791,138793],{"className":127805,"code":138792,"language":127807,"meta":28,"style":28},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[30,138794,138795,138800,138809,138820,138830,138834,138843,138854,138864],{"__ignoreMap":28},[33,138796,138797],{"class":35,"line":36},[33,138798,138799],{"class":60},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[33,138801,138802,138804,138807],{"class":35,"line":51},[33,138803,52864],{"class":52553},[33,138805,138806],{"class":43},"::before",[33,138808,16823],{"class":47},[33,138810,138811,138814,138816,138818],{"class":35,"line":57},[33,138812,138813],{"class":76},"  content",[33,138815,52690],{"class":47},[33,138817,1520],{"class":119},[33,138819,80],{"class":47},[33,138821,138822,138824,138826,138828],{"class":35,"line":64},[33,138823,129421],{"class":76},[33,138825,52690],{"class":47},[33,138827,62122],{"class":76},[33,138829,80],{"class":47},[33,138831,138832],{"class":35,"line":83},[33,138833,231],{"class":47},[33,138835,138836,138838,138841],{"class":35,"line":89},[33,138837,52864],{"class":52553},[33,138839,138840],{"class":43},"::after",[33,138842,16823],{"class":47},[33,138844,138845,138847,138849,138852],{"class":35,"line":98},[33,138846,138813],{"class":76},[33,138848,52690],{"class":47},[33,138850,138851],{"class":119},"\"→\"",[33,138853,80],{"class":47},[33,138855,138856,138858,138860,138862],{"class":35,"line":110},[33,138857,72158],{"class":76},[33,138859,52690],{"class":47},[33,138861,63323],{"class":76},[33,138863,80],{"class":47},[33,138865,138866],{"class":35,"line":134},[33,138867,231],{"class":47},[2918,138869],{"style":127661,"src":138870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,138872,138873],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2918,138875],{"style":127661,"src":138876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,138878,138879],{},"但是在引用时需要先转义一下",[14,138881,138882],{},"content='\\e930'",[574,138884,138885],{"start":64},[564,138886,138887],{},"使用场景2",[14,138889,138890],{},"仿土豆效果",[14,138892,138893],{},"通过使用伪元素选择器可以减少body中盒子的数量",[23,138895,138896],{"className":127805,"code":138792,"language":127807,"meta":28,"style":28},[30,138897,138898,138902,138910,138920,138930,138934,138942,138952,138962],{"__ignoreMap":28},[33,138899,138900],{"class":35,"line":36},[33,138901,138799],{"class":60},[33,138903,138904,138906,138908],{"class":35,"line":51},[33,138905,52864],{"class":52553},[33,138907,138806],{"class":43},[33,138909,16823],{"class":47},[33,138911,138912,138914,138916,138918],{"class":35,"line":57},[33,138913,138813],{"class":76},[33,138915,52690],{"class":47},[33,138917,1520],{"class":119},[33,138919,80],{"class":47},[33,138921,138922,138924,138926,138928],{"class":35,"line":64},[33,138923,129421],{"class":76},[33,138925,52690],{"class":47},[33,138927,62122],{"class":76},[33,138929,80],{"class":47},[33,138931,138932],{"class":35,"line":83},[33,138933,231],{"class":47},[33,138935,138936,138938,138940],{"class":35,"line":89},[33,138937,52864],{"class":52553},[33,138939,138840],{"class":43},[33,138941,16823],{"class":47},[33,138943,138944,138946,138948,138950],{"class":35,"line":98},[33,138945,138813],{"class":76},[33,138947,52690],{"class":47},[33,138949,138851],{"class":119},[33,138951,80],{"class":47},[33,138953,138954,138956,138958,138960],{"class":35,"line":110},[33,138955,72158],{"class":76},[33,138957,52690],{"class":47},[33,138959,63323],{"class":76},[33,138961,80],{"class":47},[33,138963,138964],{"class":35,"line":134},[33,138965,231],{"class":47},[2918,138967],{"style":127661,"src":138968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[574,138970,138971],{"start":83},[564,138972,138973],{},"使用场景3",[14,138975,138976],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[23,138978,138980],{"className":127805,"code":138979,"language":127807,"meta":28,"style":28},".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",[30,138981,138982,138988,138998,139002,139006,139010,139018,139028,139038,139042,139050,139060,139070],{"__ignoreMap":28},[33,138983,138984,138986],{"class":35,"line":36},[33,138985,131653],{"class":43},[33,138987,16823],{"class":47},[33,138989,138990,138992,138994,138996],{"class":35,"line":51},[33,138991,132285],{"class":76},[33,138993,52690],{"class":47},[33,138995,24988],{"class":76},[33,138997,80],{"class":47},[33,138999,139000],{"class":35,"line":57},[33,139001,231],{"class":47},[33,139003,139004],{"class":35,"line":64},[33,139005,137266],{"class":47},[33,139007,139008],{"class":35,"line":83},[33,139009,138799],{"class":60},[33,139011,139012,139014,139016],{"class":35,"line":89},[33,139013,52864],{"class":52553},[33,139015,138806],{"class":43},[33,139017,16823],{"class":47},[33,139019,139020,139022,139024,139026],{"class":35,"line":98},[33,139021,138813],{"class":76},[33,139023,52690],{"class":47},[33,139025,1520],{"class":119},[33,139027,80],{"class":47},[33,139029,139030,139032,139034,139036],{"class":35,"line":110},[33,139031,129421],{"class":76},[33,139033,52690],{"class":47},[33,139035,62122],{"class":76},[33,139037,80],{"class":47},[33,139039,139040],{"class":35,"line":134},[33,139041,231],{"class":47},[33,139043,139044,139046,139048],{"class":35,"line":156},[33,139045,52864],{"class":52553},[33,139047,138840],{"class":43},[33,139049,16823],{"class":47},[33,139051,139052,139054,139056,139058],{"class":35,"line":163},[33,139053,138813],{"class":76},[33,139055,52690],{"class":47},[33,139057,138851],{"class":119},[33,139059,80],{"class":47},[33,139061,139062,139064,139066,139068],{"class":35,"line":169},[33,139063,72158],{"class":76},[33,139065,52690],{"class":47},[33,139067,63323],{"class":76},[33,139069,80],{"class":47},[33,139071,139072],{"class":35,"line":175},[33,139073,231],{"class":47},[14,139075,139076],{},"div {\nmargin: 0 auto;\n}",[23,139078,139081],{"className":139079,"code":139080,"language":6578},[6576],"\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",[30,139082,139080],{"__ignoreMap":28},[14,139084,139085],{},"如果想让多个元素都发生变化",[14,139087,139088],{},"不能如下操作：",[14,139090,139091],{},"transition: width 2s ease 0.5s;",[14,139093,139094],{},"transition: height 2s ease 0.5s;不对！！！",[14,139096,139097],{},"上方会样式冲突，导致不显示任何过渡效果",[14,139099,139100],{},"使用如下：加逗号隔开",[14,139102,139103],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,139105,139106],{},"transition all 2s ease;",[1599,139108,139110],{"id":139109},"_1426-过渡练习","14.2.6 过渡练习",[574,139112,139113],{},[564,139114,139115],{},"进度条",[2918,139117],{"style":127661,"src":139118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[23,139120,139122],{"className":127805,"code":139121,"language":127807,"meta":28,"style":28},"div {\n  transition: all 0.3s ease;\n}\n",[30,139123,139124,139130,139148],{"__ignoreMap":28},[33,139125,139126,139128],{"class":35,"line":36},[33,139127,52864],{"class":52553},[33,139129,16823],{"class":47},[33,139131,139132,139135,139137,139139,139142,139144,139146],{"class":35,"line":51},[33,139133,139134],{"class":76},"  transition",[33,139136,52690],{"class":47},[33,139138,29374],{"class":76},[33,139140,139141],{"class":76}," 0.3",[33,139143,2295],{"class":39},[33,139145,79933],{"class":76},[33,139147,80],{"class":47},[33,139149,139150],{"class":35,"line":57},[33,139151,231],{"class":47},[574,139153,139154],{"start":51},[564,139155,139156],{},"小米logo",[14,139158,139159],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[23,139161,139163],{"className":127805,"code":139162,"language":127807,"meta":28,"style":28},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[30,139164,139165,139170,139176,139192,139197],{"__ignoreMap":28},[33,139166,139167],{"class":35,"line":36},[33,139168,139169],{"class":60},"\u002F* CSS3 过渡 *\u002F\n",[33,139171,139172,139174],{"class":35,"line":51},[33,139173,52864],{"class":52553},[33,139175,16823],{"class":47},[33,139177,139178,139180,139182,139184,139186,139188,139190],{"class":35,"line":57},[33,139179,139134],{"class":76},[33,139181,52690],{"class":47},[33,139183,29374],{"class":76},[33,139185,139141],{"class":76},[33,139187,2295],{"class":39},[33,139189,79933],{"class":76},[33,139191,80],{"class":47},[33,139193,139194],{"class":35,"line":64},[33,139195,139196],{"class":60},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[33,139198,139199],{"class":35,"line":83},[33,139200,231],{"class":47},[14,139202,139203],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1544,139205,139206],{},"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":28,"searchDepth":51,"depth":51,"links":139208},[139209,139214],{"id":137539,"depth":51,"text":137540,"children":139210},[139211,139212,139213],{"id":137543,"depth":57,"text":137544},{"id":137620,"depth":57,"text":137621},{"id":137951,"depth":57,"text":137952},{"id":138242,"depth":51,"text":138243,"children":139215},[139216,139217],{"id":138246,"depth":57,"text":138247},{"id":139109,"depth":57,"text":139110},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137531,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139224,"title":139225,"body":139226,"description":24628,"extension":1557,"meta":140970,"navigation":159,"path":140971,"seo":140972,"stem":140973,"__hash__":140974},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139227,"toc":140951},[139228,139231,139235,139238,139244,139250,139254,139256,139259,139262,139265,139268,139271,139274,139277,139281,139285,139288,139291,139294,139298,139301,139304,139309,139312,139315,139318,139322,139325,139334,139337,139340,139344,139347,139350,139355,139362,139376,139384,139391,139396,139399,139402,139405,139412,139416,139422,139428,139431,139434,139439,139445,139447,139455,139460,139463,139469,139471,139476,139481,139484,139486,139491,139494,139499,139504,139538,139542,139546,139549,139553,139556,139642,139645,139682,139685,139721,139725,139730,139743,139797,139799,139827,139829,139857,139863,139877,139879,139923,139925,139969,139972,139979,139990,139992,140019,140021,140047,140054,140070,140072,140166,140168,140262,140269,140272,140277,140283,140357,140360,140362,140398,140400,140436,140439,140446,140465,140468,140471,140473,140498,140500,140524,140527,140530,140560,140564,140567,140630,140632,140698,140700,140764,140767,140799,140801,140827,140829,140855,140858,140889,140891,140917,140919,140945,140948],[10,139229,139225],{"id":139230},"_15-品优购项目上篇-搭建与公共模块",[18,139232,139234],{"id":139233},"_151-项目规划","15.1 项目规划",[2918,139236],{"style":127661,"src":139237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,139239,139240,139243],{},[480,139241,139242],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,139245,139246,139249],{},[480,139247,139248],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[18,139251,139253],{"id":139252},"_152-项目介绍","15.2 项目介绍",[14,139255,139242],{},[2918,139257],{"style":127661,"src":139258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,139260,139261],{},"主页：",[2918,139263],{"style":127661,"src":139264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,139266,139267],{},"列表页：",[2918,139269],{"style":127661,"src":139270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,139272,139273],{},"注册页：",[2918,139275],{"style":127661,"src":139276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[18,139278,139280],{"id":139279},"_153-项目搭建工作","15.3 项目搭建工作",[1599,139282,139284],{"id":139283},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2918,139286],{"style":127661,"src":139287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,139289,139290],{},"经常更换的图片要放到upload文件夹中",[14,139292,139293],{},"不经常换的放到images文件夹中",[1599,139295,139297],{"id":139296},"_1532-创建文件如下","15.3.2 创建文件如下",[2918,139299],{"style":127661,"src":139300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2918,139302],{"style":127661,"src":139303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,139305,139306],{},[480,139307,139308],{},"初始化样式：",[14,139310,139311],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,139313,139314],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,139316,139317],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[1599,139319,139321],{"id":139320},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,139323,139324],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,139326,139327,139328,139333],{},"这里最典型的应用就是 ",[480,139329,139330],{},[30,139331,139332],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2918,139335],{"style":127661,"src":139336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,139338,139339],{},"通过link方法来引入",[1599,139341,139343],{"id":139342},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2918,139345],{"style":127661,"src":139346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,139348,139349],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[574,139351,139352],{},[564,139353,139354],{},"制作favicon图标",[14,139356,139357,139358,139361],{},"①把品优购图标切成 ",[30,139359,139360],{},"png"," 图片",[14,139363,139364,139365,139367,139368,139371,139372],{},"②把 ",[30,139366,139360],{}," 图片转换为 ",[30,139369,139370],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[126,139373,139374],{"href":139374,"rel":139375},"http:\u002F\u002Fwww.bitbug.net\u002F",[25117],[574,139377,139378,139381],{"start":51},[564,139379,139380],{},"favicon图标放到网站根目录下",[564,139382,139383],{},"HTML页面引入favicon",[14,139385,139386,139387,139390],{},"在html 页面里面的 ",[30,139388,139389],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,139392,139393],{},[30,139394,139395],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,139397,139398],{},"复制这行代码或者在生成这个的网站进行复制",[2918,139400],{"style":127661,"src":139401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,139403,139404],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,139406,139407,139408],{},"例如:",[126,139409,139410],{"href":139410,"rel":139411},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25117],[1599,139413,139415],{"id":139414},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,139417,139418,139421],{},[480,139419,139420],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,139423,139424,139427],{},[480,139425,139426],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,139429,139430],{},"页面必须有三个标签用来符合 SEO 优化",[2918,139432],{"style":127661,"src":139433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[574,139435,139436],{},[564,139437,139438],{},"title网站标题",[14,139440,139441,139444],{},[480,139442,139443],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,139446,70043],{},[561,139448,139449,139452],{},[564,139450,139451],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[564,139453,139454],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[574,139456,139457],{"start":51},[564,139458,139459],{},"description网站描述",[14,139461,139462],{},"简要说明我们网站主要是做什么的",[14,139464,139465,139468],{},[480,139466,139467],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,139470,70043],{},[14,139472,139473],{},[30,139474,139475],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[574,139477,139478],{"start":57},[564,139479,139480],{},"keywords关键词",[14,139482,139483],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,139485,70043],{},[14,139487,139488],{},[30,139489,139490],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,139492,139493],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,139495,139496],{},[480,139497,139498],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[574,139500,139501],{"start":64},[564,139502,139503],{},"代码总结",[23,139505,139506],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,139507,139508,139512,139526,139530],{"__ignoreMap":28},[33,139509,139510],{"class":35,"line":36},[33,139511,131916],{"class":60},[33,139513,139514,139516,139518,139520,139522,139524],{"class":35,"line":51},[33,139515,875],{"class":47},[33,139517,52864],{"class":52553},[33,139519,54739],{"class":43},[33,139521,73],{"class":47},[33,139523,131929],{"class":119},[33,139525,52560],{"class":47},[33,139527,139528],{"class":35,"line":57},[33,139529,131936],{"class":47},[33,139531,139532,139534,139536],{"class":35,"line":64},[33,139533,53038],{"class":47},[33,139535,52864],{"class":52553},[33,139537,52560],{"class":47},[18,139539,139541],{"id":139540},"_154-项目公共部分制作","15.4 项目公共部分制作",[1599,139543,139545],{"id":139544},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2918,139547],{"style":127661,"src":139548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[1599,139550,139552],{"id":139551},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,139554,139555],{},"布局思路：",[561,139557,139558,139561,139564,139586,139619],{},[564,139559,139560],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[564,139562,139563],{},"里面包含版心的盒子",[564,139565,139566,139567],{},"版心盒子里面包含 1 号左侧盒子左浮动",[561,139568,139569,139577,139583],{},[564,139570,139571,139572,22751,139574,139576],{},"1 号盒子 里面包含一个",[30,139573,561],{},[30,139575,561],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[564,139578,139579,139580,139582],{},"里面的内容是水平排列，所以需要给",[30,139581,564],{},"设置浮动",[564,139584,139585],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[564,139587,139588,139589],{},"版心盒子里面包含 2 号右侧盒子右浮动",[561,139590,139591,139605,139610],{},[564,139592,139593,139594,22751,139596,139598,139599,139601,139602,139604],{},"2 号盒子 里面包含一个",[30,139595,561],{},[30,139597,561],{},"包裹",[30,139600,564],{},"，中间的",[30,139603,2518],{},"可以用样式去设置，也可以用字符 |",[564,139606,139607,139608,139582],{},"里面内容水平排列，给",[30,139609,564],{},[564,139611,139612,139613,139615,139616,139618],{},"找到里面所有偶数的 ",[30,139614,564],{}," 设置样式（偶数的 ",[30,139617,564],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[564,139620,139621,139622],{},"需要用到字体图标",[561,139623,139624,139630,139633,139636,139639],{},[564,139625,139626,139627],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[30,139628,139629],{},"arrow-icon",[564,139631,139632],{},"先要引入字体图片的资源",[564,139634,139635],{},"在样式里面利用 font-face 来进行声明",[564,139637,139638],{},"在伪元素的 content属性设置 图标的编码",[564,139640,139641],{},"给伪元素设置font-family属性",[14,139643,139644],{},"结构实例代码：",[23,139646,139648],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},"div::before {\n  content: \"\";\n  display: block;\n}\n",[30,139649,139650,139658,139668,139678],{"__ignoreMap":28},[33,139651,139652,139654,139656],{"class":35,"line":36},[33,139653,52864],{"class":52553},[33,139655,138806],{"class":43},[33,139657,16823],{"class":47},[33,139659,139660,139662,139664,139666],{"class":35,"line":51},[33,139661,138813],{"class":76},[33,139663,52690],{"class":47},[33,139665,1520],{"class":119},[33,139667,80],{"class":47},[33,139669,139670,139672,139674,139676],{"class":35,"line":57},[33,139671,129421],{"class":76},[33,139673,52690],{"class":47},[33,139675,62122],{"class":76},[33,139677,80],{"class":47},[33,139679,139680],{"class":35,"line":64},[33,139681,231],{"class":47},[14,139683,139684],{},"样式实例代码：",[23,139686,139687],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},[30,139688,139689,139697,139707,139717],{"__ignoreMap":28},[33,139690,139691,139693,139695],{"class":35,"line":36},[33,139692,52864],{"class":52553},[33,139694,138806],{"class":43},[33,139696,16823],{"class":47},[33,139698,139699,139701,139703,139705],{"class":35,"line":51},[33,139700,138813],{"class":76},[33,139702,52690],{"class":47},[33,139704,1520],{"class":119},[33,139706,80],{"class":47},[33,139708,139709,139711,139713,139715],{"class":35,"line":57},[33,139710,129421],{"class":76},[33,139712,52690],{"class":47},[33,139714,62122],{"class":76},[33,139716,80],{"class":47},[33,139718,139719],{"class":35,"line":64},[33,139720,231],{"class":47},[1599,139722,139724],{"id":139723},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[561,139726,139727],{},[564,139728,139729],{},"header 盒子必须要有高度",[14,139731,139732,139733,139735,139736],{},"1 号盒子是 ",[30,139734,132817],{}," 标志定位，在正常开发过程中， ",[480,139737,139738,139739,139742],{},"logo的布局其实是有讲究的，需要进行 ",[30,139740,139741],{},"logoSEO","的优化 （★★★）",[561,139744,139745,139753,139761,139788],{},[564,139746,139747,139749,139750,139752],{},[30,139748,132817],{}," 里面首先放一个 ",[30,139751,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[564,139754,139755,139757,139758,139760],{},[30,139756,10],{}," 里面再放一个链接，可以返回首页的，把 ",[30,139759,132817],{}," 的背景图片给链接即可",[564,139762,139763,139764],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[561,139765,139766,139781],{},[564,139767,139768,139769,139772,139773,139776,139777,139780],{},"方法1：",[30,139770,139771],{},"text-indent"," 移到盒子外面（",[30,139774,139775],{},"text-indent: -9999px",") ，然后 ",[30,139778,139779],{},"overflow:hidden"," ，淘宝的做法",[564,139782,139783,139784,139787],{},"方法2：直接给 ",[30,139785,139786],{},"font-size: 0;"," 就看不到文字了，京东的做法",[564,139789,139790,139791,139793,139794,139796],{},"最后给链接一个 ",[30,139792,52660],{}," 属性，这样鼠标放到 ",[30,139795,132817],{}," 上就可以看到提示文字了",[14,139798,139644],{},[23,139800,139801],{"className":128552,"code":133038,"language":128554,"meta":28,"style":28},[30,139802,139803],{"__ignoreMap":28},[33,139804,139805,139807,139809,139811,139813,139815,139817,139819,139821,139823,139825],{"class":35,"line":36},[33,139806,875],{"class":47},[33,139808,126],{"class":52553},[33,139810,62310],{"class":43},[33,139812,73],{"class":47},[33,139814,133053],{"class":119},[33,139816,133056],{"class":43},[33,139818,73],{"class":47},[33,139820,133061],{"class":119},[33,139822,133064],{"class":47},[33,139824,126],{"class":52553},[33,139826,52560],{"class":47},[14,139828,139684],{},[23,139830,139831],{"className":128552,"code":133038,"language":128554,"meta":28,"style":28},[30,139832,139833],{"__ignoreMap":28},[33,139834,139835,139837,139839,139841,139843,139845,139847,139849,139851,139853,139855],{"class":35,"line":36},[33,139836,875],{"class":47},[33,139838,126],{"class":52553},[33,139840,62310],{"class":43},[33,139842,73],{"class":47},[33,139844,133053],{"class":119},[33,139846,133056],{"class":43},[33,139848,73],{"class":47},[33,139850,133061],{"class":119},[33,139852,133064],{"class":47},[33,139854,126],{"class":52553},[33,139856,52560],{"class":47},[14,139858,139859,139860,139862],{},"2 号盒子是 ",[30,139861,132830],{}," 搜索模块定位",[561,139864,139865,139868,139871,139874],{},[564,139866,139867],{},"search盒子利用定位的方式放在对应的位置",[564,139869,139870],{},"search盒子设置绝对定位，header盒子设置相对定位",[564,139872,139873],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[564,139875,139876],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,139878,139644],{},[23,139880,139881],{"className":127805,"code":133125,"language":127807,"meta":28,"style":28},[30,139882,139883,139905,139909,139919],{"__ignoreMap":28},[33,139884,139885,139887,139889,139891,139893,139895,139897,139899,139901,139903],{"class":35,"line":36},[33,139886,52864],{"class":52553},[33,139888,13686],{"class":47},[33,139890,14],{"class":52553},[33,139892,13686],{"class":47},[33,139894,10],{"class":52553},[33,139896,13686],{"class":47},[33,139898,561],{"class":52553},[33,139900,13686],{"class":47},[33,139902,564],{"class":52553},[33,139904,16823],{"class":47},[33,139906,139907],{"class":35,"line":51},[33,139908,133154],{"class":60},[33,139910,139911,139913,139915,139917],{"class":35,"line":57},[33,139912,129421],{"class":76},[33,139914,52690],{"class":47},[33,139916,62122],{"class":76},[33,139918,80],{"class":47},[33,139920,139921],{"class":35,"line":64},[33,139922,231],{"class":47},[14,139924,139684],{},[23,139926,139927],{"className":127805,"code":133125,"language":127807,"meta":28,"style":28},[30,139928,139929,139951,139955,139965],{"__ignoreMap":28},[33,139930,139931,139933,139935,139937,139939,139941,139943,139945,139947,139949],{"class":35,"line":36},[33,139932,52864],{"class":52553},[33,139934,13686],{"class":47},[33,139936,14],{"class":52553},[33,139938,13686],{"class":47},[33,139940,10],{"class":52553},[33,139942,13686],{"class":47},[33,139944,561],{"class":52553},[33,139946,13686],{"class":47},[33,139948,564],{"class":52553},[33,139950,16823],{"class":47},[33,139952,139953],{"class":35,"line":51},[33,139954,133154],{"class":60},[33,139956,139957,139959,139961,139963],{"class":35,"line":57},[33,139958,129421],{"class":76},[33,139960,52690],{"class":47},[33,139962,62122],{"class":76},[33,139964,80],{"class":47},[33,139966,139967],{"class":35,"line":64},[33,139968,231],{"class":47},[14,139970,139971],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139973,139974,139975,139978],{},"3 号盒子是 ",[30,139976,139977],{},"hotwords"," 热词模块定位",[561,139980,139981,139984,139987],{},[564,139982,139983],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[564,139985,139986],{},"给里面所有的a标签设置 左右10px的外边距",[564,139988,139989],{},"给第一个a标签设置文字变红色（#c81623）",[14,139991,139644],{},[23,139993,139995],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},"div {\n  margin: 0 auto;\n}\n",[30,139996,139997,140003,140015],{"__ignoreMap":28},[33,139998,139999,140001],{"class":35,"line":36},[33,140000,52864],{"class":52553},[33,140002,16823],{"class":47},[33,140004,140005,140007,140009,140011,140013],{"class":35,"line":51},[33,140006,71723],{"class":76},[33,140008,52690],{"class":47},[33,140010,766],{"class":76},[33,140012,52809],{"class":76},[33,140014,80],{"class":47},[33,140016,140017],{"class":35,"line":57},[33,140018,231],{"class":47},[14,140020,139684],{},[23,140022,140023],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,140024,140025,140031,140043],{"__ignoreMap":28},[33,140026,140027,140029],{"class":35,"line":36},[33,140028,52864],{"class":52553},[33,140030,16823],{"class":47},[33,140032,140033,140035,140037,140039,140041],{"class":35,"line":51},[33,140034,71723],{"class":76},[33,140036,52690],{"class":47},[33,140038,766],{"class":76},[33,140040,52809],{"class":76},[33,140042,80],{"class":47},[33,140044,140045],{"class":35,"line":57},[33,140046,231],{"class":47},[14,140048,140049,140050,140053],{},"4 号盒子是 ",[30,140051,140052],{},"shopcar"," 购物车模块",[561,140055,140056,140061,140064,140067],{},[564,140057,124588,140058,140060],{},[30,140059,140052],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[564,140062,140063],{},"count 统计部分用绝对定位做",[564,140065,140066],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[564,140068,140069],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,140071,139644],{},[23,140073,140074],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},[30,140075,140076,140080,140094,140098,140112,140116,140130,140134,140148,140152],{"__ignoreMap":28},[33,140077,140078],{"class":35,"line":36},[33,140079,133244],{"class":60},[33,140081,140082,140084,140086,140088,140090,140092],{"class":35,"line":51},[33,140083,133249],{"class":43},[33,140085,81060],{"class":47},[33,140087,130165],{"class":76},[33,140089,52690],{"class":47},[33,140091,133258],{"class":76},[33,140093,130735],{"class":47},[33,140095,140096],{"class":35,"line":57},[33,140097,133265],{"class":60},[33,140099,140100,140102,140104,140106,140108,140110],{"class":35,"line":64},[33,140101,133270],{"class":43},[33,140103,81060],{"class":47},[33,140105,130165],{"class":76},[33,140107,52690],{"class":47},[33,140109,56017],{"class":76},[33,140111,130735],{"class":47},[33,140113,140114],{"class":35,"line":83},[33,140115,133285],{"class":60},[33,140117,140118,140120,140122,140124,140126,140128],{"class":35,"line":89},[33,140119,133290],{"class":43},[33,140121,81060],{"class":47},[33,140123,130165],{"class":76},[33,140125,52690],{"class":47},[33,140127,56084],{"class":76},[33,140129,130735],{"class":47},[33,140131,140132],{"class":35,"line":98},[33,140133,133305],{"class":60},[33,140135,140136,140138,140140,140142,140144,140146],{"class":35,"line":110},[33,140137,133310],{"class":43},[33,140139,81060],{"class":47},[33,140141,130165],{"class":76},[33,140143,52690],{"class":47},[33,140145,87486],{"class":76},[33,140147,130735],{"class":47},[33,140149,140150],{"class":35,"line":134},[33,140151,133325],{"class":60},[33,140153,140154,140156,140158,140160,140162,140164],{"class":35,"line":156},[33,140155,133330],{"class":43},[33,140157,81060],{"class":47},[33,140159,130165],{"class":76},[33,140161,52690],{"class":47},[33,140163,133339],{"class":76},[33,140165,130735],{"class":47},[14,140167,139684],{},[23,140169,140170],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},[30,140171,140172,140176,140190,140194,140208,140212,140226,140230,140244,140248],{"__ignoreMap":28},[33,140173,140174],{"class":35,"line":36},[33,140175,133244],{"class":60},[33,140177,140178,140180,140182,140184,140186,140188],{"class":35,"line":51},[33,140179,133249],{"class":43},[33,140181,81060],{"class":47},[33,140183,130165],{"class":76},[33,140185,52690],{"class":47},[33,140187,133258],{"class":76},[33,140189,130735],{"class":47},[33,140191,140192],{"class":35,"line":57},[33,140193,133265],{"class":60},[33,140195,140196,140198,140200,140202,140204,140206],{"class":35,"line":64},[33,140197,133270],{"class":43},[33,140199,81060],{"class":47},[33,140201,130165],{"class":76},[33,140203,52690],{"class":47},[33,140205,56017],{"class":76},[33,140207,130735],{"class":47},[33,140209,140210],{"class":35,"line":83},[33,140211,133285],{"class":60},[33,140213,140214,140216,140218,140220,140222,140224],{"class":35,"line":89},[33,140215,133290],{"class":43},[33,140217,81060],{"class":47},[33,140219,130165],{"class":76},[33,140221,52690],{"class":47},[33,140223,56084],{"class":76},[33,140225,130735],{"class":47},[33,140227,140228],{"class":35,"line":98},[33,140229,133305],{"class":60},[33,140231,140232,140234,140236,140238,140240,140242],{"class":35,"line":110},[33,140233,133310],{"class":43},[33,140235,81060],{"class":47},[33,140237,130165],{"class":76},[33,140239,52690],{"class":47},[33,140241,87486],{"class":76},[33,140243,130735],{"class":47},[33,140245,140246],{"class":35,"line":134},[33,140247,133325],{"class":60},[33,140249,140250,140252,140254,140256,140258,140260],{"class":35,"line":156},[33,140251,133330],{"class":43},[33,140253,81060],{"class":47},[33,140255,130165],{"class":76},[33,140257,52690],{"class":47},[33,140259,133339],{"class":76},[33,140261,130735],{"class":47},[1599,140263,140265,140266,140268],{"id":140264},"_1544-nav导航模块制作","15.4.4 ",[30,140267,54966],{},"导航模块制作",[2918,140270],{"style":127661,"src":140271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,140273,140274,140276],{},[30,140275,54966],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,140278,140279,140280],{},"1 号盒子左侧浮动，",[30,140281,140282],{},"dropdown",[561,140284,140285,140295,140303,140309,140317,140327,140335,140346],{},[564,140286,140287,140288,102271,140291,140294],{},"1号盒子有讲究，根据相关性 里面包含 ",[30,140289,140290],{},".dt",[30,140292,140293],{},".dd"," 两个盒子",[564,140296,140297,140299,140300,140302],{},[30,140298,140290],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[30,140301,140293],{}," 挤到下面去了",[564,140304,140305,140306,140308],{},"给 ",[30,140307,140293],{}," 盒子设置宽度 和 高度，以及背景颜色",[564,140310,140305,140311,140313,140314,121490],{},[30,140312,140293],{}," 盒子里面定义 无序列表 （",[30,140315,140316],{},"ul > li > a",[564,140318,140319,140320,140322,140323,140326],{},"每个 ",[30,140321,564],{}," 都有一个高度（",[30,140324,140325],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[564,140328,140305,140329,140331,140332,121490],{},[30,140330,564],{}," 里面的a设置文字大小（",[30,140333,140334],{},"14px",[564,140336,140305,140337,140339,140340,140342,140343,140345],{},[30,140338,564],{}," 设置 ",[30,140341,128966],{},"，当鼠标移入的时候，让",[30,140344,564],{},"的背景变成白色，让里面的文字变成红色",[564,140347,140348,140350,140351,140353,140354,140356],{},[30,140349,564],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[30,140352,564],{},"的右侧，那么给",[30,140355,564],{},"设置相对定位",[14,140358,140359],{},"一定要注意相关性",[14,140361,139644],{},[23,140363,140364],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},[30,140365,140366,140374,140384,140394],{"__ignoreMap":28},[33,140367,140368,140370,140372],{"class":35,"line":36},[33,140369,52864],{"class":52553},[33,140371,138806],{"class":43},[33,140373,16823],{"class":47},[33,140375,140376,140378,140380,140382],{"class":35,"line":51},[33,140377,138813],{"class":76},[33,140379,52690],{"class":47},[33,140381,1520],{"class":119},[33,140383,80],{"class":47},[33,140385,140386,140388,140390,140392],{"class":35,"line":57},[33,140387,129421],{"class":76},[33,140389,52690],{"class":47},[33,140391,62122],{"class":76},[33,140393,80],{"class":47},[33,140395,140396],{"class":35,"line":64},[33,140397,231],{"class":47},[14,140399,139684],{},[23,140401,140402],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},[30,140403,140404,140412,140422,140432],{"__ignoreMap":28},[33,140405,140406,140408,140410],{"class":35,"line":36},[33,140407,52864],{"class":52553},[33,140409,138806],{"class":43},[33,140411,16823],{"class":47},[33,140413,140414,140416,140418,140420],{"class":35,"line":51},[33,140415,138813],{"class":76},[33,140417,52690],{"class":47},[33,140419,1520],{"class":119},[33,140421,80],{"class":47},[33,140423,140424,140426,140428,140430],{"class":35,"line":57},[33,140425,129421],{"class":76},[33,140427,52690],{"class":47},[33,140429,62122],{"class":76},[33,140431,80],{"class":47},[33,140433,140434],{"class":35,"line":64},[33,140435,231],{"class":47},[14,140437,140438],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,140440,140441,140442,140445],{},"2 号盒子左侧浮动，",[30,140443,140444],{},"navitems"," 导航栏组",[561,140447,140448,140453,140462],{},[564,140449,140450,140451],{},"里面结构是 ",[30,140452,140316],{},[564,140454,140455,140456,140458,140459,140461],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[30,140457,126],{},"左右的",[30,140460,32136],{},"把两侧撑开",[564,140463,140464],{},"让文字垂直居中（行高等于高度）",[2918,140466],{"style":127661,"src":140467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,140469,140470],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,140472,139644],{},[23,140474,140476],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},".box {\n  float: left;\n}\n",[30,140477,140478,140484,140494],{"__ignoreMap":28},[33,140479,140480,140482],{"class":35,"line":36},[33,140481,131653],{"class":43},[33,140483,16823],{"class":47},[33,140485,140486,140488,140490,140492],{"class":35,"line":51},[33,140487,132285],{"class":76},[33,140489,52690],{"class":47},[33,140491,24988],{"class":76},[33,140493,80],{"class":47},[33,140495,140496],{"class":35,"line":57},[33,140497,231],{"class":47},[14,140499,139684],{},[23,140501,140502],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,140503,140504,140510,140520],{"__ignoreMap":28},[33,140505,140506,140508],{"class":35,"line":36},[33,140507,131653],{"class":43},[33,140509,16823],{"class":47},[33,140511,140512,140514,140516,140518],{"class":35,"line":51},[33,140513,132285],{"class":76},[33,140515,52690],{"class":47},[33,140517,24988],{"class":76},[33,140519,80],{"class":47},[33,140521,140522],{"class":35,"line":57},[33,140523,231],{"class":47},[14,140525,140526],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2918,140528],{"style":127661,"src":140529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[23,140531,140532],{"className":127805,"code":131962,"language":127807,"meta":28,"style":28},[30,140533,140534,140540,140556],{"__ignoreMap":28},[33,140535,140536,140538],{"class":35,"line":36},[33,140537,52864],{"class":52553},[33,140539,16823],{"class":47},[33,140541,140542,140544,140546,140548,140550,140552,140554],{"class":35,"line":51},[33,140543,72149],{"class":76},[33,140545,52690],{"class":47},[33,140547,701],{"class":76},[33,140549,52745],{"class":39},[33,140551,52774],{"class":76},[33,140553,131197],{"class":76},[33,140555,80],{"class":47},[33,140557,140558],{"class":35,"line":57},[33,140559,231],{"class":47},[1599,140561,140563],{"id":140562},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2918,140565],{"style":127661,"src":140566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[561,140568,140569,140574,140579],{},[564,140570,140571,140573],{},[30,140572,133008],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[564,140575,140576,140578],{},[30,140577,133008],{}," 里面有一个大的版心",[564,140580,140581,140582,140585,140586],{},"版心里面包含 1 号盒子，",[30,140583,140584],{},"mod_service"," 是服务模块，mod 是模块的意思",[561,140587,140588,140593,140606,140622,140627],{},[564,140589,140305,140590,140592],{},[30,140591,140584],{}," 设置高度（80px）和下边框",[564,140594,140595,140596,140599,140600,140602,140603,140605],{},"在里面定义 ",[30,140597,140598],{},"ul > li"," ,每个",[30,140601,564],{}," 宽度是300px 高度是 50px，给每个",[30,140604,564],{},"设置35px的左内边距",[564,140607,140608,140609,140611,140612,140614,140615,140617,140618,19661,140620,121490],{},"在每个",[30,140610,564],{},"里面，放一个 ",[30,140613,24161],{},"（里面放图标），一个",[30,140616,52864],{},"（里面放",[30,140619,52864],{},[30,140621,14],{},[564,140623,140305,140624,140626],{},[30,140625,24161],{},"设置浮动，让h5与这个div左右排列",[564,140628,140629],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,140631,139644],{},[23,140633,140635],{"className":127805,"code":140634,"language":127807,"meta":28,"style":28},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[30,140636,140637,140643,140655,140667,140694],{"__ignoreMap":28},[33,140638,140639,140641],{"class":35,"line":36},[33,140640,135562],{"class":43},[33,140642,16823],{"class":47},[33,140644,140645,140647,140649,140651,140653],{"class":35,"line":51},[33,140646,71821],{"class":76},[33,140648,52690],{"class":47},[33,140650,1045],{"class":76},[33,140652,52745],{"class":39},[33,140654,80],{"class":47},[33,140656,140657,140659,140661,140663,140665],{"class":35,"line":57},[33,140658,72041],{"class":76},[33,140660,52690],{"class":47},[33,140662,1045],{"class":76},[33,140664,52745],{"class":39},[33,140666,80],{"class":47},[33,140668,140669,140671,140673,140675,140677,140679,140681,140683,140686,140688,140690,140692],{"class":35,"line":64},[33,140670,71864],{"class":76},[33,140672,52690],{"class":47},[33,140674,62979],{"class":76},[33,140676,345],{"class":47},[33,140678,135601],{"class":955},[33,140680,14965],{"class":47},[33,140682,62989],{"class":76},[33,140684,140685],{"class":76}," -10",[33,140687,52745],{"class":39},[33,140689,135620],{"class":76},[33,140691,52745],{"class":39},[33,140693,80],{"class":47},[33,140695,140696],{"class":35,"line":83},[33,140697,231],{"class":47},[14,140699,139684],{},[23,140701,140702],{"className":127805,"code":140634,"language":127807,"meta":28,"style":28},[30,140703,140704,140710,140722,140734,140760],{"__ignoreMap":28},[33,140705,140706,140708],{"class":35,"line":36},[33,140707,135562],{"class":43},[33,140709,16823],{"class":47},[33,140711,140712,140714,140716,140718,140720],{"class":35,"line":51},[33,140713,71821],{"class":76},[33,140715,52690],{"class":47},[33,140717,1045],{"class":76},[33,140719,52745],{"class":39},[33,140721,80],{"class":47},[33,140723,140724,140726,140728,140730,140732],{"class":35,"line":57},[33,140725,72041],{"class":76},[33,140727,52690],{"class":47},[33,140729,1045],{"class":76},[33,140731,52745],{"class":39},[33,140733,80],{"class":47},[33,140735,140736,140738,140740,140742,140744,140746,140748,140750,140752,140754,140756,140758],{"class":35,"line":64},[33,140737,71864],{"class":76},[33,140739,52690],{"class":47},[33,140741,62979],{"class":76},[33,140743,345],{"class":47},[33,140745,135601],{"class":955},[33,140747,14965],{"class":47},[33,140749,62989],{"class":76},[33,140751,140685],{"class":76},[33,140753,52745],{"class":39},[33,140755,135620],{"class":76},[33,140757,52745],{"class":39},[33,140759,80],{"class":47},[33,140761,140762],{"class":35,"line":83},[33,140763,231],{"class":47},[14,140765,140766],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[561,140768,140769,140772,140778,140784,140796],{},[564,140770,140771],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[564,140773,140774,140775,121490],{},"里面的布局利用 自定义列表来实现（",[30,140776,140777],{},"dl > dt + dd",[564,140779,140305,140780,140783],{},[30,140781,140782],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[564,140785,140305,140786,140789,140790,19661,140792,140795],{},[30,140787,140788],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[30,140791,140788],{},[30,140793,140794],{},"dd","之间有些距离",[564,140797,140798],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,140800,139644],{},[23,140802,140803],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,140804,140805,140811,140823],{"__ignoreMap":28},[33,140806,140807,140809],{"class":35,"line":36},[33,140808,52864],{"class":52553},[33,140810,16823],{"class":47},[33,140812,140813,140815,140817,140819,140821],{"class":35,"line":51},[33,140814,71723],{"class":76},[33,140816,52690],{"class":47},[33,140818,766],{"class":76},[33,140820,52809],{"class":76},[33,140822,80],{"class":47},[33,140824,140825],{"class":35,"line":57},[33,140826,231],{"class":47},[14,140828,139684],{},[23,140830,140831],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,140832,140833,140839,140851],{"__ignoreMap":28},[33,140834,140835,140837],{"class":35,"line":36},[33,140836,52864],{"class":52553},[33,140838,16823],{"class":47},[33,140840,140841,140843,140845,140847,140849],{"class":35,"line":51},[33,140842,71723],{"class":76},[33,140844,52690],{"class":47},[33,140846,766],{"class":76},[33,140848,52809],{"class":76},[33,140850,80],{"class":47},[33,140852,140853],{"class":35,"line":57},[33,140854,231],{"class":47},[14,140856,140857],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[561,140859,140860,140869,140872,140883],{},[564,140861,140862,140863,140865,140866,140868],{},"分为上下两块，上面是 ",[30,140864,133025],{}," 友情链接，下面是 ",[30,140867,133018],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[564,140870,140871],{},"把内容分别复制到相应模块中",[564,140873,140305,140874,140876,140877,140879,140880,140882],{},[30,140875,133025],{}," 设置 15px 的下外边距，给",[30,140878,133025],{}," 里面 的 ",[30,140881,126],{}," 标签设置 左右 3px 的外边距",[564,140884,140885,140886,140888],{},"给",[30,140887,133018],{}," 设置 20px 的行高",[14,140890,139644],{},[23,140892,140893],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,140894,140895,140901,140913],{"__ignoreMap":28},[33,140896,140897,140899],{"class":35,"line":36},[33,140898,52864],{"class":52553},[33,140900,16823],{"class":47},[33,140902,140903,140905,140907,140909,140911],{"class":35,"line":51},[33,140904,71723],{"class":76},[33,140906,52690],{"class":47},[33,140908,766],{"class":76},[33,140910,52809],{"class":76},[33,140912,80],{"class":47},[33,140914,140915],{"class":35,"line":57},[33,140916,231],{"class":47},[14,140918,139684],{},[23,140920,140921],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,140922,140923,140929,140941],{"__ignoreMap":28},[33,140924,140925,140927],{"class":35,"line":36},[33,140926,52864],{"class":52553},[33,140928,16823],{"class":47},[33,140930,140931,140933,140935,140937,140939],{"class":35,"line":51},[33,140932,71723],{"class":76},[33,140934,52690],{"class":47},[33,140936,766],{"class":76},[33,140938,52809],{"class":76},[33,140940,80],{"class":47},[33,140942,140943],{"class":35,"line":57},[33,140944,231],{"class":47},[14,140946,140947],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1544,140949,140950],{},"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":28,"searchDepth":51,"depth":51,"links":140952},[140953,140954,140955,140962],{"id":139233,"depth":51,"text":139234},{"id":139252,"depth":51,"text":139253},{"id":139279,"depth":51,"text":139280,"children":140956},[140957,140958,140959,140960,140961],{"id":139283,"depth":57,"text":139284},{"id":139296,"depth":57,"text":139297},{"id":139320,"depth":57,"text":139321},{"id":139342,"depth":57,"text":139343},{"id":139414,"depth":57,"text":139415},{"id":139540,"depth":51,"text":139541,"children":140963},[140964,140965,140966,140967,140969],{"id":139544,"depth":57,"text":139545},{"id":139551,"depth":57,"text":139552},{"id":139723,"depth":57,"text":139724},{"id":140264,"depth":57,"text":140968},"15.4.4 nav导航模块制作",{"id":140562,"depth":57,"text":140563},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139225,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140976,"title":140977,"body":140978,"description":24628,"extension":1557,"meta":143380,"navigation":159,"path":143381,"seo":143382,"stem":143383,"__hash__":143384},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140979,"toc":143357},[140980,140983,140987,140991,141003,141006,141009,141012,141023,141025,141049,141051,141075,141080,141083,141085,141121,141123,141159,141162,141167,141170,141173,141176,141206,141213,141216,141226,141228,141262,141265,141299,141305,141322,141324,141360,141362,141398,141403,141428,141430,141456,141458,141482,141489,141492,141556,141558,141600,141602,141642,141649,141654,141656,141686,141688,141718,141722,141725,141732,141744,141746,141772,141774,141798,141801,141803,141827,141833,141843,141845,141875,141877,141907,141914,141955,141957,141993,141995,142031,142035,142038,142041,142044,142050,142055,142058,142081,142084,142108,142111,142135,142140,142143,142146,142149,142152,142155,142229,142231,142261,142263,142293,142296,142299,142331,142335,142339,142353,142362,142365,142370,142372,142466,142468,142562,142585,142587,142611,142613,142637,142644,142647,142657,142659,142683,142688,142696,142698,142728,142733,142773,142775,142801,142803,142829,142833,142836,142841,142844,142848,142856,142863,142871,142873,142903,142905,142935,142943,142946,142949,142951,142981,142983,143013,143016,143021,143023,143047,143049,143073,143076,143161,143163,143187,143189,143213,143217,143219,143243,143245,143279,143283,143297,143300,143305,143308,143313,143316,143346,143354],[10,140981,140977],{"id":140982},"_16-品优购项目下篇-主体与页面开发",[18,140984,140986],{"id":140985},"_161-项目主体模块制作","16.1 项目主体模块制作",[1599,140988,140990],{"id":140989},"_1611-首页制作","16.1.1 首页制作",[14,140992,140993,140995,140996,140998,140999,141002],{},[480,140994,103311],{}," 主体模块是 ",[480,140997,75311],{}," 里面专有的，注意需要新的样式文件 ",[480,141000,141001],{},"index.css，"," 就不要写在common.css中了",[2918,141004],{"style":127661,"src":141005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2918,141007],{"style":127661,"src":141008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,141010,141011],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[561,141013,141014,141017,141020],{},[564,141015,141016],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[564,141018,141019],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[564,141021,141022],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,141024,139644],{},[23,141026,141027],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,141028,141029,141035,141045],{"__ignoreMap":28},[33,141030,141031,141033],{"class":35,"line":36},[33,141032,131653],{"class":43},[33,141034,16823],{"class":47},[33,141036,141037,141039,141041,141043],{"class":35,"line":51},[33,141038,132285],{"class":76},[33,141040,52690],{"class":47},[33,141042,24988],{"class":76},[33,141044,80],{"class":47},[33,141046,141047],{"class":35,"line":57},[33,141048,231],{"class":47},[14,141050,139684],{},[23,141052,141053],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,141054,141055,141061,141071],{"__ignoreMap":28},[33,141056,141057,141059],{"class":35,"line":36},[33,141058,131653],{"class":43},[33,141060,16823],{"class":47},[33,141062,141063,141065,141067,141069],{"class":35,"line":51},[33,141064,132285],{"class":76},[33,141066,52690],{"class":47},[33,141068,24988],{"class":76},[33,141070,80],{"class":47},[33,141072,141073],{"class":35,"line":57},[33,141074,231],{"class":47},[574,141076,141077],{},[564,141078,141079],{},"左侧focus模块制作",[2918,141081],{"style":127661,"src":141082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,141084,139644],{},[23,141086,141087],{"className":127805,"code":129128,"language":127807,"meta":28,"style":28},[30,141088,141089,141097,141107,141117],{"__ignoreMap":28},[33,141090,141091,141093,141095],{"class":35,"line":36},[33,141092,55074],{"class":52553},[33,141094,63153],{"class":43},[33,141096,16823],{"class":47},[33,141098,141099,141101,141103,141105],{"class":35,"line":51},[33,141100,129143],{"class":76},[33,141102,52690],{"class":47},[33,141104,56142],{"class":76},[33,141106,80],{"class":47},[33,141108,141109,141111,141113,141115],{"class":35,"line":57},[33,141110,72051],{"class":76},[33,141112,52690],{"class":47},[33,141114,55990],{"class":76},[33,141116,80],{"class":47},[33,141118,141119],{"class":35,"line":64},[33,141120,231],{"class":47},[14,141122,139684],{},[23,141124,141125],{"className":127805,"code":129128,"language":127807,"meta":28,"style":28},[30,141126,141127,141135,141145,141155],{"__ignoreMap":28},[33,141128,141129,141131,141133],{"class":35,"line":36},[33,141130,55074],{"class":52553},[33,141132,63153],{"class":43},[33,141134,16823],{"class":47},[33,141136,141137,141139,141141,141143],{"class":35,"line":51},[33,141138,129143],{"class":76},[33,141140,52690],{"class":47},[33,141142,56142],{"class":76},[33,141144,80],{"class":47},[33,141146,141147,141149,141151,141153],{"class":35,"line":57},[33,141148,72051],{"class":76},[33,141150,52690],{"class":47},[33,141152,55990],{"class":76},[33,141154,80],{"class":47},[33,141156,141157],{"class":35,"line":64},[33,141158,231],{"class":47},[14,141160,141161],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[574,141163,141164],{"start":51},[564,141165,141166],{},"右侧newsflash模块制作",[2918,141168],{"style":127661,"src":141169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,141171,141172],{},"右侧的模块 分为上中下三个盒子",[14,141174,141175],{},"结构代码：",[23,141177,141178],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,141179,141180],{"__ignoreMap":28},[33,141181,141182,141184,141186,141188,141190,141192,141194,141196,141198,141200,141202,141204],{"class":35,"line":36},[33,141183,875],{"class":47},[33,141185,2918],{"class":52553},[33,141187,56492],{"class":43},[33,141189,73],{"class":47},[33,141191,135322],{"class":119},[33,141193,56500],{"class":43},[33,141195,73],{"class":47},[33,141197,135329],{"class":119},[33,141199,135332],{"class":43},[33,141201,73],{"class":47},[33,141203,135337],{"class":119},[33,141205,52560],{"class":47},[14,141207,141208,141209,141212],{},"1 号盒子为 ",[30,141210,141211],{},"news"," 新闻模块 高度为 165px",[2918,141214],{"style":127661,"src":141215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,141217,141218,141219,141222,141223],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[30,141220,141221],{},"news-hd","，下面是 ",[30,141224,141225],{},"news-bd",[14,141227,141175],{},[23,141229,141230],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,141231,141232,141236,141250,141254],{"__ignoreMap":28},[33,141233,141234],{"class":35,"line":36},[33,141235,131916],{"class":60},[33,141237,141238,141240,141242,141244,141246,141248],{"class":35,"line":51},[33,141239,875],{"class":47},[33,141241,52864],{"class":52553},[33,141243,54739],{"class":43},[33,141245,73],{"class":47},[33,141247,131929],{"class":119},[33,141249,52560],{"class":47},[33,141251,141252],{"class":35,"line":57},[33,141253,131936],{"class":47},[33,141255,141256,141258,141260],{"class":35,"line":64},[33,141257,53038],{"class":47},[33,141259,52864],{"class":52553},[33,141261,52560],{"class":47},[14,141263,141264],{},"样式代码：",[23,141266,141267],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,141268,141269,141273,141287,141291],{"__ignoreMap":28},[33,141270,141271],{"class":35,"line":36},[33,141272,131916],{"class":60},[33,141274,141275,141277,141279,141281,141283,141285],{"class":35,"line":51},[33,141276,875],{"class":47},[33,141278,52864],{"class":52553},[33,141280,54739],{"class":43},[33,141282,73],{"class":47},[33,141284,131929],{"class":119},[33,141286,52560],{"class":47},[33,141288,141289],{"class":35,"line":57},[33,141290,131936],{"class":47},[33,141292,141293,141295,141297],{"class":35,"line":64},[33,141294,53038],{"class":47},[33,141296,52864],{"class":52553},[33,141298,52560],{"class":47},[14,141300,141301,141302,141304],{},"上面是",[30,141303,141221],{},"，设置高度是 33px，设置下边框",[561,141306,141307,141313],{},[564,141308,141309,141310,141312],{},"里面放一个",[30,141311,24161],{}," 标题",[564,141314,141315,141316,141318,141319,141321],{},"放一个a",[30,141317,103946],{},"，内容是 更多，然后让 ",[30,141320,126],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,141323,141175],{},[23,141325,141326],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},[30,141327,141328,141336,141346,141356],{"__ignoreMap":28},[33,141329,141330,141332,141334],{"class":35,"line":36},[33,141331,52864],{"class":52553},[33,141333,138806],{"class":43},[33,141335,16823],{"class":47},[33,141337,141338,141340,141342,141344],{"class":35,"line":51},[33,141339,138813],{"class":76},[33,141341,52690],{"class":47},[33,141343,1520],{"class":119},[33,141345,80],{"class":47},[33,141347,141348,141350,141352,141354],{"class":35,"line":57},[33,141349,129421],{"class":76},[33,141351,52690],{"class":47},[33,141353,62122],{"class":76},[33,141355,80],{"class":47},[33,141357,141358],{"class":35,"line":64},[33,141359,231],{"class":47},[14,141361,141264],{},[23,141363,141364],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},[30,141365,141366,141374,141384,141394],{"__ignoreMap":28},[33,141367,141368,141370,141372],{"class":35,"line":36},[33,141369,52864],{"class":52553},[33,141371,138806],{"class":43},[33,141373,16823],{"class":47},[33,141375,141376,141378,141380,141382],{"class":35,"line":51},[33,141377,138813],{"class":76},[33,141379,52690],{"class":47},[33,141381,1520],{"class":119},[33,141383,80],{"class":47},[33,141385,141386,141388,141390,141392],{"class":35,"line":57},[33,141387,129421],{"class":76},[33,141389,52690],{"class":47},[33,141391,62122],{"class":76},[33,141393,80],{"class":47},[33,141395,141396],{"class":35,"line":64},[33,141397,231],{"class":47},[14,141399,141400,141401],{},"下面是",[30,141402,141225],{},[561,141404,141405,141413],{},[564,141406,141407,141408,102271,141410,141412],{},"里面包含 ",[30,141409,561],{},[30,141411,564],{}," 还有链接",[564,141414,140885,141415,141417,141418,141420,141421,141424,141425],{},[30,141416,564],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[30,141419,132471],{}," 2.设置 ",[30,141422,141423],{},"white-space: nowrap;"," 3. 设置 ",[30,141426,141427],{},"text-overflow: ellipsis;",[14,141429,141175],{},[23,141431,141433],{"className":127805,"code":141432,"language":127807,"meta":28,"style":28},"div {\n  overflow: hidden;\n}\n",[30,141434,141435,141441,141452],{"__ignoreMap":28},[33,141436,141437,141439],{"class":35,"line":36},[33,141438,52864],{"class":52553},[33,141440,16823],{"class":47},[33,141442,141443,141446,141448,141450],{"class":35,"line":51},[33,141444,141445],{"class":76},"  overflow",[33,141447,52690],{"class":47},[33,141449,62967],{"class":76},[33,141451,80],{"class":47},[33,141453,141454],{"class":35,"line":57},[33,141455,231],{"class":47},[14,141457,141264],{},[23,141459,141460],{"className":127805,"code":141432,"language":127807,"meta":28,"style":28},[30,141461,141462,141468,141478],{"__ignoreMap":28},[33,141463,141464,141466],{"class":35,"line":36},[33,141465,52864],{"class":52553},[33,141467,16823],{"class":47},[33,141469,141470,141472,141474,141476],{"class":35,"line":51},[33,141471,141445],{"class":76},[33,141473,52690],{"class":47},[33,141475,62967],{"class":76},[33,141477,80],{"class":47},[33,141479,141480],{"class":35,"line":57},[33,141481,231],{"class":47},[14,141483,141484,141485,141488],{},"2 号盒子为 ",[30,141486,141487],{},"lifeservice"," 生活服务模块 高度为 209px",[2918,141490],{"style":127661,"src":141491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[561,141493,141494,141497,141507,141531,141542],{},[564,141495,141496],{},"设置边框（左右下边框）",[564,141498,141499,141500,141503,141504,141506],{},"里面的内容 是 ",[30,141501,141502],{},"ul > 12*li","，给",[30,141505,564],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[564,141508,141509,141510],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[561,141511,141512,141517,141526],{},[564,141513,141514,141516],{},[30,141515,141487],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[564,141518,141519,141520,141522,141523,141525],{},"可以让 ",[30,141521,141487],{}," 里面的 ",[30,141524,561],{}," 宽度为 252，就可以装的下 4 个 小 li",[564,141527,141528,141530],{},[30,141529,141487],{}," 盒子 overflow 隐藏多余的部分就可以了",[564,141532,117720,141533,141535,141536,141538,141539,141541],{},[30,141534,564],{}," 里面放一个 ",[30,141537,1239],{},"（里面放图标），下面的文本用 ",[30,141540,14],{}," 标签包裹",[564,141543,140305,141544,141546,141547,141549,141550,140339,141552,141555],{},[30,141545,1239],{}," 设置 24px宽和28px的高（注意 ",[30,141548,1239],{}," 是行内元素， 转成行内块），给 ",[30,141551,564],{},[30,141553,141554],{},"text-align:center"," 让里面内容居中显示",[14,141557,141175],{},[23,141559,141561],{"className":127805,"code":141560,"language":127807,"meta":28,"style":28},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[30,141562,141563,141581,141586,141596],{"__ignoreMap":28},[33,141564,141565,141567,141569,141571,141573,141575,141577,141579],{"class":35,"line":36},[33,141566,33],{"class":52553},[33,141568,13686],{"class":47},[33,141570,126],{"class":52553},[33,141572,13686],{"class":47},[33,141574,24805],{"class":52553},[33,141576,13686],{"class":47},[33,141578,480],{"class":52553},[33,141580,16823],{"class":47},[33,141582,141583],{"class":35,"line":51},[33,141584,141585],{"class":60},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[33,141587,141588,141590,141592,141594],{"class":35,"line":57},[33,141589,129421],{"class":76},[33,141591,52690],{"class":47},[33,141593,129483],{"class":76},[33,141595,80],{"class":47},[33,141597,141598],{"class":35,"line":64},[33,141599,231],{"class":47},[14,141601,141264],{},[23,141603,141604],{"className":127805,"code":141560,"language":127807,"meta":28,"style":28},[30,141605,141606,141624,141628,141638],{"__ignoreMap":28},[33,141607,141608,141610,141612,141614,141616,141618,141620,141622],{"class":35,"line":36},[33,141609,33],{"class":52553},[33,141611,13686],{"class":47},[33,141613,126],{"class":52553},[33,141615,13686],{"class":47},[33,141617,24805],{"class":52553},[33,141619,13686],{"class":47},[33,141621,480],{"class":52553},[33,141623,16823],{"class":47},[33,141625,141626],{"class":35,"line":51},[33,141627,141585],{"class":60},[33,141629,141630,141632,141634,141636],{"class":35,"line":57},[33,141631,129421],{"class":76},[33,141633,52690],{"class":47},[33,141635,129483],{"class":76},[33,141637,80],{"class":47},[33,141639,141640],{"class":35,"line":64},[33,141641,231],{"class":47},[14,141643,141644,141645,141648],{},"3 号盒子为 ",[30,141646,141647],{},"bargain"," 特价商品",[561,141650,141651],{},[564,141652,141653],{},"这个比较简单，直接插入一张图片即可",[14,141655,141175],{},[23,141657,141658],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,141659,141660],{"__ignoreMap":28},[33,141661,141662,141664,141666,141668,141670,141672,141674,141676,141678,141680,141682,141684],{"class":35,"line":36},[33,141663,875],{"class":47},[33,141665,2918],{"class":52553},[33,141667,56492],{"class":43},[33,141669,73],{"class":47},[33,141671,135322],{"class":119},[33,141673,56500],{"class":43},[33,141675,73],{"class":47},[33,141677,135329],{"class":119},[33,141679,135332],{"class":43},[33,141681,73],{"class":47},[33,141683,135337],{"class":119},[33,141685,52560],{"class":47},[14,141687,141264],{},[23,141689,141690],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,141691,141692],{"__ignoreMap":28},[33,141693,141694,141696,141698,141700,141702,141704,141706,141708,141710,141712,141714,141716],{"class":35,"line":36},[33,141695,875],{"class":47},[33,141697,2918],{"class":52553},[33,141699,56492],{"class":43},[33,141701,73],{"class":47},[33,141703,135322],{"class":119},[33,141705,56500],{"class":43},[33,141707,73],{"class":47},[33,141709,135329],{"class":119},[33,141711,135332],{"class":43},[33,141713,73],{"class":47},[33,141715,135337],{"class":119},[33,141717,52560],{"class":47},[1599,141719,141721],{"id":141720},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2918,141723],{"style":127661,"src":141724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,141726,141727,141728,141731],{},"大盒子 ",[30,141729,141730],{},"recom"," 推荐模块 recommend",[561,141733,141734],{},[564,141735,141736,141737,141739,141740,141743],{},"给这个 ",[30,141738,141730],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[30,141741,141742],{},"#ebebeb","），设置距离上边 12px",[14,141745,141175],{},[23,141747,141749],{"className":127805,"code":141748,"language":127807,"meta":28,"style":28},"div {\n  background-color: #f0f0f0;\n}\n",[30,141750,141751,141757,141768],{"__ignoreMap":28},[33,141752,141753,141755],{"class":35,"line":36},[33,141754,52864],{"class":52553},[33,141756,16823],{"class":47},[33,141758,141759,141761,141763,141766],{"class":35,"line":51},[33,141760,72131],{"class":76},[33,141762,52690],{"class":47},[33,141764,141765],{"class":76},"#f0f0f0",[33,141767,80],{"class":47},[33,141769,141770],{"class":35,"line":57},[33,141771,231],{"class":47},[14,141773,141264],{},[23,141775,141776],{"className":127805,"code":141748,"language":127807,"meta":28,"style":28},[30,141777,141778,141784,141794],{"__ignoreMap":28},[33,141779,141780,141782],{"class":35,"line":36},[33,141781,52864],{"class":52553},[33,141783,16823],{"class":47},[33,141785,141786,141788,141790,141792],{"class":35,"line":51},[33,141787,72131],{"class":76},[33,141789,52690],{"class":47},[33,141791,141765],{"class":76},[33,141793,80],{"class":47},[33,141795,141796],{"class":35,"line":57},[33,141797,231],{"class":47},[14,141799,141800],{},"里面包含 2 个盒子， 浮动即可",[14,141802,141175],{},[23,141804,141805],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,141806,141807,141813,141823],{"__ignoreMap":28},[33,141808,141809,141811],{"class":35,"line":36},[33,141810,131653],{"class":43},[33,141812,16823],{"class":47},[33,141814,141815,141817,141819,141821],{"class":35,"line":51},[33,141816,132285],{"class":76},[33,141818,52690],{"class":47},[33,141820,24988],{"class":76},[33,141822,80],{"class":47},[33,141824,141825],{"class":35,"line":57},[33,141826,231],{"class":47},[14,141828,141829,141830],{},"1 号盒子 ",[30,141831,141832],{},"recom_hd",[561,141834,141835,141838],{},[564,141836,141837],{},"设置宽度205px，高度163px",[564,141839,141309,141840,141842],{},[30,141841,2918],{},"标签，插入图片即可",[14,141844,141175],{},[23,141846,141847],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,141848,141849],{"__ignoreMap":28},[33,141850,141851,141853,141855,141857,141859,141861,141863,141865,141867,141869,141871,141873],{"class":35,"line":36},[33,141852,875],{"class":47},[33,141854,2918],{"class":52553},[33,141856,56492],{"class":43},[33,141858,73],{"class":47},[33,141860,135322],{"class":119},[33,141862,56500],{"class":43},[33,141864,73],{"class":47},[33,141866,135329],{"class":119},[33,141868,135332],{"class":43},[33,141870,73],{"class":47},[33,141872,135337],{"class":119},[33,141874,52560],{"class":47},[14,141876,141264],{},[23,141878,141879],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,141880,141881],{"__ignoreMap":28},[33,141882,141883,141885,141887,141889,141891,141893,141895,141897,141899,141901,141903,141905],{"class":35,"line":36},[33,141884,875],{"class":47},[33,141886,2918],{"class":52553},[33,141888,56492],{"class":43},[33,141890,73],{"class":47},[33,141892,135322],{"class":119},[33,141894,56500],{"class":43},[33,141896,73],{"class":47},[33,141898,135329],{"class":119},[33,141900,135332],{"class":43},[33,141902,73],{"class":47},[33,141904,135337],{"class":119},[33,141906,52560],{"class":47},[14,141908,141909,141910,141913],{},"2 号盒子 ",[30,141911,141912],{},"recom_bd"," ，注意里面的小竖线",[561,141915,141916,141927,141930,141935,141940],{},[564,141917,141918,141919,141921,141922,141924,141925],{},"右侧结构里面放 ",[30,141920,561],{}," 包含 4个 ",[30,141923,564],{},"，每个li里面包含一个",[30,141926,2918],{},[564,141928,141929],{},"直接利用切片工具把里面的内容当成一张图片",[564,141931,140305,141932,141934],{},[30,141933,564],{}," 设置浮动",[564,141936,140305,141937,141939],{},[30,141938,2918],{}," 设置宽高，宽度 248px，高度 163px",[564,141941,141942,141943,141503,141946,141948,141949,141951,141952],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[30,141944,141945],{},"top 10px",[30,141947,564],{},"设置相对定位（注意，最后一个",[30,141950,564],{},"不用设置伪元素），可以利用 ",[30,141953,141954],{},"nth-child(-n+3){...}",[14,141956,141175],{},[23,141958,141959],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},[30,141960,141961,141969,141979,141989],{"__ignoreMap":28},[33,141962,141963,141965,141967],{"class":35,"line":36},[33,141964,52864],{"class":52553},[33,141966,138806],{"class":43},[33,141968,16823],{"class":47},[33,141970,141971,141973,141975,141977],{"class":35,"line":51},[33,141972,138813],{"class":76},[33,141974,52690],{"class":47},[33,141976,1520],{"class":119},[33,141978,80],{"class":47},[33,141980,141981,141983,141985,141987],{"class":35,"line":57},[33,141982,129421],{"class":76},[33,141984,52690],{"class":47},[33,141986,62122],{"class":76},[33,141988,80],{"class":47},[33,141990,141991],{"class":35,"line":64},[33,141992,231],{"class":47},[14,141994,141264],{},[23,141996,141997],{"className":127805,"code":139647,"language":127807,"meta":28,"style":28},[30,141998,141999,142007,142017,142027],{"__ignoreMap":28},[33,142000,142001,142003,142005],{"class":35,"line":36},[33,142002,52864],{"class":52553},[33,142004,138806],{"class":43},[33,142006,16823],{"class":47},[33,142008,142009,142011,142013,142015],{"class":35,"line":51},[33,142010,138813],{"class":76},[33,142012,52690],{"class":47},[33,142014,1520],{"class":119},[33,142016,80],{"class":47},[33,142018,142019,142021,142023,142025],{"class":35,"line":57},[33,142020,129421],{"class":76},[33,142022,52690],{"class":47},[33,142024,62122],{"class":76},[33,142026,80],{"class":47},[33,142028,142029],{"class":35,"line":64},[33,142030,231],{"class":47},[1599,142032,142034],{"id":142033},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2918,142036],{"style":127661,"src":142037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,142039,142040],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,142042,142043],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,142045,142046,142049],{},[30,142047,142048],{},"box_hd"," 制作",[14,142051,141829,142052,142054],{},[30,142053,142048],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2918,142056],{"style":127661,"src":142057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[561,142059,142060,142065,142070,142073],{},[564,142061,142062,142064],{},[30,142063,142048],{}," 给 30px 的高度，2个像素的下边框",[564,142066,142067,142068],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[30,142069,140316],{},[564,142071,142072],{},"左侧盒左浮动，右侧盒子右浮动",[564,142074,142075,142077,142078,142080],{},[30,142076,126],{},"标签之间的距离用左右的",[30,142079,32136],{},"撑开即可",[14,142082,142083],{},"结构代码",[23,142085,142086],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,142087,142088,142094,142104],{"__ignoreMap":28},[33,142089,142090,142092],{"class":35,"line":36},[33,142091,131653],{"class":43},[33,142093,16823],{"class":47},[33,142095,142096,142098,142100,142102],{"class":35,"line":51},[33,142097,132285],{"class":76},[33,142099,52690],{"class":47},[33,142101,24988],{"class":76},[33,142103,80],{"class":47},[33,142105,142106],{"class":35,"line":57},[33,142107,231],{"class":47},[14,142109,142110],{},"样式代码",[23,142112,142113],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,142114,142115,142121,142131],{"__ignoreMap":28},[33,142116,142117,142119],{"class":35,"line":36},[33,142118,131653],{"class":43},[33,142120,16823],{"class":47},[33,142122,142123,142125,142127,142129],{"class":35,"line":51},[33,142124,132285],{"class":76},[33,142126,52690],{"class":47},[33,142128,24988],{"class":76},[33,142130,80],{"class":47},[33,142132,142133],{"class":35,"line":57},[33,142134,231],{"class":47},[14,142136,142137,142049],{},[30,142138,142139],{},"box_bd",[14,142141,142142],{},"2 号盒子 box_bd，不要给高度",[2918,142144],{"style":127661,"src":142145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,142147,142148],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,142150,142151],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,142153,142154],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[561,142156,142157,142169,142185],{},[564,142158,142159,142161,142162,142165,142166,142168],{},[30,142160,142139],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[30,142163,142164],{},"tab_content","，在",[30,142167,142164],{}," 里面包裹tab选项卡对应的内容",[564,142170,142171,142172,142175,142176,142178,142179,142181,142182,142184],{},"内容被一个大盒子包裹（",[30,142173,142174],{},"tab_list_item","），里面是 ",[30,142177,561],{}," 包裹 5个 ",[30,142180,564],{},"，每个",[30,142183,564],{},"设置对应的宽度，然后设置浮动",[564,142186,142187,142188,142190,142191,142193,142194],{},"而这5个",[30,142189,564],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[30,142192,564],{},"设置",[561,142195,142196,142214,142217],{},[564,142197,142198,142199,142201,142202,142204,142205,142207,142208,142210,142211,142213],{},"第一个小 ",[30,142200,564],{}," 分为上下结构，上面是 ",[30,142203,561],{}," 包裹 ",[30,142206,564],{}," ，",[30,142209,564],{},"里面包裹 ",[30,142212,126],{},"，下面插入一张图片",[564,142215,142216],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[564,142218,142219,142220,142222,142223,142225,142226,142228],{},"后面的小 ",[30,142221,564],{}," 里面先放一个",[30,142224,126],{},"标签，然后在",[30,142227,126],{},"标签里面插入图片即可",[14,142230,142083],{},[23,142232,142233],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,142234,142235],{"__ignoreMap":28},[33,142236,142237,142239,142241,142243,142245,142247,142249,142251,142253,142255,142257,142259],{"class":35,"line":36},[33,142238,875],{"class":47},[33,142240,2918],{"class":52553},[33,142242,56492],{"class":43},[33,142244,73],{"class":47},[33,142246,135322],{"class":119},[33,142248,56500],{"class":43},[33,142250,73],{"class":47},[33,142252,135329],{"class":119},[33,142254,135332],{"class":43},[33,142256,73],{"class":47},[33,142258,135337],{"class":119},[33,142260,52560],{"class":47},[14,142262,142110],{},[23,142264,142265],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,142266,142267],{"__ignoreMap":28},[33,142268,142269,142271,142273,142275,142277,142279,142281,142283,142285,142287,142289,142291],{"class":35,"line":36},[33,142270,875],{"class":47},[33,142272,2918],{"class":52553},[33,142274,56492],{"class":43},[33,142276,73],{"class":47},[33,142278,135322],{"class":119},[33,142280,56500],{"class":43},[33,142282,73],{"class":47},[33,142284,135329],{"class":119},[33,142286,135332],{"class":43},[33,142288,73],{"class":47},[33,142290,135337],{"class":119},[33,142292,52560],{"class":47},[14,142294,142295],{},"tab栏切换需求！！！！！！介绍：",[2918,142297],{"style":127661,"src":142298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[561,142300,142301,142309,142315,142318],{},[564,142302,142303,142306,142307],{},[30,142304,142305],{},"tab","栏的布局是 ",[30,142308,140316],{},[564,142310,142311,142312,142314],{},"有多少个",[30,142313,142305],{},"选项卡，那么对应就有多少个内容",[564,142316,142317],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[564,142319,142320,142321,142324,142325,142327,142328,142330],{},"等后面我们学习了",[30,142322,142323],{},"js","之后，我们就会配合",[30,142326,142323],{},"来实现，",[30,142329,142305],{},"栏的切换",[18,142332,142334],{"id":142333},"_162-列表制作","16.2 列表制作",[1599,142336,142338],{"id":142337},"_1621-准备工作","16.2.1 准备工作",[561,142340,142341,142344,142347,142350],{},[564,142342,142343],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[564,142345,142346],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[564,142348,142349],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[564,142351,142352],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[1599,142354,142356,142357,102271,142359,142361],{"id":142355},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[30,142358,132810],{},[30,142360,54966],{}," 修改",[2918,142363],{"style":127661,"src":142364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[561,142366,142367],{},[564,142368,142369],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,142371,141175],{},[23,142373,142374],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},[30,142375,142376,142380,142394,142398,142412,142416,142430,142434,142448,142452],{"__ignoreMap":28},[33,142377,142378],{"class":35,"line":36},[33,142379,133244],{"class":60},[33,142381,142382,142384,142386,142388,142390,142392],{"class":35,"line":51},[33,142383,133249],{"class":43},[33,142385,81060],{"class":47},[33,142387,130165],{"class":76},[33,142389,52690],{"class":47},[33,142391,133258],{"class":76},[33,142393,130735],{"class":47},[33,142395,142396],{"class":35,"line":57},[33,142397,133265],{"class":60},[33,142399,142400,142402,142404,142406,142408,142410],{"class":35,"line":64},[33,142401,133270],{"class":43},[33,142403,81060],{"class":47},[33,142405,130165],{"class":76},[33,142407,52690],{"class":47},[33,142409,56017],{"class":76},[33,142411,130735],{"class":47},[33,142413,142414],{"class":35,"line":83},[33,142415,133285],{"class":60},[33,142417,142418,142420,142422,142424,142426,142428],{"class":35,"line":89},[33,142419,133290],{"class":43},[33,142421,81060],{"class":47},[33,142423,130165],{"class":76},[33,142425,52690],{"class":47},[33,142427,56084],{"class":76},[33,142429,130735],{"class":47},[33,142431,142432],{"class":35,"line":98},[33,142433,133305],{"class":60},[33,142435,142436,142438,142440,142442,142444,142446],{"class":35,"line":110},[33,142437,133310],{"class":43},[33,142439,81060],{"class":47},[33,142441,130165],{"class":76},[33,142443,52690],{"class":47},[33,142445,87486],{"class":76},[33,142447,130735],{"class":47},[33,142449,142450],{"class":35,"line":134},[33,142451,133325],{"class":60},[33,142453,142454,142456,142458,142460,142462,142464],{"class":35,"line":156},[33,142455,133330],{"class":43},[33,142457,81060],{"class":47},[33,142459,130165],{"class":76},[33,142461,52690],{"class":47},[33,142463,133339],{"class":76},[33,142465,130735],{"class":47},[14,142467,141264],{},[23,142469,142470],{"className":127805,"code":133237,"language":127807,"meta":28,"style":28},[30,142471,142472,142476,142490,142494,142508,142512,142526,142530,142544,142548],{"__ignoreMap":28},[33,142473,142474],{"class":35,"line":36},[33,142475,133244],{"class":60},[33,142477,142478,142480,142482,142484,142486,142488],{"class":35,"line":51},[33,142479,133249],{"class":43},[33,142481,81060],{"class":47},[33,142483,130165],{"class":76},[33,142485,52690],{"class":47},[33,142487,133258],{"class":76},[33,142489,130735],{"class":47},[33,142491,142492],{"class":35,"line":57},[33,142493,133265],{"class":60},[33,142495,142496,142498,142500,142502,142504,142506],{"class":35,"line":64},[33,142497,133270],{"class":43},[33,142499,81060],{"class":47},[33,142501,130165],{"class":76},[33,142503,52690],{"class":47},[33,142505,56017],{"class":76},[33,142507,130735],{"class":47},[33,142509,142510],{"class":35,"line":83},[33,142511,133285],{"class":60},[33,142513,142514,142516,142518,142520,142522,142524],{"class":35,"line":89},[33,142515,133290],{"class":43},[33,142517,81060],{"class":47},[33,142519,130165],{"class":76},[33,142521,52690],{"class":47},[33,142523,56084],{"class":76},[33,142525,130735],{"class":47},[33,142527,142528],{"class":35,"line":98},[33,142529,133305],{"class":60},[33,142531,142532,142534,142536,142538,142540,142542],{"class":35,"line":110},[33,142533,133310],{"class":43},[33,142535,81060],{"class":47},[33,142537,130165],{"class":76},[33,142539,52690],{"class":47},[33,142541,87486],{"class":76},[33,142543,130735],{"class":47},[33,142545,142546],{"class":35,"line":134},[33,142547,133325],{"class":60},[33,142549,142550,142552,142554,142556,142558,142560],{"class":35,"line":156},[33,142551,133330],{"class":43},[33,142553,81060],{"class":47},[33,142555,130165],{"class":76},[33,142557,52690],{"class":47},[33,142559,133339],{"class":76},[33,142561,130735],{"class":47},[561,142563,142564,142575],{},[564,142565,142566,142567,142570,142571,102271,142573],{},"1 号盒子左侧浮动 ",[30,142568,142569],{},"sk_list"," 里面包含 ",[30,142572,561],{},[30,142574,564],{},[564,142576,142577,142578,142570,142581,102271,142583],{},"2 号盒子左侧浮动 ",[30,142579,142580],{},"sk_con",[30,142582,561],{},[30,142584,564],{},[14,142586,141175],{},[23,142588,142589],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,142590,142591,142597,142607],{"__ignoreMap":28},[33,142592,142593,142595],{"class":35,"line":36},[33,142594,131653],{"class":43},[33,142596,16823],{"class":47},[33,142598,142599,142601,142603,142605],{"class":35,"line":51},[33,142600,132285],{"class":76},[33,142602,52690],{"class":47},[33,142604,24988],{"class":76},[33,142606,80],{"class":47},[33,142608,142609],{"class":35,"line":57},[33,142610,231],{"class":47},[14,142612,141264],{},[23,142614,142615],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,142616,142617,142623,142633],{"__ignoreMap":28},[33,142618,142619,142621],{"class":35,"line":36},[33,142620,131653],{"class":43},[33,142622,16823],{"class":47},[33,142624,142625,142627,142629,142631],{"class":35,"line":51},[33,142626,132285],{"class":76},[33,142628,52690],{"class":47},[33,142630,24988],{"class":76},[33,142632,80],{"class":47},[33,142634,142635],{"class":35,"line":57},[33,142636,231],{"class":47},[1599,142638,142640,142641],{"id":142639},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[30,142642,142643],{},"sk_container",[2918,142645],{"style":127661,"src":142646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[561,142648,142649,142654],{},[564,142650,141829,142651,142653],{},[30,142652,142643],{}," 给宽度 1200，不要给高度",[564,142655,142656],{},"一定不要忘记清除浮动",[14,142658,141175],{},[23,142660,142661],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,142662,142663,142669,142679],{"__ignoreMap":28},[33,142664,142665,142667],{"class":35,"line":36},[33,142666,131653],{"class":43},[33,142668,16823],{"class":47},[33,142670,142671,142673,142675,142677],{"class":35,"line":51},[33,142672,132285],{"class":76},[33,142674,52690],{"class":47},[33,142676,24988],{"class":76},[33,142678,80],{"class":47},[33,142680,142681],{"class":35,"line":57},[33,142682,231],{"class":47},[574,142684,142685],{},[564,142686,142687],{},"sk_hd制作",[561,142689,142690],{},[564,142691,141909,142692,142695],{},[30,142693,142694],{},"sk_hd"," ，插入图片即可",[14,142697,141175],{},[23,142699,142700],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,142701,142702],{"__ignoreMap":28},[33,142703,142704,142706,142708,142710,142712,142714,142716,142718,142720,142722,142724,142726],{"class":35,"line":36},[33,142705,875],{"class":47},[33,142707,2918],{"class":52553},[33,142709,56492],{"class":43},[33,142711,73],{"class":47},[33,142713,135322],{"class":119},[33,142715,56500],{"class":43},[33,142717,73],{"class":47},[33,142719,135329],{"class":119},[33,142721,135332],{"class":43},[33,142723,73],{"class":47},[33,142725,135337],{"class":119},[33,142727,52560],{"class":47},[574,142729,142730],{"start":51},[564,142731,142732],{},"sk_bd制作",[561,142734,142735],{},[564,142736,142737,142738,142741,142742,102271,142744,142746],{},"3 号盒子 ",[30,142739,142740],{},"sk_bd"," ，里面包含很多的 ",[30,142743,561],{},[30,142745,564],{},[561,142747,142748,142757],{},[564,142749,142750,142751,142753,142754,142756],{},"当鼠标移入到 ",[30,142752,564],{}," 上面的时候显示红色的边框，在这里先给 ",[30,142755,564],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[564,142758,142759,142760,142762,142763,142765,142766,142769,142770,142772],{},"由于给每个 ",[30,142761,564],{}," 都设置了外边距，导致一行的最后一个 ",[30,142764,564],{}," 掉了下来，在这里我们利用 ",[30,142767,142768],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[30,142771,564],{},"，去掉外边距就好了",[14,142774,141175],{},[23,142776,142777],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,142778,142779,142785,142797],{"__ignoreMap":28},[33,142780,142781,142783],{"class":35,"line":36},[33,142782,52864],{"class":52553},[33,142784,16823],{"class":47},[33,142786,142787,142789,142791,142793,142795],{"class":35,"line":51},[33,142788,71723],{"class":76},[33,142790,52690],{"class":47},[33,142792,766],{"class":76},[33,142794,52809],{"class":76},[33,142796,80],{"class":47},[33,142798,142799],{"class":35,"line":57},[33,142800,231],{"class":47},[14,142802,141264],{},[23,142804,142805],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,142806,142807,142813,142825],{"__ignoreMap":28},[33,142808,142809,142811],{"class":35,"line":36},[33,142810,52864],{"class":52553},[33,142812,16823],{"class":47},[33,142814,142815,142817,142819,142821,142823],{"class":35,"line":51},[33,142816,71723],{"class":76},[33,142818,52690],{"class":47},[33,142820,766],{"class":76},[33,142822,52809],{"class":76},[33,142824,80],{"class":47},[33,142826,142827],{"class":35,"line":57},[33,142828,231],{"class":47},[18,142830,142832],{"id":142831},"_163-注册页面制作","16.3 注册页面制作",[2918,142834],{"style":127661,"src":142835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,142837,142838,142840],{},[480,142839,10276],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2918,142842],{"style":127661,"src":142843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[1599,142845,142847],{"id":142846},"_1631-准备工作","16.3.1 准备工作",[561,142849,142850,142853],{},[564,142851,142852],{},"创建register.html，引入 base.css，引入favicon图标",[564,142854,142855],{},"创建register.css ，在html页面进行引入",[1599,142857,142859,142860,142862],{"id":142858},"_1632-header-头部实现","16.3.2 ",[30,142861,132810],{}," 头部实现",[561,142864,142865,142868],{},[564,142866,142867],{},"整个内容用 版心 进行包裹",[564,142869,142870],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,142872,141175],{},[23,142874,142875],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,142876,142877],{"__ignoreMap":28},[33,142878,142879,142881,142883,142885,142887,142889,142891,142893,142895,142897,142899,142901],{"class":35,"line":36},[33,142880,875],{"class":47},[33,142882,2918],{"class":52553},[33,142884,56492],{"class":43},[33,142886,73],{"class":47},[33,142888,135322],{"class":119},[33,142890,56500],{"class":43},[33,142892,73],{"class":47},[33,142894,135329],{"class":119},[33,142896,135332],{"class":43},[33,142898,73],{"class":47},[33,142900,135337],{"class":119},[33,142902,52560],{"class":47},[14,142904,141264],{},[23,142906,142907],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,142908,142909],{"__ignoreMap":28},[33,142910,142911,142913,142915,142917,142919,142921,142923,142925,142927,142929,142931,142933],{"class":35,"line":36},[33,142912,875],{"class":47},[33,142914,2918],{"class":52553},[33,142916,56492],{"class":43},[33,142918,73],{"class":47},[33,142920,135322],{"class":119},[33,142922,56500],{"class":43},[33,142924,73],{"class":47},[33,142926,135329],{"class":119},[33,142928,135332],{"class":43},[33,142930,73],{"class":47},[33,142932,135337],{"class":119},[33,142934,52560],{"class":47},[1599,142936,142938,142939,142942],{"id":142937},"_1633-registerarea-主体模块实现","16.3.3 ",[30,142940,142941],{},"registerarea"," 主体模块实现",[2918,142944],{"style":127661,"src":142945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,142947,142948],{},"整个大盒子 高度为 522px，设置4个边框",[14,142950,141175],{},[23,142952,142953],{"className":127805,"code":131962,"language":127807,"meta":28,"style":28},[30,142954,142955,142961,142977],{"__ignoreMap":28},[33,142956,142957,142959],{"class":35,"line":36},[33,142958,52864],{"class":52553},[33,142960,16823],{"class":47},[33,142962,142963,142965,142967,142969,142971,142973,142975],{"class":35,"line":51},[33,142964,72149],{"class":76},[33,142966,52690],{"class":47},[33,142968,701],{"class":76},[33,142970,52745],{"class":39},[33,142972,52774],{"class":76},[33,142974,131197],{"class":76},[33,142976,80],{"class":47},[33,142978,142979],{"class":35,"line":57},[33,142980,231],{"class":47},[14,142982,141264],{},[23,142984,142985],{"className":127805,"code":131962,"language":127807,"meta":28,"style":28},[30,142986,142987,142993,143009],{"__ignoreMap":28},[33,142988,142989,142991],{"class":35,"line":36},[33,142990,52864],{"class":52553},[33,142992,16823],{"class":47},[33,142994,142995,142997,142999,143001,143003,143005,143007],{"class":35,"line":51},[33,142996,72149],{"class":76},[33,142998,52690],{"class":47},[33,143000,701],{"class":76},[33,143002,52745],{"class":39},[33,143004,52774],{"class":76},[33,143006,131197],{"class":76},[33,143008,80],{"class":47},[33,143010,143011],{"class":35,"line":57},[33,143012,231],{"class":47},[14,143014,143015],{},"1号盒子 是一个 h3 标签，放标题",[561,143017,143018],{},[564,143019,143020],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,143022,141175],{},[23,143024,143025],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,143026,143027,143033,143043],{"__ignoreMap":28},[33,143028,143029,143031],{"class":35,"line":36},[33,143030,131653],{"class":43},[33,143032,16823],{"class":47},[33,143034,143035,143037,143039,143041],{"class":35,"line":51},[33,143036,132285],{"class":76},[33,143038,52690],{"class":47},[33,143040,24988],{"class":76},[33,143042,80],{"class":47},[33,143044,143045],{"class":35,"line":57},[33,143046,231],{"class":47},[14,143048,141264],{},[23,143050,143051],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,143052,143053,143059,143069],{"__ignoreMap":28},[33,143054,143055,143057],{"class":35,"line":36},[33,143056,131653],{"class":43},[33,143058,16823],{"class":47},[33,143060,143061,143063,143065,143067],{"class":35,"line":51},[33,143062,132285],{"class":76},[33,143064,52690],{"class":47},[33,143066,24988],{"class":76},[33,143068,80],{"class":47},[33,143070,143071],{"class":35,"line":57},[33,143072,231],{"class":47},[14,143074,143075],{},"2号盒子 里面放注册的内容",[561,143077,143078,143081,143090,143104,143117,143120,143123,143141,143155],{},[564,143079,143080],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[564,143082,143083,143084,143086,143087,143089],{},"里面的内容利用 ",[30,143085,561],{}," 包含 ",[30,143088,564],{}," 来实现的（不需要用表格）",[564,143091,140319,143092,143094,143095,143097,143098,143100,143101,143103],{},[30,143093,564],{}," 里面，左侧放 ",[30,143096,34861],{}," 标签， 中间放",[30,143099,55074],{}," 标签， 右侧放 ",[30,143102,33],{}," 提示信息",[564,143105,143106,143107,143109,143110,143112,143113,143116],{},"左侧 ",[30,143108,34861],{},"里面的文字都是右对齐，我们可以给",[30,143111,34861],{},"设置一个宽度（88px），然后利用",[30,143114,143115],{},"text-align"," 来设置右对齐",[564,143118,143119],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[564,143121,143122],{},"右侧 span修饰一下文字颜色",[564,143124,143125,143126],{},"提示信息的样式优化",[561,143127,143128,143131,143134],{},[564,143129,143130],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[564,143132,143133],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[564,143135,143136,143137,143140],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[30,143138,143139],{},"vertical-algin"," 来设置 图片与文字对齐方式",[564,143142,143143,143144],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[561,143145,143146,143152],{},[564,143147,143148,143149,143151],{},"设置 ",[30,143150,24805],{}," 的 左右 12px 的内边距，设置一下文字颜色",[564,143153,143154],{},"分别设置 背景颜色",[564,143156,143157,143158,143160],{},"同意协议 和 完成注册 都是用 ",[30,143159,564],{}," 进行包裹",[14,143162,141175],{},[23,143164,143165],{"className":127805,"code":141748,"language":127807,"meta":28,"style":28},[30,143166,143167,143173,143183],{"__ignoreMap":28},[33,143168,143169,143171],{"class":35,"line":36},[33,143170,52864],{"class":52553},[33,143172,16823],{"class":47},[33,143174,143175,143177,143179,143181],{"class":35,"line":51},[33,143176,72131],{"class":76},[33,143178,52690],{"class":47},[33,143180,141765],{"class":76},[33,143182,80],{"class":47},[33,143184,143185],{"class":35,"line":57},[33,143186,231],{"class":47},[14,143188,141264],{},[23,143190,143191],{"className":127805,"code":141748,"language":127807,"meta":28,"style":28},[30,143192,143193,143199,143209],{"__ignoreMap":28},[33,143194,143195,143197],{"class":35,"line":36},[33,143196,52864],{"class":52553},[33,143198,16823],{"class":47},[33,143200,143201,143203,143205,143207],{"class":35,"line":51},[33,143202,72131],{"class":76},[33,143204,52690],{"class":47},[33,143206,141765],{"class":76},[33,143208,80],{"class":47},[33,143210,143211],{"class":35,"line":57},[33,143212,231],{"class":47},[1599,143214,143216],{"id":143215},"_1634-底部实现","16.3.4 底部实现",[14,143218,141175],{},[23,143220,143221],{"className":127805,"code":141748,"language":127807,"meta":28,"style":28},[30,143222,143223,143229,143239],{"__ignoreMap":28},[33,143224,143225,143227],{"class":35,"line":36},[33,143226,52864],{"class":52553},[33,143228,16823],{"class":47},[33,143230,143231,143233,143235,143237],{"class":35,"line":51},[33,143232,72131],{"class":76},[33,143234,52690],{"class":47},[33,143236,141765],{"class":76},[33,143238,80],{"class":47},[33,143240,143241],{"class":35,"line":57},[33,143242,231],{"class":47},[14,143244,141264],{},[23,143246,143247],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,143248,143249,143253,143267,143271],{"__ignoreMap":28},[33,143250,143251],{"class":35,"line":36},[33,143252,131916],{"class":60},[33,143254,143255,143257,143259,143261,143263,143265],{"class":35,"line":51},[33,143256,875],{"class":47},[33,143258,52864],{"class":52553},[33,143260,54739],{"class":43},[33,143262,73],{"class":47},[33,143264,131929],{"class":119},[33,143266,52560],{"class":47},[33,143268,143269],{"class":35,"line":57},[33,143270,131936],{"class":47},[33,143272,143273,143275,143277],{"class":35,"line":64},[33,143274,53038],{"class":47},[33,143276,52864],{"class":52553},[33,143278,52560],{"class":47},[18,143280,143282],{"id":143281},"_164-项目总结","16.4 项目总结",[574,143284,143285,143288,143291,143294],{},[564,143286,143287],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[564,143289,143290],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[564,143292,143293],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[564,143295,143296],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2918,143298],{"style":127661,"src":143299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[574,143301,143302],{"start":83},[564,143303,143304],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2918,143306],{"style":127661,"src":143307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[574,143309,143310],{"start":89},[564,143311,143312],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2918,143314],{"style":127661,"src":143315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[23,143317,143318],{"className":128552,"code":137962,"language":128554,"meta":28,"style":28},[30,143319,143320],{"__ignoreMap":28},[33,143321,143322,143324,143326,143328,143330,143332,143334,143336,143338,143340,143342,143344],{"class":35,"line":36},[33,143323,875],{"class":47},[33,143325,55074],{"class":52553},[33,143327,55077],{"class":43},[33,143329,73],{"class":47},[33,143331,63952],{"class":119},[33,143333,16171],{"class":43},[33,143335,73],{"class":47},[33,143337,137983],{"class":119},[33,143339,62273],{"class":43},[33,143341,73],{"class":47},[33,143343,137990],{"class":119},[33,143345,52560],{"class":47},[574,143347,143348,143351],{"start":98},[564,143349,143350],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[564,143352,143353],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1544,143355,143356],{},"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":28,"searchDepth":51,"depth":51,"links":143358},[143359,143364,143371,143379],{"id":140985,"depth":51,"text":140986,"children":143360},[143361,143362,143363],{"id":140989,"depth":57,"text":140990},{"id":141720,"depth":57,"text":141721},{"id":142033,"depth":57,"text":142034},{"id":142333,"depth":51,"text":142334,"children":143365},[143366,143367,143369],{"id":142337,"depth":57,"text":142338},{"id":142355,"depth":57,"text":143368},"16.2.2 列表页 header 和 nav 修改",{"id":142639,"depth":57,"text":143370},"16.2.3 列表页主体 sk_container",{"id":142831,"depth":51,"text":142832,"children":143372},[143373,143374,143376,143378],{"id":142846,"depth":57,"text":142847},{"id":142858,"depth":57,"text":143375},"16.3.2 header 头部实现",{"id":142937,"depth":57,"text":143377},"16.3.3 registerarea 主体模块实现",{"id":143215,"depth":57,"text":143216},{"id":143281,"depth":51,"text":143282},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140977,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143386,"title":143387,"body":143388,"description":24628,"extension":1557,"meta":143496,"navigation":159,"path":143497,"seo":143498,"stem":143499,"__hash__":143500},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143389,"toc":143491},[143390,143393,143397,143400,143403,143412,143421,143425,143430,143437,143455,143458,143461,143464,143467,143470,143473,143476,143479,143482,143485,143488],[10,143391,143387],{"id":143392},"_17-web服务器与网站发布",[18,143394,143396],{"id":143395},"_171-web服务器","17.1 Web服务器",[14,143398,143399],{},"把自己网站上传到服务器上，可以让其他人访问",[2918,143401],{"style":127661,"src":143402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,143404,143405,143408,143409],{},[480,143406,143407],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[480,143410,143411],{},"Web 服务器等",[14,143413,143414,143415,102271,143418,26993],{},"根据服务器在网络中所在的位置不同，又可分为 ",[480,143416,143417],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[480,143419,143420],{},"远程服务器",[1599,143422,143424],{"id":143423},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,143426,143427],{},[480,143428,143429],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,143431,143432,143433],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[126,143434,143435],{"href":143435,"rel":143436},"http:\u002F\u002Ffree.3v.do\u002F",[25117],[561,143438,143439,143442,143445,143452],{},[564,143440,143441],{},"去免费空间网站注册账号。",[564,143443,143444],{},"记录下主机名、用户名、密码、域名。",[564,143446,143447,143448,143451],{},"利用 ",[30,143449,143450],{},"utftp"," 软件 上传网站到远程服务器",[564,143453,143454],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,143456,143457],{},"使用软件上传，对上传软件文件进行解压",[2918,143459],{"style":127661,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2918,143462],{"style":127661,"src":143463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,143465,143466],{},"输入刚刚申请的服务器账号信息：",[2918,143468],{"style":127661,"src":143469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2918,143471],{"style":127661,"src":143472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2918,143474],{"style":127661,"src":143475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2918,143477],{"style":127661,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,143480,143481],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2918,143483],{"style":127661,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,143486,143487],{},"浏览器输入域名即可访问",[14,143489,143490],{},"首页一定必须是index",{"title":28,"searchDepth":51,"depth":51,"links":143492},[143493],{"id":143395,"depth":51,"text":143396,"children":143494},[143495],{"id":143423,"depth":57,"text":143424},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143387,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143502,"title":143503,"body":143504,"description":24628,"extension":1557,"meta":144431,"navigation":159,"path":144432,"seo":144433,"stem":144434,"__hash__":144435},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143505,"toc":144414},[143506,143509,143513,143516,143519,143530,143533,143537,143541,143546,143549,143552,143555,143558,143562,143588,143592,143596,143599,143602,143606,143639,143643,143646,143649,143713,143717,143721,143724,143727,143730,143734,143779,143783,143786,143816,143820,143824,143827,143830,143834,143837,143906,143909,144017,144019,144025,144029,144032,144035,144131,144134,144138,144162,144166,144169,144173,144176,144180,144183,144186,144189,144192,144196,144199,144202,144206,144210,144213,144216,144219,144222,144226,144229,144233,144236,144239,144284,144288,144292,144295,144298,144301,144333,144337,144340,144374,144378,144381,144411],[10,143507,143503],{"id":143508},"_18-2d动画与3d转换",[18,143510,143512],{"id":143511},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,143514,143515],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,143517,143518],{},"转换（transform）你可以简单理解为变形",[561,143520,143521,143524,143527],{},[564,143522,143523],{},"移动：translate",[564,143525,143526],{},"旋转：rotate",[564,143528,143529],{},"缩放：scale",[2918,143531],{"style":127661,"src":143532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[1599,143534,143536],{"id":143535},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23249,143538,143540],{"id":143539},"_18111-translate介绍","18.1.1.1 translate介绍",[14,143542,143543,143544],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[480,143545,134464],{},[2918,143547],{"style":127661,"src":143548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,143550,143551],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,143553,143554],{},"对于行内元素无效",[14,143556,143557],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23249,143559,143561],{"id":143560},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[23,143563,143564],{"className":127805,"code":139994,"language":127807,"meta":28,"style":28},[30,143565,143566,143572,143584],{"__ignoreMap":28},[33,143567,143568,143570],{"class":35,"line":36},[33,143569,52864],{"class":52553},[33,143571,16823],{"class":47},[33,143573,143574,143576,143578,143580,143582],{"class":35,"line":51},[33,143575,71723],{"class":76},[33,143577,52690],{"class":47},[33,143579,766],{"class":76},[33,143581,52809],{"class":76},[33,143583,80],{"class":47},[33,143585,143586],{"class":35,"line":57},[33,143587,231],{"class":47},[1599,143589,143591],{"id":143590},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23249,143593,143595],{"id":143594},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,143597,143598],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2918,143600],{"style":127661,"src":143601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23249,143603,143605],{"id":143604},"_18122-旋转效果","18.1.2.2 旋转效果",[23,143607,143609],{"className":127805,"code":143608,"language":127807,"meta":28,"style":28},"div {\n  transform: rotate(45deg);\n}\n",[30,143610,143611,143617,143635],{"__ignoreMap":28},[33,143612,143613,143615],{"class":35,"line":36},[33,143614,52864],{"class":52553},[33,143616,16823],{"class":47},[33,143618,143619,143621,143623,143626,143628,143630,143633],{"class":35,"line":51},[33,143620,137789],{"class":76},[33,143622,52690],{"class":47},[33,143624,143625],{"class":76},"rotate",[33,143627,345],{"class":47},[33,143629,2130],{"class":76},[33,143631,143632],{"class":39},"deg",[33,143634,4130],{"class":47},[33,143636,143637],{"class":35,"line":57},[33,143638,231],{"class":47},[23249,143640,143642],{"id":143641},"_18123-三角做法","18.1.2.3 三角做法",[14,143644,143645],{},"该下标当经过最外层大盒子时会实现向上反转",[2918,143647],{"style":127661,"src":143648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[23,143650,143651],{"className":127805,"code":136325,"language":127807,"meta":28,"style":28},[30,143652,143653,143657,143663,143673,143683,143699,143709],{"__ignoreMap":28},[33,143654,143655],{"class":35,"line":36},[33,143656,136332],{"class":60},[33,143658,143659,143661],{"class":35,"line":51},[33,143660,136337],{"class":43},[33,143662,16823],{"class":47},[33,143664,143665,143667,143669,143671],{"class":35,"line":57},[33,143666,71821],{"class":76},[33,143668,52690],{"class":47},[33,143670,766],{"class":76},[33,143672,80],{"class":47},[33,143674,143675,143677,143679,143681],{"class":35,"line":64},[33,143676,72041],{"class":76},[33,143678,52690],{"class":47},[33,143680,766],{"class":76},[33,143682,80],{"class":47},[33,143684,143685,143687,143689,143691,143693,143695,143697],{"class":35,"line":83},[33,143686,72149],{"class":76},[33,143688,52690],{"class":47},[33,143690,77],{"class":76},[33,143692,52745],{"class":39},[33,143694,52774],{"class":76},[33,143696,65244],{"class":76},[33,143698,80],{"class":47},[33,143700,143701,143703,143705,143707],{"class":35,"line":89},[33,143702,136380],{"class":76},[33,143704,52690],{"class":47},[33,143706,63622],{"class":76},[33,143708,80],{"class":47},[33,143710,143711],{"class":35,"line":98},[33,143712,231],{"class":47},[1599,143714,143716],{"id":143715},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23249,143718,143720],{"id":143719},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,143722,143723],{},"设置中心点",[2918,143725],{"style":127661,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,143728,143729],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23249,143731,143733],{"id":143732},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[23,143735,143737],{"className":127805,"code":143736,"language":127807,"meta":28,"style":28},"\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",[30,143738,143739,143744,143750,143765,143770,143775],{"__ignoreMap":28},[33,143740,143741],{"class":35,"line":36},[33,143742,143743],{"class":60},"\u002F* 转换中心点 *\u002F\n",[33,143745,143746,143748],{"class":35,"line":51},[33,143747,52864],{"class":52553},[33,143749,16823],{"class":47},[33,143751,143752,143755,143757,143759,143761,143763],{"class":35,"line":57},[33,143753,143754],{"class":76},"  transform-origin",[33,143756,52690],{"class":47},[33,143758,52845],{"class":76},[33,143760,18395],{"class":76},[33,143762,131668],{"class":47},[33,143764,136478],{"class":60},[33,143766,143767],{"class":35,"line":64},[33,143768,143769],{"class":60},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[33,143771,143772],{"class":35,"line":83},[33,143773,143774],{"class":60},"  \u002F* transform-origin: left top; *\u002F\n",[33,143776,143777],{"class":35,"line":89},[33,143778,231],{"class":47},[23249,143780,143782],{"id":143781},"_18133-旋转案例","18.1.3.3 旋转案例",[2918,143784],{"style":127661,"src":143785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[23,143787,143788],{"className":127805,"code":143608,"language":127807,"meta":28,"style":28},[30,143789,143790,143796,143812],{"__ignoreMap":28},[33,143791,143792,143794],{"class":35,"line":36},[33,143793,52864],{"class":52553},[33,143795,16823],{"class":47},[33,143797,143798,143800,143802,143804,143806,143808,143810],{"class":35,"line":51},[33,143799,137789],{"class":76},[33,143801,52690],{"class":47},[33,143803,143625],{"class":76},[33,143805,345],{"class":47},[33,143807,2130],{"class":76},[33,143809,143632],{"class":39},[33,143811,4130],{"class":47},[33,143813,143814],{"class":35,"line":57},[33,143815,231],{"class":47},[1599,143817,143819],{"id":143818},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23249,143821,143823],{"id":143822},"_18141-scale介绍","18.1.4.1 scale介绍",[14,143825,143826],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2918,143828],{"style":127661,"src":143829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23249,143831,143833],{"id":143832},"_18142-分页按钮","18.1.4.2 分页按钮",[2918,143835],{"style":127661,"src":143836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[23,143838,143840],{"className":127805,"code":143839,"language":127807,"meta":28,"style":28},"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",[30,143841,143842,143848,143864,143868,143872,143877,143883,143897,143902],{"__ignoreMap":28},[33,143843,143844,143846],{"class":35,"line":36},[33,143845,52864],{"class":52553},[33,143847,16823],{"class":47},[33,143849,143850,143852,143854,143857,143859,143862],{"class":35,"line":51},[33,143851,137789],{"class":76},[33,143853,52690],{"class":47},[33,143855,143856],{"class":76},"scale",[33,143858,345],{"class":47},[33,143860,143861],{"class":76},"1.2",[33,143863,4130],{"class":47},[33,143865,143866],{"class":35,"line":57},[33,143867,231],{"class":47},[33,143869,143870],{"class":35,"line":64},[33,143871,137266],{"class":47},[33,143873,143874],{"class":35,"line":83},[33,143875,143876],{"class":60},"\u002F* 2D 缩放 *\u002F\n",[33,143878,143879,143881],{"class":35,"line":89},[33,143880,52864],{"class":52553},[33,143882,16823],{"class":47},[33,143884,143885,143887,143889,143891,143893,143895],{"class":35,"line":98},[33,143886,137789],{"class":76},[33,143888,52690],{"class":47},[33,143890,143856],{"class":76},[33,143892,345],{"class":47},[33,143894,143861],{"class":76},[33,143896,4130],{"class":47},[33,143898,143899],{"class":35,"line":110},[33,143900,143901],{"class":60},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[33,143903,143904],{"class":35,"line":134},[33,143905,231],{"class":47},[14,143907,143908],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[23,143910,143912],{"className":127805,"code":143911,"language":127807,"meta":28,"style":28},"\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",[30,143913,143914,143919,143929,143950,143971,143975,143980,143986,144013],{"__ignoreMap":28},[33,143915,143916],{"class":35,"line":36},[33,143917,143918],{"class":60},"\u002F* 定义动画 *\u002F\n",[33,143920,143921,143924,143927],{"class":35,"line":51},[33,143922,143923],{"class":39},"@keyframes",[33,143925,143926],{"class":955}," move",[33,143928,16823],{"class":47},[33,143930,143931,143934,143936,143938,143940,143943,143945,143947],{"class":35,"line":57},[33,143932,143933],{"class":43},"  0%",[33,143935,81060],{"class":47},[33,143937,49387],{"class":76},[33,143939,52690],{"class":47},[33,143941,143942],{"class":76},"translateX",[33,143944,345],{"class":47},[33,143946,766],{"class":76},[33,143948,143949],{"class":47},"); }\n",[33,143951,143952,143955,143957,143959,143961,143963,143965,143967,143969],{"class":35,"line":64},[33,143953,143954],{"class":43},"  100%",[33,143956,81060],{"class":47},[33,143958,49387],{"class":76},[33,143960,52690],{"class":47},[33,143962,143942],{"class":76},[33,143964,345],{"class":47},[33,143966,457],{"class":76},[33,143968,52745],{"class":39},[33,143970,143949],{"class":47},[33,143972,143973],{"class":35,"line":83},[33,143974,231],{"class":47},[33,143976,143977],{"class":35,"line":89},[33,143978,143979],{"class":60},"\u002F* 调用动画 *\u002F\n",[33,143981,143982,143984],{"class":35,"line":98},[33,143983,52864],{"class":52553},[33,143985,16823],{"class":47},[33,143987,143988,143991,143993,143995,143997,143999,144001,144003,144005,144008,144011],{"class":35,"line":110},[33,143989,143990],{"class":76},"  animation",[33,143992,52690],{"class":47},[33,143994,136491],{"class":76},[33,143996,26371],{"class":76},[33,143998,2295],{"class":39},[33,144000,79933],{"class":76},[33,144002,5492],{"class":76},[33,144004,2295],{"class":39},[33,144006,144007],{"class":76}," infinite",[33,144009,144010],{"class":76}," alternate",[33,144012,80],{"class":47},[33,144014,144015],{"class":35,"line":134},[33,144016,231],{"class":47},[14,144018,143908],{},[23,144020,144023],{"className":144021,"code":144022,"language":6578},[6576],"\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",[30,144024,144022],{"__ignoreMap":28},[23249,144026,144028],{"id":144027},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,144030,144031],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2918,144033],{"style":127661,"src":144034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[23,144036,144037],{"className":127805,"code":143911,"language":127807,"meta":28,"style":28},[30,144038,144039,144043,144051,144069,144089,144093,144097,144103,144127],{"__ignoreMap":28},[33,144040,144041],{"class":35,"line":36},[33,144042,143918],{"class":60},[33,144044,144045,144047,144049],{"class":35,"line":51},[33,144046,143923],{"class":39},[33,144048,143926],{"class":955},[33,144050,16823],{"class":47},[33,144052,144053,144055,144057,144059,144061,144063,144065,144067],{"class":35,"line":57},[33,144054,143933],{"class":43},[33,144056,81060],{"class":47},[33,144058,49387],{"class":76},[33,144060,52690],{"class":47},[33,144062,143942],{"class":76},[33,144064,345],{"class":47},[33,144066,766],{"class":76},[33,144068,143949],{"class":47},[33,144070,144071,144073,144075,144077,144079,144081,144083,144085,144087],{"class":35,"line":64},[33,144072,143954],{"class":43},[33,144074,81060],{"class":47},[33,144076,49387],{"class":76},[33,144078,52690],{"class":47},[33,144080,143942],{"class":76},[33,144082,345],{"class":47},[33,144084,457],{"class":76},[33,144086,52745],{"class":39},[33,144088,143949],{"class":47},[33,144090,144091],{"class":35,"line":83},[33,144092,231],{"class":47},[33,144094,144095],{"class":35,"line":89},[33,144096,143979],{"class":60},[33,144098,144099,144101],{"class":35,"line":98},[33,144100,52864],{"class":52553},[33,144102,16823],{"class":47},[33,144104,144105,144107,144109,144111,144113,144115,144117,144119,144121,144123,144125],{"class":35,"line":110},[33,144106,143990],{"class":76},[33,144108,52690],{"class":47},[33,144110,136491],{"class":76},[33,144112,26371],{"class":76},[33,144114,2295],{"class":39},[33,144116,79933],{"class":76},[33,144118,5492],{"class":76},[33,144120,2295],{"class":39},[33,144122,144007],{"class":76},[33,144124,144010],{"class":76},[33,144126,80],{"class":47},[33,144128,144129],{"class":35,"line":134},[33,144130,231],{"class":47},[14,144132,144133],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[1599,144135,144137],{"id":144136},"_1823-知识点回顾","18.2.3 知识点回顾",[23,144139,144140],{"className":127805,"code":129974,"language":127807,"meta":28,"style":28},[30,144141,144142,144148,144158],{"__ignoreMap":28},[33,144143,144144,144146],{"class":35,"line":36},[33,144145,52864],{"class":52553},[33,144147,16823],{"class":47},[33,144149,144150,144152,144154,144156],{"class":35,"line":51},[33,144151,129987],{"class":76},[33,144153,52690],{"class":47},[33,144155,62989],{"class":76},[33,144157,80],{"class":47},[33,144159,144160],{"class":35,"line":57},[33,144161,231],{"class":47},[18,144163,144165],{"id":144164},"_183-3d-转换","18.3 3D 转换",[14,144167,144168],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[1599,144170,144172],{"id":144171},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2918,144174],{"style":127661,"src":144175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[1599,144177,144179],{"id":144178},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2918,144181],{"style":127661,"src":144182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,144184,144185],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,144187,144188],{},"translate3d的效果需要搭配透视perspective来使用",[2918,144190],{"style":127661,"src":144191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[1599,144193,144195],{"id":144194},"_1833-透视-perspective","18.3.3 透视 perspective",[2918,144197],{"style":127661,"src":144198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,144200,144201],{},"透视写在父盒子上，单位为像素",[1599,144203,144205],{"id":144204},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23249,144207,144209],{"id":144208},"_18341-分开解释","18.3.4.1 分开解释",[2918,144211],{"style":127661,"src":144212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2918,144214],{"style":127661,"src":144215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2918,144217],{"style":127661,"src":144218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,144220,144221],{},"总结来说就是左手原则",[23249,144223,144225],{"id":144224},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2918,144227],{"style":127661,"src":144228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[1599,144230,144232],{"id":144231},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2918,144234],{"style":127661,"src":144235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2918,144237],{"style":127661,"src":144238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[23,144240,144242],{"className":127805,"code":144241,"language":127807,"meta":28,"style":28},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[30,144243,144244,144250,144263,144280],{"__ignoreMap":28},[33,144245,144246,144248],{"class":35,"line":36},[33,144247,52864],{"class":52553},[33,144249,16823],{"class":47},[33,144251,144252,144255,144257,144259,144261],{"class":35,"line":51},[33,144253,144254],{"class":76},"  perspective",[33,144256,52690],{"class":47},[33,144258,66327],{"class":76},[33,144260,52745],{"class":39},[33,144262,80],{"class":47},[33,144264,144265,144267,144269,144272,144274,144276,144278],{"class":35,"line":57},[33,144266,137789],{"class":76},[33,144268,52690],{"class":47},[33,144270,144271],{"class":76},"rotateX",[33,144273,345],{"class":47},[33,144275,2130],{"class":76},[33,144277,143632],{"class":39},[33,144279,4130],{"class":47},[33,144281,144282],{"class":35,"line":64},[33,144283,231],{"class":47},[1599,144285,144287],{"id":144286},"_1836-案例","18.3.6 案例",[23249,144289,144291],{"id":144290},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2918,144293],{"style":127661,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2918,144296],{"style":127661,"src":144297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2918,144299],{"style":127661,"src":144300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[23,144302,144304],{"className":127805,"code":144303,"language":127807,"meta":28,"style":28},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[30,144305,144306,144311,144317,144329],{"__ignoreMap":28},[33,144307,144308],{"class":35,"line":36},[33,144309,144310],{"class":60},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[33,144312,144313,144315],{"class":35,"line":51},[33,144314,134802],{"class":43},[33,144316,16823],{"class":47},[33,144318,144319,144321,144323,144325,144327],{"class":35,"line":57},[33,144320,144254],{"class":76},[33,144322,52690],{"class":47},[33,144324,66327],{"class":76},[33,144326,52745],{"class":39},[33,144328,80],{"class":47},[33,144330,144331],{"class":35,"line":64},[33,144332,231],{"class":47},[23249,144334,144336],{"id":144335},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2918,144338],{"style":127661,"src":144339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[23,144341,144342],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,144343,144344,144348,144362,144366],{"__ignoreMap":28},[33,144345,144346],{"class":35,"line":36},[33,144347,131916],{"class":60},[33,144349,144350,144352,144354,144356,144358,144360],{"class":35,"line":51},[33,144351,875],{"class":47},[33,144353,52864],{"class":52553},[33,144355,54739],{"class":43},[33,144357,73],{"class":47},[33,144359,131929],{"class":119},[33,144361,52560],{"class":47},[33,144363,144364],{"class":35,"line":57},[33,144365,131936],{"class":47},[33,144367,144368,144370,144372],{"class":35,"line":64},[33,144369,53038],{"class":47},[33,144371,52864],{"class":52553},[33,144373,52560],{"class":47},[23249,144375,144377],{"id":144376},"_18363-旋转木马","18.3.6.3 旋转木马",[2918,144379],{"style":127661,"src":144380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[23,144382,144383],{"className":127805,"code":143608,"language":127807,"meta":28,"style":28},[30,144384,144385,144391,144407],{"__ignoreMap":28},[33,144386,144387,144389],{"class":35,"line":36},[33,144388,52864],{"class":52553},[33,144390,16823],{"class":47},[33,144392,144393,144395,144397,144399,144401,144403,144405],{"class":35,"line":51},[33,144394,137789],{"class":76},[33,144396,52690],{"class":47},[33,144398,143625],{"class":76},[33,144400,345],{"class":47},[33,144402,2130],{"class":76},[33,144404,143632],{"class":39},[33,144406,4130],{"class":47},[33,144408,144409],{"class":35,"line":57},[33,144410,231],{"class":47},[1544,144412,144413],{},"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":28,"searchDepth":51,"depth":51,"links":144415},[144416,144423],{"id":143511,"depth":51,"text":143512,"children":144417},[144418,144419,144420,144421,144422],{"id":143535,"depth":57,"text":143536},{"id":143590,"depth":57,"text":143591},{"id":143715,"depth":57,"text":143716},{"id":143818,"depth":57,"text":143819},{"id":144136,"depth":57,"text":144137},{"id":144164,"depth":51,"text":144165,"children":144424},[144425,144426,144427,144428,144429,144430],{"id":144171,"depth":57,"text":144172},{"id":144178,"depth":57,"text":144179},{"id":144194,"depth":57,"text":144195},{"id":144204,"depth":57,"text":144205},{"id":144231,"depth":57,"text":144232},{"id":144286,"depth":57,"text":144287},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143503,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144437,"title":144438,"body":144439,"description":24628,"extension":1557,"meta":144642,"navigation":159,"path":144643,"seo":144644,"stem":144645,"__hash__":144646},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144440,"toc":144631},[144441,144444,144448,144451,144454,144458,144461,144464,144467,144471,144474,144478,144481,144485,144488,144492,144506,144510,144535,144538,144541,144558,144562,144566,144569,144572,144576,144579,144582,144600,144604,144607,144621,144625,144628],[10,144442,144438],{"id":144443},"_19-移动端基础-前缀现状与视口",[18,144445,144447],{"id":144446},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2918,144449],{"style":127661,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,144452,144453],{},"意思就是加个前缀，增加兼容性",[18,144455,144457],{"id":144456},"_192-移动端现状认识","19.2 移动端现状认识",[2918,144459],{"style":127661,"src":144460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,144462,144463],{},"调试方法：",[2918,144465],{"style":127661,"src":144466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[18,144468,144470],{"id":144469},"_193-视口","19.3 视口",[14,144472,144473],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[1599,144475,144477],{"id":144476},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2918,144479],{"style":127661,"src":144480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[1599,144482,144484],{"id":144483},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2918,144486],{"style":127661,"src":144487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[1599,144489,144491],{"id":144490},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[561,144493,144494,144497,144500,144503],{},[564,144495,144496],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[564,144498,144499],{},"理想视口，对设备来讲，是最理想的视口尺寸",[564,144501,144502],{},"需要手动添写meta视口标签通知浏览器操作",[564,144504,144505],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[1599,144507,144509],{"id":144508},"_1934-meta视口标签","19.3.4 meta视口标签",[23,144511,144513],{"className":128552,"code":144512,"language":128554,"meta":28,"style":28},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[30,144514,144515],{"__ignoreMap":28},[33,144516,144517,144519,144521,144523,144525,144527,144529,144531,144533],{"class":35,"line":36},[33,144518,875],{"class":47},[33,144520,52597],{"class":52553},[33,144522,16171],{"class":43},[33,144524,73],{"class":47},[33,144526,52644],{"class":119},[33,144528,52624],{"class":43},[33,144530,73],{"class":47},[33,144532,52651],{"class":119},[33,144534,52560],{"class":47},[2918,144536],{"style":127661,"src":144537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,144539,144540],{},"标准视口设置：",[574,144542,144543,144546,144549,144552,144555],{},[564,144544,144545],{},"视口宽度和设备保持一致",[564,144547,144548],{},"视口的默认缩放比例1.0",[564,144550,144551],{},"不允许用户自行缩放",[564,144553,144554],{},"最大允许的缩放比例1.0",[564,144556,144557],{},"最小允许的缩放比例1.0",[1599,144559,144561],{"id":144560},"_1935-二倍图","19.3.5 二倍图",[23249,144563,144565],{"id":144564},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2918,144567],{"style":127661,"src":144568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2918,144570],{"style":127661,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23249,144573,144575],{"id":144574},"_19352-多倍图","19.3.5.2 多倍图",[2918,144577],{"style":127661,"src":144578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,144580,144581],{},"二倍图法，代码如下：",[23,144583,144585],{"className":127805,"code":144584,"language":127807,"meta":28,"style":28},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[30,144586,144587,144592],{"__ignoreMap":28},[33,144588,144589],{"class":35,"line":36},[33,144590,144591],{"class":60},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[33,144593,144594,144597],{"class":35,"line":51},[33,144595,144596],{"class":52553},"background-size",[33,144598,144599],{"class":47},": 50% 50%;\n",[23249,144601,144603],{"id":144602},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2918,144605],{"style":127661,"src":144606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[574,144608,144609,144612,144615,144618],{},[564,144610,144611],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[564,144613,144614],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[564,144616,144617],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[564,144619,144620],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23249,144622,144624],{"id":144623},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2918,144626],{"style":127661,"src":144627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1544,144629,144630],{},"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":28,"searchDepth":51,"depth":51,"links":144632},[144633,144634,144635],{"id":144446,"depth":51,"text":144447},{"id":144456,"depth":51,"text":144457},{"id":144469,"depth":51,"text":144470,"children":144636},[144637,144638,144639,144640,144641],{"id":144476,"depth":57,"text":144477},{"id":144483,"depth":57,"text":144484},{"id":144490,"depth":57,"text":144491},{"id":144508,"depth":57,"text":144509},{"id":144560,"depth":57,"text":144561},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144438,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144648,"title":144649,"body":144650,"description":24628,"extension":1557,"meta":145527,"navigation":159,"path":145528,"seo":145529,"stem":145530,"__hash__":145531},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144651,"toc":145511},[144652,144655,144659,144666,144669,144676,144679,144684,144687,144691,144695,144702,144705,144708,144712,144715,144718,144721,144724,144727,144731,144734,144738,144740,144743,144746,144749,144752,144754,144757,144759,144789,144791,144821,144825,144828,144832,144835,144852,144855,144858,144934,144936,144939,144942,144945,144948,144950,144953,144956,144960,144982,144985,144988,144992,144995,145001,145004,145008,145011,145014,145018,145021,145024,145027,145031,145034,145037,145040,145043,145047,145050,145054,145061,145064,145067,145070,145073,145083,145086,145089,145096,145099,145103,145106,145109,145113,145116,145119,145122,145167,145170,145173,145176,145178,145307,145309,145347,145350,145353,145355,145473,145475,145509],[10,144653,144649],{"id":144654},"_20-移动端布局实战上篇",[18,144656,144658],{"id":144657},"_201-移动端主流方案","20.1 移动端主流方案",[574,144660,144661],{},[564,144662,144663],{},[480,144664,144665],{},"单独移动端页面（主流）",[2918,144667],{"style":127661,"src":144668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[574,144670,144671],{"start":51},[564,144672,144673],{},[480,144674,144675],{},"响应式兼容PC移动端",[2918,144677],{"style":127661,"src":144678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[574,144680,144681],{"start":57},[564,144682,144683],{},"两种页面选型布局方式",[2918,144685],{"style":127661,"src":144686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[18,144688,144690],{"id":144689},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[1599,144692,144694],{"id":144693},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,144696,144697,144698],{},"官网地址： ",[126,144699,144700],{"href":144700,"rel":144701},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25117],[2918,144703],{"style":127661,"src":144704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2918,144706],{"style":127661,"src":144707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[1599,144709,144711],{"id":144710},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2918,144713],{"style":127661,"src":144714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2918,144716],{"style":127661,"src":144717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,144719,144720],{},"去除高亮：",[14,144722,144723],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,144725,144726],{},"-webkit- tap-highlight-color: transparent;",[18,144728,144730],{"id":144729},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2918,144732],{"style":127661,"src":144733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[18,144735,144737],{"id":144736},"_204-流式布局案例","20.4 流式布局案例",[14,144739,1656],{},[14,144741,144742],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,144744,144745],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,144747,144748],{},"图片格式：",[2918,144750],{"style":127661,"src":144751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,144753,136848],{},[2918,144755],{"style":127661,"src":144756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,144758,141175],{},[23,144760,144761],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,144762,144763],{"__ignoreMap":28},[33,144764,144765,144767,144769,144771,144773,144775,144777,144779,144781,144783,144785,144787],{"class":35,"line":36},[33,144766,875],{"class":47},[33,144768,2918],{"class":52553},[33,144770,56492],{"class":43},[33,144772,73],{"class":47},[33,144774,135322],{"class":119},[33,144776,56500],{"class":43},[33,144778,73],{"class":47},[33,144780,135329],{"class":119},[33,144782,135332],{"class":43},[33,144784,73],{"class":47},[33,144786,135337],{"class":119},[33,144788,52560],{"class":47},[14,144790,141264],{},[23,144792,144793],{"className":128552,"code":135307,"language":128554,"meta":28,"style":28},[30,144794,144795],{"__ignoreMap":28},[33,144796,144797,144799,144801,144803,144805,144807,144809,144811,144813,144815,144817,144819],{"class":35,"line":36},[33,144798,875],{"class":47},[33,144800,2918],{"class":52553},[33,144802,56492],{"class":43},[33,144804,73],{"class":47},[33,144806,135322],{"class":119},[33,144808,56500],{"class":43},[33,144810,73],{"class":47},[33,144812,135329],{"class":119},[33,144814,135332],{"class":43},[33,144816,73],{"class":47},[33,144818,135337],{"class":119},[33,144820,52560],{"class":47},[18,144822,144824],{"id":144823},"_205-flex布局","20.5 flex布局",[2918,144826],{"style":127661,"src":144827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[1599,144829,144831],{"id":144830},"_2051-布局原理","20.5.1 布局原理",[14,144833,144834],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[561,144836,144837,144840,144843,144846,144849],{},[564,144838,144839],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[564,144841,144842],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[564,144844,144845],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[564,144847,144848],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[564,144850,144851],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,144853,144854],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,144856,144857],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[23,144859,144861],{"className":127805,"code":144860,"language":127807,"meta":28,"style":28},"\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",[30,144862,144863,144868,144875,144885,144897,144908,144919,144930],{"__ignoreMap":28},[33,144864,144865],{"class":35,"line":36},[33,144866,144867],{"class":60},"\u002F* Flex 弹性布局 *\u002F\n",[33,144869,144870,144873],{"class":35,"line":51},[33,144871,144872],{"class":43},".container",[33,144874,16823],{"class":47},[33,144876,144877,144879,144881,144883],{"class":35,"line":57},[33,144878,129421],{"class":76},[33,144880,52690],{"class":47},[33,144882,52730],{"class":76},[33,144884,80],{"class":47},[33,144886,144887,144890,144892,144895],{"class":35,"line":64},[33,144888,144889],{"class":76},"  flex-direction",[33,144891,52690],{"class":47},[33,144893,144894],{"class":76},"row",[33,144896,80],{"class":47},[33,144898,144899,144902,144904,144906],{"class":35,"line":83},[33,144900,144901],{"class":76},"  justify-content",[33,144903,52690],{"class":47},[33,144905,52921],{"class":76},[33,144907,80],{"class":47},[33,144909,144910,144913,144915,144917],{"class":35,"line":89},[33,144911,144912],{"class":76},"  align-items",[33,144914,52690],{"class":47},[33,144916,52845],{"class":76},[33,144918,80],{"class":47},[33,144920,144921,144924,144926,144928],{"class":35,"line":98},[33,144922,144923],{"class":76},"  flex-wrap",[33,144925,52690],{"class":47},[33,144927,79863],{"class":76},[33,144929,80],{"class":47},[33,144931,144932],{"class":35,"line":110},[33,144933,231],{"class":47},[14,144935,71706],{},[14,144937,144938],{},".form-item .male-label {",[14,144940,144941],{},"   margin-right: 20px;",[14,144943,144944],{},"   display: inline-flex;",[14,144946,144947],{},"   align-items: center;",[14,144949,2542],{},[2918,144951],{"style":127661,"src":144952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2918,144954],{"style":127661,"src":144955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[1599,144957,144959],{"id":144958},"_2052-常见父项属性","20.5.2 常见父项属性",[574,144961,144962,144965,144968,144971,144974,144977,144980],{},[564,144963,144964],{},"flex-direction：设置主轴的方向",[564,144966,144967],{},"justify-content：设置主轴上的子元素排列方式",[564,144969,144970],{},"flex-wrap：设置子元素是否换行",[564,144972,144973],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[564,144975,144976],{},"align-items：设置侧轴上的子元素排列方式（单行）",[564,144978,144979],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[564,144981,144964],{},[2918,144983],{"style":127661,"src":144984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2918,144986],{"style":127661,"src":144987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[574,144989,144990],{"start":51},[564,144991,144967],{},[2918,144993],{"style":127661,"src":144994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144996,144997,145000],{},[30,144998,144999],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,145002,145003],{},"跟着主轴走",[574,145005,145006],{"start":57},[564,145007,144970],{},[2918,145009],{"style":127661,"src":145010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,145012,145013],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[574,145015,145016],{"start":64},[564,145017,144973],{},[2918,145019],{"style":127661,"src":145020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,145022,145023],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,145025,145026],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[574,145028,145029],{"start":83},[564,145030,144976],{},[2918,145032],{"style":127661,"src":145033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,145035,145036],{},"align-items与align-content之间的区别：",[14,145038,145039],{},"单找items，多找content",[2918,145041],{"style":127661,"src":145042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[574,145044,145045],{"start":89},[564,145046,144979],{},[2918,145048],{"style":127661,"src":145049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[1599,145051,145053],{"id":145052},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[574,145055,145056],{},[564,145057,145058],{},[480,145059,145060],{},"flex 属性",[14,145062,145063],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2918,145065],{"style":127661,"src":145066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,145068,145069],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,145071,145072],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[574,145074,145075],{"start":51},[564,145076,145077,15046,145080],{},[480,145078,145079],{},"align-self",[480,145081,145082],{},"控制子项自己在侧轴上的排列方式",[2918,145084],{"style":127661,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,145087,145088],{},"单个子盒子在父盒子侧轴上的排列方式",[574,145090,145091],{"start":57},[564,145092,145093,145095],{},[480,145094,96550],{}," 属性定义项目的排列顺序",[2918,145097],{"style":127661,"src":145098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[1599,145100,145102],{"id":145101},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2918,145104],{"style":127661,"src":145105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,145107,145108],{},"必须要添加浏览器的私有前缀",[1599,145110,145112],{"id":145111},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,145114,145115],{},"学到最重要的知识：",[14,145117,145118],{},"flex处理这样的布局思路",[2918,145120],{"style":127661,"src":145121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[23,145123,145125],{"className":127805,"code":145124,"language":127807,"meta":28,"style":28},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[30,145126,145127,145133,145143,145153,145163],{"__ignoreMap":28},[33,145128,145129,145131],{"class":35,"line":36},[33,145130,144872],{"class":43},[33,145132,16823],{"class":47},[33,145134,145135,145137,145139,145141],{"class":35,"line":51},[33,145136,129421],{"class":76},[33,145138,52690],{"class":47},[33,145140,52730],{"class":76},[33,145142,80],{"class":47},[33,145144,145145,145147,145149,145151],{"class":35,"line":57},[33,145146,144901],{"class":76},[33,145148,52690],{"class":47},[33,145150,52845],{"class":76},[33,145152,80],{"class":47},[33,145154,145155,145157,145159,145161],{"class":35,"line":64},[33,145156,144912],{"class":76},[33,145158,52690],{"class":47},[33,145160,52845],{"class":76},[33,145162,80],{"class":47},[33,145164,145165],{"class":35,"line":83},[33,145166,231],{"class":47},[14,145168,145169],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,145171,145172],{},"使用属性选择器",[2918,145174],{"style":127661,"src":145175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,145177,70142],{},[23,145179,145181],{"className":128552,"code":145180,"language":128554,"meta":28,"style":28},"\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",[30,145182,145183,145188,145202,145207,145227,145232,145251,145256,145275,145280,145299],{"__ignoreMap":28},[33,145184,145185],{"class":35,"line":36},[33,145186,145187],{"class":60},"\u003C!-- 携程网移动端案例结构 -->\n",[33,145189,145190,145192,145194,145196,145198,145200],{"class":35,"line":51},[33,145191,875],{"class":47},[33,145193,52864],{"class":52553},[33,145195,54739],{"class":43},[33,145197,73],{"class":47},[33,145199,93576],{"class":119},[33,145201,52560],{"class":47},[33,145203,145204],{"class":35,"line":57},[33,145205,145206],{"class":60},"  \u003C!-- 搜索栏 -->\n",[33,145208,145209,145211,145213,145215,145217,145220,145223,145225],{"class":35,"line":64},[33,145210,53397],{"class":47},[33,145212,52864],{"class":52553},[33,145214,54739],{"class":43},[33,145216,73],{"class":47},[33,145218,145219],{"class":119},"\"search-index\"",[33,145221,145222],{"class":47},">...\u003C\u002F",[33,145224,52864],{"class":52553},[33,145226,52560],{"class":47},[33,145228,145229],{"class":35,"line":83},[33,145230,145231],{"class":60},"  \u003C!-- 焦点图 -->\n",[33,145233,145234,145236,145238,145240,145242,145245,145247,145249],{"class":35,"line":89},[33,145235,53397],{"class":47},[33,145237,52864],{"class":52553},[33,145239,54739],{"class":43},[33,145241,73],{"class":47},[33,145243,145244],{"class":119},"\"focus\"",[33,145246,145222],{"class":47},[33,145248,52864],{"class":52553},[33,145250,52560],{"class":47},[33,145252,145253],{"class":35,"line":98},[33,145254,145255],{"class":60},"  \u003C!-- 主导航 -->\n",[33,145257,145258,145260,145262,145264,145266,145269,145271,145273],{"class":35,"line":110},[33,145259,53397],{"class":47},[33,145261,52864],{"class":52553},[33,145263,54739],{"class":43},[33,145265,73],{"class":47},[33,145267,145268],{"class":119},"\"local-nav\"",[33,145270,145222],{"class":47},[33,145272,52864],{"class":52553},[33,145274,52560],{"class":47},[33,145276,145277],{"class":35,"line":134},[33,145278,145279],{"class":60},"  \u003C!-- 子导航 -->\n",[33,145281,145282,145284,145286,145288,145290,145293,145295,145297],{"class":35,"line":156},[33,145283,53397],{"class":47},[33,145285,52864],{"class":52553},[33,145287,54739],{"class":43},[33,145289,73],{"class":47},[33,145291,145292],{"class":119},"\"nav-common\"",[33,145294,145222],{"class":47},[33,145296,52864],{"class":52553},[33,145298,52560],{"class":47},[33,145300,145301,145303,145305],{"class":35,"line":163},[33,145302,53038],{"class":47},[33,145304,52864],{"class":52553},[33,145306,52560],{"class":47},[14,145308,71706],{},[23,145310,145311],{"className":127805,"code":138257,"language":127807,"meta":28,"style":28},[30,145312,145313,145327,145343],{"__ignoreMap":28},[33,145314,145315,145317,145319,145321,145323,145325],{"class":35,"line":36},[33,145316,55074],{"class":52553},[33,145318,2489],{"class":47},[33,145320,104360],{"class":43},[33,145322,73],{"class":39},[33,145324,63952],{"class":119},[33,145326,138274],{"class":47},[33,145328,145329,145331,145333,145335,145337,145339,145341],{"class":35,"line":51},[33,145330,72149],{"class":76},[33,145332,52690],{"class":47},[33,145334,701],{"class":76},[33,145336,52745],{"class":39},[33,145338,52774],{"class":76},[33,145340,131385],{"class":76},[33,145342,80],{"class":47},[33,145344,145345],{"class":35,"line":57},[33,145346,231],{"class":47},[14,145348,145349],{},"总代码和效果展示：",[2918,145351],{"style":127661,"src":145352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,145354,70142],{},[23,145356,145357],{"className":128552,"code":145180,"language":128554,"meta":28,"style":28},[30,145358,145359,145363,145377,145381,145399,145403,145421,145425,145443,145447,145465],{"__ignoreMap":28},[33,145360,145361],{"class":35,"line":36},[33,145362,145187],{"class":60},[33,145364,145365,145367,145369,145371,145373,145375],{"class":35,"line":51},[33,145366,875],{"class":47},[33,145368,52864],{"class":52553},[33,145370,54739],{"class":43},[33,145372,73],{"class":47},[33,145374,93576],{"class":119},[33,145376,52560],{"class":47},[33,145378,145379],{"class":35,"line":57},[33,145380,145206],{"class":60},[33,145382,145383,145385,145387,145389,145391,145393,145395,145397],{"class":35,"line":64},[33,145384,53397],{"class":47},[33,145386,52864],{"class":52553},[33,145388,54739],{"class":43},[33,145390,73],{"class":47},[33,145392,145219],{"class":119},[33,145394,145222],{"class":47},[33,145396,52864],{"class":52553},[33,145398,52560],{"class":47},[33,145400,145401],{"class":35,"line":83},[33,145402,145231],{"class":60},[33,145404,145405,145407,145409,145411,145413,145415,145417,145419],{"class":35,"line":89},[33,145406,53397],{"class":47},[33,145408,52864],{"class":52553},[33,145410,54739],{"class":43},[33,145412,73],{"class":47},[33,145414,145244],{"class":119},[33,145416,145222],{"class":47},[33,145418,52864],{"class":52553},[33,145420,52560],{"class":47},[33,145422,145423],{"class":35,"line":98},[33,145424,145255],{"class":60},[33,145426,145427,145429,145431,145433,145435,145437,145439,145441],{"class":35,"line":110},[33,145428,53397],{"class":47},[33,145430,52864],{"class":52553},[33,145432,54739],{"class":43},[33,145434,73],{"class":47},[33,145436,145268],{"class":119},[33,145438,145222],{"class":47},[33,145440,52864],{"class":52553},[33,145442,52560],{"class":47},[33,145444,145445],{"class":35,"line":134},[33,145446,145279],{"class":60},[33,145448,145449,145451,145453,145455,145457,145459,145461,145463],{"class":35,"line":156},[33,145450,53397],{"class":47},[33,145452,52864],{"class":52553},[33,145454,54739],{"class":43},[33,145456,73],{"class":47},[33,145458,145292],{"class":119},[33,145460,145222],{"class":47},[33,145462,52864],{"class":52553},[33,145464,52560],{"class":47},[33,145466,145467,145469,145471],{"class":35,"line":163},[33,145468,53038],{"class":47},[33,145470,52864],{"class":52553},[33,145472,52560],{"class":47},[14,145474,71706],{},[23,145476,145477],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,145478,145479,145483,145497,145501],{"__ignoreMap":28},[33,145480,145481],{"class":35,"line":36},[33,145482,131916],{"class":60},[33,145484,145485,145487,145489,145491,145493,145495],{"class":35,"line":51},[33,145486,875],{"class":47},[33,145488,52864],{"class":52553},[33,145490,54739],{"class":43},[33,145492,73],{"class":47},[33,145494,131929],{"class":119},[33,145496,52560],{"class":47},[33,145498,145499],{"class":35,"line":57},[33,145500,131936],{"class":47},[33,145502,145503,145505,145507],{"class":35,"line":64},[33,145504,53038],{"class":47},[33,145506,52864],{"class":52553},[33,145508,52560],{"class":47},[1544,145510,139206],{},{"title":28,"searchDepth":51,"depth":51,"links":145512},[145513,145514,145518,145519,145520],{"id":144657,"depth":51,"text":144658},{"id":144689,"depth":51,"text":144690,"children":145515},[145516,145517],{"id":144693,"depth":57,"text":144694},{"id":144710,"depth":57,"text":144711},{"id":144729,"depth":51,"text":144730},{"id":144736,"depth":51,"text":144737},{"id":144823,"depth":51,"text":144824,"children":145521},[145522,145523,145524,145525,145526],{"id":144830,"depth":57,"text":144831},{"id":144958,"depth":57,"text":144959},{"id":145052,"depth":57,"text":145053},{"id":145101,"depth":57,"text":145102},{"id":145111,"depth":57,"text":145112},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144649,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145533,"title":145534,"body":145535,"description":24628,"extension":1557,"meta":146762,"navigation":159,"path":146763,"seo":146764,"stem":146765,"__hash__":146766},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145536,"toc":146740},[145537,145540,145544,145548,145551,145554,145558,145563,145566,145569,145572,145575,145578,145635,145638,145643,145646,145649,145653,145664,145668,145671,145674,145681,145686,145690,145693,145699,145702,145706,145709,145716,145719,145722,145729,145732,145739,145742,145745,145752,145755,145758,145760,145777,145781,145784,145787,145790,145794,145797,145800,145803,145806,145809,145812,145814,145817,145820,145882,145885,145995,146002,146008,146011,146014,146018,146021,146025,146030,146033,146040,146043,146049,146054,146057,146060,146063,146066,146069,146072,146075,146078,146134,146136,146162,146166,146169,146172,146175,146183,146186,146189,146193,146249,146252,146256,146262,146273,146276,146281,146284,146287,146293,146296,146299,146302,146305,146308,146311,146314,146317,146342,146348,146351,146354,146357,146360,146363,146366,146371,146374,146377,146380,146388,146391,146398,146401,146404,146406,146430,146432,146435,146438,146441,146444,146447,146450,146453,146487,146490,146493,146527,146534,146537,146540,146543,146546,146549,146552,146559,146562,146565,146568,146571,146578,146581,146584,146591,146594,146597,146601,146604,146607,146610,146613,146616,146619,146622,146625,146627,146651,146653,146677,146681,146692,146695,146698,146701,146704,146707,146710,146713,146716,146719,146722,146725,146728,146731,146734,146737],[10,145538,145534],{"id":145539},"_21-移动端布局实战下篇",[18,145541,145543],{"id":145542},"_211-rem适配布局","21.1 rem适配布局",[1599,145545,145547],{"id":145546},"_2111-rem单位","21.1.1 rem单位",[2918,145549],{"style":127661,"src":145550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,145552,145553],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[1599,145555,145557],{"id":145556},"_2112-媒体查询","21.1.2 媒体查询",[574,145559,145560],{},[564,145561,145562],{},"参数介绍",[2918,145564],{"style":127661,"src":145565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2918,145567],{"style":127661,"src":145568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2918,145570],{"style":127661,"src":145571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2918,145573],{"style":127661,"src":145574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2918,145576],{"style":127661,"src":145577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[23,145579,145581],{"className":127805,"code":145580,"language":127807,"meta":28,"style":28},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[30,145582,145583,145588,145607,145614,145627,145631],{"__ignoreMap":28},[33,145584,145585],{"class":35,"line":36},[33,145586,145587],{"class":60},"\u002F* 媒体查询 *\u002F\n",[33,145589,145590,145593,145595,145598,145600,145603,145605],{"class":35,"line":51},[33,145591,145592],{"class":39},"@media",[33,145594,860],{"class":47},[33,145596,145597],{"class":76},"max-width",[33,145599,52690],{"class":47},[33,145601,145602],{"class":76},"768",[33,145604,52745],{"class":39},[33,145606,13693],{"class":47},[33,145608,145609,145612],{"class":35,"line":57},[33,145610,145611],{"class":43},"  .container",[33,145613,16823],{"class":47},[33,145615,145616,145619,145621,145623,145625],{"class":35,"line":64},[33,145617,145618],{"class":76},"    width",[33,145620,52690],{"class":47},[33,145622,457],{"class":76},[33,145624,1939],{"class":39},[33,145626,80],{"class":47},[33,145628,145629],{"class":35,"line":83},[33,145630,128601],{"class":47},[33,145632,145633],{"class":35,"line":89},[33,145634,231],{"class":47},[14,145636,145637],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[574,145639,145640],{"start":51},[564,145641,145642],{},"引入资源",[2918,145644],{"style":127661,"src":145645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,145647,145648],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[1599,145650,145652],{"id":145651},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[561,145654,145655,145658,145661],{},[564,145656,145657],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[564,145659,145660],{},"媒体查询可以根据不同设备宽度来修改样式",[564,145662,145663],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[18,145665,145667],{"id":145666},"_212-less基础","21.2 Less基础",[14,145669,145670],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,145672,145673],{},"Less可以解决该问题，它是css的扩展语言",[14,145675,145676,145677],{},"Less中文网址： ",[126,145678,145679],{"href":145679,"rel":145680},"http:\u002F\u002Flesscss.cn\u002F",[25117],[14,145682,145683],{},[480,145684,145685],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[1599,145687,145689],{"id":145688},"_2121-less安装","21.2.1 less安装",[14,145691,145692],{},"如果使用vscode，则无需进行下方安装步骤",[14,145694,145695],{},[126,145696,145697],{"href":145697,"rel":145698},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25117],[2918,145700],{"style":127661,"src":145701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[1599,145703,145705],{"id":145704},"_2122-less使用","21.2.2 less使用",[14,145707,145708],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[574,145710,145711],{},[564,145712,145713],{},[480,145714,145715],{},"Less 变量",[2918,145717],{"style":127661,"src":145718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2918,145720],{"style":127661,"src":145721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[574,145723,145724],{"start":51},[564,145725,145726],{},[480,145727,145728],{},"Less 编译",[2918,145730],{"style":127661,"src":145731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[574,145733,145734],{"start":57},[564,145735,145736],{},[480,145737,145738],{},"Less 嵌套",[2918,145740],{"style":127661,"src":145741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2918,145743],{"style":127661,"src":145744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[574,145746,145747],{"start":64},[564,145748,145749],{},[480,145750,145751],{},"Less 运算",[2918,145753],{"style":127661,"src":145754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,145756,145757],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,145759,1656],{},[561,145761,145762,145765,145768,145771,145774],{},[564,145763,145764],{},"乘号（*）和除号（\u002F）的写法",[564,145766,145767],{},"运算符中间左右有个空格隔开 1px + 5",[564,145769,145770],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[564,145772,145773],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[564,145775,145776],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[18,145778,145780],{"id":145779},"_213-rem-适配方案","21.3 rem 适配方案",[14,145782,145783],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,145785,145786],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2918,145788],{"style":127661,"src":145789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[1599,145791,145793],{"id":145792},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,145795,145796],{},"rem + 媒体查询 + less 技术",[2918,145798],{"style":127661,"src":145799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,145801,145802],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,145804,145805],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2918,145807],{"style":127661,"src":145808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,145810,145811],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,145813,15884],{},[2918,145815],{"style":127661,"src":145816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,145818,145819],{},"index.html:",[23,145821,145823],{"className":127805,"code":145822,"language":127807,"meta":28,"style":28},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[30,145824,145825,145830,145836,145852,145856,145862,145878],{"__ignoreMap":28},[33,145826,145827],{"class":35,"line":36},[33,145828,145829],{"class":60},"\u002F* rem 适配方案 *\u002F\n",[33,145831,145832,145834],{"class":35,"line":51},[33,145833,51888],{"class":52553},[33,145835,16823],{"class":47},[33,145837,145838,145840,145842,145845,145847,145849],{"class":35,"line":57},[33,145839,71879],{"class":76},[33,145841,52690],{"class":47},[33,145843,145844],{"class":76},"62.5",[33,145846,1939],{"class":39},[33,145848,131668],{"class":47},[33,145850,145851],{"class":60},"\u002F* 1rem = 10px *\u002F\n",[33,145853,145854],{"class":35,"line":64},[33,145855,231],{"class":47},[33,145857,145858,145860],{"class":35,"line":83},[33,145859,131653],{"class":43},[33,145861,16823],{"class":47},[33,145863,145864,145866,145868,145870,145873,145875],{"class":35,"line":89},[33,145865,71821],{"class":76},[33,145867,52690],{"class":47},[33,145869,77],{"class":76},[33,145871,145872],{"class":39},"rem",[33,145874,131668],{"class":47},[33,145876,145877],{"class":60},"\u002F* 100px *\u002F\n",[33,145879,145880],{"class":35,"line":98},[33,145881,231],{"class":47},[14,145883,145884],{},"common.less",[23,145886,145888],{"className":127805,"code":145887,"language":127807,"meta":28,"style":28},"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",[30,145889,145890,145896,145911,145915,145921,145935,145939,145943,145947,145953,145967,145971,145977,145991],{"__ignoreMap":28},[33,145891,145892,145894],{"class":35,"line":36},[33,145893,51888],{"class":52553},[33,145895,16823],{"class":47},[33,145897,145898,145900,145902,145904,145906,145908],{"class":35,"line":51},[33,145899,71879],{"class":76},[33,145901,52690],{"class":47},[33,145903,145844],{"class":76},[33,145905,1939],{"class":39},[33,145907,27320],{"class":47},[33,145909,145910],{"class":60},"\u002F* 10px *\u002F\n",[33,145912,145913],{"class":35,"line":57},[33,145914,231],{"class":47},[33,145916,145917,145919],{"class":35,"line":64},[33,145918,52864],{"class":52553},[33,145920,16823],{"class":47},[33,145922,145923,145925,145927,145929,145931,145933],{"class":35,"line":83},[33,145924,71821],{"class":76},[33,145926,52690],{"class":47},[33,145928,77],{"class":76},[33,145930,145872],{"class":39},[33,145932,27320],{"class":47},[33,145934,145877],{"class":60},[33,145936,145937],{"class":35,"line":89},[33,145938,231],{"class":47},[33,145940,145941],{"class":35,"line":98},[33,145942,137266],{"class":47},[33,145944,145945],{"class":35,"line":110},[33,145946,145829],{"class":60},[33,145948,145949,145951],{"class":35,"line":134},[33,145950,51888],{"class":52553},[33,145952,16823],{"class":47},[33,145954,145955,145957,145959,145961,145963,145965],{"class":35,"line":156},[33,145956,71879],{"class":76},[33,145958,52690],{"class":47},[33,145960,145844],{"class":76},[33,145962,1939],{"class":39},[33,145964,131668],{"class":47},[33,145966,145851],{"class":60},[33,145968,145969],{"class":35,"line":163},[33,145970,231],{"class":47},[33,145972,145973,145975],{"class":35,"line":169},[33,145974,131653],{"class":43},[33,145976,16823],{"class":47},[33,145978,145979,145981,145983,145985,145987,145989],{"class":35,"line":175},[33,145980,71821],{"class":76},[33,145982,52690],{"class":47},[33,145984,77],{"class":76},[33,145986,145872],{"class":39},[33,145988,131668],{"class":47},[33,145990,145877],{"class":60},[33,145992,145993],{"class":35,"line":181},[33,145994,231],{"class":47},[14,145996,145997,145998,146001],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24805,145999,146000],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[23,146003,146006],{"className":146004,"code":146005,"language":6578},[6576],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[30,146007,146005],{"__ignoreMap":28},[14,146009,146010],{},"less保存时会自动变成.css文件",[14,146012,146013],{},"好好搞懂上述代码写法",[1599,146015,146017],{"id":146016},"_2132-样式导入样式","21.3.2 样式导入样式",[2918,146019],{"style":127661,"src":146020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[1599,146022,146024],{"id":146023},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[574,146026,146027],{},[564,146028,146029],{},"准备工作",[2918,146031],{"style":127661,"src":146032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,146034,146035,146036],{},"github地址：",[126,146037,146038],{"href":146038,"rel":146039},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25117],[14,146041,146042],{},"下载之后，将index.js文件拖到项目中就可以了",[14,146044,146045,146046],{},"js文件引入到index.html中使用的是",[30,146047,146048],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[574,146050,146051],{"start":51},[564,146052,146053],{},"vscode插件",[2918,146055],{"style":127661,"src":146056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,146058,146059],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,146061,146062],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2918,146064],{"style":127661,"src":146065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,146067,146068],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2918,146070],{"style":127661,"src":146071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,146073,146074],{},"修改成75就可以，alt+z为快捷键",[14,146076,146077],{},"index.css：",[23,146079,146080],{"className":127805,"code":145822,"language":127807,"meta":28,"style":28},[30,146081,146082,146086,146092,146106,146110,146116,146130],{"__ignoreMap":28},[33,146083,146084],{"class":35,"line":36},[33,146085,145829],{"class":60},[33,146087,146088,146090],{"class":35,"line":51},[33,146089,51888],{"class":52553},[33,146091,16823],{"class":47},[33,146093,146094,146096,146098,146100,146102,146104],{"class":35,"line":57},[33,146095,71879],{"class":76},[33,146097,52690],{"class":47},[33,146099,145844],{"class":76},[33,146101,1939],{"class":39},[33,146103,131668],{"class":47},[33,146105,145851],{"class":60},[33,146107,146108],{"class":35,"line":64},[33,146109,231],{"class":47},[33,146111,146112,146114],{"class":35,"line":83},[33,146113,131653],{"class":43},[33,146115,16823],{"class":47},[33,146117,146118,146120,146122,146124,146126,146128],{"class":35,"line":89},[33,146119,71821],{"class":76},[33,146121,52690],{"class":47},[33,146123,77],{"class":76},[33,146125,145872],{"class":39},[33,146127,131668],{"class":47},[33,146129,145877],{"class":60},[33,146131,146132],{"class":35,"line":98},[33,146133,231],{"class":47},[14,146135,145819],{},[23,146137,146138],{"className":127805,"code":128209,"language":127807,"meta":28,"style":28},[30,146139,146140,146146,146158],{"__ignoreMap":28},[33,146141,146142,146144],{"class":35,"line":36},[33,146143,53053],{"class":52553},[33,146145,16823],{"class":47},[33,146147,146148,146150,146152,146154,146156],{"class":35,"line":51},[33,146149,71879],{"class":76},[33,146151,52690],{"class":47},[33,146153,2201],{"class":76},[33,146155,52745],{"class":39},[33,146157,80],{"class":47},[33,146159,146160],{"class":35,"line":57},[33,146161,231],{"class":47},[18,146163,146165],{"id":146164},"_214-响应式开发","21.4 响应式开发",[14,146167,146168],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2918,146170],{"style":127661,"src":146171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,146173,146174],{},"做法：",[561,146176,146177,146180],{},[564,146178,146179],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[564,146181,146182],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2918,146184],{"style":127661,"src":146185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,146187,146188],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[1599,146190,146192],{"id":146191},"_2141-简单代码示范","21.4.1 简单代码示范",[23,146194,146195],{"className":127805,"code":145822,"language":127807,"meta":28,"style":28},[30,146196,146197,146201,146207,146221,146225,146231,146245],{"__ignoreMap":28},[33,146198,146199],{"class":35,"line":36},[33,146200,145829],{"class":60},[33,146202,146203,146205],{"class":35,"line":51},[33,146204,51888],{"class":52553},[33,146206,16823],{"class":47},[33,146208,146209,146211,146213,146215,146217,146219],{"class":35,"line":57},[33,146210,71879],{"class":76},[33,146212,52690],{"class":47},[33,146214,145844],{"class":76},[33,146216,1939],{"class":39},[33,146218,131668],{"class":47},[33,146220,145851],{"class":60},[33,146222,146223],{"class":35,"line":64},[33,146224,231],{"class":47},[33,146226,146227,146229],{"class":35,"line":83},[33,146228,131653],{"class":43},[33,146230,16823],{"class":47},[33,146232,146233,146235,146237,146239,146241,146243],{"class":35,"line":89},[33,146234,71821],{"class":76},[33,146236,52690],{"class":47},[33,146238,77],{"class":76},[33,146240,145872],{"class":39},[33,146242,131668],{"class":47},[33,146244,145877],{"class":60},[33,146246,146247],{"class":35,"line":98},[33,146248,231],{"class":47},[14,146250,146251],{},"父盒子一般命名为container",[1599,146253,146255],{"id":146254},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,146257,146258,146259],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[480,146260,146261],{},"使得 Web 开发更加快捷",[561,146263,146264],{},[564,146265,146266,146267],{},"官网：",[480,146268,146269],{},[126,146270,146271],{"href":146271,"rel":146272},"http:\u002F\u002Fgetbootstrap.com\u002F",[25117],[14,146274,146275],{},"可以直接去官网拿现成的东西",[574,146277,146278],{},[564,146279,146280],{},"Bootstrap的使用",[14,146282,146283],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,146285,146286],{},"Bootstrap 使用四步曲：",[14,146288,146289,146292],{},[480,146290,146291],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2918,146294],{"style":127661,"src":146295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,146297,146298],{},"打开Bootstrap官网，然后下载",[2918,146300],{"style":127661,"src":146301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2918,146303],{"style":127661,"src":146304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,146306,146307],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,146309,146310],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,146312,146313],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2918,146315],{"style":127661,"src":146316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[23,146318,146320],{"className":127805,"code":146319,"language":127807,"meta":28,"style":28},".center {\n  color: red;\n}\n",[30,146321,146322,146328,146338],{"__ignoreMap":28},[33,146323,146324,146326],{"class":35,"line":36},[33,146325,128096],{"class":43},[33,146327,16823],{"class":47},[33,146329,146330,146332,146334,146336],{"class":35,"line":51},[33,146331,72158],{"class":76},[33,146333,52690],{"class":47},[33,146335,58674],{"class":76},[33,146337,80],{"class":47},[33,146339,146340],{"class":35,"line":57},[33,146341,231],{"class":47},[14,146343,146344,146347],{},[30,146345,146346],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2918,146349],{"style":127661,"src":146350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2918,146352],{"style":127661,"src":146353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2918,146355],{"style":127661,"src":146356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,146358,146359],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2918,146361],{"style":127661,"src":146362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,146364,146365],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[574,146367,146368],{"start":51},[564,146369,146370],{},"布局容器",[2918,146372],{"style":127661,"src":146373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,146375,146376],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,146378,146379],{},"container-fluid用于移动式布局比较方便",[574,146381,146382],{"start":57},[564,146383,146384,146385],{},"bootstrap ",[480,146386,146387],{},"栅格系统原理",[2918,146389],{"style":127661,"src":146390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[574,146392,146393],{"start":64},[564,146394,146395],{},[480,146396,146397],{},"栅格选项参数",[2918,146399],{"style":127661,"src":146400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,146402,146403],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,146405,15884],{},[23,146407,146408],{"className":127805,"code":146319,"language":127807,"meta":28,"style":28},[30,146409,146410,146416,146426],{"__ignoreMap":28},[33,146411,146412,146414],{"class":35,"line":36},[33,146413,128096],{"class":43},[33,146415,16823],{"class":47},[33,146417,146418,146420,146422,146424],{"class":35,"line":51},[33,146419,72158],{"class":76},[33,146421,52690],{"class":47},[33,146423,58674],{"class":76},[33,146425,80],{"class":47},[33,146427,146428],{"class":35,"line":57},[33,146429,231],{"class":47},[14,146431,136848],{},[2918,146433],{"style":127661,"src":146434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,146436,146437],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,146439,146440],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,146442,146443],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,146445,146446],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,146448,146449],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,146451,146452],{},"汇总展示说明：",[23,146454,146455],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,146456,146457,146461,146475,146479],{"__ignoreMap":28},[33,146458,146459],{"class":35,"line":36},[33,146460,131916],{"class":60},[33,146462,146463,146465,146467,146469,146471,146473],{"class":35,"line":51},[33,146464,875],{"class":47},[33,146466,52864],{"class":52553},[33,146468,54739],{"class":43},[33,146470,73],{"class":47},[33,146472,131929],{"class":119},[33,146474,52560],{"class":47},[33,146476,146477],{"class":35,"line":57},[33,146478,131936],{"class":47},[33,146480,146481,146483,146485],{"class":35,"line":64},[33,146482,53038],{"class":47},[33,146484,52864],{"class":52553},[33,146486,52560],{"class":47},[2918,146488],{"style":127661,"src":146489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,146491,146492],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[23,146494,146495],{"className":128552,"code":131909,"language":128554,"meta":28,"style":28},[30,146496,146497,146501,146515,146519],{"__ignoreMap":28},[33,146498,146499],{"class":35,"line":36},[33,146500,131916],{"class":60},[33,146502,146503,146505,146507,146509,146511,146513],{"class":35,"line":51},[33,146504,875],{"class":47},[33,146506,52864],{"class":52553},[33,146508,54739],{"class":43},[33,146510,73],{"class":47},[33,146512,131929],{"class":119},[33,146514,52560],{"class":47},[33,146516,146517],{"class":35,"line":57},[33,146518,131936],{"class":47},[33,146520,146521,146523,146525],{"class":35,"line":64},[33,146522,53038],{"class":47},[33,146524,52864],{"class":52553},[33,146526,52560],{"class":47},[574,146528,146529],{"start":83},[564,146530,146531],{},[480,146532,146533],{},"列嵌套",[2918,146535],{"style":127661,"src":146536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,146538,146539],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,146541,146542],{},"没加row内部这样：",[2918,146544],{"style":127661,"src":146545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,146547,146548],{},"加上row之后内部为：",[2918,146550],{"style":127661,"src":146551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[574,146553,146554],{"start":89},[564,146555,146556],{},[480,146557,146558],{},"列偏移",[2918,146560],{"style":127661,"src":146561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,146563,146564],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,146566,146567],{},"要加偏移量，即偏移份数",[14,146569,146570],{},"偏移的份数=12-两个盒子的份数",[574,146572,146573],{"start":98},[564,146574,146575],{},[480,146576,146577],{},"列排序",[2918,146579],{"style":127661,"src":146580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,146582,146583],{},"pull拉左；push推右",[574,146585,146586],{"start":110},[564,146587,146588],{},[480,146589,146590],{},"响应式工具",[2918,146592],{"style":127661,"src":146593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,146595,146596],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[1599,146598,146600],{"id":146599},"_2143-响应式小项目","21.4.3 响应式小项目",[14,146602,146603],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,146605,146606],{},"ul {",[14,146608,146609],{},"list-style: none;",[14,146611,146612],{},"margin:0;",[14,146614,146615],{},"padding:0; }",[2918,146617],{"style":127661,"src":146618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2918,146620],{"style":127661,"src":146621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,146623,146624],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,146626,70142],{},[23,146628,146629],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,146630,146631,146637,146647],{"__ignoreMap":28},[33,146632,146633,146635],{"class":35,"line":36},[33,146634,131653],{"class":43},[33,146636,16823],{"class":47},[33,146638,146639,146641,146643,146645],{"class":35,"line":51},[33,146640,132285],{"class":76},[33,146642,52690],{"class":47},[33,146644,24988],{"class":76},[33,146646,80],{"class":47},[33,146648,146649],{"class":35,"line":57},[33,146650,231],{"class":47},[14,146652,71706],{},[23,146654,146655],{"className":127805,"code":140475,"language":127807,"meta":28,"style":28},[30,146656,146657,146663,146673],{"__ignoreMap":28},[33,146658,146659,146661],{"class":35,"line":36},[33,146660,131653],{"class":43},[33,146662,16823],{"class":47},[33,146664,146665,146667,146669,146671],{"class":35,"line":51},[33,146666,132285],{"class":76},[33,146668,52690],{"class":47},[33,146670,24988],{"class":76},[33,146672,80],{"class":47},[33,146674,146675],{"class":35,"line":57},[33,146676,231],{"class":47},[18,146678,146680],{"id":146679},"_215-swiper-插件使用","21.5 swiper 插件使用",[561,146682,146683,146686,146689],{},[564,146684,146685],{},"下载需要的css和js文件html页面中 引入相关文件",[564,146687,146688],{},"官网找到类似案例，复制html结构，css样式 js 语法",[564,146690,146691],{},"根据需求定制修改模块",[2918,146693],{"style":127661,"src":146694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,146696,146697],{},"解压后将这两部分放到项目中",[2918,146699],{"style":127661,"src":146700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,146702,146703],{},"这个插件可以帮助我们实现轮播图效果",[14,146705,146706],{},"用法：",[2918,146708],{"style":127661,"src":146709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,146711,146712],{},"找到自己喜欢的",[2918,146714],{"style":127661,"src":146715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,146717,146718],{},"右键，查看网页源代码",[2918,146720],{"style":127661,"src":146721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,146723,146724],{},"复制人家的结构内容",[14,146726,146727],{},"然后去看API文档：",[2918,146729],{"style":127661,"src":146730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,146732,146733],{},"可以看看如何修改样式",[14,146735,146736],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1544,146738,146739],{},"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":28,"searchDepth":51,"depth":51,"links":146741},[146742,146747,146751,146756,146761],{"id":145542,"depth":51,"text":145543,"children":146743},[146744,146745,146746],{"id":145546,"depth":57,"text":145547},{"id":145556,"depth":57,"text":145557},{"id":145651,"depth":57,"text":145652},{"id":145666,"depth":51,"text":145667,"children":146748},[146749,146750],{"id":145688,"depth":57,"text":145689},{"id":145704,"depth":57,"text":145705},{"id":145779,"depth":51,"text":145780,"children":146752},[146753,146754,146755],{"id":145792,"depth":57,"text":145793},{"id":146016,"depth":57,"text":146017},{"id":146023,"depth":57,"text":146024},{"id":146164,"depth":51,"text":146165,"children":146757},[146758,146759,146760],{"id":146191,"depth":57,"text":146192},{"id":146254,"depth":57,"text":146255},{"id":146599,"depth":57,"text":146600},{"id":146679,"depth":51,"text":146680},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145534,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146768,"title":146769,"body":146770,"description":24628,"extension":1557,"meta":146990,"navigation":159,"path":146991,"seo":146992,"stem":146993,"__hash__":146994},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146771,"toc":146986},[146772,146775,146779,146782,146797,146802,146805,146810,146845,146850,146862,146867,146880,146885,146902,146907,146927,146932,146950,146953,146956,146959,146962,146966,146969,146972,146975,146978,146981,146984],[10,146773,146769],{"id":146774},"_22-代码提交与新型相对单位",[18,146776,146778],{"id":146777},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,146780,146781],{},"法1：",[574,146783,146784,146791,146794],{},[564,146785,146786,146787],{},"登录网站注册：",[126,146788,146789],{"href":146789,"rel":146790},"https:\u002F\u002Fgitee.com\u002F",[25117],[564,146792,146793],{},"码云创建新的仓库",[564,146795,146796],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[561,146798,146799],{},[564,146800,146801],{},"在网站根目录右键-- Git Bash Here",[2918,146803],{"style":127661,"src":146804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[561,146806,146807],{},[564,146808,146809],{},"如果是第一次利用git提交，请配置好全局选项",[23,146811,146813],{"className":118549,"code":146812,"language":118551,"meta":28,"style":28},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[30,146814,146815,146831],{"__ignoreMap":28},[33,146816,146817,146820,146822,146825,146828],{"class":35,"line":36},[33,146818,146819],{"class":43},"git",[33,146821,120972],{"class":119},[33,146823,146824],{"class":76}," --global",[33,146826,146827],{"class":119}," user.name",[33,146829,146830],{"class":119}," \"你的名字\"\n",[33,146832,146833,146835,146837,146839,146842],{"class":35,"line":51},[33,146834,146819],{"class":43},[33,146836,120972],{"class":119},[33,146838,146824],{"class":76},[33,146840,146841],{"class":119}," user.email",[33,146843,146844],{"class":119}," \"你的邮箱\"\n",[561,146846,146847],{},[564,146848,146849],{},"初始化仓库",[23,146851,146853],{"className":118549,"code":146852,"language":118551,"meta":28,"style":28},"git init\n",[30,146854,146855],{"__ignoreMap":28},[33,146856,146857,146859],{"class":35,"line":36},[33,146858,146819],{"class":43},[33,146860,146861],{"class":119}," init\n",[561,146863,146864],{},[564,146865,146866],{},"把本地文件放到暂存区",[23,146868,146870],{"className":118549,"code":146869,"language":118551,"meta":28,"style":28},"git add .\n",[30,146871,146872],{"__ignoreMap":28},[33,146873,146874,146876,146878],{"class":35,"line":36},[33,146875,146819],{"class":43},[33,146877,6600],{"class":119},[33,146879,29994],{"class":119},[561,146881,146882],{},[564,146883,146884],{},"把本地文件放到本地仓库里面",[23,146886,146888],{"className":118549,"code":146887,"language":118551,"meta":28,"style":28},"git commit -m \"first commit\"\n",[30,146889,146890],{"__ignoreMap":28},[33,146891,146892,146894,146897,146899],{"class":35,"line":36},[33,146893,146819],{"class":43},[33,146895,146896],{"class":119}," commit",[33,146898,102135],{"class":76},[33,146900,146901],{"class":119}," \"first commit\"\n",[561,146903,146904],{},[564,146905,146906],{},"链接远程仓库",[23,146908,146910],{"className":118549,"code":146909,"language":118551,"meta":28,"style":28},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[30,146911,146912],{"__ignoreMap":28},[33,146913,146914,146916,146919,146921,146924],{"class":35,"line":36},[33,146915,146819],{"class":43},[33,146917,146918],{"class":119}," remote",[33,146920,6600],{"class":119},[33,146922,146923],{"class":119}," origin",[33,146925,146926],{"class":119}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[561,146928,146929],{},[564,146930,146931],{},"把本地仓库的文件推送到远程仓库 push",[23,146933,146935],{"className":118549,"code":146934,"language":118551,"meta":28,"style":28},"git push -u origin master\n",[30,146936,146937],{"__ignoreMap":28},[33,146938,146939,146941,146943,146945,146947],{"class":35,"line":36},[33,146940,146819],{"class":43},[33,146942,30269],{"class":119},[33,146944,29543],{"class":76},[33,146946,146923],{"class":119},[33,146948,146949],{"class":119}," master\n",[2918,146951],{"style":127661,"src":146952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,146954,146955],{},"上方方法暂未实现，后边学完git后在整",[14,146957,146958],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2918,146960],{"style":127661,"src":146961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[18,146963,146965],{"id":146964},"_222-新型相对单位","22.2 新型相对单位",[2918,146967],{"style":127661,"src":146968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2918,146970],{"style":127661,"src":146971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146973,146974],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146976,146977],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2918,146979],{"style":127661,"src":146980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146982,146983],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1544,146985,25210],{},{"title":28,"searchDepth":51,"depth":51,"links":146987},[146988,146989],{"id":146777,"depth":51,"text":146778},{"id":146964,"depth":51,"text":146965},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146769,"description":24628},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146996,"title":146997,"body":146998,"description":147002,"extension":1557,"meta":147003,"navigation":159,"path":147004,"seo":147005,"stem":147006,"__hash__":147007},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146999,"toc":147000},[],{"title":28,"searchDepth":51,"depth":51,"links":147001},[],"自己正经开始学编程的第一门语言！",{"category":94092},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146997,"description":147002},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147009,"title":147010,"body":147011,"description":24628,"extension":1557,"meta":148158,"navigation":159,"path":148159,"seo":148160,"stem":148161,"__hash__":148162},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147012,"toc":148134},[147013,147016,147020,147023,147026,147051,147054,147060,147064,147067,147094,147097,147137,147140,147152,147155,147161,147165,147169,147196,147213,147220,147224,147227,147253,147256,147260,147263,147303,147306,147323,147329,147333,147338,147382,147385,147403,147406,147474,147478,147485,147488,147503,147506,147515,147518,147529,147532,147541,147544,147561,147564,147579,147583,147587,147590,147592,147612,147616,147619,147622,147633,147636,147642,147646,147652,147679,147682,147694,147697,147708,147711,147717,147721,147727,147777,147780,147822,147825,147858,147861,147895,147899,147902,147922,147925,147961,147964,147977,147981,147985,147991,147994,148007,148011,148014,148020,148023,148027,148030,148033,148082,148086,148102,148108,148115,148121,148131],[10,147014,147010],{"id":147015},"_1-python环境与第一个程序",[18,147017,147019],{"id":147018},"_11-什么是python","1.1 什么是Python",[14,147021,147022],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,147024,147025],{},"理解 Python 时抓住三个关键词：",[574,147027,147028,147031,147034],{},[564,147029,147030],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[564,147032,147033],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[564,147035,147036,147037,1829,147040,1829,147043,1829,147046,1829,147048,29638],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[30,147038,147039],{},"os",[30,147041,147042],{},"sys",[30,147044,147045],{},"json",[30,147047,59113],{},[30,147049,147050],{},"datetime",[14,147052,147053],{},"Python 程序的运行链路：",[23,147055,147058],{"className":147056,"code":147057,"language":6578,"meta":28},[6576],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[30,147059,147057],{"__ignoreMap":28},[18,147061,147063],{"id":147062},"_12-python解释器","1.2 Python解释器",[14,147065,147066],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[23,147068,147070],{"className":25074,"code":147069,"language":25076,"meta":28,"style":28},"python --version\npython3 --version\npython\npython3\n",[30,147071,147072,147078,147084,147089],{"__ignoreMap":28},[33,147073,147074,147076],{"class":35,"line":36},[33,147075,31633],{"class":43},[33,147077,27546],{"class":76},[33,147079,147080,147082],{"class":35,"line":51},[33,147081,102132],{"class":43},[33,147083,27546],{"class":76},[33,147085,147086],{"class":35,"line":57},[33,147087,147088],{"class":43},"python\n",[33,147090,147091],{"class":35,"line":64},[33,147092,147093],{"class":43},"python3\n",[14,147095,147096],{},"进入交互模式后，可以直接输入表达式：",[23,147098,147100],{"className":31631,"code":147099,"language":31633,"meta":28,"style":28},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[30,147101,147102,147113,147118,147132],{"__ignoreMap":28},[33,147103,147104,147107,147109,147111],{"class":35,"line":36},[33,147105,147106],{"class":39},">>>",[33,147108,26371],{"class":76},[33,147110,46819],{"class":39},[33,147112,48976],{"class":76},[33,147114,147115],{"class":35,"line":51},[33,147116,147117],{"class":76},"3\n",[33,147119,147120,147122,147125,147127,147130],{"class":35,"line":57},[33,147121,147106],{"class":39},[33,147123,147124],{"class":76}," print",[33,147126,345],{"class":47},[33,147128,147129],{"class":119},"\"hello python\"",[33,147131,884],{"class":47},[33,147133,147134],{"class":35,"line":64},[33,147135,147136],{"class":47},"hello python\n",[14,147138,147139],{},"退出交互模式：",[23,147141,147143],{"className":31631,"code":147142,"language":31633,"meta":28,"style":28},"exit()\n",[30,147144,147145],{"__ignoreMap":28},[33,147146,147147,147150],{"class":35,"line":36},[33,147148,147149],{"class":76},"exit",[33,147151,48],{"class":47},[14,147153,147154],{},"或使用快捷键：",[23,147156,147159],{"className":147157,"code":147158,"language":6578,"meta":28},[6576],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[30,147160,147158],{"__ignoreMap":28},[18,147162,147164],{"id":147163},"_13-安装python","1.3 安装Python",[1599,147166,147168],{"id":147167},"_131-windows安装","1.3.1 Windows安装",[574,147170,147171,147178,147181,147187,147193],{},[564,147172,147173,147174],{},"打开 Python 官网：",[126,147175,147176],{"href":147176,"rel":147177},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25117],[564,147179,147180],{},"下载 Windows Installer。",[564,147182,147183,147184,29638],{},"安装时勾选 ",[30,147185,147186],{},"Add Python to PATH",[564,147188,147189,147190,29638],{},"点击 ",[30,147191,147192],{},"Install Now",[564,147194,147195],{},"安装完成后打开命令提示符验证：",[23,147197,147199],{"className":25074,"code":147198,"language":25076,"meta":28,"style":28},"python --version\npip --version\n",[30,147200,147201,147207],{"__ignoreMap":28},[33,147202,147203,147205],{"class":35,"line":36},[33,147204,31633],{"class":43},[33,147206,27546],{"class":76},[33,147208,147209,147211],{"class":35,"line":51},[33,147210,25083],{"class":43},[33,147212,27546],{"class":76},[14,147214,147215,147216,147219],{},"如果提示 ",[30,147217,147218],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[1599,147221,147223],{"id":147222},"_132-macos安装","1.3.2 macOS安装",[14,147225,147226],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[23,147228,147230],{"className":25074,"code":147229,"language":25076,"meta":28,"style":28},"brew install python\npython3 --version\npip3 --version\n",[30,147231,147232,147241,147247],{"__ignoreMap":28},[33,147233,147234,147237,147239],{"class":35,"line":36},[33,147235,147236],{"class":43},"brew",[33,147238,25086],{"class":119},[33,147240,125571],{"class":119},[33,147242,147243,147245],{"class":35,"line":51},[33,147244,102132],{"class":43},[33,147246,27546],{"class":76},[33,147248,147249,147251],{"class":35,"line":57},[33,147250,120953],{"class":43},[33,147252,27546],{"class":76},[14,147254,147255],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[1599,147257,147259],{"id":147258},"_133-linux安装","1.3.3 Linux安装",[14,147261,147262],{},"Ubuntu\u002FDebian：",[23,147264,147266],{"className":25074,"code":147265,"language":25076,"meta":28,"style":28},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[30,147267,147268,147276,147291,147297],{"__ignoreMap":28},[33,147269,147270,147272,147274],{"class":35,"line":36},[33,147271,25829],{"class":43},[33,147273,118570],{"class":119},[33,147275,27495],{"class":119},[33,147277,147278,147280,147282,147284,147286,147288],{"class":35,"line":51},[33,147279,25829],{"class":43},[33,147281,118570],{"class":119},[33,147283,25086],{"class":119},[33,147285,105656],{"class":119},[33,147287,102051],{"class":119},[33,147289,147290],{"class":119}," python3-venv\n",[33,147292,147293,147295],{"class":35,"line":57},[33,147294,102132],{"class":43},[33,147296,27546],{"class":76},[33,147298,147299,147301],{"class":35,"line":64},[33,147300,120953],{"class":43},[33,147302,27546],{"class":76},[14,147304,147305],{},"Fedora：",[23,147307,147309],{"className":25074,"code":147308,"language":25076,"meta":28,"style":28},"sudo dnf install python3 python3-pip\n",[30,147310,147311],{"__ignoreMap":28},[33,147312,147313,147315,147317,147319,147321],{"class":35,"line":36},[33,147314,25829],{"class":43},[33,147316,27568],{"class":119},[33,147318,25086],{"class":119},[33,147320,105656],{"class":119},[33,147322,121018],{"class":119},[14,147324,147325,147326,147328],{},"Linux 上通常使用 ",[30,147327,102132],{}," 命令，避免和系统旧版本 Python 冲突。",[18,147330,147332],{"id":147331},"_14-pip包管理器","1.4 pip包管理器",[14,147334,147335,147337],{},[30,147336,25083],{}," 用来安装第三方库。",[23,147339,147341],{"className":25074,"code":147340,"language":25076,"meta":28,"style":28},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[30,147342,147343,147352,147361,147369,147375],{"__ignoreMap":28},[33,147344,147345,147347,147349],{"class":35,"line":36},[33,147346,25083],{"class":43},[33,147348,25086],{"class":119},[33,147350,147351],{"class":119}," requests\n",[33,147353,147354,147356,147359],{"class":35,"line":51},[33,147355,25083],{"class":43},[33,147357,147358],{"class":119}," uninstall",[33,147360,147351],{"class":119},[33,147362,147363,147365,147367],{"class":35,"line":57},[33,147364,25083],{"class":43},[33,147366,118827],{"class":119},[33,147368,147351],{"class":119},[33,147370,147371,147373],{"class":35,"line":64},[33,147372,25083],{"class":43},[33,147374,120208],{"class":119},[33,147376,147377,147379],{"class":35,"line":83},[33,147378,25083],{"class":43},[33,147380,147381],{"class":119}," freeze\n",[14,147383,147384],{},"国内网络较慢时可以临时使用镜像：",[23,147386,147388],{"className":25074,"code":147387,"language":25076,"meta":28,"style":28},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[30,147389,147390],{"__ignoreMap":28},[33,147391,147392,147394,147396,147399,147401],{"class":35,"line":36},[33,147393,25083],{"class":43},[33,147395,25086],{"class":119},[33,147397,147398],{"class":119}," requests",[33,147400,27683],{"class":76},[33,147402,120981],{"class":119},[14,147404,147405],{},"常见第三方库：",[1756,147407,147408,147417],{},[1759,147409,147410],{},[1762,147411,147412,147415],{},[1765,147413,147414],{},"库",[1765,147416,103949],{},[1802,147418,147419,147427,147434,147442,147450,147458,147466],{},[1762,147420,147421,147424],{},[1807,147422,147423],{},"requests",[1807,147425,147426],{},"网络请求",[1762,147428,147429,147431],{},[1807,147430,101879],{},[1807,147432,147433],{},"数值计算",[1762,147435,147436,147439],{},[1807,147437,147438],{},"pandas",[1807,147440,147441],{},"表格数据处理",[1762,147443,147444,147447],{},[1807,147445,147446],{},"matplotlib",[1807,147448,147449],{},"绘图",[1762,147451,147452,147455],{},[1807,147453,147454],{},"pyecharts",[1807,147456,147457],{},"ECharts 图表",[1762,147459,147460,147463],{},[1807,147461,147462],{},"flask",[1807,147464,147465],{},"Web 后端",[1762,147467,147468,147471],{},[1807,147469,147470],{},"pytest",[1807,147472,147473],{},"自动化测试",[18,147475,147477],{"id":147476},"_15-虚拟环境","1.5 虚拟环境",[14,147479,147480,147481,147484],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[30,147482,147483],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,147486,147487],{},"创建虚拟环境：",[23,147489,147491],{"className":25074,"code":147490,"language":25076,"meta":28,"style":28},"python -m venv .venv\n",[30,147492,147493],{"__ignoreMap":28},[33,147494,147495,147497,147499,147501],{"class":35,"line":36},[33,147496,31633],{"class":43},[33,147498,102135],{"class":76},[33,147500,102138],{"class":119},[33,147502,102141],{"class":119},[14,147504,147505],{},"Windows 激活：",[23,147507,147509],{"className":25074,"code":147508,"language":25076,"meta":28,"style":28},".venv\\Scripts\\activate\n",[30,147510,147511],{"__ignoreMap":28},[33,147512,147513],{"class":35,"line":36},[33,147514,147508],{"class":43},[14,147516,147517],{},"macOS\u002FLinux 激活：",[23,147519,147521],{"className":25074,"code":147520,"language":25076,"meta":28,"style":28},"source .venv\u002Fbin\u002Factivate\n",[30,147522,147523],{"__ignoreMap":28},[33,147524,147525,147527],{"class":35,"line":36},[33,147526,102146],{"class":76},[33,147528,102149],{"class":119},[14,147530,147531],{},"退出虚拟环境：",[23,147533,147535],{"className":25074,"code":147534,"language":25076,"meta":28,"style":28},"deactivate\n",[30,147536,147537],{"__ignoreMap":28},[33,147538,147539],{"class":35,"line":36},[33,147540,147534],{"class":43},[14,147542,147543],{},"保存依赖：",[23,147545,147547],{"className":25074,"code":147546,"language":25076,"meta":28,"style":28},"pip freeze > requirements.txt\n",[30,147548,147549],{"__ignoreMap":28},[33,147550,147551,147553,147556,147558],{"class":35,"line":36},[33,147552,25083],{"class":43},[33,147554,147555],{"class":119}," freeze",[33,147557,27475],{"class":39},[33,147559,147560],{"class":119}," requirements.txt\n",[14,147562,147563],{},"安装依赖：",[23,147565,147567],{"className":25074,"code":147566,"language":25076,"meta":28,"style":28},"pip install -r requirements.txt\n",[30,147568,147569],{"__ignoreMap":28},[33,147570,147571,147573,147575,147577],{"class":35,"line":36},[33,147572,25083],{"class":43},[33,147574,25086],{"class":119},[33,147576,120892],{"class":76},[33,147578,147560],{"class":119},[18,147580,147582],{"id":147581},"_16-开发工具","1.6 开发工具",[1599,147584,147586],{"id":147585},"_161-pycharm","1.6.1 PyCharm",[14,147588,147589],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,147591,123315],{},[574,147593,147594,147597,147600,147606,147609],{},[564,147595,147596],{},"New Project：创建项目。",[564,147598,147599],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[564,147601,147602,147603,127236],{},"New Python File：创建 ",[30,147604,147605],{},".py",[564,147607,147608],{},"Run：运行当前文件。",[564,147610,147611],{},"Debug：断点调试。",[1599,147613,147615],{"id":147614},"_162-vs-code","1.6.2 VS Code",[14,147617,147618],{},"VS Code 轻量，适合后续多语言开发。",[14,147620,147621],{},"建议安装插件：",[574,147623,147624,147627,147630],{},[564,147625,147626],{},"Python。",[564,147628,147629],{},"Pylance。",[564,147631,147632],{},"Jupyter。",[14,147634,147635],{},"选择解释器：",[23,147637,147640],{"className":147638,"code":147639,"language":6578,"meta":28},[6576],"Ctrl + Shift + P -> Python: Select Interpreter\n",[30,147641,147639],{"__ignoreMap":28},[18,147643,147645],{"id":147644},"_17-第一个python程序","1.7 第一个Python程序",[14,147647,147648,147649,25871],{},"创建文件 ",[30,147650,147651],{},"hello.py",[23,147653,147655],{"className":31631,"code":147654,"language":31633,"meta":28,"style":28},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[30,147656,147657,147668],{"__ignoreMap":28},[33,147658,147659,147661,147663,147666],{"class":35,"line":36},[33,147660,31668],{"class":76},[33,147662,345],{"class":47},[33,147664,147665],{"class":119},"\"Hello World\"",[33,147667,884],{"class":47},[33,147669,147670,147672,147674,147677],{"class":35,"line":51},[33,147671,31668],{"class":76},[33,147673,345],{"class":47},[33,147675,147676],{"class":119},"\"你好，Python\"",[33,147678,884],{"class":47},[14,147680,147681],{},"在终端运行：",[23,147683,147685],{"className":25074,"code":147684,"language":25076,"meta":28,"style":28},"python hello.py\n",[30,147686,147687],{"__ignoreMap":28},[33,147688,147689,147691],{"class":35,"line":36},[33,147690,31633],{"class":43},[33,147692,147693],{"class":119}," hello.py\n",[14,147695,147696],{},"或：",[23,147698,147700],{"className":25074,"code":147699,"language":25076,"meta":28,"style":28},"python3 hello.py\n",[30,147701,147702],{"__ignoreMap":28},[33,147703,147704,147706],{"class":35,"line":36},[33,147705,102132],{"class":43},[33,147707,147693],{"class":119},[14,147709,147710],{},"输出：",[23,147712,147715],{"className":147713,"code":147714,"language":6578,"meta":28},[6576],"Hello World\n你好，Python\n",[30,147716,147714],{"__ignoreMap":28},[18,147718,147720],{"id":147719},"_18-print函数","1.8 print函数",[14,147722,147723,147726],{},[30,147724,147725],{},"print()"," 用来输出内容。",[23,147728,147730],{"className":31631,"code":147729,"language":31633,"meta":28,"style":28},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[30,147731,147732,147742,147752,147762],{"__ignoreMap":28},[33,147733,147734,147736,147738,147740],{"class":35,"line":36},[33,147735,31668],{"class":76},[33,147737,345],{"class":47},[33,147739,7231],{"class":119},[33,147741,884],{"class":47},[33,147743,147744,147746,147748,147750],{"class":35,"line":51},[33,147745,31668],{"class":76},[33,147747,345],{"class":47},[33,147749,457],{"class":76},[33,147751,884],{"class":47},[33,147753,147754,147756,147758,147760],{"class":35,"line":57},[33,147755,31668],{"class":76},[33,147757,345],{"class":47},[33,147759,1674],{"class":76},[33,147761,884],{"class":47},[33,147763,147764,147766,147768,147771,147773,147775],{"class":35,"line":64},[33,147765,31668],{"class":76},[33,147767,345],{"class":47},[33,147769,147770],{"class":119},"\"年龄:\"",[33,147772,13686],{"class":47},[33,147774,2250],{"class":76},[33,147776,884],{"class":47},[14,147778,147779],{},"多个内容用逗号隔开，默认中间加空格：",[23,147781,147783],{"className":31631,"code":147782,"language":31633,"meta":28,"style":28},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[30,147784,147785,147795,147805],{"__ignoreMap":28},[33,147786,147787,147790,147792],{"class":35,"line":36},[33,147788,147789],{"class":47},"name ",[33,147791,73],{"class":39},[33,147793,147794],{"class":119}," \"张三\"\n",[33,147796,147797,147800,147802],{"class":35,"line":51},[33,147798,147799],{"class":47},"age ",[33,147801,73],{"class":39},[33,147803,147804],{"class":76}," 18\n",[33,147806,147807,147809,147811,147814,147817,147819],{"class":35,"line":57},[33,147808,31668],{"class":76},[33,147810,345],{"class":47},[33,147812,147813],{"class":119},"\"姓名:\"",[33,147815,147816],{"class":47},", name, ",[33,147818,147770],{"class":119},[33,147820,147821],{"class":47},", age)\n",[14,147823,147824],{},"修改分隔符：",[23,147826,147828],{"className":31631,"code":147827,"language":31633,"meta":28,"style":28},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[30,147829,147830],{"__ignoreMap":28},[33,147831,147832,147834,147836,147839,147841,147843,147845,147847,147849,147852,147854,147856],{"class":35,"line":36},[33,147833,31668],{"class":76},[33,147835,345],{"class":47},[33,147837,147838],{"class":119},"\"2024\"",[33,147840,13686],{"class":47},[33,147842,55569],{"class":119},[33,147844,13686],{"class":47},[33,147846,55569],{"class":119},[33,147848,13686],{"class":47},[33,147850,147851],{"class":955},"sep",[33,147853,73],{"class":39},[33,147855,33736],{"class":119},[33,147857,884],{"class":47},[14,147859,147860],{},"修改结尾符：",[23,147862,147864],{"className":31631,"code":147863,"language":31633,"meta":28,"style":28},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[30,147865,147866,147884],{"__ignoreMap":28},[33,147867,147868,147870,147872,147874,147876,147878,147880,147882],{"class":35,"line":36},[33,147869,31668],{"class":76},[33,147871,345],{"class":47},[33,147873,7231],{"class":119},[33,147875,13686],{"class":47},[33,147877,47054],{"class":955},[33,147879,73],{"class":39},[33,147881,5756],{"class":119},[33,147883,884],{"class":47},[33,147885,147886,147888,147890,147893],{"class":35,"line":51},[33,147887,31668],{"class":76},[33,147889,345],{"class":47},[33,147891,147892],{"class":119},"\"python\"",[33,147894,884],{"class":47},[18,147896,147898],{"id":147897},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,147900,147901],{},"交互运行适合临时验证：",[23,147903,147905],{"className":31631,"code":147904,"language":31633,"meta":28,"style":28},">>> 10 * 3\n30\n",[30,147906,147907,147917],{"__ignoreMap":28},[33,147908,147909,147911,147913,147915],{"class":35,"line":36},[33,147910,147106],{"class":39},[33,147912,3461],{"class":76},[33,147914,303],{"class":39},[33,147916,121289],{"class":76},[33,147918,147919],{"class":35,"line":51},[33,147920,147921],{"class":76},"30\n",[14,147923,147924],{},"脚本运行适合保存程序：",[23,147926,147928],{"className":31631,"code":147927,"language":31633,"meta":28,"style":28},"price = 8\ncount = 5\nprint(price * count)\n",[30,147929,147930,147940,147949],{"__ignoreMap":28},[33,147931,147932,147935,147937],{"class":35,"line":36},[33,147933,147934],{"class":47},"price ",[33,147936,73],{"class":39},[33,147938,147939],{"class":76}," 8\n",[33,147941,147942,147945,147947],{"class":35,"line":51},[33,147943,147944],{"class":47},"count ",[33,147946,73],{"class":39},[33,147948,55680],{"class":76},[33,147950,147951,147953,147956,147958],{"class":35,"line":57},[33,147952,31668],{"class":76},[33,147954,147955],{"class":47},"(price ",[33,147957,2057],{"class":39},[33,147959,147960],{"class":47}," count)\n",[14,147962,147963],{},"实际学习中推荐：",[574,147965,147966,147969,147974],{},[564,147967,147968],{},"临时试一个语法，用交互模式。",[564,147970,147971,147972,127236],{},"写完整练习，用 ",[30,147973,147605],{},[564,147975,147976],{},"写项目，用独立目录和虚拟环境。",[18,147978,147980],{"id":147979},"_110-常见错误","1.10 常见错误",[1599,147982,147984],{"id":147983},"_1101-命令找不到","1.10.1 命令找不到",[23,147986,147989],{"className":147987,"code":147988,"language":6578,"meta":28},[6576],"python: command not found\n",[30,147990,147988],{"__ignoreMap":28},[14,147992,147993],{},"原因：",[574,147995,147996,147999,148002],{},[564,147997,147998],{},"没安装 Python。",[564,148000,148001],{},"PATH 没配置。",[564,148003,148004,148005,29638],{},"Linux\u002FmacOS 应该使用 ",[30,148006,102132],{},[1599,148008,148010],{"id":148009},"_1102-文件名冲突","1.10.2 文件名冲突",[14,148012,148013],{},"不要把文件命名为：",[23,148015,148018],{"className":148016,"code":148017,"language":6578,"meta":28},[6576],"random.py\njson.py\ntime.py\nrequests.py\n",[30,148019,148017],{"__ignoreMap":28},[14,148021,148022],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[1599,148024,148026],{"id":148025},"_1103-中文乱码","1.10.3 中文乱码",[14,148028,148029],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,148031,148032],{},"如果读写文件出现乱码，要明确指定编码：",[23,148034,148036],{"className":31631,"code":148035,"language":31633,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[30,148037,148038,148072],{"__ignoreMap":28},[33,148039,148040,148042,148045,148047,148050,148052,148055,148057,148060,148062,148065,148067,148069],{"class":35,"line":36},[33,148041,109086],{"class":39},[33,148043,148044],{"class":76}," open",[33,148046,345],{"class":47},[33,148048,148049],{"class":119},"\"data.txt\"",[33,148051,13686],{"class":47},[33,148053,148054],{"class":119},"\"r\"",[33,148056,13686],{"class":47},[33,148058,148059],{"class":955},"encoding",[33,148061,73],{"class":39},[33,148063,148064],{"class":119},"\"utf-8\"",[33,148066,14965],{"class":47},[33,148068,32636],{"class":39},[33,148070,148071],{"class":47}," f:\n",[33,148073,148074,148077,148079],{"class":35,"line":51},[33,148075,148076],{"class":47},"    content ",[33,148078,73],{"class":39},[33,148080,148081],{"class":47}," f.read()\n",[18,148083,148085],{"id":148084},"_111-本章练习","1.11 本章练习",[574,148087,148088,148091,148097],{},[564,148089,148090],{},"安装 Python，并在终端输出版本号。",[564,148092,148093,148094,148096],{},"新建 ",[30,148095,147651],{},"，输出自己的姓名、年龄、学习目标。",[564,148098,105619,148099,148101],{},[30,148100,147725],{}," 输出下面格式：",[23,148103,148106],{"className":148104,"code":148105,"language":6578,"meta":28},[6576],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[30,148107,148105],{"__ignoreMap":28},[574,148109,148110],{"start":64},[564,148111,105619,148112,148114],{},[30,148113,147851],{}," 输出日期：",[23,148116,148119],{"className":148117,"code":148118,"language":6578,"meta":28},[6576],"2024-10-10\n",[30,148120,148118],{"__ignoreMap":28},[574,148122,148123],{"start":83},[564,148124,105619,148125,148127,148128,148130],{},[30,148126,47054],{}," 让两次 ",[30,148129,147725],{}," 输出在同一行。",[1544,148132,148133],{},"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":28,"searchDepth":51,"depth":51,"links":148135},[148136,148137,148138,148143,148144,148145,148149,148150,148151,148152,148157],{"id":147018,"depth":51,"text":147019},{"id":147062,"depth":51,"text":147063},{"id":147163,"depth":51,"text":147164,"children":148139},[148140,148141,148142],{"id":147167,"depth":57,"text":147168},{"id":147222,"depth":57,"text":147223},{"id":147258,"depth":57,"text":147259},{"id":147331,"depth":51,"text":147332},{"id":147476,"depth":51,"text":147477},{"id":147581,"depth":51,"text":147582,"children":148146},[148147,148148],{"id":147585,"depth":57,"text":147586},{"id":147614,"depth":57,"text":147615},{"id":147644,"depth":51,"text":147645},{"id":147719,"depth":51,"text":147720},{"id":147897,"depth":51,"text":147898},{"id":147979,"depth":51,"text":147980,"children":148153},[148154,148155,148156],{"id":147983,"depth":57,"text":147984},{"id":148009,"depth":57,"text":148010},{"id":148025,"depth":57,"text":148026},{"id":148084,"depth":51,"text":148085},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147010,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148164,"title":148165,"body":148166,"description":24628,"extension":1557,"meta":150570,"navigation":159,"path":150571,"seo":150572,"stem":150573,"__hash__":150574},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148167,"toc":150555},[148168,148171,148175,148178,148181,148198,148201,148243,148246,148250,148253,148256,148293,148296,148330,148333,148425,148429,148443,148446,148473,148476,148480,148583,148590,148593,148610,148614,148621,148810,148813,148886,148890,148893,148977,148980,149012,149016,149220,149223,149227,149233,149335,149338,149594,149598,149601,149604,149618,149620,149806,149810,150172,150178,150182,150185,150309,150312,150491,150494,150498,150531,150535,150552],[10,148169,148165],{"id":148170},"_10-json与pyecharts折线图",[18,148172,148174],{"id":148173},"_101-数据可视化","10.1 数据可视化",[14,148176,148177],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,148179,148180],{},"常见图表：",[574,148182,148183,148186,148189,148192,148195],{},[564,148184,148185],{},"折线图：看趋势。",[564,148187,148188],{},"柱状图：看分类对比。",[564,148190,148191],{},"饼图：看占比。",[564,148193,148194],{},"地图：看地域分布。",[564,148196,148197],{},"散点图：看两个变量之间的关系。",[14,148199,148200],{},"Python 可视化常用库：",[1756,148202,148203,148211],{},[1759,148204,148205],{},[1762,148206,148207,148209],{},[1765,148208,147414],{},[1765,148210,24992],{},[1802,148212,148213,148220,148228,148235],{},[1762,148214,148215,148217],{},[1807,148216,147446],{},[1807,148218,148219],{},"基础、经典、可定制",[1762,148221,148222,148225],{},[1807,148223,148224],{},"seaborn",[1807,148226,148227],{},"统计图表更美观",[1762,148229,148230,148232],{},[1807,148231,147454],{},[1807,148233,148234],{},"生成交互式网页图表",[1762,148236,148237,148240],{},[1807,148238,148239],{},"plotly",[1807,148241,148242],{},"交互图表能力强",[14,148244,148245],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[18,148247,148249],{"id":148248},"_102-json回顾","10.2 JSON回顾",[14,148251,148252],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,148254,148255],{},"Python 字典：",[23,148257,148259],{"className":31631,"code":148258,"language":31633,"meta":28,"style":28},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[30,148260,148261,148269,148280,148289],{"__ignoreMap":28},[33,148262,148263,148265,148267],{"class":35,"line":36},[33,148264,102911],{"class":47},[33,148266,73],{"class":39},[33,148268,16823],{"class":47},[33,148270,148271,148274,148276,148278],{"class":35,"line":51},[33,148272,148273],{"class":119},"    \"name\"",[33,148275,52690],{"class":47},[33,148277,70522],{"class":119},[33,148279,32719],{"class":47},[33,148281,148282,148285,148287],{"class":35,"line":57},[33,148283,148284],{"class":119},"    \"value\"",[33,148286,52690],{"class":47},[33,148288,98711],{"class":76},[33,148290,148291],{"class":35,"line":64},[33,148292,231],{"class":47},[14,148294,148295],{},"JSON 字符串：",[23,148297,148300],{"className":148298,"code":148299,"language":147045,"meta":28,"style":28},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[30,148301,148302,148306,148317,148326],{"__ignoreMap":28},[33,148303,148304],{"class":35,"line":36},[33,148305,54],{"class":47},[33,148307,148308,148311,148313,148315],{"class":35,"line":51},[33,148309,148310],{"class":76},"  \"name\"",[33,148312,52690],{"class":47},[33,148314,70522],{"class":119},[33,148316,32719],{"class":47},[33,148318,148319,148322,148324],{"class":35,"line":57},[33,148320,148321],{"class":76},"  \"value\"",[33,148323,52690],{"class":47},[33,148325,98711],{"class":76},[33,148327,148328],{"class":35,"line":64},[33,148329,231],{"class":47},[14,148331,148332],{},"Python 与 JSON 的转换：",[23,148334,148336],{"className":31631,"code":148335,"language":31633,"meta":28,"style":28},"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",[30,148337,148338,148345,148349,148374,148378,148397,148404,148408,148418],{"__ignoreMap":28},[33,148339,148340,148342],{"class":35,"line":36},[33,148341,31645],{"class":39},[33,148343,148344],{"class":47}," json\n",[33,148346,148347],{"class":35,"line":51},[33,148348,160],{"emptyLinePlaceholder":159},[33,148350,148351,148353,148355,148357,148359,148361,148363,148365,148368,148370,148372],{"class":35,"line":57},[33,148352,102911],{"class":47},[33,148354,73],{"class":39},[33,148356,5845],{"class":47},[33,148358,63932],{"class":119},[33,148360,52690],{"class":47},[33,148362,70522],{"class":119},[33,148364,13686],{"class":47},[33,148366,148367],{"class":119},"\"value\"",[33,148369,52690],{"class":47},[33,148371,457],{"class":76},[33,148373,231],{"class":47},[33,148375,148376],{"class":35,"line":64},[33,148377,160],{"emptyLinePlaceholder":159},[33,148379,148380,148383,148385,148388,148391,148393,148395],{"class":35,"line":83},[33,148381,148382],{"class":47},"json_text ",[33,148384,73],{"class":39},[33,148386,148387],{"class":47}," json.dumps(data, ",[33,148389,148390],{"class":955},"ensure_ascii",[33,148392,73],{"class":39},[33,148394,35240],{"class":76},[33,148396,884],{"class":47},[33,148398,148399,148401],{"class":35,"line":89},[33,148400,31668],{"class":76},[33,148402,148403],{"class":47},"(json_text)\n",[33,148405,148406],{"class":35,"line":98},[33,148407,160],{"emptyLinePlaceholder":159},[33,148409,148410,148413,148415],{"class":35,"line":110},[33,148411,148412],{"class":47},"new_data ",[33,148414,73],{"class":39},[33,148416,148417],{"class":47}," json.loads(json_text)\n",[33,148419,148420,148422],{"class":35,"line":134},[33,148421,31668],{"class":76},[33,148423,148424],{"class":47},"(new_data)\n",[18,148426,148428],{"id":148427},"_103-安装pyecharts","10.3 安装pyecharts",[23,148430,148432],{"className":25074,"code":148431,"language":25076,"meta":28,"style":28},"pip install pyecharts\n",[30,148433,148434],{"__ignoreMap":28},[33,148435,148436,148438,148440],{"class":35,"line":36},[33,148437,25083],{"class":43},[33,148439,25086],{"class":119},[33,148441,148442],{"class":119}," pyecharts\n",[14,148444,148445],{},"验证：",[23,148447,148449],{"className":31631,"code":148448,"language":31633,"meta":28,"style":28},"import pyecharts\n\nprint(pyecharts.__version__)\n",[30,148450,148451,148457,148461],{"__ignoreMap":28},[33,148452,148453,148455],{"class":35,"line":36},[33,148454,31645],{"class":39},[33,148456,148442],{"class":47},[33,148458,148459],{"class":35,"line":51},[33,148460,160],{"emptyLinePlaceholder":159},[33,148462,148463,148465,148468,148471],{"class":35,"line":57},[33,148464,31668],{"class":76},[33,148466,148467],{"class":47},"(pyecharts.",[33,148469,148470],{"class":76},"__version__",[33,148472,884],{"class":47},[14,148474,148475],{},"如果使用虚拟环境，要先激活环境再安装。",[18,148477,148479],{"id":148478},"_104-第一个折线图","10.4 第一个折线图",[23,148481,148483],{"className":31631,"code":148482,"language":31633,"meta":28,"style":28},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[30,148484,148485,148497,148501,148511,148541,148573],{"__ignoreMap":28},[33,148486,148487,148489,148492,148494],{"class":35,"line":36},[33,148488,31990],{"class":39},[33,148490,148491],{"class":47}," pyecharts.charts ",[33,148493,31645],{"class":39},[33,148495,148496],{"class":47}," Line\n",[33,148498,148499],{"class":35,"line":51},[33,148500,160],{"emptyLinePlaceholder":159},[33,148502,148503,148506,148508],{"class":35,"line":57},[33,148504,148505],{"class":47},"line ",[33,148507,73],{"class":39},[33,148509,148510],{"class":47}," Line()\n",[33,148512,148513,148516,148519,148521,148524,148526,148529,148531,148534,148536,148539],{"class":35,"line":64},[33,148514,148515],{"class":47},"line.add_xaxis([",[33,148517,148518],{"class":119},"\"周一\"",[33,148520,13686],{"class":47},[33,148522,148523],{"class":119},"\"周二\"",[33,148525,13686],{"class":47},[33,148527,148528],{"class":119},"\"周三\"",[33,148530,13686],{"class":47},[33,148532,148533],{"class":119},"\"周四\"",[33,148535,13686],{"class":47},[33,148537,148538],{"class":119},"\"周五\"",[33,148540,1276],{"class":47},[33,148542,148543,148546,148549,148551,148553,148555,148557,148559,148561,148563,148566,148568,148571],{"class":35,"line":83},[33,148544,148545],{"class":47},"line.add_yaxis(",[33,148547,148548],{"class":119},"\"销售额\"",[33,148550,78771],{"class":47},[33,148552,457],{"class":76},[33,148554,13686],{"class":47},[33,148556,2416],{"class":76},[33,148558,13686],{"class":47},[33,148560,2461],{"class":76},[33,148562,13686],{"class":47},[33,148564,148565],{"class":76},"150",[33,148567,13686],{"class":47},[33,148569,148570],{"class":76},"180",[33,148572,1276],{"class":47},[33,148574,148575,148578,148581],{"class":35,"line":89},[33,148576,148577],{"class":47},"line.render(",[33,148579,148580],{"class":119},"\"line.html\"",[33,148582,884],{"class":47},[14,148584,148585,148586,148589],{},"运行后会生成 ",[30,148587,148588],{},"line.html","，用浏览器打开即可看到图表。",[14,148591,148592],{},"核心步骤：",[574,148594,148595,148598,148601,148604,148607],{},[564,148596,148597],{},"导入图表类。",[564,148599,148600],{},"创建图表对象。",[564,148602,148603],{},"添加 x 轴数据。",[564,148605,148606],{},"添加 y 轴数据。",[564,148608,148609],{},"渲染为 HTML。",[18,148611,148613],{"id":148612},"_105-全局配置","10.5 全局配置",[14,148615,148616,148617,148620],{},"常用配置在 ",[30,148618,148619],{},"pyecharts.options"," 中。",[23,148622,148624],{"className":31631,"code":148623,"language":31633,"meta":28,"style":28},"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",[30,148625,148626,148643,148653,148657,148665,148689,148717,148722,148741,148760,148778,148798,148802],{"__ignoreMap":28},[33,148627,148628,148630,148633,148635,148638,148640],{"class":35,"line":36},[33,148629,31990],{"class":39},[33,148631,148632],{"class":47}," pyecharts ",[33,148634,31645],{"class":39},[33,148636,148637],{"class":47}," options ",[33,148639,32636],{"class":39},[33,148641,148642],{"class":47}," opts\n",[33,148644,148645,148647,148649,148651],{"class":35,"line":51},[33,148646,31990],{"class":39},[33,148648,148491],{"class":47},[33,148650,31645],{"class":39},[33,148652,148496],{"class":47},[33,148654,148655],{"class":35,"line":57},[33,148656,160],{"emptyLinePlaceholder":159},[33,148658,148659,148661,148663],{"class":35,"line":64},[33,148660,148505],{"class":47},[33,148662,73],{"class":39},[33,148664,148510],{"class":47},[33,148666,148667,148669,148671,148673,148675,148677,148679,148681,148683,148685,148687],{"class":35,"line":83},[33,148668,148515],{"class":47},[33,148670,148518],{"class":119},[33,148672,13686],{"class":47},[33,148674,148523],{"class":119},[33,148676,13686],{"class":47},[33,148678,148528],{"class":119},[33,148680,13686],{"class":47},[33,148682,148533],{"class":119},[33,148684,13686],{"class":47},[33,148686,148538],{"class":119},[33,148688,1276],{"class":47},[33,148690,148691,148693,148695,148697,148699,148701,148703,148705,148707,148709,148711,148713,148715],{"class":35,"line":89},[33,148692,148545],{"class":47},[33,148694,148548],{"class":119},[33,148696,78771],{"class":47},[33,148698,457],{"class":76},[33,148700,13686],{"class":47},[33,148702,2416],{"class":76},[33,148704,13686],{"class":47},[33,148706,2461],{"class":76},[33,148708,13686],{"class":47},[33,148710,148565],{"class":76},[33,148712,13686],{"class":47},[33,148714,148570],{"class":76},[33,148716,1276],{"class":47},[33,148718,148719],{"class":35,"line":98},[33,148720,148721],{"class":47},"line.set_global_opts(\n",[33,148723,148724,148727,148729,148732,148734,148736,148739],{"class":35,"line":110},[33,148725,148726],{"class":955},"    title_opts",[33,148728,73],{"class":39},[33,148730,148731],{"class":47},"opts.TitleOpts(",[33,148733,52660],{"class":955},[33,148735,73],{"class":39},[33,148737,148738],{"class":119},"\"一周销售额\"",[33,148740,39300],{"class":47},[33,148742,148743,148746,148748,148751,148753,148755,148758],{"class":35,"line":134},[33,148744,148745],{"class":955},"    xaxis_opts",[33,148747,73],{"class":39},[33,148749,148750],{"class":47},"opts.AxisOpts(",[33,148752,81063],{"class":955},[33,148754,73],{"class":39},[33,148756,148757],{"class":119},"\"日期\"",[33,148759,39300],{"class":47},[33,148761,148762,148765,148767,148769,148771,148773,148776],{"class":35,"line":156},[33,148763,148764],{"class":955},"    yaxis_opts",[33,148766,73],{"class":39},[33,148768,148750],{"class":47},[33,148770,81063],{"class":955},[33,148772,73],{"class":39},[33,148774,148775],{"class":119},"\"金额\"",[33,148777,39300],{"class":47},[33,148779,148780,148783,148785,148788,148791,148793,148796],{"class":35,"line":163},[33,148781,148782],{"class":955},"    tooltip_opts",[33,148784,73],{"class":39},[33,148786,148787],{"class":47},"opts.TooltipOpts(",[33,148789,148790],{"class":955},"trigger",[33,148792,73],{"class":39},[33,148794,148795],{"class":119},"\"axis\"",[33,148797,39300],{"class":47},[33,148799,148800],{"class":35,"line":169},[33,148801,884],{"class":47},[33,148803,148804,148806,148808],{"class":35,"line":175},[33,148805,148577],{"class":47},[33,148807,148580],{"class":119},[33,148809,884],{"class":47},[14,148811,148812],{},"常见全局配置：",[1756,148814,148815,148824],{},[1759,148816,148817],{},[1762,148818,148819,148822],{},[1765,148820,148821],{},"配置",[1765,148823,103949],{},[1802,148825,148826,148836,148846,148856,148866,148876],{},[1762,148827,148828,148833],{},[1807,148829,148830],{},[30,148831,148832],{},"TitleOpts",[1807,148834,148835],{},"标题",[1762,148837,148838,148843],{},[1807,148839,148840],{},[30,148841,148842],{},"LegendOpts",[1807,148844,148845],{},"图例",[1762,148847,148848,148853],{},[1807,148849,148850],{},[30,148851,148852],{},"TooltipOpts",[1807,148854,148855],{},"提示框",[1762,148857,148858,148863],{},[1807,148859,148860],{},[30,148861,148862],{},"AxisOpts",[1807,148864,148865],{},"坐标轴",[1762,148867,148868,148873],{},[1807,148869,148870],{},[30,148871,148872],{},"VisualMapOpts",[1807,148874,148875],{},"视觉映射",[1762,148877,148878,148883],{},[1807,148879,148880],{},[30,148881,148882],{},"DataZoomOpts",[1807,148884,148885],{},"区域缩放",[18,148887,148889],{"id":148888},"_106-系列配置","10.6 系列配置",[14,148891,148892],{},"系列配置作用于某一组数据。",[23,148894,148896],{"className":31631,"code":148895,"language":31633,"meta":28,"style":28},"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",[30,148897,148898,148903,148914,148943,148954,148973],{"__ignoreMap":28},[33,148899,148900],{"class":35,"line":36},[33,148901,148902],{"class":47},"line.add_yaxis(\n",[33,148904,148905,148908,148910,148912],{"class":35,"line":51},[33,148906,148907],{"class":955},"    series_name",[33,148909,73],{"class":39},[33,148911,148548],{"class":119},[33,148913,32719],{"class":47},[33,148915,148916,148919,148921,148923,148925,148927,148929,148931,148933,148935,148937,148939,148941],{"class":35,"line":57},[33,148917,148918],{"class":955},"    y_axis",[33,148920,73],{"class":39},[33,148922,2489],{"class":47},[33,148924,457],{"class":76},[33,148926,13686],{"class":47},[33,148928,2416],{"class":76},[33,148930,13686],{"class":47},[33,148932,2461],{"class":76},[33,148934,13686],{"class":47},[33,148936,148565],{"class":76},[33,148938,13686],{"class":47},[33,148940,148570],{"class":76},[33,148942,89089],{"class":47},[33,148944,148945,148948,148950,148952],{"class":35,"line":64},[33,148946,148947],{"class":955},"    is_smooth",[33,148949,73],{"class":39},[33,148951,32729],{"class":76},[33,148953,32719],{"class":47},[33,148955,148956,148959,148961,148964,148967,148969,148971],{"class":35,"line":83},[33,148957,148958],{"class":955},"    label_opts",[33,148960,73],{"class":39},[33,148962,148963],{"class":47},"opts.LabelOpts(",[33,148965,148966],{"class":955},"is_show",[33,148968,73],{"class":39},[33,148970,32729],{"class":76},[33,148972,39300],{"class":47},[33,148974,148975],{"class":35,"line":89},[33,148976,884],{"class":47},[14,148978,148979],{},"常用参数：",[574,148981,148982,148988,148994,149000,149006],{},[564,148983,148984,148987],{},[30,148985,148986],{},"series_name","：系列名称。",[564,148989,148990,148993],{},[30,148991,148992],{},"y_axis","：y 轴数据。",[564,148995,148996,148999],{},[30,148997,148998],{},"is_smooth","：是否平滑曲线。",[564,149001,149002,149005],{},[30,149003,149004],{},"label_opts","：标签配置。",[564,149007,149008,149011],{},[30,149009,149010],{},"symbol_size","：标记点大小。",[18,149013,149015],{"id":149014},"_107-多条折线","10.7 多条折线",[23,149017,149019],{"className":31631,"code":149018,"language":31633,"meta":28,"style":28},"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",[30,149020,149021,149035,149045,149049,149078,149082,149090,149095,149133,149170,149174,149191,149207,149211],{"__ignoreMap":28},[33,149022,149023,149025,149027,149029,149031,149033],{"class":35,"line":36},[33,149024,31990],{"class":39},[33,149026,148632],{"class":47},[33,149028,31645],{"class":39},[33,149030,148637],{"class":47},[33,149032,32636],{"class":39},[33,149034,148642],{"class":47},[33,149036,149037,149039,149041,149043],{"class":35,"line":51},[33,149038,31990],{"class":39},[33,149040,148491],{"class":47},[33,149042,31645],{"class":39},[33,149044,148496],{"class":47},[33,149046,149047],{"class":35,"line":57},[33,149048,160],{"emptyLinePlaceholder":159},[33,149050,149051,149054,149056,149058,149060,149062,149064,149066,149068,149070,149072,149074,149076],{"class":35,"line":64},[33,149052,149053],{"class":47},"dates ",[33,149055,73],{"class":39},[33,149057,53479],{"class":47},[33,149059,148518],{"class":119},[33,149061,13686],{"class":47},[33,149063,148523],{"class":119},[33,149065,13686],{"class":47},[33,149067,148528],{"class":119},[33,149069,13686],{"class":47},[33,149071,148533],{"class":119},[33,149073,13686],{"class":47},[33,149075,148538],{"class":119},[33,149077,34499],{"class":47},[33,149079,149080],{"class":35,"line":83},[33,149081,160],{"emptyLinePlaceholder":159},[33,149083,149084,149086,149088],{"class":35,"line":89},[33,149085,148505],{"class":47},[33,149087,73],{"class":39},[33,149089,148510],{"class":47},[33,149091,149092],{"class":35,"line":98},[33,149093,149094],{"class":47},"line.add_xaxis(dates)\n",[33,149096,149097,149099,149102,149104,149106,149108,149111,149113,149115,149117,149119,149121,149123,149125,149127,149129,149131],{"class":35,"line":110},[33,149098,148545],{"class":47},[33,149100,149101],{"class":119},"\"线上销售\"",[33,149103,78771],{"class":47},[33,149105,457],{"class":76},[33,149107,13686],{"class":47},[33,149109,149110],{"class":76},"130",[33,149112,13686],{"class":47},[33,149114,2416],{"class":76},[33,149116,13686],{"class":47},[33,149118,22299],{"class":76},[33,149120,13686],{"class":47},[33,149122,3163],{"class":76},[33,149124,113455],{"class":47},[33,149126,148998],{"class":955},[33,149128,73],{"class":39},[33,149130,32729],{"class":76},[33,149132,884],{"class":47},[33,149134,149135,149137,149140,149142,149144,149146,149148,149150,149152,149154,149156,149158,149160,149162,149164,149166,149168],{"class":35,"line":134},[33,149136,148545],{"class":47},[33,149138,149139],{"class":119},"\"线下销售\"",[33,149141,78771],{"class":47},[33,149143,2212],{"class":76},[33,149145,13686],{"class":47},[33,149147,2461],{"class":76},[33,149149,13686],{"class":47},[33,149151,457],{"class":76},[33,149153,13686],{"class":47},[33,149155,2416],{"class":76},[33,149157,13686],{"class":47},[33,149159,148565],{"class":76},[33,149161,113455],{"class":47},[33,149163,148998],{"class":955},[33,149165,73],{"class":39},[33,149167,32729],{"class":76},[33,149169,884],{"class":47},[33,149171,149172],{"class":35,"line":156},[33,149173,148721],{"class":47},[33,149175,149176,149178,149180,149182,149184,149186,149189],{"class":35,"line":163},[33,149177,148726],{"class":955},[33,149179,73],{"class":39},[33,149181,148731],{"class":47},[33,149183,52660],{"class":955},[33,149185,73],{"class":39},[33,149187,149188],{"class":119},"\"线上线下销售趋势\"",[33,149190,39300],{"class":47},[33,149192,149193,149195,149197,149199,149201,149203,149205],{"class":35,"line":169},[33,149194,148782],{"class":955},[33,149196,73],{"class":39},[33,149198,148787],{"class":47},[33,149200,148790],{"class":955},[33,149202,73],{"class":39},[33,149204,148795],{"class":119},[33,149206,39300],{"class":47},[33,149208,149209],{"class":35,"line":175},[33,149210,884],{"class":47},[33,149212,149213,149215,149218],{"class":35,"line":181},[33,149214,148577],{"class":47},[33,149216,149217],{"class":119},"\"sales.html\"",[33,149219,884],{"class":47},[14,149221,149222],{},"多条折线适合比较不同指标或不同地区。",[18,149224,149226],{"id":149225},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,149228,149229,149230,25871],{},"假设 ",[30,149231,149232],{},"sales.json",[23,149234,149236],{"className":148298,"code":149235,"language":147045,"meta":28,"style":28},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[30,149237,149238,149243,149275,149303,149331],{"__ignoreMap":28},[33,149239,149240],{"class":35,"line":36},[33,149241,149242],{"class":47},"[\n",[33,149244,149245,149248,149251,149253,149255,149257,149260,149262,149264,149266,149269,149271,149273],{"class":35,"line":51},[33,149246,149247],{"class":47},"  {",[33,149249,149250],{"class":76},"\"date\"",[33,149252,52690],{"class":47},[33,149254,148518],{"class":119},[33,149256,13686],{"class":47},[33,149258,149259],{"class":76},"\"online\"",[33,149261,52690],{"class":47},[33,149263,457],{"class":76},[33,149265,13686],{"class":47},[33,149267,149268],{"class":76},"\"offline\"",[33,149270,52690],{"class":47},[33,149272,2212],{"class":76},[33,149274,6321],{"class":47},[33,149276,149277,149279,149281,149283,149285,149287,149289,149291,149293,149295,149297,149299,149301],{"class":35,"line":57},[33,149278,149247],{"class":47},[33,149280,149250],{"class":76},[33,149282,52690],{"class":47},[33,149284,148523],{"class":119},[33,149286,13686],{"class":47},[33,149288,149259],{"class":76},[33,149290,52690],{"class":47},[33,149292,149110],{"class":76},[33,149294,13686],{"class":47},[33,149296,149268],{"class":76},[33,149298,52690],{"class":47},[33,149300,2461],{"class":76},[33,149302,6321],{"class":47},[33,149304,149305,149307,149309,149311,149313,149315,149317,149319,149321,149323,149325,149327,149329],{"class":35,"line":64},[33,149306,149247],{"class":47},[33,149308,149250],{"class":76},[33,149310,52690],{"class":47},[33,149312,148528],{"class":119},[33,149314,13686],{"class":47},[33,149316,149259],{"class":76},[33,149318,52690],{"class":47},[33,149320,2416],{"class":76},[33,149322,13686],{"class":47},[33,149324,149268],{"class":76},[33,149326,52690],{"class":47},[33,149328,457],{"class":76},[33,149330,231],{"class":47},[33,149332,149333],{"class":35,"line":83},[33,149334,34499],{"class":47},[14,149336,149337],{},"读取并绘图：",[23,149339,149341],{"className":31631,"code":149340,"language":31633,"meta":28,"style":28},"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",[30,149342,149343,149349,149363,149373,149377,149409,149422,149426,149434,149443,149452,149456,149468,149477,149486,149495,149499,149507,149511,149528,149545,149549,149566,149582,149586],{"__ignoreMap":28},[33,149344,149345,149347],{"class":35,"line":36},[33,149346,31645],{"class":39},[33,149348,148344],{"class":47},[33,149350,149351,149353,149355,149357,149359,149361],{"class":35,"line":51},[33,149352,31990],{"class":39},[33,149354,148632],{"class":47},[33,149356,31645],{"class":39},[33,149358,148637],{"class":47},[33,149360,32636],{"class":39},[33,149362,148642],{"class":47},[33,149364,149365,149367,149369,149371],{"class":35,"line":57},[33,149366,31990],{"class":39},[33,149368,148491],{"class":47},[33,149370,31645],{"class":39},[33,149372,148496],{"class":47},[33,149374,149375],{"class":35,"line":64},[33,149376,160],{"emptyLinePlaceholder":159},[33,149378,149379,149381,149383,149385,149388,149390,149392,149394,149396,149398,149400,149402,149404,149407],{"class":35,"line":83},[33,149380,109086],{"class":39},[33,149382,148044],{"class":76},[33,149384,345],{"class":47},[33,149386,149387],{"class":119},"\"sales.json\"",[33,149389,13686],{"class":47},[33,149391,148054],{"class":119},[33,149393,13686],{"class":47},[33,149395,148059],{"class":955},[33,149397,73],{"class":39},[33,149399,148064],{"class":119},[33,149401,14965],{"class":47},[33,149403,32636],{"class":39},[33,149405,149406],{"class":955}," file",[33,149408,5141],{"class":47},[33,149410,149411,149413,149415,149418,149420],{"class":35,"line":89},[33,149412,102674],{"class":47},[33,149414,73],{"class":39},[33,149416,149417],{"class":47}," json.load(",[33,149419,46607],{"class":955},[33,149421,884],{"class":47},[33,149423,149424],{"class":35,"line":98},[33,149425,160],{"emptyLinePlaceholder":159},[33,149427,149428,149430,149432],{"class":35,"line":110},[33,149429,149053],{"class":47},[33,149431,73],{"class":39},[33,149433,53091],{"class":47},[33,149435,149436,149439,149441],{"class":35,"line":134},[33,149437,149438],{"class":47},"online_sales ",[33,149440,73],{"class":39},[33,149442,53091],{"class":47},[33,149444,149445,149448,149450],{"class":35,"line":156},[33,149446,149447],{"class":47},"offline_sales ",[33,149449,73],{"class":39},[33,149451,53091],{"class":47},[33,149453,149454],{"class":35,"line":163},[33,149455,160],{"emptyLinePlaceholder":159},[33,149457,149458,149460,149463,149465],{"class":35,"line":169},[33,149459,4435],{"class":39},[33,149461,149462],{"class":47}," item ",[33,149464,27296],{"class":39},[33,149466,149467],{"class":47}," data:\n",[33,149469,149470,149473,149475],{"class":35,"line":175},[33,149471,149472],{"class":47},"    dates.append(item[",[33,149474,149250],{"class":119},[33,149476,1276],{"class":47},[33,149478,149479,149482,149484],{"class":35,"line":181},[33,149480,149481],{"class":47},"    online_sales.append(item[",[33,149483,149259],{"class":119},[33,149485,1276],{"class":47},[33,149487,149488,149491,149493],{"class":35,"line":196},[33,149489,149490],{"class":47},"    offline_sales.append(item[",[33,149492,149268],{"class":119},[33,149494,1276],{"class":47},[33,149496,149497],{"class":35,"line":213},[33,149498,160],{"emptyLinePlaceholder":159},[33,149500,149501,149503,149505],{"class":35,"line":228},[33,149502,148505],{"class":47},[33,149504,73],{"class":39},[33,149506,148510],{"class":47},[33,149508,149509],{"class":35,"line":1345},[33,149510,149094],{"class":47},[33,149512,149513,149515,149517,149520,149522,149524,149526],{"class":35,"line":1350},[33,149514,148545],{"class":47},[33,149516,149101],{"class":119},[33,149518,149519],{"class":47},", online_sales, ",[33,149521,148998],{"class":955},[33,149523,73],{"class":39},[33,149525,32729],{"class":76},[33,149527,884],{"class":47},[33,149529,149530,149532,149534,149537,149539,149541,149543],{"class":35,"line":1359},[33,149531,148545],{"class":47},[33,149533,149139],{"class":119},[33,149535,149536],{"class":47},", offline_sales, ",[33,149538,148998],{"class":955},[33,149540,73],{"class":39},[33,149542,32729],{"class":76},[33,149544,884],{"class":47},[33,149546,149547],{"class":35,"line":1364},[33,149548,148721],{"class":47},[33,149550,149551,149553,149555,149557,149559,149561,149564],{"class":35,"line":1370},[33,149552,148726],{"class":955},[33,149554,73],{"class":39},[33,149556,148731],{"class":47},[33,149558,52660],{"class":955},[33,149560,73],{"class":39},[33,149562,149563],{"class":119},"\"销售趋势\"",[33,149565,39300],{"class":47},[33,149567,149568,149570,149572,149574,149576,149578,149580],{"class":35,"line":1425},[33,149569,148782],{"class":955},[33,149571,73],{"class":39},[33,149573,148787],{"class":47},[33,149575,148790],{"class":955},[33,149577,73],{"class":39},[33,149579,148795],{"class":119},[33,149581,39300],{"class":47},[33,149583,149584],{"class":35,"line":1438},[33,149585,884],{"class":47},[33,149587,149588,149590,149592],{"class":35,"line":1451},[33,149589,148577],{"class":47},[33,149591,149217],{"class":119},[33,149593,884],{"class":47},[18,149595,149597],{"id":149596},"_109-数据清洗","10.9 数据清洗",[14,149599,149600],{},"真实数据经常不整齐，需要清洗。",[14,149602,149603],{},"常见问题：",[574,149605,149606,149609,149612,149615],{},[564,149607,149608],{},"数字是字符串。",[564,149610,149611],{},"字段缺失。",[564,149613,149614],{},"空值。",[564,149616,149617],{},"日期格式不统一。",[14,149619,16386],{},[23,149621,149623],{"className":31631,"code":149622,"language":31633,"meta":28,"style":28},"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",[30,149624,149625,149634,149657,149677,149698,149702,149706,149714,149723,149727,149738,149752,149761,149766,149770,149778,149788,149792,149799],{"__ignoreMap":28},[33,149626,149627,149630,149632],{"class":35,"line":36},[33,149628,149629],{"class":47},"raw_data ",[33,149631,73],{"class":39},[33,149633,56700],{"class":47},[33,149635,149636,149639,149641,149643,149645,149647,149650,149652,149655],{"class":35,"line":51},[33,149637,149638],{"class":47},"    {",[33,149640,149250],{"class":119},[33,149642,52690],{"class":47},[33,149644,148518],{"class":119},[33,149646,13686],{"class":47},[33,149648,149649],{"class":119},"\"sales\"",[33,149651,52690],{"class":47},[33,149653,149654],{"class":119},"\"100\"",[33,149656,6321],{"class":47},[33,149658,149659,149661,149663,149665,149667,149669,149671,149673,149675],{"class":35,"line":57},[33,149660,149638],{"class":47},[33,149662,149250],{"class":119},[33,149664,52690],{"class":47},[33,149666,148523],{"class":119},[33,149668,13686],{"class":47},[33,149670,149649],{"class":119},[33,149672,52690],{"class":47},[33,149674,1520],{"class":119},[33,149676,6321],{"class":47},[33,149678,149679,149681,149683,149685,149687,149689,149691,149693,149696],{"class":35,"line":64},[33,149680,149638],{"class":47},[33,149682,149250],{"class":119},[33,149684,52690],{"class":47},[33,149686,148528],{"class":119},[33,149688,13686],{"class":47},[33,149690,149649],{"class":119},[33,149692,52690],{"class":47},[33,149694,149695],{"class":119},"\"120\"",[33,149697,6321],{"class":47},[33,149699,149700],{"class":35,"line":83},[33,149701,34499],{"class":47},[33,149703,149704],{"class":35,"line":89},[33,149705,160],{"emptyLinePlaceholder":159},[33,149707,149708,149710,149712],{"class":35,"line":98},[33,149709,149053],{"class":47},[33,149711,73],{"class":39},[33,149713,53091],{"class":47},[33,149715,149716,149719,149721],{"class":35,"line":110},[33,149717,149718],{"class":47},"sales ",[33,149720,73],{"class":39},[33,149722,53091],{"class":47},[33,149724,149725],{"class":35,"line":134},[33,149726,160],{"emptyLinePlaceholder":159},[33,149728,149729,149731,149733,149735],{"class":35,"line":156},[33,149730,4435],{"class":39},[33,149732,149462],{"class":47},[33,149734,27296],{"class":39},[33,149736,149737],{"class":47}," raw_data:\n",[33,149739,149740,149743,149745,149748,149750],{"class":35,"line":163},[33,149741,149742],{"class":47},"    value ",[33,149744,73],{"class":39},[33,149746,149747],{"class":47}," item.get(",[33,149749,149649],{"class":119},[33,149751,884],{"class":47},[33,149753,149754,149756,149758],{"class":35,"line":169},[33,149755,4509],{"class":39},[33,149757,40183],{"class":39},[33,149759,149760],{"class":47}," value:\n",[33,149762,149763],{"class":35,"line":175},[33,149764,149765],{"class":39},"        continue\n",[33,149767,149768],{"class":35,"line":181},[33,149769,160],{"emptyLinePlaceholder":159},[33,149771,149772,149774,149776],{"class":35,"line":196},[33,149773,149472],{"class":47},[33,149775,149250],{"class":119},[33,149777,1276],{"class":47},[33,149779,149780,149783,149785],{"class":35,"line":213},[33,149781,149782],{"class":47},"    sales.append(",[33,149784,40],{"class":76},[33,149786,149787],{"class":47},"(value))\n",[33,149789,149790],{"class":35,"line":228},[33,149791,160],{"emptyLinePlaceholder":159},[33,149793,149794,149796],{"class":35,"line":1345},[33,149795,31668],{"class":76},[33,149797,149798],{"class":47},"(dates)\n",[33,149800,149801,149803],{"class":35,"line":1350},[33,149802,31668],{"class":76},[33,149804,149805],{"class":47},"(sales)\n",[18,149807,149809],{"id":149808},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[23,149811,149813],{"className":31631,"code":149812,"language":31633,"meta":28,"style":28},"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",[30,149814,149815,149829,149839,149843,149851,149872,149894,149916,149938,149960,149964,149968,149990,150011,150015,150023,150027,150031,150041,150050,150060,150076,150080,150084,150101,150117,150133,150149,150159,150163],{"__ignoreMap":28},[33,149816,149817,149819,149821,149823,149825,149827],{"class":35,"line":36},[33,149818,31990],{"class":39},[33,149820,148632],{"class":47},[33,149822,31645],{"class":39},[33,149824,148637],{"class":47},[33,149826,32636],{"class":39},[33,149828,148642],{"class":47},[33,149830,149831,149833,149835,149837],{"class":35,"line":51},[33,149832,31990],{"class":39},[33,149834,148491],{"class":47},[33,149836,31645],{"class":39},[33,149838,148496],{"class":47},[33,149840,149841],{"class":35,"line":57},[33,149842,160],{"emptyLinePlaceholder":159},[33,149844,149845,149847,149849],{"class":35,"line":64},[33,149846,149718],{"class":47},[33,149848,73],{"class":39},[33,149850,56700],{"class":47},[33,149852,149853,149855,149857,149859,149862,149864,149866,149868,149870],{"class":35,"line":83},[33,149854,149638],{"class":47},[33,149856,149250],{"class":119},[33,149858,52690],{"class":47},[33,149860,149861],{"class":119},"\"2024-10-01\"",[33,149863,13686],{"class":47},[33,149865,85337],{"class":119},[33,149867,52690],{"class":47},[33,149869,93276],{"class":76},[33,149871,6321],{"class":47},[33,149873,149874,149876,149878,149880,149883,149885,149887,149889,149892],{"class":35,"line":89},[33,149875,149638],{"class":47},[33,149877,149250],{"class":119},[33,149879,52690],{"class":47},[33,149881,149882],{"class":119},"\"2024-10-02\"",[33,149884,13686],{"class":47},[33,149886,85337],{"class":119},[33,149888,52690],{"class":47},[33,149890,149891],{"class":76},"1800",[33,149893,6321],{"class":47},[33,149895,149896,149898,149900,149902,149905,149907,149909,149911,149914],{"class":35,"line":98},[33,149897,149638],{"class":47},[33,149899,149250],{"class":119},[33,149901,52690],{"class":47},[33,149903,149904],{"class":119},"\"2024-10-03\"",[33,149906,13686],{"class":47},[33,149908,85337],{"class":119},[33,149910,52690],{"class":47},[33,149912,149913],{"class":76},"1500",[33,149915,6321],{"class":47},[33,149917,149918,149920,149922,149924,149927,149929,149931,149933,149936],{"class":35,"line":110},[33,149919,149638],{"class":47},[33,149921,149250],{"class":119},[33,149923,52690],{"class":47},[33,149925,149926],{"class":119},"\"2024-10-04\"",[33,149928,13686],{"class":47},[33,149930,85337],{"class":119},[33,149932,52690],{"class":47},[33,149934,149935],{"class":76},"2100",[33,149937,6321],{"class":47},[33,149939,149940,149942,149944,149946,149949,149951,149953,149955,149958],{"class":35,"line":134},[33,149941,149638],{"class":47},[33,149943,149250],{"class":119},[33,149945,52690],{"class":47},[33,149947,149948],{"class":119},"\"2024-10-05\"",[33,149950,13686],{"class":47},[33,149952,85337],{"class":119},[33,149954,52690],{"class":47},[33,149956,149957],{"class":76},"2600",[33,149959,6321],{"class":47},[33,149961,149962],{"class":35,"line":156},[33,149963,34499],{"class":47},[33,149965,149966],{"class":35,"line":163},[33,149967,160],{"emptyLinePlaceholder":159},[33,149969,149970,149972,149974,149977,149979,149981,149983,149985,149987],{"class":35,"line":169},[33,149971,149053],{"class":47},[33,149973,73],{"class":39},[33,149975,149976],{"class":47}," [item[",[33,149978,149250],{"class":119},[33,149980,5840],{"class":47},[33,149982,4435],{"class":39},[33,149984,149462],{"class":47},[33,149986,27296],{"class":39},[33,149988,149989],{"class":47}," sales]\n",[33,149991,149992,149995,149997,149999,150001,150003,150005,150007,150009],{"class":35,"line":175},[33,149993,149994],{"class":47},"amounts ",[33,149996,73],{"class":39},[33,149998,149976],{"class":47},[33,150000,85337],{"class":119},[33,150002,5840],{"class":47},[33,150004,4435],{"class":39},[33,150006,149462],{"class":47},[33,150008,27296],{"class":39},[33,150010,149989],{"class":47},[33,150012,150013],{"class":35,"line":181},[33,150014,160],{"emptyLinePlaceholder":159},[33,150016,150017,150019,150021],{"class":35,"line":196},[33,150018,148505],{"class":47},[33,150020,73],{"class":39},[33,150022,148510],{"class":47},[33,150024,150025],{"class":35,"line":213},[33,150026,149094],{"class":47},[33,150028,150029],{"class":35,"line":228},[33,150030,148902],{"class":47},[33,150032,150033,150035,150037,150039],{"class":35,"line":1345},[33,150034,148907],{"class":955},[33,150036,73],{"class":39},[33,150038,148548],{"class":119},[33,150040,32719],{"class":47},[33,150042,150043,150045,150047],{"class":35,"line":1350},[33,150044,148918],{"class":955},[33,150046,73],{"class":39},[33,150048,150049],{"class":47},"amounts,\n",[33,150051,150052,150054,150056,150058],{"class":35,"line":1359},[33,150053,148947],{"class":955},[33,150055,73],{"class":39},[33,150057,32729],{"class":76},[33,150059,32719],{"class":47},[33,150061,150062,150064,150066,150068,150070,150072,150074],{"class":35,"line":1364},[33,150063,148958],{"class":955},[33,150065,73],{"class":39},[33,150067,148963],{"class":47},[33,150069,148966],{"class":955},[33,150071,73],{"class":39},[33,150073,32729],{"class":76},[33,150075,39300],{"class":47},[33,150077,150078],{"class":35,"line":1370},[33,150079,884],{"class":47},[33,150081,150082],{"class":35,"line":1425},[33,150083,148721],{"class":47},[33,150085,150086,150088,150090,150092,150094,150096,150099],{"class":35,"line":1438},[33,150087,148726],{"class":955},[33,150089,73],{"class":39},[33,150091,148731],{"class":47},[33,150093,52660],{"class":955},[33,150095,73],{"class":39},[33,150097,150098],{"class":119},"\"每日销售额\"",[33,150100,39300],{"class":47},[33,150102,150103,150105,150107,150109,150111,150113,150115],{"class":35,"line":1451},[33,150104,148745],{"class":955},[33,150106,73],{"class":39},[33,150108,148750],{"class":47},[33,150110,81063],{"class":955},[33,150112,73],{"class":39},[33,150114,148757],{"class":119},[33,150116,39300],{"class":47},[33,150118,150119,150121,150123,150125,150127,150129,150131],{"class":35,"line":1457},[33,150120,148764],{"class":955},[33,150122,73],{"class":39},[33,150124,148750],{"class":47},[33,150126,81063],{"class":955},[33,150128,73],{"class":39},[33,150130,148775],{"class":119},[33,150132,39300],{"class":47},[33,150134,150135,150137,150139,150141,150143,150145,150147],{"class":35,"line":1466},[33,150136,148782],{"class":955},[33,150138,73],{"class":39},[33,150140,148787],{"class":47},[33,150142,148790],{"class":955},[33,150144,73],{"class":39},[33,150146,148795],{"class":119},[33,150148,39300],{"class":47},[33,150150,150151,150154,150156],{"class":35,"line":1471},[33,150152,150153],{"class":955},"    datazoom_opts",[33,150155,73],{"class":39},[33,150157,150158],{"class":47},"[opts.DataZoomOpts()],\n",[33,150160,150161],{"class":35,"line":1477},[33,150162,884],{"class":47},[33,150164,150165,150167,150170],{"class":35,"line":1504},[33,150166,148577],{"class":47},[33,150168,150169],{"class":119},"\"daily_sales.html\"",[33,150171,884],{"class":47},[14,150173,150174,150177],{},[30,150175,150176],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[18,150179,150181],{"id":150180},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,150183,150184],{},"如果数据结构如下：",[23,150186,150188],{"className":31631,"code":150187,"language":31633,"meta":28,"style":28},"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",[30,150189,150190,150198,150206,150228,150249,150254,150261,150281,150301,150305],{"__ignoreMap":28},[33,150191,150192,150194,150196],{"class":35,"line":36},[33,150193,102911],{"class":47},[33,150195,73],{"class":39},[33,150197,16823],{"class":47},[33,150199,150200,150203],{"class":35,"line":51},[33,150201,150202],{"class":119},"    \"北京\"",[33,150204,150205],{"class":47},": [\n",[33,150207,150208,150210,150212,150214,150217,150219,150222,150224,150226],{"class":35,"line":57},[33,150209,6308],{"class":47},[33,150211,149250],{"class":119},[33,150213,52690],{"class":47},[33,150215,150216],{"class":119},"\"2024-01-01\"",[33,150218,13686],{"class":47},[33,150220,150221],{"class":119},"\"confirm\"",[33,150223,52690],{"class":47},[33,150225,77],{"class":76},[33,150227,6321],{"class":47},[33,150229,150230,150232,150234,150236,150239,150241,150243,150245,150247],{"class":35,"line":64},[33,150231,6308],{"class":47},[33,150233,149250],{"class":119},[33,150235,52690],{"class":47},[33,150237,150238],{"class":119},"\"2024-01-02\"",[33,150240,13686],{"class":47},[33,150242,150221],{"class":119},[33,150244,52690],{"class":47},[33,150246,2099],{"class":76},[33,150248,6321],{"class":47},[33,150250,150251],{"class":35,"line":83},[33,150252,150253],{"class":47},"    ],\n",[33,150255,150256,150259],{"class":35,"line":89},[33,150257,150258],{"class":119},"    \"上海\"",[33,150260,150205],{"class":47},[33,150262,150263,150265,150267,150269,150271,150273,150275,150277,150279],{"class":35,"line":98},[33,150264,6308],{"class":47},[33,150266,149250],{"class":119},[33,150268,52690],{"class":47},[33,150270,150216],{"class":119},[33,150272,13686],{"class":47},[33,150274,150221],{"class":119},[33,150276,52690],{"class":47},[33,150278,737],{"class":76},[33,150280,6321],{"class":47},[33,150282,150283,150285,150287,150289,150291,150293,150295,150297,150299],{"class":35,"line":110},[33,150284,6308],{"class":47},[33,150286,149250],{"class":119},[33,150288,52690],{"class":47},[33,150290,150238],{"class":119},[33,150292,13686],{"class":47},[33,150294,150221],{"class":119},[33,150296,52690],{"class":47},[33,150298,2124],{"class":76},[33,150300,6321],{"class":47},[33,150302,150303],{"class":35,"line":134},[33,150304,150253],{"class":47},[33,150306,150307],{"class":35,"line":156},[33,150308,231],{"class":47},[14,150310,150311],{},"绘制多地区趋势：",[23,150313,150315],{"className":31631,"code":150314,"language":31633,"meta":28,"style":28},"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",[30,150316,150317,150331,150341,150345,150370,150374,150382,150386,150390,150402,150424,150437,150441,150445,150462,150478,150482],{"__ignoreMap":28},[33,150318,150319,150321,150323,150325,150327,150329],{"class":35,"line":36},[33,150320,31990],{"class":39},[33,150322,148632],{"class":47},[33,150324,31645],{"class":39},[33,150326,148637],{"class":47},[33,150328,32636],{"class":39},[33,150330,148642],{"class":47},[33,150332,150333,150335,150337,150339],{"class":35,"line":51},[33,150334,31990],{"class":39},[33,150336,148491],{"class":47},[33,150338,31645],{"class":39},[33,150340,148496],{"class":47},[33,150342,150343],{"class":35,"line":57},[33,150344,160],{"emptyLinePlaceholder":159},[33,150346,150347,150349,150351,150353,150355,150357,150359,150361,150363,150366,150368],{"class":35,"line":64},[33,150348,149053],{"class":47},[33,150350,73],{"class":39},[33,150352,149976],{"class":47},[33,150354,149250],{"class":119},[33,150356,5840],{"class":47},[33,150358,4435],{"class":39},[33,150360,149462],{"class":47},[33,150362,27296],{"class":39},[33,150364,150365],{"class":47}," data[",[33,150367,70522],{"class":119},[33,150369,78780],{"class":47},[33,150371,150372],{"class":35,"line":83},[33,150373,160],{"emptyLinePlaceholder":159},[33,150375,150376,150378,150380],{"class":35,"line":89},[33,150377,148505],{"class":47},[33,150379,73],{"class":39},[33,150381,148510],{"class":47},[33,150383,150384],{"class":35,"line":98},[33,150385,149094],{"class":47},[33,150387,150388],{"class":35,"line":110},[33,150389,160],{"emptyLinePlaceholder":159},[33,150391,150392,150394,150397,150399],{"class":35,"line":134},[33,150393,4435],{"class":39},[33,150395,150396],{"class":47}," city, records ",[33,150398,27296],{"class":39},[33,150400,150401],{"class":47}," data.items():\n",[33,150403,150404,150407,150409,150411,150413,150415,150417,150419,150421],{"class":35,"line":156},[33,150405,150406],{"class":47},"    values ",[33,150408,73],{"class":39},[33,150410,149976],{"class":47},[33,150412,150221],{"class":119},[33,150414,5840],{"class":47},[33,150416,4435],{"class":39},[33,150418,149462],{"class":47},[33,150420,27296],{"class":39},[33,150422,150423],{"class":47}," records]\n",[33,150425,150426,150429,150431,150433,150435],{"class":35,"line":163},[33,150427,150428],{"class":47},"    line.add_yaxis(city, values, ",[33,150430,148998],{"class":955},[33,150432,73],{"class":39},[33,150434,32729],{"class":76},[33,150436,884],{"class":47},[33,150438,150439],{"class":35,"line":169},[33,150440,160],{"emptyLinePlaceholder":159},[33,150442,150443],{"class":35,"line":175},[33,150444,148721],{"class":47},[33,150446,150447,150449,150451,150453,150455,150457,150460],{"class":35,"line":181},[33,150448,148726],{"class":955},[33,150450,73],{"class":39},[33,150452,148731],{"class":47},[33,150454,52660],{"class":955},[33,150456,73],{"class":39},[33,150458,150459],{"class":119},"\"多地区趋势图\"",[33,150461,39300],{"class":47},[33,150463,150464,150466,150468,150470,150472,150474,150476],{"class":35,"line":196},[33,150465,148782],{"class":955},[33,150467,73],{"class":39},[33,150469,148787],{"class":47},[33,150471,148790],{"class":955},[33,150473,73],{"class":39},[33,150475,148795],{"class":119},[33,150477,39300],{"class":47},[33,150479,150480],{"class":35,"line":213},[33,150481,884],{"class":47},[33,150483,150484,150486,150489],{"class":35,"line":228},[33,150485,148577],{"class":47},[33,150487,150488],{"class":119},"\"trend.html\"",[33,150490,884],{"class":47},[14,150492,150493],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[18,150495,150497],{"id":150496},"_1012-易错点","10.12 易错点",[574,150499,150500,150506,150512,150522,150528],{},[564,150501,150502,150505],{},[30,150503,150504],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[564,150507,150508,150511],{},[30,150509,150510],{},"render()"," 生成的是 HTML，不是图片。",[564,150513,150514,150515,150518,150519,29638],{},"JSON 字符串用 ",[30,150516,150517],{},"json.loads()","，JSON 文件用 ",[30,150520,150521],{},"json.load()",[564,150523,150524,150525,29638],{},"中文 JSON 保存时加 ",[30,150526,150527],{},"ensure_ascii=False",[564,150529,150530],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[18,150532,150534],{"id":150533},"_1013-本章练习","10.13 本章练习",[574,150536,150537,150540,150543,150546,150549],{},[564,150538,150539],{},"安装 pyecharts 并生成第一个折线图。",[564,150541,150542],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[564,150544,150545],{},"绘制两条折线，对比线上和线下销售额。",[564,150547,150548],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[564,150550,150551],{},"对含有空值的销售数据进行清洗后再绘图。",[1544,150553,150554],{},"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":28,"searchDepth":51,"depth":51,"links":150556},[150557,150558,150559,150560,150561,150562,150563,150564,150565,150566,150567,150568,150569],{"id":148173,"depth":51,"text":148174},{"id":148248,"depth":51,"text":148249},{"id":148427,"depth":51,"text":148428},{"id":148478,"depth":51,"text":148479},{"id":148612,"depth":51,"text":148613},{"id":148888,"depth":51,"text":148889},{"id":149014,"depth":51,"text":149015},{"id":149225,"depth":51,"text":149226},{"id":149596,"depth":51,"text":149597},{"id":149808,"depth":51,"text":149809},{"id":150180,"depth":51,"text":150181},{"id":150496,"depth":51,"text":150497},{"id":150533,"depth":51,"text":150534},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148165,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150576,"title":150577,"body":150578,"description":24628,"extension":1557,"meta":152938,"navigation":159,"path":152939,"seo":152940,"stem":152941,"__hash__":152942},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150579,"toc":152915},[150580,150583,150587,150590,150593,150669,150672,150763,150766,150770,150773,150817,150830,150834,150837,150904,150907,150911,150914,150998,151006,151010,151015,151156,151159,151170,151176,151182,151296,151300,151303,151306,151559,151562,151566,151569,151673,151676,151680,151831,151835,151842,151955,151959,151962,152068,152071,152075,152078,152109,152112,152217,152220,152224,152228,152238,152306,152310,152317,152381,152384,152388,152394,152490,152499,152503,152827,152836,152840,152868,152872,152912],[10,150581,150577],{"id":150582},"_11-面向对象基础",[18,150584,150586],{"id":150585},"_111-什么是面向对象","11.1 什么是面向对象",[14,150588,150589],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,150591,150592],{},"面向过程：",[23,150594,150596],{"className":31631,"code":150595,"language":31633,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[30,150597,150598,150607,150615,150619,150629,150660,150664],{"__ignoreMap":28},[33,150599,150600,150602,150604],{"class":35,"line":36},[33,150601,147789],{"class":47},[33,150603,73],{"class":39},[33,150605,150606],{"class":119}," \"小明\"\n",[33,150608,150609,150611,150613],{"class":35,"line":51},[33,150610,147799],{"class":47},[33,150612,73],{"class":39},[33,150614,147804],{"class":76},[33,150616,150617],{"class":35,"line":57},[33,150618,160],{"emptyLinePlaceholder":159},[33,150620,150621,150623,150626],{"class":35,"line":64},[33,150622,33200],{"class":39},[33,150624,150625],{"class":43}," introduce",[33,150627,150628],{"class":47},"(name, age):\n",[33,150630,150631,150633,150635,150637,150640,150642,150644,150646,150649,150651,150653,150655,150658],{"class":35,"line":83},[33,150632,32552],{"class":76},[33,150634,345],{"class":47},[33,150636,1677],{"class":39},[33,150638,150639],{"class":119},"\"我叫",[33,150641,698],{"class":76},[33,150643,81063],{"class":47},[33,150645,2542],{"class":76},[33,150647,150648],{"class":119},"，今年",[33,150650,698],{"class":76},[33,150652,71474],{"class":47},[33,150654,2542],{"class":76},[33,150656,150657],{"class":119},"岁\"",[33,150659,884],{"class":47},[33,150661,150662],{"class":35,"line":89},[33,150663,160],{"emptyLinePlaceholder":159},[33,150665,150666],{"class":35,"line":98},[33,150667,150668],{"class":47},"introduce(name, age)\n",[14,150670,150671],{},"面向对象：",[23,150673,150675],{"className":31631,"code":150674,"language":31633,"meta":28,"style":28},"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",[30,150676,150677,150685,150693,150722,150726,150730,150740,150749,150758],{"__ignoreMap":28},[33,150678,150679,150681,150683],{"class":35,"line":36},[33,150680,15945],{"class":39},[33,150682,9149],{"class":43},[33,150684,5141],{"class":47},[33,150686,150687,150689,150691],{"class":35,"line":51},[33,150688,32054],{"class":39},[33,150690,150625],{"class":43},[33,150692,32060],{"class":47},[33,150694,150695,150697,150699,150701,150703,150706,150708,150710,150712,150714,150716,150718,150720],{"class":35,"line":57},[33,150696,33704],{"class":76},[33,150698,345],{"class":47},[33,150700,1677],{"class":39},[33,150702,150639],{"class":119},[33,150704,150705],{"class":76},"{self",[33,150707,81554],{"class":47},[33,150709,2542],{"class":76},[33,150711,150648],{"class":119},[33,150713,150705],{"class":76},[33,150715,81566],{"class":47},[33,150717,2542],{"class":76},[33,150719,150657],{"class":119},[33,150721,884],{"class":47},[33,150723,150724],{"class":35,"line":64},[33,150725,160],{"emptyLinePlaceholder":159},[33,150727,150728],{"class":35,"line":83},[33,150729,160],{"emptyLinePlaceholder":159},[33,150731,150732,150735,150737],{"class":35,"line":89},[33,150733,150734],{"class":47},"student ",[33,150736,73],{"class":39},[33,150738,150739],{"class":47}," Student()\n",[33,150741,150742,150745,150747],{"class":35,"line":98},[33,150743,150744],{"class":47},"student.name ",[33,150746,73],{"class":39},[33,150748,150606],{"class":119},[33,150750,150751,150754,150756],{"class":35,"line":110},[33,150752,150753],{"class":47},"student.age ",[33,150755,73],{"class":39},[33,150757,147804],{"class":76},[33,150759,150760],{"class":35,"line":134},[33,150761,150762],{"class":47},"student.introduce()\n",[14,150764,150765],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[18,150767,150769],{"id":150768},"_112-类和对象","11.2 类和对象",[14,150771,150772],{},"类是模板，对象是根据模板创建出来的具体实例。",[23,150774,150776],{"className":31631,"code":150775,"language":31633,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[30,150777,150778,150786,150791,150795,150799,150808],{"__ignoreMap":28},[33,150779,150780,150782,150784],{"class":35,"line":36},[33,150781,15945],{"class":39},[33,150783,9149],{"class":43},[33,150785,5141],{"class":47},[33,150787,150788],{"class":35,"line":51},[33,150789,150790],{"class":39},"    pass\n",[33,150792,150793],{"class":35,"line":57},[33,150794,160],{"emptyLinePlaceholder":159},[33,150796,150797],{"class":35,"line":64},[33,150798,160],{"emptyLinePlaceholder":159},[33,150800,150801,150804,150806],{"class":35,"line":83},[33,150802,150803],{"class":47},"student1 ",[33,150805,73],{"class":39},[33,150807,150739],{"class":47},[33,150809,150810,150813,150815],{"class":35,"line":89},[33,150811,150812],{"class":47},"student2 ",[33,150814,73],{"class":39},[33,150816,150739],{"class":47},[14,150818,150819,150822,150823,102271,150826,150829],{},[30,150820,150821],{},"Student"," 是类，",[30,150824,150825],{},"student1",[30,150827,150828],{},"student2"," 是对象。",[18,150831,150833],{"id":150832},"_113-属性","11.3 属性",[14,150835,150836],{},"属性是对象保存的数据。",[23,150838,150840],{"className":31631,"code":150839,"language":31633,"meta":28,"style":28},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[30,150841,150842,150850,150854,150858,150862,150870,150878,150886,150890,150897],{"__ignoreMap":28},[33,150843,150844,150846,150848],{"class":35,"line":36},[33,150845,15945],{"class":39},[33,150847,9149],{"class":43},[33,150849,5141],{"class":47},[33,150851,150852],{"class":35,"line":51},[33,150853,150790],{"class":39},[33,150855,150856],{"class":35,"line":57},[33,150857,160],{"emptyLinePlaceholder":159},[33,150859,150860],{"class":35,"line":64},[33,150861,160],{"emptyLinePlaceholder":159},[33,150863,150864,150866,150868],{"class":35,"line":83},[33,150865,150734],{"class":47},[33,150867,73],{"class":39},[33,150869,150739],{"class":47},[33,150871,150872,150874,150876],{"class":35,"line":89},[33,150873,150744],{"class":47},[33,150875,73],{"class":39},[33,150877,150606],{"class":119},[33,150879,150880,150882,150884],{"class":35,"line":98},[33,150881,150753],{"class":47},[33,150883,73],{"class":39},[33,150885,147804],{"class":76},[33,150887,150888],{"class":35,"line":110},[33,150889,160],{"emptyLinePlaceholder":159},[33,150891,150892,150894],{"class":35,"line":134},[33,150893,31668],{"class":76},[33,150895,150896],{"class":47},"(student.name)\n",[33,150898,150899,150901],{"class":35,"line":156},[33,150900,31668],{"class":76},[33,150902,150903],{"class":47},"(student.age)\n",[14,150905,150906],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[18,150908,150910],{"id":150909},"_114-方法","11.4 方法",[14,150912,150913],{},"类中的函数叫方法。",[23,150915,150916],{"className":31631,"code":150674,"language":31633,"meta":28,"style":28},[30,150917,150918,150926,150934,150962,150966,150970,150978,150986,150994],{"__ignoreMap":28},[33,150919,150920,150922,150924],{"class":35,"line":36},[33,150921,15945],{"class":39},[33,150923,9149],{"class":43},[33,150925,5141],{"class":47},[33,150927,150928,150930,150932],{"class":35,"line":51},[33,150929,32054],{"class":39},[33,150931,150625],{"class":43},[33,150933,32060],{"class":47},[33,150935,150936,150938,150940,150942,150944,150946,150948,150950,150952,150954,150956,150958,150960],{"class":35,"line":57},[33,150937,33704],{"class":76},[33,150939,345],{"class":47},[33,150941,1677],{"class":39},[33,150943,150639],{"class":119},[33,150945,150705],{"class":76},[33,150947,81554],{"class":47},[33,150949,2542],{"class":76},[33,150951,150648],{"class":119},[33,150953,150705],{"class":76},[33,150955,81566],{"class":47},[33,150957,2542],{"class":76},[33,150959,150657],{"class":119},[33,150961,884],{"class":47},[33,150963,150964],{"class":35,"line":64},[33,150965,160],{"emptyLinePlaceholder":159},[33,150967,150968],{"class":35,"line":83},[33,150969,160],{"emptyLinePlaceholder":159},[33,150971,150972,150974,150976],{"class":35,"line":89},[33,150973,150734],{"class":47},[33,150975,73],{"class":39},[33,150977,150739],{"class":47},[33,150979,150980,150982,150984],{"class":35,"line":98},[33,150981,150744],{"class":47},[33,150983,73],{"class":39},[33,150985,150606],{"class":119},[33,150987,150988,150990,150992],{"class":35,"line":110},[33,150989,150753],{"class":47},[33,150991,73],{"class":39},[33,150993,147804],{"class":76},[33,150995,150996],{"class":35,"line":134},[33,150997,150762],{"class":47},[14,150999,151000,151002,151003,151005],{},[30,151001,32076],{}," 表示当前对象。调用方法时不需要手动传入 ",[30,151004,32076],{},"，Python 会自动传。",[18,151007,151009],{"id":151008},"_115-构造方法__init__","11.5 构造方法__init__",[14,151011,151012,151014],{},[30,151013,32082],{}," 在对象创建时自动执行，用于初始化属性。",[23,151016,151018],{"className":31631,"code":151017,"language":31633,"meta":28,"style":28},"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",[30,151019,151020,151028,151037,151049,151061,151072,151076,151084,151122,151126,151130,151152],{"__ignoreMap":28},[33,151021,151022,151024,151026],{"class":35,"line":36},[33,151023,15945],{"class":39},[33,151025,9149],{"class":43},[33,151027,5141],{"class":47},[33,151029,151030,151032,151034],{"class":35,"line":51},[33,151031,32054],{"class":39},[33,151033,32057],{"class":76},[33,151035,151036],{"class":47},"(self, name, age, score):\n",[33,151038,151039,151041,151044,151046],{"class":35,"line":57},[33,151040,32098],{"class":76},[33,151042,151043],{"class":47},".name ",[33,151045,73],{"class":39},[33,151047,151048],{"class":47}," name\n",[33,151050,151051,151053,151056,151058],{"class":35,"line":64},[33,151052,32098],{"class":76},[33,151054,151055],{"class":47},".age ",[33,151057,73],{"class":39},[33,151059,151060],{"class":47}," age\n",[33,151062,151063,151065,151068,151070],{"class":35,"line":83},[33,151064,32098],{"class":76},[33,151066,151067],{"class":47},".score ",[33,151069,73],{"class":39},[33,151071,3032],{"class":47},[33,151073,151074],{"class":35,"line":89},[33,151075,160],{"emptyLinePlaceholder":159},[33,151077,151078,151080,151082],{"class":35,"line":98},[33,151079,32054],{"class":39},[33,151081,150625],{"class":43},[33,151083,32060],{"class":47},[33,151085,151086,151088,151090,151092,151094,151096,151098,151100,151102,151104,151106,151108,151111,151113,151116,151118,151120],{"class":35,"line":110},[33,151087,33704],{"class":76},[33,151089,345],{"class":47},[33,151091,1677],{"class":39},[33,151093,150639],{"class":119},[33,151095,150705],{"class":76},[33,151097,81554],{"class":47},[33,151099,2542],{"class":76},[33,151101,150648],{"class":119},[33,151103,150705],{"class":76},[33,151105,81566],{"class":47},[33,151107,2542],{"class":76},[33,151109,151110],{"class":119},"岁，成绩",[33,151112,150705],{"class":76},[33,151114,151115],{"class":47},".score",[33,151117,2542],{"class":76},[33,151119,1866],{"class":119},[33,151121,884],{"class":47},[33,151123,151124],{"class":35,"line":134},[33,151125,160],{"emptyLinePlaceholder":159},[33,151127,151128],{"class":35,"line":156},[33,151129,160],{"emptyLinePlaceholder":159},[33,151131,151132,151134,151136,151139,151142,151144,151146,151148,151150],{"class":35,"line":163},[33,151133,150734],{"class":47},[33,151135,73],{"class":39},[33,151137,151138],{"class":47}," Student(",[33,151140,151141],{"class":119},"\"小明\"",[33,151143,13686],{"class":47},[33,151145,2250],{"class":76},[33,151147,13686],{"class":47},[33,151149,2584],{"class":76},[33,151151,884],{"class":47},[33,151153,151154],{"class":35,"line":169},[33,151155,150762],{"class":47},[14,151157,151158],{},"构造方法的好处：",[574,151160,151161,151164,151167],{},[564,151162,151163],{},"创建对象时必须提供必要数据。",[564,151165,151166],{},"属性初始化集中，不容易漏。",[564,151168,151169],{},"对象状态更完整。",[18,151171,151173,151174],{"id":151172},"_116-str","11.6 ",[480,151175,2760],{},[14,151177,151178,151179,29638],{},"直接打印对象时，默认输出不直观。可以定义 ",[30,151180,151181],{},"__str__",[23,151183,151185],{"className":31631,"code":151184,"language":31633,"meta":28,"style":28},"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",[30,151186,151187,151195,151204,151214,151224,151228,151237,151265,151269,151273,151289],{"__ignoreMap":28},[33,151188,151189,151191,151193],{"class":35,"line":36},[33,151190,15945],{"class":39},[33,151192,9149],{"class":43},[33,151194,5141],{"class":47},[33,151196,151197,151199,151201],{"class":35,"line":51},[33,151198,32054],{"class":39},[33,151200,32057],{"class":76},[33,151202,151203],{"class":47},"(self, name, age):\n",[33,151205,151206,151208,151210,151212],{"class":35,"line":57},[33,151207,32098],{"class":76},[33,151209,151043],{"class":47},[33,151211,73],{"class":39},[33,151213,151048],{"class":47},[33,151215,151216,151218,151220,151222],{"class":35,"line":64},[33,151217,32098],{"class":76},[33,151219,151055],{"class":47},[33,151221,73],{"class":39},[33,151223,151060],{"class":47},[33,151225,151226],{"class":35,"line":83},[33,151227,160],{"emptyLinePlaceholder":159},[33,151229,151230,151232,151235],{"class":35,"line":89},[33,151231,32054],{"class":39},[33,151233,151234],{"class":76}," __str__",[33,151236,32060],{"class":47},[33,151238,151239,151241,151244,151247,151249,151251,151253,151256,151258,151260,151262],{"class":35,"line":98},[33,151240,16003],{"class":39},[33,151242,151243],{"class":39}," f",[33,151245,151246],{"class":119},"\"Student(name=",[33,151248,150705],{"class":76},[33,151250,81554],{"class":47},[33,151252,2542],{"class":76},[33,151254,151255],{"class":119},", age=",[33,151257,150705],{"class":76},[33,151259,81566],{"class":47},[33,151261,2542],{"class":76},[33,151263,151264],{"class":119},")\"\n",[33,151266,151267],{"class":35,"line":110},[33,151268,160],{"emptyLinePlaceholder":159},[33,151270,151271],{"class":35,"line":134},[33,151272,160],{"emptyLinePlaceholder":159},[33,151274,151275,151277,151279,151281,151283,151285,151287],{"class":35,"line":156},[33,151276,150734],{"class":47},[33,151278,73],{"class":39},[33,151280,151138],{"class":47},[33,151282,151141],{"class":119},[33,151284,13686],{"class":47},[33,151286,2250],{"class":76},[33,151288,884],{"class":47},[33,151290,151291,151293],{"class":35,"line":163},[33,151292,31668],{"class":76},[33,151294,151295],{"class":47},"(student)\n",[18,151297,151299],{"id":151298},"_117-封装","11.7 封装",[14,151301,151302],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,151304,151305],{},"Python 中以双下划线开头的属性通常视为私有属性。",[23,151307,151309],{"className":31631,"code":151308,"language":31633,"meta":28,"style":28},"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",[30,151310,151311,151320,151329,151341,151353,151357,151366,151375,151379,151389,151402,151413,151418,151429,151433,151442,151454,151465,151469,151482,151493,151497,151508,151512,151516,151534,151543,151552],{"__ignoreMap":28},[33,151312,151313,151315,151318],{"class":35,"line":36},[33,151314,15945],{"class":39},[33,151316,151317],{"class":43}," Account",[33,151319,5141],{"class":47},[33,151321,151322,151324,151326],{"class":35,"line":51},[33,151323,32054],{"class":39},[33,151325,32057],{"class":76},[33,151327,151328],{"class":47},"(self, owner, balance):\n",[33,151330,151331,151333,151336,151338],{"class":35,"line":57},[33,151332,32098],{"class":76},[33,151334,151335],{"class":47},".owner ",[33,151337,73],{"class":39},[33,151339,151340],{"class":47}," owner\n",[33,151342,151343,151345,151348,151350],{"class":35,"line":64},[33,151344,32098],{"class":76},[33,151346,151347],{"class":47},".__balance ",[33,151349,73],{"class":39},[33,151351,151352],{"class":47}," balance\n",[33,151354,151355],{"class":35,"line":83},[33,151356,160],{"emptyLinePlaceholder":159},[33,151358,151359,151361,151364],{"class":35,"line":89},[33,151360,32054],{"class":39},[33,151362,151363],{"class":43}," get_balance",[33,151365,32060],{"class":47},[33,151367,151368,151370,151372],{"class":35,"line":98},[33,151369,16003],{"class":39},[33,151371,40126],{"class":76},[33,151373,151374],{"class":47},".__balance\n",[33,151376,151377],{"class":35,"line":110},[33,151378,160],{"emptyLinePlaceholder":159},[33,151380,151381,151383,151386],{"class":35,"line":134},[33,151382,32054],{"class":39},[33,151384,151385],{"class":43}," deposit",[33,151387,151388],{"class":47},"(self, money):\n",[33,151390,151391,151393,151396,151398,151400],{"class":35,"line":156},[33,151392,3915],{"class":39},[33,151394,151395],{"class":47}," money ",[33,151397,3041],{"class":39},[33,151399,5492],{"class":76},[33,151401,5141],{"class":47},[33,151403,151404,151406,151408,151411],{"class":35,"line":163},[33,151405,35903],{"class":76},[33,151407,345],{"class":47},[33,151409,151410],{"class":119},"\"存款金额必须大于0\"",[33,151412,884],{"class":47},[33,151414,151415],{"class":35,"line":169},[33,151416,151417],{"class":39},"            return\n",[33,151419,151420,151422,151424,151426],{"class":35,"line":175},[33,151421,32098],{"class":76},[33,151423,151347],{"class":47},[33,151425,10728],{"class":39},[33,151427,151428],{"class":47}," money\n",[33,151430,151431],{"class":35,"line":181},[33,151432,160],{"emptyLinePlaceholder":159},[33,151434,151435,151437,151440],{"class":35,"line":196},[33,151436,32054],{"class":39},[33,151438,151439],{"class":43}," withdraw",[33,151441,151388],{"class":47},[33,151443,151444,151446,151448,151450,151452],{"class":35,"line":213},[33,151445,3915],{"class":39},[33,151447,151395],{"class":47},[33,151449,3041],{"class":39},[33,151451,5492],{"class":76},[33,151453,5141],{"class":47},[33,151455,151456,151458,151460,151463],{"class":35,"line":228},[33,151457,35903],{"class":76},[33,151459,345],{"class":47},[33,151461,151462],{"class":119},"\"取款金额必须大于0\"",[33,151464,884],{"class":47},[33,151466,151467],{"class":35,"line":1345},[33,151468,151417],{"class":39},[33,151470,151471,151473,151475,151477,151479],{"class":35,"line":1350},[33,151472,3915],{"class":39},[33,151474,151395],{"class":47},[33,151476,1265],{"class":39},[33,151478,40126],{"class":76},[33,151480,151481],{"class":47},".__balance:\n",[33,151483,151484,151486,151488,151491],{"class":35,"line":1359},[33,151485,35903],{"class":76},[33,151487,345],{"class":47},[33,151489,151490],{"class":119},"\"余额不足\"",[33,151492,884],{"class":47},[33,151494,151495],{"class":35,"line":1364},[33,151496,151417],{"class":39},[33,151498,151499,151501,151503,151506],{"class":35,"line":1370},[33,151500,32098],{"class":76},[33,151502,151347],{"class":47},[33,151504,151505],{"class":39},"-=",[33,151507,151428],{"class":47},[33,151509,151510],{"class":35,"line":1425},[33,151511,160],{"emptyLinePlaceholder":159},[33,151513,151514],{"class":35,"line":1438},[33,151515,160],{"emptyLinePlaceholder":159},[33,151517,151518,151521,151523,151526,151528,151530,151532],{"class":35,"line":1451},[33,151519,151520],{"class":47},"account ",[33,151522,73],{"class":39},[33,151524,151525],{"class":47}," Account(",[33,151527,151141],{"class":119},[33,151529,13686],{"class":47},[33,151531,191],{"class":76},[33,151533,884],{"class":47},[33,151535,151536,151539,151541],{"class":35,"line":1457},[33,151537,151538],{"class":47},"account.deposit(",[33,151540,3163],{"class":76},[33,151542,884],{"class":47},[33,151544,151545,151548,151550],{"class":35,"line":1466},[33,151546,151547],{"class":47},"account.withdraw(",[33,151549,457],{"class":76},[33,151551,884],{"class":47},[33,151553,151554,151556],{"class":35,"line":1471},[33,151555,31668],{"class":76},[33,151557,151558],{"class":47},"(account.get_balance())\n",[14,151560,151561],{},"封装的意义是避免外部随意修改内部状态。",[18,151563,151565],{"id":151564},"_118-继承","11.8 继承",[14,151567,151568],{},"继承可以让子类复用父类的属性和方法。",[23,151570,151572],{"className":31631,"code":151571,"language":31633,"meta":28,"style":28},"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",[30,151573,151574,151583,151592,151603,151607,151611,151625,151634,151645,151649,151653,151663,151668],{"__ignoreMap":28},[33,151575,151576,151578,151581],{"class":35,"line":36},[33,151577,15945],{"class":39},[33,151579,151580],{"class":43}," Animal",[33,151582,5141],{"class":47},[33,151584,151585,151587,151590],{"class":35,"line":51},[33,151586,32054],{"class":39},[33,151588,151589],{"class":43}," eat",[33,151591,32060],{"class":47},[33,151593,151594,151596,151598,151601],{"class":35,"line":57},[33,151595,33704],{"class":76},[33,151597,345],{"class":47},[33,151599,151600],{"class":119},"\"吃东西\"",[33,151602,884],{"class":47},[33,151604,151605],{"class":35,"line":64},[33,151606,160],{"emptyLinePlaceholder":159},[33,151608,151609],{"class":35,"line":83},[33,151610,160],{"emptyLinePlaceholder":159},[33,151612,151613,151615,151618,151620,151623],{"class":35,"line":89},[33,151614,15945],{"class":39},[33,151616,151617],{"class":43}," Dog",[33,151619,345],{"class":47},[33,151621,151622],{"class":43},"Animal",[33,151624,32039],{"class":47},[33,151626,151627,151629,151632],{"class":35,"line":98},[33,151628,32054],{"class":39},[33,151630,151631],{"class":43}," bark",[33,151633,32060],{"class":47},[33,151635,151636,151638,151640,151643],{"class":35,"line":110},[33,151637,33704],{"class":76},[33,151639,345],{"class":47},[33,151641,151642],{"class":119},"\"汪汪\"",[33,151644,884],{"class":47},[33,151646,151647],{"class":35,"line":134},[33,151648,160],{"emptyLinePlaceholder":159},[33,151650,151651],{"class":35,"line":156},[33,151652,160],{"emptyLinePlaceholder":159},[33,151654,151655,151658,151660],{"class":35,"line":163},[33,151656,151657],{"class":47},"dog ",[33,151659,73],{"class":39},[33,151661,151662],{"class":47}," Dog()\n",[33,151664,151665],{"class":35,"line":169},[33,151666,151667],{"class":47},"dog.eat()\n",[33,151669,151670],{"class":35,"line":175},[33,151671,151672],{"class":47},"dog.bark()\n",[14,151674,151675],{},"子类可以扩展新方法，也可以重写父类方法。",[18,151677,151679],{"id":151678},"_119-方法重写","11.9 方法重写",[23,151681,151683],{"className":31631,"code":151682,"language":31633,"meta":28,"style":28},"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",[30,151684,151685,151693,151702,151713,151717,151721,151733,151741,151751,151755,151759,151772,151780,151791,151795,151799,151807,151817,151821,151826],{"__ignoreMap":28},[33,151686,151687,151689,151691],{"class":35,"line":36},[33,151688,15945],{"class":39},[33,151690,151580],{"class":43},[33,151692,5141],{"class":47},[33,151694,151695,151697,151700],{"class":35,"line":51},[33,151696,32054],{"class":39},[33,151698,151699],{"class":43}," speak",[33,151701,32060],{"class":47},[33,151703,151704,151706,151708,151711],{"class":35,"line":57},[33,151705,33704],{"class":76},[33,151707,345],{"class":47},[33,151709,151710],{"class":119},"\"动物叫\"",[33,151712,884],{"class":47},[33,151714,151715],{"class":35,"line":64},[33,151716,160],{"emptyLinePlaceholder":159},[33,151718,151719],{"class":35,"line":83},[33,151720,160],{"emptyLinePlaceholder":159},[33,151722,151723,151725,151727,151729,151731],{"class":35,"line":89},[33,151724,15945],{"class":39},[33,151726,151617],{"class":43},[33,151728,345],{"class":47},[33,151730,151622],{"class":43},[33,151732,32039],{"class":47},[33,151734,151735,151737,151739],{"class":35,"line":98},[33,151736,32054],{"class":39},[33,151738,151699],{"class":43},[33,151740,32060],{"class":47},[33,151742,151743,151745,151747,151749],{"class":35,"line":110},[33,151744,33704],{"class":76},[33,151746,345],{"class":47},[33,151748,151642],{"class":119},[33,151750,884],{"class":47},[33,151752,151753],{"class":35,"line":134},[33,151754,160],{"emptyLinePlaceholder":159},[33,151756,151757],{"class":35,"line":156},[33,151758,160],{"emptyLinePlaceholder":159},[33,151760,151761,151763,151766,151768,151770],{"class":35,"line":163},[33,151762,15945],{"class":39},[33,151764,151765],{"class":43}," Cat",[33,151767,345],{"class":47},[33,151769,151622],{"class":43},[33,151771,32039],{"class":47},[33,151773,151774,151776,151778],{"class":35,"line":169},[33,151775,32054],{"class":39},[33,151777,151699],{"class":43},[33,151779,32060],{"class":47},[33,151781,151782,151784,151786,151789],{"class":35,"line":175},[33,151783,33704],{"class":76},[33,151785,345],{"class":47},[33,151787,151788],{"class":119},"\"喵喵\"",[33,151790,884],{"class":47},[33,151792,151793],{"class":35,"line":181},[33,151794,160],{"emptyLinePlaceholder":159},[33,151796,151797],{"class":35,"line":196},[33,151798,160],{"emptyLinePlaceholder":159},[33,151800,151801,151803,151805],{"class":35,"line":213},[33,151802,151657],{"class":47},[33,151804,73],{"class":39},[33,151806,151662],{"class":47},[33,151808,151809,151812,151814],{"class":35,"line":228},[33,151810,151811],{"class":47},"cat ",[33,151813,73],{"class":39},[33,151815,151816],{"class":47}," Cat()\n",[33,151818,151819],{"class":35,"line":1345},[33,151820,160],{"emptyLinePlaceholder":159},[33,151822,151823],{"class":35,"line":1350},[33,151824,151825],{"class":47},"dog.speak()\n",[33,151827,151828],{"class":35,"line":1359},[33,151829,151830],{"class":47},"cat.speak()\n",[18,151832,151834],{"id":151833},"_1110-super","11.10 super",[14,151836,151837,151838,151841],{},"子类可以通过 ",[30,151839,151840],{},"super()"," 调用父类方法。",[23,151843,151845],{"className":31631,"code":151844,"language":31633,"meta":28,"style":28},"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",[30,151846,151847,151855,151864,151874,151878,151882,151894,151903,151914,151924,151928,151932,151948],{"__ignoreMap":28},[33,151848,151849,151851,151853],{"class":35,"line":36},[33,151850,15945],{"class":39},[33,151852,16820],{"class":43},[33,151854,5141],{"class":47},[33,151856,151857,151859,151861],{"class":35,"line":51},[33,151858,32054],{"class":39},[33,151860,32057],{"class":76},[33,151862,151863],{"class":47},"(self, name):\n",[33,151865,151866,151868,151870,151872],{"class":35,"line":57},[33,151867,32098],{"class":76},[33,151869,151043],{"class":47},[33,151871,73],{"class":39},[33,151873,151048],{"class":47},[33,151875,151876],{"class":35,"line":64},[33,151877,160],{"emptyLinePlaceholder":159},[33,151879,151880],{"class":35,"line":83},[33,151881,160],{"emptyLinePlaceholder":159},[33,151883,151884,151886,151888,151890,151892],{"class":35,"line":89},[33,151885,15945],{"class":39},[33,151887,9149],{"class":43},[33,151889,345],{"class":47},[33,151891,20297],{"class":43},[33,151893,32039],{"class":47},[33,151895,151896,151898,151900],{"class":35,"line":98},[33,151897,32054],{"class":39},[33,151899,32057],{"class":76},[33,151901,151902],{"class":47},"(self, name, score):\n",[33,151904,151905,151907,151909,151911],{"class":35,"line":110},[33,151906,32070],{"class":76},[33,151908,18512],{"class":47},[33,151910,32082],{"class":76},[33,151912,151913],{"class":47},"(name)\n",[33,151915,151916,151918,151920,151922],{"class":35,"line":134},[33,151917,32098],{"class":76},[33,151919,151067],{"class":47},[33,151921,73],{"class":39},[33,151923,3032],{"class":47},[33,151925,151926],{"class":35,"line":156},[33,151927,160],{"emptyLinePlaceholder":159},[33,151929,151930],{"class":35,"line":163},[33,151931,160],{"emptyLinePlaceholder":159},[33,151933,151934,151936,151938,151940,151942,151944,151946],{"class":35,"line":169},[33,151935,150734],{"class":47},[33,151937,73],{"class":39},[33,151939,151138],{"class":47},[33,151941,151141],{"class":119},[33,151943,13686],{"class":47},[33,151945,2584],{"class":76},[33,151947,884],{"class":47},[33,151949,151950,151952],{"class":35,"line":175},[33,151951,31668],{"class":76},[33,151953,151954],{"class":47},"(student.name, student.score)\n",[18,151956,151958],{"id":151957},"_1111-多态","11.11 多态",[14,151960,151961],{},"多态指不同对象响应同一个方法，表现出不同结果。",[23,151963,151965],{"className":31631,"code":151964,"language":31633,"meta":28,"style":28},"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",[30,151966,151967,151975,151983,151993,151997,152001,152009,152017,152027,152031,152035,152045,152050,152054,152058,152063],{"__ignoreMap":28},[33,151968,151969,151971,151973],{"class":35,"line":36},[33,151970,15945],{"class":39},[33,151972,151617],{"class":43},[33,151974,5141],{"class":47},[33,151976,151977,151979,151981],{"class":35,"line":51},[33,151978,32054],{"class":39},[33,151980,151699],{"class":43},[33,151982,32060],{"class":47},[33,151984,151985,151987,151989,151991],{"class":35,"line":57},[33,151986,33704],{"class":76},[33,151988,345],{"class":47},[33,151990,151642],{"class":119},[33,151992,884],{"class":47},[33,151994,151995],{"class":35,"line":64},[33,151996,160],{"emptyLinePlaceholder":159},[33,151998,151999],{"class":35,"line":83},[33,152000,160],{"emptyLinePlaceholder":159},[33,152002,152003,152005,152007],{"class":35,"line":89},[33,152004,15945],{"class":39},[33,152006,151765],{"class":43},[33,152008,5141],{"class":47},[33,152010,152011,152013,152015],{"class":35,"line":98},[33,152012,32054],{"class":39},[33,152014,151699],{"class":43},[33,152016,32060],{"class":47},[33,152018,152019,152021,152023,152025],{"class":35,"line":110},[33,152020,33704],{"class":76},[33,152022,345],{"class":47},[33,152024,151788],{"class":119},[33,152026,884],{"class":47},[33,152028,152029],{"class":35,"line":134},[33,152030,160],{"emptyLinePlaceholder":159},[33,152032,152033],{"class":35,"line":156},[33,152034,160],{"emptyLinePlaceholder":159},[33,152036,152037,152039,152042],{"class":35,"line":163},[33,152038,33200],{"class":39},[33,152040,152041],{"class":43}," make_sound",[33,152043,152044],{"class":47},"(animal):\n",[33,152046,152047],{"class":35,"line":169},[33,152048,152049],{"class":47},"    animal.speak()\n",[33,152051,152052],{"class":35,"line":175},[33,152053,160],{"emptyLinePlaceholder":159},[33,152055,152056],{"class":35,"line":181},[33,152057,160],{"emptyLinePlaceholder":159},[33,152059,152060],{"class":35,"line":196},[33,152061,152062],{"class":47},"make_sound(Dog())\n",[33,152064,152065],{"class":35,"line":213},[33,152066,152067],{"class":47},"make_sound(Cat())\n",[14,152069,152070],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[18,152072,152074],{"id":152073},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,152076,152077],{},"实例属性属于对象：",[23,152079,152081],{"className":31631,"code":152080,"language":31633,"meta":28,"style":28},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[30,152082,152083,152091,152099],{"__ignoreMap":28},[33,152084,152085,152087,152089],{"class":35,"line":36},[33,152086,15945],{"class":39},[33,152088,9149],{"class":43},[33,152090,5141],{"class":47},[33,152092,152093,152095,152097],{"class":35,"line":51},[33,152094,32054],{"class":39},[33,152096,32057],{"class":76},[33,152098,151863],{"class":47},[33,152100,152101,152103,152105,152107],{"class":35,"line":57},[33,152102,32098],{"class":76},[33,152104,151043],{"class":47},[33,152106,73],{"class":39},[33,152108,151048],{"class":47},[14,152110,152111],{},"类属性属于类，所有对象共享：",[23,152113,152115],{"className":31631,"code":152114,"language":31633,"meta":28,"style":28},"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",[30,152116,152117,152125,152135,152139,152147,152157,152161,152165,152178,152192,152196,152203,152210],{"__ignoreMap":28},[33,152118,152119,152121,152123],{"class":35,"line":36},[33,152120,15945],{"class":39},[33,152122,9149],{"class":43},[33,152124,5141],{"class":47},[33,152126,152127,152130,152132],{"class":35,"line":51},[33,152128,152129],{"class":47},"    school ",[33,152131,73],{"class":39},[33,152133,152134],{"class":119}," \"黑马学校\"\n",[33,152136,152137],{"class":35,"line":57},[33,152138,160],{"emptyLinePlaceholder":159},[33,152140,152141,152143,152145],{"class":35,"line":64},[33,152142,32054],{"class":39},[33,152144,32057],{"class":76},[33,152146,151863],{"class":47},[33,152148,152149,152151,152153,152155],{"class":35,"line":83},[33,152150,32098],{"class":76},[33,152152,151043],{"class":47},[33,152154,73],{"class":39},[33,152156,151048],{"class":47},[33,152158,152159],{"class":35,"line":89},[33,152160,160],{"emptyLinePlaceholder":159},[33,152162,152163],{"class":35,"line":98},[33,152164,160],{"emptyLinePlaceholder":159},[33,152166,152167,152170,152172,152174,152176],{"class":35,"line":110},[33,152168,152169],{"class":47},"s1 ",[33,152171,73],{"class":39},[33,152173,151138],{"class":47},[33,152175,151141],{"class":119},[33,152177,884],{"class":47},[33,152179,152180,152183,152185,152187,152190],{"class":35,"line":134},[33,152181,152182],{"class":47},"s2 ",[33,152184,73],{"class":39},[33,152186,151138],{"class":47},[33,152188,152189],{"class":119},"\"小红\"",[33,152191,884],{"class":47},[33,152193,152194],{"class":35,"line":156},[33,152195,160],{"emptyLinePlaceholder":159},[33,152197,152198,152200],{"class":35,"line":163},[33,152199,31668],{"class":76},[33,152201,152202],{"class":47},"(s1.school)\n",[33,152204,152205,152207],{"class":35,"line":169},[33,152206,31668],{"class":76},[33,152208,152209],{"class":47},"(s2.school)\n",[33,152211,152212,152214],{"class":35,"line":175},[33,152213,31668],{"class":76},[33,152215,152216],{"class":47},"(Student.school)\n",[14,152218,152219],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[18,152221,152223],{"id":152222},"_1113-类方法和静态方法","11.13 类方法和静态方法",[1599,152225,152227],{"id":152226},"_11131-类方法","11.13.1 类方法",[14,152229,152230,152231,152234,152235,29638],{},"类方法使用 ",[30,152232,152233],{},"@classmethod","，第一个参数通常是 ",[30,152236,152237],{},"cls",[23,152239,152241],{"className":31631,"code":152240,"language":31633,"meta":28,"style":28},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[30,152242,152243,152251,152259,152263,152271,152281,152291,152295,152299],{"__ignoreMap":28},[33,152244,152245,152247,152249],{"class":35,"line":36},[33,152246,15945],{"class":39},[33,152248,9149],{"class":43},[33,152250,5141],{"class":47},[33,152252,152253,152255,152257],{"class":35,"line":51},[33,152254,152129],{"class":47},[33,152256,73],{"class":39},[33,152258,152134],{"class":119},[33,152260,152261],{"class":35,"line":57},[33,152262,160],{"emptyLinePlaceholder":159},[33,152264,152265,152268],{"class":35,"line":64},[33,152266,152267],{"class":43},"    @",[33,152269,152270],{"class":76},"classmethod\n",[33,152272,152273,152275,152278],{"class":35,"line":83},[33,152274,32054],{"class":39},[33,152276,152277],{"class":43}," get_school",[33,152279,152280],{"class":47},"(cls):\n",[33,152282,152283,152285,152288],{"class":35,"line":89},[33,152284,16003],{"class":39},[33,152286,152287],{"class":76}," cls",[33,152289,152290],{"class":47},".school\n",[33,152292,152293],{"class":35,"line":98},[33,152294,160],{"emptyLinePlaceholder":159},[33,152296,152297],{"class":35,"line":110},[33,152298,160],{"emptyLinePlaceholder":159},[33,152300,152301,152303],{"class":35,"line":134},[33,152302,31668],{"class":76},[33,152304,152305],{"class":47},"(Student.get_school())\n",[1599,152307,152309],{"id":152308},"_11132-静态方法","11.13.2 静态方法",[14,152311,152312,152313,152316],{},"静态方法使用 ",[30,152314,152315],{},"@staticmethod","，不需要访问实例和类。",[23,152318,152320],{"className":31631,"code":152319,"language":31633,"meta":28,"style":28},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[30,152321,152322,152331,152338,152347,152358,152362,152366],{"__ignoreMap":28},[33,152323,152324,152326,152329],{"class":35,"line":36},[33,152325,15945],{"class":39},[33,152327,152328],{"class":43}," MathUtils",[33,152330,5141],{"class":47},[33,152332,152333,152335],{"class":35,"line":51},[33,152334,152267],{"class":43},[33,152336,152337],{"class":76},"staticmethod\n",[33,152339,152340,152342,152344],{"class":35,"line":57},[33,152341,32054],{"class":39},[33,152343,6600],{"class":43},[33,152345,152346],{"class":47},"(a, b):\n",[33,152348,152349,152351,152353,152355],{"class":35,"line":64},[33,152350,16003],{"class":39},[33,152352,12120],{"class":47},[33,152354,1271],{"class":39},[33,152356,152357],{"class":47}," b\n",[33,152359,152360],{"class":35,"line":83},[33,152361,160],{"emptyLinePlaceholder":159},[33,152363,152364],{"class":35,"line":89},[33,152365,160],{"emptyLinePlaceholder":159},[33,152367,152368,152370,152373,152375,152377,152379],{"class":35,"line":98},[33,152369,31668],{"class":76},[33,152371,152372],{"class":47},"(MathUtils.add(",[33,152374,701],{"class":76},[33,152376,13686],{"class":47},[33,152378,707],{"class":76},[33,152380,31750],{"class":47},[14,152382,152383],{},"静态方法本质上是放在类命名空间里的普通函数。",[18,152385,152387],{"id":152386},"_1114-dataclass","11.14 dataclass",[14,152389,152390,152393],{},[30,152391,152392],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[23,152395,152397],{"className":31631,"code":152396,"language":31633,"meta":28,"style":28},"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",[30,152398,152399,152411,152415,152419,152424,152432,152440,152448,152456,152460,152464,152484],{"__ignoreMap":28},[33,152400,152401,152403,152406,152408],{"class":35,"line":36},[33,152402,31990],{"class":39},[33,152404,152405],{"class":47}," dataclasses ",[33,152407,31645],{"class":39},[33,152409,152410],{"class":47}," dataclass\n",[33,152412,152413],{"class":35,"line":51},[33,152414,160],{"emptyLinePlaceholder":159},[33,152416,152417],{"class":35,"line":57},[33,152418,160],{"emptyLinePlaceholder":159},[33,152420,152421],{"class":35,"line":64},[33,152422,152423],{"class":43},"@dataclass\n",[33,152425,152426,152428,152430],{"class":35,"line":83},[33,152427,15945],{"class":39},[33,152429,9149],{"class":43},[33,152431,5141],{"class":47},[33,152433,152434,152437],{"class":35,"line":89},[33,152435,152436],{"class":47},"    name: ",[33,152438,152439],{"class":76},"str\n",[33,152441,152442,152445],{"class":35,"line":98},[33,152443,152444],{"class":47},"    age: ",[33,152446,152447],{"class":76},"int\n",[33,152449,152450,152453],{"class":35,"line":110},[33,152451,152452],{"class":47},"    score: ",[33,152454,152455],{"class":76},"float\n",[33,152457,152458],{"class":35,"line":134},[33,152459,160],{"emptyLinePlaceholder":159},[33,152461,152462],{"class":35,"line":156},[33,152463,160],{"emptyLinePlaceholder":159},[33,152465,152466,152468,152470,152472,152474,152476,152478,152480,152482],{"class":35,"line":163},[33,152467,150734],{"class":47},[33,152469,73],{"class":39},[33,152471,151138],{"class":47},[33,152473,151141],{"class":119},[33,152475,13686],{"class":47},[33,152477,2250],{"class":76},[33,152479,13686],{"class":47},[33,152481,2584],{"class":76},[33,152483,884],{"class":47},[33,152485,152486,152488],{"class":35,"line":169},[33,152487,31668],{"class":76},[33,152489,151295],{"class":47},[14,152491,152492,152493,1829,152495,152498],{},"它会自动生成 ",[30,152494,32082],{},[30,152496,152497],{},"__repr__"," 等方法。适合数据模型类。",[18,152500,152502],{"id":152501},"_1115-小案例学生类","11.15 小案例：学生类",[23,152504,152506],{"className":31631,"code":152505,"language":31633,"meta":28,"style":28},"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",[30,152507,152508,152516,152525,152537,152547,152557,152567,152571,152580,152593,152597,152606,152612,152624,152636,152648,152660,152664,152668,152674,152684,152693,152703,152711,152719,152728,152732,152736,152744,152780,152784,152788,152813,152820],{"__ignoreMap":28},[33,152509,152510,152512,152514],{"class":35,"line":36},[33,152511,15945],{"class":39},[33,152513,9149],{"class":43},[33,152515,5141],{"class":47},[33,152517,152518,152520,152522],{"class":35,"line":51},[33,152519,32054],{"class":39},[33,152521,32057],{"class":76},[33,152523,152524],{"class":47},"(self, student_id, name, age, score):\n",[33,152526,152527,152529,152532,152534],{"class":35,"line":57},[33,152528,32098],{"class":76},[33,152530,152531],{"class":47},".student_id ",[33,152533,73],{"class":39},[33,152535,152536],{"class":47}," student_id\n",[33,152538,152539,152541,152543,152545],{"class":35,"line":64},[33,152540,32098],{"class":76},[33,152542,151043],{"class":47},[33,152544,73],{"class":39},[33,152546,151048],{"class":47},[33,152548,152549,152551,152553,152555],{"class":35,"line":83},[33,152550,32098],{"class":76},[33,152552,151055],{"class":47},[33,152554,73],{"class":39},[33,152556,151060],{"class":47},[33,152558,152559,152561,152563,152565],{"class":35,"line":89},[33,152560,32098],{"class":76},[33,152562,151067],{"class":47},[33,152564,73],{"class":39},[33,152566,3032],{"class":47},[33,152568,152569],{"class":35,"line":98},[33,152570,160],{"emptyLinePlaceholder":159},[33,152572,152573,152575,152578],{"class":35,"line":110},[33,152574,32054],{"class":39},[33,152576,152577],{"class":43}," is_passed",[33,152579,32060],{"class":47},[33,152581,152582,152584,152586,152588,152590],{"class":35,"line":134},[33,152583,16003],{"class":39},[33,152585,40126],{"class":76},[33,152587,151067],{"class":47},[33,152589,3151],{"class":39},[33,152591,152592],{"class":76}," 60\n",[33,152594,152595],{"class":35,"line":156},[33,152596,160],{"emptyLinePlaceholder":159},[33,152598,152599,152601,152604],{"class":35,"line":163},[33,152600,32054],{"class":39},[33,152602,152603],{"class":43}," to_dict",[33,152605,32060],{"class":47},[33,152607,152608,152610],{"class":35,"line":169},[33,152609,16003],{"class":39},[33,152611,16823],{"class":47},[33,152613,152614,152617,152619,152621],{"class":35,"line":175},[33,152615,152616],{"class":119},"            \"student_id\"",[33,152618,52690],{"class":47},[33,152620,32076],{"class":76},[33,152622,152623],{"class":47},".student_id,\n",[33,152625,152626,152629,152631,152633],{"class":35,"line":181},[33,152627,152628],{"class":119},"            \"name\"",[33,152630,52690],{"class":47},[33,152632,32076],{"class":76},[33,152634,152635],{"class":47},".name,\n",[33,152637,152638,152641,152643,152645],{"class":35,"line":196},[33,152639,152640],{"class":119},"            \"age\"",[33,152642,52690],{"class":47},[33,152644,32076],{"class":76},[33,152646,152647],{"class":47},".age,\n",[33,152649,152650,152653,152655,152657],{"class":35,"line":213},[33,152651,152652],{"class":119},"            \"score\"",[33,152654,52690],{"class":47},[33,152656,32076],{"class":76},[33,152658,152659],{"class":47},".score,\n",[33,152661,152662],{"class":35,"line":228},[33,152663,1334],{"class":47},[33,152665,152666],{"class":35,"line":1345},[33,152667,160],{"emptyLinePlaceholder":159},[33,152669,152670,152672],{"class":35,"line":1350},[33,152671,152267],{"class":43},[33,152673,152270],{"class":76},[33,152675,152676,152678,152681],{"class":35,"line":1359},[33,152677,32054],{"class":39},[33,152679,152680],{"class":43}," from_dict",[33,152682,152683],{"class":47},"(cls, data):\n",[33,152685,152686,152688,152690],{"class":35,"line":1364},[33,152687,16003],{"class":39},[33,152689,152287],{"class":76},[33,152691,152692],{"class":47},"(\n",[33,152694,152695,152698,152701],{"class":35,"line":1370},[33,152696,152697],{"class":47},"            data[",[33,152699,152700],{"class":119},"\"student_id\"",[33,152702,89089],{"class":47},[33,152704,152705,152707,152709],{"class":35,"line":1425},[33,152706,152697],{"class":47},[33,152708,63932],{"class":119},[33,152710,89089],{"class":47},[33,152712,152713,152715,152717],{"class":35,"line":1438},[33,152714,152697],{"class":47},[33,152716,70377],{"class":119},[33,152718,89089],{"class":47},[33,152720,152721,152723,152726],{"class":35,"line":1451},[33,152722,152697],{"class":47},[33,152724,152725],{"class":119},"\"score\"",[33,152727,89089],{"class":47},[33,152729,152730],{"class":35,"line":1457},[33,152731,39379],{"class":47},[33,152733,152734],{"class":35,"line":1466},[33,152735,160],{"emptyLinePlaceholder":159},[33,152737,152738,152740,152742],{"class":35,"line":1471},[33,152739,32054],{"class":39},[33,152741,151234],{"class":76},[33,152743,32060],{"class":47},[33,152745,152746,152748,152750,152752,152754,152757,152759,152762,152764,152766,152768,152770,152772,152774,152776,152778],{"class":35,"line":1477},[33,152747,16003],{"class":39},[33,152749,151243],{"class":39},[33,152751,1866],{"class":119},[33,152753,150705],{"class":76},[33,152755,152756],{"class":47},".student_id",[33,152758,2542],{"class":76},[33,152760,152761],{"class":76}," {self",[33,152763,81554],{"class":47},[33,152765,2542],{"class":76},[33,152767,152761],{"class":76},[33,152769,81566],{"class":47},[33,152771,2542],{"class":76},[33,152773,152761],{"class":76},[33,152775,151115],{"class":47},[33,152777,2542],{"class":76},[33,152779,26386],{"class":119},[33,152781,152782],{"class":35,"line":1504},[33,152783,160],{"emptyLinePlaceholder":159},[33,152785,152786],{"class":35,"line":1509},[33,152787,160],{"emptyLinePlaceholder":159},[33,152789,152790,152792,152794,152796,152799,152801,152803,152805,152807,152809,152811],{"class":35,"line":1525},[33,152791,150734],{"class":47},[33,152793,73],{"class":39},[33,152795,151138],{"class":47},[33,152797,152798],{"class":119},"\"001\"",[33,152800,13686],{"class":47},[33,152802,151141],{"class":119},[33,152804,13686],{"class":47},[33,152806,2250],{"class":76},[33,152808,13686],{"class":47},[33,152810,2584],{"class":76},[33,152812,884],{"class":47},[33,152814,152815,152817],{"class":35,"line":1535},[33,152816,31668],{"class":76},[33,152818,152819],{"class":47},"(student.is_passed())\n",[33,152821,152822,152824],{"class":35,"line":1540},[33,152823,31668],{"class":76},[33,152825,152826],{"class":47},"(student.to_dict())\n",[14,152828,152829,102271,152832,152835],{},[30,152830,152831],{},"to_dict()",[30,152833,152834],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[18,152837,152839],{"id":152838},"_1116-易错点","11.16 易错点",[574,152841,152842,152848,152854,152859,152862,152865],{},[564,152843,152844,152845,29638],{},"类名推荐使用大驼峰，如 ",[30,152846,152847],{},"StudentManager",[564,152849,152850,152851,152853],{},"方法第一个参数必须写 ",[30,152852,32076],{},"，调用时不用传。",[564,152855,152856,152858],{},[30,152857,32082],{}," 不是普通方法，它在创建对象时自动执行。",[564,152860,152861],{},"私有属性不是绝对安全，只是约定和名称改写。",[564,152863,152864],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[564,152866,152867],{},"类中方法太多时，说明职责可能过重。",[18,152869,152871],{"id":152870},"_1117-本章练习","11.17 本章练习",[574,152873,152874,152880,152886,152891,152904],{},[564,152875,152876,152877,152879],{},"定义 ",[30,152878,150821],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[564,152881,152876,152882,152885],{},[30,152883,152884],{},"Account"," 类，实现存款、取款、查询余额。",[564,152887,152876,152888,152890],{},[30,152889,18477],{}," 类，计算圆的周长和面积。",[564,152892,152876,152893,1829,152896,152899,152900,152903],{},[30,152894,152895],{},"Dog",[30,152897,152898],{},"Cat"," 类，并用同一个函数调用它们的 ",[30,152901,152902],{},"speak()"," 方法。",[564,152905,105619,152906,152908,152909,29638],{},[30,152907,152392],{}," 定义一个商品类 ",[30,152910,152911],{},"Product",[1544,152913,152914],{},"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":28,"searchDepth":51,"depth":51,"links":152916},[152917,152918,152919,152920,152921,152922,152924,152925,152926,152927,152928,152929,152930,152934,152935,152936,152937],{"id":150585,"depth":51,"text":150586},{"id":150768,"depth":51,"text":150769},{"id":150832,"depth":51,"text":150833},{"id":150909,"depth":51,"text":150910},{"id":151008,"depth":51,"text":151009},{"id":151172,"depth":51,"text":152923},"11.6 str",{"id":151298,"depth":51,"text":151299},{"id":151564,"depth":51,"text":151565},{"id":151678,"depth":51,"text":151679},{"id":151833,"depth":51,"text":151834},{"id":151957,"depth":51,"text":151958},{"id":152073,"depth":51,"text":152074},{"id":152222,"depth":51,"text":152223,"children":152931},[152932,152933],{"id":152226,"depth":57,"text":152227},{"id":152308,"depth":57,"text":152309},{"id":152386,"depth":51,"text":152387},{"id":152501,"depth":51,"text":152502},{"id":152838,"depth":51,"text":152839},{"id":152870,"depth":51,"text":152871},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150577,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152944,"title":152945,"body":152946,"description":24628,"extension":1557,"meta":156259,"navigation":159,"path":156260,"seo":156261,"stem":156262,"__hash__":156263},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152947,"toc":156235},[152948,152951,152955,152958,152961,152990,152993,153001,153005,153009,153012,153035,153038,153044,153048,154494,154497,154518,154522,154525,154537,154540,154724,154727,154853,154856,154860,154864,155000,155004,155090,155094,155176,155180,155217,155221,155410,155414,155417,155647,155651,155654,155835,155838,155842,155845,155851,155854,155880,155884,155887,155901,155904,155929,155932,155946,155949,155966,155969,155986,155989,156006,156010,156036,156040,156063,156067,156070,156072,156078,156080,156101,156104,156110,156116,156120,156123,156199,156202,156206,156232],[10,152949,152945],{"id":152950},"_12-综合案例与复习路线",[18,152952,152954],{"id":152953},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,152956,152957],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,152959,152960],{},"一个合格的入门综合项目最好覆盖：",[574,152962,152963,152966,152969,152972,152975,152978,152981,152984,152987],{},[564,152964,152965],{},"输入输出。",[564,152967,152968],{},"判断和循环。",[564,152970,152971],{},"函数拆分。",[564,152973,152974],{},"列表、字典等容器。",[564,152976,152977],{},"文件持久化。",[564,152979,152980],{},"异常处理。",[564,152982,152983],{},"模块拆分。",[564,152985,152986],{},"可选：面向对象。",[564,152988,152989],{},"可选：数据可视化。",[14,152991,152992],{},"本章整理两个方向：",[574,152994,152995,152998],{},[564,152996,152997],{},"学生管理系统。",[564,152999,153000],{},"销售数据统计和可视化。",[18,153002,153004],{"id":153003},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[1599,153006,153008],{"id":153007},"_1221-需求","12.2.1 需求",[14,153010,153011],{},"实现一个命令行学生管理系统：",[574,153013,153014,153017,153020,153023,153026,153029,153032],{},[564,153015,153016],{},"添加学生。",[564,153018,153019],{},"删除学生。",[564,153021,153022],{},"修改学生。",[564,153024,153025],{},"查询学生。",[564,153027,153028],{},"显示所有学生。",[564,153030,153031],{},"保存到 JSON 文件。",[564,153033,153034],{},"程序启动时自动读取 JSON 文件。",[14,153036,153037],{},"学生字段：",[23,153039,153042],{"className":153040,"code":153041,"language":6578,"meta":28},[6576],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[30,153043,153041],{"__ignoreMap":28},[18,153045,153047],{"id":153046},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[23,153049,153051],{"className":31631,"code":153050,"language":31633,"meta":28,"style":28},"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",[30,153052,153053,153059,153069,153073,153087,153091,153095,153104,153116,153122,153126,153132,153163,153173,153180,153191,153197,153201,153205,153215,153246,153272,153276,153280,153289,153300,153311,153322,153333,153344,153355,153366,153370,153374,153384,153396,153412,153419,153426,153430,153434,153444,153452,153459,153472,153482,153493,153497,153501,153510,153518,153524,153536,153544,153555,153559,153563,153572,153588,153592,153599,153610,153615,153619,153635,153650,153665,153669,153674,153682,153690,153698,153706,153710,153715,153726,153730,153734,153743,153758,153768,153772,153784,153795,153799,153803,153808,153812,153823,153827,153831,153840,153855,153863,153867,153879,153889,153893,153897,153912,153925,153938,153942,153955,153967,153979,153983,153987,153998,154002,154006,154015,154030,154038,154042,154054,154064,154068,154072,154077,154081,154085,154095,154101,154123,154142,154161,154180,154185,154189,154193,154202,154210,154221,154225,154229,154255,154265,154270,154274,154278,154286,154296,154300,154308,154313,154329,154333,154347,154352,154366,154371,154384,154389,154402,154407,154420,154425,154438,154449,154453,154459,154470,154474,154478,154490],{"__ignoreMap":28},[33,153054,153055,153057],{"class":35,"line":36},[33,153056,31645],{"class":39},[33,153058,148344],{"class":47},[33,153060,153061,153063,153065,153067],{"class":35,"line":51},[33,153062,31990],{"class":39},[33,153064,109564],{"class":47},[33,153066,31645],{"class":39},[33,153068,109569],{"class":47},[33,153070,153071],{"class":35,"line":57},[33,153072,160],{"emptyLinePlaceholder":159},[33,153074,153075,153078,153080,153082,153085],{"class":35,"line":64},[33,153076,153077],{"class":76},"DATA_FILE",[33,153079,14815],{"class":39},[33,153081,109798],{"class":47},[33,153083,153084],{"class":119},"\"students.json\"",[33,153086,884],{"class":47},[33,153088,153089],{"class":35,"line":83},[33,153090,160],{"emptyLinePlaceholder":159},[33,153092,153093],{"class":35,"line":89},[33,153094,160],{"emptyLinePlaceholder":159},[33,153096,153097,153099,153102],{"class":35,"line":98},[33,153098,33200],{"class":39},[33,153100,153101],{"class":43}," load_students",[33,153103,33206],{"class":47},[33,153105,153106,153108,153110,153113],{"class":35,"line":110},[33,153107,4509],{"class":39},[33,153109,40183],{"class":39},[33,153111,153112],{"class":76}," DATA_FILE",[33,153114,153115],{"class":47},".exists():\n",[33,153117,153118,153120],{"class":35,"line":134},[33,153119,16003],{"class":39},[33,153121,53091],{"class":47},[33,153123,153124],{"class":35,"line":156},[33,153125,160],{"emptyLinePlaceholder":159},[33,153127,153128,153130],{"class":35,"line":163},[33,153129,127037],{"class":39},[33,153131,5141],{"class":47},[33,153133,153134,153137,153139,153141,153143,153145,153147,153149,153151,153153,153155,153157,153159,153161],{"class":35,"line":169},[33,153135,153136],{"class":39},"        with",[33,153138,148044],{"class":76},[33,153140,345],{"class":47},[33,153142,153077],{"class":76},[33,153144,13686],{"class":47},[33,153146,148054],{"class":119},[33,153148,13686],{"class":47},[33,153150,148059],{"class":955},[33,153152,73],{"class":39},[33,153154,148064],{"class":119},[33,153156,14965],{"class":47},[33,153158,32636],{"class":39},[33,153160,149406],{"class":955},[33,153162,5141],{"class":47},[33,153164,153165,153167,153169,153171],{"class":35,"line":175},[33,153166,16983],{"class":39},[33,153168,149417],{"class":47},[33,153170,46607],{"class":955},[33,153172,884],{"class":47},[33,153174,153175,153177],{"class":35,"line":181},[33,153176,127065],{"class":39},[33,153178,153179],{"class":47}," json.JSONDecodeError:\n",[33,153181,153182,153184,153186,153189],{"class":35,"line":196},[33,153183,33704],{"class":76},[33,153185,345],{"class":47},[33,153187,153188],{"class":119},"\"数据文件格式错误，已使用空数据启动\"",[33,153190,884],{"class":47},[33,153192,153193,153195],{"class":35,"line":213},[33,153194,16003],{"class":39},[33,153196,53091],{"class":47},[33,153198,153199],{"class":35,"line":228},[33,153200,160],{"emptyLinePlaceholder":159},[33,153202,153203],{"class":35,"line":1345},[33,153204,160],{"emptyLinePlaceholder":159},[33,153206,153207,153209,153212],{"class":35,"line":1350},[33,153208,33200],{"class":39},[33,153210,153211],{"class":43}," save_students",[33,153213,153214],{"class":47},"(students):\n",[33,153216,153217,153219,153221,153223,153225,153227,153230,153232,153234,153236,153238,153240,153242,153244],{"class":35,"line":1359},[33,153218,35431],{"class":39},[33,153220,148044],{"class":76},[33,153222,345],{"class":47},[33,153224,153077],{"class":76},[33,153226,13686],{"class":47},[33,153228,153229],{"class":119},"\"w\"",[33,153231,13686],{"class":47},[33,153233,148059],{"class":955},[33,153235,73],{"class":39},[33,153237,148064],{"class":119},[33,153239,14965],{"class":47},[33,153241,32636],{"class":39},[33,153243,149406],{"class":955},[33,153245,5141],{"class":47},[33,153247,153248,153251,153253,153255,153257,153259,153261,153263,153266,153268,153270],{"class":35,"line":1364},[33,153249,153250],{"class":47},"        json.dump(students, ",[33,153252,46607],{"class":955},[33,153254,13686],{"class":47},[33,153256,148390],{"class":955},[33,153258,73],{"class":39},[33,153260,35240],{"class":76},[33,153262,13686],{"class":47},[33,153264,153265],{"class":955},"indent",[33,153267,73],{"class":39},[33,153269,707],{"class":76},[33,153271,884],{"class":47},[33,153273,153274],{"class":35,"line":1370},[33,153275,160],{"emptyLinePlaceholder":159},[33,153277,153278],{"class":35,"line":1425},[33,153279,160],{"emptyLinePlaceholder":159},[33,153281,153282,153284,153287],{"class":35,"line":1438},[33,153283,33200],{"class":39},[33,153285,153286],{"class":43}," show_menu",[33,153288,33206],{"class":47},[33,153290,153291,153293,153295,153298],{"class":35,"line":1451},[33,153292,32552],{"class":76},[33,153294,345],{"class":47},[33,153296,153297],{"class":119},"\"====== 学生管理系统 ======\"",[33,153299,884],{"class":47},[33,153301,153302,153304,153306,153309],{"class":35,"line":1457},[33,153303,32552],{"class":76},[33,153305,345],{"class":47},[33,153307,153308],{"class":119},"\"1. 添加学生\"",[33,153310,884],{"class":47},[33,153312,153313,153315,153317,153320],{"class":35,"line":1466},[33,153314,32552],{"class":76},[33,153316,345],{"class":47},[33,153318,153319],{"class":119},"\"2. 删除学生\"",[33,153321,884],{"class":47},[33,153323,153324,153326,153328,153331],{"class":35,"line":1471},[33,153325,32552],{"class":76},[33,153327,345],{"class":47},[33,153329,153330],{"class":119},"\"3. 修改学生\"",[33,153332,884],{"class":47},[33,153334,153335,153337,153339,153342],{"class":35,"line":1477},[33,153336,32552],{"class":76},[33,153338,345],{"class":47},[33,153340,153341],{"class":119},"\"4. 查询学生\"",[33,153343,884],{"class":47},[33,153345,153346,153348,153350,153353],{"class":35,"line":1504},[33,153347,32552],{"class":76},[33,153349,345],{"class":47},[33,153351,153352],{"class":119},"\"5. 显示所有学生\"",[33,153354,884],{"class":47},[33,153356,153357,153359,153361,153364],{"class":35,"line":1509},[33,153358,32552],{"class":76},[33,153360,345],{"class":47},[33,153362,153363],{"class":119},"\"0. 退出系统\"",[33,153365,884],{"class":47},[33,153367,153368],{"class":35,"line":1525},[33,153369,160],{"emptyLinePlaceholder":159},[33,153371,153372],{"class":35,"line":1535},[33,153373,160],{"emptyLinePlaceholder":159},[33,153375,153376,153378,153381],{"class":35,"line":1540},[33,153377,33200],{"class":39},[33,153379,153380],{"class":43}," find_student",[33,153382,153383],{"class":47},"(students, student_id):\n",[33,153385,153386,153388,153391,153393],{"class":35,"line":4027},[33,153387,857],{"class":39},[33,153389,153390],{"class":47}," student ",[33,153392,27296],{"class":39},[33,153394,153395],{"class":47}," students:\n",[33,153397,153398,153400,153403,153405,153407,153409],{"class":35,"line":4032},[33,153399,3915],{"class":39},[33,153401,153402],{"class":47}," student[",[33,153404,152700],{"class":119},[33,153406,5840],{"class":47},[33,153408,4359],{"class":39},[33,153410,153411],{"class":47}," student_id:\n",[33,153413,153414,153416],{"class":35,"line":9199},[33,153415,16983],{"class":39},[33,153417,153418],{"class":47}," student\n",[33,153420,153421,153423],{"class":35,"line":9223},[33,153422,5489],{"class":39},[33,153424,153425],{"class":76}," None\n",[33,153427,153428],{"class":35,"line":9228},[33,153429,160],{"emptyLinePlaceholder":159},[33,153431,153432],{"class":35,"line":9234},[33,153433,160],{"emptyLinePlaceholder":159},[33,153435,153436,153438,153441],{"class":35,"line":9261},[33,153437,33200],{"class":39},[33,153439,153440],{"class":43}," input_int",[33,153442,153443],{"class":47},"(prompt):\n",[33,153445,153446,153448,153450],{"class":35,"line":9266},[33,153447,3673],{"class":39},[33,153449,96545],{"class":76},[33,153451,5141],{"class":47},[33,153453,153454,153457],{"class":35,"line":9272},[33,153455,153456],{"class":39},"        try",[33,153458,5141],{"class":47},[33,153460,153461,153463,153465,153467,153469],{"class":35,"line":9284},[33,153462,16983],{"class":39},[33,153464,591],{"class":76},[33,153466,345],{"class":47},[33,153468,55074],{"class":76},[33,153470,153471],{"class":47},"(prompt))\n",[33,153473,153474,153477,153480],{"class":35,"line":9296},[33,153475,153476],{"class":39},"        except",[33,153478,153479],{"class":76}," ValueError",[33,153481,5141],{"class":47},[33,153483,153484,153486,153488,153491],{"class":35,"line":9308},[33,153485,35903],{"class":76},[33,153487,345],{"class":47},[33,153489,153490],{"class":119},"\"请输入整数\"",[33,153492,884],{"class":47},[33,153494,153495],{"class":35,"line":10967},[33,153496,160],{"emptyLinePlaceholder":159},[33,153498,153499],{"class":35,"line":10992},[33,153500,160],{"emptyLinePlaceholder":159},[33,153502,153503,153505,153508],{"class":35,"line":11015},[33,153504,33200],{"class":39},[33,153506,153507],{"class":43}," input_float",[33,153509,153443],{"class":47},[33,153511,153512,153514,153516],{"class":35,"line":11039},[33,153513,3673],{"class":39},[33,153515,96545],{"class":76},[33,153517,5141],{"class":47},[33,153519,153520,153522],{"class":35,"line":11044},[33,153521,153456],{"class":39},[33,153523,5141],{"class":47},[33,153525,153526,153528,153530,153532,153534],{"class":35,"line":11049},[33,153527,16983],{"class":39},[33,153529,111050],{"class":76},[33,153531,345],{"class":47},[33,153533,55074],{"class":76},[33,153535,153471],{"class":47},[33,153537,153538,153540,153542],{"class":35,"line":11054},[33,153539,153476],{"class":39},[33,153541,153479],{"class":76},[33,153543,5141],{"class":47},[33,153545,153546,153548,153550,153553],{"class":35,"line":11063},[33,153547,35903],{"class":76},[33,153549,345],{"class":47},[33,153551,153552],{"class":119},"\"请输入数字\"",[33,153554,884],{"class":47},[33,153556,153557],{"class":35,"line":11068},[33,153558,160],{"emptyLinePlaceholder":159},[33,153560,153561],{"class":35,"line":11074},[33,153562,160],{"emptyLinePlaceholder":159},[33,153564,153565,153567,153570],{"class":35,"line":11095},[33,153566,33200],{"class":39},[33,153568,153569],{"class":43}," add_student",[33,153571,153214],{"class":47},[33,153573,153574,153577,153579,153581,153583,153586],{"class":35,"line":11101},[33,153575,153576],{"class":47},"    student_id ",[33,153578,73],{"class":39},[33,153580,61858],{"class":76},[33,153582,345],{"class":47},[33,153584,153585],{"class":119},"\"请输入学号:\"",[33,153587,884],{"class":47},[33,153589,153590],{"class":35,"line":11115},[33,153591,160],{"emptyLinePlaceholder":159},[33,153593,153594,153596],{"class":35,"line":11121},[33,153595,4509],{"class":39},[33,153597,153598],{"class":47}," find_student(students, student_id):\n",[33,153600,153601,153603,153605,153608],{"class":35,"line":11148},[33,153602,33704],{"class":76},[33,153604,345],{"class":47},[33,153606,153607],{"class":119},"\"学号已存在\"",[33,153609,884],{"class":47},[33,153611,153612],{"class":35,"line":11157},[33,153613,153614],{"class":39},"        return\n",[33,153616,153617],{"class":35,"line":11163},[33,153618,160],{"emptyLinePlaceholder":159},[33,153620,153621,153624,153626,153628,153630,153633],{"class":35,"line":11171},[33,153622,153623],{"class":47},"    name ",[33,153625,73],{"class":39},[33,153627,61858],{"class":76},[33,153629,345],{"class":47},[33,153631,153632],{"class":119},"\"请输入姓名:\"",[33,153634,884],{"class":47},[33,153636,153637,153640,153642,153645,153648],{"class":35,"line":11176},[33,153638,153639],{"class":47},"    age ",[33,153641,73],{"class":39},[33,153643,153644],{"class":47}," input_int(",[33,153646,153647],{"class":119},"\"请输入年龄:\"",[33,153649,884],{"class":47},[33,153651,153652,153655,153657,153660,153663],{"class":35,"line":17855},[33,153653,153654],{"class":47},"    score ",[33,153656,73],{"class":39},[33,153658,153659],{"class":47}," input_float(",[33,153661,153662],{"class":119},"\"请输入成绩:\"",[33,153664,884],{"class":47},[33,153666,153667],{"class":35,"line":17861},[33,153668,160],{"emptyLinePlaceholder":159},[33,153670,153671],{"class":35,"line":17884},[33,153672,153673],{"class":47},"    students.append({\n",[33,153675,153676,153679],{"class":35,"line":17890},[33,153677,153678],{"class":119},"        \"student_id\"",[33,153680,153681],{"class":47},": student_id,\n",[33,153683,153684,153687],{"class":35,"line":17913},[33,153685,153686],{"class":119},"        \"name\"",[33,153688,153689],{"class":47},": name,\n",[33,153691,153692,153695],{"class":35,"line":17927},[33,153693,153694],{"class":119},"        \"age\"",[33,153696,153697],{"class":47},": age,\n",[33,153699,153700,153703],{"class":35,"line":17947},[33,153701,153702],{"class":119},"        \"score\"",[33,153704,153705],{"class":47},": score,\n",[33,153707,153708],{"class":35,"line":17953},[33,153709,34714],{"class":47},[33,153711,153712],{"class":35,"line":17964},[33,153713,153714],{"class":47},"    save_students(students)\n",[33,153716,153717,153719,153721,153724],{"class":35,"line":17987},[33,153718,32552],{"class":76},[33,153720,345],{"class":47},[33,153722,153723],{"class":119},"\"添加成功\"",[33,153725,884],{"class":47},[33,153727,153728],{"class":35,"line":18009},[33,153729,160],{"emptyLinePlaceholder":159},[33,153731,153732],{"class":35,"line":18014},[33,153733,160],{"emptyLinePlaceholder":159},[33,153735,153736,153738,153741],{"class":35,"line":18020},[33,153737,33200],{"class":39},[33,153739,153740],{"class":43}," delete_student",[33,153742,153214],{"class":47},[33,153744,153745,153747,153749,153751,153753,153756],{"class":35,"line":18034},[33,153746,153576],{"class":47},[33,153748,73],{"class":39},[33,153750,61858],{"class":76},[33,153752,345],{"class":47},[33,153754,153755],{"class":119},"\"请输入要删除的学号:\"",[33,153757,884],{"class":47},[33,153759,153760,153763,153765],{"class":35,"line":18047},[33,153761,153762],{"class":47},"    student ",[33,153764,73],{"class":39},[33,153766,153767],{"class":47}," find_student(students, student_id)\n",[33,153769,153770],{"class":35,"line":18052},[33,153771,160],{"emptyLinePlaceholder":159},[33,153773,153774,153776,153778,153780,153782],{"class":35,"line":18066},[33,153775,4509],{"class":39},[33,153777,153390],{"class":47},[33,153779,40180],{"class":39},[33,153781,40186],{"class":76},[33,153783,5141],{"class":47},[33,153785,153786,153788,153790,153793],{"class":35,"line":18071},[33,153787,33704],{"class":76},[33,153789,345],{"class":47},[33,153791,153792],{"class":119},"\"学生不存在\"",[33,153794,884],{"class":47},[33,153796,153797],{"class":35,"line":18077},[33,153798,153614],{"class":39},[33,153800,153801],{"class":35,"line":18082},[33,153802,160],{"emptyLinePlaceholder":159},[33,153804,153805],{"class":35,"line":18096},[33,153806,153807],{"class":47},"    students.remove(student)\n",[33,153809,153810],{"class":35,"line":18101},[33,153811,153714],{"class":47},[33,153813,153814,153816,153818,153821],{"class":35,"line":18106},[33,153815,32552],{"class":76},[33,153817,345],{"class":47},[33,153819,153820],{"class":119},"\"删除成功\"",[33,153822,884],{"class":47},[33,153824,153825],{"class":35,"line":18120},[33,153826,160],{"emptyLinePlaceholder":159},[33,153828,153829],{"class":35,"line":18132},[33,153830,160],{"emptyLinePlaceholder":159},[33,153832,153833,153835,153838],{"class":35,"line":18137},[33,153834,33200],{"class":39},[33,153836,153837],{"class":43}," update_student",[33,153839,153214],{"class":47},[33,153841,153842,153844,153846,153848,153850,153853],{"class":35,"line":18150},[33,153843,153576],{"class":47},[33,153845,73],{"class":39},[33,153847,61858],{"class":76},[33,153849,345],{"class":47},[33,153851,153852],{"class":119},"\"请输入要修改的学号:\"",[33,153854,884],{"class":47},[33,153856,153857,153859,153861],{"class":35,"line":18155},[33,153858,153762],{"class":47},[33,153860,73],{"class":39},[33,153862,153767],{"class":47},[33,153864,153865],{"class":35,"line":18160},[33,153866,160],{"emptyLinePlaceholder":159},[33,153868,153869,153871,153873,153875,153877],{"class":35,"line":18165},[33,153870,4509],{"class":39},[33,153872,153390],{"class":47},[33,153874,40180],{"class":39},[33,153876,40186],{"class":76},[33,153878,5141],{"class":47},[33,153880,153881,153883,153885,153887],{"class":35,"line":18178},[33,153882,33704],{"class":76},[33,153884,345],{"class":47},[33,153886,153792],{"class":119},[33,153888,884],{"class":47},[33,153890,153891],{"class":35,"line":18183},[33,153892,153614],{"class":39},[33,153894,153895],{"class":35,"line":33886},[33,153896,160],{"emptyLinePlaceholder":159},[33,153898,153899,153901,153903,153905,153907,153910],{"class":35,"line":33892},[33,153900,153623],{"class":47},[33,153902,73],{"class":39},[33,153904,61858],{"class":76},[33,153906,345],{"class":47},[33,153908,153909],{"class":119},"\"请输入新姓名:\"",[33,153911,884],{"class":47},[33,153913,153914,153916,153918,153920,153923],{"class":35,"line":33898},[33,153915,153639],{"class":47},[33,153917,73],{"class":39},[33,153919,153644],{"class":47},[33,153921,153922],{"class":119},"\"请输入新年龄:\"",[33,153924,884],{"class":47},[33,153926,153927,153929,153931,153933,153936],{"class":35,"line":33904},[33,153928,153654],{"class":47},[33,153930,73],{"class":39},[33,153932,153659],{"class":47},[33,153934,153935],{"class":119},"\"请输入新成绩:\"",[33,153937,884],{"class":47},[33,153939,153940],{"class":35,"line":33910},[33,153941,160],{"emptyLinePlaceholder":159},[33,153943,153944,153947,153949,153951,153953],{"class":35,"line":33921},[33,153945,153946],{"class":47},"    student[",[33,153948,63932],{"class":119},[33,153950,5840],{"class":47},[33,153952,73],{"class":39},[33,153954,151048],{"class":47},[33,153956,153957,153959,153961,153963,153965],{"class":35,"line":33927},[33,153958,153946],{"class":47},[33,153960,70377],{"class":119},[33,153962,5840],{"class":47},[33,153964,73],{"class":39},[33,153966,151060],{"class":47},[33,153968,153969,153971,153973,153975,153977],{"class":35,"line":33947},[33,153970,153946],{"class":47},[33,153972,152725],{"class":119},[33,153974,5840],{"class":47},[33,153976,73],{"class":39},[33,153978,3032],{"class":47},[33,153980,153981],{"class":35,"line":33953},[33,153982,160],{"emptyLinePlaceholder":159},[33,153984,153985],{"class":35,"line":33964},[33,153986,153714],{"class":47},[33,153988,153989,153991,153993,153996],{"class":35,"line":33970},[33,153990,32552],{"class":76},[33,153992,345],{"class":47},[33,153994,153995],{"class":119},"\"修改成功\"",[33,153997,884],{"class":47},[33,153999,154000],{"class":35,"line":33976},[33,154001,160],{"emptyLinePlaceholder":159},[33,154003,154004],{"class":35,"line":33982},[33,154005,160],{"emptyLinePlaceholder":159},[33,154007,154008,154010,154013],{"class":35,"line":33988},[33,154009,33200],{"class":39},[33,154011,154012],{"class":43}," query_student",[33,154014,153214],{"class":47},[33,154016,154017,154019,154021,154023,154025,154028],{"class":35,"line":33994},[33,154018,153576],{"class":47},[33,154020,73],{"class":39},[33,154022,61858],{"class":76},[33,154024,345],{"class":47},[33,154026,154027],{"class":119},"\"请输入要查询的学号:\"",[33,154029,884],{"class":47},[33,154031,154032,154034,154036],{"class":35,"line":34000},[33,154033,153762],{"class":47},[33,154035,73],{"class":39},[33,154037,153767],{"class":47},[33,154039,154040],{"class":35,"line":34006},[33,154041,160],{"emptyLinePlaceholder":159},[33,154043,154044,154046,154048,154050,154052],{"class":35,"line":34026},[33,154045,4509],{"class":39},[33,154047,153390],{"class":47},[33,154049,40180],{"class":39},[33,154051,40186],{"class":76},[33,154053,5141],{"class":47},[33,154055,154056,154058,154060,154062],{"class":35,"line":34032},[33,154057,33704],{"class":76},[33,154059,345],{"class":47},[33,154061,153792],{"class":119},[33,154063,884],{"class":47},[33,154065,154066],{"class":35,"line":34048},[33,154067,153614],{"class":39},[33,154069,154070],{"class":35,"line":34054},[33,154071,160],{"emptyLinePlaceholder":159},[33,154073,154074],{"class":35,"line":34068},[33,154075,154076],{"class":47},"    print_student(student)\n",[33,154078,154079],{"class":35,"line":34074},[33,154080,160],{"emptyLinePlaceholder":159},[33,154082,154083],{"class":35,"line":34089},[33,154084,160],{"emptyLinePlaceholder":159},[33,154086,154087,154089,154092],{"class":35,"line":34095},[33,154088,33200],{"class":39},[33,154090,154091],{"class":43}," print_student",[33,154093,154094],{"class":47},"(student):\n",[33,154096,154097,154099],{"class":35,"line":34104},[33,154098,32552],{"class":76},[33,154100,152692],{"class":47},[33,154102,154103,154106,154108,154110,154113,154116,154118,154121],{"class":35,"line":34110},[33,154104,154105],{"class":39},"        f",[33,154107,1866],{"class":119},[33,154109,698],{"class":76},[33,154111,154112],{"class":47},"student[",[33,154114,154115],{"class":119},"'student_id'",[33,154117,693],{"class":47},[33,154119,154120],{"class":76},"}\\t",[33,154122,26386],{"class":119},[33,154124,154125,154127,154129,154131,154133,154136,154138,154140],{"class":35,"line":34119},[33,154126,154105],{"class":39},[33,154128,1866],{"class":119},[33,154130,698],{"class":76},[33,154132,154112],{"class":47},[33,154134,154135],{"class":119},"'name'",[33,154137,693],{"class":47},[33,154139,154120],{"class":76},[33,154141,26386],{"class":119},[33,154143,154144,154146,154148,154150,154152,154155,154157,154159],{"class":35,"line":34125},[33,154145,154105],{"class":39},[33,154147,1866],{"class":119},[33,154149,698],{"class":76},[33,154151,154112],{"class":47},[33,154153,154154],{"class":119},"'age'",[33,154156,693],{"class":47},[33,154158,154120],{"class":76},[33,154160,26386],{"class":119},[33,154162,154163,154165,154167,154169,154171,154174,154176,154178],{"class":35,"line":34131},[33,154164,154105],{"class":39},[33,154166,1866],{"class":119},[33,154168,698],{"class":76},[33,154170,154112],{"class":47},[33,154172,154173],{"class":119},"'score'",[33,154175,693],{"class":47},[33,154177,2542],{"class":76},[33,154179,26386],{"class":119},[33,154181,154182],{"class":35,"line":34140},[33,154183,154184],{"class":47},"    )\n",[33,154186,154187],{"class":35,"line":34146},[33,154188,160],{"emptyLinePlaceholder":159},[33,154190,154191],{"class":35,"line":34157},[33,154192,160],{"emptyLinePlaceholder":159},[33,154194,154195,154197,154200],{"class":35,"line":34163},[33,154196,33200],{"class":39},[33,154198,154199],{"class":43}," show_all_students",[33,154201,153214],{"class":47},[33,154203,154204,154206,154208],{"class":35,"line":34182},[33,154205,4509],{"class":39},[33,154207,40183],{"class":39},[33,154209,153395],{"class":47},[33,154211,154212,154214,154216,154219],{"class":35,"line":34188},[33,154213,33704],{"class":76},[33,154215,345],{"class":47},[33,154217,154218],{"class":119},"\"暂无学生\"",[33,154220,884],{"class":47},[33,154222,154223],{"class":35,"line":34199},[33,154224,153614],{"class":39},[33,154226,154227],{"class":35,"line":34205},[33,154228,160],{"emptyLinePlaceholder":159},[33,154230,154231,154233,154235,154238,154240,154243,154245,154248,154250,154253],{"class":35,"line":34225},[33,154232,32552],{"class":76},[33,154234,345],{"class":47},[33,154236,154237],{"class":119},"\"学号",[33,154239,2693],{"class":76},[33,154241,154242],{"class":119},"姓名",[33,154244,2693],{"class":76},[33,154246,154247],{"class":119},"年龄",[33,154249,2693],{"class":76},[33,154251,154252],{"class":119},"成绩\"",[33,154254,884],{"class":47},[33,154256,154257,154259,154261,154263],{"class":35,"line":34241},[33,154258,857],{"class":39},[33,154260,153390],{"class":47},[33,154262,27296],{"class":39},[33,154264,153395],{"class":47},[33,154266,154267],{"class":35,"line":34247},[33,154268,154269],{"class":47},"        print_student(student)\n",[33,154271,154272],{"class":35,"line":34261},[33,154273,160],{"emptyLinePlaceholder":159},[33,154275,154276],{"class":35,"line":34267},[33,154277,160],{"emptyLinePlaceholder":159},[33,154279,154280,154282,154284],{"class":35,"line":34273},[33,154281,33200],{"class":39},[33,154283,44],{"class":43},[33,154285,33206],{"class":47},[33,154287,154288,154291,154293],{"class":35,"line":34284},[33,154289,154290],{"class":47},"    students ",[33,154292,73],{"class":39},[33,154294,154295],{"class":47}," load_students()\n",[33,154297,154298],{"class":35,"line":34290},[33,154299,160],{"emptyLinePlaceholder":159},[33,154301,154302,154304,154306],{"class":35,"line":34296},[33,154303,3673],{"class":39},[33,154305,96545],{"class":76},[33,154307,5141],{"class":47},[33,154309,154310],{"class":35,"line":34306},[33,154311,154312],{"class":47},"        show_menu()\n",[33,154314,154315,154318,154320,154322,154324,154327],{"class":35,"line":34312},[33,154316,154317],{"class":47},"        choice ",[33,154319,73],{"class":39},[33,154321,61858],{"class":76},[33,154323,345],{"class":47},[33,154325,154326],{"class":119},"\"请输入操作:\"",[33,154328,884],{"class":47},[33,154330,154331],{"class":35,"line":34323},[33,154332,160],{"emptyLinePlaceholder":159},[33,154334,154335,154337,154340,154342,154345],{"class":35,"line":34329},[33,154336,3915],{"class":39},[33,154338,154339],{"class":47}," choice ",[33,154341,4359],{"class":39},[33,154343,154344],{"class":119}," \"1\"",[33,154346,5141],{"class":47},[33,154348,154349],{"class":35,"line":34339},[33,154350,154351],{"class":47},"            add_student(students)\n",[33,154353,154354,154357,154359,154361,154364],{"class":35,"line":34344},[33,154355,154356],{"class":39},"        elif",[33,154358,154339],{"class":47},[33,154360,4359],{"class":39},[33,154362,154363],{"class":119}," \"2\"",[33,154365,5141],{"class":47},[33,154367,154368],{"class":35,"line":34350},[33,154369,154370],{"class":47},"            delete_student(students)\n",[33,154372,154373,154375,154377,154379,154382],{"class":35,"line":34399},[33,154374,154356],{"class":39},[33,154376,154339],{"class":47},[33,154378,4359],{"class":39},[33,154380,154381],{"class":119}," \"3\"",[33,154383,5141],{"class":47},[33,154385,154386],{"class":35,"line":34446},[33,154387,154388],{"class":47},"            update_student(students)\n",[33,154390,154391,154393,154395,154397,154400],{"class":35,"line":34451},[33,154392,154356],{"class":39},[33,154394,154339],{"class":47},[33,154396,4359],{"class":39},[33,154398,154399],{"class":119}," \"4\"",[33,154401,5141],{"class":47},[33,154403,154404],{"class":35,"line":34457},[33,154405,154406],{"class":47},"            query_student(students)\n",[33,154408,154409,154411,154413,154415,154418],{"class":35,"line":34476},[33,154410,154356],{"class":39},[33,154412,154339],{"class":47},[33,154414,4359],{"class":39},[33,154416,154417],{"class":119}," \"5\"",[33,154419,5141],{"class":47},[33,154421,154422],{"class":35,"line":34482},[33,154423,154424],{"class":47},"            show_all_students(students)\n",[33,154426,154427,154429,154431,154433,154436],{"class":35,"line":34502},[33,154428,154356],{"class":39},[33,154430,154339],{"class":47},[33,154432,4359],{"class":39},[33,154434,154435],{"class":119}," \"0\"",[33,154437,5141],{"class":47},[33,154439,154440,154442,154444,154447],{"class":35,"line":34508},[33,154441,35903],{"class":76},[33,154443,345],{"class":47},[33,154445,154446],{"class":119},"\"退出系统\"",[33,154448,884],{"class":47},[33,154450,154451],{"class":35,"line":34514},[33,154452,116351],{"class":39},[33,154454,154455,154457],{"class":35,"line":34524},[33,154456,3950],{"class":39},[33,154458,5141],{"class":47},[33,154460,154461,154463,154465,154468],{"class":35,"line":34529},[33,154462,35903],{"class":76},[33,154464,345],{"class":47},[33,154466,154467],{"class":119},"\"输入错误\"",[33,154469,884],{"class":47},[33,154471,154472],{"class":35,"line":34535},[33,154473,160],{"emptyLinePlaceholder":159},[33,154475,154476],{"class":35,"line":34551},[33,154477,160],{"emptyLinePlaceholder":159},[33,154479,154480,154482,154484,154486,154488],{"class":35,"line":34596},[33,154481,2987],{"class":39},[33,154483,32473],{"class":76},[33,154485,102812],{"class":39},[33,154487,102815],{"class":119},[33,154489,5141],{"class":47},[33,154491,154492],{"class":35,"line":34602},[33,154493,102822],{"class":47},[14,154495,154496],{},"这个项目串联了：",[574,154498,154499,154502,154505,154508,154511,154513],{},[564,154500,154501],{},"菜单循环。",[564,154503,154504],{},"函数封装。",[564,154506,154507],{},"列表字典。",[564,154509,154510],{},"JSON 读写。",[564,154512,152980],{},[564,154514,154515,29638],{},[30,154516,154517],{},"if __name__ == \"__main__\"",[18,154519,154521],{"id":154520},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,154523,154524],{},"可以进一步拆成两个类：",[574,154526,154527,154532],{},[564,154528,154529,154531],{},[30,154530,150821],{},"：表示单个学生。",[564,154533,154534,154536],{},[30,154535,152847],{},"：负责学生增删改查和文件保存。",[14,154538,154539],{},"示意代码：",[23,154541,154543],{"className":31631,"code":154542,"language":31633,"meta":28,"style":28},"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",[30,154544,154545,154555,154559,154563,154567,154575,154582,154588,154594,154600,154604,154612,154618,154628,154638,154648,154658,154662,154666,154672,154680,154688,154696,154704,154712,154720],{"__ignoreMap":28},[33,154546,154547,154549,154551,154553],{"class":35,"line":36},[33,154548,31990],{"class":39},[33,154550,152405],{"class":47},[33,154552,31645],{"class":39},[33,154554,152410],{"class":47},[33,154556,154557],{"class":35,"line":51},[33,154558,160],{"emptyLinePlaceholder":159},[33,154560,154561],{"class":35,"line":57},[33,154562,160],{"emptyLinePlaceholder":159},[33,154564,154565],{"class":35,"line":64},[33,154566,152423],{"class":43},[33,154568,154569,154571,154573],{"class":35,"line":83},[33,154570,15945],{"class":39},[33,154572,9149],{"class":43},[33,154574,5141],{"class":47},[33,154576,154577,154580],{"class":35,"line":89},[33,154578,154579],{"class":47},"    student_id: ",[33,154581,152439],{"class":76},[33,154583,154584,154586],{"class":35,"line":98},[33,154585,152436],{"class":47},[33,154587,152439],{"class":76},[33,154589,154590,154592],{"class":35,"line":110},[33,154591,152444],{"class":47},[33,154593,152447],{"class":76},[33,154595,154596,154598],{"class":35,"line":134},[33,154597,152452],{"class":47},[33,154599,152455],{"class":76},[33,154601,154602],{"class":35,"line":156},[33,154603,160],{"emptyLinePlaceholder":159},[33,154605,154606,154608,154610],{"class":35,"line":163},[33,154607,32054],{"class":39},[33,154609,152603],{"class":43},[33,154611,32060],{"class":47},[33,154613,154614,154616],{"class":35,"line":169},[33,154615,16003],{"class":39},[33,154617,16823],{"class":47},[33,154619,154620,154622,154624,154626],{"class":35,"line":175},[33,154621,152616],{"class":119},[33,154623,52690],{"class":47},[33,154625,32076],{"class":76},[33,154627,152623],{"class":47},[33,154629,154630,154632,154634,154636],{"class":35,"line":181},[33,154631,152628],{"class":119},[33,154633,52690],{"class":47},[33,154635,32076],{"class":76},[33,154637,152635],{"class":47},[33,154639,154640,154642,154644,154646],{"class":35,"line":196},[33,154641,152640],{"class":119},[33,154643,52690],{"class":47},[33,154645,32076],{"class":76},[33,154647,152647],{"class":47},[33,154649,154650,154652,154654,154656],{"class":35,"line":213},[33,154651,152652],{"class":119},[33,154653,52690],{"class":47},[33,154655,32076],{"class":76},[33,154657,152659],{"class":47},[33,154659,154660],{"class":35,"line":228},[33,154661,1334],{"class":47},[33,154663,154664],{"class":35,"line":1345},[33,154665,160],{"emptyLinePlaceholder":159},[33,154667,154668,154670],{"class":35,"line":1350},[33,154669,152267],{"class":43},[33,154671,152270],{"class":76},[33,154673,154674,154676,154678],{"class":35,"line":1359},[33,154675,32054],{"class":39},[33,154677,152680],{"class":43},[33,154679,152683],{"class":47},[33,154681,154682,154684,154686],{"class":35,"line":1364},[33,154683,16003],{"class":39},[33,154685,152287],{"class":76},[33,154687,152692],{"class":47},[33,154689,154690,154692,154694],{"class":35,"line":1370},[33,154691,152697],{"class":47},[33,154693,152700],{"class":119},[33,154695,89089],{"class":47},[33,154697,154698,154700,154702],{"class":35,"line":1425},[33,154699,152697],{"class":47},[33,154701,63932],{"class":119},[33,154703,89089],{"class":47},[33,154705,154706,154708,154710],{"class":35,"line":1438},[33,154707,152697],{"class":47},[33,154709,70377],{"class":119},[33,154711,89089],{"class":47},[33,154713,154714,154716,154718],{"class":35,"line":1451},[33,154715,152697],{"class":47},[33,154717,152725],{"class":119},[33,154719,89089],{"class":47},[33,154721,154722],{"class":35,"line":1457},[33,154723,39379],{"class":47},[14,154725,154726],{},"管理器示意：",[23,154728,154730],{"className":31631,"code":154729,"language":31633,"meta":28,"style":28},"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",[30,154731,154732,154741,154749,154760,154764,154774,154787,154798,154805,154811,154815,154824,154833,154839,154846],{"__ignoreMap":28},[33,154733,154734,154736,154739],{"class":35,"line":36},[33,154735,15945],{"class":39},[33,154737,154738],{"class":43}," StudentManager",[33,154740,5141],{"class":47},[33,154742,154743,154745,154747],{"class":35,"line":51},[33,154744,32054],{"class":39},[33,154746,32057],{"class":76},[33,154748,32060],{"class":47},[33,154750,154751,154753,154756,154758],{"class":35,"line":57},[33,154752,32098],{"class":76},[33,154754,154755],{"class":47},".students ",[33,154757,73],{"class":39},[33,154759,53091],{"class":47},[33,154761,154762],{"class":35,"line":64},[33,154763,160],{"emptyLinePlaceholder":159},[33,154765,154766,154768,154771],{"class":35,"line":83},[33,154767,32054],{"class":39},[33,154769,154770],{"class":43}," find_by_id",[33,154772,154773],{"class":47},"(self, student_id):\n",[33,154775,154776,154778,154780,154782,154784],{"class":35,"line":89},[33,154777,1216],{"class":39},[33,154779,153390],{"class":47},[33,154781,27296],{"class":39},[33,154783,40126],{"class":76},[33,154785,154786],{"class":47},".students:\n",[33,154788,154789,154791,154794,154796],{"class":35,"line":98},[33,154790,1259],{"class":39},[33,154792,154793],{"class":47}," student.student_id ",[33,154795,4359],{"class":39},[33,154797,153411],{"class":47},[33,154799,154800,154803],{"class":35,"line":110},[33,154801,154802],{"class":39},"                return",[33,154804,153418],{"class":47},[33,154806,154807,154809],{"class":35,"line":134},[33,154808,16003],{"class":39},[33,154810,153425],{"class":76},[33,154812,154813],{"class":35,"line":156},[33,154814,160],{"emptyLinePlaceholder":159},[33,154816,154817,154819,154821],{"class":35,"line":163},[33,154818,32054],{"class":39},[33,154820,6600],{"class":43},[33,154822,154823],{"class":47},"(self, student):\n",[33,154825,154826,154828,154830],{"class":35,"line":169},[33,154827,3915],{"class":39},[33,154829,40126],{"class":76},[33,154831,154832],{"class":47},".find_by_id(student.student_id):\n",[33,154834,154835,154837],{"class":35,"line":175},[33,154836,16983],{"class":39},[33,154838,127060],{"class":76},[33,154840,154841,154843],{"class":35,"line":181},[33,154842,32098],{"class":76},[33,154844,154845],{"class":47},".students.append(student)\n",[33,154847,154848,154850],{"class":35,"line":196},[33,154849,16003],{"class":39},[33,154851,154852],{"class":76}," True\n",[14,154854,154855],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[18,154857,154859],{"id":154858},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[1599,154861,154863],{"id":154862},"_1251-数据结构","12.5.1 数据结构",[23,154865,154867],{"className":31631,"code":154866,"language":31633,"meta":28,"style":28},"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",[30,154868,154869,154877,154908,154938,154967,154996],{"__ignoreMap":28},[33,154870,154871,154873,154875],{"class":35,"line":36},[33,154872,149718],{"class":47},[33,154874,73],{"class":39},[33,154876,56700],{"class":47},[33,154878,154879,154881,154883,154885,154887,154889,154892,154894,154897,154899,154901,154903,154906],{"class":35,"line":51},[33,154880,149638],{"class":47},[33,154882,149250],{"class":119},[33,154884,52690],{"class":47},[33,154886,149861],{"class":119},[33,154888,13686],{"class":47},[33,154890,154891],{"class":119},"\"category\"",[33,154893,52690],{"class":47},[33,154895,154896],{"class":119},"\"手机\"",[33,154898,13686],{"class":47},[33,154900,85337],{"class":119},[33,154902,52690],{"class":47},[33,154904,154905],{"class":76},"12000",[33,154907,6321],{"class":47},[33,154909,154910,154912,154914,154916,154918,154920,154922,154924,154927,154929,154931,154933,154936],{"class":35,"line":57},[33,154911,149638],{"class":47},[33,154913,149250],{"class":119},[33,154915,52690],{"class":47},[33,154917,149861],{"class":119},[33,154919,13686],{"class":47},[33,154921,154891],{"class":119},[33,154923,52690],{"class":47},[33,154925,154926],{"class":119},"\"电脑\"",[33,154928,13686],{"class":47},[33,154930,85337],{"class":119},[33,154932,52690],{"class":47},[33,154934,154935],{"class":76},"18000",[33,154937,6321],{"class":47},[33,154939,154940,154942,154944,154946,154948,154950,154952,154954,154956,154958,154960,154962,154965],{"class":35,"line":64},[33,154941,149638],{"class":47},[33,154943,149250],{"class":119},[33,154945,52690],{"class":47},[33,154947,149882],{"class":119},[33,154949,13686],{"class":47},[33,154951,154891],{"class":119},[33,154953,52690],{"class":47},[33,154955,154896],{"class":119},[33,154957,13686],{"class":47},[33,154959,85337],{"class":119},[33,154961,52690],{"class":47},[33,154963,154964],{"class":76},"15000",[33,154966,6321],{"class":47},[33,154968,154969,154971,154973,154975,154977,154979,154981,154983,154985,154987,154989,154991,154994],{"class":35,"line":83},[33,154970,149638],{"class":47},[33,154972,149250],{"class":119},[33,154974,52690],{"class":47},[33,154976,149882],{"class":119},[33,154978,13686],{"class":47},[33,154980,154891],{"class":119},[33,154982,52690],{"class":47},[33,154984,154926],{"class":119},[33,154986,13686],{"class":47},[33,154988,85337],{"class":119},[33,154990,52690],{"class":47},[33,154992,154993],{"class":76},"16000",[33,154995,6321],{"class":47},[33,154997,154998],{"class":35,"line":89},[33,154999,34499],{"class":47},[1599,155001,155003],{"id":155002},"_1252-按日期统计","12.5.2 按日期统计",[23,155005,155007],{"className":31631,"code":155006,"language":31633,"meta":28,"style":28},"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",[30,155008,155009,155018,155022,155033,155047,155060,155079,155083],{"__ignoreMap":28},[33,155010,155011,155014,155016],{"class":35,"line":36},[33,155012,155013],{"class":47},"daily_total ",[33,155015,73],{"class":39},[33,155017,89121],{"class":47},[33,155019,155020],{"class":35,"line":51},[33,155021,160],{"emptyLinePlaceholder":159},[33,155023,155024,155026,155028,155030],{"class":35,"line":57},[33,155025,4435],{"class":39},[33,155027,149462],{"class":47},[33,155029,27296],{"class":39},[33,155031,155032],{"class":47}," sales:\n",[33,155034,155035,155038,155040,155043,155045],{"class":35,"line":64},[33,155036,155037],{"class":47},"    date ",[33,155039,73],{"class":39},[33,155041,155042],{"class":47}," item[",[33,155044,149250],{"class":119},[33,155046,34499],{"class":47},[33,155048,155049,155052,155054,155056,155058],{"class":35,"line":83},[33,155050,155051],{"class":47},"    amount ",[33,155053,73],{"class":39},[33,155055,155042],{"class":47},[33,155057,85337],{"class":119},[33,155059,34499],{"class":47},[33,155061,155062,155065,155067,155070,155072,155074,155076],{"class":35,"line":89},[33,155063,155064],{"class":47},"    daily_total[date] ",[33,155066,73],{"class":39},[33,155068,155069],{"class":47}," daily_total.get(date, ",[33,155071,766],{"class":76},[33,155073,14965],{"class":47},[33,155075,1271],{"class":39},[33,155077,155078],{"class":47}," amount\n",[33,155080,155081],{"class":35,"line":98},[33,155082,160],{"emptyLinePlaceholder":159},[33,155084,155085,155087],{"class":35,"line":110},[33,155086,31668],{"class":76},[33,155088,155089],{"class":47},"(daily_total)\n",[1599,155091,155093],{"id":155092},"_1253-按类别统计","12.5.3 按类别统计",[23,155095,155097],{"className":31631,"code":155096,"language":31633,"meta":28,"style":28},"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",[30,155098,155099,155108,155112,155122,155135,155147,155165,155169],{"__ignoreMap":28},[33,155100,155101,155104,155106],{"class":35,"line":36},[33,155102,155103],{"class":47},"category_total ",[33,155105,73],{"class":39},[33,155107,89121],{"class":47},[33,155109,155110],{"class":35,"line":51},[33,155111,160],{"emptyLinePlaceholder":159},[33,155113,155114,155116,155118,155120],{"class":35,"line":57},[33,155115,4435],{"class":39},[33,155117,149462],{"class":47},[33,155119,27296],{"class":39},[33,155121,155032],{"class":47},[33,155123,155124,155127,155129,155131,155133],{"class":35,"line":64},[33,155125,155126],{"class":47},"    category ",[33,155128,73],{"class":39},[33,155130,155042],{"class":47},[33,155132,154891],{"class":119},[33,155134,34499],{"class":47},[33,155136,155137,155139,155141,155143,155145],{"class":35,"line":83},[33,155138,155051],{"class":47},[33,155140,73],{"class":39},[33,155142,155042],{"class":47},[33,155144,85337],{"class":119},[33,155146,34499],{"class":47},[33,155148,155149,155152,155154,155157,155159,155161,155163],{"class":35,"line":89},[33,155150,155151],{"class":47},"    category_total[category] ",[33,155153,73],{"class":39},[33,155155,155156],{"class":47}," category_total.get(category, ",[33,155158,766],{"class":76},[33,155160,14965],{"class":47},[33,155162,1271],{"class":39},[33,155164,155078],{"class":47},[33,155166,155167],{"class":35,"line":98},[33,155168,160],{"emptyLinePlaceholder":159},[33,155170,155171,155173],{"class":35,"line":110},[33,155172,31668],{"class":76},[33,155174,155175],{"class":47},"(category_total)\n",[1599,155177,155179],{"id":155178},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[23,155181,155183],{"className":31631,"code":155182,"language":31633,"meta":28,"style":28},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[30,155184,155185,155210],{"__ignoreMap":28},[33,155186,155187,155190,155192,155194,155197,155200,155203,155206,155208],{"class":35,"line":36},[33,155188,155189],{"class":47},"top_date, top_amount ",[33,155191,73],{"class":39},[33,155193,7338],{"class":76},[33,155195,155196],{"class":47},"(daily_total.items(), ",[33,155198,155199],{"class":955},"key",[33,155201,155202],{"class":39},"=lambda",[33,155204,155205],{"class":47}," item: item[",[33,155207,701],{"class":76},[33,155209,1276],{"class":47},[33,155211,155212,155214],{"class":35,"line":51},[33,155213,31668],{"class":76},[33,155215,155216],{"class":47},"(top_date, top_amount)\n",[18,155218,155220],{"id":155219},"_126-绘制柱状图","12.6 绘制柱状图",[23,155222,155224],{"className":31631,"code":155223,"language":31633,"meta":28,"style":28},"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",[30,155225,155226,155240,155251,155255,155263,155275,155287,155298,155302,155306,155316,155327,155341,155346,155363,155380,155396,155400],{"__ignoreMap":28},[33,155227,155228,155230,155232,155234,155236,155238],{"class":35,"line":36},[33,155229,31990],{"class":39},[33,155231,148632],{"class":47},[33,155233,31645],{"class":39},[33,155235,148637],{"class":47},[33,155237,32636],{"class":39},[33,155239,148642],{"class":47},[33,155241,155242,155244,155246,155248],{"class":35,"line":51},[33,155243,31990],{"class":39},[33,155245,148491],{"class":47},[33,155247,31645],{"class":39},[33,155249,155250],{"class":47}," Bar\n",[33,155252,155253],{"class":35,"line":57},[33,155254,160],{"emptyLinePlaceholder":159},[33,155256,155257,155259,155261],{"class":35,"line":64},[33,155258,155103],{"class":47},[33,155260,73],{"class":39},[33,155262,16823],{"class":47},[33,155264,155265,155268,155270,155273],{"class":35,"line":83},[33,155266,155267],{"class":119},"    \"手机\"",[33,155269,52690],{"class":47},[33,155271,155272],{"class":76},"27000",[33,155274,32719],{"class":47},[33,155276,155277,155280,155282,155285],{"class":35,"line":89},[33,155278,155279],{"class":119},"    \"电脑\"",[33,155281,52690],{"class":47},[33,155283,155284],{"class":76},"34000",[33,155286,32719],{"class":47},[33,155288,155289,155292,155294,155296],{"class":35,"line":98},[33,155290,155291],{"class":119},"    \"耳机\"",[33,155293,52690],{"class":47},[33,155295,125652],{"class":76},[33,155297,32719],{"class":47},[33,155299,155300],{"class":35,"line":110},[33,155301,231],{"class":47},[33,155303,155304],{"class":35,"line":134},[33,155305,160],{"emptyLinePlaceholder":159},[33,155307,155308,155311,155313],{"class":35,"line":156},[33,155309,155310],{"class":47},"bar ",[33,155312,73],{"class":39},[33,155314,155315],{"class":47}," Bar()\n",[33,155317,155318,155321,155324],{"class":35,"line":163},[33,155319,155320],{"class":47},"bar.add_xaxis(",[33,155322,155323],{"class":76},"list",[33,155325,155326],{"class":47},"(category_total.keys()))\n",[33,155328,155329,155332,155334,155336,155338],{"class":35,"line":169},[33,155330,155331],{"class":47},"bar.add_yaxis(",[33,155333,148548],{"class":119},[33,155335,13686],{"class":47},[33,155337,155323],{"class":76},[33,155339,155340],{"class":47},"(category_total.values()))\n",[33,155342,155343],{"class":35,"line":175},[33,155344,155345],{"class":47},"bar.set_global_opts(\n",[33,155347,155348,155350,155352,155354,155356,155358,155361],{"class":35,"line":181},[33,155349,148726],{"class":955},[33,155351,73],{"class":39},[33,155353,148731],{"class":47},[33,155355,52660],{"class":955},[33,155357,73],{"class":39},[33,155359,155360],{"class":119},"\"品类销售额\"",[33,155362,39300],{"class":47},[33,155364,155365,155367,155369,155371,155373,155375,155378],{"class":35,"line":196},[33,155366,148745],{"class":955},[33,155368,73],{"class":39},[33,155370,148750],{"class":47},[33,155372,81063],{"class":955},[33,155374,73],{"class":39},[33,155376,155377],{"class":119},"\"品类\"",[33,155379,39300],{"class":47},[33,155381,155382,155384,155386,155388,155390,155392,155394],{"class":35,"line":213},[33,155383,148764],{"class":955},[33,155385,73],{"class":39},[33,155387,148750],{"class":47},[33,155389,81063],{"class":955},[33,155391,73],{"class":39},[33,155393,148548],{"class":119},[33,155395,39300],{"class":47},[33,155397,155398],{"class":35,"line":228},[33,155399,884],{"class":47},[33,155401,155402,155405,155408],{"class":35,"line":1345},[33,155403,155404],{"class":47},"bar.render(",[33,155406,155407],{"class":119},"\"category_sales.html\"",[33,155409,884],{"class":47},[18,155411,155413],{"id":155412},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,155415,155416],{},"时间线适合展示不同日期、月份、年份的数据变化。",[23,155418,155420],{"className":31631,"code":155419,"language":31633,"meta":28,"style":28},"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",[30,155421,155422,155436,155447,155451,155459,155483,155506,155531,155535,155539,155549,155553,155564,155573,155583,155597,155628,155633,155637],{"__ignoreMap":28},[33,155423,155424,155426,155428,155430,155432,155434],{"class":35,"line":36},[33,155425,31990],{"class":39},[33,155427,148632],{"class":47},[33,155429,31645],{"class":39},[33,155431,148637],{"class":47},[33,155433,32636],{"class":39},[33,155435,148642],{"class":47},[33,155437,155438,155440,155442,155444],{"class":35,"line":51},[33,155439,31990],{"class":39},[33,155441,148491],{"class":47},[33,155443,31645],{"class":39},[33,155445,155446],{"class":47}," Bar, Timeline\n",[33,155448,155449],{"class":35,"line":57},[33,155450,160],{"emptyLinePlaceholder":159},[33,155452,155453,155455,155457],{"class":35,"line":64},[33,155454,102911],{"class":47},[33,155456,73],{"class":39},[33,155458,16823],{"class":47},[33,155460,155461,155464,155467,155469,155471,155473,155475,155477,155479,155481],{"class":35,"line":83},[33,155462,155463],{"class":119},"    \"2024-10-01\"",[33,155465,155466],{"class":47},": {",[33,155468,154896],{"class":119},[33,155470,52690],{"class":47},[33,155472,154905],{"class":76},[33,155474,13686],{"class":47},[33,155476,154926],{"class":119},[33,155478,52690],{"class":47},[33,155480,154935],{"class":76},[33,155482,6321],{"class":47},[33,155484,155485,155488,155490,155492,155494,155496,155498,155500,155502,155504],{"class":35,"line":89},[33,155486,155487],{"class":119},"    \"2024-10-02\"",[33,155489,155466],{"class":47},[33,155491,154896],{"class":119},[33,155493,52690],{"class":47},[33,155495,154964],{"class":76},[33,155497,13686],{"class":47},[33,155499,154926],{"class":119},[33,155501,52690],{"class":47},[33,155503,154993],{"class":76},[33,155505,6321],{"class":47},[33,155507,155508,155511,155513,155515,155517,155520,155522,155524,155526,155529],{"class":35,"line":98},[33,155509,155510],{"class":119},"    \"2024-10-03\"",[33,155512,155466],{"class":47},[33,155514,154896],{"class":119},[33,155516,52690],{"class":47},[33,155518,155519],{"class":76},"17000",[33,155521,13686],{"class":47},[33,155523,154926],{"class":119},[33,155525,52690],{"class":47},[33,155527,155528],{"class":76},"19000",[33,155530,6321],{"class":47},[33,155532,155533],{"class":35,"line":110},[33,155534,231],{"class":47},[33,155536,155537],{"class":35,"line":134},[33,155538,160],{"emptyLinePlaceholder":159},[33,155540,155541,155544,155546],{"class":35,"line":156},[33,155542,155543],{"class":47},"timeline ",[33,155545,73],{"class":39},[33,155547,155548],{"class":47}," Timeline()\n",[33,155550,155551],{"class":35,"line":163},[33,155552,160],{"emptyLinePlaceholder":159},[33,155554,155555,155557,155560,155562],{"class":35,"line":169},[33,155556,4435],{"class":39},[33,155558,155559],{"class":47}," date, category_data ",[33,155561,27296],{"class":39},[33,155563,150401],{"class":47},[33,155565,155566,155569,155571],{"class":35,"line":175},[33,155567,155568],{"class":47},"    bar ",[33,155570,73],{"class":39},[33,155572,155315],{"class":47},[33,155574,155575,155578,155580],{"class":35,"line":181},[33,155576,155577],{"class":47},"    bar.add_xaxis(",[33,155579,155323],{"class":76},[33,155581,155582],{"class":47},"(category_data.keys()))\n",[33,155584,155585,155588,155590,155592,155594],{"class":35,"line":196},[33,155586,155587],{"class":47},"    bar.add_yaxis(",[33,155589,148548],{"class":119},[33,155591,13686],{"class":47},[33,155593,155323],{"class":76},[33,155595,155596],{"class":47},"(category_data.values()))\n",[33,155598,155599,155602,155605,155607,155609,155611,155613,155615,155617,155619,155621,155623,155626],{"class":35,"line":213},[33,155600,155601],{"class":47},"    bar.set_global_opts(",[33,155603,155604],{"class":955},"title_opts",[33,155606,73],{"class":39},[33,155608,148731],{"class":47},[33,155610,52660],{"class":955},[33,155612,73],{"class":39},[33,155614,1677],{"class":39},[33,155616,1866],{"class":119},[33,155618,698],{"class":76},[33,155620,75179],{"class":47},[33,155622,2542],{"class":76},[33,155624,155625],{"class":119},"销售额\"",[33,155627,31750],{"class":47},[33,155629,155630],{"class":35,"line":228},[33,155631,155632],{"class":47},"    timeline.add(bar, date)\n",[33,155634,155635],{"class":35,"line":1345},[33,155636,160],{"emptyLinePlaceholder":159},[33,155638,155639,155642,155645],{"class":35,"line":1350},[33,155640,155641],{"class":47},"timeline.render(",[33,155643,155644],{"class":119},"\"timeline_sales.html\"",[33,155646,884],{"class":47},[18,155648,155650],{"id":155649},"_128-绘制地图","12.8 绘制地图",[14,155652,155653],{},"地图适合展示地区数据。",[23,155655,155657],{"className":31631,"code":155656,"language":31633,"meta":28,"style":28},"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",[30,155658,155659,155673,155684,155688,155696,155709,155721,155734,155747,155751,155755,155765,155780,155785,155802,155821,155825],{"__ignoreMap":28},[33,155660,155661,155663,155665,155667,155669,155671],{"class":35,"line":36},[33,155662,31990],{"class":39},[33,155664,148632],{"class":47},[33,155666,31645],{"class":39},[33,155668,148637],{"class":47},[33,155670,32636],{"class":39},[33,155672,148642],{"class":47},[33,155674,155675,155677,155679,155681],{"class":35,"line":51},[33,155676,31990],{"class":39},[33,155678,148491],{"class":47},[33,155680,31645],{"class":39},[33,155682,155683],{"class":47}," Map\n",[33,155685,155686],{"class":35,"line":57},[33,155687,160],{"emptyLinePlaceholder":159},[33,155689,155690,155692,155694],{"class":35,"line":64},[33,155691,102911],{"class":47},[33,155693,73],{"class":39},[33,155695,56700],{"class":47},[33,155697,155698,155701,155703,155705,155707],{"class":35,"line":83},[33,155699,155700],{"class":47},"    (",[33,155702,70522],{"class":119},[33,155704,13686],{"class":47},[33,155706,2416],{"class":76},[33,155708,39300],{"class":47},[33,155710,155711,155713,155715,155717,155719],{"class":35,"line":89},[33,155712,155700],{"class":47},[33,155714,70542],{"class":119},[33,155716,13686],{"class":47},[33,155718,148565],{"class":76},[33,155720,39300],{"class":47},[33,155722,155723,155725,155728,155730,155732],{"class":35,"line":98},[33,155724,155700],{"class":47},[33,155726,155727],{"class":119},"\"广东\"",[33,155729,13686],{"class":47},[33,155731,3163],{"class":76},[33,155733,39300],{"class":47},[33,155735,155736,155738,155741,155743,155745],{"class":35,"line":110},[33,155737,155700],{"class":47},[33,155739,155740],{"class":119},"\"浙江\"",[33,155742,13686],{"class":47},[33,155744,148570],{"class":76},[33,155746,39300],{"class":47},[33,155748,155749],{"class":35,"line":134},[33,155750,34499],{"class":47},[33,155752,155753],{"class":35,"line":156},[33,155754,160],{"emptyLinePlaceholder":159},[33,155756,155757,155760,155762],{"class":35,"line":163},[33,155758,155759],{"class":47},"map_chart ",[33,155761,73],{"class":39},[33,155763,155764],{"class":47}," Map()\n",[33,155766,155767,155770,155772,155775,155778],{"class":35,"line":169},[33,155768,155769],{"class":47},"map_chart.add(",[33,155771,148548],{"class":119},[33,155773,155774],{"class":47},", data, ",[33,155776,155777],{"class":119},"\"china\"",[33,155779,884],{"class":47},[33,155781,155782],{"class":35,"line":175},[33,155783,155784],{"class":47},"map_chart.set_global_opts(\n",[33,155786,155787,155789,155791,155793,155795,155797,155800],{"class":35,"line":181},[33,155788,148726],{"class":955},[33,155790,73],{"class":39},[33,155792,148731],{"class":47},[33,155794,52660],{"class":955},[33,155796,73],{"class":39},[33,155798,155799],{"class":119},"\"地区销售额\"",[33,155801,39300],{"class":47},[33,155803,155804,155807,155809,155812,155815,155817,155819],{"class":35,"line":196},[33,155805,155806],{"class":955},"    visualmap_opts",[33,155808,73],{"class":39},[33,155810,155811],{"class":47},"opts.VisualMapOpts(",[33,155813,155814],{"class":955},"max_",[33,155816,73],{"class":39},[33,155818,3163],{"class":76},[33,155820,39300],{"class":47},[33,155822,155823],{"class":35,"line":213},[33,155824,884],{"class":47},[33,155826,155827,155830,155833],{"class":35,"line":228},[33,155828,155829],{"class":47},"map_chart.render(",[33,155831,155832],{"class":119},"\"map_sales.html\"",[33,155834,884],{"class":47},[14,155836,155837],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[18,155839,155841],{"id":155840},"_129-项目拆分建议","12.9 项目拆分建议",[14,155843,155844],{},"当代码超过一个文件时，可以这样组织：",[23,155846,155849],{"className":155847,"code":155848,"language":6578,"meta":28},[6576],"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",[30,155850,155848],{"__ignoreMap":28},[14,155852,155853],{},"职责：",[574,155855,155856,155862,155868,155874],{},[564,155857,155858,155861],{},[30,155859,155860],{},"main.py","：程序入口。",[564,155863,155864,155867],{},[30,155865,155866],{},"file_utils.py","：读写 JSON。",[564,155869,155870,155873],{},[30,155871,155872],{},"sales_service.py","：统计销售数据。",[564,155875,155876,155879],{},[30,155877,155878],{},"chart_builder.py","：生成图表。",[18,155881,155883],{"id":155882},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,155885,155886],{},"语法基础：",[574,155888,155889,155892,155895,155898],{},[564,155890,155891],{},"会写变量、注释、输入输出。",[564,155893,155894],{},"会使用 int、float、str、bool。",[564,155896,155897],{},"会做类型转换。",[564,155899,155900],{},"会使用 f-string 格式化输出。",[14,155902,155903],{},"流程控制：",[574,155905,155906,155912,155918,155926],{},[564,155907,155908,155909,29638],{},"会写 ",[30,155910,155911],{},"if elif else",[564,155913,155908,155914,102271,155916,29638],{},[30,155915,109916],{},[30,155917,4435],{},[564,155919,155920,155921,102271,155923,29638],{},"理解 ",[30,155922,3476],{},[30,155924,155925],{},"continue",[564,155927,155928],{},"能写嵌套循环。",[14,155930,155931],{},"函数：",[574,155933,155934,155937,155940,155943],{},[564,155935,155936],{},"会定义和调用函数。",[564,155938,155939],{},"理解参数和返回值。",[564,155941,155942],{},"知道局部变量和全局变量。",[564,155944,155945],{},"会使用默认参数、关键字参数、不定长参数。",[14,155947,155948],{},"容器：",[574,155950,155951,155954,155957,155960,155963],{},[564,155952,155953],{},"会使用列表增删改查。",[564,155955,155956],{},"会遍历列表、字典。",[564,155958,155959],{},"会使用切片。",[564,155961,155962],{},"会用集合去重。",[564,155964,155965],{},"会处理列表嵌套字典。",[14,155967,155968],{},"文件和模块：",[574,155970,155971,155974,155977,155980,155983],{},[564,155972,155973],{},"会读写文本文件。",[564,155975,155976],{},"会读写 JSON。",[564,155978,155979],{},"会捕获常见异常。",[564,155981,155982],{},"会导入模块和第三方包。",[564,155984,155985],{},"会创建简单包结构。",[14,155987,155988],{},"项目能力：",[574,155990,155991,155994,155997,156000,156003],{},[564,155992,155993],{},"能把代码拆成函数。",[564,155995,155996],{},"能把数据保存到文件。",[564,155998,155999],{},"能处理用户输入错误。",[564,156001,156002],{},"能写一个完整菜单程序。",[564,156004,156005],{},"能用 pyecharts 生成图表。",[18,156007,156009],{"id":156008},"_1211-推荐练习顺序","12.11 推荐练习顺序",[574,156011,156012,156015,156018,156021,156024,156027,156030,156033],{},[564,156013,156014],{},"猜数字游戏。",[564,156016,156017],{},"ATM 菜单程序。",[564,156019,156020],{},"学生成绩统计。",[564,156022,156023],{},"学生管理系统函数版。",[564,156025,156026],{},"学生管理系统文件持久化版。",[564,156028,156029],{},"学生管理系统面向对象版。",[564,156031,156032],{},"销售数据统计。",[564,156034,156035],{},"销售数据可视化。",[18,156037,156039],{"id":156038},"_1212-常见学习误区","12.12 常见学习误区",[574,156041,156042,156045,156048,156051,156054,156057,156060],{},[564,156043,156044],{},"只看视频不敲代码。",[564,156046,156047],{},"一报错就复制错误去搜，不先读报错位置。",[564,156049,156050],{},"变量名随便写，后续自己看不懂。",[564,156052,156053],{},"所有代码都写在一个文件一个函数里。",[564,156055,156056],{},"不保存练习代码，复习时没有材料。",[564,156058,156059],{},"还没掌握列表字典就急着学框架。",[564,156061,156062],{},"不会读官方文档，只依赖教程。",[18,156064,156066],{"id":156065},"_1213-如何读报错","12.13 如何读报错",[14,156068,156069],{},"报错通常从下往上看最后几行。",[14,156071,16386],{},[23,156073,156076],{"className":156074,"code":156075,"language":6578,"meta":28},[6576],"ValueError: invalid literal for int() with base 10: 'abc'\n",[30,156077,156075],{"__ignoreMap":28},[14,156079,25852],{},[574,156081,156082,156088,156098],{},[564,156083,156084,156085,29638],{},"异常类型是 ",[30,156086,156087],{},"ValueError",[564,156089,108598,156090,156093,156094,156097],{},[30,156091,156092],{},"int()"," 无法把 ",[30,156095,156096],{},"'abc'"," 转成整数。",[564,156099,156100],{},"应该检查输入内容或增加异常处理。",[14,156102,156103],{},"再看文件名和行号：",[23,156105,156108],{"className":156106,"code":156107,"language":6578,"meta":28},[6576],"File \"main.py\", line 10, in \u003Cmodule>\n",[30,156109,156107],{"__ignoreMap":28},[14,156111,156112,156113,156115],{},"表示错误发生在 ",[30,156114,155860],{}," 第 10 行。",[18,156117,156119],{"id":156118},"_1214-后续学习方向","12.14 后续学习方向",[14,156121,156122],{},"Python 基础完成后，可以按兴趣选择方向：",[574,156124,156125,156137,156146,156158,156169,156178,156188],{},[564,156126,156127,156128,1829,156131,1829,156134,29638],{},"自动化办公：",[30,156129,156130],{},"openpyxl",[30,156132,156133],{},"python-docx",[30,156135,156136],{},"pdfplumber",[564,156138,156139,156140,1829,156142,1829,156144,29638],{},"数据分析：",[30,156141,101879],{},[30,156143,147438],{},[30,156145,147446],{},[564,156147,156148,156149,1829,156152,1829,156155,29638],{},"Web 后端：",[30,156150,156151],{},"Flask",[30,156153,156154],{},"FastAPI",[30,156156,156157],{},"Django",[564,156159,156160,156161,1829,156163,1829,156166,29638],{},"爬虫：",[30,156162,147423],{},[30,156164,156165],{},"BeautifulSoup",[30,156167,156168],{},"Scrapy",[564,156170,156171,156172,1829,156174,156177],{},"测试开发：",[30,156173,147470],{},[30,156175,156176],{},"selenium","、接口测试。",[564,156179,156180,156181,1829,156183,1829,156185,29638],{},"人工智能：",[30,156182,101879],{},[30,156184,147438],{},[30,156186,156187],{},"pytorch",[564,156189,156190,156191,1829,156193,1829,156196,29638],{},"运维脚本：",[30,156192,147039],{},[30,156194,156195],{},"subprocess",[30,156197,156198],{},"paramiko",[14,156200,156201],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[18,156203,156205],{"id":156204},"_1215-结课练习","12.15 结课练习",[574,156207,156208,156211,156214,156217,156220,156223,156226,156229],{},[564,156209,156210],{},"完成函数版学生管理系统。",[564,156212,156213],{},"给学生管理系统增加 JSON 持久化。",[564,156215,156216],{},"给学生管理系统增加异常处理。",[564,156218,156219],{},"把学生管理系统改成面向对象版。",[564,156221,156222],{},"使用 pyecharts 绘制学生成绩柱状图。",[564,156224,156225],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[564,156227,156228],{},"按品类统计销售额并绘制柱状图。",[564,156230,156231],{},"写一份自己的 Python 学习路线图。",[1544,156233,156234],{},"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":28,"searchDepth":51,"depth":51,"links":156236},[156237,156238,156241,156242,156243,156249,156250,156251,156252,156253,156254,156255,156256,156257,156258],{"id":152953,"depth":51,"text":152954},{"id":153003,"depth":51,"text":153004,"children":156239},[156240],{"id":153007,"depth":57,"text":153008},{"id":153046,"depth":51,"text":153047},{"id":154520,"depth":51,"text":154521},{"id":154858,"depth":51,"text":154859,"children":156244},[156245,156246,156247,156248],{"id":154862,"depth":57,"text":154863},{"id":155002,"depth":57,"text":155003},{"id":155092,"depth":57,"text":155093},{"id":155178,"depth":57,"text":155179},{"id":155219,"depth":51,"text":155220},{"id":155412,"depth":51,"text":155413},{"id":155649,"depth":51,"text":155650},{"id":155840,"depth":51,"text":155841},{"id":155882,"depth":51,"text":155883},{"id":156008,"depth":51,"text":156009},{"id":156038,"depth":51,"text":156039},{"id":156065,"depth":51,"text":156066},{"id":156118,"depth":51,"text":156119},{"id":156204,"depth":51,"text":156205},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152945,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156265,"title":156266,"body":156267,"description":24628,"extension":1557,"meta":158736,"navigation":159,"path":158737,"seo":158738,"stem":158739,"__hash__":158740},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156268,"toc":158711},[156269,156272,156276,156279,156282,156302,156305,156328,156331,156334,156356,156359,156381,156385,156388,156428,156431,156552,156556,156559,156599,156602,156626,156629,156633,156636,156650,156683,156686,156721,156724,156747,156750,156783,156786,156788,156794,156869,156872,156878,156895,156935,156939,156942,156988,156990,157028,157031,157066,157069,157104,157107,157139,157142,157161,157165,157169,157282,157284,157359,157363,157409,157412,157438,157447,157451,157454,157517,157525,157553,157557,157597,157662,157666,157669,157708,157711,157756,157759,157820,157824,157851,157854,157882,157885,157889,157893,157958,157961,157999,158002,158034,158038,158137,158141,158144,158217,158220,158268,158272,158278,158318,158321,158368,158371,158420,158424,158426,158440,158442,158623,158627,158654,158674,158681,158685,158702,158708],[10,156270,156266],{"id":156271},"_2-基础语法变量与字符串",[18,156273,156275],{"id":156274},"_21-注释","2.1 注释",[14,156277,156278],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,156280,156281],{},"单行注释：",[23,156283,156285],{"className":31631,"code":156284,"language":31633,"meta":28,"style":28},"# 这是单行注释\nprint(\"hello\")\n",[30,156286,156287,156292],{"__ignoreMap":28},[33,156288,156289],{"class":35,"line":36},[33,156290,156291],{"class":60},"# 这是单行注释\n",[33,156293,156294,156296,156298,156300],{"class":35,"line":51},[33,156295,31668],{"class":76},[33,156297,345],{"class":47},[33,156299,7231],{"class":119},[33,156301,884],{"class":47},[14,156303,156304],{},"多行说明常用三引号：",[23,156306,156308],{"className":31631,"code":156307,"language":31633,"meta":28,"style":28},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[30,156309,156310,156314,156319,156324],{"__ignoreMap":28},[33,156311,156312],{"class":35,"line":36},[33,156313,96951],{"class":119},[33,156315,156316],{"class":35,"line":51},[33,156317,156318],{"class":119},"这是多行说明。\n",[33,156320,156321],{"class":35,"line":57},[33,156322,156323],{"class":119},"常用于文件顶部说明、函数说明等。\n",[33,156325,156326],{"class":35,"line":64},[33,156327,96951],{"class":119},[14,156329,156330],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,156332,156333],{},"不好：",[23,156335,156337],{"className":31631,"code":156336,"language":31633,"meta":28,"style":28},"# age 加 1\nage = age + 1\n",[30,156338,156339,156344],{"__ignoreMap":28},[33,156340,156341],{"class":35,"line":36},[33,156342,156343],{"class":60},"# age 加 1\n",[33,156345,156346,156348,156350,156352,156354],{"class":35,"line":51},[33,156347,147799],{"class":47},[33,156349,73],{"class":39},[33,156351,16958],{"class":47},[33,156353,1271],{"class":39},[33,156355,56952],{"class":76},[14,156357,156358],{},"较好：",[23,156360,156362],{"className":31631,"code":156361,"language":31633,"meta":28,"style":28},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[30,156363,156364,156369],{"__ignoreMap":28},[33,156365,156366],{"class":35,"line":36},[33,156367,156368],{"class":60},"# 用户过完生日后，年龄增加一岁\n",[33,156370,156371,156373,156375,156377,156379],{"class":35,"line":51},[33,156372,147799],{"class":47},[33,156374,73],{"class":39},[33,156376,16958],{"class":47},[33,156378,1271],{"class":39},[33,156380,56952],{"class":76},[18,156382,156384],{"id":156383},"_22-字面量","2.2 字面量",[14,156386,156387],{},"字面量就是代码中直接写出来的数据。",[23,156389,156391],{"className":31631,"code":156390,"language":31633,"meta":28,"style":28},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[30,156392,156393,156400,156407,156414,156421],{"__ignoreMap":28},[33,156394,156395,156397],{"class":35,"line":36},[33,156396,457],{"class":76},[33,156398,156399],{"class":60},"          # 整数\n",[33,156401,156402,156404],{"class":35,"line":51},[33,156403,1674],{"class":76},[33,156405,156406],{"class":60},"         # 小数\n",[33,156408,156409,156411],{"class":35,"line":57},[33,156410,7231],{"class":119},[33,156412,156413],{"class":60},"      # 字符串\n",[33,156415,156416,156418],{"class":35,"line":64},[33,156417,32729],{"class":76},[33,156419,156420],{"class":60},"         # 布尔值\n",[33,156422,156423,156425],{"class":35,"line":83},[33,156424,96939],{"class":76},[33,156426,156427],{"class":60},"         # 空值\n",[14,156429,156430],{},"常见字面量类型：",[1756,156432,156433,156443],{},[1759,156434,156435],{},[1762,156436,156437,156439,156441],{},[1765,156438,24989],{},[1765,156440,28745],{},[1765,156442,27122],{},[1802,156444,156445,156456,156467,156478,156490,156502,156514,156527,156539],{},[1762,156446,156447,156449,156453],{},[1807,156448,40],{},[1807,156450,156451],{},[30,156452,457],{},[1807,156454,156455],{},"整数",[1762,156457,156458,156460,156464],{},[1807,156459,1666],{},[1807,156461,156462],{},[30,156463,1674],{},[1807,156465,156466],{},"浮点数",[1762,156468,156469,156471,156475],{},[1807,156470,2760],{},[1807,156472,156473],{},[30,156474,7231],{},[1807,156476,156477],{},"字符串",[1762,156479,156480,156482,156488],{},[1807,156481,2812],{},[1807,156483,156484,1829,156486],{},[30,156485,32729],{},[30,156487,35240],{},[1807,156489,67268],{},[1762,156491,156492,156495,156499],{},[1807,156493,156494],{},"NoneType",[1807,156496,156497],{},[30,156498,96939],{},[1807,156500,156501],{},"空值",[1762,156503,156504,156506,156511],{},[1807,156505,155323],{},[1807,156507,156508],{},[30,156509,156510],{},"[1, 2, 3]",[1807,156512,156513],{},"列表",[1762,156515,156516,156519,156524],{},[1807,156517,156518],{},"tuple",[1807,156520,156521],{},[30,156522,156523],{},"(1, 2, 3)",[1807,156525,156526],{},"元组",[1762,156528,156529,156531,156536],{},[1807,156530,115799],{},[1807,156532,156533],{},[30,156534,156535],{},"{\"name\": \"张三\"}",[1807,156537,156538],{},"字典",[1762,156540,156541,156544,156549],{},[1807,156542,156543],{},"set",[1807,156545,156546],{},[30,156547,156548],{},"{1, 2, 3}",[1807,156550,156551],{},"集合",[18,156553,156555],{"id":156554},"_23-变量","2.3 变量",[14,156557,156558],{},"变量是保存数据的名字。",[23,156560,156562],{"className":31631,"code":156561,"language":31633,"meta":28,"style":28},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[30,156563,156564,156572,156580,156590],{"__ignoreMap":28},[33,156565,156566,156568,156570],{"class":35,"line":36},[33,156567,147789],{"class":47},[33,156569,73],{"class":39},[33,156571,150606],{"class":119},[33,156573,156574,156576,156578],{"class":35,"line":51},[33,156575,147799],{"class":47},[33,156577,73],{"class":39},[33,156579,147804],{"class":76},[33,156581,156582,156585,156587],{"class":35,"line":57},[33,156583,156584],{"class":47},"height ",[33,156586,73],{"class":39},[33,156588,156589],{"class":76}," 1.75\n",[33,156591,156592,156595,156597],{"class":35,"line":64},[33,156593,156594],{"class":47},"is_student ",[33,156596,73],{"class":39},[33,156598,154852],{"class":76},[14,156600,156601],{},"Python 的变量不需要提前声明类型：",[23,156603,156605],{"className":31631,"code":156604,"language":31633,"meta":28,"style":28},"score = 100\nscore = \"满分\"\n",[30,156606,156607,156617],{"__ignoreMap":28},[33,156608,156609,156612,156614],{"class":35,"line":36},[33,156610,156611],{"class":47},"score ",[33,156613,73],{"class":39},[33,156615,156616],{"class":76}," 100\n",[33,156618,156619,156621,156623],{"class":35,"line":51},[33,156620,156611],{"class":47},[33,156622,73],{"class":39},[33,156624,156625],{"class":119}," \"满分\"\n",[14,156627,156628],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[18,156630,156632],{"id":156631},"_24-变量命名规则","2.4 变量命名规则",[14,156634,156635],{},"硬性规则：",[574,156637,156638,156641,156644,156647],{},[564,156639,156640],{},"只能由字母、数字、下划线组成。",[564,156642,156643],{},"不能以数字开头。",[564,156645,156646],{},"不能使用 Python 关键字。",[564,156648,156649],{},"区分大小写。",[23,156651,156653],{"className":31631,"code":156652,"language":31633,"meta":28,"style":28},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[30,156654,156655,156664,156673],{"__ignoreMap":28},[33,156656,156657,156660,156662],{"class":35,"line":36},[33,156658,156659],{"class":47},"user_name ",[33,156661,73],{"class":39},[33,156663,147794],{"class":119},[33,156665,156666,156669,156671],{"class":35,"line":51},[33,156667,156668],{"class":47},"age2 ",[33,156670,73],{"class":39},[33,156672,147804],{"class":76},[33,156674,156675,156678,156680],{"class":35,"line":57},[33,156676,156677],{"class":47},"_token ",[33,156679,73],{"class":39},[33,156681,156682],{"class":119}," \"abc\"\n",[14,156684,156685],{},"错误写法：",[23,156687,156689],{"className":31631,"code":156688,"language":31633,"meta":28,"style":28},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[30,156690,156691,156700,156712],{"__ignoreMap":28},[33,156692,156693,156696,156698],{"class":35,"line":36},[33,156694,156695],{"class":78656},"2age",[33,156697,14815],{"class":39},[33,156699,147804],{"class":76},[33,156701,156702,156704,156706,156708,156710],{"class":35,"line":51},[33,156703,132837],{"class":47},[33,156705,1199],{"class":39},[33,156707,147789],{"class":47},[33,156709,73],{"class":39},[33,156711,147794],{"class":119},[33,156713,156714,156716,156718],{"class":35,"line":57},[33,156715,15945],{"class":39},[33,156717,14815],{"class":39},[33,156719,156720],{"class":119}," \"一班\"\n",[14,156722,156723],{},"查看关键字：",[23,156725,156727],{"className":31631,"code":156726,"language":31633,"meta":28,"style":28},"import keyword\n\nprint(keyword.kwlist)\n",[30,156728,156729,156736,156740],{"__ignoreMap":28},[33,156730,156731,156733],{"class":35,"line":36},[33,156732,31645],{"class":39},[33,156734,156735],{"class":47}," keyword\n",[33,156737,156738],{"class":35,"line":51},[33,156739,160],{"emptyLinePlaceholder":159},[33,156741,156742,156744],{"class":35,"line":57},[33,156743,31668],{"class":76},[33,156745,156746],{"class":47},"(keyword.kwlist)\n",[14,156748,156749],{},"推荐命名风格：",[23,156751,156753],{"className":31631,"code":156752,"language":31633,"meta":28,"style":28},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[30,156754,156755,156764,156774],{"__ignoreMap":28},[33,156756,156757,156760,156762],{"class":35,"line":36},[33,156758,156759],{"class":47},"student_name ",[33,156761,73],{"class":39},[33,156763,150606],{"class":119},[33,156765,156766,156769,156771],{"class":35,"line":51},[33,156767,156768],{"class":47},"total_price ",[33,156770,73],{"class":39},[33,156772,156773],{"class":76}," 99.8\n",[33,156775,156776,156779,156781],{"class":35,"line":57},[33,156777,156778],{"class":47},"is_finished ",[33,156780,73],{"class":39},[33,156782,127060],{"class":76},[14,156784,156785],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[18,156787,51985],{"id":51984},[14,156789,105619,156790,156793],{},[30,156791,156792],{},"type()"," 查看数据类型：",[23,156795,156797],{"className":31631,"code":156796,"language":31633,"meta":28,"style":28},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[30,156798,156799,156813,156827,156841,156855],{"__ignoreMap":28},[33,156800,156801,156803,156805,156807,156809,156811],{"class":35,"line":36},[33,156802,31668],{"class":76},[33,156804,345],{"class":47},[33,156806,104360],{"class":76},[33,156808,345],{"class":47},[33,156810,457],{"class":76},[33,156812,31750],{"class":47},[33,156814,156815,156817,156819,156821,156823,156825],{"class":35,"line":51},[33,156816,31668],{"class":76},[33,156818,345],{"class":47},[33,156820,104360],{"class":76},[33,156822,345],{"class":47},[33,156824,1674],{"class":76},[33,156826,31750],{"class":47},[33,156828,156829,156831,156833,156835,156837,156839],{"class":35,"line":57},[33,156830,31668],{"class":76},[33,156832,345],{"class":47},[33,156834,104360],{"class":76},[33,156836,345],{"class":47},[33,156838,7231],{"class":119},[33,156840,31750],{"class":47},[33,156842,156843,156845,156847,156849,156851,156853],{"class":35,"line":64},[33,156844,31668],{"class":76},[33,156846,345],{"class":47},[33,156848,104360],{"class":76},[33,156850,345],{"class":47},[33,156852,32729],{"class":76},[33,156854,31750],{"class":47},[33,156856,156857,156859,156861,156863,156865,156867],{"class":35,"line":83},[33,156858,31668],{"class":76},[33,156860,345],{"class":47},[33,156862,104360],{"class":76},[33,156864,345],{"class":47},[33,156866,96939],{"class":76},[33,156868,31750],{"class":47},[14,156870,156871],{},"输出类似：",[23,156873,156876],{"className":156874,"code":156875,"language":6578,"meta":28},[6576],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[30,156877,156875],{"__ignoreMap":28},[14,156879,10276,156880,108536,156882,156884,156885,156887,156888,22751,156890,156887,156892,156894],{},[30,156881,2812],{},[30,156883,40],{}," 的子类，",[30,156886,32729],{}," 可以当作 ",[30,156889,701],{},[30,156891,35240],{},[30,156893,766],{},"，但业务代码中不要滥用。",[23,156896,156898],{"className":31631,"code":156897,"language":31633,"meta":28,"style":28},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[30,156899,156900,156918],{"__ignoreMap":28},[33,156901,156902,156904,156906,156908,156910,156912,156915],{"class":35,"line":36},[33,156903,31668],{"class":76},[33,156905,345],{"class":47},[33,156907,32729],{"class":76},[33,156909,46819],{"class":39},[33,156911,26371],{"class":76},[33,156913,156914],{"class":47},")   ",[33,156916,156917],{"class":60},"# 2\n",[33,156919,156920,156922,156924,156926,156928,156930,156932],{"class":35,"line":51},[33,156921,31668],{"class":76},[33,156923,345],{"class":47},[33,156925,35240],{"class":76},[33,156927,46819],{"class":39},[33,156929,26371],{"class":76},[33,156931,47061],{"class":47},[33,156933,156934],{"class":60},"# 1\n",[18,156936,156938],{"id":156937},"_26-类型转换","2.6 类型转换",[14,156940,156941],{},"常用转换函数：",[23,156943,156945],{"className":31631,"code":156944,"language":31633,"meta":28,"style":28},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[30,156946,156947,156957,156968,156978],{"__ignoreMap":28},[33,156948,156949,156951,156953,156955],{"class":35,"line":36},[33,156950,40],{"class":76},[33,156952,345],{"class":47},[33,156954,55569],{"class":119},[33,156956,884],{"class":47},[33,156958,156959,156961,156963,156966],{"class":35,"line":51},[33,156960,1666],{"class":76},[33,156962,345],{"class":47},[33,156964,156965],{"class":119},"\"3.14\"",[33,156967,884],{"class":47},[33,156969,156970,156972,156974,156976],{"class":35,"line":57},[33,156971,2760],{"class":76},[33,156973,345],{"class":47},[33,156975,457],{"class":76},[33,156977,884],{"class":47},[33,156979,156980,156982,156984,156986],{"class":35,"line":64},[33,156981,2812],{"class":76},[33,156983,345],{"class":47},[33,156985,701],{"class":76},[33,156987,884],{"class":47},[14,156989,16386],{},[23,156991,156993],{"className":31631,"code":156992,"language":31633,"meta":28,"style":28},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[30,156994,156995,157004,157015],{"__ignoreMap":28},[33,156996,156997,156999,157001],{"class":35,"line":36},[33,156998,147799],{"class":47},[33,157000,73],{"class":39},[33,157002,157003],{"class":119}," \"18\"\n",[33,157005,157006,157008,157010,157012],{"class":35,"line":51},[33,157007,147799],{"class":47},[33,157009,73],{"class":39},[33,157011,591],{"class":76},[33,157013,157014],{"class":47},"(age)\n",[33,157016,157017,157019,157022,157024,157026],{"class":35,"line":57},[33,157018,31668],{"class":76},[33,157020,157021],{"class":47},"(age ",[33,157023,1271],{"class":39},[33,157025,26371],{"class":76},[33,157027,884],{"class":47},[14,157029,157030],{},"输入得到的内容永远是字符串：",[23,157032,157034],{"className":31631,"code":157033,"language":31633,"meta":28,"style":28},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[30,157035,157036,157052],{"__ignoreMap":28},[33,157037,157038,157041,157043,157045,157047,157050],{"class":35,"line":36},[33,157039,157040],{"class":47},"num ",[33,157042,73],{"class":39},[33,157044,61858],{"class":76},[33,157046,345],{"class":47},[33,157048,157049],{"class":119},"\"请输入数字:\"",[33,157051,884],{"class":47},[33,157053,157054,157056,157058,157060,157063],{"class":35,"line":51},[33,157055,31668],{"class":76},[33,157057,345],{"class":47},[33,157059,104360],{"class":76},[33,157061,157062],{"class":47},"(num))  ",[33,157064,157065],{"class":60},"# str\n",[14,157067,157068],{},"如果要做数学运算，必须转换：",[23,157070,157072],{"className":31631,"code":157071,"language":31633,"meta":28,"style":28},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[30,157073,157074,157092],{"__ignoreMap":28},[33,157075,157076,157078,157080,157082,157084,157086,157088,157090],{"class":35,"line":36},[33,157077,157040],{"class":47},[33,157079,73],{"class":39},[33,157081,591],{"class":76},[33,157083,345],{"class":47},[33,157085,55074],{"class":76},[33,157087,345],{"class":47},[33,157089,157049],{"class":119},[33,157091,31750],{"class":47},[33,157093,157094,157096,157098,157100,157102],{"class":35,"line":51},[33,157095,31668],{"class":76},[33,157097,46872],{"class":47},[33,157099,1271],{"class":39},[33,157101,3461],{"class":76},[33,157103,884],{"class":47},[14,157105,157106],{},"常见错误：",[23,157108,157110],{"className":31631,"code":157109,"language":31633,"meta":28,"style":28},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[30,157111,157112,157125],{"__ignoreMap":28},[33,157113,157114,157116,157118,157120,157122],{"class":35,"line":36},[33,157115,40],{"class":76},[33,157117,345],{"class":47},[33,157119,156965],{"class":119},[33,157121,156914],{"class":47},[33,157123,157124],{"class":60},"# 错误\n",[33,157126,157127,157129,157131,157134,157137],{"class":35,"line":51},[33,157128,40],{"class":76},[33,157130,345],{"class":47},[33,157132,157133],{"class":119},"\"abc\"",[33,157135,157136],{"class":47},")    ",[33,157138,157124],{"class":60},[14,157140,157141],{},"正确写法：",[23,157143,157145],{"className":31631,"code":157144,"language":31633,"meta":28,"style":28},"num = float(\"3.14\")\n",[30,157146,157147],{"__ignoreMap":28},[33,157148,157149,157151,157153,157155,157157,157159],{"class":35,"line":36},[33,157150,157040],{"class":47},[33,157152,73],{"class":39},[33,157154,111050],{"class":76},[33,157156,345],{"class":47},[33,157158,156965],{"class":119},[33,157160,884],{"class":47},[18,157162,157164],{"id":157163},"_27-运算符","2.7 运算符",[1599,157166,157168],{"id":157167},"_271-算术运算符","2.7.1 算术运算符",[1756,157170,157171,157182],{},[1759,157172,157173],{},[1762,157174,157175,157178,157180],{},[1765,157176,157177],{},"运算符",[1765,157179,27122],{},[1765,157181,28745],{},[1802,157183,157184,157198,157212,157226,157240,157254,157268],{},[1762,157185,157186,157190,157193],{},[1807,157187,157188],{},[30,157189,1271],{},[1807,157191,157192],{},"加法",[1807,157194,157195],{},[30,157196,157197],{},"1 + 2",[1762,157199,157200,157204,157207],{},[1807,157201,157202],{},[30,157203,1199],{},[1807,157205,157206],{},"减法",[1807,157208,157209],{},[30,157210,157211],{},"5 - 3",[1762,157213,157214,157218,157221],{},[1807,157215,157216],{},[30,157217,2057],{},[1807,157219,157220],{},"乘法",[1807,157222,157223],{},[30,157224,157225],{},"2 * 3",[1762,157227,157228,157232,157235],{},[1807,157229,157230],{},[30,157231,2184],{},[1807,157233,157234],{},"除法，结果是浮点数",[1807,157236,157237],{},[30,157238,157239],{},"5 \u002F 2",[1762,157241,157242,157246,157249],{},[1807,157243,157244],{},[30,157245,34582],{},[1807,157247,157248],{},"整除",[1807,157250,157251],{},[30,157252,157253],{},"5 \u002F\u002F 2",[1762,157255,157256,157260,157263],{},[1807,157257,157258],{},[30,157259,1939],{},[1807,157261,157262],{},"取余",[1807,157264,157265],{},[30,157266,157267],{},"5 % 2",[1762,157269,157270,157274,157277],{},[1807,157271,157272],{},[30,157273,11912],{},[1807,157275,157276],{},"幂运算",[1807,157278,157279],{},[30,157280,157281],{},"2 ** 3",[14,157283,16386],{},[23,157285,157287],{"className":31631,"code":157286,"language":31633,"meta":28,"style":28},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[30,157288,157289,157307,157324,157341],{"__ignoreMap":28},[33,157290,157291,157293,157295,157297,157300,157302,157304],{"class":35,"line":36},[33,157292,31668],{"class":76},[33,157294,345],{"class":47},[33,157296,722],{"class":76},[33,157298,157299],{"class":39}," \u002F",[33,157301,16006],{"class":76},[33,157303,156914],{"class":47},[33,157305,157306],{"class":60},"# 2.5\n",[33,157308,157309,157311,157313,157315,157318,157320,157322],{"class":35,"line":51},[33,157310,31668],{"class":76},[33,157312,345],{"class":47},[33,157314,722],{"class":76},[33,157316,157317],{"class":39}," \u002F\u002F",[33,157319,16006],{"class":76},[33,157321,47061],{"class":47},[33,157323,156917],{"class":60},[33,157325,157326,157328,157330,157332,157335,157337,157339],{"class":35,"line":57},[33,157327,31668],{"class":76},[33,157329,345],{"class":47},[33,157331,722],{"class":76},[33,157333,157334],{"class":39}," %",[33,157336,16006],{"class":76},[33,157338,156914],{"class":47},[33,157340,156934],{"class":60},[33,157342,157343,157345,157347,157349,157352,157354,157356],{"class":35,"line":64},[33,157344,31668],{"class":76},[33,157346,345],{"class":47},[33,157348,707],{"class":76},[33,157350,157351],{"class":39}," **",[33,157353,79323],{"class":76},[33,157355,47061],{"class":47},[33,157357,157358],{"class":60},"# 8\n",[1599,157360,157362],{"id":157361},"_272-赋值运算符","2.7.2 赋值运算符",[23,157364,157366],{"className":31631,"code":157365,"language":31633,"meta":28,"style":28},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[30,157367,157368,157376,157384,157392,157400],{"__ignoreMap":28},[33,157369,157370,157372,157374],{"class":35,"line":36},[33,157371,157040],{"class":47},[33,157373,73],{"class":39},[33,157375,59681],{"class":76},[33,157377,157378,157380,157382],{"class":35,"line":51},[33,157379,157040],{"class":47},[33,157381,10728],{"class":39},[33,157383,55680],{"class":76},[33,157385,157386,157388,157390],{"class":35,"line":57},[33,157387,157040],{"class":47},[33,157389,151505],{"class":39},[33,157391,48976],{"class":76},[33,157393,157394,157396,157398],{"class":35,"line":64},[33,157395,157040],{"class":47},[33,157397,138401],{"class":39},[33,157399,121289],{"class":76},[33,157401,157402,157404,157407],{"class":35,"line":83},[33,157403,157040],{"class":47},[33,157405,157406],{"class":39},"\u002F=",[33,157408,48976],{"class":76},[14,157410,157411],{},"等价关系：",[23,157413,157415],{"className":31631,"code":157414,"language":31633,"meta":28,"style":28},"num += 1\nnum = num + 1\n",[30,157416,157417,157425],{"__ignoreMap":28},[33,157418,157419,157421,157423],{"class":35,"line":36},[33,157420,157040],{"class":47},[33,157422,10728],{"class":39},[33,157424,56952],{"class":76},[33,157426,157427,157429,157431,157434,157436],{"class":35,"line":51},[33,157428,157040],{"class":47},[33,157430,73],{"class":39},[33,157432,157433],{"class":47}," num ",[33,157435,1271],{"class":39},[33,157437,56952],{"class":76},[14,157439,157440,157441,102271,157444,29638],{},"Python 没有 ",[30,157442,157443],{},"num++",[30,157445,157446],{},"num--",[1599,157448,157450],{"id":157449},"_273-比较运算符","2.7.3 比较运算符",[14,157452,157453],{},"比较运算结果是布尔值。",[23,157455,157457],{"className":31631,"code":157456,"language":31633,"meta":28,"style":28},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[30,157458,157459,157473,157488,157502],{"__ignoreMap":28},[33,157460,157461,157463,157465,157467,157469,157471],{"class":35,"line":36},[33,157462,31668],{"class":76},[33,157464,345],{"class":47},[33,157466,77],{"class":76},[33,157468,27475],{"class":39},[33,157470,3571],{"class":76},[33,157472,884],{"class":47},[33,157474,157475,157477,157479,157481,157484,157486],{"class":35,"line":51},[33,157476,31668],{"class":76},[33,157478,345],{"class":47},[33,157480,77],{"class":76},[33,157482,157483],{"class":39}," >=",[33,157485,3461],{"class":76},[33,157487,884],{"class":47},[33,157489,157490,157492,157494,157496,157498,157500],{"class":35,"line":57},[33,157491,31668],{"class":76},[33,157493,345],{"class":47},[33,157495,77],{"class":76},[33,157497,102812],{"class":39},[33,157499,3506],{"class":76},[33,157501,884],{"class":47},[33,157503,157504,157506,157508,157510,157513,157515],{"class":35,"line":64},[33,157505,31668],{"class":76},[33,157507,345],{"class":47},[33,157509,77],{"class":76},[33,157511,157512],{"class":39}," !=",[33,157514,3506],{"class":76},[33,157516,884],{"class":47},[14,157518,157519,157520,157522,157523,29638],{},"注意：判断相等用 ",[30,157521,4359],{},"，赋值用 ",[30,157524,73],{},[23,157526,157528],{"className":31631,"code":157527,"language":31633,"meta":28,"style":28},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[30,157529,157530,157542],{"__ignoreMap":28},[33,157531,157532,157534,157536,157539],{"class":35,"line":36},[33,157533,147799],{"class":47},[33,157535,73],{"class":39},[33,157537,157538],{"class":76}," 18",[33,157540,157541],{"class":60},"       # 赋值\n",[33,157543,157544,157546,157548,157550],{"class":35,"line":51},[33,157545,147799],{"class":47},[33,157547,4359],{"class":39},[33,157549,157538],{"class":76},[33,157551,157552],{"class":60},"      # 判断是否相等\n",[1599,157554,157556],{"id":157555},"_274-逻辑运算符","2.7.4 逻辑运算符",[1756,157558,157559,157567],{},[1759,157560,157561],{},[1762,157562,157563,157565],{},[1765,157564,157177],{},[1765,157566,27122],{},[1802,157568,157569,157578,157587],{},[1762,157570,157571,157575],{},[1807,157572,157573],{},[30,157574,31715],{},[1807,157576,157577],{},"并且",[1762,157579,157580,157584],{},[1807,157581,157582],{},[30,157583,116343],{},[1807,157585,157586],{},"或者",[1762,157588,157589,157594],{},[1807,157590,157591],{},[30,157592,157593],{},"not",[1807,157595,157596],{},"取反",[23,157598,157600],{"className":31631,"code":157599,"language":31633,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[30,157601,157602,157610,157619,157623,157638,157652],{"__ignoreMap":28},[33,157603,157604,157606,157608],{"class":35,"line":36},[33,157605,147799],{"class":47},[33,157607,73],{"class":39},[33,157609,89318],{"class":76},[33,157611,157612,157615,157617],{"class":35,"line":51},[33,157613,157614],{"class":47},"has_ticket ",[33,157616,73],{"class":39},[33,157618,154852],{"class":76},[33,157620,157621],{"class":35,"line":57},[33,157622,160],{"emptyLinePlaceholder":159},[33,157624,157625,157627,157629,157631,157633,157635],{"class":35,"line":64},[33,157626,31668],{"class":76},[33,157628,157021],{"class":47},[33,157630,3151],{"class":39},[33,157632,157538],{"class":76},[33,157634,121682],{"class":39},[33,157636,157637],{"class":47}," has_ticket)\n",[33,157639,157640,157642,157644,157646,157648,157650],{"class":35,"line":83},[33,157641,31668],{"class":76},[33,157643,157021],{"class":47},[33,157645,875],{"class":39},[33,157647,157538],{"class":76},[33,157649,115454],{"class":39},[33,157651,157637],{"class":47},[33,157653,157654,157656,157658,157660],{"class":35,"line":89},[33,157655,31668],{"class":76},[33,157657,345],{"class":47},[33,157659,157593],{"class":39},[33,157661,157637],{"class":47},[18,157663,157665],{"id":157664},"_28-字符串定义","2.8 字符串定义",[14,157667,157668],{},"三种常见写法：",[23,157670,157672],{"className":31631,"code":157671,"language":31633,"meta":28,"style":28},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[30,157673,157674,157684,157693,157703],{"__ignoreMap":28},[33,157675,157676,157679,157681],{"class":35,"line":36},[33,157677,157678],{"class":47},"name1 ",[33,157680,73],{"class":39},[33,157682,157683],{"class":119}," '小明'\n",[33,157685,157686,157689,157691],{"class":35,"line":51},[33,157687,157688],{"class":47},"name2 ",[33,157690,73],{"class":39},[33,157692,150606],{"class":119},[33,157694,157695,157698,157700],{"class":35,"line":57},[33,157696,157697],{"class":47},"text ",[33,157699,73],{"class":39},[33,157701,157702],{"class":119}," \"\"\"这是多行字符串\n",[33,157704,157705],{"class":35,"line":64},[33,157706,157707],{"class":119},"可以换行\"\"\"\n",[14,157709,157710],{},"字符串中包含引号：",[23,157712,157714],{"className":31631,"code":157713,"language":31633,"meta":28,"style":28},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[30,157715,157716,157726,157736],{"__ignoreMap":28},[33,157717,157718,157721,157723],{"class":35,"line":36},[33,157719,157720],{"class":47},"msg ",[33,157722,73],{"class":39},[33,157724,157725],{"class":119}," \"他说:'你好'\"\n",[33,157727,157728,157731,157733],{"class":35,"line":51},[33,157729,157730],{"class":47},"msg2 ",[33,157732,73],{"class":39},[33,157734,157735],{"class":119}," '他说:\"你好\"'\n",[33,157737,157738,157741,157743,157746,157749,157752,157754],{"class":35,"line":57},[33,157739,157740],{"class":47},"msg3 ",[33,157742,73],{"class":39},[33,157744,157745],{"class":119}," \"他说:",[33,157747,157748],{"class":76},"\\\"",[33,157750,157751],{"class":119},"你好",[33,157753,157748],{"class":76},[33,157755,26386],{"class":119},[14,157757,157758],{},"常见转义字符：",[1756,157760,157761,157770],{},[1759,157762,157763],{},[1762,157764,157765,157768],{},[1765,157766,157767],{},"写法",[1765,157769,101953],{},[1802,157771,157772,157782,157791,157801,157810],{},[1762,157773,157774,157779],{},[1807,157775,157776],{},[30,157777,157778],{},"\\n",[1807,157780,157781],{},"换行",[1762,157783,157784,157788],{},[1807,157785,157786],{},[30,157787,2693],{},[1807,157789,157790],{},"制表符",[1762,157792,157793,157798],{},[1807,157794,157795],{},[30,157796,157797],{},"\\\\",[1807,157799,157800],{},"反斜杠",[1762,157802,157803,157807],{},[1807,157804,157805],{},[30,157806,157748],{},[1807,157808,157809],{},"双引号",[1762,157811,157812,157817],{},[1807,157813,157814],{},[30,157815,157816],{},"\\'",[1807,157818,157819],{},"单引号",[18,157821,157823],{"id":157822},"_29-字符串拼接","2.9 字符串拼接",[23,157825,157827],{"className":31631,"code":157826,"language":31633,"meta":28,"style":28},"name = \"小明\"\nprint(\"你好，\" + name)\n",[30,157828,157829,157837],{"__ignoreMap":28},[33,157830,157831,157833,157835],{"class":35,"line":36},[33,157832,147789],{"class":47},[33,157834,73],{"class":39},[33,157836,150606],{"class":119},[33,157838,157839,157841,157843,157846,157848],{"class":35,"line":51},[33,157840,31668],{"class":76},[33,157842,345],{"class":47},[33,157844,157845],{"class":119},"\"你好，\"",[33,157847,46819],{"class":39},[33,157849,157850],{"class":47}," name)\n",[14,157852,157853],{},"字符串只能和字符串拼接：",[23,157855,157857],{"className":31631,"code":157856,"language":31633,"meta":28,"style":28},"age = 18\nprint(\"年龄:\" + str(age))\n",[30,157858,157859,157867],{"__ignoreMap":28},[33,157860,157861,157863,157865],{"class":35,"line":36},[33,157862,147799],{"class":47},[33,157864,73],{"class":39},[33,157866,147804],{"class":76},[33,157868,157869,157871,157873,157875,157877,157879],{"class":35,"line":51},[33,157870,31668],{"class":76},[33,157872,345],{"class":47},[33,157874,147770],{"class":119},[33,157876,46819],{"class":39},[33,157878,75172],{"class":76},[33,157880,157881],{"class":47},"(age))\n",[14,157883,157884],{},"更推荐使用格式化字符串。",[18,157886,157888],{"id":157887},"_210-字符串格式化","2.10 字符串格式化",[1599,157890,157892],{"id":157891},"_2101-百分号格式化","2.10.1 百分号格式化",[23,157894,157896],{"className":31631,"code":157895,"language":31633,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[30,157897,157898,157906,157914,157923,157927],{"__ignoreMap":28},[33,157899,157900,157902,157904],{"class":35,"line":36},[33,157901,147789],{"class":47},[33,157903,73],{"class":39},[33,157905,150606],{"class":119},[33,157907,157908,157910,157912],{"class":35,"line":51},[33,157909,147799],{"class":47},[33,157911,73],{"class":39},[33,157913,147804],{"class":76},[33,157915,157916,157918,157920],{"class":35,"line":57},[33,157917,156611],{"class":47},[33,157919,73],{"class":39},[33,157921,157922],{"class":76}," 95.5\n",[33,157924,157925],{"class":35,"line":64},[33,157926,160],{"emptyLinePlaceholder":159},[33,157928,157929,157931,157933,157936,157939,157942,157945,157948,157951,157953,157955],{"class":35,"line":83},[33,157930,31668],{"class":76},[33,157932,345],{"class":47},[33,157934,157935],{"class":119},"\"姓名:",[33,157937,157938],{"class":76},"%s",[33,157940,157941],{"class":119}," 年龄:",[33,157943,157944],{"class":76},"%d",[33,157946,157947],{"class":119}," 分数:",[33,157949,157950],{"class":76},"%.1f",[33,157952,1866],{"class":119},[33,157954,157334],{"class":39},[33,157956,157957],{"class":47}," (name, age, score))\n",[14,157959,157960],{},"常用占位符：",[1756,157962,157963,157972],{},[1759,157964,157965],{},[1762,157966,157967,157970],{},[1765,157968,157969],{},"占位符",[1765,157971,27122],{},[1802,157973,157974,157982,157990],{},[1762,157975,157976,157980],{},[1807,157977,157978],{},[30,157979,157938],{},[1807,157981,156477],{},[1762,157983,157984,157988],{},[1807,157985,157986],{},[30,157987,157944],{},[1807,157989,156455],{},[1762,157991,157992,157997],{},[1807,157993,157994],{},[30,157995,157996],{},"%f",[1807,157998,156466],{},[14,158000,158001],{},"精度控制：",[23,158003,158005],{"className":31631,"code":158004,"language":31633,"meta":28,"style":28},"price = 12.3456\nprint(\"%.2f\" % price)\n",[30,158006,158007,158016],{"__ignoreMap":28},[33,158008,158009,158011,158013],{"class":35,"line":36},[33,158010,147934],{"class":47},[33,158012,73],{"class":39},[33,158014,158015],{"class":76}," 12.3456\n",[33,158017,158018,158020,158022,158024,158027,158029,158031],{"class":35,"line":51},[33,158019,31668],{"class":76},[33,158021,345],{"class":47},[33,158023,1866],{"class":119},[33,158025,158026],{"class":76},"%.2f",[33,158028,1866],{"class":119},[33,158030,157334],{"class":39},[33,158032,158033],{"class":47}," price)\n",[1599,158035,158037],{"id":158036},"_2102-format方法","2.10.2 format方法",[23,158039,158041],{"className":31631,"code":158040,"language":31633,"meta":28,"style":28},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[30,158042,158043,158051,158059,158063,158082,158102],{"__ignoreMap":28},[33,158044,158045,158047,158049],{"class":35,"line":36},[33,158046,147789],{"class":47},[33,158048,73],{"class":39},[33,158050,150606],{"class":119},[33,158052,158053,158055,158057],{"class":35,"line":51},[33,158054,147799],{"class":47},[33,158056,73],{"class":39},[33,158058,147804],{"class":76},[33,158060,158061],{"class":35,"line":57},[33,158062,160],{"emptyLinePlaceholder":159},[33,158064,158065,158067,158069,158071,158073,158075,158077,158079],{"class":35,"line":64},[33,158066,31668],{"class":76},[33,158068,345],{"class":47},[33,158070,157935],{"class":119},[33,158072,33712],{"class":76},[33,158074,157941],{"class":119},[33,158076,33712],{"class":76},[33,158078,1866],{"class":119},[33,158080,158081],{"class":47},".format(name, age))\n",[33,158083,158084,158086,158088,158090,158093,158095,158098,158100],{"class":35,"line":83},[33,158085,31668],{"class":76},[33,158087,345],{"class":47},[33,158089,157935],{"class":119},[33,158091,158092],{"class":76},"{0}",[33,158094,157941],{"class":119},[33,158096,158097],{"class":76},"{1}",[33,158099,1866],{"class":119},[33,158101,158081],{"class":47},[33,158103,158104,158106,158108,158110,158113,158115,158118,158120,158123,158125,158127,158130,158132,158134],{"class":35,"line":89},[33,158105,31668],{"class":76},[33,158107,345],{"class":47},[33,158109,157935],{"class":119},[33,158111,158112],{"class":76},"{name}",[33,158114,157941],{"class":119},[33,158116,158117],{"class":76},"{age}",[33,158119,1866],{"class":119},[33,158121,158122],{"class":47},".format(",[33,158124,81063],{"class":955},[33,158126,73],{"class":39},[33,158128,158129],{"class":47},"name, ",[33,158131,71474],{"class":955},[33,158133,73],{"class":39},[33,158135,158136],{"class":47},"age))\n",[1599,158138,158140],{"id":158139},"_2103-f-string","2.10.3 f-string",[14,158142,158143],{},"推荐写法：",[23,158145,158147],{"className":31631,"code":158146,"language":31633,"meta":28,"style":28},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[30,158148,158149,158157,158165,158173,158177],{"__ignoreMap":28},[33,158150,158151,158153,158155],{"class":35,"line":36},[33,158152,147789],{"class":47},[33,158154,73],{"class":39},[33,158156,150606],{"class":119},[33,158158,158159,158161,158163],{"class":35,"line":51},[33,158160,147799],{"class":47},[33,158162,73],{"class":39},[33,158164,147804],{"class":76},[33,158166,158167,158169,158171],{"class":35,"line":57},[33,158168,156611],{"class":47},[33,158170,73],{"class":39},[33,158172,157922],{"class":76},[33,158174,158175],{"class":35,"line":64},[33,158176,160],{"emptyLinePlaceholder":159},[33,158178,158179,158181,158183,158185,158187,158189,158191,158193,158195,158197,158199,158201,158203,158205,158208,158211,158213,158215],{"class":35,"line":83},[33,158180,31668],{"class":76},[33,158182,345],{"class":47},[33,158184,1677],{"class":39},[33,158186,157935],{"class":119},[33,158188,698],{"class":76},[33,158190,81063],{"class":47},[33,158192,2542],{"class":76},[33,158194,157941],{"class":119},[33,158196,698],{"class":76},[33,158198,71474],{"class":47},[33,158200,2542],{"class":76},[33,158202,157947],{"class":119},[33,158204,698],{"class":76},[33,158206,158207],{"class":47},"score",[33,158209,158210],{"class":39},":.1f",[33,158212,2542],{"class":76},[33,158214,1866],{"class":119},[33,158216,884],{"class":47},[14,158218,158219],{},"表达式也可以放进去：",[23,158221,158223],{"className":31631,"code":158222,"language":31633,"meta":28,"style":28},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[30,158224,158225,158233,158241],{"__ignoreMap":28},[33,158226,158227,158229,158231],{"class":35,"line":36},[33,158228,147934],{"class":47},[33,158230,73],{"class":39},[33,158232,147939],{"class":76},[33,158234,158235,158237,158239],{"class":35,"line":51},[33,158236,147944],{"class":47},[33,158238,73],{"class":39},[33,158240,55680],{"class":76},[33,158242,158243,158245,158247,158249,158252,158254,158256,158258,158261,158263,158266],{"class":35,"line":57},[33,158244,31668],{"class":76},[33,158246,345],{"class":47},[33,158248,1677],{"class":39},[33,158250,158251],{"class":119},"\"总价:",[33,158253,698],{"class":76},[33,158255,147934],{"class":47},[33,158257,2057],{"class":39},[33,158259,158260],{"class":47}," count",[33,158262,2542],{"class":76},[33,158264,158265],{"class":119},"元\"",[33,158267,884],{"class":47},[18,158269,158271],{"id":158270},"_211-input输入","2.11 input输入",[14,158273,158274,158277],{},[30,158275,158276],{},"input()"," 会暂停程序，等待用户输入。",[23,158279,158281],{"className":31631,"code":158280,"language":31633,"meta":28,"style":28},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[30,158282,158283,158297],{"__ignoreMap":28},[33,158284,158285,158287,158289,158291,158293,158295],{"class":35,"line":36},[33,158286,147789],{"class":47},[33,158288,73],{"class":39},[33,158290,61858],{"class":76},[33,158292,345],{"class":47},[33,158294,153632],{"class":119},[33,158296,884],{"class":47},[33,158298,158299,158301,158303,158305,158308,158310,158312,158314,158316],{"class":35,"line":51},[33,158300,31668],{"class":76},[33,158302,345],{"class":47},[33,158304,1677],{"class":39},[33,158306,158307],{"class":119},"\"你好，",[33,158309,698],{"class":76},[33,158311,81063],{"class":47},[33,158313,2542],{"class":76},[33,158315,1866],{"class":119},[33,158317,884],{"class":47},[14,158319,158320],{},"输入整数：",[23,158322,158324],{"className":31631,"code":158323,"language":31633,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[30,158325,158326,158344],{"__ignoreMap":28},[33,158327,158328,158330,158332,158334,158336,158338,158340,158342],{"class":35,"line":36},[33,158329,147799],{"class":47},[33,158331,73],{"class":39},[33,158333,591],{"class":76},[33,158335,345],{"class":47},[33,158337,55074],{"class":76},[33,158339,345],{"class":47},[33,158341,153647],{"class":119},[33,158343,31750],{"class":47},[33,158345,158346,158348,158350,158352,158355,158357,158359,158361,158364,158366],{"class":35,"line":51},[33,158347,31668],{"class":76},[33,158349,345],{"class":47},[33,158351,1677],{"class":39},[33,158353,158354],{"class":119},"\"明年你",[33,158356,698],{"class":76},[33,158358,147799],{"class":47},[33,158360,1271],{"class":39},[33,158362,158363],{"class":76}," 1}",[33,158365,150657],{"class":119},[33,158367,884],{"class":47},[14,158369,158370],{},"输入小数：",[23,158372,158374],{"className":31631,"code":158373,"language":31633,"meta":28,"style":28},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[30,158375,158376,158395],{"__ignoreMap":28},[33,158377,158378,158380,158382,158384,158386,158388,158390,158393],{"class":35,"line":36},[33,158379,156584],{"class":47},[33,158381,73],{"class":39},[33,158383,111050],{"class":76},[33,158385,345],{"class":47},[33,158387,55074],{"class":76},[33,158389,345],{"class":47},[33,158391,158392],{"class":119},"\"请输入身高:\"",[33,158394,31750],{"class":47},[33,158396,158397,158399,158401,158403,158406,158408,158410,158413,158415,158418],{"class":35,"line":51},[33,158398,31668],{"class":76},[33,158400,345],{"class":47},[33,158402,1677],{"class":39},[33,158404,158405],{"class":119},"\"身高:",[33,158407,698],{"class":76},[33,158409,26234],{"class":47},[33,158411,158412],{"class":39},":.2f",[33,158414,2542],{"class":76},[33,158416,158417],{"class":119},"米\"",[33,158419,884],{"class":47},[18,158421,158423],{"id":158422},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,158425,124545],{},[574,158427,158428,158431,158434,158437],{},[564,158429,158430],{},"输入商品单价。",[564,158432,158433],{},"输入购买数量。",[564,158435,158436],{},"输入折扣，例如 0.8 表示八折。",[564,158438,158439],{},"输出最终金额，保留两位小数。",[14,158441,11286],{},[23,158443,158445],{"className":31631,"code":158444,"language":31633,"meta":28,"style":28},"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",[30,158446,158447,158466,158485,158505,158509,158529,158533,158556,158577,158599],{"__ignoreMap":28},[33,158448,158449,158451,158453,158455,158457,158459,158461,158464],{"class":35,"line":36},[33,158450,147934],{"class":47},[33,158452,73],{"class":39},[33,158454,111050],{"class":76},[33,158456,345],{"class":47},[33,158458,55074],{"class":76},[33,158460,345],{"class":47},[33,158462,158463],{"class":119},"\"请输入商品单价:\"",[33,158465,31750],{"class":47},[33,158467,158468,158470,158472,158474,158476,158478,158480,158483],{"class":35,"line":51},[33,158469,147944],{"class":47},[33,158471,73],{"class":39},[33,158473,591],{"class":76},[33,158475,345],{"class":47},[33,158477,55074],{"class":76},[33,158479,345],{"class":47},[33,158481,158482],{"class":119},"\"请输入购买数量:\"",[33,158484,31750],{"class":47},[33,158486,158487,158490,158492,158494,158496,158498,158500,158503],{"class":35,"line":57},[33,158488,158489],{"class":47},"discount ",[33,158491,73],{"class":39},[33,158493,111050],{"class":76},[33,158495,345],{"class":47},[33,158497,55074],{"class":76},[33,158499,345],{"class":47},[33,158501,158502],{"class":119},"\"请输入折扣:\"",[33,158504,31750],{"class":47},[33,158506,158507],{"class":35,"line":64},[33,158508,160],{"emptyLinePlaceholder":159},[33,158510,158511,158514,158516,158519,158521,158524,158526],{"class":35,"line":83},[33,158512,158513],{"class":47},"total ",[33,158515,73],{"class":39},[33,158517,158518],{"class":47}," price ",[33,158520,2057],{"class":39},[33,158522,158523],{"class":47}," count ",[33,158525,2057],{"class":39},[33,158527,158528],{"class":47}," discount\n",[33,158530,158531],{"class":35,"line":89},[33,158532,160],{"emptyLinePlaceholder":159},[33,158534,158535,158537,158539,158541,158544,158546,158548,158550,158552,158554],{"class":35,"line":98},[33,158536,31668],{"class":76},[33,158538,345],{"class":47},[33,158540,1677],{"class":39},[33,158542,158543],{"class":119},"\"商品单价:",[33,158545,698],{"class":76},[33,158547,81068],{"class":47},[33,158549,158412],{"class":39},[33,158551,2542],{"class":76},[33,158553,1866],{"class":119},[33,158555,884],{"class":47},[33,158557,158558,158560,158562,158564,158567,158569,158571,158573,158575],{"class":35,"line":110},[33,158559,31668],{"class":76},[33,158561,345],{"class":47},[33,158563,1677],{"class":39},[33,158565,158566],{"class":119},"\"购买数量:",[33,158568,698],{"class":76},[33,158570,85687],{"class":47},[33,158572,2542],{"class":76},[33,158574,1866],{"class":119},[33,158576,884],{"class":47},[33,158578,158579,158581,158583,158585,158588,158590,158593,158595,158597],{"class":35,"line":134},[33,158580,31668],{"class":76},[33,158582,345],{"class":47},[33,158584,1677],{"class":39},[33,158586,158587],{"class":119},"\"折扣:",[33,158589,698],{"class":76},[33,158591,158592],{"class":47},"discount",[33,158594,2542],{"class":76},[33,158596,1866],{"class":119},[33,158598,884],{"class":47},[33,158600,158601,158603,158605,158607,158610,158612,158615,158617,158619,158621],{"class":35,"line":156},[33,158602,31668],{"class":76},[33,158604,345],{"class":47},[33,158606,1677],{"class":39},[33,158608,158609],{"class":119},"\"应付金额:",[33,158611,698],{"class":76},[33,158613,158614],{"class":47},"total",[33,158616,158412],{"class":39},[33,158618,2542],{"class":76},[33,158620,158265],{"class":119},[33,158622,884],{"class":47},[18,158624,158626],{"id":158625},"_213-易错点","2.13 易错点",[574,158628,158629,158634,158640,158648,158651],{},[564,158630,158631,158633],{},[30,158632,158276],{}," 的结果是字符串，做运算前要转换。",[564,158635,158636,158637,29638],{},"字符串拼接时，数字要先 ",[30,158638,158639],{},"str()",[564,158641,158642,158644,158645,158647],{},[30,158643,73],{}," 是赋值，",[30,158646,4359],{}," 是比较。",[564,158649,158650],{},"Python 没有自增自减运算符。",[564,158652,158653],{},"浮点数计算可能有精度误差：",[23,158655,158657],{"className":31631,"code":158656,"language":31633,"meta":28,"style":28},"print(0.1 + 0.2)\n",[30,158658,158659],{"__ignoreMap":28},[33,158660,158661,158663,158665,158667,158669,158672],{"class":35,"line":36},[33,158662,31668],{"class":76},[33,158664,345],{"class":47},[33,158666,87463],{"class":76},[33,158668,46819],{"class":39},[33,158670,158671],{"class":76}," 0.2",[33,158673,884],{"class":47},[14,158675,158676,158677,158680],{},"金额计算如果要求严格，可以后续学习 ",[30,158678,158679],{},"decimal"," 模块。",[18,158682,158684],{"id":158683},"_214-本章练习","2.14 本章练习",[574,158686,158687,158690,158693,158696,158699],{},[564,158688,158689],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[564,158691,158692],{},"输入圆的半径，计算面积，保留两位小数。",[564,158694,158695],{},"输入工资和奖金，计算总收入。",[564,158697,158698],{},"输入摄氏温度，转换为华氏温度。",[564,158700,158701],{},"写一个 BMI 计算程序：",[23,158703,158706],{"className":158704,"code":158705,"language":6578,"meta":28},[6576],"BMI = 体重kg \u002F 身高m ** 2\n",[30,158707,158705],{"__ignoreMap":28},[1544,158709,158710],{},"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":28,"searchDepth":51,"depth":51,"links":158712},[158713,158714,158715,158716,158717,158718,158719,158725,158726,158727,158732,158733,158734,158735],{"id":156274,"depth":51,"text":156275},{"id":156383,"depth":51,"text":156384},{"id":156554,"depth":51,"text":156555},{"id":156631,"depth":51,"text":156632},{"id":51984,"depth":51,"text":51985},{"id":156937,"depth":51,"text":156938},{"id":157163,"depth":51,"text":157164,"children":158720},[158721,158722,158723,158724],{"id":157167,"depth":57,"text":157168},{"id":157361,"depth":57,"text":157362},{"id":157449,"depth":57,"text":157450},{"id":157555,"depth":57,"text":157556},{"id":157664,"depth":51,"text":157665},{"id":157822,"depth":51,"text":157823},{"id":157887,"depth":51,"text":157888,"children":158728},[158729,158730,158731],{"id":157891,"depth":57,"text":157892},{"id":158036,"depth":57,"text":158037},{"id":158139,"depth":57,"text":158140},{"id":158270,"depth":51,"text":158271},{"id":158422,"depth":51,"text":158423},{"id":158625,"depth":51,"text":158626},{"id":158683,"depth":51,"text":158684},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156266,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158742,"title":158743,"body":158744,"description":24628,"extension":1557,"meta":160380,"navigation":159,"path":160381,"seo":160382,"stem":160383,"__hash__":160384},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158745,"toc":160361},[158746,158749,158753,158756,158771,158774,158802,158806,158856,158858,158874,158877,158903,158906,158910,158977,158980,158996,159000,159003,159121,159124,159131,159180,159186,159190,159193,159306,159309,159313,159317,159320,159370,159374,159377,159427,159431,159434,159472,159476,159479,159525,159528,159563,159567,159572,159575,159621,159623,159690,159694,159700,159811,159820,159824,159826,159837,159839,160005,160009,160011,160025,160027,160241,160245,160264,160281,160284,160330,160334,160358],[10,158747,158743],{"id":158748},"_3-判断语句",[18,158750,158752],{"id":158751},"_31-布尔值","3.1 布尔值",[14,158754,158755],{},"判断语句依赖布尔值：",[23,158757,158759],{"className":31631,"code":158758,"language":31633,"meta":28,"style":28},"True\nFalse\n",[30,158760,158761,158766],{"__ignoreMap":28},[33,158762,158763],{"class":35,"line":36},[33,158764,158765],{"class":76},"True\n",[33,158767,158768],{"class":35,"line":51},[33,158769,158770],{"class":76},"False\n",[14,158772,158773],{},"比较表达式会产生布尔值：",[23,158775,158777],{"className":31631,"code":158776,"language":31633,"meta":28,"style":28},"age = 18\nprint(age >= 18)  # True\n",[30,158778,158779,158787],{"__ignoreMap":28},[33,158780,158781,158783,158785],{"class":35,"line":36},[33,158782,147799],{"class":47},[33,158784,73],{"class":39},[33,158786,147804],{"class":76},[33,158788,158789,158791,158793,158795,158797,158799],{"class":35,"line":51},[33,158790,31668],{"class":76},[33,158792,157021],{"class":47},[33,158794,3151],{"class":39},[33,158796,157538],{"class":76},[33,158798,47061],{"class":47},[33,158800,158801],{"class":60},"# True\n",[18,158803,158805],{"id":158804},"_32-if基础语法","3.2 if基础语法",[23,158807,158809],{"className":31631,"code":158808,"language":31633,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[30,158810,158811,158829,158833,158845],{"__ignoreMap":28},[33,158812,158813,158815,158817,158819,158821,158823,158825,158827],{"class":35,"line":36},[33,158814,147799],{"class":47},[33,158816,73],{"class":39},[33,158818,591],{"class":76},[33,158820,345],{"class":47},[33,158822,55074],{"class":76},[33,158824,345],{"class":47},[33,158826,153647],{"class":119},[33,158828,31750],{"class":47},[33,158830,158831],{"class":35,"line":51},[33,158832,160],{"emptyLinePlaceholder":159},[33,158834,158835,158837,158839,158841,158843],{"class":35,"line":57},[33,158836,2987],{"class":39},[33,158838,16958],{"class":47},[33,158840,3151],{"class":39},[33,158842,157538],{"class":76},[33,158844,5141],{"class":47},[33,158846,158847,158849,158851,158854],{"class":35,"line":64},[33,158848,32552],{"class":76},[33,158850,345],{"class":47},[33,158852,158853],{"class":119},"\"可以进入网吧\"",[33,158855,884],{"class":47},[14,158857,10276],{},[574,158859,158860,158865,158868,158871],{},[564,158861,158862,158864],{},[30,158863,2987],{}," 后面是条件表达式。",[564,158866,158867],{},"条件后面必须写冒号。",[564,158869,158870],{},"条件成立时执行缩进代码块。",[564,158872,158873],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,158875,158876],{},"错误示例：",[23,158878,158880],{"className":31631,"code":158879,"language":31633,"meta":28,"style":28},"if age >= 18\n    print(\"可以进入\")\n",[30,158881,158882,158892],{"__ignoreMap":28},[33,158883,158884,158886,158888,158890],{"class":35,"line":36},[33,158885,2987],{"class":39},[33,158887,16958],{"class":47},[33,158889,3151],{"class":39},[33,158891,147804],{"class":76},[33,158893,158894,158896,158898,158901],{"class":35,"line":51},[33,158895,32552],{"class":76},[33,158897,345],{"class":47},[33,158899,158900],{"class":119},"\"可以进入\"",[33,158902,884],{"class":47},[14,158904,158905],{},"缺少冒号。",[18,158907,158909],{"id":158908},"_33-if-else","3.3 if else",[23,158911,158913],{"className":31631,"code":158912,"language":31633,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[30,158914,158915,158933,158937,158949,158960,158966],{"__ignoreMap":28},[33,158916,158917,158919,158921,158923,158925,158927,158929,158931],{"class":35,"line":36},[33,158918,147799],{"class":47},[33,158920,73],{"class":39},[33,158922,591],{"class":76},[33,158924,345],{"class":47},[33,158926,55074],{"class":76},[33,158928,345],{"class":47},[33,158930,153647],{"class":119},[33,158932,31750],{"class":47},[33,158934,158935],{"class":35,"line":51},[33,158936,160],{"emptyLinePlaceholder":159},[33,158938,158939,158941,158943,158945,158947],{"class":35,"line":57},[33,158940,2987],{"class":39},[33,158942,16958],{"class":47},[33,158944,3151],{"class":39},[33,158946,157538],{"class":76},[33,158948,5141],{"class":47},[33,158950,158951,158953,158955,158958],{"class":35,"line":64},[33,158952,32552],{"class":76},[33,158954,345],{"class":47},[33,158956,158957],{"class":119},"\"成年人\"",[33,158959,884],{"class":47},[33,158961,158962,158964],{"class":35,"line":83},[33,158963,3142],{"class":39},[33,158965,5141],{"class":47},[33,158967,158968,158970,158972,158975],{"class":35,"line":89},[33,158969,32552],{"class":76},[33,158971,345],{"class":47},[33,158973,158974],{"class":119},"\"未成年人\"",[33,158976,884],{"class":47},[14,158978,158979],{},"执行逻辑：",[574,158981,158982,158988,158993],{},[564,158983,158984,158985,158987],{},"条件成立，执行 ",[30,158986,2987],{}," 代码块。",[564,158989,158990,158991,158987],{},"条件不成立，执行 ",[30,158992,3142],{},[564,158994,158995],{},"两个代码块只会执行其中一个。",[18,158997,158999],{"id":158998},"_34-if-elif-else","3.4 if elif else",[14,159001,159002],{},"多条件判断：",[23,159004,159006],{"className":31631,"code":159005,"language":31633,"meta":28,"style":28},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[30,159007,159008,159026,159030,159044,159055,159069,159080,159093,159104,159110],{"__ignoreMap":28},[33,159009,159010,159012,159014,159016,159018,159020,159022,159024],{"class":35,"line":36},[33,159011,156611],{"class":47},[33,159013,73],{"class":39},[33,159015,591],{"class":76},[33,159017,345],{"class":47},[33,159019,55074],{"class":76},[33,159021,345],{"class":47},[33,159023,153662],{"class":119},[33,159025,31750],{"class":47},[33,159027,159028],{"class":35,"line":51},[33,159029,160],{"emptyLinePlaceholder":159},[33,159031,159032,159034,159037,159039,159042],{"class":35,"line":57},[33,159033,2987],{"class":39},[33,159035,159036],{"class":47}," score ",[33,159038,3151],{"class":39},[33,159040,159041],{"class":76}," 90",[33,159043,5141],{"class":47},[33,159045,159046,159048,159050,159053],{"class":35,"line":64},[33,159047,32552],{"class":76},[33,159049,345],{"class":47},[33,159051,159052],{"class":119},"\"优秀\"",[33,159054,884],{"class":47},[33,159056,159057,159060,159062,159064,159067],{"class":35,"line":83},[33,159058,159059],{"class":39},"elif",[33,159061,159036],{"class":47},[33,159063,3151],{"class":39},[33,159065,159066],{"class":76}," 80",[33,159068,5141],{"class":47},[33,159070,159071,159073,159075,159078],{"class":35,"line":89},[33,159072,32552],{"class":76},[33,159074,345],{"class":47},[33,159076,159077],{"class":119},"\"良好\"",[33,159079,884],{"class":47},[33,159081,159082,159084,159086,159088,159091],{"class":35,"line":98},[33,159083,159059],{"class":39},[33,159085,159036],{"class":47},[33,159087,3151],{"class":39},[33,159089,159090],{"class":76}," 60",[33,159092,5141],{"class":47},[33,159094,159095,159097,159099,159102],{"class":35,"line":110},[33,159096,32552],{"class":76},[33,159098,345],{"class":47},[33,159100,159101],{"class":119},"\"及格\"",[33,159103,884],{"class":47},[33,159105,159106,159108],{"class":35,"line":134},[33,159107,3142],{"class":39},[33,159109,5141],{"class":47},[33,159111,159112,159114,159116,159119],{"class":35,"line":156},[33,159113,32552],{"class":76},[33,159115,345],{"class":47},[33,159117,159118],{"class":119},"\"不及格\"",[33,159120,884],{"class":47},[14,159122,159123],{},"注意判断顺序很重要。",[14,159125,159126,159127,159130],{},"如果把 ",[30,159128,159129],{},"score >= 60"," 放在最前面：",[23,159132,159134],{"className":31631,"code":159133,"language":31633,"meta":28,"style":28},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[30,159135,159136,159148,159158,159170],{"__ignoreMap":28},[33,159137,159138,159140,159142,159144,159146],{"class":35,"line":36},[33,159139,2987],{"class":39},[33,159141,159036],{"class":47},[33,159143,3151],{"class":39},[33,159145,159090],{"class":76},[33,159147,5141],{"class":47},[33,159149,159150,159152,159154,159156],{"class":35,"line":51},[33,159151,32552],{"class":76},[33,159153,345],{"class":47},[33,159155,159101],{"class":119},[33,159157,884],{"class":47},[33,159159,159160,159162,159164,159166,159168],{"class":35,"line":57},[33,159161,159059],{"class":39},[33,159163,159036],{"class":47},[33,159165,3151],{"class":39},[33,159167,159041],{"class":76},[33,159169,5141],{"class":47},[33,159171,159172,159174,159176,159178],{"class":35,"line":64},[33,159173,32552],{"class":76},[33,159175,345],{"class":47},[33,159177,159052],{"class":119},[33,159179,884],{"class":47},[14,159181,159182,159183,159185],{},"成绩 95 会先满足 ",[30,159184,159129],{},"，后面的优秀分支就不会执行。",[18,159187,159189],{"id":159188},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,159191,159192],{},"嵌套判断就是在一个判断内部再写判断。",[23,159194,159196],{"className":31631,"code":159195,"language":31633,"meta":28,"style":28},"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",[30,159197,159198,159216,159231,159235,159247,159261,159271,159278,159289,159295],{"__ignoreMap":28},[33,159199,159200,159202,159204,159206,159208,159210,159212,159214],{"class":35,"line":36},[33,159201,147799],{"class":47},[33,159203,73],{"class":39},[33,159205,591],{"class":76},[33,159207,345],{"class":47},[33,159209,55074],{"class":76},[33,159211,345],{"class":47},[33,159213,153647],{"class":119},[33,159215,31750],{"class":47},[33,159217,159218,159220,159222,159224,159226,159229],{"class":35,"line":51},[33,159219,157614],{"class":47},[33,159221,73],{"class":39},[33,159223,61858],{"class":76},[33,159225,345],{"class":47},[33,159227,159228],{"class":119},"\"是否有票(y\u002Fn):\"",[33,159230,884],{"class":47},[33,159232,159233],{"class":35,"line":57},[33,159234,160],{"emptyLinePlaceholder":159},[33,159236,159237,159239,159241,159243,159245],{"class":35,"line":64},[33,159238,2987],{"class":39},[33,159240,16958],{"class":47},[33,159242,3151],{"class":39},[33,159244,157538],{"class":76},[33,159246,5141],{"class":47},[33,159248,159249,159251,159254,159256,159259],{"class":35,"line":83},[33,159250,4509],{"class":39},[33,159252,159253],{"class":47}," has_ticket ",[33,159255,4359],{"class":39},[33,159257,159258],{"class":119}," \"y\"",[33,159260,5141],{"class":47},[33,159262,159263,159265,159267,159269],{"class":35,"line":89},[33,159264,33704],{"class":76},[33,159266,345],{"class":47},[33,159268,158900],{"class":119},[33,159270,884],{"class":47},[33,159272,159273,159276],{"class":35,"line":98},[33,159274,159275],{"class":39},"    else",[33,159277,5141],{"class":47},[33,159279,159280,159282,159284,159287],{"class":35,"line":110},[33,159281,33704],{"class":76},[33,159283,345],{"class":47},[33,159285,159286],{"class":119},"\"请先买票\"",[33,159288,884],{"class":47},[33,159290,159291,159293],{"class":35,"line":134},[33,159292,3142],{"class":39},[33,159294,5141],{"class":47},[33,159296,159297,159299,159301,159304],{"class":35,"line":156},[33,159298,32552],{"class":76},[33,159300,345],{"class":47},[33,159302,159303],{"class":119},"\"未成年人禁止进入\"",[33,159305,884],{"class":47},[14,159307,159308],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[18,159310,159312],{"id":159311},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[1599,159314,159316],{"id":159315},"_361-and","3.6.1 and",[14,159318,159319],{},"两个条件都成立才成立。",[23,159321,159323],{"className":31631,"code":159322,"language":31633,"meta":28,"style":28},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[30,159324,159325,159333,159341,159345,159360],{"__ignoreMap":28},[33,159326,159327,159329,159331],{"class":35,"line":36},[33,159328,147799],{"class":47},[33,159330,73],{"class":39},[33,159332,89318],{"class":76},[33,159334,159335,159337,159339],{"class":35,"line":51},[33,159336,157614],{"class":47},[33,159338,73],{"class":39},[33,159340,154852],{"class":76},[33,159342,159343],{"class":35,"line":57},[33,159344,160],{"emptyLinePlaceholder":159},[33,159346,159347,159349,159351,159353,159355,159357],{"class":35,"line":64},[33,159348,2987],{"class":39},[33,159350,16958],{"class":47},[33,159352,3151],{"class":39},[33,159354,157538],{"class":76},[33,159356,121682],{"class":39},[33,159358,159359],{"class":47}," has_ticket:\n",[33,159361,159362,159364,159366,159368],{"class":35,"line":83},[33,159363,32552],{"class":76},[33,159365,345],{"class":47},[33,159367,158900],{"class":119},[33,159369,884],{"class":47},[1599,159371,159373],{"id":159372},"_362-or","3.6.2 or",[14,159375,159376],{},"只要一个条件成立就成立。",[23,159378,159380],{"className":31631,"code":159379,"language":31633,"meta":28,"style":28},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[30,159381,159382,159391,159400,159404,159416],{"__ignoreMap":28},[33,159383,159384,159387,159389],{"class":35,"line":36},[33,159385,159386],{"class":47},"is_vip ",[33,159388,73],{"class":39},[33,159390,127060],{"class":76},[33,159392,159393,159396,159398],{"class":35,"line":51},[33,159394,159395],{"class":47},"coupon ",[33,159397,73],{"class":39},[33,159399,154852],{"class":76},[33,159401,159402],{"class":35,"line":57},[33,159403,160],{"emptyLinePlaceholder":159},[33,159405,159406,159408,159411,159413],{"class":35,"line":64},[33,159407,2987],{"class":39},[33,159409,159410],{"class":47}," is_vip ",[33,159412,116343],{"class":39},[33,159414,159415],{"class":47}," coupon:\n",[33,159417,159418,159420,159422,159425],{"class":35,"line":83},[33,159419,32552],{"class":76},[33,159421,345],{"class":47},[33,159423,159424],{"class":119},"\"可以享受优惠\"",[33,159426,884],{"class":47},[1599,159428,159430],{"id":159429},"_363-not","3.6.3 not",[14,159432,159433],{},"取反。",[23,159435,159437],{"className":31631,"code":159436,"language":31633,"meta":28,"style":28},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[30,159438,159439,159448,159452,159461],{"__ignoreMap":28},[33,159440,159441,159444,159446],{"class":35,"line":36},[33,159442,159443],{"class":47},"is_closed ",[33,159445,73],{"class":39},[33,159447,127060],{"class":76},[33,159449,159450],{"class":35,"line":51},[33,159451,160],{"emptyLinePlaceholder":159},[33,159453,159454,159456,159458],{"class":35,"line":57},[33,159455,2987],{"class":39},[33,159457,40183],{"class":39},[33,159459,159460],{"class":47}," is_closed:\n",[33,159462,159463,159465,159467,159470],{"class":35,"line":64},[33,159464,32552],{"class":76},[33,159466,345],{"class":47},[33,159468,159469],{"class":119},"\"店铺营业中\"",[33,159471,884],{"class":47},[18,159473,159475],{"id":159474},"_37-链式比较","3.7 链式比较",[14,159477,159478],{},"Python 支持链式比较：",[23,159480,159482],{"className":31631,"code":159481,"language":31633,"meta":28,"style":28},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[30,159483,159484,159493,159497,159514],{"__ignoreMap":28},[33,159485,159486,159488,159490],{"class":35,"line":36},[33,159487,156611],{"class":47},[33,159489,73],{"class":39},[33,159491,159492],{"class":76}," 85\n",[33,159494,159495],{"class":35,"line":51},[33,159496,160],{"emptyLinePlaceholder":159},[33,159498,159499,159501,159503,159506,159508,159510,159512],{"class":35,"line":57},[33,159500,2987],{"class":39},[33,159502,5492],{"class":76},[33,159504,159505],{"class":39}," \u003C=",[33,159507,159036],{"class":47},[33,159509,3041],{"class":39},[33,159511,7141],{"class":76},[33,159513,5141],{"class":47},[33,159515,159516,159518,159520,159523],{"class":35,"line":64},[33,159517,32552],{"class":76},[33,159519,345],{"class":47},[33,159521,159522],{"class":119},"\"成绩合法\"",[33,159524,884],{"class":47},[14,159526,159527],{},"等价于：",[23,159529,159531],{"className":31631,"code":159530,"language":31633,"meta":28,"style":28},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[30,159532,159533,159553],{"__ignoreMap":28},[33,159534,159535,159537,159539,159541,159543,159545,159547,159549,159551],{"class":35,"line":36},[33,159536,2987],{"class":39},[33,159538,159036],{"class":47},[33,159540,3151],{"class":39},[33,159542,5492],{"class":76},[33,159544,121682],{"class":39},[33,159546,159036],{"class":47},[33,159548,3041],{"class":39},[33,159550,7141],{"class":76},[33,159552,5141],{"class":47},[33,159554,159555,159557,159559,159561],{"class":35,"line":51},[33,159556,32552],{"class":76},[33,159558,345],{"class":47},[33,159560,159522],{"class":119},[33,159562,884],{"class":47},[18,159564,159566],{"id":159565},"_38-真值和假值","3.8 真值和假值",[14,159568,117720,159569,159571],{},[30,159570,2987],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,159573,159574],{},"假值：",[23,159576,159578],{"className":31631,"code":159577,"language":31633,"meta":28,"style":28},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[30,159579,159580,159584,159589,159593,159597,159602,159606,159610,159615],{"__ignoreMap":28},[33,159581,159582],{"class":35,"line":36},[33,159583,158770],{"class":76},[33,159585,159586],{"class":35,"line":51},[33,159587,159588],{"class":76},"None\n",[33,159590,159591],{"class":35,"line":57},[33,159592,4493],{"class":76},[33,159594,159595],{"class":35,"line":64},[33,159596,33595],{"class":76},[33,159598,159599],{"class":35,"line":83},[33,159600,159601],{"class":119},"\"\"\n",[33,159603,159604],{"class":35,"line":89},[33,159605,33610],{"class":47},[33,159607,159608],{"class":35,"line":98},[33,159609,48],{"class":47},[33,159611,159612],{"class":35,"line":110},[33,159613,159614],{"class":47},"{}\n",[33,159616,159617,159619],{"class":35,"line":134},[33,159618,156543],{"class":76},[33,159620,48],{"class":47},[14,159622,16386],{},[23,159624,159626],{"className":31631,"code":159625,"language":31633,"meta":28,"style":28},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[30,159627,159628,159642,159646,159653,159673,159679],{"__ignoreMap":28},[33,159629,159630,159632,159634,159636,159638,159640],{"class":35,"line":36},[33,159631,147789],{"class":47},[33,159633,73],{"class":39},[33,159635,61858],{"class":76},[33,159637,345],{"class":47},[33,159639,153632],{"class":119},[33,159641,884],{"class":47},[33,159643,159644],{"class":35,"line":51},[33,159645,160],{"emptyLinePlaceholder":159},[33,159647,159648,159650],{"class":35,"line":57},[33,159649,2987],{"class":39},[33,159651,159652],{"class":47}," name:\n",[33,159654,159655,159657,159659,159661,159663,159665,159667,159669,159671],{"class":35,"line":64},[33,159656,32552],{"class":76},[33,159658,345],{"class":47},[33,159660,1677],{"class":39},[33,159662,158307],{"class":119},[33,159664,698],{"class":76},[33,159666,81063],{"class":47},[33,159668,2542],{"class":76},[33,159670,1866],{"class":119},[33,159672,884],{"class":47},[33,159674,159675,159677],{"class":35,"line":83},[33,159676,3142],{"class":39},[33,159678,5141],{"class":47},[33,159680,159681,159683,159685,159688],{"class":35,"line":89},[33,159682,32552],{"class":76},[33,159684,345],{"class":47},[33,159686,159687],{"class":119},"\"姓名不能为空\"",[33,159689,884],{"class":47},[18,159691,159693],{"id":159692},"_39-match语句","3.9 match语句",[14,159695,159696,159697,159699],{},"Python 3.10 开始支持 ",[30,159698,72518],{},"。它适合处理固定选项。",[23,159701,159703],{"className":31631,"code":159702,"language":31633,"meta":28,"style":28},"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",[30,159704,159705,159721,159725,159732,159742,159753,159762,159773,159782,159793,159800],{"__ignoreMap":28},[33,159706,159707,159710,159712,159714,159716,159719],{"class":35,"line":36},[33,159708,159709],{"class":47},"command ",[33,159711,73],{"class":39},[33,159713,61858],{"class":76},[33,159715,345],{"class":47},[33,159717,159718],{"class":119},"\"请输入命令:\"",[33,159720,884],{"class":47},[33,159722,159723],{"class":35,"line":51},[33,159724,160],{"emptyLinePlaceholder":159},[33,159726,159727,159729],{"class":35,"line":57},[33,159728,72518],{"class":39},[33,159730,159731],{"class":47}," command:\n",[33,159733,159734,159737,159740],{"class":35,"line":64},[33,159735,159736],{"class":39},"    case",[33,159738,159739],{"class":119}," \"start\"",[33,159741,5141],{"class":47},[33,159743,159744,159746,159748,159751],{"class":35,"line":83},[33,159745,33704],{"class":76},[33,159747,345],{"class":47},[33,159749,159750],{"class":119},"\"启动\"",[33,159752,884],{"class":47},[33,159754,159755,159757,159760],{"class":35,"line":89},[33,159756,159736],{"class":39},[33,159758,159759],{"class":119}," \"stop\"",[33,159761,5141],{"class":47},[33,159763,159764,159766,159768,159771],{"class":35,"line":98},[33,159765,33704],{"class":76},[33,159767,345],{"class":47},[33,159769,159770],{"class":119},"\"停止\"",[33,159772,884],{"class":47},[33,159774,159775,159777,159780],{"class":35,"line":110},[33,159776,159736],{"class":39},[33,159778,159779],{"class":119}," \"restart\"",[33,159781,5141],{"class":47},[33,159783,159784,159786,159788,159791],{"class":35,"line":134},[33,159785,33704],{"class":76},[33,159787,345],{"class":47},[33,159789,159790],{"class":119},"\"重启\"",[33,159792,884],{"class":47},[33,159794,159795,159797],{"class":35,"line":156},[33,159796,159736],{"class":39},[33,159798,159799],{"class":47}," _:\n",[33,159801,159802,159804,159806,159809],{"class":35,"line":163},[33,159803,33704],{"class":76},[33,159805,345],{"class":47},[33,159807,159808],{"class":119},"\"未知命令\"",[33,159810,884],{"class":47},[14,159812,159813,159814,159816,159817,159819],{},"入门阶段掌握 ",[30,159815,155911],{}," 更重要，",[30,159818,72518],{}," 可以作为补充。",[18,159821,159823],{"id":159822},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,159825,124545],{},[574,159827,159828,159831,159834],{},[564,159829,159830],{},"输入成绩。",[564,159832,159833],{},"判断成绩是否合法。",[564,159835,159836],{},"输出等级。",[14,159838,11286],{},[23,159840,159842],{"className":31631,"code":159841,"language":31633,"meta":28,"style":28},"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",[30,159843,159844,159862,159866,159884,159895,159907,159918,159930,159941,159954,159965,159977,159988,159994],{"__ignoreMap":28},[33,159845,159846,159848,159850,159852,159854,159856,159858,159860],{"class":35,"line":36},[33,159847,156611],{"class":47},[33,159849,73],{"class":39},[33,159851,111050],{"class":76},[33,159853,345],{"class":47},[33,159855,55074],{"class":76},[33,159857,345],{"class":47},[33,159859,153662],{"class":119},[33,159861,31750],{"class":47},[33,159863,159864],{"class":35,"line":51},[33,159865,160],{"emptyLinePlaceholder":159},[33,159867,159868,159870,159872,159874,159876,159878,159880,159882],{"class":35,"line":57},[33,159869,2987],{"class":39},[33,159871,40183],{"class":39},[33,159873,5492],{"class":76},[33,159875,159505],{"class":39},[33,159877,159036],{"class":47},[33,159879,3041],{"class":39},[33,159881,7141],{"class":76},[33,159883,5141],{"class":47},[33,159885,159886,159888,159890,159893],{"class":35,"line":64},[33,159887,32552],{"class":76},[33,159889,345],{"class":47},[33,159891,159892],{"class":119},"\"成绩不合法\"",[33,159894,884],{"class":47},[33,159896,159897,159899,159901,159903,159905],{"class":35,"line":83},[33,159898,159059],{"class":39},[33,159900,159036],{"class":47},[33,159902,3151],{"class":39},[33,159904,159041],{"class":76},[33,159906,5141],{"class":47},[33,159908,159909,159911,159913,159916],{"class":35,"line":89},[33,159910,32552],{"class":76},[33,159912,345],{"class":47},[33,159914,159915],{"class":119},"\"等级:A\"",[33,159917,884],{"class":47},[33,159919,159920,159922,159924,159926,159928],{"class":35,"line":98},[33,159921,159059],{"class":39},[33,159923,159036],{"class":47},[33,159925,3151],{"class":39},[33,159927,159066],{"class":76},[33,159929,5141],{"class":47},[33,159931,159932,159934,159936,159939],{"class":35,"line":110},[33,159933,32552],{"class":76},[33,159935,345],{"class":47},[33,159937,159938],{"class":119},"\"等级:B\"",[33,159940,884],{"class":47},[33,159942,159943,159945,159947,159949,159952],{"class":35,"line":134},[33,159944,159059],{"class":39},[33,159946,159036],{"class":47},[33,159948,3151],{"class":39},[33,159950,159951],{"class":76}," 70",[33,159953,5141],{"class":47},[33,159955,159956,159958,159960,159963],{"class":35,"line":156},[33,159957,32552],{"class":76},[33,159959,345],{"class":47},[33,159961,159962],{"class":119},"\"等级:C\"",[33,159964,884],{"class":47},[33,159966,159967,159969,159971,159973,159975],{"class":35,"line":163},[33,159968,159059],{"class":39},[33,159970,159036],{"class":47},[33,159972,3151],{"class":39},[33,159974,159090],{"class":76},[33,159976,5141],{"class":47},[33,159978,159979,159981,159983,159986],{"class":35,"line":169},[33,159980,32552],{"class":76},[33,159982,345],{"class":47},[33,159984,159985],{"class":119},"\"等级:D\"",[33,159987,884],{"class":47},[33,159989,159990,159992],{"class":35,"line":175},[33,159991,3142],{"class":39},[33,159993,5141],{"class":47},[33,159995,159996,159998,160000,160003],{"class":35,"line":181},[33,159997,32552],{"class":76},[33,159999,345],{"class":47},[33,160001,160002],{"class":119},"\"等级:E\"",[33,160004,884],{"class":47},[18,160006,160008],{"id":160007},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,160010,124545],{},[574,160012,160013,160016,160019,160022],{},[564,160014,160015],{},"输入消费金额。",[564,160017,160018],{},"输入会员等级，普通、银卡、金卡。",[564,160020,160021],{},"普通不打折，银卡 9 折，金卡 8 折。",[564,160023,160024],{},"满 500 再减 50。",[14,160026,11286],{},[23,160028,160030],{"className":31631,"code":160029,"language":31633,"meta":28,"style":28},"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",[30,160031,160032,160052,160068,160072,160080,160084,160098,160108,160121,160130,160143,160151,160157,160168,160172,160186,160190,160204,160214,160218],{"__ignoreMap":28},[33,160033,160034,160037,160039,160041,160043,160045,160047,160050],{"class":35,"line":36},[33,160035,160036],{"class":47},"amount ",[33,160038,73],{"class":39},[33,160040,111050],{"class":76},[33,160042,345],{"class":47},[33,160044,55074],{"class":76},[33,160046,345],{"class":47},[33,160048,160049],{"class":119},"\"请输入消费金额:\"",[33,160051,31750],{"class":47},[33,160053,160054,160057,160059,160061,160063,160066],{"class":35,"line":51},[33,160055,160056],{"class":47},"level ",[33,160058,73],{"class":39},[33,160060,61858],{"class":76},[33,160062,345],{"class":47},[33,160064,160065],{"class":119},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[33,160067,884],{"class":47},[33,160069,160070],{"class":35,"line":57},[33,160071,160],{"emptyLinePlaceholder":159},[33,160073,160074,160076,160078],{"class":35,"line":64},[33,160075,158489],{"class":47},[33,160077,73],{"class":39},[33,160079,56952],{"class":76},[33,160081,160082],{"class":35,"line":83},[33,160083,160],{"emptyLinePlaceholder":159},[33,160085,160086,160088,160091,160093,160096],{"class":35,"line":89},[33,160087,2987],{"class":39},[33,160089,160090],{"class":47}," level ",[33,160092,4359],{"class":39},[33,160094,160095],{"class":119}," \"银卡\"",[33,160097,5141],{"class":47},[33,160099,160100,160103,160105],{"class":35,"line":98},[33,160101,160102],{"class":47},"    discount ",[33,160104,73],{"class":39},[33,160106,160107],{"class":76}," 0.9\n",[33,160109,160110,160112,160114,160116,160119],{"class":35,"line":110},[33,160111,159059],{"class":39},[33,160113,160090],{"class":47},[33,160115,4359],{"class":39},[33,160117,160118],{"class":119}," \"金卡\"",[33,160120,5141],{"class":47},[33,160122,160123,160125,160127],{"class":35,"line":134},[33,160124,160102],{"class":47},[33,160126,73],{"class":39},[33,160128,160129],{"class":76}," 0.8\n",[33,160131,160132,160134,160136,160138,160141],{"class":35,"line":156},[33,160133,159059],{"class":39},[33,160135,160090],{"class":47},[33,160137,4359],{"class":39},[33,160139,160140],{"class":119}," \"普通\"",[33,160142,5141],{"class":47},[33,160144,160145,160147,160149],{"class":35,"line":163},[33,160146,160102],{"class":47},[33,160148,73],{"class":39},[33,160150,56952],{"class":76},[33,160152,160153,160155],{"class":35,"line":169},[33,160154,3142],{"class":39},[33,160156,5141],{"class":47},[33,160158,160159,160161,160163,160166],{"class":35,"line":175},[33,160160,32552],{"class":76},[33,160162,345],{"class":47},[33,160164,160165],{"class":119},"\"会员等级输入错误，按普通会员计算\"",[33,160167,884],{"class":47},[33,160169,160170],{"class":35,"line":181},[33,160171,160],{"emptyLinePlaceholder":159},[33,160173,160174,160177,160179,160182,160184],{"class":35,"line":196},[33,160175,160176],{"class":47},"pay ",[33,160178,73],{"class":39},[33,160180,160181],{"class":47}," amount ",[33,160183,2057],{"class":39},[33,160185,158528],{"class":47},[33,160187,160188],{"class":35,"line":213},[33,160189,160],{"emptyLinePlaceholder":159},[33,160191,160192,160194,160197,160199,160202],{"class":35,"line":228},[33,160193,2987],{"class":39},[33,160195,160196],{"class":47}," pay ",[33,160198,3151],{"class":39},[33,160200,160201],{"class":76}," 500",[33,160203,5141],{"class":47},[33,160205,160206,160209,160211],{"class":35,"line":1345},[33,160207,160208],{"class":47},"    pay ",[33,160210,151505],{"class":39},[33,160212,160213],{"class":76}," 50\n",[33,160215,160216],{"class":35,"line":1350},[33,160217,160],{"emptyLinePlaceholder":159},[33,160219,160220,160222,160224,160226,160228,160230,160233,160235,160237,160239],{"class":35,"line":1359},[33,160221,31668],{"class":76},[33,160223,345],{"class":47},[33,160225,1677],{"class":39},[33,160227,158609],{"class":119},[33,160229,698],{"class":76},[33,160231,160232],{"class":47},"pay",[33,160234,158412],{"class":39},[33,160236,2542],{"class":76},[33,160238,158265],{"class":119},[33,160240,884],{"class":47},[18,160242,160244],{"id":160243},"_312-易错点","3.12 易错点",[574,160246,160247,160250,160253,160256,160261],{},[564,160248,160249],{},"冒号不能漏。",[564,160251,160252],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[564,160254,160255],{},"多分支判断要注意顺序。",[564,160257,160258,160259,29638],{},"判断相等用 ",[30,160260,4359],{},[564,160262,160263],{},"字符串比较区分大小写：",[23,160265,160267],{"className":31631,"code":160266,"language":31633,"meta":28,"style":28},"\"Y\" == \"y\"  # False\n",[30,160268,160269],{"__ignoreMap":28},[33,160270,160271,160274,160276,160278],{"class":35,"line":36},[33,160272,160273],{"class":119},"\"Y\"",[33,160275,102812],{"class":39},[33,160277,159258],{"class":119},[33,160279,160280],{"class":60},"  # False\n",[14,160282,160283],{},"可转换后再判断：",[23,160285,160287],{"className":31631,"code":160286,"language":31633,"meta":28,"style":28},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[30,160288,160289,160306,160319],{"__ignoreMap":28},[33,160290,160291,160294,160296,160298,160300,160303],{"class":35,"line":36},[33,160292,160293],{"class":47},"answer ",[33,160295,73],{"class":39},[33,160297,61858],{"class":76},[33,160299,345],{"class":47},[33,160301,160302],{"class":119},"\"是否继续(y\u002Fn):\"",[33,160304,160305],{"class":47},").lower()\n",[33,160307,160308,160310,160313,160315,160317],{"class":35,"line":51},[33,160309,2987],{"class":39},[33,160311,160312],{"class":47}," answer ",[33,160314,4359],{"class":39},[33,160316,159258],{"class":119},[33,160318,5141],{"class":47},[33,160320,160321,160323,160325,160328],{"class":35,"line":57},[33,160322,32552],{"class":76},[33,160324,345],{"class":47},[33,160326,160327],{"class":119},"\"继续\"",[33,160329,884],{"class":47},[18,160331,160333],{"id":160332},"_313-本章练习","3.13 本章练习",[574,160335,160336,160339,160342,160345,160355],{},[564,160337,160338],{},"输入年龄，判断是否成年。",[564,160340,160341],{},"输入年份，判断是否为闰年。",[564,160343,160344],{},"输入三个数字，输出最大值。",[564,160346,160347,160348,160351,160352,160354],{},"写登录判断：用户名是 ",[30,160349,160350],{},"admin"," 且密码是 ",[30,160353,16335],{}," 才登录成功。",[564,160356,160357],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1544,160359,160360],{},"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":28,"searchDepth":51,"depth":51,"links":160362},[160363,160364,160365,160366,160367,160368,160373,160374,160375,160376,160377,160378,160379],{"id":158751,"depth":51,"text":158752},{"id":158804,"depth":51,"text":158805},{"id":158908,"depth":51,"text":158909},{"id":158998,"depth":51,"text":158999},{"id":159188,"depth":51,"text":159189},{"id":159311,"depth":51,"text":159312,"children":160369},[160370,160371,160372],{"id":159315,"depth":57,"text":159316},{"id":159372,"depth":57,"text":159373},{"id":159429,"depth":57,"text":159430},{"id":159474,"depth":51,"text":159475},{"id":159565,"depth":51,"text":159566},{"id":159692,"depth":51,"text":159693},{"id":159822,"depth":51,"text":159823},{"id":160007,"depth":51,"text":160008},{"id":160243,"depth":51,"text":160244},{"id":160332,"depth":51,"text":160333},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158743,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160386,"title":160387,"body":160388,"description":24628,"extension":1557,"meta":162157,"navigation":159,"path":162158,"seo":162159,"stem":162160,"__hash__":162161},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160389,"toc":162137},[160390,160393,160397,160403,160406,160423,160427,160429,160446,160448,160493,160495,160512,160516,160519,160585,160588,160606,160610,160771,160780,160784,160788,160793,160840,160842,160848,160852,160857,160904,160906,160912,160916,160921,160957,160960,161007,161011,161017,161075,161080,161111,161116,161120,161175,161178,161250,161253,161312,161316,161319,161394,161397,161401,161507,161510,161536,161540,161552,161621,161624,161716,161720,161722,161733,161735,161865,161869,162071,162079,162083,162113,162117,162134],[10,160391,160387],{"id":160392},"_4-循环语句",[18,160394,160396],{"id":160395},"_41-为什么需要循环","4.1 为什么需要循环",[14,160398,160399,160400,160402],{},"如果要输出 1 到 100，不应该写 100 行 ",[30,160401,147725],{},"，而应该用循环。",[14,160404,160405],{},"循环适合处理重复任务：",[574,160407,160408,160411,160414,160417,160420],{},[564,160409,160410],{},"重复输出。",[564,160412,160413],{},"重复输入。",[564,160415,160416],{},"遍历数据。",[564,160418,160419],{},"持续执行菜单。",[564,160421,160422],{},"批量处理文件或数据。",[18,160424,160426],{"id":160425},"_42-while循环","4.2 while循环",[14,160428,6572],{},[23,160430,160432],{"className":31631,"code":160431,"language":31633,"meta":28,"style":28},"while 条件:\n    循环体\n",[30,160433,160434,160441],{"__ignoreMap":28},[33,160435,160436,160438],{"class":35,"line":36},[33,160437,109916],{"class":39},[33,160439,160440],{"class":47}," 条件:\n",[33,160442,160443],{"class":35,"line":51},[33,160444,160445],{"class":47},"    循环体\n",[14,160447,16386],{},[23,160449,160451],{"className":31631,"code":160450,"language":31633,"meta":28,"style":28},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[30,160452,160453,160461,160465,160477,160484],{"__ignoreMap":28},[33,160454,160455,160457,160459],{"class":35,"line":36},[33,160456,101401],{"class":47},[33,160458,73],{"class":39},[33,160460,56952],{"class":76},[33,160462,160463],{"class":35,"line":51},[33,160464,160],{"emptyLinePlaceholder":159},[33,160466,160467,160469,160471,160473,160475],{"class":35,"line":57},[33,160468,109916],{"class":39},[33,160470,10689],{"class":47},[33,160472,3041],{"class":39},[33,160474,3571],{"class":76},[33,160476,5141],{"class":47},[33,160478,160479,160481],{"class":35,"line":64},[33,160480,32552],{"class":76},[33,160482,160483],{"class":47},"(i)\n",[33,160485,160486,160489,160491],{"class":35,"line":83},[33,160487,160488],{"class":47},"    i ",[33,160490,10728],{"class":39},[33,160492,56952],{"class":76},[14,160494,82182],{},[574,160496,160497,160503,160506,160509],{},[564,160498,160499,160500,29638],{},"判断条件 ",[30,160501,160502],{},"i \u003C= 5",[564,160504,160505],{},"条件成立，执行循环体。",[564,160507,160508],{},"执行完后回到条件判断。",[564,160510,160511],{},"条件不成立，退出循环。",[18,160513,160515],{"id":160514},"_43-while累加","4.3 while累加",[14,160517,160518],{},"计算 1 到 100 的和：",[23,160520,160522],{"className":31631,"code":160521,"language":31633,"meta":28,"style":28},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[30,160523,160524,160532,160540,160544,160556,160566,160574,160578],{"__ignoreMap":28},[33,160525,160526,160528,160530],{"class":35,"line":36},[33,160527,101401],{"class":47},[33,160529,73],{"class":39},[33,160531,56952],{"class":76},[33,160533,160534,160536,160538],{"class":35,"line":51},[33,160535,158513],{"class":47},[33,160537,73],{"class":39},[33,160539,48586],{"class":76},[33,160541,160542],{"class":35,"line":57},[33,160543,160],{"emptyLinePlaceholder":159},[33,160545,160546,160548,160550,160552,160554],{"class":35,"line":64},[33,160547,109916],{"class":39},[33,160549,10689],{"class":47},[33,160551,3041],{"class":39},[33,160553,7141],{"class":76},[33,160555,5141],{"class":47},[33,160557,160558,160561,160563],{"class":35,"line":83},[33,160559,160560],{"class":47},"    total ",[33,160562,10728],{"class":39},[33,160564,160565],{"class":47}," i\n",[33,160567,160568,160570,160572],{"class":35,"line":89},[33,160569,160488],{"class":47},[33,160571,10728],{"class":39},[33,160573,56952],{"class":76},[33,160575,160576],{"class":35,"line":98},[33,160577,160],{"emptyLinePlaceholder":159},[33,160579,160580,160582],{"class":35,"line":110},[33,160581,31668],{"class":76},[33,160583,160584],{"class":47},"(total)\n",[14,160586,160587],{},"核心思想：",[574,160589,160590,160595,160600],{},[564,160591,160592,160594],{},[30,160593,1239],{}," 控制循环次数。",[564,160596,160597,160599],{},[30,160598,158614],{}," 保存累加结果。",[564,160601,160602,160603,160605],{},"每轮循环都要更新 ",[30,160604,1239],{},"，否则可能死循环。",[18,160607,160609],{"id":160608},"_44-while猜数字","4.4 while猜数字",[23,160611,160613],{"className":31631,"code":160612,"language":31633,"meta":28,"style":28},"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",[30,160614,160615,160621,160625,160642,160650,160654,160662,160682,160691,160695,160707,160718,160728,160739,160745,160767],{"__ignoreMap":28},[33,160616,160617,160619],{"class":35,"line":36},[33,160618,31645],{"class":39},[33,160620,46581],{"class":47},[33,160622,160623],{"class":35,"line":51},[33,160624,160],{"emptyLinePlaceholder":159},[33,160626,160627,160629,160631,160634,160636,160638,160640],{"class":35,"line":57},[33,160628,160293],{"class":47},[33,160630,73],{"class":39},[33,160632,160633],{"class":47}," random.randint(",[33,160635,701],{"class":76},[33,160637,13686],{"class":47},[33,160639,457],{"class":76},[33,160641,884],{"class":47},[33,160643,160644,160646,160648],{"class":35,"line":64},[33,160645,147944],{"class":47},[33,160647,73],{"class":39},[33,160649,48586],{"class":76},[33,160651,160652],{"class":35,"line":83},[33,160653,160],{"emptyLinePlaceholder":159},[33,160655,160656,160658,160660],{"class":35,"line":89},[33,160657,109916],{"class":39},[33,160659,96545],{"class":76},[33,160661,5141],{"class":47},[33,160663,160664,160667,160669,160671,160673,160675,160677,160680],{"class":35,"line":98},[33,160665,160666],{"class":47},"    guess ",[33,160668,73],{"class":39},[33,160670,591],{"class":76},[33,160672,345],{"class":47},[33,160674,55074],{"class":76},[33,160676,345],{"class":47},[33,160678,160679],{"class":119},"\"请输入1到100之间的数字:\"",[33,160681,31750],{"class":47},[33,160683,160684,160687,160689],{"class":35,"line":110},[33,160685,160686],{"class":47},"    count ",[33,160688,10728],{"class":39},[33,160690,56952],{"class":76},[33,160692,160693],{"class":35,"line":134},[33,160694,160],{"emptyLinePlaceholder":159},[33,160696,160697,160699,160702,160704],{"class":35,"line":156},[33,160698,4509],{"class":39},[33,160700,160701],{"class":47}," guess ",[33,160703,1265],{"class":39},[33,160705,160706],{"class":47}," answer:\n",[33,160708,160709,160711,160713,160716],{"class":35,"line":163},[33,160710,33704],{"class":76},[33,160712,345],{"class":47},[33,160714,160715],{"class":119},"\"猜大了\"",[33,160717,884],{"class":47},[33,160719,160720,160722,160724,160726],{"class":35,"line":169},[33,160721,40546],{"class":39},[33,160723,160701],{"class":47},[33,160725,875],{"class":39},[33,160727,160706],{"class":47},[33,160729,160730,160732,160734,160737],{"class":35,"line":175},[33,160731,33704],{"class":76},[33,160733,345],{"class":47},[33,160735,160736],{"class":119},"\"猜小了\"",[33,160738,884],{"class":47},[33,160740,160741,160743],{"class":35,"line":181},[33,160742,159275],{"class":39},[33,160744,5141],{"class":47},[33,160746,160747,160749,160751,160753,160756,160758,160760,160762,160765],{"class":35,"line":196},[33,160748,33704],{"class":76},[33,160750,345],{"class":47},[33,160752,1677],{"class":39},[33,160754,160755],{"class":119},"\"猜对了，一共猜了",[33,160757,698],{"class":76},[33,160759,85687],{"class":47},[33,160761,2542],{"class":76},[33,160763,160764],{"class":119},"次\"",[33,160766,884],{"class":47},[33,160768,160769],{"class":35,"line":213},[33,160770,32880],{"class":39},[14,160772,160773,160776,160777,160779],{},[30,160774,160775],{},"while True"," 表示无限循环，通常配合 ",[30,160778,3476],{}," 使用。",[18,160781,160783],{"id":160782},"_45-break和continue","4.5 break和continue",[1599,160785,160787],{"id":160786},"_451-break","4.5.1 break",[14,160789,160790,160792],{},[30,160791,3476],{}," 直接结束整个循环。",[23,160794,160796],{"className":31631,"code":160795,"language":31633,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[30,160797,160798,160818,160830,160834],{"__ignoreMap":28},[33,160799,160800,160802,160804,160806,160808,160810,160812,160814,160816],{"class":35,"line":36},[33,160801,4435],{"class":39},[33,160803,10689],{"class":47},[33,160805,27296],{"class":39},[33,160807,33696],{"class":76},[33,160809,345],{"class":47},[33,160811,701],{"class":76},[33,160813,13686],{"class":47},[33,160815,727],{"class":76},[33,160817,32039],{"class":47},[33,160819,160820,160822,160824,160826,160828],{"class":35,"line":51},[33,160821,4509],{"class":39},[33,160823,10689],{"class":47},[33,160825,4359],{"class":39},[33,160827,79323],{"class":76},[33,160829,5141],{"class":47},[33,160831,160832],{"class":35,"line":57},[33,160833,32880],{"class":39},[33,160835,160836,160838],{"class":35,"line":64},[33,160837,32552],{"class":76},[33,160839,160483],{"class":47},[14,160841,147710],{},[23,160843,160846],{"className":160844,"code":160845,"language":6578,"meta":28},[6576],"1\n2\n",[30,160847,160845],{"__ignoreMap":28},[1599,160849,160851],{"id":160850},"_452-continue","4.5.2 continue",[14,160853,160854,160856],{},[30,160855,155925],{}," 跳过本轮剩余代码，进入下一轮循环。",[23,160858,160860],{"className":31631,"code":160859,"language":31633,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[30,160861,160862,160882,160894,160898],{"__ignoreMap":28},[33,160863,160864,160866,160868,160870,160872,160874,160876,160878,160880],{"class":35,"line":36},[33,160865,4435],{"class":39},[33,160867,10689],{"class":47},[33,160869,27296],{"class":39},[33,160871,33696],{"class":76},[33,160873,345],{"class":47},[33,160875,701],{"class":76},[33,160877,13686],{"class":47},[33,160879,727],{"class":76},[33,160881,32039],{"class":47},[33,160883,160884,160886,160888,160890,160892],{"class":35,"line":51},[33,160885,4509],{"class":39},[33,160887,10689],{"class":47},[33,160889,4359],{"class":39},[33,160891,79323],{"class":76},[33,160893,5141],{"class":47},[33,160895,160896],{"class":35,"line":57},[33,160897,149765],{"class":39},[33,160899,160900,160902],{"class":35,"line":64},[33,160901,32552],{"class":76},[33,160903,160483],{"class":47},[14,160905,147710],{},[23,160907,160910],{"className":160908,"code":160909,"language":6578,"meta":28},[6576],"1\n2\n4\n5\n",[30,160911,160909],{"__ignoreMap":28},[18,160913,160915],{"id":160914},"_46-for循环","4.6 for循环",[14,160917,160918,160920],{},[30,160919,4435],{}," 常用于遍历序列。",[23,160922,160924],{"className":31631,"code":160923,"language":31633,"meta":28,"style":28},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[30,160925,160926,160935,160939,160950],{"__ignoreMap":28},[33,160927,160928,160930,160932],{"class":35,"line":36},[33,160929,147789],{"class":47},[33,160931,73],{"class":39},[33,160933,160934],{"class":119}," \"python\"\n",[33,160936,160937],{"class":35,"line":51},[33,160938,160],{"emptyLinePlaceholder":159},[33,160940,160941,160943,160946,160948],{"class":35,"line":57},[33,160942,4435],{"class":39},[33,160944,160945],{"class":47}," ch ",[33,160947,27296],{"class":39},[33,160949,159652],{"class":47},[33,160951,160952,160954],{"class":35,"line":64},[33,160953,32552],{"class":76},[33,160955,160956],{"class":47},"(ch)\n",[14,160958,160959],{},"遍历列表：",[23,160961,160963],{"className":31631,"code":160962,"language":31633,"meta":28,"style":28},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[30,160964,160965,160987,160991,161001],{"__ignoreMap":28},[33,160966,160967,160970,160972,160974,160976,160978,160980,160982,160985],{"class":35,"line":36},[33,160968,160969],{"class":47},"students ",[33,160971,73],{"class":39},[33,160973,53479],{"class":47},[33,160975,151141],{"class":119},[33,160977,13686],{"class":47},[33,160979,152189],{"class":119},[33,160981,13686],{"class":47},[33,160983,160984],{"class":119},"\"小刚\"",[33,160986,34499],{"class":47},[33,160988,160989],{"class":35,"line":51},[33,160990,160],{"emptyLinePlaceholder":159},[33,160992,160993,160995,160997,160999],{"class":35,"line":57},[33,160994,4435],{"class":39},[33,160996,153390],{"class":47},[33,160998,27296],{"class":39},[33,161000,153395],{"class":47},[33,161002,161003,161005],{"class":35,"line":64},[33,161004,32552],{"class":76},[33,161006,151295],{"class":47},[18,161008,161010],{"id":161009},"_47-range函数","4.7 range函数",[14,161012,161013,161016],{},[30,161014,161015],{},"range()"," 用于生成整数序列。",[23,161018,161020],{"className":31631,"code":161019,"language":31633,"meta":28,"style":28},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[30,161021,161022,161036,161054],{"__ignoreMap":28},[33,161023,161024,161026,161028,161030,161033],{"class":35,"line":36},[33,161025,34669],{"class":76},[33,161027,345],{"class":47},[33,161029,722],{"class":76},[33,161031,161032],{"class":47},")          ",[33,161034,161035],{"class":60},"# 0,1,2,3,4\n",[33,161037,161038,161040,161042,161044,161046,161048,161051],{"class":35,"line":51},[33,161039,34669],{"class":76},[33,161041,345],{"class":47},[33,161043,701],{"class":76},[33,161045,13686],{"class":47},[33,161047,722],{"class":76},[33,161049,161050],{"class":47},")       ",[33,161052,161053],{"class":60},"# 1,2,3,4\n",[33,161055,161056,161058,161060,161062,161064,161066,161068,161070,161072],{"class":35,"line":57},[33,161057,34669],{"class":76},[33,161059,345],{"class":47},[33,161061,701],{"class":76},[33,161063,13686],{"class":47},[33,161065,77],{"class":76},[33,161067,13686],{"class":47},[33,161069,707],{"class":76},[33,161071,156914],{"class":47},[33,161073,161074],{"class":60},"# 1,3,5,7,9\n",[14,161076,161077,161078,25871],{},"配合 ",[30,161079,4435],{},[23,161081,161083],{"className":31631,"code":161082,"language":31633,"meta":28,"style":28},"for i in range(1, 6):\n    print(i)\n",[30,161084,161085,161105],{"__ignoreMap":28},[33,161086,161087,161089,161091,161093,161095,161097,161099,161101,161103],{"class":35,"line":36},[33,161088,4435],{"class":39},[33,161090,10689],{"class":47},[33,161092,27296],{"class":39},[33,161094,33696],{"class":76},[33,161096,345],{"class":47},[33,161098,701],{"class":76},[33,161100,13686],{"class":47},[33,161102,727],{"class":76},[33,161104,32039],{"class":47},[33,161106,161107,161109],{"class":35,"line":51},[33,161108,32552],{"class":76},[33,161110,160483],{"class":47},[14,161112,10276,161113,161115],{},[30,161114,34669],{}," 的结束值不包含在内。",[18,161117,161119],{"id":161118},"_48-for循环求和","4.8 for循环求和",[23,161121,161123],{"className":31631,"code":161122,"language":31633,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[30,161124,161125,161133,161137,161157,161165,161169],{"__ignoreMap":28},[33,161126,161127,161129,161131],{"class":35,"line":36},[33,161128,158513],{"class":47},[33,161130,73],{"class":39},[33,161132,48586],{"class":76},[33,161134,161135],{"class":35,"line":51},[33,161136,160],{"emptyLinePlaceholder":159},[33,161138,161139,161141,161143,161145,161147,161149,161151,161153,161155],{"class":35,"line":57},[33,161140,4435],{"class":39},[33,161142,10689],{"class":47},[33,161144,27296],{"class":39},[33,161146,33696],{"class":76},[33,161148,345],{"class":47},[33,161150,701],{"class":76},[33,161152,13686],{"class":47},[33,161154,1948],{"class":76},[33,161156,32039],{"class":47},[33,161158,161159,161161,161163],{"class":35,"line":64},[33,161160,160560],{"class":47},[33,161162,10728],{"class":39},[33,161164,160565],{"class":47},[33,161166,161167],{"class":35,"line":83},[33,161168,160],{"emptyLinePlaceholder":159},[33,161170,161171,161173],{"class":35,"line":89},[33,161172,31668],{"class":76},[33,161174,160584],{"class":47},[14,161176,161177],{},"求偶数和：",[23,161179,161181],{"className":31631,"code":161180,"language":31633,"meta":28,"style":28},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[30,161182,161183,161191,161195,161215,161231,161240,161244],{"__ignoreMap":28},[33,161184,161185,161187,161189],{"class":35,"line":36},[33,161186,158513],{"class":47},[33,161188,73],{"class":39},[33,161190,48586],{"class":76},[33,161192,161193],{"class":35,"line":51},[33,161194,160],{"emptyLinePlaceholder":159},[33,161196,161197,161199,161201,161203,161205,161207,161209,161211,161213],{"class":35,"line":57},[33,161198,4435],{"class":39},[33,161200,10689],{"class":47},[33,161202,27296],{"class":39},[33,161204,33696],{"class":76},[33,161206,345],{"class":47},[33,161208,701],{"class":76},[33,161210,13686],{"class":47},[33,161212,1948],{"class":76},[33,161214,32039],{"class":47},[33,161216,161217,161219,161221,161223,161225,161227,161229],{"class":35,"line":64},[33,161218,4509],{"class":39},[33,161220,10689],{"class":47},[33,161222,1939],{"class":39},[33,161224,16006],{"class":76},[33,161226,102812],{"class":39},[33,161228,5492],{"class":76},[33,161230,5141],{"class":47},[33,161232,161233,161236,161238],{"class":35,"line":83},[33,161234,161235],{"class":47},"        total ",[33,161237,10728],{"class":39},[33,161239,160565],{"class":47},[33,161241,161242],{"class":35,"line":89},[33,161243,160],{"emptyLinePlaceholder":159},[33,161245,161246,161248],{"class":35,"line":98},[33,161247,31668],{"class":76},[33,161249,160584],{"class":47},[14,161251,161252],{},"也可以：",[23,161254,161256],{"className":31631,"code":161255,"language":31633,"meta":28,"style":28},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[30,161257,161258,161266,161270,161294,161302,161306],{"__ignoreMap":28},[33,161259,161260,161262,161264],{"class":35,"line":36},[33,161261,158513],{"class":47},[33,161263,73],{"class":39},[33,161265,48586],{"class":76},[33,161267,161268],{"class":35,"line":51},[33,161269,160],{"emptyLinePlaceholder":159},[33,161271,161272,161274,161276,161278,161280,161282,161284,161286,161288,161290,161292],{"class":35,"line":57},[33,161273,4435],{"class":39},[33,161275,10689],{"class":47},[33,161277,27296],{"class":39},[33,161279,33696],{"class":76},[33,161281,345],{"class":47},[33,161283,707],{"class":76},[33,161285,13686],{"class":47},[33,161287,1948],{"class":76},[33,161289,13686],{"class":47},[33,161291,707],{"class":76},[33,161293,32039],{"class":47},[33,161295,161296,161298,161300],{"class":35,"line":64},[33,161297,160560],{"class":47},[33,161299,10728],{"class":39},[33,161301,160565],{"class":47},[33,161303,161304],{"class":35,"line":83},[33,161305,160],{"emptyLinePlaceholder":159},[33,161307,161308,161310],{"class":35,"line":89},[33,161309,31668],{"class":76},[33,161311,160584],{"class":47},[18,161313,161315],{"id":161314},"_49-循环嵌套","4.9 循环嵌套",[14,161317,161318],{},"嵌套循环就是循环里面再写循环。",[23,161320,161322],{"className":31631,"code":161321,"language":31633,"meta":28,"style":28},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[30,161323,161324,161344,161364],{"__ignoreMap":28},[33,161325,161326,161328,161330,161332,161334,161336,161338,161340,161342],{"class":35,"line":36},[33,161327,4435],{"class":39},[33,161329,10689],{"class":47},[33,161331,27296],{"class":39},[33,161333,33696],{"class":76},[33,161335,345],{"class":47},[33,161337,701],{"class":76},[33,161339,13686],{"class":47},[33,161341,717],{"class":76},[33,161343,32039],{"class":47},[33,161345,161346,161348,161350,161352,161354,161356,161358,161360,161362],{"class":35,"line":51},[33,161347,857],{"class":39},[33,161349,10751],{"class":47},[33,161351,27296],{"class":39},[33,161353,33696],{"class":76},[33,161355,345],{"class":47},[33,161357,701],{"class":76},[33,161359,13686],{"class":47},[33,161361,717],{"class":76},[33,161363,32039],{"class":47},[33,161365,161366,161368,161370,161372,161375,161377,161379,161381,161384,161386,161388,161390,161392],{"class":35,"line":57},[33,161367,33704],{"class":76},[33,161369,345],{"class":47},[33,161371,1677],{"class":39},[33,161373,161374],{"class":119},"\"i=",[33,161376,698],{"class":76},[33,161378,1239],{"class":47},[33,161380,2542],{"class":76},[33,161382,161383],{"class":119},", j=",[33,161385,698],{"class":76},[33,161387,2069],{"class":47},[33,161389,2542],{"class":76},[33,161391,1866],{"class":119},[33,161393,884],{"class":47},[14,161395,161396],{},"外层循环执行一次，内层循环执行完整一轮。",[18,161398,161400],{"id":161399},"_410-九九乘法表","4.10 九九乘法表",[23,161402,161404],{"className":31631,"code":161403,"language":31633,"meta":28,"style":28},"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",[30,161405,161406,161426,161449,161501],{"__ignoreMap":28},[33,161407,161408,161410,161412,161414,161416,161418,161420,161422,161424],{"class":35,"line":36},[33,161409,4435],{"class":39},[33,161411,10689],{"class":47},[33,161413,27296],{"class":39},[33,161415,33696],{"class":76},[33,161417,345],{"class":47},[33,161419,701],{"class":76},[33,161421,13686],{"class":47},[33,161423,77],{"class":76},[33,161425,32039],{"class":47},[33,161427,161428,161430,161432,161434,161436,161438,161440,161443,161445,161447],{"class":35,"line":51},[33,161429,857],{"class":39},[33,161431,10751],{"class":47},[33,161433,27296],{"class":39},[33,161435,33696],{"class":76},[33,161437,345],{"class":47},[33,161439,701],{"class":76},[33,161441,161442],{"class":47},", i ",[33,161444,1271],{"class":39},[33,161446,26371],{"class":76},[33,161448,32039],{"class":47},[33,161450,161451,161453,161455,161457,161459,161461,161463,161465,161467,161469,161471,161473,161475,161477,161479,161481,161483,161485,161487,161489,161491,161493,161495,161497,161499],{"class":35,"line":57},[33,161452,33704],{"class":76},[33,161454,345],{"class":47},[33,161456,1677],{"class":39},[33,161458,1866],{"class":119},[33,161460,698],{"class":76},[33,161462,2069],{"class":47},[33,161464,2542],{"class":76},[33,161466,2057],{"class":119},[33,161468,698],{"class":76},[33,161470,1239],{"class":47},[33,161472,2542],{"class":76},[33,161474,73],{"class":119},[33,161476,698],{"class":76},[33,161478,101401],{"class":47},[33,161480,2057],{"class":39},[33,161482,1223],{"class":47},[33,161484,2542],{"class":76},[33,161486,1866],{"class":119},[33,161488,13686],{"class":47},[33,161490,47054],{"class":955},[33,161492,73],{"class":39},[33,161494,1866],{"class":119},[33,161496,2693],{"class":76},[33,161498,1866],{"class":119},[33,161500,884],{"class":47},[33,161502,161503,161505],{"class":35,"line":64},[33,161504,32552],{"class":76},[33,161506,48],{"class":47},[14,161508,161509],{},"关键点：",[574,161511,161512,161518,161524,161530],{},[564,161513,161514,161515,161517],{},"外层 ",[30,161516,1239],{}," 控制行。",[564,161519,161520,161521,161523],{},"内层 ",[30,161522,2069],{}," 控制列。",[564,161525,161526,161527,161529],{},"每行结束后用 ",[30,161528,147725],{}," 换行。",[564,161531,161532,161535],{},[30,161533,161534],{},"end=\"\\t\""," 让同一行的内容横向排列。",[18,161537,161539],{"id":161538},"_411-循环else","4.11 循环else",[14,161541,161542,161543,161545,161546,161548,161549,161551],{},"Python 的循环可以带 ",[30,161544,3142],{},"。当循环正常结束时执行 ",[30,161547,3142],{},"，如果被 ",[30,161550,3476],{}," 打断，则不执行。",[23,161553,161555],{"className":31631,"code":161554,"language":31633,"meta":28,"style":28},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,161556,161557,161577,161589,161600,161604,161610],{"__ignoreMap":28},[33,161558,161559,161561,161563,161565,161567,161569,161571,161573,161575],{"class":35,"line":36},[33,161560,4435],{"class":39},[33,161562,10689],{"class":47},[33,161564,27296],{"class":39},[33,161566,33696],{"class":76},[33,161568,345],{"class":47},[33,161570,701],{"class":76},[33,161572,13686],{"class":47},[33,161574,727],{"class":76},[33,161576,32039],{"class":47},[33,161578,161579,161581,161583,161585,161587],{"class":35,"line":51},[33,161580,4509],{"class":39},[33,161582,10689],{"class":47},[33,161584,4359],{"class":39},[33,161586,3461],{"class":76},[33,161588,5141],{"class":47},[33,161590,161591,161593,161595,161598],{"class":35,"line":57},[33,161592,33704],{"class":76},[33,161594,345],{"class":47},[33,161596,161597],{"class":119},"\"找到了\"",[33,161599,884],{"class":47},[33,161601,161602],{"class":35,"line":64},[33,161603,32880],{"class":39},[33,161605,161606,161608],{"class":35,"line":83},[33,161607,3142],{"class":39},[33,161609,5141],{"class":47},[33,161611,161612,161614,161616,161619],{"class":35,"line":89},[33,161613,32552],{"class":76},[33,161615,345],{"class":47},[33,161617,161618],{"class":119},"\"没找到\"",[33,161620,884],{"class":47},[14,161622,161623],{},"常用于搜索。",[23,161625,161627],{"className":31631,"code":161626,"language":31633,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[30,161628,161629,161650,161659,161663,161675,161686,161696,161700,161706],{"__ignoreMap":28},[33,161630,161631,161634,161636,161638,161640,161642,161644,161646,161648],{"class":35,"line":36},[33,161632,161633],{"class":47},"names ",[33,161635,73],{"class":39},[33,161637,53479],{"class":47},[33,161639,151141],{"class":119},[33,161641,13686],{"class":47},[33,161643,152189],{"class":119},[33,161645,13686],{"class":47},[33,161647,160984],{"class":119},[33,161649,34499],{"class":47},[33,161651,161652,161654,161656],{"class":35,"line":51},[33,161653,112831],{"class":47},[33,161655,73],{"class":39},[33,161657,161658],{"class":119}," \"小李\"\n",[33,161660,161661],{"class":35,"line":57},[33,161662,160],{"emptyLinePlaceholder":159},[33,161664,161665,161667,161670,161672],{"class":35,"line":64},[33,161666,4435],{"class":39},[33,161668,161669],{"class":47}," name ",[33,161671,27296],{"class":39},[33,161673,161674],{"class":47}," names:\n",[33,161676,161677,161679,161681,161683],{"class":35,"line":83},[33,161678,4509],{"class":39},[33,161680,161669],{"class":47},[33,161682,4359],{"class":39},[33,161684,161685],{"class":47}," target:\n",[33,161687,161688,161690,161692,161694],{"class":35,"line":89},[33,161689,33704],{"class":76},[33,161691,345],{"class":47},[33,161693,161597],{"class":119},[33,161695,884],{"class":47},[33,161697,161698],{"class":35,"line":98},[33,161699,32880],{"class":39},[33,161701,161702,161704],{"class":35,"line":110},[33,161703,3142],{"class":39},[33,161705,5141],{"class":47},[33,161707,161708,161710,161712,161714],{"class":35,"line":134},[33,161709,32552],{"class":76},[33,161711,345],{"class":47},[33,161713,161618],{"class":119},[33,161715,884],{"class":47},[18,161717,161719],{"id":161718},"_412-小案例登录重试","4.12 小案例：登录重试",[14,161721,124545],{},[574,161723,161724,161727,161730],{},[564,161725,161726],{},"用户最多输入 3 次密码。",[564,161728,161729],{},"密码正确则登录成功。",[564,161731,161732],{},"3 次都错误则锁定账号。",[14,161734,11286],{},[23,161736,161738],{"className":31631,"code":161737,"language":31633,"meta":28,"style":28},"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",[30,161739,161740,161750,161754,161770,161786,161790,161802,161813,161817,161823,161848,161854],{"__ignoreMap":28},[33,161741,161742,161745,161747],{"class":35,"line":36},[33,161743,161744],{"class":47},"password ",[33,161746,73],{"class":39},[33,161748,161749],{"class":119}," \"123456\"\n",[33,161751,161752],{"class":35,"line":51},[33,161753,160],{"emptyLinePlaceholder":159},[33,161755,161756,161758,161760,161762,161764,161766,161768],{"class":35,"line":57},[33,161757,4435],{"class":39},[33,161759,10689],{"class":47},[33,161761,27296],{"class":39},[33,161763,33696],{"class":76},[33,161765,345],{"class":47},[33,161767,712],{"class":76},[33,161769,32039],{"class":47},[33,161771,161772,161775,161777,161779,161781,161784],{"class":35,"line":64},[33,161773,161774],{"class":47},"    user_password ",[33,161776,73],{"class":39},[33,161778,61858],{"class":76},[33,161780,345],{"class":47},[33,161782,161783],{"class":119},"\"请输入密码:\"",[33,161785,884],{"class":47},[33,161787,161788],{"class":35,"line":83},[33,161789,160],{"emptyLinePlaceholder":159},[33,161791,161792,161794,161797,161799],{"class":35,"line":89},[33,161793,4509],{"class":39},[33,161795,161796],{"class":47}," user_password ",[33,161798,4359],{"class":39},[33,161800,161801],{"class":47}," password:\n",[33,161803,161804,161806,161808,161811],{"class":35,"line":98},[33,161805,33704],{"class":76},[33,161807,345],{"class":47},[33,161809,161810],{"class":119},"\"登录成功\"",[33,161812,884],{"class":47},[33,161814,161815],{"class":35,"line":110},[33,161816,32880],{"class":39},[33,161818,161819,161821],{"class":35,"line":134},[33,161820,159275],{"class":39},[33,161822,5141],{"class":47},[33,161824,161825,161827,161829,161831,161834,161837,161839,161841,161843,161846],{"class":35,"line":156},[33,161826,33704],{"class":76},[33,161828,345],{"class":47},[33,161830,1677],{"class":39},[33,161832,161833],{"class":119},"\"密码错误，还剩",[33,161835,161836],{"class":76},"{2",[33,161838,53524],{"class":39},[33,161840,865],{"class":47},[33,161842,2542],{"class":76},[33,161844,161845],{"class":119},"次机会\"",[33,161847,884],{"class":47},[33,161849,161850,161852],{"class":35,"line":163},[33,161851,3142],{"class":39},[33,161853,5141],{"class":47},[33,161855,161856,161858,161860,161863],{"class":35,"line":169},[33,161857,32552],{"class":76},[33,161859,345],{"class":47},[33,161861,161862],{"class":119},"\"账号已锁定\"",[33,161864,884],{"class":47},[18,161866,161868],{"id":161867},"_413-小案例菜单程序","4.13 小案例：菜单程序",[23,161870,161872],{"className":31631,"code":161871,"language":31633,"meta":28,"style":28},"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",[30,161873,161874,161882,161893,161904,161915,161926,161937,161941,161956,161960,161972,161983,161995,162006,162018,162029,162041,162051,162055,162061],{"__ignoreMap":28},[33,161875,161876,161878,161880],{"class":35,"line":36},[33,161877,109916],{"class":39},[33,161879,96545],{"class":76},[33,161881,5141],{"class":47},[33,161883,161884,161886,161888,161891],{"class":35,"line":51},[33,161885,32552],{"class":76},[33,161887,345],{"class":47},[33,161889,161890],{"class":119},"\"====== 菜单 ======\"",[33,161892,884],{"class":47},[33,161894,161895,161897,161899,161902],{"class":35,"line":57},[33,161896,32552],{"class":76},[33,161898,345],{"class":47},[33,161900,161901],{"class":119},"\"1. 查询余额\"",[33,161903,884],{"class":47},[33,161905,161906,161908,161910,161913],{"class":35,"line":64},[33,161907,32552],{"class":76},[33,161909,345],{"class":47},[33,161911,161912],{"class":119},"\"2. 存款\"",[33,161914,884],{"class":47},[33,161916,161917,161919,161921,161924],{"class":35,"line":83},[33,161918,32552],{"class":76},[33,161920,345],{"class":47},[33,161922,161923],{"class":119},"\"3. 取款\"",[33,161925,884],{"class":47},[33,161927,161928,161930,161932,161935],{"class":35,"line":89},[33,161929,32552],{"class":76},[33,161931,345],{"class":47},[33,161933,161934],{"class":119},"\"0. 退出\"",[33,161936,884],{"class":47},[33,161938,161939],{"class":35,"line":98},[33,161940,160],{"emptyLinePlaceholder":159},[33,161942,161943,161946,161948,161950,161952,161954],{"class":35,"line":110},[33,161944,161945],{"class":47},"    choice ",[33,161947,73],{"class":39},[33,161949,61858],{"class":76},[33,161951,345],{"class":47},[33,161953,154326],{"class":119},[33,161955,884],{"class":47},[33,161957,161958],{"class":35,"line":134},[33,161959,160],{"emptyLinePlaceholder":159},[33,161961,161962,161964,161966,161968,161970],{"class":35,"line":156},[33,161963,4509],{"class":39},[33,161965,154339],{"class":47},[33,161967,4359],{"class":39},[33,161969,154344],{"class":119},[33,161971,5141],{"class":47},[33,161973,161974,161976,161978,161981],{"class":35,"line":163},[33,161975,33704],{"class":76},[33,161977,345],{"class":47},[33,161979,161980],{"class":119},"\"余额为1000元\"",[33,161982,884],{"class":47},[33,161984,161985,161987,161989,161991,161993],{"class":35,"line":169},[33,161986,40546],{"class":39},[33,161988,154339],{"class":47},[33,161990,4359],{"class":39},[33,161992,154363],{"class":119},[33,161994,5141],{"class":47},[33,161996,161997,161999,162001,162004],{"class":35,"line":175},[33,161998,33704],{"class":76},[33,162000,345],{"class":47},[33,162002,162003],{"class":119},"\"存款功能\"",[33,162005,884],{"class":47},[33,162007,162008,162010,162012,162014,162016],{"class":35,"line":181},[33,162009,40546],{"class":39},[33,162011,154339],{"class":47},[33,162013,4359],{"class":39},[33,162015,154381],{"class":119},[33,162017,5141],{"class":47},[33,162019,162020,162022,162024,162027],{"class":35,"line":196},[33,162021,33704],{"class":76},[33,162023,345],{"class":47},[33,162025,162026],{"class":119},"\"取款功能\"",[33,162028,884],{"class":47},[33,162030,162031,162033,162035,162037,162039],{"class":35,"line":213},[33,162032,40546],{"class":39},[33,162034,154339],{"class":47},[33,162036,4359],{"class":39},[33,162038,154435],{"class":119},[33,162040,5141],{"class":47},[33,162042,162043,162045,162047,162049],{"class":35,"line":228},[33,162044,33704],{"class":76},[33,162046,345],{"class":47},[33,162048,154446],{"class":119},[33,162050,884],{"class":47},[33,162052,162053],{"class":35,"line":1345},[33,162054,32880],{"class":39},[33,162056,162057,162059],{"class":35,"line":1350},[33,162058,159275],{"class":39},[33,162060,5141],{"class":47},[33,162062,162063,162065,162067,162069],{"class":35,"line":1359},[33,162064,33704],{"class":76},[33,162066,345],{"class":47},[33,162068,154467],{"class":119},[33,162070,884],{"class":47},[14,162072,162073,162074,162076,162077,29638],{},"菜单类程序通常使用 ",[30,162075,160775],{},"，用户选择退出时 ",[30,162078,3476],{},[18,162080,162082],{"id":162081},"_414-易错点","4.14 易错点",[574,162084,162085,162090,162096,162104,162110],{},[564,162086,162087,162089],{},[30,162088,109916],{}," 循环必须更新控制变量。",[564,162091,162092,162095],{},[30,162093,162094],{},"range(1, 10)"," 不包含 10。",[564,162097,162098,162100,162101,162103],{},[30,162099,3476],{}," 结束整个循环，",[30,162102,155925],{}," 只跳过本轮。",[564,162105,162106,162107,162109],{},"嵌套循环中，",[30,162108,3476],{}," 只跳出当前所在的一层循环。",[564,162111,162112],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[18,162114,162116],{"id":162115},"_415-本章练习","4.15 本章练习",[574,162118,162119,162122,162125,162128,162131],{},[564,162120,162121],{},"输出 1 到 100。",[564,162123,162124],{},"计算 1 到 100 的偶数和。",[564,162126,162127],{},"输出 100 以内能被 3 和 5 同时整除的数。",[564,162129,162130],{},"编写猜数字游戏，限制最多猜 7 次。",[564,162132,162133],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1544,162135,162136],{},"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":28,"searchDepth":51,"depth":51,"links":162138},[162139,162140,162141,162142,162143,162147,162148,162149,162150,162151,162152,162153,162154,162155,162156],{"id":160395,"depth":51,"text":160396},{"id":160425,"depth":51,"text":160426},{"id":160514,"depth":51,"text":160515},{"id":160608,"depth":51,"text":160609},{"id":160782,"depth":51,"text":160783,"children":162144},[162145,162146],{"id":160786,"depth":57,"text":160787},{"id":160850,"depth":57,"text":160851},{"id":160914,"depth":51,"text":160915},{"id":161009,"depth":51,"text":161010},{"id":161118,"depth":51,"text":161119},{"id":161314,"depth":51,"text":161315},{"id":161399,"depth":51,"text":161400},{"id":161538,"depth":51,"text":161539},{"id":161718,"depth":51,"text":161719},{"id":161867,"depth":51,"text":161868},{"id":162081,"depth":51,"text":162082},{"id":162115,"depth":51,"text":162116},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160387,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162163,"title":162164,"body":162165,"description":24628,"extension":1557,"meta":164170,"navigation":159,"path":164171,"seo":164172,"stem":164173,"__hash__":164174},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162166,"toc":164150},[162167,162170,162174,162177,162180,162194,162197,162211,162215,162217,162236,162238,162285,162287,162301,162305,162379,162382,162386,162389,162448,162456,162459,162512,162515,162519,162524,162579,162587,162637,162641,162646,162654,162753,162759,162763,162768,162771,162782,162823,162836,162840,162843,162879,162882,162895,162898,162958,162962,162966,162969,163020,163024,163027,163074,163080,163146,163149,163153,163156,163272,163275,163279,163282,163388,163392,163395,163433,163436,163478,163481,163541,163544,163548,164012,164015,164019,164046,164052,164113,164117,164147],[10,162168,162164],{"id":162169},"_5-函数基础",[18,162171,162173],{"id":162172},"_51-为什么需要函数","5.1 为什么需要函数",[14,162175,162176],{},"函数用于封装一段可以重复使用的代码。",[14,162178,162179],{},"不使用函数的问题：",[574,162181,162182,162185,162188,162191],{},[564,162183,162184],{},"重复代码多。",[564,162186,162187],{},"修改逻辑时容易漏改。",[564,162189,162190],{},"主流程不清晰。",[564,162192,162193],{},"程序越写越长，难以维护。",[14,162195,162196],{},"使用函数后的好处：",[574,162198,162199,162202,162205,162208],{},[564,162200,162201],{},"提高复用性。",[564,162203,162204],{},"提高可读性。",[564,162206,162207],{},"便于调试。",[564,162209,162210],{},"便于分工。",[18,162212,162214],{"id":162213},"_52-函数定义","5.2 函数定义",[14,162216,6572],{},[23,162218,162220],{"className":31631,"code":162219,"language":31633,"meta":28,"style":28},"def 函数名():\n    函数体\n",[30,162221,162222,162231],{"__ignoreMap":28},[33,162223,162224,162226,162229],{"class":35,"line":36},[33,162225,33200],{"class":39},[33,162227,162228],{"class":43}," 函数名",[33,162230,33206],{"class":47},[33,162232,162233],{"class":35,"line":51},[33,162234,162235],{"class":47},"    函数体\n",[14,162237,16386],{},[23,162239,162241],{"className":31631,"code":162240,"language":31633,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[30,162242,162243,162252,162262,162272,162276,162280],{"__ignoreMap":28},[33,162244,162245,162247,162250],{"class":35,"line":36},[33,162246,33200],{"class":39},[33,162248,162249],{"class":43}," say_hello",[33,162251,33206],{"class":47},[33,162253,162254,162256,162258,162260],{"class":35,"line":51},[33,162255,32552],{"class":76},[33,162257,345],{"class":47},[33,162259,7231],{"class":119},[33,162261,884],{"class":47},[33,162263,162264,162266,162268,162270],{"class":35,"line":57},[33,162265,32552],{"class":76},[33,162267,345],{"class":47},[33,162269,147892],{"class":119},[33,162271,884],{"class":47},[33,162273,162274],{"class":35,"line":64},[33,162275,160],{"emptyLinePlaceholder":159},[33,162277,162278],{"class":35,"line":83},[33,162279,160],{"emptyLinePlaceholder":159},[33,162281,162282],{"class":35,"line":89},[33,162283,162284],{"class":47},"say_hello()\n",[14,162286,10276],{},[574,162288,162289,162292,162295,162298],{},[564,162290,162291],{},"函数必须先定义，再调用。",[564,162293,162294],{},"函数名遵循变量命名规则。",[564,162296,162297],{},"函数体需要缩进。",[564,162299,162300],{},"函数不调用就不会执行。",[18,162302,162304],{"id":162303},"_53-函数调用","5.3 函数调用",[23,162306,162308],{"className":31631,"code":162307,"language":31633,"meta":28,"style":28},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[30,162309,162310,162319,162330,162341,162352,162362,162366,162370,162375],{"__ignoreMap":28},[33,162311,162312,162314,162317],{"class":35,"line":36},[33,162313,33200],{"class":39},[33,162315,162316],{"class":43}," print_menu",[33,162318,33206],{"class":47},[33,162320,162321,162323,162325,162328],{"class":35,"line":51},[33,162322,32552],{"class":76},[33,162324,345],{"class":47},[33,162326,162327],{"class":119},"\"1. 查询\"",[33,162329,884],{"class":47},[33,162331,162332,162334,162336,162339],{"class":35,"line":57},[33,162333,32552],{"class":76},[33,162335,345],{"class":47},[33,162337,162338],{"class":119},"\"2. 添加\"",[33,162340,884],{"class":47},[33,162342,162343,162345,162347,162350],{"class":35,"line":64},[33,162344,32552],{"class":76},[33,162346,345],{"class":47},[33,162348,162349],{"class":119},"\"3. 删除\"",[33,162351,884],{"class":47},[33,162353,162354,162356,162358,162360],{"class":35,"line":83},[33,162355,32552],{"class":76},[33,162357,345],{"class":47},[33,162359,161934],{"class":119},[33,162361,884],{"class":47},[33,162363,162364],{"class":35,"line":89},[33,162365,160],{"emptyLinePlaceholder":159},[33,162367,162368],{"class":35,"line":98},[33,162369,160],{"emptyLinePlaceholder":159},[33,162371,162372],{"class":35,"line":110},[33,162373,162374],{"class":47},"print_menu()\n",[33,162376,162377],{"class":35,"line":134},[33,162378,162374],{"class":47},[14,162380,162381],{},"函数可以多次调用，每次调用都会执行函数体。",[18,162383,162385],{"id":162384},"_54-参数","5.4 参数",[14,162387,162388],{},"参数用于向函数传递数据。",[23,162390,162392],{"className":31631,"code":162391,"language":31633,"meta":28,"style":28},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[30,162393,162394,162403,162423,162427,162431,162440],{"__ignoreMap":28},[33,162395,162396,162398,162400],{"class":35,"line":36},[33,162397,33200],{"class":39},[33,162399,162249],{"class":43},[33,162401,162402],{"class":47},"(name):\n",[33,162404,162405,162407,162409,162411,162413,162415,162417,162419,162421],{"class":35,"line":51},[33,162406,32552],{"class":76},[33,162408,345],{"class":47},[33,162410,1677],{"class":39},[33,162412,158307],{"class":119},[33,162414,698],{"class":76},[33,162416,81063],{"class":47},[33,162418,2542],{"class":76},[33,162420,1866],{"class":119},[33,162422,884],{"class":47},[33,162424,162425],{"class":35,"line":57},[33,162426,160],{"emptyLinePlaceholder":159},[33,162428,162429],{"class":35,"line":64},[33,162430,160],{"emptyLinePlaceholder":159},[33,162432,162433,162436,162438],{"class":35,"line":83},[33,162434,162435],{"class":47},"say_hello(",[33,162437,151141],{"class":119},[33,162439,884],{"class":47},[33,162441,162442,162444,162446],{"class":35,"line":89},[33,162443,162435],{"class":47},[33,162445,152189],{"class":119},[33,162447,884],{"class":47},[14,162449,162450,162452,162453,162455],{},[30,162451,81063],{}," 是形参，",[30,162454,151141],{}," 是实参。",[14,162457,162458],{},"多个参数：",[23,162460,162462],{"className":31631,"code":162461,"language":31633,"meta":28,"style":28},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[30,162463,162464,162472,162485,162491,162495,162499],{"__ignoreMap":28},[33,162465,162466,162468,162470],{"class":35,"line":36},[33,162467,33200],{"class":39},[33,162469,6600],{"class":43},[33,162471,152346],{"class":47},[33,162473,162474,162477,162479,162481,162483],{"class":35,"line":51},[33,162475,162476],{"class":47},"    result ",[33,162478,73],{"class":39},[33,162480,12120],{"class":47},[33,162482,1271],{"class":39},[33,162484,152357],{"class":47},[33,162486,162487,162489],{"class":35,"line":57},[33,162488,32552],{"class":76},[33,162490,77838],{"class":47},[33,162492,162493],{"class":35,"line":64},[33,162494,160],{"emptyLinePlaceholder":159},[33,162496,162497],{"class":35,"line":83},[33,162498,160],{"emptyLinePlaceholder":159},[33,162500,162501,162504,162506,162508,162510],{"class":35,"line":89},[33,162502,162503],{"class":47},"add(",[33,162505,77],{"class":76},[33,162507,13686],{"class":47},[33,162509,1045],{"class":76},[33,162511,884],{"class":47},[14,162513,162514],{},"调用时参数数量必须匹配。",[18,162516,162518],{"id":162517},"_55-返回值","5.5 返回值",[14,162520,162521,162523],{},[30,162522,18297],{}," 用于把函数内部的结果返回给调用者。",[23,162525,162527],{"className":31631,"code":162526,"language":31633,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[30,162528,162529,162537,162547,162551,162555,162573],{"__ignoreMap":28},[33,162530,162531,162533,162535],{"class":35,"line":36},[33,162532,33200],{"class":39},[33,162534,6600],{"class":43},[33,162536,152346],{"class":47},[33,162538,162539,162541,162543,162545],{"class":35,"line":51},[33,162540,5489],{"class":39},[33,162542,12120],{"class":47},[33,162544,1271],{"class":39},[33,162546,152357],{"class":47},[33,162548,162549],{"class":35,"line":57},[33,162550,160],{"emptyLinePlaceholder":159},[33,162552,162553],{"class":35,"line":64},[33,162554,160],{"emptyLinePlaceholder":159},[33,162556,162557,162560,162562,162565,162567,162569,162571],{"class":35,"line":83},[33,162558,162559],{"class":47},"result ",[33,162561,73],{"class":39},[33,162563,162564],{"class":47}," add(",[33,162566,77],{"class":76},[33,162568,13686],{"class":47},[33,162570,1045],{"class":76},[33,162572,884],{"class":47},[33,162574,162575,162577],{"class":35,"line":89},[33,162576,31668],{"class":76},[33,162578,77838],{"class":47},[14,162580,162581,162582,162584,162585,29638],{},"如果函数没有写 ",[30,162583,18297],{},"，默认返回 ",[30,162586,96939],{},[23,162588,162590],{"className":31631,"code":162589,"language":31633,"meta":28,"style":28},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[30,162591,162592,162600,162610,162614,162618,162627],{"__ignoreMap":28},[33,162593,162594,162596,162598],{"class":35,"line":36},[33,162595,33200],{"class":39},[33,162597,162249],{"class":43},[33,162599,33206],{"class":47},[33,162601,162602,162604,162606,162608],{"class":35,"line":51},[33,162603,32552],{"class":76},[33,162605,345],{"class":47},[33,162607,7231],{"class":119},[33,162609,884],{"class":47},[33,162611,162612],{"class":35,"line":57},[33,162613,160],{"emptyLinePlaceholder":159},[33,162615,162616],{"class":35,"line":64},[33,162617,160],{"emptyLinePlaceholder":159},[33,162619,162620,162622,162624],{"class":35,"line":83},[33,162621,162559],{"class":47},[33,162623,73],{"class":39},[33,162625,162626],{"class":47}," say_hello()\n",[33,162628,162629,162631,162634],{"class":35,"line":89},[33,162630,31668],{"class":76},[33,162632,162633],{"class":47},"(result)  ",[33,162635,162636],{"class":60},"# None\n",[18,162638,162640],{"id":162639},"_56-return的作用","5.6 return的作用",[14,162642,162643,162645],{},[30,162644,18297],{}," 有两个作用：",[574,162647,162648,162651],{},[564,162649,162650],{},"返回结果。",[564,162652,162653],{},"结束函数。",[23,162655,162657],{"className":31631,"code":162656,"language":31633,"meta":28,"style":28},"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",[30,162658,162659,162669,162681,162688,162692,162704,162711,162715,162722,162726,162730,162741],{"__ignoreMap":28},[33,162660,162661,162663,162666],{"class":35,"line":36},[33,162662,33200],{"class":39},[33,162664,162665],{"class":43}," check_age",[33,162667,162668],{"class":47},"(age):\n",[33,162670,162671,162673,162675,162677,162679],{"class":35,"line":51},[33,162672,4509],{"class":39},[33,162674,16958],{"class":47},[33,162676,875],{"class":39},[33,162678,5492],{"class":76},[33,162680,5141],{"class":47},[33,162682,162683,162685],{"class":35,"line":57},[33,162684,16003],{"class":39},[33,162686,162687],{"class":119}," \"年龄不合法\"\n",[33,162689,162690],{"class":35,"line":64},[33,162691,160],{"emptyLinePlaceholder":159},[33,162693,162694,162696,162698,162700,162702],{"class":35,"line":83},[33,162695,4509],{"class":39},[33,162697,16958],{"class":47},[33,162699,3151],{"class":39},[33,162701,157538],{"class":76},[33,162703,5141],{"class":47},[33,162705,162706,162708],{"class":35,"line":89},[33,162707,16003],{"class":39},[33,162709,162710],{"class":119}," \"成年人\"\n",[33,162712,162713],{"class":35,"line":98},[33,162714,160],{"emptyLinePlaceholder":159},[33,162716,162717,162719],{"class":35,"line":110},[33,162718,5489],{"class":39},[33,162720,162721],{"class":119}," \"未成年人\"\n",[33,162723,162724],{"class":35,"line":134},[33,162725,160],{"emptyLinePlaceholder":159},[33,162727,162728],{"class":35,"line":156},[33,162729,160],{"emptyLinePlaceholder":159},[33,162731,162732,162734,162737,162739],{"class":35,"line":163},[33,162733,31668],{"class":76},[33,162735,162736],{"class":47},"(check_age(",[33,162738,1045],{"class":76},[33,162740,31750],{"class":47},[33,162742,162743,162745,162747,162749,162751],{"class":35,"line":169},[33,162744,31668],{"class":76},[33,162746,162736],{"class":47},[33,162748,1199],{"class":39},[33,162750,701],{"class":76},[33,162752,31750],{"class":47},[14,162754,162755,162756,162758],{},"函数执行到 ",[30,162757,18297],{}," 后，后面的代码不会继续执行。",[18,162760,162762],{"id":162761},"_57-none","5.7 None",[14,162764,162765,162767],{},[30,162766,96939],{}," 表示空值或没有结果。",[14,162769,162770],{},"常见使用场景：",[574,162772,162773,162776,162779],{},[564,162774,162775],{},"函数没有返回值。",[564,162777,162778],{},"变量暂时没有具体值。",[564,162780,162781],{},"表示查询不到结果。",[23,162783,162785],{"className":31631,"code":162784,"language":31633,"meta":28,"style":28},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[30,162786,162787,162795,162799,162812],{"__ignoreMap":28},[33,162788,162789,162791,162793],{"class":35,"line":36},[33,162790,162559],{"class":47},[33,162792,73],{"class":39},[33,162794,153425],{"class":76},[33,162796,162797],{"class":35,"line":51},[33,162798,160],{"emptyLinePlaceholder":159},[33,162800,162801,162803,162806,162808,162810],{"class":35,"line":57},[33,162802,2987],{"class":39},[33,162804,162805],{"class":47}," result ",[33,162807,40180],{"class":39},[33,162809,40186],{"class":76},[33,162811,5141],{"class":47},[33,162813,162814,162816,162818,162821],{"class":35,"line":64},[33,162815,32552],{"class":76},[33,162817,345],{"class":47},[33,162819,162820],{"class":119},"\"没有数据\"",[33,162822,884],{"class":47},[14,162824,162825,162826,162828,162829,162832,162833,29638],{},"判断 ",[30,162827,96939],{}," 推荐使用 ",[30,162830,162831],{},"is None","，不要写成 ",[30,162834,162835],{},"== None",[18,162837,162839],{"id":162838},"_58-函数文档字符串","5.8 函数文档字符串",[14,162841,162842],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[23,162844,162846],{"className":31631,"code":162845,"language":31633,"meta":28,"style":28},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[30,162847,162848,162858,162863],{"__ignoreMap":28},[33,162849,162850,162852,162855],{"class":35,"line":36},[33,162851,33200],{"class":39},[33,162853,162854],{"class":43}," calculate_bmi",[33,162856,162857],{"class":47},"(weight, height):\n",[33,162859,162860],{"class":35,"line":51},[33,162861,162862],{"class":119},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[33,162864,162865,162867,162870,162872,162875,162877],{"class":35,"line":57},[33,162866,5489],{"class":39},[33,162868,162869],{"class":47}," weight ",[33,162871,2184],{"class":39},[33,162873,162874],{"class":47}," height ",[33,162876,11912],{"class":39},[33,162878,48976],{"class":76},[14,162880,162881],{},"查看说明：",[23,162883,162885],{"className":31631,"code":162884,"language":31633,"meta":28,"style":28},"help(calculate_bmi)\n",[30,162886,162887],{"__ignoreMap":28},[33,162888,162889,162892],{"class":35,"line":36},[33,162890,162891],{"class":76},"help",[33,162893,162894],{"class":47},"(calculate_bmi)\n",[14,162896,162897],{},"较完整的写法：",[23,162899,162901],{"className":31631,"code":162900,"language":31633,"meta":28,"style":28},"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",[30,162902,162903,162911,162916,162921,162925,162930,162935,162940,162944],{"__ignoreMap":28},[33,162904,162905,162907,162909],{"class":35,"line":36},[33,162906,33200],{"class":39},[33,162908,162854],{"class":43},[33,162910,162857],{"class":47},[33,162912,162913],{"class":35,"line":51},[33,162914,162915],{"class":119},"    \"\"\"\n",[33,162917,162918],{"class":35,"line":57},[33,162919,162920],{"class":119},"    计算BMI。\n",[33,162922,162923],{"class":35,"line":64},[33,162924,160],{"emptyLinePlaceholder":159},[33,162926,162927],{"class":35,"line":83},[33,162928,162929],{"class":119},"    :param weight: 体重，单位kg\n",[33,162931,162932],{"class":35,"line":89},[33,162933,162934],{"class":119},"    :param height: 身高，单位m\n",[33,162936,162937],{"class":35,"line":98},[33,162938,162939],{"class":119},"    :return: BMI数值\n",[33,162941,162942],{"class":35,"line":110},[33,162943,162915],{"class":119},[33,162945,162946,162948,162950,162952,162954,162956],{"class":35,"line":134},[33,162947,5489],{"class":39},[33,162949,162869],{"class":47},[33,162951,2184],{"class":39},[33,162953,162874],{"class":47},[33,162955,11912],{"class":39},[33,162957,48976],{"class":76},[18,162959,162961],{"id":162960},"_59-变量作用域","5.9 变量作用域",[1599,162963,162965],{"id":162964},"_591-局部变量","5.9.1 局部变量",[14,162967,162968],{},"在函数内部定义的变量，只能在函数内部使用。",[23,162970,162972],{"className":31631,"code":162971,"language":31633,"meta":28,"style":28},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[30,162973,162974,162983,162991,162997,163001,163005,163010],{"__ignoreMap":28},[33,162975,162976,162978,162981],{"class":35,"line":36},[33,162977,33200],{"class":39},[33,162979,162980],{"class":43}," test",[33,162982,33206],{"class":47},[33,162984,162985,162987,162989],{"class":35,"line":51},[33,162986,46846],{"class":47},[33,162988,73],{"class":39},[33,162990,59681],{"class":76},[33,162992,162993,162995],{"class":35,"line":57},[33,162994,32552],{"class":76},[33,162996,1640],{"class":47},[33,162998,162999],{"class":35,"line":64},[33,163000,160],{"emptyLinePlaceholder":159},[33,163002,163003],{"class":35,"line":83},[33,163004,160],{"emptyLinePlaceholder":159},[33,163006,163007],{"class":35,"line":89},[33,163008,163009],{"class":47},"test()\n",[33,163011,163012,163014,163017],{"class":35,"line":98},[33,163013,31668],{"class":76},[33,163015,163016],{"class":47},"(num)  ",[33,163018,163019],{"class":60},"# 报错\n",[1599,163021,163023],{"id":163022},"_592-全局变量","5.9.2 全局变量",[14,163025,163026],{},"在函数外部定义的变量，可以在函数内部读取。",[23,163028,163030],{"className":31631,"code":163029,"language":31633,"meta":28,"style":28},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[30,163031,163032,163040,163044,163048,163056,163062,163066,163070],{"__ignoreMap":28},[33,163033,163034,163036,163038],{"class":35,"line":36},[33,163035,147789],{"class":47},[33,163037,73],{"class":39},[33,163039,150606],{"class":119},[33,163041,163042],{"class":35,"line":51},[33,163043,160],{"emptyLinePlaceholder":159},[33,163045,163046],{"class":35,"line":57},[33,163047,160],{"emptyLinePlaceholder":159},[33,163049,163050,163052,163054],{"class":35,"line":64},[33,163051,33200],{"class":39},[33,163053,162249],{"class":43},[33,163055,33206],{"class":47},[33,163057,163058,163060],{"class":35,"line":83},[33,163059,32552],{"class":76},[33,163061,151913],{"class":47},[33,163063,163064],{"class":35,"line":89},[33,163065,160],{"emptyLinePlaceholder":159},[33,163067,163068],{"class":35,"line":98},[33,163069,160],{"emptyLinePlaceholder":159},[33,163071,163072],{"class":35,"line":110},[33,163073,162284],{"class":47},[14,163075,163076,163077,29638],{},"如果要在函数内部修改全局变量，需要 ",[30,163078,163079],{},"global",[23,163081,163083],{"className":31631,"code":163082,"language":31633,"meta":28,"style":28},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[30,163084,163085,163093,163097,163101,163110,163118,163126,163130,163134,163139],{"__ignoreMap":28},[33,163086,163087,163089,163091],{"class":35,"line":36},[33,163088,147944],{"class":47},[33,163090,73],{"class":39},[33,163092,48586],{"class":76},[33,163094,163095],{"class":35,"line":51},[33,163096,160],{"emptyLinePlaceholder":159},[33,163098,163099],{"class":35,"line":57},[33,163100,160],{"emptyLinePlaceholder":159},[33,163102,163103,163105,163108],{"class":35,"line":64},[33,163104,33200],{"class":39},[33,163106,163107],{"class":43}," add_count",[33,163109,33206],{"class":47},[33,163111,163112,163115],{"class":35,"line":83},[33,163113,163114],{"class":39},"    global",[33,163116,163117],{"class":47}," count\n",[33,163119,163120,163122,163124],{"class":35,"line":89},[33,163121,160686],{"class":47},[33,163123,10728],{"class":39},[33,163125,56952],{"class":76},[33,163127,163128],{"class":35,"line":98},[33,163129,160],{"emptyLinePlaceholder":159},[33,163131,163132],{"class":35,"line":110},[33,163133,160],{"emptyLinePlaceholder":159},[33,163135,163136],{"class":35,"line":134},[33,163137,163138],{"class":47},"add_count()\n",[33,163140,163141,163143],{"class":35,"line":156},[33,163142,31668],{"class":76},[33,163144,163145],{"class":47},"(count)\n",[14,163147,163148],{},"不建议大量使用全局变量，项目变大后很难维护。",[18,163150,163152],{"id":163151},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,163154,163155],{},"一个函数中可以调用另一个函数。",[23,163157,163159],{"className":31631,"code":163158,"language":31633,"meta":28,"style":28},"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",[30,163160,163161,163170,163184,163188,163192,163201,163206,163226,163247,163251,163255,163259],{"__ignoreMap":28},[33,163162,163163,163165,163168],{"class":35,"line":36},[33,163164,33200],{"class":39},[33,163166,163167],{"class":43}," print_line",[33,163169,33206],{"class":47},[33,163171,163172,163174,163176,163178,163180,163182],{"class":35,"line":51},[33,163173,32552],{"class":76},[33,163175,345],{"class":47},[33,163177,33736],{"class":119},[33,163179,303],{"class":39},[33,163181,79918],{"class":76},[33,163183,884],{"class":47},[33,163185,163186],{"class":35,"line":57},[33,163187,160],{"emptyLinePlaceholder":159},[33,163189,163190],{"class":35,"line":64},[33,163191,160],{"emptyLinePlaceholder":159},[33,163193,163194,163196,163199],{"class":35,"line":83},[33,163195,33200],{"class":39},[33,163197,163198],{"class":43}," print_info",[33,163200,150628],{"class":47},[33,163202,163203],{"class":35,"line":89},[33,163204,163205],{"class":47},"    print_line()\n",[33,163207,163208,163210,163212,163214,163216,163218,163220,163222,163224],{"class":35,"line":98},[33,163209,32552],{"class":76},[33,163211,345],{"class":47},[33,163213,1677],{"class":39},[33,163215,157935],{"class":119},[33,163217,698],{"class":76},[33,163219,81063],{"class":47},[33,163221,2542],{"class":76},[33,163223,1866],{"class":119},[33,163225,884],{"class":47},[33,163227,163228,163230,163232,163234,163237,163239,163241,163243,163245],{"class":35,"line":110},[33,163229,32552],{"class":76},[33,163231,345],{"class":47},[33,163233,1677],{"class":39},[33,163235,163236],{"class":119},"\"年龄:",[33,163238,698],{"class":76},[33,163240,71474],{"class":47},[33,163242,2542],{"class":76},[33,163244,1866],{"class":119},[33,163246,884],{"class":47},[33,163248,163249],{"class":35,"line":134},[33,163250,163205],{"class":47},[33,163252,163253],{"class":35,"line":156},[33,163254,160],{"emptyLinePlaceholder":159},[33,163256,163257],{"class":35,"line":163},[33,163258,160],{"emptyLinePlaceholder":159},[33,163260,163261,163264,163266,163268,163270],{"class":35,"line":169},[33,163262,163263],{"class":47},"print_info(",[33,163265,151141],{"class":119},[33,163267,13686],{"class":47},[33,163269,2250],{"class":76},[33,163271,884],{"class":47},[14,163273,163274],{},"这种方式可以把小功能组合成大功能。",[18,163276,163278],{"id":163277},"_511-参数检查","5.11 参数检查",[14,163280,163281],{},"函数内部可以检查参数是否合法。",[23,163283,163285],{"className":31631,"code":163284,"language":31633,"meta":28,"style":28},"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",[30,163286,163287,163296,163308,163314,163324,163328,163332,163349,163353,163365,163376,163382],{"__ignoreMap":28},[33,163288,163289,163291,163294],{"class":35,"line":36},[33,163290,33200],{"class":39},[33,163292,163293],{"class":43}," divide",[33,163295,152346],{"class":47},[33,163297,163298,163300,163302,163304,163306],{"class":35,"line":51},[33,163299,4509],{"class":39},[33,163301,12133],{"class":47},[33,163303,4359],{"class":39},[33,163305,5492],{"class":76},[33,163307,5141],{"class":47},[33,163309,163310,163312],{"class":35,"line":57},[33,163311,16003],{"class":39},[33,163313,153425],{"class":76},[33,163315,163316,163318,163320,163322],{"class":35,"line":64},[33,163317,5489],{"class":39},[33,163319,12120],{"class":47},[33,163321,2184],{"class":39},[33,163323,152357],{"class":47},[33,163325,163326],{"class":35,"line":83},[33,163327,160],{"emptyLinePlaceholder":159},[33,163329,163330],{"class":35,"line":89},[33,163331,160],{"emptyLinePlaceholder":159},[33,163333,163334,163336,163338,163341,163343,163345,163347],{"class":35,"line":98},[33,163335,162559],{"class":47},[33,163337,73],{"class":39},[33,163339,163340],{"class":47}," divide(",[33,163342,77],{"class":76},[33,163344,13686],{"class":47},[33,163346,766],{"class":76},[33,163348,884],{"class":47},[33,163350,163351],{"class":35,"line":110},[33,163352,160],{"emptyLinePlaceholder":159},[33,163354,163355,163357,163359,163361,163363],{"class":35,"line":134},[33,163356,2987],{"class":39},[33,163358,162805],{"class":47},[33,163360,40180],{"class":39},[33,163362,40186],{"class":76},[33,163364,5141],{"class":47},[33,163366,163367,163369,163371,163374],{"class":35,"line":156},[33,163368,32552],{"class":76},[33,163370,345],{"class":47},[33,163372,163373],{"class":119},"\"除数不能为0\"",[33,163375,884],{"class":47},[33,163377,163378,163380],{"class":35,"line":163},[33,163379,3142],{"class":39},[33,163381,5141],{"class":47},[33,163383,163384,163386],{"class":35,"line":169},[33,163385,32552],{"class":76},[33,163387,77838],{"class":47},[18,163389,163391],{"id":163390},"_512-类型提示","5.12 类型提示",[14,163393,163394],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[23,163396,163398],{"className":31631,"code":163397,"language":31633,"meta":28,"style":28},"def add(a: int, b: int) -> int:\n    return a + b\n",[30,163399,163400,163423],{"__ignoreMap":28},[33,163401,163402,163404,163406,163409,163411,163414,163416,163419,163421],{"class":35,"line":36},[33,163403,33200],{"class":39},[33,163405,6600],{"class":43},[33,163407,163408],{"class":47},"(a: ",[33,163410,40],{"class":76},[33,163412,163413],{"class":47},", b: ",[33,163415,40],{"class":76},[33,163417,163418],{"class":47},") -> ",[33,163420,40],{"class":76},[33,163422,5141],{"class":47},[33,163424,163425,163427,163429,163431],{"class":35,"line":51},[33,163426,5489],{"class":39},[33,163428,12120],{"class":47},[33,163430,1271],{"class":39},[33,163432,152357],{"class":47},[14,163434,163435],{},"字符串参数：",[23,163437,163439],{"className":31631,"code":163438,"language":31633,"meta":28,"style":28},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[30,163440,163441,163458],{"__ignoreMap":28},[33,163442,163443,163445,163447,163450,163452,163454,163456],{"class":35,"line":36},[33,163444,33200],{"class":39},[33,163446,162249],{"class":43},[33,163448,163449],{"class":47},"(name: ",[33,163451,2760],{"class":76},[33,163453,163418],{"class":47},[33,163455,96939],{"class":76},[33,163457,5141],{"class":47},[33,163459,163460,163462,163464,163466,163468,163470,163472,163474,163476],{"class":35,"line":51},[33,163461,32552],{"class":76},[33,163463,345],{"class":47},[33,163465,1677],{"class":39},[33,163467,158307],{"class":119},[33,163469,698],{"class":76},[33,163471,81063],{"class":47},[33,163473,2542],{"class":76},[33,163475,1866],{"class":119},[33,163477,884],{"class":47},[14,163479,163480],{},"列表参数：",[23,163482,163484],{"className":31631,"code":163483,"language":31633,"meta":28,"style":28},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[30,163485,163486,163505,163513,163525,163534],{"__ignoreMap":28},[33,163487,163488,163490,163493,163496,163498,163501,163503],{"class":35,"line":36},[33,163489,33200],{"class":39},[33,163491,163492],{"class":43}," get_total",[33,163494,163495],{"class":47},"(numbers: list[",[33,163497,40],{"class":76},[33,163499,163500],{"class":47},"]) -> ",[33,163502,40],{"class":76},[33,163504,5141],{"class":47},[33,163506,163507,163509,163511],{"class":35,"line":51},[33,163508,160560],{"class":47},[33,163510,73],{"class":39},[33,163512,48586],{"class":76},[33,163514,163515,163517,163520,163522],{"class":35,"line":57},[33,163516,857],{"class":39},[33,163518,163519],{"class":47}," number ",[33,163521,27296],{"class":39},[33,163523,163524],{"class":47}," numbers:\n",[33,163526,163527,163529,163531],{"class":35,"line":64},[33,163528,161235],{"class":47},[33,163530,10728],{"class":39},[33,163532,163533],{"class":47}," number\n",[33,163535,163536,163538],{"class":35,"line":83},[33,163537,5489],{"class":39},[33,163539,163540],{"class":47}," total\n",[14,163542,163543],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[18,163545,163547],{"id":163546},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[23,163549,163551],{"className":31631,"code":163550,"language":31633,"meta":28,"style":28},"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",[30,163552,163553,163563,163567,163571,163579,163590,163600,163610,163620,163630,163634,163638,163647,163669,163673,163677,163686,163692,163712,163724,163735,163739,163748,163759,163764,163768,163772,163781,163787,163806,163818,163828,163832,163843,163853,163857,163865,163876,163880,163884,163888,163896,163901,163915,163919,163931,163936,163948,163953,163965,163970,163982,163992,163996,164002],{"__ignoreMap":28},[33,163554,163555,163558,163560],{"class":35,"line":36},[33,163556,163557],{"class":47},"balance ",[33,163559,73],{"class":39},[33,163561,163562],{"class":76}," 1000\n",[33,163564,163565],{"class":35,"line":51},[33,163566,160],{"emptyLinePlaceholder":159},[33,163568,163569],{"class":35,"line":57},[33,163570,160],{"emptyLinePlaceholder":159},[33,163572,163573,163575,163577],{"class":35,"line":64},[33,163574,33200],{"class":39},[33,163576,153286],{"class":43},[33,163578,33206],{"class":47},[33,163580,163581,163583,163585,163588],{"class":35,"line":83},[33,163582,32552],{"class":76},[33,163584,345],{"class":47},[33,163586,163587],{"class":119},"\"====== ATM ======\"",[33,163589,884],{"class":47},[33,163591,163592,163594,163596,163598],{"class":35,"line":89},[33,163593,32552],{"class":76},[33,163595,345],{"class":47},[33,163597,161901],{"class":119},[33,163599,884],{"class":47},[33,163601,163602,163604,163606,163608],{"class":35,"line":98},[33,163603,32552],{"class":76},[33,163605,345],{"class":47},[33,163607,161912],{"class":119},[33,163609,884],{"class":47},[33,163611,163612,163614,163616,163618],{"class":35,"line":110},[33,163613,32552],{"class":76},[33,163615,345],{"class":47},[33,163617,161923],{"class":119},[33,163619,884],{"class":47},[33,163621,163622,163624,163626,163628],{"class":35,"line":134},[33,163623,32552],{"class":76},[33,163625,345],{"class":47},[33,163627,161934],{"class":119},[33,163629,884],{"class":47},[33,163631,163632],{"class":35,"line":156},[33,163633,160],{"emptyLinePlaceholder":159},[33,163635,163636],{"class":35,"line":163},[33,163637,160],{"emptyLinePlaceholder":159},[33,163639,163640,163642,163645],{"class":35,"line":169},[33,163641,33200],{"class":39},[33,163643,163644],{"class":43}," show_balance",[33,163646,33206],{"class":47},[33,163648,163649,163651,163653,163655,163658,163660,163663,163665,163667],{"class":35,"line":175},[33,163650,32552],{"class":76},[33,163652,345],{"class":47},[33,163654,1677],{"class":39},[33,163656,163657],{"class":119},"\"当前余额:",[33,163659,698],{"class":76},[33,163661,163662],{"class":47},"balance",[33,163664,2542],{"class":76},[33,163666,158265],{"class":119},[33,163668,884],{"class":47},[33,163670,163671],{"class":35,"line":181},[33,163672,160],{"emptyLinePlaceholder":159},[33,163674,163675],{"class":35,"line":196},[33,163676,160],{"emptyLinePlaceholder":159},[33,163678,163679,163681,163684],{"class":35,"line":213},[33,163680,33200],{"class":39},[33,163682,163683],{"class":43}," save_money",[33,163685,33206],{"class":47},[33,163687,163688,163690],{"class":35,"line":228},[33,163689,163114],{"class":39},[33,163691,151352],{"class":47},[33,163693,163694,163697,163699,163701,163703,163705,163707,163710],{"class":35,"line":1345},[33,163695,163696],{"class":47},"    money ",[33,163698,73],{"class":39},[33,163700,111050],{"class":76},[33,163702,345],{"class":47},[33,163704,55074],{"class":76},[33,163706,345],{"class":47},[33,163708,163709],{"class":119},"\"请输入存款金额:\"",[33,163711,31750],{"class":47},[33,163713,163714,163716,163718,163720,163722],{"class":35,"line":1350},[33,163715,4509],{"class":39},[33,163717,151395],{"class":47},[33,163719,3041],{"class":39},[33,163721,5492],{"class":76},[33,163723,5141],{"class":47},[33,163725,163726,163728,163730,163733],{"class":35,"line":1359},[33,163727,33704],{"class":76},[33,163729,345],{"class":47},[33,163731,163732],{"class":119},"\"金额必须大于0\"",[33,163734,884],{"class":47},[33,163736,163737],{"class":35,"line":1364},[33,163738,153614],{"class":39},[33,163740,163741,163744,163746],{"class":35,"line":1370},[33,163742,163743],{"class":47},"    balance ",[33,163745,10728],{"class":39},[33,163747,151428],{"class":47},[33,163749,163750,163752,163754,163757],{"class":35,"line":1425},[33,163751,32552],{"class":76},[33,163753,345],{"class":47},[33,163755,163756],{"class":119},"\"存款成功\"",[33,163758,884],{"class":47},[33,163760,163761],{"class":35,"line":1438},[33,163762,163763],{"class":47},"    show_balance()\n",[33,163765,163766],{"class":35,"line":1451},[33,163767,160],{"emptyLinePlaceholder":159},[33,163769,163770],{"class":35,"line":1457},[33,163771,160],{"emptyLinePlaceholder":159},[33,163773,163774,163776,163779],{"class":35,"line":1466},[33,163775,33200],{"class":39},[33,163777,163778],{"class":43}," withdraw_money",[33,163780,33206],{"class":47},[33,163782,163783,163785],{"class":35,"line":1471},[33,163784,163114],{"class":39},[33,163786,151352],{"class":47},[33,163788,163789,163791,163793,163795,163797,163799,163801,163804],{"class":35,"line":1477},[33,163790,163696],{"class":47},[33,163792,73],{"class":39},[33,163794,111050],{"class":76},[33,163796,345],{"class":47},[33,163798,55074],{"class":76},[33,163800,345],{"class":47},[33,163802,163803],{"class":119},"\"请输入取款金额:\"",[33,163805,31750],{"class":47},[33,163807,163808,163810,163812,163814,163816],{"class":35,"line":1504},[33,163809,4509],{"class":39},[33,163811,151395],{"class":47},[33,163813,3041],{"class":39},[33,163815,5492],{"class":76},[33,163817,5141],{"class":47},[33,163819,163820,163822,163824,163826],{"class":35,"line":1509},[33,163821,33704],{"class":76},[33,163823,345],{"class":47},[33,163825,163732],{"class":119},[33,163827,884],{"class":47},[33,163829,163830],{"class":35,"line":1525},[33,163831,153614],{"class":39},[33,163833,163834,163836,163838,163840],{"class":35,"line":1535},[33,163835,4509],{"class":39},[33,163837,151395],{"class":47},[33,163839,1265],{"class":39},[33,163841,163842],{"class":47}," balance:\n",[33,163844,163845,163847,163849,163851],{"class":35,"line":1540},[33,163846,33704],{"class":76},[33,163848,345],{"class":47},[33,163850,151490],{"class":119},[33,163852,884],{"class":47},[33,163854,163855],{"class":35,"line":4027},[33,163856,153614],{"class":39},[33,163858,163859,163861,163863],{"class":35,"line":4032},[33,163860,163743],{"class":47},[33,163862,151505],{"class":39},[33,163864,151428],{"class":47},[33,163866,163867,163869,163871,163874],{"class":35,"line":9199},[33,163868,32552],{"class":76},[33,163870,345],{"class":47},[33,163872,163873],{"class":119},"\"取款成功\"",[33,163875,884],{"class":47},[33,163877,163878],{"class":35,"line":9223},[33,163879,163763],{"class":47},[33,163881,163882],{"class":35,"line":9228},[33,163883,160],{"emptyLinePlaceholder":159},[33,163885,163886],{"class":35,"line":9234},[33,163887,160],{"emptyLinePlaceholder":159},[33,163889,163890,163892,163894],{"class":35,"line":9261},[33,163891,109916],{"class":39},[33,163893,96545],{"class":76},[33,163895,5141],{"class":47},[33,163897,163898],{"class":35,"line":9266},[33,163899,163900],{"class":47},"    show_menu()\n",[33,163902,163903,163905,163907,163909,163911,163913],{"class":35,"line":9272},[33,163904,161945],{"class":47},[33,163906,73],{"class":39},[33,163908,61858],{"class":76},[33,163910,345],{"class":47},[33,163912,154326],{"class":119},[33,163914,884],{"class":47},[33,163916,163917],{"class":35,"line":9284},[33,163918,160],{"emptyLinePlaceholder":159},[33,163920,163921,163923,163925,163927,163929],{"class":35,"line":9296},[33,163922,4509],{"class":39},[33,163924,154339],{"class":47},[33,163926,4359],{"class":39},[33,163928,154344],{"class":119},[33,163930,5141],{"class":47},[33,163932,163933],{"class":35,"line":9308},[33,163934,163935],{"class":47},"        show_balance()\n",[33,163937,163938,163940,163942,163944,163946],{"class":35,"line":10967},[33,163939,40546],{"class":39},[33,163941,154339],{"class":47},[33,163943,4359],{"class":39},[33,163945,154363],{"class":119},[33,163947,5141],{"class":47},[33,163949,163950],{"class":35,"line":10992},[33,163951,163952],{"class":47},"        save_money()\n",[33,163954,163955,163957,163959,163961,163963],{"class":35,"line":11015},[33,163956,40546],{"class":39},[33,163958,154339],{"class":47},[33,163960,4359],{"class":39},[33,163962,154381],{"class":119},[33,163964,5141],{"class":47},[33,163966,163967],{"class":35,"line":11039},[33,163968,163969],{"class":47},"        withdraw_money()\n",[33,163971,163972,163974,163976,163978,163980],{"class":35,"line":11044},[33,163973,40546],{"class":39},[33,163975,154339],{"class":47},[33,163977,4359],{"class":39},[33,163979,154435],{"class":119},[33,163981,5141],{"class":47},[33,163983,163984,163986,163988,163990],{"class":35,"line":11049},[33,163985,33704],{"class":76},[33,163987,345],{"class":47},[33,163989,154446],{"class":119},[33,163991,884],{"class":47},[33,163993,163994],{"class":35,"line":11054},[33,163995,32880],{"class":39},[33,163997,163998,164000],{"class":35,"line":11063},[33,163999,159275],{"class":39},[33,164001,5141],{"class":47},[33,164003,164004,164006,164008,164010],{"class":35,"line":11068},[33,164005,33704],{"class":76},[33,164007,345],{"class":47},[33,164009,154467],{"class":119},[33,164011,884],{"class":47},[14,164013,164014],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[18,164016,164018],{"id":164017},"_514-易错点","5.14 易错点",[574,164020,164021,164024,164027,164032,164037,164040],{},[564,164022,164023],{},"函数定义后必须调用才会执行。",[564,164025,164026],{},"函数名后面有括号才是调用。",[564,164028,164029,164031],{},[30,164030,18297],{}," 后面的代码不会执行。",[564,164033,164034,164035,29638],{},"没有返回值的函数默认返回 ",[30,164036,96939],{},[564,164038,164039],{},"局部变量不能在函数外部访问。",[564,164041,164042,164043,164045],{},"不要滥用 ",[30,164044,163079],{},"，更好的方式是让函数返回新值。",[14,164047,164048,164049,164051],{},"例如不用 ",[30,164050,163079],{}," 改写存款：",[23,164053,164055],{"className":31631,"code":164054,"language":31633,"meta":28,"style":28},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[30,164056,164057,164066,164077,164081,164085,164093,164106],{"__ignoreMap":28},[33,164058,164059,164061,164063],{"class":35,"line":36},[33,164060,33200],{"class":39},[33,164062,163683],{"class":43},[33,164064,164065],{"class":47},"(balance, money):\n",[33,164067,164068,164070,164073,164075],{"class":35,"line":51},[33,164069,5489],{"class":39},[33,164071,164072],{"class":47}," balance ",[33,164074,1271],{"class":39},[33,164076,151428],{"class":47},[33,164078,164079],{"class":35,"line":57},[33,164080,160],{"emptyLinePlaceholder":159},[33,164082,164083],{"class":35,"line":64},[33,164084,160],{"emptyLinePlaceholder":159},[33,164086,164087,164089,164091],{"class":35,"line":83},[33,164088,163557],{"class":47},[33,164090,73],{"class":39},[33,164092,163562],{"class":76},[33,164094,164095,164097,164099,164102,164104],{"class":35,"line":89},[33,164096,163557],{"class":47},[33,164098,73],{"class":39},[33,164100,164101],{"class":47}," save_money(balance, ",[33,164103,3163],{"class":76},[33,164105,884],{"class":47},[33,164107,164108,164110],{"class":35,"line":98},[33,164109,31668],{"class":76},[33,164111,164112],{"class":47},"(balance)\n",[18,164114,164116],{"id":164115},"_515-本章练习","5.15 本章练习",[574,164118,164119,164126,164132,164138,164144],{},[564,164120,164121,164122,164125],{},"定义函数 ",[30,164123,164124],{},"print_student(name, age)","，输出学生信息。",[564,164127,164121,164128,164131],{},[30,164129,164130],{},"get_max(a, b, c)","，返回三个数中的最大值。",[564,164133,164121,164134,164137],{},[30,164135,164136],{},"is_even(num)","，判断一个数是否为偶数。",[564,164139,164121,164140,164143],{},[30,164141,164142],{},"calculate_bmi(weight, height)","，返回 BMI。",[564,164145,164146],{},"把第 4 章的菜单程序拆分成多个函数。",[1544,164148,164149],{},"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":28,"searchDepth":51,"depth":51,"links":164151},[164152,164153,164154,164155,164156,164157,164158,164159,164160,164164,164165,164166,164167,164168,164169],{"id":162172,"depth":51,"text":162173},{"id":162213,"depth":51,"text":162214},{"id":162303,"depth":51,"text":162304},{"id":162384,"depth":51,"text":162385},{"id":162517,"depth":51,"text":162518},{"id":162639,"depth":51,"text":162640},{"id":162761,"depth":51,"text":162762},{"id":162838,"depth":51,"text":162839},{"id":162960,"depth":51,"text":162961,"children":164161},[164162,164163],{"id":162964,"depth":57,"text":162965},{"id":163022,"depth":57,"text":163023},{"id":163151,"depth":51,"text":163152},{"id":163277,"depth":51,"text":163278},{"id":163390,"depth":51,"text":163391},{"id":163546,"depth":51,"text":163547},{"id":164017,"depth":51,"text":164018},{"id":164115,"depth":51,"text":164116},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162164,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164176,"title":164177,"body":164178,"description":24628,"extension":1557,"meta":167222,"navigation":159,"path":167223,"seo":167224,"stem":167225,"__hash__":167226},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164179,"toc":167203},[164180,164183,164187,164190,164193,164297,164300,164304,164307,164387,164390,164394,164397,164457,164460,164496,164499,164514,164518,164591,164594,164649,164652,164722,164725,164809,164819,164877,164881,164926,164929,164955,164958,165064,165068,165071,165113,165116,165180,165183,165187,165190,165251,165254,165284,165287,165325,165329,165332,165341,165344,165468,165471,165512,165516,165519,165530,165570,165573,165588,165593,165596,165663,165666,165756,165760,165763,165811,165814,165841,165843,165873,165876,165896,165899,165930,165933,165966,165970,165973,165997,166000,166024,166027,166051,166055,166058,166188,166191,166271,166274,166349,166353,166356,166406,166409,166451,166454,166478,166480,166504,166507,166562,166565,166631,166635,166638,166641,166679,166682,166735,166738,166784,166787,166820,166823,166827,167146,167150,167179,167183,167200],[10,164181,164177],{"id":164182},"_6-数据容器",[18,164184,164186],{"id":164185},"_61-什么是数据容器","6.1 什么是数据容器",[14,164188,164189],{},"数据容器用于一次保存多个数据。",[14,164191,164192],{},"常见容器：",[1756,164194,164195,164212],{},[1759,164196,164197],{},[1762,164198,164199,164201,164204,164207,164210],{},[1765,164200,27024],{},[1765,164202,164203],{},"是否有序",[1765,164205,164206],{},"是否可变",[1765,164208,164209],{},"是否允许重复",[1765,164211,28745],{},[1802,164213,164214,164232,164248,164263,164280],{},[1762,164215,164216,164219,164222,164225,164228],{},[1807,164217,164218],{},"list列表",[1807,164220,164221],{},"有序",[1807,164223,164224],{},"可变",[1807,164226,164227],{},"允许",[1807,164229,164230],{},[30,164231,156510],{},[1762,164233,164234,164237,164239,164242,164244],{},[1807,164235,164236],{},"tuple元组",[1807,164238,164221],{},[1807,164240,164241],{},"不可变",[1807,164243,164227],{},[1807,164245,164246],{},[30,164247,156523],{},[1762,164249,164250,164253,164255,164257,164259],{},[1807,164251,164252],{},"str字符串",[1807,164254,164221],{},[1807,164256,164241],{},[1807,164258,164227],{},[1807,164260,164261],{},[30,164262,157133],{},[1762,164264,164265,164268,164271,164273,164276],{},[1807,164266,164267],{},"set集合",[1807,164269,164270],{},"无序",[1807,164272,164224],{},[1807,164274,164275],{},"不允许",[1807,164277,164278],{},[30,164279,156548],{},[1762,164281,164282,164285,164287,164289,164292],{},[1807,164283,164284],{},"dict字典",[1807,164286,164221],{},[1807,164288,164224],{},[1807,164290,164291],{},"key不允许重复",[1807,164293,164294],{},[30,164295,164296],{},"{\"name\": \"小明\"}",[14,164298,164299],{},"Python 3.7 之后，字典保持插入顺序。",[18,164301,164303],{"id":164302},"_62-列表list","6.2 列表list",[14,164305,164306],{},"列表用于保存一组有顺序的数据。",[23,164308,164310],{"className":31631,"code":164309,"language":31633,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[30,164311,164312,164332,164357,164378],{"__ignoreMap":28},[33,164313,164314,164316,164318,164320,164322,164324,164326,164328,164330],{"class":35,"line":36},[33,164315,161633],{"class":47},[33,164317,73],{"class":39},[33,164319,53479],{"class":47},[33,164321,151141],{"class":119},[33,164323,13686],{"class":47},[33,164325,152189],{"class":119},[33,164327,13686],{"class":47},[33,164329,160984],{"class":119},[33,164331,34499],{"class":47},[33,164333,164334,164337,164339,164341,164343,164345,164347,164349,164351,164353,164355],{"class":35,"line":51},[33,164335,164336],{"class":47},"numbers ",[33,164338,73],{"class":39},[33,164340,53479],{"class":47},[33,164342,701],{"class":76},[33,164344,13686],{"class":47},[33,164346,707],{"class":76},[33,164348,13686],{"class":47},[33,164350,712],{"class":76},[33,164352,13686],{"class":47},[33,164354,717],{"class":76},[33,164356,34499],{"class":47},[33,164358,164359,164362,164364,164366,164368,164370,164372,164374,164376],{"class":35,"line":57},[33,164360,164361],{"class":47},"mixed ",[33,164363,73],{"class":39},[33,164365,53479],{"class":47},[33,164367,151141],{"class":119},[33,164369,13686],{"class":47},[33,164371,2250],{"class":76},[33,164373,13686],{"class":47},[33,164375,32729],{"class":76},[33,164377,34499],{"class":47},[33,164379,164380,164383,164385],{"class":35,"line":64},[33,164381,164382],{"class":47},"empty ",[33,164384,73],{"class":39},[33,164386,53091],{"class":47},[14,164388,164389],{},"推荐一个列表中保存同类数据，代码更清晰。",[18,164391,164393],{"id":164392},"_63-列表索引","6.3 列表索引",[14,164395,164396],{},"正向索引从 0 开始：",[23,164398,164400],{"className":31631,"code":164399,"language":31633,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[30,164401,164402,164422,164426,164437,164447],{"__ignoreMap":28},[33,164403,164404,164406,164408,164410,164412,164414,164416,164418,164420],{"class":35,"line":36},[33,164405,161633],{"class":47},[33,164407,73],{"class":39},[33,164409,53479],{"class":47},[33,164411,151141],{"class":119},[33,164413,13686],{"class":47},[33,164415,152189],{"class":119},[33,164417,13686],{"class":47},[33,164419,160984],{"class":119},[33,164421,34499],{"class":47},[33,164423,164424],{"class":35,"line":51},[33,164425,160],{"emptyLinePlaceholder":159},[33,164427,164428,164430,164433,164435],{"class":35,"line":57},[33,164429,31668],{"class":76},[33,164431,164432],{"class":47},"(names[",[33,164434,766],{"class":76},[33,164436,1276],{"class":47},[33,164438,164439,164441,164443,164445],{"class":35,"line":64},[33,164440,31668],{"class":76},[33,164442,164432],{"class":47},[33,164444,701],{"class":76},[33,164446,1276],{"class":47},[33,164448,164449,164451,164453,164455],{"class":35,"line":83},[33,164450,31668],{"class":76},[33,164452,164432],{"class":47},[33,164454,707],{"class":76},[33,164456,1276],{"class":47},[14,164458,164459],{},"反向索引从 -1 开始：",[23,164461,164463],{"className":31631,"code":164462,"language":31633,"meta":28,"style":28},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[30,164464,164465,164481],{"__ignoreMap":28},[33,164466,164467,164469,164471,164473,164475,164478],{"class":35,"line":36},[33,164468,31668],{"class":76},[33,164470,164432],{"class":47},[33,164472,1199],{"class":39},[33,164474,701],{"class":76},[33,164476,164477],{"class":47},"])  ",[33,164479,164480],{"class":60},"# 小刚\n",[33,164482,164483,164485,164487,164489,164491,164493],{"class":35,"line":51},[33,164484,31668],{"class":76},[33,164486,164432],{"class":47},[33,164488,1199],{"class":39},[33,164490,707],{"class":76},[33,164492,164477],{"class":47},[33,164494,164495],{"class":60},"# 小红\n",[14,164497,164498],{},"索引越界会报错：",[23,164500,164502],{"className":31631,"code":164501,"language":31633,"meta":28,"style":28},"print(names[3])\n",[30,164503,164504],{"__ignoreMap":28},[33,164505,164506,164508,164510,164512],{"class":35,"line":36},[33,164507,31668],{"class":76},[33,164509,164432],{"class":47},[33,164511,712],{"class":76},[33,164513,1276],{"class":47},[18,164515,164517],{"id":164516},"_64-列表常用方法","6.4 列表常用方法",[23,164519,164521],{"className":31631,"code":164520,"language":31633,"meta":28,"style":28},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[30,164522,164523,164539,164543,164552,164566,164580,164584],{"__ignoreMap":28},[33,164524,164525,164527,164529,164531,164533,164535,164537],{"class":35,"line":36},[33,164526,161633],{"class":47},[33,164528,73],{"class":39},[33,164530,53479],{"class":47},[33,164532,151141],{"class":119},[33,164534,13686],{"class":47},[33,164536,152189],{"class":119},[33,164538,34499],{"class":47},[33,164540,164541],{"class":35,"line":51},[33,164542,160],{"emptyLinePlaceholder":159},[33,164544,164545,164548,164550],{"class":35,"line":57},[33,164546,164547],{"class":47},"names.append(",[33,164549,160984],{"class":119},[33,164551,884],{"class":47},[33,164553,164554,164557,164559,164561,164564],{"class":35,"line":64},[33,164555,164556],{"class":47},"names.insert(",[33,164558,701],{"class":76},[33,164560,13686],{"class":47},[33,164562,164563],{"class":119},"\"小李\"",[33,164565,884],{"class":47},[33,164567,164568,164571,164573,164575,164578],{"class":35,"line":83},[33,164569,164570],{"class":47},"names.extend([",[33,164572,9934],{"class":119},[33,164574,13686],{"class":47},[33,164576,164577],{"class":119},"\"小赵\"",[33,164579,1276],{"class":47},[33,164581,164582],{"class":35,"line":89},[33,164583,160],{"emptyLinePlaceholder":159},[33,164585,164586,164588],{"class":35,"line":98},[33,164587,31668],{"class":76},[33,164589,164590],{"class":47},"(names)\n",[14,164592,164593],{},"删除元素：",[23,164595,164597],{"className":31631,"code":164596,"language":31633,"meta":28,"style":28},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[30,164598,164599,164608,164618,164632,164644],{"__ignoreMap":28},[33,164600,164601,164604,164606],{"class":35,"line":36},[33,164602,164603],{"class":47},"names.remove(",[33,164605,152189],{"class":119},[33,164607,884],{"class":47},[33,164609,164610,164613,164615],{"class":35,"line":51},[33,164611,164612],{"class":47},"last ",[33,164614,73],{"class":39},[33,164616,164617],{"class":47}," names.pop()\n",[33,164619,164620,164623,164625,164628,164630],{"class":35,"line":57},[33,164621,164622],{"class":47},"first ",[33,164624,73],{"class":39},[33,164626,164627],{"class":47}," names.pop(",[33,164629,766],{"class":76},[33,164631,884],{"class":47},[33,164633,164634,164637,164640,164642],{"class":35,"line":64},[33,164635,164636],{"class":39},"del",[33,164638,164639],{"class":47}," names[",[33,164641,766],{"class":76},[33,164643,34499],{"class":47},[33,164645,164646],{"class":35,"line":83},[33,164647,164648],{"class":47},"names.clear()\n",[14,164650,164651],{},"查询和统计：",[23,164653,164655],{"className":31631,"code":164654,"language":31633,"meta":28,"style":28},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[30,164656,164657,164685,164689,164700,164711],{"__ignoreMap":28},[33,164658,164659,164661,164663,164665,164667,164669,164671,164673,164675,164677,164679,164681,164683],{"class":35,"line":36},[33,164660,164336],{"class":47},[33,164662,73],{"class":39},[33,164664,53479],{"class":47},[33,164666,701],{"class":76},[33,164668,13686],{"class":47},[33,164670,707],{"class":76},[33,164672,13686],{"class":47},[33,164674,712],{"class":76},[33,164676,13686],{"class":47},[33,164678,707],{"class":76},[33,164680,13686],{"class":47},[33,164682,717],{"class":76},[33,164684,34499],{"class":47},[33,164686,164687],{"class":35,"line":51},[33,164688,160],{"emptyLinePlaceholder":159},[33,164690,164691,164693,164696,164698],{"class":35,"line":57},[33,164692,31668],{"class":76},[33,164694,164695],{"class":47},"(numbers.index(",[33,164697,712],{"class":76},[33,164699,31750],{"class":47},[33,164701,164702,164704,164707,164709],{"class":35,"line":64},[33,164703,31668],{"class":76},[33,164705,164706],{"class":47},"(numbers.count(",[33,164708,707],{"class":76},[33,164710,31750],{"class":47},[33,164712,164713,164715,164717,164719],{"class":35,"line":83},[33,164714,31668],{"class":76},[33,164716,345],{"class":47},[33,164718,1196],{"class":76},[33,164720,164721],{"class":47},"(numbers))\n",[14,164723,164724],{},"排序：",[23,164726,164728],{"className":31631,"code":164727,"language":31633,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[30,164729,164730,164754,164758,164763,164770,164774,164788,164794,164798,164803],{"__ignoreMap":28},[33,164731,164732,164734,164736,164738,164740,164742,164744,164746,164748,164750,164752],{"class":35,"line":36},[33,164733,164336],{"class":47},[33,164735,73],{"class":39},[33,164737,53479],{"class":47},[33,164739,712],{"class":76},[33,164741,13686],{"class":47},[33,164743,701],{"class":76},[33,164745,13686],{"class":47},[33,164747,722],{"class":76},[33,164749,13686],{"class":47},[33,164751,707],{"class":76},[33,164753,34499],{"class":47},[33,164755,164756],{"class":35,"line":51},[33,164757,160],{"emptyLinePlaceholder":159},[33,164759,164760],{"class":35,"line":57},[33,164761,164762],{"class":47},"numbers.sort()\n",[33,164764,164765,164767],{"class":35,"line":64},[33,164766,31668],{"class":76},[33,164768,164769],{"class":47},"(numbers)\n",[33,164771,164772],{"class":35,"line":83},[33,164773,160],{"emptyLinePlaceholder":159},[33,164775,164776,164779,164782,164784,164786],{"class":35,"line":89},[33,164777,164778],{"class":47},"numbers.sort(",[33,164780,164781],{"class":955},"reverse",[33,164783,73],{"class":39},[33,164785,32729],{"class":76},[33,164787,884],{"class":47},[33,164789,164790,164792],{"class":35,"line":98},[33,164791,31668],{"class":76},[33,164793,164769],{"class":47},[33,164795,164796],{"class":35,"line":110},[33,164797,160],{"emptyLinePlaceholder":159},[33,164799,164800],{"class":35,"line":134},[33,164801,164802],{"class":47},"numbers.reverse()\n",[33,164804,164805,164807],{"class":35,"line":156},[33,164806,31668],{"class":76},[33,164808,164769],{"class":47},[14,164810,164811,164814,164815,164818],{},[30,164812,164813],{},"sort()"," 会修改原列表，",[30,164816,164817],{},"sorted()"," 返回新列表。",[23,164820,164822],{"className":31631,"code":164821,"language":31633,"meta":28,"style":28},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[30,164823,164824,164848,164860,164864,164870],{"__ignoreMap":28},[33,164825,164826,164828,164830,164832,164834,164836,164838,164840,164842,164844,164846],{"class":35,"line":36},[33,164827,164336],{"class":47},[33,164829,73],{"class":39},[33,164831,53479],{"class":47},[33,164833,712],{"class":76},[33,164835,13686],{"class":47},[33,164837,701],{"class":76},[33,164839,13686],{"class":47},[33,164841,722],{"class":76},[33,164843,13686],{"class":47},[33,164845,707],{"class":76},[33,164847,34499],{"class":47},[33,164849,164850,164853,164855,164858],{"class":35,"line":51},[33,164851,164852],{"class":47},"new_numbers ",[33,164854,73],{"class":39},[33,164856,164857],{"class":76}," sorted",[33,164859,164769],{"class":47},[33,164861,164862],{"class":35,"line":57},[33,164863,160],{"emptyLinePlaceholder":159},[33,164865,164866,164868],{"class":35,"line":64},[33,164867,31668],{"class":76},[33,164869,164769],{"class":47},[33,164871,164872,164874],{"class":35,"line":83},[33,164873,31668],{"class":76},[33,164875,164876],{"class":47},"(new_numbers)\n",[18,164878,164880],{"id":164879},"_65-列表遍历","6.5 列表遍历",[23,164882,164884],{"className":31631,"code":164883,"language":31633,"meta":28,"style":28},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[30,164885,164886,164906,164910,164920],{"__ignoreMap":28},[33,164887,164888,164890,164892,164894,164896,164898,164900,164902,164904],{"class":35,"line":36},[33,164889,161633],{"class":47},[33,164891,73],{"class":39},[33,164893,53479],{"class":47},[33,164895,151141],{"class":119},[33,164897,13686],{"class":47},[33,164899,152189],{"class":119},[33,164901,13686],{"class":47},[33,164903,160984],{"class":119},[33,164905,34499],{"class":47},[33,164907,164908],{"class":35,"line":51},[33,164909,160],{"emptyLinePlaceholder":159},[33,164911,164912,164914,164916,164918],{"class":35,"line":57},[33,164913,4435],{"class":39},[33,164915,161669],{"class":47},[33,164917,27296],{"class":39},[33,164919,161674],{"class":47},[33,164921,164922,164924],{"class":35,"line":64},[33,164923,32552],{"class":76},[33,164925,151913],{"class":47},[14,164927,164928],{},"需要索引时：",[23,164930,164932],{"className":31631,"code":164931,"language":31633,"meta":28,"style":28},"for index, name in enumerate(names):\n    print(index, name)\n",[30,164933,164934,164948],{"__ignoreMap":28},[33,164935,164936,164938,164941,164943,164945],{"class":35,"line":36},[33,164937,4435],{"class":39},[33,164939,164940],{"class":47}," index, name ",[33,164942,27296],{"class":39},[33,164944,32859],{"class":76},[33,164946,164947],{"class":47},"(names):\n",[33,164949,164950,164952],{"class":35,"line":51},[33,164951,32552],{"class":76},[33,164953,164954],{"class":47},"(index, name)\n",[14,164956,164957],{},"统计总分：",[23,164959,164961],{"className":31631,"code":164960,"language":31633,"meta":28,"style":28},"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",[30,164962,164963,164988,164996,165000,165011,165019,165023,165040],{"__ignoreMap":28},[33,164964,164965,164968,164970,164972,164974,164976,164978,164980,164982,164984,164986],{"class":35,"line":36},[33,164966,164967],{"class":47},"scores ",[33,164969,73],{"class":39},[33,164971,53479],{"class":47},[33,164973,2461],{"class":76},[33,164975,13686],{"class":47},[33,164977,2335],{"class":76},[33,164979,13686],{"class":47},[33,164981,1869],{"class":76},[33,164983,13686],{"class":47},[33,164985,2161],{"class":76},[33,164987,34499],{"class":47},[33,164989,164990,164992,164994],{"class":35,"line":51},[33,164991,158513],{"class":47},[33,164993,73],{"class":39},[33,164995,48586],{"class":76},[33,164997,164998],{"class":35,"line":57},[33,164999,160],{"emptyLinePlaceholder":159},[33,165001,165002,165004,165006,165008],{"class":35,"line":64},[33,165003,4435],{"class":39},[33,165005,159036],{"class":47},[33,165007,27296],{"class":39},[33,165009,165010],{"class":47}," scores:\n",[33,165012,165013,165015,165017],{"class":35,"line":83},[33,165014,160560],{"class":47},[33,165016,10728],{"class":39},[33,165018,3032],{"class":47},[33,165020,165021],{"class":35,"line":89},[33,165022,160],{"emptyLinePlaceholder":159},[33,165024,165025,165028,165030,165033,165035,165037],{"class":35,"line":98},[33,165026,165027],{"class":47},"avg ",[33,165029,73],{"class":39},[33,165031,165032],{"class":47}," total ",[33,165034,2184],{"class":39},[33,165036,1169],{"class":76},[33,165038,165039],{"class":47},"(scores)\n",[33,165041,165042,165044,165046,165048,165051,165053,165056,165058,165060,165062],{"class":35,"line":110},[33,165043,31668],{"class":76},[33,165045,345],{"class":47},[33,165047,1677],{"class":39},[33,165049,165050],{"class":119},"\"平均分:",[33,165052,698],{"class":76},[33,165054,165055],{"class":47},"avg",[33,165057,158412],{"class":39},[33,165059,2542],{"class":76},[33,165061,1866],{"class":119},[33,165063,884],{"class":47},[18,165065,165067],{"id":165066},"_66-元组tuple","6.6 元组tuple",[14,165069,165070],{},"元组和列表类似，但不可修改。",[23,165072,165074],{"className":31631,"code":165073,"language":31633,"meta":28,"style":28},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[30,165075,165076,165093],{"__ignoreMap":28},[33,165077,165078,165081,165083,165085,165087,165089,165091],{"class":35,"line":36},[33,165079,165080],{"class":47},"point ",[33,165082,73],{"class":39},[33,165084,860],{"class":47},[33,165086,77],{"class":76},[33,165088,13686],{"class":47},[33,165090,1045],{"class":76},[33,165092,884],{"class":47},[33,165094,165095,165097,165099,165101,165103,165105,165107,165109,165111],{"class":35,"line":51},[33,165096,117567],{"class":47},[33,165098,73],{"class":39},[33,165100,860],{"class":47},[33,165102,151141],{"class":119},[33,165104,13686],{"class":47},[33,165106,2250],{"class":76},[33,165108,13686],{"class":47},[33,165110,70522],{"class":119},[33,165112,884],{"class":47},[14,165114,165115],{},"单元素元组必须加逗号：",[23,165117,165119],{"className":31631,"code":165118,"language":31633,"meta":28,"style":28},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[30,165120,165121,165135,165148,165152,165166],{"__ignoreMap":28},[33,165122,165123,165126,165128,165130,165132],{"class":35,"line":36},[33,165124,165125],{"class":47},"t1 ",[33,165127,73],{"class":39},[33,165129,860],{"class":47},[33,165131,77],{"class":76},[33,165133,165134],{"class":47},",)\n",[33,165136,165137,165140,165142,165144,165146],{"class":35,"line":51},[33,165138,165139],{"class":47},"t2 ",[33,165141,73],{"class":39},[33,165143,860],{"class":47},[33,165145,77],{"class":76},[33,165147,884],{"class":47},[33,165149,165150],{"class":35,"line":57},[33,165151,160],{"emptyLinePlaceholder":159},[33,165153,165154,165156,165158,165160,165163],{"class":35,"line":64},[33,165155,31668],{"class":76},[33,165157,345],{"class":47},[33,165159,104360],{"class":76},[33,165161,165162],{"class":47},"(t1))  ",[33,165164,165165],{"class":60},"# tuple\n",[33,165167,165168,165170,165172,165174,165177],{"class":35,"line":83},[33,165169,31668],{"class":76},[33,165171,345],{"class":47},[33,165173,104360],{"class":76},[33,165175,165176],{"class":47},"(t2))  ",[33,165178,165179],{"class":60},"# int\n",[14,165181,165182],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[18,165184,165186],{"id":165185},"_67-字符串str","6.7 字符串str",[14,165188,165189],{},"字符串也是序列，可以索引、切片和遍历。",[23,165191,165193],{"className":31631,"code":165192,"language":31633,"meta":28,"style":28},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[30,165194,165195,165203,165207,165218,165230,165234,165245],{"__ignoreMap":28},[33,165196,165197,165199,165201],{"class":35,"line":36},[33,165198,157697],{"class":47},[33,165200,73],{"class":39},[33,165202,160934],{"class":119},[33,165204,165205],{"class":35,"line":51},[33,165206,160],{"emptyLinePlaceholder":159},[33,165208,165209,165211,165214,165216],{"class":35,"line":57},[33,165210,31668],{"class":76},[33,165212,165213],{"class":47},"(text[",[33,165215,766],{"class":76},[33,165217,1276],{"class":47},[33,165219,165220,165222,165224,165226,165228],{"class":35,"line":64},[33,165221,31668],{"class":76},[33,165223,165213],{"class":47},[33,165225,1199],{"class":39},[33,165227,701],{"class":76},[33,165229,1276],{"class":47},[33,165231,165232],{"class":35,"line":83},[33,165233,160],{"emptyLinePlaceholder":159},[33,165235,165236,165238,165240,165242],{"class":35,"line":89},[33,165237,4435],{"class":39},[33,165239,160945],{"class":47},[33,165241,27296],{"class":39},[33,165243,165244],{"class":47}," text:\n",[33,165246,165247,165249],{"class":35,"line":98},[33,165248,32552],{"class":76},[33,165250,160956],{"class":47},[14,165252,165253],{},"字符串不可变：",[23,165255,165257],{"className":31631,"code":165256,"language":31633,"meta":28,"style":28},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[30,165258,165259,165267],{"__ignoreMap":28},[33,165260,165261,165263,165265],{"class":35,"line":36},[33,165262,157697],{"class":47},[33,165264,73],{"class":39},[33,165266,160934],{"class":119},[33,165268,165269,165272,165274,165276,165278,165281],{"class":35,"line":51},[33,165270,165271],{"class":47},"text[",[33,165273,766],{"class":76},[33,165275,5840],{"class":47},[33,165277,73],{"class":39},[33,165279,165280],{"class":119}," \"P\"",[33,165282,165283],{"class":60},"  # 报错\n",[14,165285,165286],{},"如果要得到新字符串：",[23,165288,165290],{"className":31631,"code":165289,"language":31633,"meta":28,"style":28},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[30,165291,165292,165300,165318],{"__ignoreMap":28},[33,165293,165294,165296,165298],{"class":35,"line":36},[33,165295,157697],{"class":47},[33,165297,73],{"class":39},[33,165299,160934],{"class":119},[33,165301,165302,165304,165306,165308,165310,165313,165315],{"class":35,"line":51},[33,165303,157697],{"class":47},[33,165305,73],{"class":39},[33,165307,165280],{"class":119},[33,165309,46819],{"class":39},[33,165311,165312],{"class":47}," text[",[33,165314,701],{"class":76},[33,165316,165317],{"class":47},":]\n",[33,165319,165320,165322],{"class":35,"line":57},[33,165321,31668],{"class":76},[33,165323,165324],{"class":47},"(text)\n",[18,165326,165328],{"id":165327},"_68-切片","6.8 切片",[14,165330,165331],{},"切片用于从序列中取一部分。",[23,165333,165335],{"className":31631,"code":165334,"language":31633,"meta":28,"style":28},"序列[开始:结束:步长]\n",[30,165336,165337],{"__ignoreMap":28},[33,165338,165339],{"class":35,"line":36},[33,165340,165334],{"class":47},[14,165342,165343],{},"结束位置不包含。",[23,165345,165347],{"className":31631,"code":165346,"language":31633,"meta":28,"style":28},"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",[30,165348,165349,165386,165390,165409,165424,165438,165452],{"__ignoreMap":28},[33,165350,165351,165354,165356,165358,165360,165362,165364,165366,165368,165370,165372,165374,165376,165378,165380,165382,165384],{"class":35,"line":36},[33,165352,165353],{"class":47},"nums ",[33,165355,73],{"class":39},[33,165357,53479],{"class":47},[33,165359,766],{"class":76},[33,165361,13686],{"class":47},[33,165363,701],{"class":76},[33,165365,13686],{"class":47},[33,165367,707],{"class":76},[33,165369,13686],{"class":47},[33,165371,712],{"class":76},[33,165373,13686],{"class":47},[33,165375,717],{"class":76},[33,165377,13686],{"class":47},[33,165379,722],{"class":76},[33,165381,13686],{"class":47},[33,165383,727],{"class":76},[33,165385,34499],{"class":47},[33,165387,165388],{"class":35,"line":51},[33,165389,160],{"emptyLinePlaceholder":159},[33,165391,165392,165394,165397,165399,165401,165403,165406],{"class":35,"line":57},[33,165393,31668],{"class":76},[33,165395,165396],{"class":47},"(nums[",[33,165398,701],{"class":76},[33,165400,2458],{"class":47},[33,165402,717],{"class":76},[33,165404,165405],{"class":47},"])    ",[33,165407,165408],{"class":60},"# [1, 2, 3]\n",[33,165410,165411,165413,165416,165418,165421],{"class":35,"line":64},[33,165412,31668],{"class":76},[33,165414,165415],{"class":47},"(nums[:",[33,165417,712],{"class":76},[33,165419,165420],{"class":47},"])     ",[33,165422,165423],{"class":60},"# [0, 1, 2]\n",[33,165425,165426,165428,165430,165432,165435],{"class":35,"line":83},[33,165427,31668],{"class":76},[33,165429,165396],{"class":47},[33,165431,712],{"class":76},[33,165433,165434],{"class":47},":])     ",[33,165436,165437],{"class":60},"# [3, 4, 5, 6]\n",[33,165439,165440,165442,165445,165447,165449],{"class":35,"line":89},[33,165441,31668],{"class":76},[33,165443,165444],{"class":47},"(nums[::",[33,165446,707],{"class":76},[33,165448,165405],{"class":47},[33,165450,165451],{"class":60},"# [0, 2, 4, 6]\n",[33,165453,165454,165456,165458,165460,165462,165465],{"class":35,"line":98},[33,165455,31668],{"class":76},[33,165457,165444],{"class":47},[33,165459,1199],{"class":39},[33,165461,701],{"class":76},[33,165463,165464],{"class":47},"])   ",[33,165466,165467],{"class":60},"# 反转\n",[14,165469,165470],{},"字符串切片：",[23,165472,165474],{"className":31631,"code":165473,"language":31633,"meta":28,"style":28},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[30,165475,165476,165485,165499],{"__ignoreMap":28},[33,165477,165478,165480,165482],{"class":35,"line":36},[33,165479,157697],{"class":47},[33,165481,73],{"class":39},[33,165483,165484],{"class":119}," \"abcdef\"\n",[33,165486,165487,165489,165491,165493,165495,165497],{"class":35,"line":51},[33,165488,31668],{"class":76},[33,165490,165213],{"class":47},[33,165492,701],{"class":76},[33,165494,2458],{"class":47},[33,165496,717],{"class":76},[33,165498,1276],{"class":47},[33,165500,165501,165503,165506,165508,165510],{"class":35,"line":57},[33,165502,31668],{"class":76},[33,165504,165505],{"class":47},"(text[::",[33,165507,1199],{"class":39},[33,165509,701],{"class":76},[33,165511,1276],{"class":47},[18,165513,165515],{"id":165514},"_69-集合set","6.9 集合set",[14,165517,165518],{},"集合特点：",[574,165520,165521,165524,165527],{},[564,165522,165523],{},"无序。",[564,165525,165526],{},"元素不重复。",[564,165528,165529],{},"可以做交集、并集、差集。",[23,165531,165533],{"className":31631,"code":165532,"language":31633,"meta":28,"style":28},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[30,165534,165535,165563],{"__ignoreMap":28},[33,165536,165537,165539,165541,165543,165545,165547,165549,165551,165553,165555,165557,165559,165561],{"class":35,"line":36},[33,165538,165353],{"class":47},[33,165540,73],{"class":39},[33,165542,5845],{"class":47},[33,165544,701],{"class":76},[33,165546,13686],{"class":47},[33,165548,707],{"class":76},[33,165550,13686],{"class":47},[33,165552,712],{"class":76},[33,165554,13686],{"class":47},[33,165556,712],{"class":76},[33,165558,13686],{"class":47},[33,165560,717],{"class":76},[33,165562,231],{"class":47},[33,165564,165565,165567],{"class":35,"line":51},[33,165566,31668],{"class":76},[33,165568,165569],{"class":47},"(nums)\n",[14,165571,165572],{},"创建空集合：",[23,165574,165576],{"className":31631,"code":165575,"language":31633,"meta":28,"style":28},"s = set()\n",[30,165577,165578],{"__ignoreMap":28},[33,165579,165580,165582,165584,165586],{"class":35,"line":36},[33,165581,11830],{"class":47},[33,165583,73],{"class":39},[33,165585,120975],{"class":76},[33,165587,48],{"class":47},[14,165589,10276,165590,165592],{},[30,165591,33712],{}," 是空字典，不是空集合。",[14,165594,165595],{},"集合常用操作：",[23,165597,165599],{"className":31631,"code":165598,"language":31633,"meta":28,"style":28},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[30,165600,165601,165621,165625,165634,165643,165652],{"__ignoreMap":28},[33,165602,165603,165605,165607,165609,165611,165613,165615,165617,165619],{"class":35,"line":36},[33,165604,11830],{"class":47},[33,165606,73],{"class":39},[33,165608,5845],{"class":47},[33,165610,701],{"class":76},[33,165612,13686],{"class":47},[33,165614,707],{"class":76},[33,165616,13686],{"class":47},[33,165618,712],{"class":76},[33,165620,231],{"class":47},[33,165622,165623],{"class":35,"line":51},[33,165624,160],{"emptyLinePlaceholder":159},[33,165626,165627,165630,165632],{"class":35,"line":57},[33,165628,165629],{"class":47},"s.add(",[33,165631,717],{"class":76},[33,165633,884],{"class":47},[33,165635,165636,165639,165641],{"class":35,"line":64},[33,165637,165638],{"class":47},"s.remove(",[33,165640,707],{"class":76},[33,165642,884],{"class":47},[33,165644,165645,165648,165650],{"class":35,"line":83},[33,165646,165647],{"class":47},"s.discard(",[33,165649,77],{"class":76},[33,165651,884],{"class":47},[33,165653,165654,165656,165658,165660],{"class":35,"line":89},[33,165655,31668],{"class":76},[33,165657,345],{"class":47},[33,165659,1196],{"class":76},[33,165661,165662],{"class":47},"(s))\n",[14,165664,165665],{},"交并差：",[23,165667,165669],{"className":31631,"code":165668,"language":31633,"meta":28,"style":28},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[30,165670,165671,165691,165711,165715,165730,165743],{"__ignoreMap":28},[33,165672,165673,165675,165677,165679,165681,165683,165685,165687,165689],{"class":35,"line":36},[33,165674,12170],{"class":47},[33,165676,73],{"class":39},[33,165678,5845],{"class":47},[33,165680,701],{"class":76},[33,165682,13686],{"class":47},[33,165684,707],{"class":76},[33,165686,13686],{"class":47},[33,165688,712],{"class":76},[33,165690,231],{"class":47},[33,165692,165693,165695,165697,165699,165701,165703,165705,165707,165709],{"class":35,"line":51},[33,165694,12196],{"class":47},[33,165696,73],{"class":39},[33,165698,5845],{"class":47},[33,165700,712],{"class":76},[33,165702,13686],{"class":47},[33,165704,717],{"class":76},[33,165706,13686],{"class":47},[33,165708,722],{"class":76},[33,165710,231],{"class":47},[33,165712,165713],{"class":35,"line":57},[33,165714,160],{"emptyLinePlaceholder":159},[33,165716,165717,165719,165722,165724,165727],{"class":35,"line":64},[33,165718,31668],{"class":76},[33,165720,165721],{"class":47},"(a ",[33,165723,1062],{"class":39},[33,165725,165726],{"class":47}," b)  ",[33,165728,165729],{"class":60},"# 交集\n",[33,165731,165732,165734,165736,165738,165740],{"class":35,"line":83},[33,165733,31668],{"class":76},[33,165735,165721],{"class":47},[33,165737,2518],{"class":39},[33,165739,165726],{"class":47},[33,165741,165742],{"class":60},"# 并集\n",[33,165744,165745,165747,165749,165751,165753],{"class":35,"line":89},[33,165746,31668],{"class":76},[33,165748,165721],{"class":47},[33,165750,1199],{"class":39},[33,165752,165726],{"class":47},[33,165754,165755],{"class":60},"# 差集\n",[18,165757,165759],{"id":165758},"_610-字典dict","6.10 字典dict",[14,165761,165762],{},"字典通过 key-value 保存数据。",[23,165764,165766],{"className":31631,"code":165765,"language":31633,"meta":28,"style":28},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[30,165767,165768,165776,165786,165797,165807],{"__ignoreMap":28},[33,165769,165770,165772,165774],{"class":35,"line":36},[33,165771,150734],{"class":47},[33,165773,73],{"class":39},[33,165775,16823],{"class":47},[33,165777,165778,165780,165782,165784],{"class":35,"line":51},[33,165779,148273],{"class":119},[33,165781,52690],{"class":47},[33,165783,151141],{"class":119},[33,165785,32719],{"class":47},[33,165787,165788,165791,165793,165795],{"class":35,"line":57},[33,165789,165790],{"class":119},"    \"age\"",[33,165792,52690],{"class":47},[33,165794,2250],{"class":76},[33,165796,32719],{"class":47},[33,165798,165799,165802,165804],{"class":35,"line":64},[33,165800,165801],{"class":119},"    \"score\"",[33,165803,52690],{"class":47},[33,165805,165806],{"class":76},"95\n",[33,165808,165809],{"class":35,"line":83},[33,165810,231],{"class":47},[14,165812,165813],{},"获取值：",[23,165815,165817],{"className":31631,"code":165816,"language":31633,"meta":28,"style":28},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[30,165818,165819,165830],{"__ignoreMap":28},[33,165820,165821,165823,165826,165828],{"class":35,"line":36},[33,165822,31668],{"class":76},[33,165824,165825],{"class":47},"(student[",[33,165827,63932],{"class":119},[33,165829,1276],{"class":47},[33,165831,165832,165834,165837,165839],{"class":35,"line":51},[33,165833,31668],{"class":76},[33,165835,165836],{"class":47},"(student.get(",[33,165838,63932],{"class":119},[33,165840,31750],{"class":47},[14,165842,16639],{},[23,165844,165846],{"className":31631,"code":165845,"language":31633,"meta":28,"style":28},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[30,165847,165848,165861],{"__ignoreMap":28},[33,165849,165850,165852,165855,165858],{"class":35,"line":36},[33,165851,154112],{"class":47},[33,165853,165854],{"class":119},"\"address\"",[33,165856,165857],{"class":47},"]     ",[33,165859,165860],{"class":60},"# key不存在会报错\n",[33,165862,165863,165866,165868,165870],{"class":35,"line":51},[33,165864,165865],{"class":47},"student.get(",[33,165867,165854],{"class":119},[33,165869,14965],{"class":47},[33,165871,165872],{"class":60},"# key不存在返回None\n",[14,165874,165875],{},"设置默认值：",[23,165877,165879],{"className":31631,"code":165878,"language":31633,"meta":28,"style":28},"print(student.get(\"address\", \"未知\"))\n",[30,165880,165881],{"__ignoreMap":28},[33,165882,165883,165885,165887,165889,165891,165894],{"class":35,"line":36},[33,165884,31668],{"class":76},[33,165886,165836],{"class":47},[33,165888,165854],{"class":119},[33,165890,13686],{"class":47},[33,165892,165893],{"class":119},"\"未知\"",[33,165895,31750],{"class":47},[14,165897,165898],{},"新增和修改：",[23,165900,165902],{"className":31631,"code":165901,"language":31633,"meta":28,"style":28},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[30,165903,165904,165917],{"__ignoreMap":28},[33,165905,165906,165908,165910,165912,165914],{"class":35,"line":36},[33,165907,154112],{"class":47},[33,165909,70377],{"class":119},[33,165911,5840],{"class":47},[33,165913,73],{"class":39},[33,165915,165916],{"class":76}," 19\n",[33,165918,165919,165921,165923,165925,165927],{"class":35,"line":51},[33,165920,154112],{"class":47},[33,165922,165854],{"class":119},[33,165924,5840],{"class":47},[33,165926,73],{"class":39},[33,165928,165929],{"class":119}," \"北京\"\n",[14,165931,165932],{},"删除：",[23,165934,165936],{"className":31631,"code":165935,"language":31633,"meta":28,"style":28},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[30,165937,165938,165951,165961],{"__ignoreMap":28},[33,165939,165940,165942,165944,165947,165949],{"class":35,"line":36},[33,165941,156611],{"class":47},[33,165943,73],{"class":39},[33,165945,165946],{"class":47}," student.pop(",[33,165948,152725],{"class":119},[33,165950,884],{"class":47},[33,165952,165953,165955,165957,165959],{"class":35,"line":51},[33,165954,164636],{"class":39},[33,165956,153402],{"class":47},[33,165958,70377],{"class":119},[33,165960,34499],{"class":47},[33,165962,165963],{"class":35,"line":57},[33,165964,165965],{"class":47},"student.clear()\n",[18,165967,165969],{"id":165968},"_611-字典遍历","6.11 字典遍历",[14,165971,165972],{},"遍历 key：",[23,165974,165976],{"className":31631,"code":165975,"language":31633,"meta":28,"style":28},"for key in student:\n    print(key, student[key])\n",[30,165977,165978,165990],{"__ignoreMap":28},[33,165979,165980,165982,165985,165987],{"class":35,"line":36},[33,165981,4435],{"class":39},[33,165983,165984],{"class":47}," key ",[33,165986,27296],{"class":39},[33,165988,165989],{"class":47}," student:\n",[33,165991,165992,165994],{"class":35,"line":51},[33,165993,32552],{"class":76},[33,165995,165996],{"class":47},"(key, student[key])\n",[14,165998,165999],{},"遍历 value：",[23,166001,166003],{"className":31631,"code":166002,"language":31633,"meta":28,"style":28},"for value in student.values():\n    print(value)\n",[30,166004,166005,166017],{"__ignoreMap":28},[33,166006,166007,166009,166012,166014],{"class":35,"line":36},[33,166008,4435],{"class":39},[33,166010,166011],{"class":47}," value ",[33,166013,27296],{"class":39},[33,166015,166016],{"class":47}," student.values():\n",[33,166018,166019,166021],{"class":35,"line":51},[33,166020,32552],{"class":76},[33,166022,166023],{"class":47},"(value)\n",[14,166025,166026],{},"遍历 key 和 value：",[23,166028,166030],{"className":31631,"code":166029,"language":31633,"meta":28,"style":28},"for key, value in student.items():\n    print(key, value)\n",[30,166031,166032,166044],{"__ignoreMap":28},[33,166033,166034,166036,166039,166041],{"class":35,"line":36},[33,166035,4435],{"class":39},[33,166037,166038],{"class":47}," key, value ",[33,166040,27296],{"class":39},[33,166042,166043],{"class":47}," student.items():\n",[33,166045,166046,166048],{"class":35,"line":51},[33,166047,32552],{"class":76},[33,166049,166050],{"class":47},"(key, value)\n",[18,166052,166054],{"id":166053},"_612-嵌套容器","6.12 嵌套容器",[14,166056,166057],{},"列表中保存字典，是项目中最常见的结构之一。",[23,166059,166061],{"className":31631,"code":166060,"language":31633,"meta":28,"style":28},"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",[30,166062,166063,166071,166099,166127,166155,166159,166163,166173],{"__ignoreMap":28},[33,166064,166065,166067,166069],{"class":35,"line":36},[33,166066,160969],{"class":47},[33,166068,73],{"class":39},[33,166070,56700],{"class":47},[33,166072,166073,166075,166077,166079,166081,166083,166085,166087,166089,166091,166093,166095,166097],{"class":35,"line":51},[33,166074,149638],{"class":47},[33,166076,63932],{"class":119},[33,166078,52690],{"class":47},[33,166080,151141],{"class":119},[33,166082,13686],{"class":47},[33,166084,70377],{"class":119},[33,166086,52690],{"class":47},[33,166088,2250],{"class":76},[33,166090,13686],{"class":47},[33,166092,152725],{"class":119},[33,166094,52690],{"class":47},[33,166096,2584],{"class":76},[33,166098,6321],{"class":47},[33,166100,166101,166103,166105,166107,166109,166111,166113,166115,166117,166119,166121,166123,166125],{"class":35,"line":57},[33,166102,149638],{"class":47},[33,166104,63932],{"class":119},[33,166106,52690],{"class":47},[33,166108,152189],{"class":119},[33,166110,13686],{"class":47},[33,166112,70377],{"class":119},[33,166114,52690],{"class":47},[33,166116,2225],{"class":76},[33,166118,13686],{"class":47},[33,166120,152725],{"class":119},[33,166122,52690],{"class":47},[33,166124,2410],{"class":76},[33,166126,6321],{"class":47},[33,166128,166129,166131,166133,166135,166137,166139,166141,166143,166145,166147,166149,166151,166153],{"class":35,"line":64},[33,166130,149638],{"class":47},[33,166132,63932],{"class":119},[33,166134,52690],{"class":47},[33,166136,160984],{"class":119},[33,166138,13686],{"class":47},[33,166140,70377],{"class":119},[33,166142,52690],{"class":47},[33,166144,2275],{"class":76},[33,166146,13686],{"class":47},[33,166148,152725],{"class":119},[33,166150,52690],{"class":47},[33,166152,2012],{"class":76},[33,166154,6321],{"class":47},[33,166156,166157],{"class":35,"line":83},[33,166158,34499],{"class":47},[33,166160,166161],{"class":35,"line":89},[33,166162,160],{"emptyLinePlaceholder":159},[33,166164,166165,166167,166169,166171],{"class":35,"line":98},[33,166166,4435],{"class":39},[33,166168,153390],{"class":47},[33,166170,27296],{"class":39},[33,166172,153395],{"class":47},[33,166174,166175,166177,166179,166181,166184,166186],{"class":35,"line":110},[33,166176,32552],{"class":76},[33,166178,165825],{"class":47},[33,166180,63932],{"class":119},[33,166182,166183],{"class":47},"], student[",[33,166185,152725],{"class":119},[33,166187,1276],{"class":47},[14,166189,166190],{},"统计平均分：",[23,166192,166194],{"className":31631,"code":166193,"language":31633,"meta":28,"style":28},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[30,166195,166196,166204,166208,166218,166230,166234,166249],{"__ignoreMap":28},[33,166197,166198,166200,166202],{"class":35,"line":36},[33,166199,158513],{"class":47},[33,166201,73],{"class":39},[33,166203,48586],{"class":76},[33,166205,166206],{"class":35,"line":51},[33,166207,160],{"emptyLinePlaceholder":159},[33,166209,166210,166212,166214,166216],{"class":35,"line":57},[33,166211,4435],{"class":39},[33,166213,153390],{"class":47},[33,166215,27296],{"class":39},[33,166217,153395],{"class":47},[33,166219,166220,166222,166224,166226,166228],{"class":35,"line":64},[33,166221,160560],{"class":47},[33,166223,10728],{"class":39},[33,166225,153402],{"class":47},[33,166227,152725],{"class":119},[33,166229,34499],{"class":47},[33,166231,166232],{"class":35,"line":83},[33,166233,160],{"emptyLinePlaceholder":159},[33,166235,166236,166238,166240,166242,166244,166246],{"class":35,"line":89},[33,166237,165027],{"class":47},[33,166239,73],{"class":39},[33,166241,165032],{"class":47},[33,166243,2184],{"class":39},[33,166245,1169],{"class":76},[33,166247,166248],{"class":47},"(students)\n",[33,166250,166251,166253,166255,166257,166259,166261,166263,166265,166267,166269],{"class":35,"line":98},[33,166252,31668],{"class":76},[33,166254,345],{"class":47},[33,166256,1677],{"class":39},[33,166258,165050],{"class":119},[33,166260,698],{"class":76},[33,166262,165055],{"class":47},[33,166264,158412],{"class":39},[33,166266,2542],{"class":76},[33,166268,1866],{"class":119},[33,166270,884],{"class":47},[14,166272,166273],{},"查找学生：",[23,166275,166277],{"className":31631,"code":166276,"language":31633,"meta":28,"style":28},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[30,166278,166279,166294,166298,166308,166322,166328,166332,166338],{"__ignoreMap":28},[33,166280,166281,166283,166285,166287,166289,166292],{"class":35,"line":36},[33,166282,112831],{"class":47},[33,166284,73],{"class":39},[33,166286,61858],{"class":76},[33,166288,345],{"class":47},[33,166290,166291],{"class":119},"\"请输入学生姓名:\"",[33,166293,884],{"class":47},[33,166295,166296],{"class":35,"line":51},[33,166297,160],{"emptyLinePlaceholder":159},[33,166299,166300,166302,166304,166306],{"class":35,"line":57},[33,166301,4435],{"class":39},[33,166303,153390],{"class":47},[33,166305,27296],{"class":39},[33,166307,153395],{"class":47},[33,166309,166310,166312,166314,166316,166318,166320],{"class":35,"line":64},[33,166311,4509],{"class":39},[33,166313,153402],{"class":47},[33,166315,63932],{"class":119},[33,166317,5840],{"class":47},[33,166319,4359],{"class":39},[33,166321,161685],{"class":47},[33,166323,166324,166326],{"class":35,"line":83},[33,166325,33704],{"class":76},[33,166327,151295],{"class":47},[33,166329,166330],{"class":35,"line":89},[33,166331,32880],{"class":39},[33,166333,166334,166336],{"class":35,"line":98},[33,166335,3142],{"class":39},[33,166337,5141],{"class":47},[33,166339,166340,166342,166344,166347],{"class":35,"line":110},[33,166341,32552],{"class":76},[33,166343,345],{"class":47},[33,166345,166346],{"class":119},"\"没有找到\"",[33,166348,884],{"class":47},[18,166350,166352],{"id":166351},"_613-容器通用操作","6.13 容器通用操作",[14,166354,166355],{},"长度：",[23,166357,166359],{"className":31631,"code":166358,"language":31633,"meta":28,"style":28},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[30,166360,166361,166380,166390],{"__ignoreMap":28},[33,166362,166363,166365,166368,166370,166372,166374,166376,166378],{"class":35,"line":36},[33,166364,1196],{"class":76},[33,166366,166367],{"class":47},"([",[33,166369,701],{"class":76},[33,166371,13686],{"class":47},[33,166373,707],{"class":76},[33,166375,13686],{"class":47},[33,166377,712],{"class":76},[33,166379,1276],{"class":47},[33,166381,166382,166384,166386,166388],{"class":35,"line":51},[33,166383,1196],{"class":76},[33,166385,345],{"class":47},[33,166387,157133],{"class":119},[33,166389,884],{"class":47},[33,166391,166392,166394,166397,166399,166401,166403],{"class":35,"line":57},[33,166393,1196],{"class":76},[33,166395,166396],{"class":47},"({",[33,166398,63932],{"class":119},[33,166400,52690],{"class":47},[33,166402,151141],{"class":119},[33,166404,166405],{"class":47},"})\n",[14,166407,166408],{},"最大最小：",[23,166410,166412],{"className":31631,"code":166411,"language":31633,"meta":28,"style":28},"max([1, 2, 3])\nmin([1, 2, 3])\n",[30,166413,166414,166432],{"__ignoreMap":28},[33,166415,166416,166418,166420,166422,166424,166426,166428,166430],{"class":35,"line":36},[33,166417,7402],{"class":76},[33,166419,166367],{"class":47},[33,166421,701],{"class":76},[33,166423,13686],{"class":47},[33,166425,707],{"class":76},[33,166427,13686],{"class":47},[33,166429,712],{"class":76},[33,166431,1276],{"class":47},[33,166433,166434,166437,166439,166441,166443,166445,166447,166449],{"class":35,"line":51},[33,166435,166436],{"class":76},"min",[33,166438,166367],{"class":47},[33,166440,701],{"class":76},[33,166442,13686],{"class":47},[33,166444,707],{"class":76},[33,166446,13686],{"class":47},[33,166448,712],{"class":76},[33,166450,1276],{"class":47},[14,166452,166453],{},"求和：",[23,166455,166457],{"className":31631,"code":166456,"language":31633,"meta":28,"style":28},"sum([1, 2, 3])\n",[30,166458,166459],{"__ignoreMap":28},[33,166460,166461,166464,166466,166468,166470,166472,166474,166476],{"class":35,"line":36},[33,166462,166463],{"class":76},"sum",[33,166465,166367],{"class":47},[33,166467,701],{"class":76},[33,166469,13686],{"class":47},[33,166471,707],{"class":76},[33,166473,13686],{"class":47},[33,166475,712],{"class":76},[33,166477,1276],{"class":47},[14,166479,164724],{},[23,166481,166483],{"className":31631,"code":166482,"language":31633,"meta":28,"style":28},"sorted([3, 1, 2])\n",[30,166484,166485],{"__ignoreMap":28},[33,166486,166487,166490,166492,166494,166496,166498,166500,166502],{"class":35,"line":36},[33,166488,166489],{"class":76},"sorted",[33,166491,166367],{"class":47},[33,166493,712],{"class":76},[33,166495,13686],{"class":47},[33,166497,701],{"class":76},[33,166499,13686],{"class":47},[33,166501,707],{"class":76},[33,166503,1276],{"class":47},[14,166505,166506],{},"类型转换：",[23,166508,166510],{"className":31631,"code":166509,"language":31633,"meta":28,"style":28},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[30,166511,166512,166522,166540],{"__ignoreMap":28},[33,166513,166514,166516,166518,166520],{"class":35,"line":36},[33,166515,155323],{"class":76},[33,166517,345],{"class":47},[33,166519,157133],{"class":119},[33,166521,884],{"class":47},[33,166523,166524,166526,166528,166530,166532,166534,166536,166538],{"class":35,"line":51},[33,166525,156518],{"class":76},[33,166527,166367],{"class":47},[33,166529,701],{"class":76},[33,166531,13686],{"class":47},[33,166533,707],{"class":76},[33,166535,13686],{"class":47},[33,166537,712],{"class":76},[33,166539,1276],{"class":47},[33,166541,166542,166544,166546,166548,166550,166552,166554,166556,166558,166560],{"class":35,"line":57},[33,166543,156543],{"class":76},[33,166545,166367],{"class":47},[33,166547,701],{"class":76},[33,166549,13686],{"class":47},[33,166551,701],{"class":76},[33,166553,13686],{"class":47},[33,166555,707],{"class":76},[33,166557,13686],{"class":47},[33,166559,712],{"class":76},[33,166561,1276],{"class":47},[14,166563,166564],{},"成员判断：",[23,166566,166568],{"className":31631,"code":166567,"language":31633,"meta":28,"style":28},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[30,166569,166570,166587,166611],{"__ignoreMap":28},[33,166571,166572,166574,166576,166579,166582,166585],{"class":35,"line":36},[33,166573,31668],{"class":76},[33,166575,345],{"class":47},[33,166577,166578],{"class":119},"\"a\"",[33,166580,166581],{"class":39}," in",[33,166583,166584],{"class":119}," \"abc\"",[33,166586,884],{"class":47},[33,166588,166589,166591,166593,166595,166597,166599,166601,166603,166605,166607,166609],{"class":35,"line":51},[33,166590,31668],{"class":76},[33,166592,345],{"class":47},[33,166594,701],{"class":76},[33,166596,166581],{"class":39},[33,166598,53479],{"class":47},[33,166600,701],{"class":76},[33,166602,13686],{"class":47},[33,166604,707],{"class":76},[33,166606,13686],{"class":47},[33,166608,712],{"class":76},[33,166610,1276],{"class":47},[33,166612,166613,166615,166617,166619,166621,166623,166625,166627,166629],{"class":35,"line":57},[33,166614,31668],{"class":76},[33,166616,345],{"class":47},[33,166618,63932],{"class":119},[33,166620,166581],{"class":39},[33,166622,5845],{"class":47},[33,166624,63932],{"class":119},[33,166626,52690],{"class":47},[33,166628,151141],{"class":119},[33,166630,166405],{"class":47},[18,166632,166634],{"id":166633},"_614-推导式","6.14 推导式",[14,166636,166637],{},"推导式用于快速生成容器。",[14,166639,166640],{},"列表推导式：",[23,166642,166644],{"className":31631,"code":166643,"language":31633,"meta":28,"style":28},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[30,166645,166646,166673],{"__ignoreMap":28},[33,166647,166648,166650,166652,166655,166657,166659,166661,166663,166665,166667,166669,166671],{"class":35,"line":36},[33,166649,165353],{"class":47},[33,166651,73],{"class":39},[33,166653,166654],{"class":47}," [i ",[33,166656,4435],{"class":39},[33,166658,10689],{"class":47},[33,166660,27296],{"class":39},[33,166662,33696],{"class":76},[33,166664,345],{"class":47},[33,166666,701],{"class":76},[33,166668,13686],{"class":47},[33,166670,727],{"class":76},[33,166672,98553],{"class":47},[33,166674,166675,166677],{"class":35,"line":51},[33,166676,31668],{"class":76},[33,166678,165569],{"class":47},[14,166680,166681],{},"带条件：",[23,166683,166685],{"className":31631,"code":166684,"language":31633,"meta":28,"style":28},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[30,166686,166687,166728],{"__ignoreMap":28},[33,166688,166689,166692,166694,166696,166698,166700,166702,166704,166706,166708,166710,166712,166714,166716,166718,166720,166722,166724,166726],{"class":35,"line":36},[33,166690,166691],{"class":47},"even_nums ",[33,166693,73],{"class":39},[33,166695,166654],{"class":47},[33,166697,4435],{"class":39},[33,166699,10689],{"class":47},[33,166701,27296],{"class":39},[33,166703,33696],{"class":76},[33,166705,345],{"class":47},[33,166707,701],{"class":76},[33,166709,13686],{"class":47},[33,166711,1948],{"class":76},[33,166713,14965],{"class":47},[33,166715,2987],{"class":39},[33,166717,10689],{"class":47},[33,166719,1939],{"class":39},[33,166721,16006],{"class":76},[33,166723,102812],{"class":39},[33,166725,5492],{"class":76},[33,166727,34499],{"class":47},[33,166729,166730,166732],{"class":35,"line":51},[33,166731,31668],{"class":76},[33,166733,166734],{"class":47},"(even_nums)\n",[14,166736,166737],{},"字典推导式：",[23,166739,166741],{"className":31631,"code":166740,"language":31633,"meta":28,"style":28},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[30,166742,166743,166777],{"__ignoreMap":28},[33,166744,166745,166748,166750,166753,166755,166757,166760,166762,166764,166766,166768,166770,166772,166774],{"class":35,"line":36},[33,166746,166747],{"class":47},"squares ",[33,166749,73],{"class":39},[33,166751,166752],{"class":47}," {i: i ",[33,166754,11912],{"class":39},[33,166756,16006],{"class":76},[33,166758,166759],{"class":39}," for",[33,166761,10689],{"class":47},[33,166763,27296],{"class":39},[33,166765,33696],{"class":76},[33,166767,345],{"class":47},[33,166769,701],{"class":76},[33,166771,13686],{"class":47},[33,166773,727],{"class":76},[33,166775,166776],{"class":47},")}\n",[33,166778,166779,166781],{"class":35,"line":51},[33,166780,31668],{"class":76},[33,166782,166783],{"class":47},"(squares)\n",[14,166785,166786],{},"集合推导式：",[23,166788,166790],{"className":31631,"code":166789,"language":31633,"meta":28,"style":28},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[30,166791,166792,166813],{"__ignoreMap":28},[33,166793,166794,166797,166799,166802,166804,166806,166808,166811],{"class":35,"line":36},[33,166795,166796],{"class":47},"chars ",[33,166798,73],{"class":39},[33,166800,166801],{"class":47}," {ch ",[33,166803,4435],{"class":39},[33,166805,160945],{"class":47},[33,166807,27296],{"class":39},[33,166809,166810],{"class":119}," \"hello\"",[33,166812,231],{"class":47},[33,166814,166815,166817],{"class":35,"line":51},[33,166816,31668],{"class":76},[33,166818,166819],{"class":47},"(chars)\n",[14,166821,166822],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[18,166824,166826],{"id":166825},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[23,166828,166830],{"className":31631,"code":166829,"language":31633,"meta":28,"style":28},"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",[30,166831,166832,166840,166860,166880,166900,166920,166924,166928,166936,166950,166959,166963,166973,166985,166989,167009,167018,167022,167038,167043,167047,167061,167065,167087,167123],{"__ignoreMap":28},[33,166833,166834,166836,166838],{"class":35,"line":36},[33,166835,160969],{"class":47},[33,166837,73],{"class":39},[33,166839,56700],{"class":47},[33,166841,166842,166844,166846,166848,166850,166852,166854,166856,166858],{"class":35,"line":51},[33,166843,149638],{"class":47},[33,166845,63932],{"class":119},[33,166847,52690],{"class":47},[33,166849,151141],{"class":119},[33,166851,13686],{"class":47},[33,166853,152725],{"class":119},[33,166855,52690],{"class":47},[33,166857,2584],{"class":76},[33,166859,6321],{"class":47},[33,166861,166862,166864,166866,166868,166870,166872,166874,166876,166878],{"class":35,"line":57},[33,166863,149638],{"class":47},[33,166865,63932],{"class":119},[33,166867,52690],{"class":47},[33,166869,152189],{"class":119},[33,166871,13686],{"class":47},[33,166873,152725],{"class":119},[33,166875,52690],{"class":47},[33,166877,2410],{"class":76},[33,166879,6321],{"class":47},[33,166881,166882,166884,166886,166888,166890,166892,166894,166896,166898],{"class":35,"line":64},[33,166883,149638],{"class":47},[33,166885,63932],{"class":119},[33,166887,52690],{"class":47},[33,166889,160984],{"class":119},[33,166891,13686],{"class":47},[33,166893,152725],{"class":119},[33,166895,52690],{"class":47},[33,166897,2012],{"class":76},[33,166899,6321],{"class":47},[33,166901,166902,166904,166906,166908,166910,166912,166914,166916,166918],{"class":35,"line":83},[33,166903,149638],{"class":47},[33,166905,63932],{"class":119},[33,166907,52690],{"class":47},[33,166909,164563],{"class":119},[33,166911,13686],{"class":47},[33,166913,152725],{"class":119},[33,166915,52690],{"class":47},[33,166917,2481],{"class":76},[33,166919,6321],{"class":47},[33,166921,166922],{"class":35,"line":89},[33,166923,34499],{"class":47},[33,166925,166926],{"class":35,"line":98},[33,166927,160],{"emptyLinePlaceholder":159},[33,166929,166930,166932,166934],{"class":35,"line":110},[33,166931,158513],{"class":47},[33,166933,73],{"class":39},[33,166935,48586],{"class":76},[33,166937,166938,166941,166943,166946,166948],{"class":35,"line":134},[33,166939,166940],{"class":47},"max_student ",[33,166942,73],{"class":39},[33,166944,166945],{"class":47}," students[",[33,166947,766],{"class":76},[33,166949,34499],{"class":47},[33,166951,166952,166955,166957],{"class":35,"line":156},[33,166953,166954],{"class":47},"passed ",[33,166956,73],{"class":39},[33,166958,53091],{"class":47},[33,166960,166961],{"class":35,"line":163},[33,166962,160],{"emptyLinePlaceholder":159},[33,166964,166965,166967,166969,166971],{"class":35,"line":169},[33,166966,4435],{"class":39},[33,166968,153390],{"class":47},[33,166970,27296],{"class":39},[33,166972,153395],{"class":47},[33,166974,166975,166977,166979,166981,166983],{"class":35,"line":175},[33,166976,160560],{"class":47},[33,166978,10728],{"class":39},[33,166980,153402],{"class":47},[33,166982,152725],{"class":119},[33,166984,34499],{"class":47},[33,166986,166987],{"class":35,"line":181},[33,166988,160],{"emptyLinePlaceholder":159},[33,166990,166991,166993,166995,166997,166999,167001,167004,167006],{"class":35,"line":196},[33,166992,4509],{"class":39},[33,166994,153402],{"class":47},[33,166996,152725],{"class":119},[33,166998,5840],{"class":47},[33,167000,1265],{"class":39},[33,167002,167003],{"class":47}," max_student[",[33,167005,152725],{"class":119},[33,167007,167008],{"class":47},"]:\n",[33,167010,167011,167014,167016],{"class":35,"line":213},[33,167012,167013],{"class":47},"        max_student ",[33,167015,73],{"class":39},[33,167017,153418],{"class":47},[33,167019,167020],{"class":35,"line":228},[33,167021,160],{"emptyLinePlaceholder":159},[33,167023,167024,167026,167028,167030,167032,167034,167036],{"class":35,"line":1345},[33,167025,4509],{"class":39},[33,167027,153402],{"class":47},[33,167029,152725],{"class":119},[33,167031,5840],{"class":47},[33,167033,3151],{"class":39},[33,167035,159090],{"class":76},[33,167037,5141],{"class":47},[33,167039,167040],{"class":35,"line":1350},[33,167041,167042],{"class":47},"        passed.append(student)\n",[33,167044,167045],{"class":35,"line":1359},[33,167046,160],{"emptyLinePlaceholder":159},[33,167048,167049,167051,167053,167055,167057,167059],{"class":35,"line":1364},[33,167050,165027],{"class":47},[33,167052,73],{"class":39},[33,167054,165032],{"class":47},[33,167056,2184],{"class":39},[33,167058,1169],{"class":76},[33,167060,166248],{"class":47},[33,167062,167063],{"class":35,"line":1370},[33,167064,160],{"emptyLinePlaceholder":159},[33,167066,167067,167069,167071,167073,167075,167077,167079,167081,167083,167085],{"class":35,"line":1425},[33,167068,31668],{"class":76},[33,167070,345],{"class":47},[33,167072,1677],{"class":39},[33,167074,165050],{"class":119},[33,167076,698],{"class":76},[33,167078,165055],{"class":47},[33,167080,158412],{"class":39},[33,167082,2542],{"class":76},[33,167084,1866],{"class":119},[33,167086,884],{"class":47},[33,167088,167089,167091,167093,167095,167098,167100,167103,167105,167107,167109,167111,167113,167115,167117,167119,167121],{"class":35,"line":1438},[33,167090,31668],{"class":76},[33,167092,345],{"class":47},[33,167094,1677],{"class":39},[33,167096,167097],{"class":119},"\"最高分学生:",[33,167099,698],{"class":76},[33,167101,167102],{"class":47},"max_student[",[33,167104,154135],{"class":119},[33,167106,693],{"class":47},[33,167108,2542],{"class":76},[33,167110,5845],{"class":76},[33,167112,167102],{"class":47},[33,167114,154173],{"class":119},[33,167116,693],{"class":47},[33,167118,2542],{"class":76},[33,167120,1866],{"class":119},[33,167122,884],{"class":47},[33,167124,167125,167127,167129,167131,167134,167137,167140,167142,167144],{"class":35,"line":1451},[33,167126,31668],{"class":76},[33,167128,345],{"class":47},[33,167130,1677],{"class":39},[33,167132,167133],{"class":119},"\"及格人数:",[33,167135,167136],{"class":76},"{len",[33,167138,167139],{"class":47},"(passed)",[33,167141,2542],{"class":76},[33,167143,1866],{"class":119},[33,167145,884],{"class":47},[18,167147,167149],{"id":167148},"_616-易错点","6.16 易错点",[574,167151,167152,167155,167158,167161,167167,167176],{},[564,167153,167154],{},"列表可变，元组和字符串不可变。",[564,167156,167157],{},"切片结束位置不包含。",[564,167159,167160],{},"字典通过 key 取值，不是通过索引。",[564,167162,167163,167164,29638],{},"空集合要用 ",[30,167165,167166],{},"set()",[564,167168,105619,167169,167172,167173,29638],{},[30,167170,167171],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[30,167174,167175],{},"get()",[564,167177,167178],{},"嵌套容器要先看清楚每一层是什么类型。",[18,167180,167182],{"id":167181},"_617-本章练习","6.17 本章练习",[574,167184,167185,167188,167191,167194,167197],{},[564,167186,167187],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[564,167189,167190],{},"输入一句话，统计每个字符出现次数。",[564,167192,167193],{},"使用集合去除列表中的重复元素。",[564,167195,167196],{},"使用字典保存一个学生的信息，并实现修改成绩。",[564,167198,167199],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1544,167201,167202],{},"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":28,"searchDepth":51,"depth":51,"links":167204},[167205,167206,167207,167208,167209,167210,167211,167212,167213,167214,167215,167216,167217,167218,167219,167220,167221],{"id":164185,"depth":51,"text":164186},{"id":164302,"depth":51,"text":164303},{"id":164392,"depth":51,"text":164393},{"id":164516,"depth":51,"text":164517},{"id":164879,"depth":51,"text":164880},{"id":165066,"depth":51,"text":165067},{"id":165185,"depth":51,"text":165186},{"id":165327,"depth":51,"text":165328},{"id":165514,"depth":51,"text":165515},{"id":165758,"depth":51,"text":165759},{"id":165968,"depth":51,"text":165969},{"id":166053,"depth":51,"text":166054},{"id":166351,"depth":51,"text":166352},{"id":166633,"depth":51,"text":166634},{"id":166825,"depth":51,"text":166826},{"id":167148,"depth":51,"text":167149},{"id":167181,"depth":51,"text":167182},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164177,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167228,"title":167229,"body":167230,"description":24628,"extension":1557,"meta":169402,"navigation":159,"path":169403,"seo":169404,"stem":169405,"__hash__":169406},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167231,"toc":169377},[167232,167235,167239,167242,167322,167325,167346,167349,167353,167356,167418,167421,167438,167442,167445,167490,167492,167500,167504,167507,167589,167592,167595,167620,167623,167646,167650,167653,167655,167717,167720,167722,167773,167777,167781,167787,167892,167896,167902,167973,167977,167980,168048,168051,168131,168135,168141,168177,168180,168183,168293,168299,168303,168306,168378,168381,168385,168389,168394,168456,168460,168465,168533,168537,168542,168658,168662,168665,168745,168748,168752,168755,168859,168861,168876,168879,168883,169021,169029,169033,169035,169046,169048,169306,169310,169342,169346,169374],[10,167233,167229],{"id":167234},"_7-函数进阶",[18,167236,167238],{"id":167237},"_71-多返回值","7.1 多返回值",[14,167240,167241],{},"Python 函数可以返回多个值，本质上返回的是元组。",[23,167243,167245],{"className":31631,"code":167244,"language":31633,"meta":28,"style":28},"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",[30,167246,167247,167256,167264,167272,167281,167288,167292,167296,167305,167311],{"__ignoreMap":28},[33,167248,167249,167251,167254],{"class":35,"line":36},[33,167250,33200],{"class":39},[33,167252,167253],{"class":43}," get_info",[33,167255,33206],{"class":47},[33,167257,167258,167260,167262],{"class":35,"line":51},[33,167259,153623],{"class":47},[33,167261,73],{"class":39},[33,167263,150606],{"class":119},[33,167265,167266,167268,167270],{"class":35,"line":57},[33,167267,153639],{"class":47},[33,167269,73],{"class":39},[33,167271,147804],{"class":76},[33,167273,167274,167276,167278],{"class":35,"line":64},[33,167275,153654],{"class":47},[33,167277,73],{"class":39},[33,167279,167280],{"class":76}," 95\n",[33,167282,167283,167285],{"class":35,"line":83},[33,167284,5489],{"class":39},[33,167286,167287],{"class":47}," name, age, score\n",[33,167289,167290],{"class":35,"line":89},[33,167291,160],{"emptyLinePlaceholder":159},[33,167293,167294],{"class":35,"line":98},[33,167295,160],{"emptyLinePlaceholder":159},[33,167297,167298,167300,167302],{"class":35,"line":110},[33,167299,162559],{"class":47},[33,167301,73],{"class":39},[33,167303,167304],{"class":47}," get_info()\n",[33,167306,167307,167309],{"class":35,"line":134},[33,167308,31668],{"class":76},[33,167310,77838],{"class":47},[33,167312,167313,167315,167317,167319],{"class":35,"line":156},[33,167314,31668],{"class":76},[33,167316,345],{"class":47},[33,167318,104360],{"class":76},[33,167320,167321],{"class":47},"(result))\n",[14,167323,167324],{},"可以直接解包：",[23,167326,167328],{"className":31631,"code":167327,"language":31633,"meta":28,"style":28},"name, age, score = get_info()\nprint(name, age, score)\n",[30,167329,167330,167339],{"__ignoreMap":28},[33,167331,167332,167335,167337],{"class":35,"line":36},[33,167333,167334],{"class":47},"name, age, score ",[33,167336,73],{"class":39},[33,167338,167304],{"class":47},[33,167340,167341,167343],{"class":35,"line":51},[33,167342,31668],{"class":76},[33,167344,167345],{"class":47},"(name, age, score)\n",[14,167347,167348],{},"返回多个值适合函数需要同时给出多个结果时使用。",[18,167350,167352],{"id":167351},"_72-位置参数","7.2 位置参数",[14,167354,167355],{},"位置参数按顺序传递。",[23,167357,167359],{"className":31631,"code":167358,"language":31633,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[30,167360,167361,167369,167397,167401,167405],{"__ignoreMap":28},[33,167362,167363,167365,167367],{"class":35,"line":36},[33,167364,33200],{"class":39},[33,167366,150625],{"class":43},[33,167368,150628],{"class":47},[33,167370,167371,167373,167375,167377,167379,167381,167383,167385,167387,167389,167391,167393,167395],{"class":35,"line":51},[33,167372,32552],{"class":76},[33,167374,345],{"class":47},[33,167376,1677],{"class":39},[33,167378,150639],{"class":119},[33,167380,698],{"class":76},[33,167382,81063],{"class":47},[33,167384,2542],{"class":76},[33,167386,150648],{"class":119},[33,167388,698],{"class":76},[33,167390,71474],{"class":47},[33,167392,2542],{"class":76},[33,167394,150657],{"class":119},[33,167396,884],{"class":47},[33,167398,167399],{"class":35,"line":57},[33,167400,160],{"emptyLinePlaceholder":159},[33,167402,167403],{"class":35,"line":64},[33,167404,160],{"emptyLinePlaceholder":159},[33,167406,167407,167410,167412,167414,167416],{"class":35,"line":83},[33,167408,167409],{"class":47},"introduce(",[33,167411,151141],{"class":119},[33,167413,13686],{"class":47},[33,167415,2250],{"class":76},[33,167417,884],{"class":47},[14,167419,167420],{},"顺序错了就会得到错误含义：",[23,167422,167424],{"className":31631,"code":167423,"language":31633,"meta":28,"style":28},"introduce(18, \"小明\")\n",[30,167425,167426],{"__ignoreMap":28},[33,167427,167428,167430,167432,167434,167436],{"class":35,"line":36},[33,167429,167409],{"class":47},[33,167431,2250],{"class":76},[33,167433,13686],{"class":47},[33,167435,151141],{"class":119},[33,167437,884],{"class":47},[18,167439,167441],{"id":167440},"_73-关键字参数","7.3 关键字参数",[14,167443,167444],{},"关键字参数按参数名传递。",[23,167446,167448],{"className":31631,"code":167447,"language":31633,"meta":28,"style":28},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[30,167449,167450,167470],{"__ignoreMap":28},[33,167451,167452,167454,167456,167458,167460,167462,167464,167466,167468],{"class":35,"line":36},[33,167453,167409],{"class":47},[33,167455,81063],{"class":955},[33,167457,73],{"class":39},[33,167459,151141],{"class":119},[33,167461,13686],{"class":47},[33,167463,71474],{"class":955},[33,167465,73],{"class":39},[33,167467,2250],{"class":76},[33,167469,884],{"class":47},[33,167471,167472,167474,167476,167478,167480,167482,167484,167486,167488],{"class":35,"line":51},[33,167473,167409],{"class":47},[33,167475,71474],{"class":955},[33,167477,73],{"class":39},[33,167479,2250],{"class":76},[33,167481,13686],{"class":47},[33,167483,81063],{"class":955},[33,167485,73],{"class":39},[33,167487,151141],{"class":119},[33,167489,884],{"class":47},[14,167491,119187],{},[574,167493,167494,167497],{},[564,167495,167496],{},"顺序不容易错。",[564,167498,167499],{},"调用时可读性更强。",[18,167501,167503],{"id":167502},"_74-默认参数","7.4 默认参数",[14,167505,167506],{},"默认参数给参数设置默认值。",[23,167508,167510],{"className":31631,"code":167509,"language":31633,"meta":28,"style":28},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[30,167511,167512,167528,167558,167562,167566,167576],{"__ignoreMap":28},[33,167513,167514,167516,167518,167521,167523,167526],{"class":35,"line":36},[33,167515,33200],{"class":39},[33,167517,123346],{"class":43},[33,167519,167520],{"class":47},"(host, port",[33,167522,73],{"class":39},[33,167524,167525],{"class":76},"3306",[33,167527,32039],{"class":47},[33,167529,167530,167532,167534,167536,167539,167541,167543,167545,167547,167549,167552,167554,167556],{"class":35,"line":51},[33,167531,32552],{"class":76},[33,167533,345],{"class":47},[33,167535,1677],{"class":39},[33,167537,167538],{"class":119},"\"连接",[33,167540,698],{"class":76},[33,167542,28648],{"class":47},[33,167544,2542],{"class":76},[33,167546,2458],{"class":119},[33,167548,698],{"class":76},[33,167550,167551],{"class":47},"port",[33,167553,2542],{"class":76},[33,167555,1866],{"class":119},[33,167557,884],{"class":47},[33,167559,167560],{"class":35,"line":57},[33,167561,160],{"emptyLinePlaceholder":159},[33,167563,167564],{"class":35,"line":64},[33,167565,160],{"emptyLinePlaceholder":159},[33,167567,167568,167571,167574],{"class":35,"line":83},[33,167569,167570],{"class":47},"connect(",[33,167572,167573],{"class":119},"\"localhost\"",[33,167575,884],{"class":47},[33,167577,167578,167580,167582,167584,167587],{"class":35,"line":89},[33,167579,167570],{"class":47},[33,167581,167573],{"class":119},[33,167583,13686],{"class":47},[33,167585,167586],{"class":76},"6379",[33,167588,884],{"class":47},[14,167590,167591],{},"注意：默认参数必须放在非默认参数后面。",[14,167593,167594],{},"错误：",[23,167596,167598],{"className":31631,"code":167597,"language":31633,"meta":28,"style":28},"def connect(port=3306, host):\n    pass\n",[30,167599,167600,167616],{"__ignoreMap":28},[33,167601,167602,167604,167606,167609,167611,167613],{"class":35,"line":36},[33,167603,33200],{"class":39},[33,167605,123346],{"class":43},[33,167607,167608],{"class":47},"(port",[33,167610,73],{"class":39},[33,167612,167525],{"class":76},[33,167614,167615],{"class":47},", host):\n",[33,167617,167618],{"class":35,"line":51},[33,167619,150790],{"class":39},[14,167621,167622],{},"正确：",[23,167624,167626],{"className":31631,"code":167625,"language":31633,"meta":28,"style":28},"def connect(host, port=3306):\n    pass\n",[30,167627,167628,167642],{"__ignoreMap":28},[33,167629,167630,167632,167634,167636,167638,167640],{"class":35,"line":36},[33,167631,33200],{"class":39},[33,167633,123346],{"class":43},[33,167635,167520],{"class":47},[33,167637,73],{"class":39},[33,167639,167525],{"class":76},[33,167641,32039],{"class":47},[33,167643,167644],{"class":35,"line":51},[33,167645,150790],{"class":39},[18,167647,167649],{"id":167648},"_75-默认参数的坑","7.5 默认参数的坑",[14,167651,167652],{},"不要使用可变对象作为默认参数。",[14,167654,158876],{},[23,167656,167658],{"className":31631,"code":167657,"language":31633,"meta":28,"style":28},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[30,167659,167660,167675,167680,167687,167691,167695,167706],{"__ignoreMap":28},[33,167661,167662,167664,167667,167670,167672],{"class":35,"line":36},[33,167663,33200],{"class":39},[33,167665,167666],{"class":43}," add_item",[33,167668,167669],{"class":47},"(item, items",[33,167671,73],{"class":39},[33,167673,167674],{"class":47},"[]):\n",[33,167676,167677],{"class":35,"line":51},[33,167678,167679],{"class":47},"    items.append(item)\n",[33,167681,167682,167684],{"class":35,"line":57},[33,167683,5489],{"class":39},[33,167685,167686],{"class":47}," items\n",[33,167688,167689],{"class":35,"line":64},[33,167690,160],{"emptyLinePlaceholder":159},[33,167692,167693],{"class":35,"line":83},[33,167694,160],{"emptyLinePlaceholder":159},[33,167696,167697,167699,167702,167704],{"class":35,"line":89},[33,167698,31668],{"class":76},[33,167700,167701],{"class":47},"(add_item(",[33,167703,166578],{"class":119},[33,167705,31750],{"class":47},[33,167707,167708,167710,167712,167715],{"class":35,"line":98},[33,167709,31668],{"class":76},[33,167711,167701],{"class":47},[33,167713,167714],{"class":119},"\"b\"",[33,167716,31750],{"class":47},[14,167718,167719],{},"第二次调用会复用第一次的列表。",[14,167721,157141],{},[23,167723,167725],{"className":31631,"code":167724,"language":31633,"meta":28,"style":28},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[30,167726,167727,167741,167754,167763,167767],{"__ignoreMap":28},[33,167728,167729,167731,167733,167735,167737,167739],{"class":35,"line":36},[33,167730,33200],{"class":39},[33,167732,167666],{"class":43},[33,167734,167669],{"class":47},[33,167736,73],{"class":39},[33,167738,96939],{"class":76},[33,167740,32039],{"class":47},[33,167742,167743,167745,167748,167750,167752],{"class":35,"line":51},[33,167744,4509],{"class":39},[33,167746,167747],{"class":47}," items ",[33,167749,40180],{"class":39},[33,167751,40186],{"class":76},[33,167753,5141],{"class":47},[33,167755,167756,167759,167761],{"class":35,"line":57},[33,167757,167758],{"class":47},"        items ",[33,167760,73],{"class":39},[33,167762,53091],{"class":47},[33,167764,167765],{"class":35,"line":64},[33,167766,167679],{"class":47},[33,167768,167769,167771],{"class":35,"line":83},[33,167770,5489],{"class":39},[33,167772,167686],{"class":47},[18,167774,167776],{"id":167775},"_76-不定长参数","7.6 不定长参数",[1599,167778,167780],{"id":167779},"_761-args","7.6.1 *args",[14,167782,167783,167786],{},[30,167784,167785],{},"*args"," 接收任意数量的位置参数，得到元组。",[23,167788,167790],{"className":31631,"code":167789,"language":31633,"meta":28,"style":28},"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",[30,167791,167792,167805,167813,167824,167833,167839,167843,167847,167866],{"__ignoreMap":28},[33,167793,167794,167796,167798,167800,167802],{"class":35,"line":36},[33,167795,33200],{"class":39},[33,167797,6600],{"class":43},[33,167799,345],{"class":47},[33,167801,2057],{"class":39},[33,167803,167804],{"class":47},"args):\n",[33,167806,167807,167809,167811],{"class":35,"line":51},[33,167808,160560],{"class":47},[33,167810,73],{"class":39},[33,167812,48586],{"class":76},[33,167814,167815,167817,167819,167821],{"class":35,"line":57},[33,167816,857],{"class":39},[33,167818,157433],{"class":47},[33,167820,27296],{"class":39},[33,167822,167823],{"class":47}," args:\n",[33,167825,167826,167828,167830],{"class":35,"line":64},[33,167827,161235],{"class":47},[33,167829,10728],{"class":39},[33,167831,167832],{"class":47}," num\n",[33,167834,167835,167837],{"class":35,"line":83},[33,167836,5489],{"class":39},[33,167838,163540],{"class":47},[33,167840,167841],{"class":35,"line":89},[33,167842,160],{"emptyLinePlaceholder":159},[33,167844,167845],{"class":35,"line":98},[33,167846,160],{"emptyLinePlaceholder":159},[33,167848,167849,167851,167854,167856,167858,167860,167862,167864],{"class":35,"line":110},[33,167850,31668],{"class":76},[33,167852,167853],{"class":47},"(add(",[33,167855,701],{"class":76},[33,167857,13686],{"class":47},[33,167859,707],{"class":76},[33,167861,13686],{"class":47},[33,167863,712],{"class":76},[33,167865,31750],{"class":47},[33,167867,167868,167870,167872,167874,167876,167878,167880,167882,167884,167886,167888,167890],{"class":35,"line":134},[33,167869,31668],{"class":76},[33,167871,167853],{"class":47},[33,167873,701],{"class":76},[33,167875,13686],{"class":47},[33,167877,707],{"class":76},[33,167879,13686],{"class":47},[33,167881,712],{"class":76},[33,167883,13686],{"class":47},[33,167885,717],{"class":76},[33,167887,13686],{"class":47},[33,167889,722],{"class":76},[33,167891,31750],{"class":47},[1599,167893,167895],{"id":167894},"_762-kwargs","7.6.2 **kwargs",[14,167897,167898,167901],{},[30,167899,167900],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[23,167903,167905],{"className":31631,"code":167904,"language":31633,"meta":28,"style":28},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[30,167906,167907,167920,167931,167937,167941,167945],{"__ignoreMap":28},[33,167908,167909,167911,167913,167915,167917],{"class":35,"line":36},[33,167910,33200],{"class":39},[33,167912,163198],{"class":43},[33,167914,345],{"class":47},[33,167916,11912],{"class":39},[33,167918,167919],{"class":47},"kwargs):\n",[33,167921,167922,167924,167926,167928],{"class":35,"line":51},[33,167923,857],{"class":39},[33,167925,166038],{"class":47},[33,167927,27296],{"class":39},[33,167929,167930],{"class":47}," kwargs.items():\n",[33,167932,167933,167935],{"class":35,"line":57},[33,167934,33704],{"class":76},[33,167936,166050],{"class":47},[33,167938,167939],{"class":35,"line":64},[33,167940,160],{"emptyLinePlaceholder":159},[33,167942,167943],{"class":35,"line":83},[33,167944,160],{"emptyLinePlaceholder":159},[33,167946,167947,167949,167951,167953,167955,167957,167959,167961,167963,167965,167967,167969,167971],{"class":35,"line":89},[33,167948,163263],{"class":47},[33,167950,81063],{"class":955},[33,167952,73],{"class":39},[33,167954,151141],{"class":119},[33,167956,13686],{"class":47},[33,167958,71474],{"class":955},[33,167960,73],{"class":39},[33,167962,2250],{"class":76},[33,167964,13686],{"class":47},[33,167966,71525],{"class":955},[33,167968,73],{"class":39},[33,167970,70522],{"class":119},[33,167972,884],{"class":47},[18,167974,167976],{"id":167975},"_77-参数解包","7.7 参数解包",[14,167978,167979],{},"列表或元组解包为位置参数：",[23,167981,167983],{"className":31631,"code":167982,"language":31633,"meta":28,"style":28},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[30,167984,167985,167994,168009,168013,168017,168037],{"__ignoreMap":28},[33,167986,167987,167989,167991],{"class":35,"line":36},[33,167988,33200],{"class":39},[33,167990,6600],{"class":43},[33,167992,167993],{"class":47},"(a, b, c):\n",[33,167995,167996,167998,168000,168002,168004,168006],{"class":35,"line":51},[33,167997,5489],{"class":39},[33,167999,12120],{"class":47},[33,168001,1271],{"class":39},[33,168003,12133],{"class":47},[33,168005,1271],{"class":39},[33,168007,168008],{"class":47}," c\n",[33,168010,168011],{"class":35,"line":57},[33,168012,160],{"emptyLinePlaceholder":159},[33,168014,168015],{"class":35,"line":64},[33,168016,160],{"emptyLinePlaceholder":159},[33,168018,168019,168021,168023,168025,168027,168029,168031,168033,168035],{"class":35,"line":83},[33,168020,165353],{"class":47},[33,168022,73],{"class":39},[33,168024,53479],{"class":47},[33,168026,701],{"class":76},[33,168028,13686],{"class":47},[33,168030,707],{"class":76},[33,168032,13686],{"class":47},[33,168034,712],{"class":76},[33,168036,34499],{"class":47},[33,168038,168039,168041,168043,168045],{"class":35,"line":89},[33,168040,31668],{"class":76},[33,168042,167853],{"class":47},[33,168044,2057],{"class":39},[33,168046,168047],{"class":47},"nums))\n",[14,168049,168050],{},"字典解包为关键字参数：",[23,168052,168054],{"className":31631,"code":168053,"language":31633,"meta":28,"style":28},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[30,168055,168056,168064,168090,168094,168098,168122],{"__ignoreMap":28},[33,168057,168058,168060,168062],{"class":35,"line":36},[33,168059,33200],{"class":39},[33,168061,150625],{"class":43},[33,168063,150628],{"class":47},[33,168065,168066,168068,168070,168072,168074,168076,168078,168080,168082,168084,168086,168088],{"class":35,"line":51},[33,168067,32552],{"class":76},[33,168069,345],{"class":47},[33,168071,1677],{"class":39},[33,168073,1866],{"class":119},[33,168075,698],{"class":76},[33,168077,81063],{"class":47},[33,168079,2542],{"class":76},[33,168081,5845],{"class":76},[33,168083,71474],{"class":47},[33,168085,2542],{"class":76},[33,168087,1866],{"class":119},[33,168089,884],{"class":47},[33,168091,168092],{"class":35,"line":57},[33,168093,160],{"emptyLinePlaceholder":159},[33,168095,168096],{"class":35,"line":64},[33,168097,160],{"emptyLinePlaceholder":159},[33,168099,168100,168102,168104,168106,168108,168110,168112,168114,168116,168118,168120],{"class":35,"line":83},[33,168101,117567],{"class":47},[33,168103,73],{"class":39},[33,168105,5845],{"class":47},[33,168107,63932],{"class":119},[33,168109,52690],{"class":47},[33,168111,151141],{"class":119},[33,168113,13686],{"class":47},[33,168115,70377],{"class":119},[33,168117,52690],{"class":47},[33,168119,2250],{"class":76},[33,168121,231],{"class":47},[33,168123,168124,168126,168128],{"class":35,"line":89},[33,168125,167409],{"class":47},[33,168127,11912],{"class":39},[33,168129,168130],{"class":47},"info)\n",[18,168132,168134],{"id":168133},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,168136,168137,168140],{},[30,168138,168139],{},"lambda"," 用于定义简单匿名函数。",[23,168142,168144],{"className":31631,"code":168143,"language":31633,"meta":28,"style":28},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[30,168145,168146,168163],{"__ignoreMap":28},[33,168147,168148,168151,168153,168156,168159,168161],{"class":35,"line":36},[33,168149,168150],{"class":47},"add ",[33,168152,73],{"class":39},[33,168154,168155],{"class":39}," lambda",[33,168157,168158],{"class":47}," a, b: a ",[33,168160,1271],{"class":39},[33,168162,152357],{"class":47},[33,168164,168165,168167,168169,168171,168173,168175],{"class":35,"line":51},[33,168166,31668],{"class":76},[33,168168,167853],{"class":47},[33,168170,701],{"class":76},[33,168172,13686],{"class":47},[33,168174,707],{"class":76},[33,168176,31750],{"class":47},[14,168178,168179],{},"常和排序、过滤等函数一起使用。",[14,168181,168182],{},"按分数排序：",[23,168184,168186],{"className":31631,"code":168185,"language":31633,"meta":28,"style":28},"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",[30,168187,168188,168196,168216,168236,168256,168260,168264,168287],{"__ignoreMap":28},[33,168189,168190,168192,168194],{"class":35,"line":36},[33,168191,160969],{"class":47},[33,168193,73],{"class":39},[33,168195,56700],{"class":47},[33,168197,168198,168200,168202,168204,168206,168208,168210,168212,168214],{"class":35,"line":51},[33,168199,149638],{"class":47},[33,168201,63932],{"class":119},[33,168203,52690],{"class":47},[33,168205,151141],{"class":119},[33,168207,13686],{"class":47},[33,168209,152725],{"class":119},[33,168211,52690],{"class":47},[33,168213,2584],{"class":76},[33,168215,6321],{"class":47},[33,168217,168218,168220,168222,168224,168226,168228,168230,168232,168234],{"class":35,"line":57},[33,168219,149638],{"class":47},[33,168221,63932],{"class":119},[33,168223,52690],{"class":47},[33,168225,152189],{"class":119},[33,168227,13686],{"class":47},[33,168229,152725],{"class":119},[33,168231,52690],{"class":47},[33,168233,2410],{"class":76},[33,168235,6321],{"class":47},[33,168237,168238,168240,168242,168244,168246,168248,168250,168252,168254],{"class":35,"line":64},[33,168239,149638],{"class":47},[33,168241,63932],{"class":119},[33,168243,52690],{"class":47},[33,168245,160984],{"class":119},[33,168247,13686],{"class":47},[33,168249,152725],{"class":119},[33,168251,52690],{"class":47},[33,168253,2012],{"class":76},[33,168255,6321],{"class":47},[33,168257,168258],{"class":35,"line":83},[33,168259,34499],{"class":47},[33,168261,168262],{"class":35,"line":89},[33,168263,160],{"emptyLinePlaceholder":159},[33,168265,168266,168269,168271,168273,168275,168277,168279,168281,168283,168285],{"class":35,"line":98},[33,168267,168268],{"class":47},"students.sort(",[33,168270,155199],{"class":955},[33,168272,155202],{"class":39},[33,168274,155205],{"class":47},[33,168276,152725],{"class":119},[33,168278,113455],{"class":47},[33,168280,164781],{"class":955},[33,168282,73],{"class":39},[33,168284,32729],{"class":76},[33,168286,884],{"class":47},[33,168288,168289,168291],{"class":35,"line":110},[33,168290,31668],{"class":76},[33,168292,166248],{"class":47},[14,168294,168295,168296,168298],{},"如果逻辑复杂，不要硬写 ",[30,168297,168139],{},"，定义普通函数更清晰。",[18,168300,168302],{"id":168301},"_79-函数作为参数","7.9 函数作为参数",[14,168304,168305],{},"函数可以作为参数传给另一个函数。",[23,168307,168309],{"className":31631,"code":168308,"language":31633,"meta":28,"style":28},"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",[30,168310,168311,168319,168329,168333,168337,168347,168354,168358,168362],{"__ignoreMap":28},[33,168312,168313,168315,168317],{"class":35,"line":36},[33,168314,33200],{"class":39},[33,168316,6600],{"class":43},[33,168318,152346],{"class":47},[33,168320,168321,168323,168325,168327],{"class":35,"line":51},[33,168322,5489],{"class":39},[33,168324,12120],{"class":47},[33,168326,1271],{"class":39},[33,168328,152357],{"class":47},[33,168330,168331],{"class":35,"line":57},[33,168332,160],{"emptyLinePlaceholder":159},[33,168334,168335],{"class":35,"line":64},[33,168336,160],{"emptyLinePlaceholder":159},[33,168338,168339,168341,168344],{"class":35,"line":83},[33,168340,33200],{"class":39},[33,168342,168343],{"class":43}," calculate",[33,168345,168346],{"class":47},"(a, b, func):\n",[33,168348,168349,168351],{"class":35,"line":89},[33,168350,5489],{"class":39},[33,168352,168353],{"class":47}," func(a, b)\n",[33,168355,168356],{"class":35,"line":98},[33,168357,160],{"emptyLinePlaceholder":159},[33,168359,168360],{"class":35,"line":110},[33,168361,160],{"emptyLinePlaceholder":159},[33,168363,168364,168366,168369,168371,168373,168375],{"class":35,"line":134},[33,168365,31668],{"class":76},[33,168367,168368],{"class":47},"(calculate(",[33,168370,77],{"class":76},[33,168372,13686],{"class":47},[33,168374,1045],{"class":76},[33,168376,168377],{"class":47},", add))\n",[14,168379,168380],{},"这种思想在排序、回调、框架中经常出现。",[18,168382,168384],{"id":168383},"_710-mapfiltersorted","7.10 map、filter、sorted",[1599,168386,168388],{"id":168387},"_7101-map","7.10.1 map",[14,168390,168391,168393],{},[30,168392,75297],{}," 对每个元素执行函数。",[23,168395,168397],{"className":31631,"code":168396,"language":31633,"meta":28,"style":28},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[30,168398,168399,168423,168446],{"__ignoreMap":28},[33,168400,168401,168403,168405,168407,168409,168411,168413,168415,168417,168419,168421],{"class":35,"line":36},[33,168402,165353],{"class":47},[33,168404,73],{"class":39},[33,168406,53479],{"class":47},[33,168408,701],{"class":76},[33,168410,13686],{"class":47},[33,168412,707],{"class":76},[33,168414,13686],{"class":47},[33,168416,712],{"class":76},[33,168418,13686],{"class":47},[33,168420,717],{"class":76},[33,168422,34499],{"class":47},[33,168424,168425,168427,168429,168432,168434,168436,168439,168441,168443],{"class":35,"line":51},[33,168426,162559],{"class":47},[33,168428,73],{"class":39},[33,168430,168431],{"class":76}," map",[33,168433,345],{"class":47},[33,168435,168139],{"class":39},[33,168437,168438],{"class":47}," x: x ",[33,168440,2057],{"class":39},[33,168442,16006],{"class":76},[33,168444,168445],{"class":47},", nums)\n",[33,168447,168448,168450,168452,168454],{"class":35,"line":57},[33,168449,31668],{"class":76},[33,168451,345],{"class":47},[33,168453,155323],{"class":76},[33,168455,167321],{"class":47},[1599,168457,168459],{"id":168458},"_7102-filter","7.10.2 filter",[14,168461,168462,168464],{},[30,168463,81304],{}," 保留满足条件的元素。",[23,168466,168468],{"className":31631,"code":168467,"language":31633,"meta":28,"style":28},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[30,168469,168470,168498,168523],{"__ignoreMap":28},[33,168471,168472,168474,168476,168478,168480,168482,168484,168486,168488,168490,168492,168494,168496],{"class":35,"line":36},[33,168473,165353],{"class":47},[33,168475,73],{"class":39},[33,168477,53479],{"class":47},[33,168479,701],{"class":76},[33,168481,13686],{"class":47},[33,168483,707],{"class":76},[33,168485,13686],{"class":47},[33,168487,712],{"class":76},[33,168489,13686],{"class":47},[33,168491,717],{"class":76},[33,168493,13686],{"class":47},[33,168495,722],{"class":76},[33,168497,34499],{"class":47},[33,168499,168500,168502,168504,168507,168509,168511,168513,168515,168517,168519,168521],{"class":35,"line":51},[33,168501,162559],{"class":47},[33,168503,73],{"class":39},[33,168505,168506],{"class":76}," filter",[33,168508,345],{"class":47},[33,168510,168139],{"class":39},[33,168512,168438],{"class":47},[33,168514,1939],{"class":39},[33,168516,16006],{"class":76},[33,168518,102812],{"class":39},[33,168520,5492],{"class":76},[33,168522,168445],{"class":47},[33,168524,168525,168527,168529,168531],{"class":35,"line":57},[33,168526,31668],{"class":76},[33,168528,345],{"class":47},[33,168530,155323],{"class":76},[33,168532,167321],{"class":47},[1599,168534,168536],{"id":168535},"_7103-sorted","7.10.3 sorted",[14,168538,168539,168541],{},[30,168540,166489],{}," 返回排序后的新列表。",[23,168543,168545],{"className":31631,"code":168544,"language":31633,"meta":28,"style":28},"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",[30,168546,168547,168555,168575,168595,168615,168619,168623,168652],{"__ignoreMap":28},[33,168548,168549,168551,168553],{"class":35,"line":36},[33,168550,160969],{"class":47},[33,168552,73],{"class":39},[33,168554,56700],{"class":47},[33,168556,168557,168559,168561,168563,168565,168567,168569,168571,168573],{"class":35,"line":51},[33,168558,149638],{"class":47},[33,168560,63932],{"class":119},[33,168562,52690],{"class":47},[33,168564,151141],{"class":119},[33,168566,13686],{"class":47},[33,168568,152725],{"class":119},[33,168570,52690],{"class":47},[33,168572,2584],{"class":76},[33,168574,6321],{"class":47},[33,168576,168577,168579,168581,168583,168585,168587,168589,168591,168593],{"class":35,"line":57},[33,168578,149638],{"class":47},[33,168580,63932],{"class":119},[33,168582,52690],{"class":47},[33,168584,152189],{"class":119},[33,168586,13686],{"class":47},[33,168588,152725],{"class":119},[33,168590,52690],{"class":47},[33,168592,2410],{"class":76},[33,168594,6321],{"class":47},[33,168596,168597,168599,168601,168603,168605,168607,168609,168611,168613],{"class":35,"line":64},[33,168598,149638],{"class":47},[33,168600,63932],{"class":119},[33,168602,52690],{"class":47},[33,168604,160984],{"class":119},[33,168606,13686],{"class":47},[33,168608,152725],{"class":119},[33,168610,52690],{"class":47},[33,168612,2012],{"class":76},[33,168614,6321],{"class":47},[33,168616,168617],{"class":35,"line":83},[33,168618,34499],{"class":47},[33,168620,168621],{"class":35,"line":89},[33,168622,160],{"emptyLinePlaceholder":159},[33,168624,168625,168627,168629,168631,168634,168636,168638,168640,168642,168644,168646,168648,168650],{"class":35,"line":98},[33,168626,162559],{"class":47},[33,168628,73],{"class":39},[33,168630,164857],{"class":76},[33,168632,168633],{"class":47},"(students, ",[33,168635,155199],{"class":955},[33,168637,155202],{"class":39},[33,168639,155205],{"class":47},[33,168641,152725],{"class":119},[33,168643,113455],{"class":47},[33,168645,164781],{"class":955},[33,168647,73],{"class":39},[33,168649,32729],{"class":76},[33,168651,884],{"class":47},[33,168653,168654,168656],{"class":35,"line":110},[33,168655,31668],{"class":76},[33,168657,77838],{"class":47},[18,168659,168661],{"id":168660},"_711-闭包入门","7.11 闭包入门",[14,168663,168664],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[23,168666,168668],{"className":31631,"code":168667,"language":31633,"meta":28,"style":28},"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",[30,168669,168670,168680,168690,168701,168705,168712,168716,168720,168734],{"__ignoreMap":28},[33,168671,168672,168674,168677],{"class":35,"line":36},[33,168673,33200],{"class":39},[33,168675,168676],{"class":43}," outer",[33,168678,168679],{"class":47},"(base):\n",[33,168681,168682,168684,168687],{"class":35,"line":51},[33,168683,32054],{"class":39},[33,168685,168686],{"class":43}," inner",[33,168688,168689],{"class":47},"(num):\n",[33,168691,168692,168694,168697,168699],{"class":35,"line":57},[33,168693,16003],{"class":39},[33,168695,168696],{"class":47}," base ",[33,168698,1271],{"class":39},[33,168700,167832],{"class":47},[33,168702,168703],{"class":35,"line":64},[33,168704,160],{"emptyLinePlaceholder":159},[33,168706,168707,168709],{"class":35,"line":83},[33,168708,5489],{"class":39},[33,168710,168711],{"class":47}," inner\n",[33,168713,168714],{"class":35,"line":89},[33,168715,160],{"emptyLinePlaceholder":159},[33,168717,168718],{"class":35,"line":98},[33,168719,160],{"emptyLinePlaceholder":159},[33,168721,168722,168725,168727,168730,168732],{"class":35,"line":110},[33,168723,168724],{"class":47},"add_10 ",[33,168726,73],{"class":39},[33,168728,168729],{"class":47}," outer(",[33,168731,77],{"class":76},[33,168733,884],{"class":47},[33,168735,168736,168738,168741,168743],{"class":35,"line":134},[33,168737,31668],{"class":76},[33,168739,168740],{"class":47},"(add_10(",[33,168742,722],{"class":76},[33,168744,31750],{"class":47},[14,168746,168747],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[18,168749,168751],{"id":168750},"_712-装饰器入门","7.12 装饰器入门",[14,168753,168754],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[23,168756,168758],{"className":31631,"code":168757,"language":31633,"meta":28,"style":28},"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",[30,168759,168760,168769,168778,168789,168794,168805,168809,168816,168820,168824,168829,168837,168847,168851,168855],{"__ignoreMap":28},[33,168761,168762,168764,168766],{"class":35,"line":36},[33,168763,33200],{"class":39},[33,168765,88444],{"class":43},[33,168767,168768],{"class":47},"(func):\n",[33,168770,168771,168773,168776],{"class":35,"line":51},[33,168772,32054],{"class":39},[33,168774,168775],{"class":43}," wrapper",[33,168777,33206],{"class":47},[33,168779,168780,168782,168784,168787],{"class":35,"line":57},[33,168781,33704],{"class":76},[33,168783,345],{"class":47},[33,168785,168786],{"class":119},"\"函数开始执行\"",[33,168788,884],{"class":47},[33,168790,168791],{"class":35,"line":64},[33,168792,168793],{"class":47},"        func()\n",[33,168795,168796,168798,168800,168803],{"class":35,"line":83},[33,168797,33704],{"class":76},[33,168799,345],{"class":47},[33,168801,168802],{"class":119},"\"函数执行结束\"",[33,168804,884],{"class":47},[33,168806,168807],{"class":35,"line":89},[33,168808,160],{"emptyLinePlaceholder":159},[33,168810,168811,168813],{"class":35,"line":98},[33,168812,5489],{"class":39},[33,168814,168815],{"class":47}," wrapper\n",[33,168817,168818],{"class":35,"line":110},[33,168819,160],{"emptyLinePlaceholder":159},[33,168821,168822],{"class":35,"line":134},[33,168823,160],{"emptyLinePlaceholder":159},[33,168825,168826],{"class":35,"line":156},[33,168827,168828],{"class":43},"@log\n",[33,168830,168831,168833,168835],{"class":35,"line":163},[33,168832,33200],{"class":39},[33,168834,162249],{"class":43},[33,168836,33206],{"class":47},[33,168838,168839,168841,168843,168845],{"class":35,"line":169},[33,168840,32552],{"class":76},[33,168842,345],{"class":47},[33,168844,7231],{"class":119},[33,168846,884],{"class":47},[33,168848,168849],{"class":35,"line":175},[33,168850,160],{"emptyLinePlaceholder":159},[33,168852,168853],{"class":35,"line":181},[33,168854,160],{"emptyLinePlaceholder":159},[33,168856,168857],{"class":35,"line":196},[33,168858,162284],{"class":47},[14,168860,159527],{},[23,168862,168864],{"className":31631,"code":168863,"language":31633,"meta":28,"style":28},"say_hello = log(say_hello)\n",[30,168865,168866],{"__ignoreMap":28},[33,168867,168868,168871,168873],{"class":35,"line":36},[33,168869,168870],{"class":47},"say_hello ",[33,168872,73],{"class":39},[33,168874,168875],{"class":47}," log(say_hello)\n",[14,168877,168878],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[18,168880,168882],{"id":168881},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[23,168884,168886],{"className":31631,"code":168885,"language":31633,"meta":28,"style":28},"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",[30,168887,168888,168896,168913,168923,168942,168952,168959,168963,168969,168973,168977,168981,168989,168999,169003,169007],{"__ignoreMap":28},[33,168889,168890,168892,168894],{"class":35,"line":36},[33,168891,33200],{"class":39},[33,168893,88444],{"class":43},[33,168895,168768],{"class":47},[33,168897,168898,168900,168902,168904,168906,168909,168911],{"class":35,"line":51},[33,168899,32054],{"class":39},[33,168901,168775],{"class":43},[33,168903,345],{"class":47},[33,168905,2057],{"class":39},[33,168907,168908],{"class":47},"args, ",[33,168910,11912],{"class":39},[33,168912,167919],{"class":47},[33,168914,168915,168917,168919,168921],{"class":35,"line":57},[33,168916,33704],{"class":76},[33,168918,345],{"class":47},[33,168920,168786],{"class":119},[33,168922,884],{"class":47},[33,168924,168925,168928,168930,168933,168935,168937,168939],{"class":35,"line":64},[33,168926,168927],{"class":47},"        result ",[33,168929,73],{"class":39},[33,168931,168932],{"class":47}," func(",[33,168934,2057],{"class":39},[33,168936,168908],{"class":47},[33,168938,11912],{"class":39},[33,168940,168941],{"class":47},"kwargs)\n",[33,168943,168944,168946,168948,168950],{"class":35,"line":83},[33,168945,33704],{"class":76},[33,168947,345],{"class":47},[33,168949,168802],{"class":119},[33,168951,884],{"class":47},[33,168953,168954,168956],{"class":35,"line":89},[33,168955,16003],{"class":39},[33,168957,168958],{"class":47}," result\n",[33,168960,168961],{"class":35,"line":98},[33,168962,160],{"emptyLinePlaceholder":159},[33,168964,168965,168967],{"class":35,"line":110},[33,168966,5489],{"class":39},[33,168968,168815],{"class":47},[33,168970,168971],{"class":35,"line":134},[33,168972,160],{"emptyLinePlaceholder":159},[33,168974,168975],{"class":35,"line":156},[33,168976,160],{"emptyLinePlaceholder":159},[33,168978,168979],{"class":35,"line":163},[33,168980,168828],{"class":43},[33,168982,168983,168985,168987],{"class":35,"line":169},[33,168984,33200],{"class":39},[33,168986,6600],{"class":43},[33,168988,152346],{"class":47},[33,168990,168991,168993,168995,168997],{"class":35,"line":175},[33,168992,5489],{"class":39},[33,168994,12120],{"class":47},[33,168996,1271],{"class":39},[33,168998,152357],{"class":47},[33,169000,169001],{"class":35,"line":181},[33,169002,160],{"emptyLinePlaceholder":159},[33,169004,169005],{"class":35,"line":196},[33,169006,160],{"emptyLinePlaceholder":159},[33,169008,169009,169011,169013,169015,169017,169019],{"class":35,"line":213},[33,169010,31668],{"class":76},[33,169012,167853],{"class":47},[33,169014,77],{"class":76},[33,169016,13686],{"class":47},[33,169018,1045],{"class":76},[33,169020,31750],{"class":47},[14,169022,169023,169024,102271,169026,169028],{},"这个写法使用 ",[30,169025,167785],{},[30,169027,167900],{}," 接收原函数的所有参数。",[18,169030,169032],{"id":169031},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,169034,124545],{},[574,169036,169037,169040,169043],{},[564,169038,169039],{},"给定一组学生数据。",[564,169041,169042],{},"封装函数，根据传入规则筛选学生。",[564,169044,169045],{},"筛选及格、优秀、未成年学生。",[14,169047,11286],{},[23,169049,169051],{"className":31631,"code":169050,"language":31633,"meta":28,"style":28},"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",[30,169052,169053,169061,169089,169117,169145,169149,169153,169157,169167,169175,169185,169192,169197,169203,169207,169211,169235,169258,169281,169285,169292,169299],{"__ignoreMap":28},[33,169054,169055,169057,169059],{"class":35,"line":36},[33,169056,160969],{"class":47},[33,169058,73],{"class":39},[33,169060,56700],{"class":47},[33,169062,169063,169065,169067,169069,169071,169073,169075,169077,169079,169081,169083,169085,169087],{"class":35,"line":51},[33,169064,149638],{"class":47},[33,169066,63932],{"class":119},[33,169068,52690],{"class":47},[33,169070,151141],{"class":119},[33,169072,13686],{"class":47},[33,169074,70377],{"class":119},[33,169076,52690],{"class":47},[33,169078,2250],{"class":76},[33,169080,13686],{"class":47},[33,169082,152725],{"class":119},[33,169084,52690],{"class":47},[33,169086,2584],{"class":76},[33,169088,6321],{"class":47},[33,169090,169091,169093,169095,169097,169099,169101,169103,169105,169107,169109,169111,169113,169115],{"class":35,"line":57},[33,169092,149638],{"class":47},[33,169094,63932],{"class":119},[33,169096,52690],{"class":47},[33,169098,152189],{"class":119},[33,169100,13686],{"class":47},[33,169102,70377],{"class":119},[33,169104,52690],{"class":47},[33,169106,2225],{"class":76},[33,169108,13686],{"class":47},[33,169110,152725],{"class":119},[33,169112,52690],{"class":47},[33,169114,2410],{"class":76},[33,169116,6321],{"class":47},[33,169118,169119,169121,169123,169125,169127,169129,169131,169133,169135,169137,169139,169141,169143],{"class":35,"line":64},[33,169120,149638],{"class":47},[33,169122,63932],{"class":119},[33,169124,52690],{"class":47},[33,169126,160984],{"class":119},[33,169128,13686],{"class":47},[33,169130,70377],{"class":119},[33,169132,52690],{"class":47},[33,169134,2275],{"class":76},[33,169136,13686],{"class":47},[33,169138,152725],{"class":119},[33,169140,52690],{"class":47},[33,169142,2481],{"class":76},[33,169144,6321],{"class":47},[33,169146,169147],{"class":35,"line":83},[33,169148,34499],{"class":47},[33,169150,169151],{"class":35,"line":89},[33,169152,160],{"emptyLinePlaceholder":159},[33,169154,169155],{"class":35,"line":98},[33,169156,160],{"emptyLinePlaceholder":159},[33,169158,169159,169161,169164],{"class":35,"line":110},[33,169160,33200],{"class":39},[33,169162,169163],{"class":43}," filter_students",[33,169165,169166],{"class":47},"(students, condition):\n",[33,169168,169169,169171,169173],{"class":35,"line":134},[33,169170,162476],{"class":47},[33,169172,73],{"class":39},[33,169174,53091],{"class":47},[33,169176,169177,169179,169181,169183],{"class":35,"line":156},[33,169178,857],{"class":39},[33,169180,153390],{"class":47},[33,169182,27296],{"class":39},[33,169184,153395],{"class":47},[33,169186,169187,169189],{"class":35,"line":163},[33,169188,3915],{"class":39},[33,169190,169191],{"class":47}," condition(student):\n",[33,169193,169194],{"class":35,"line":169},[33,169195,169196],{"class":47},"            result.append(student)\n",[33,169198,169199,169201],{"class":35,"line":175},[33,169200,5489],{"class":39},[33,169202,168958],{"class":47},[33,169204,169205],{"class":35,"line":181},[33,169206,160],{"emptyLinePlaceholder":159},[33,169208,169209],{"class":35,"line":196},[33,169210,160],{"emptyLinePlaceholder":159},[33,169212,169213,169215,169217,169220,169222,169225,169227,169229,169231,169233],{"class":35,"line":213},[33,169214,166954],{"class":47},[33,169216,73],{"class":39},[33,169218,169219],{"class":47}," filter_students(students, ",[33,169221,168139],{"class":39},[33,169223,169224],{"class":47}," s: s[",[33,169226,152725],{"class":119},[33,169228,5840],{"class":47},[33,169230,3151],{"class":39},[33,169232,159090],{"class":76},[33,169234,884],{"class":47},[33,169236,169237,169240,169242,169244,169246,169248,169250,169252,169254,169256],{"class":35,"line":228},[33,169238,169239],{"class":47},"excellent ",[33,169241,73],{"class":39},[33,169243,169219],{"class":47},[33,169245,168139],{"class":39},[33,169247,169224],{"class":47},[33,169249,152725],{"class":119},[33,169251,5840],{"class":47},[33,169253,3151],{"class":39},[33,169255,159041],{"class":76},[33,169257,884],{"class":47},[33,169259,169260,169263,169265,169267,169269,169271,169273,169275,169277,169279],{"class":35,"line":1345},[33,169261,169262],{"class":47},"under_age ",[33,169264,73],{"class":39},[33,169266,169219],{"class":47},[33,169268,168139],{"class":39},[33,169270,169224],{"class":47},[33,169272,70377],{"class":119},[33,169274,5840],{"class":47},[33,169276,875],{"class":39},[33,169278,157538],{"class":76},[33,169280,884],{"class":47},[33,169282,169283],{"class":35,"line":1350},[33,169284,160],{"emptyLinePlaceholder":159},[33,169286,169287,169289],{"class":35,"line":1359},[33,169288,31668],{"class":76},[33,169290,169291],{"class":47},"(passed)\n",[33,169293,169294,169296],{"class":35,"line":1364},[33,169295,31668],{"class":76},[33,169297,169298],{"class":47},"(excellent)\n",[33,169300,169301,169303],{"class":35,"line":1370},[33,169302,31668],{"class":76},[33,169304,169305],{"class":47},"(under_age)\n",[18,169307,169309],{"id":169308},"_715-易错点","7.15 易错点",[574,169311,169312,169315,169323,169328,169339],{},[564,169313,169314],{},"默认参数不要写可变对象。",[564,169316,169317,169319,169320,169322],{},[30,169318,167785],{}," 是元组，",[30,169321,167900],{}," 是字典。",[564,169324,169325,169327],{},[30,169326,168139],{}," 只适合简单表达式。",[564,169329,169330,102271,169332,169334,169335,169338],{},[30,169331,75297],{},[30,169333,81304],{}," 的结果是迭代器，常用 ",[30,169336,169337],{},"list()"," 转换查看。",[564,169340,169341],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[18,169343,169345],{"id":169344},"_716-本章练习","7.16 本章练习",[574,169347,169348,169355,169361,169366,169371],{},[564,169349,169350,169351,169354],{},"写函数 ",[30,169352,169353],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[564,169356,169350,169357,169360],{},[30,169358,169359],{},"print_user(**kwargs)","，输出用户所有字段。",[564,169362,105619,169363,169365],{},[30,169364,168139],{}," 对学生列表按年龄排序。",[564,169367,105619,169368,169370],{},[30,169369,81304],{}," 找出成绩不及格的学生。",[564,169372,169373],{},"写一个装饰器，统计函数执行前后的提示信息。",[1544,169375,169376],{},"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":28,"searchDepth":51,"depth":51,"links":169378},[169379,169380,169381,169382,169383,169384,169388,169389,169390,169391,169396,169397,169398,169399,169400,169401],{"id":167237,"depth":51,"text":167238},{"id":167351,"depth":51,"text":167352},{"id":167440,"depth":51,"text":167441},{"id":167502,"depth":51,"text":167503},{"id":167648,"depth":51,"text":167649},{"id":167775,"depth":51,"text":167776,"children":169385},[169386,169387],{"id":167779,"depth":57,"text":167780},{"id":167894,"depth":57,"text":167895},{"id":167975,"depth":51,"text":167976},{"id":168133,"depth":51,"text":168134},{"id":168301,"depth":51,"text":168302},{"id":168383,"depth":51,"text":168384,"children":169392},[169393,169394,169395],{"id":168387,"depth":57,"text":168388},{"id":168458,"depth":57,"text":168459},{"id":168535,"depth":57,"text":168536},{"id":168660,"depth":51,"text":168661},{"id":168750,"depth":51,"text":168751},{"id":168881,"depth":51,"text":168882},{"id":169031,"depth":51,"text":169032},{"id":169308,"depth":51,"text":169309},{"id":169344,"depth":51,"text":169345},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167229,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169408,"title":169409,"body":169410,"description":24628,"extension":1557,"meta":171929,"navigation":159,"path":171930,"seo":171931,"stem":171932,"__hash__":171933},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169411,"toc":171904},[169412,169415,169419,169422,169425,169456,169460,169464,169467,169494,169498,169501,169552,169555,169570,169573,169608,169612,169614,169638,169641,169701,169705,169709,169712,169769,169772,169792,169796,169799,169862,169866,169869,169925,169932,169956,169960,169963,170026,170030,170035,170086,170089,170093,170098,170165,170168,170250,170254,170259,170310,170313,170317,170320,170323,170331,170334,170380,170383,170429,170433,170439,170483,170486,170532,170535,170575,170578,170639,170643,170646,170736,170739,170881,170884,170951,170955,170958,170961,171102,171105,171183,171186,171362,171366,171368,171379,171381,171580,171584,171828,171832,171866,171870,171901],[10,169413,169409],{"id":169414},"_8-文件操作",[18,169416,169418],{"id":169417},"_81-文件操作的意义","8.1 文件操作的意义",[14,169420,169421],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,169423,169424],{},"常见文件类型：",[574,169426,169427,169433,169439,169445,169451],{},[564,169428,169429,169432],{},[30,169430,169431],{},".txt","：普通文本。",[564,169434,169435,169438],{},[30,169436,169437],{},".csv","：表格文本。",[564,169440,169441,169444],{},[30,169442,169443],{},".json","：结构化数据。",[564,169446,169447,169450],{},[30,169448,169449],{},".log","：日志文件。",[564,169452,169453,169455],{},[30,169454,147605],{},"：Python 源代码。",[18,169457,169459],{"id":169458},"_82-路径","8.2 路径",[1599,169461,169463],{"id":169462},"_821-相对路径","8.2.1 相对路径",[14,169465,169466],{},"相对当前运行目录：",[23,169468,169470],{"className":31631,"code":169469,"language":31633,"meta":28,"style":28},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[30,169471,169472],{"__ignoreMap":28},[33,169473,169474,169476,169478,169480,169482,169484,169486,169488,169490,169492],{"class":35,"line":36},[33,169475,88168],{"class":76},[33,169477,345],{"class":47},[33,169479,148049],{"class":119},[33,169481,13686],{"class":47},[33,169483,148054],{"class":119},[33,169485,13686],{"class":47},[33,169487,148059],{"class":955},[33,169489,73],{"class":39},[33,169491,148064],{"class":119},[33,169493,884],{"class":47},[1599,169495,169497],{"id":169496},"_822-绝对路径","8.2.2 绝对路径",[14,169499,169500],{},"从根目录或盘符开始：",[23,169502,169504],{"className":31631,"code":169503,"language":31633,"meta":28,"style":28},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[30,169505,169506,169529],{"__ignoreMap":28},[33,169507,169508,169510,169512,169515,169517,169519,169521,169523,169525,169527],{"class":35,"line":36},[33,169509,88168],{"class":76},[33,169511,345],{"class":47},[33,169513,169514],{"class":119},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[33,169516,13686],{"class":47},[33,169518,148054],{"class":119},[33,169520,13686],{"class":47},[33,169522,148059],{"class":955},[33,169524,73],{"class":39},[33,169526,148064],{"class":119},[33,169528,884],{"class":47},[33,169530,169531,169533,169535,169538,169540,169542,169544,169546,169548,169550],{"class":35,"line":51},[33,169532,88168],{"class":76},[33,169534,345],{"class":47},[33,169536,169537],{"class":119},"\"D:\u002Fdata\u002Fdata.txt\"",[33,169539,13686],{"class":47},[33,169541,148054],{"class":119},[33,169543,13686],{"class":47},[33,169545,148059],{"class":955},[33,169547,73],{"class":39},[33,169549,148064],{"class":119},[33,169551,884],{"class":47},[14,169553,169554],{},"Windows 路径建议写成：",[23,169556,169558],{"className":31631,"code":169557,"language":31633,"meta":28,"style":28},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[30,169559,169560],{"__ignoreMap":28},[33,169561,169562,169565,169567],{"class":35,"line":36},[33,169563,169564],{"class":47},"path ",[33,169566,73],{"class":39},[33,169568,169569],{"class":119}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,169571,169572],{},"或原始字符串：",[23,169574,169576],{"className":31631,"code":169575,"language":31633,"meta":28,"style":28},"path = r\"D:\\data\\data.txt\"\n",[30,169577,169578],{"__ignoreMap":28},[33,169579,169580,169582,169584,169586,169588,169591,169594,169597,169599,169601,169603,169606],{"class":35,"line":36},[33,169581,169564],{"class":47},[33,169583,73],{"class":39},[33,169585,18372],{"class":39},[33,169587,1866],{"class":119},[33,169589,169590],{"class":49230},"D:",[33,169592,169593],{"class":76},"\\d",[33,169595,169596],{"class":49230},"ata",[33,169598,169593],{"class":76},[33,169600,169596],{"class":49230},[33,169602,2158],{"class":76},[33,169604,169605],{"class":49230},"txt",[33,169607,26386],{"class":119},[18,169609,169611],{"id":169610},"_83-open函数","8.3 open函数",[14,169613,6572],{},[23,169615,169617],{"className":31631,"code":169616,"language":31633,"meta":28,"style":28},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[30,169618,169619],{"__ignoreMap":28},[33,169620,169621,169623,169625,169627,169630,169632,169634,169636],{"class":35,"line":36},[33,169622,46607],{"class":955},[33,169624,14815],{"class":39},[33,169626,148044],{"class":76},[33,169628,169629],{"class":47},"(文件路径, 打开模式, ",[33,169631,148059],{"class":955},[33,169633,73],{"class":39},[33,169635,148064],{"class":119},[33,169637,884],{"class":47},[14,169639,169640],{},"常见模式：",[1756,169642,169643,169652],{},[1759,169644,169645],{},[1762,169646,169647,169650],{},[1765,169648,169649],{},"模式",[1765,169651,27122],{},[1802,169653,169654,169663,169672,169681,169691],{},[1762,169655,169656,169660],{},[1807,169657,169658],{},[30,169659,2270],{},[1807,169661,169662],{},"只读，文件不存在会报错",[1762,169664,169665,169669],{},[1807,169666,169667],{},[30,169668,2394],{},[1807,169670,169671],{},"只写，文件不存在会创建，存在会清空",[1762,169673,169674,169678],{},[1807,169675,169676],{},[30,169677,126],{},[1807,169679,169680],{},"追加，文件不存在会创建",[1762,169682,169683,169688],{},[1807,169684,169685],{},[30,169686,169687],{},"rb",[1807,169689,169690],{},"二进制只读",[1762,169692,169693,169698],{},[1807,169694,169695],{},[30,169696,169697],{},"wb",[1807,169699,169700],{},"二进制只写",[18,169702,169704],{"id":169703},"_84-读取文件","8.4 读取文件",[1599,169706,169708],{"id":169707},"_841-read","8.4.1 read",[14,169710,169711],{},"一次读取全部内容：",[23,169713,169715],{"className":31631,"code":169714,"language":31633,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[30,169716,169717,169743,169755,169762],{"__ignoreMap":28},[33,169718,169719,169721,169723,169725,169727,169729,169731,169733,169735,169737,169739,169741],{"class":35,"line":36},[33,169720,46607],{"class":955},[33,169722,14815],{"class":39},[33,169724,148044],{"class":76},[33,169726,345],{"class":47},[33,169728,148049],{"class":119},[33,169730,13686],{"class":47},[33,169732,148054],{"class":119},[33,169734,13686],{"class":47},[33,169736,148059],{"class":955},[33,169738,73],{"class":39},[33,169740,148064],{"class":119},[33,169742,884],{"class":47},[33,169744,169745,169748,169750,169752],{"class":35,"line":51},[33,169746,169747],{"class":47},"content ",[33,169749,73],{"class":39},[33,169751,149406],{"class":955},[33,169753,169754],{"class":47},".read()\n",[33,169756,169757,169759],{"class":35,"line":57},[33,169758,31668],{"class":76},[33,169760,169761],{"class":47},"(content)\n",[33,169763,169764,169766],{"class":35,"line":64},[33,169765,46607],{"class":955},[33,169767,169768],{"class":47},".close()\n",[14,169770,169771],{},"可以指定读取字符数：",[23,169773,169775],{"className":31631,"code":169774,"language":31633,"meta":28,"style":28},"content = file.read(10)\n",[30,169776,169777],{"__ignoreMap":28},[33,169778,169779,169781,169783,169785,169788,169790],{"class":35,"line":36},[33,169780,169747],{"class":47},[33,169782,73],{"class":39},[33,169784,149406],{"class":955},[33,169786,169787],{"class":47},".read(",[33,169789,77],{"class":76},[33,169791,884],{"class":47},[1599,169793,169795],{"id":169794},"_842-readline","8.4.2 readline",[14,169797,169798],{},"一次读取一行：",[23,169800,169802],{"className":31631,"code":169801,"language":31633,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[30,169803,169804,169830,169834,169845,169852,169856],{"__ignoreMap":28},[33,169805,169806,169808,169810,169812,169814,169816,169818,169820,169822,169824,169826,169828],{"class":35,"line":36},[33,169807,46607],{"class":955},[33,169809,14815],{"class":39},[33,169811,148044],{"class":76},[33,169813,345],{"class":47},[33,169815,148049],{"class":119},[33,169817,13686],{"class":47},[33,169819,148054],{"class":119},[33,169821,13686],{"class":47},[33,169823,148059],{"class":955},[33,169825,73],{"class":39},[33,169827,148064],{"class":119},[33,169829,884],{"class":47},[33,169831,169832],{"class":35,"line":51},[33,169833,160],{"emptyLinePlaceholder":159},[33,169835,169836,169838,169840,169842],{"class":35,"line":57},[33,169837,148505],{"class":47},[33,169839,73],{"class":39},[33,169841,149406],{"class":955},[33,169843,169844],{"class":47},".readline()\n",[33,169846,169847,169849],{"class":35,"line":64},[33,169848,31668],{"class":76},[33,169850,169851],{"class":47},"(line)\n",[33,169853,169854],{"class":35,"line":83},[33,169855,160],{"emptyLinePlaceholder":159},[33,169857,169858,169860],{"class":35,"line":89},[33,169859,46607],{"class":955},[33,169861,169768],{"class":47},[1599,169863,169865],{"id":169864},"_843-readlines","8.4.3 readlines",[14,169867,169868],{},"读取所有行，返回列表：",[23,169870,169872],{"className":31631,"code":169871,"language":31633,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[30,169873,169874,169900,169912,169919],{"__ignoreMap":28},[33,169875,169876,169878,169880,169882,169884,169886,169888,169890,169892,169894,169896,169898],{"class":35,"line":36},[33,169877,46607],{"class":955},[33,169879,14815],{"class":39},[33,169881,148044],{"class":76},[33,169883,345],{"class":47},[33,169885,148049],{"class":119},[33,169887,13686],{"class":47},[33,169889,148054],{"class":119},[33,169891,13686],{"class":47},[33,169893,148059],{"class":955},[33,169895,73],{"class":39},[33,169897,148064],{"class":119},[33,169899,884],{"class":47},[33,169901,169902,169905,169907,169909],{"class":35,"line":51},[33,169903,169904],{"class":47},"lines ",[33,169906,73],{"class":39},[33,169908,149406],{"class":955},[33,169910,169911],{"class":47},".readlines()\n",[33,169913,169914,169916],{"class":35,"line":57},[33,169915,31668],{"class":76},[33,169917,169918],{"class":47},"(lines)\n",[33,169920,169921,169923],{"class":35,"line":64},[33,169922,46607],{"class":955},[33,169924,169768],{"class":47},[14,169926,169927,169928,169931],{},"每一行通常带有换行符，可以用 ",[30,169929,169930],{},"strip()"," 去掉：",[23,169933,169935],{"className":31631,"code":169934,"language":31633,"meta":28,"style":28},"for line in lines:\n    print(line.strip())\n",[30,169936,169937,169949],{"__ignoreMap":28},[33,169938,169939,169941,169944,169946],{"class":35,"line":36},[33,169940,4435],{"class":39},[33,169942,169943],{"class":47}," line ",[33,169945,27296],{"class":39},[33,169947,169948],{"class":47}," lines:\n",[33,169950,169951,169953],{"class":35,"line":51},[33,169952,32552],{"class":76},[33,169954,169955],{"class":47},"(line.strip())\n",[1599,169957,169959],{"id":169958},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,169961,169962],{},"推荐读取大文件时使用：",[23,169964,169966],{"className":31631,"code":169965,"language":31633,"meta":28,"style":28},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[30,169967,169968,169994,169998,170010,170016,170020],{"__ignoreMap":28},[33,169969,169970,169972,169974,169976,169978,169980,169982,169984,169986,169988,169990,169992],{"class":35,"line":36},[33,169971,46607],{"class":955},[33,169973,14815],{"class":39},[33,169975,148044],{"class":76},[33,169977,345],{"class":47},[33,169979,148049],{"class":119},[33,169981,13686],{"class":47},[33,169983,148054],{"class":119},[33,169985,13686],{"class":47},[33,169987,148059],{"class":955},[33,169989,73],{"class":39},[33,169991,148064],{"class":119},[33,169993,884],{"class":47},[33,169995,169996],{"class":35,"line":51},[33,169997,160],{"emptyLinePlaceholder":159},[33,169999,170000,170002,170004,170006,170008],{"class":35,"line":57},[33,170001,4435],{"class":39},[33,170003,169943],{"class":47},[33,170005,27296],{"class":39},[33,170007,149406],{"class":955},[33,170009,5141],{"class":47},[33,170011,170012,170014],{"class":35,"line":64},[33,170013,32552],{"class":76},[33,170015,169955],{"class":47},[33,170017,170018],{"class":35,"line":83},[33,170019,160],{"emptyLinePlaceholder":159},[33,170021,170022,170024],{"class":35,"line":89},[33,170023,46607],{"class":955},[33,170025,169768],{"class":47},[18,170027,170029],{"id":170028},"_85-with语句","8.5 with语句",[14,170031,170032,170034],{},[30,170033,109086],{}," 会自动关闭文件，推荐使用。",[23,170036,170038],{"className":31631,"code":170037,"language":31633,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[30,170039,170040,170070,170080],{"__ignoreMap":28},[33,170041,170042,170044,170046,170048,170050,170052,170054,170056,170058,170060,170062,170064,170066,170068],{"class":35,"line":36},[33,170043,109086],{"class":39},[33,170045,148044],{"class":76},[33,170047,345],{"class":47},[33,170049,148049],{"class":119},[33,170051,13686],{"class":47},[33,170053,148054],{"class":119},[33,170055,13686],{"class":47},[33,170057,148059],{"class":955},[33,170059,73],{"class":39},[33,170061,148064],{"class":119},[33,170063,14965],{"class":47},[33,170065,32636],{"class":39},[33,170067,149406],{"class":955},[33,170069,5141],{"class":47},[33,170071,170072,170074,170076,170078],{"class":35,"line":51},[33,170073,148076],{"class":47},[33,170075,73],{"class":39},[33,170077,149406],{"class":955},[33,170079,169754],{"class":47},[33,170081,170082,170084],{"class":35,"line":57},[33,170083,32552],{"class":76},[33,170085,169761],{"class":47},[14,170087,170088],{},"等价于打开文件、读取、最后关闭，但更安全。",[18,170090,170092],{"id":170091},"_86-写入文件","8.6 写入文件",[14,170094,170095,170097],{},[30,170096,2394],{}," 模式会清空原文件。",[23,170099,170101],{"className":31631,"code":170100,"language":31633,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[30,170102,170103,170133,170150],{"__ignoreMap":28},[33,170104,170105,170107,170109,170111,170113,170115,170117,170119,170121,170123,170125,170127,170129,170131],{"class":35,"line":36},[33,170106,109086],{"class":39},[33,170108,148044],{"class":76},[33,170110,345],{"class":47},[33,170112,148049],{"class":119},[33,170114,13686],{"class":47},[33,170116,153229],{"class":119},[33,170118,13686],{"class":47},[33,170120,148059],{"class":955},[33,170122,73],{"class":39},[33,170124,148064],{"class":119},[33,170126,14965],{"class":47},[33,170128,32636],{"class":39},[33,170130,149406],{"class":955},[33,170132,5141],{"class":47},[33,170134,170135,170138,170141,170144,170146,170148],{"class":35,"line":51},[33,170136,170137],{"class":955},"    file",[33,170139,170140],{"class":47},".write(",[33,170142,170143],{"class":119},"\"hello",[33,170145,157778],{"class":76},[33,170147,1866],{"class":119},[33,170149,884],{"class":47},[33,170151,170152,170154,170156,170159,170161,170163],{"class":35,"line":57},[33,170153,170137],{"class":955},[33,170155,170140],{"class":47},[33,170157,170158],{"class":119},"\"python",[33,170160,157778],{"class":76},[33,170162,1866],{"class":119},[33,170164,884],{"class":47},[14,170166,170167],{},"写入多行：",[23,170169,170171],{"className":31631,"code":170170,"language":31633,"meta":28,"style":28},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[30,170172,170173,170208,170212,170243],{"__ignoreMap":28},[33,170174,170175,170177,170179,170181,170184,170186,170188,170190,170193,170195,170197,170199,170202,170204,170206],{"class":35,"line":36},[33,170176,169904],{"class":47},[33,170178,73],{"class":39},[33,170180,53479],{"class":47},[33,170182,170183],{"class":119},"\"小明,18",[33,170185,157778],{"class":76},[33,170187,1866],{"class":119},[33,170189,13686],{"class":47},[33,170191,170192],{"class":119},"\"小红,17",[33,170194,157778],{"class":76},[33,170196,1866],{"class":119},[33,170198,13686],{"class":47},[33,170200,170201],{"class":119},"\"小刚,19",[33,170203,157778],{"class":76},[33,170205,1866],{"class":119},[33,170207,34499],{"class":47},[33,170209,170210],{"class":35,"line":51},[33,170211,160],{"emptyLinePlaceholder":159},[33,170213,170214,170216,170218,170220,170223,170225,170227,170229,170231,170233,170235,170237,170239,170241],{"class":35,"line":57},[33,170215,109086],{"class":39},[33,170217,148044],{"class":76},[33,170219,345],{"class":47},[33,170221,170222],{"class":119},"\"students.txt\"",[33,170224,13686],{"class":47},[33,170226,153229],{"class":119},[33,170228,13686],{"class":47},[33,170230,148059],{"class":955},[33,170232,73],{"class":39},[33,170234,148064],{"class":119},[33,170236,14965],{"class":47},[33,170238,32636],{"class":39},[33,170240,149406],{"class":955},[33,170242,5141],{"class":47},[33,170244,170245,170247],{"class":35,"line":64},[33,170246,170137],{"class":955},[33,170248,170249],{"class":47},".writelines(lines)\n",[18,170251,170253],{"id":170252},"_87-追加文件","8.7 追加文件",[14,170255,170256,170258],{},[30,170257,126],{}," 模式不会清空原内容，而是在末尾追加。",[23,170260,170262],{"className":31631,"code":170261,"language":31633,"meta":28,"style":28},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[30,170263,170264,170295],{"__ignoreMap":28},[33,170265,170266,170268,170270,170272,170275,170277,170279,170281,170283,170285,170287,170289,170291,170293],{"class":35,"line":36},[33,170267,109086],{"class":39},[33,170269,148044],{"class":76},[33,170271,345],{"class":47},[33,170273,170274],{"class":119},"\"log.txt\"",[33,170276,13686],{"class":47},[33,170278,166578],{"class":119},[33,170280,13686],{"class":47},[33,170282,148059],{"class":955},[33,170284,73],{"class":39},[33,170286,148064],{"class":119},[33,170288,14965],{"class":47},[33,170290,32636],{"class":39},[33,170292,149406],{"class":955},[33,170294,5141],{"class":47},[33,170296,170297,170299,170301,170304,170306,170308],{"class":35,"line":51},[33,170298,170137],{"class":955},[33,170300,170140],{"class":47},[33,170302,170303],{"class":119},"\"程序启动",[33,170305,157778],{"class":76},[33,170307,1866],{"class":119},[33,170309,884],{"class":47},[14,170311,170312],{},"日志类文件常用追加模式。",[18,170314,170316],{"id":170315},"_88-文件编码","8.8 文件编码",[14,170318,170319],{},"编码决定文字如何保存为字节。",[14,170321,170322],{},"常见编码：",[574,170324,170325,170328],{},[564,170326,170327],{},"UTF-8：推荐。",[564,170329,170330],{},"GBK：部分 Windows 中文文件常见。",[14,170332,170333],{},"读取文件乱码时，可以尝试：",[23,170335,170337],{"className":31631,"code":170336,"language":31633,"meta":28,"style":28},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[30,170338,170339,170370],{"__ignoreMap":28},[33,170340,170341,170343,170345,170347,170349,170351,170353,170355,170357,170359,170362,170364,170366,170368],{"class":35,"line":36},[33,170342,109086],{"class":39},[33,170344,148044],{"class":76},[33,170346,345],{"class":47},[33,170348,148049],{"class":119},[33,170350,13686],{"class":47},[33,170352,148054],{"class":119},[33,170354,13686],{"class":47},[33,170356,148059],{"class":955},[33,170358,73],{"class":39},[33,170360,170361],{"class":119},"\"gbk\"",[33,170363,14965],{"class":47},[33,170365,32636],{"class":39},[33,170367,149406],{"class":955},[33,170369,5141],{"class":47},[33,170371,170372,170374,170376,170378],{"class":35,"line":51},[33,170373,148076],{"class":47},[33,170375,73],{"class":39},[33,170377,149406],{"class":955},[33,170379,169754],{"class":47},[14,170381,170382],{},"写文件时建议统一 UTF-8：",[23,170384,170386],{"className":31631,"code":170385,"language":31633,"meta":28,"style":28},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[30,170387,170388,170418],{"__ignoreMap":28},[33,170389,170390,170392,170394,170396,170398,170400,170402,170404,170406,170408,170410,170412,170414,170416],{"class":35,"line":36},[33,170391,109086],{"class":39},[33,170393,148044],{"class":76},[33,170395,345],{"class":47},[33,170397,148049],{"class":119},[33,170399,13686],{"class":47},[33,170401,153229],{"class":119},[33,170403,13686],{"class":47},[33,170405,148059],{"class":955},[33,170407,73],{"class":39},[33,170409,148064],{"class":119},[33,170411,14965],{"class":47},[33,170413,32636],{"class":39},[33,170415,149406],{"class":955},[33,170417,5141],{"class":47},[33,170419,170420,170422,170424,170427],{"class":35,"line":51},[33,170421,170137],{"class":955},[33,170423,170140],{"class":47},[33,170425,170426],{"class":119},"\"中文内容\"",[33,170428,884],{"class":47},[18,170430,170432],{"id":170431},"_89-pathlib","8.9 pathlib",[14,170434,170435,170438],{},[30,170436,170437],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[23,170440,170442],{"className":31631,"code":170441,"language":31633,"meta":28,"style":28},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[30,170443,170444,170454,170458,170476],{"__ignoreMap":28},[33,170445,170446,170448,170450,170452],{"class":35,"line":36},[33,170447,31990],{"class":39},[33,170449,109564],{"class":47},[33,170451,31645],{"class":39},[33,170453,109569],{"class":47},[33,170455,170456],{"class":35,"line":51},[33,170457,160],{"emptyLinePlaceholder":159},[33,170459,170460,170462,170464,170466,170469,170471,170473],{"class":35,"line":57},[33,170461,169564],{"class":47},[33,170463,73],{"class":39},[33,170465,109798],{"class":47},[33,170467,170468],{"class":119},"\"data\"",[33,170470,14965],{"class":47},[33,170472,2184],{"class":39},[33,170474,170475],{"class":119}," \"students.txt\"\n",[33,170477,170478,170480],{"class":35,"line":64},[33,170479,31668],{"class":76},[33,170481,170482],{"class":47},"(path)\n",[14,170484,170485],{},"创建目录：",[23,170487,170489],{"className":31631,"code":170488,"language":31633,"meta":28,"style":28},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[30,170490,170491,170501,170505,170518],{"__ignoreMap":28},[33,170492,170493,170495,170497,170499],{"class":35,"line":36},[33,170494,31990],{"class":39},[33,170496,109564],{"class":47},[33,170498,31645],{"class":39},[33,170500,109569],{"class":47},[33,170502,170503],{"class":35,"line":51},[33,170504,160],{"emptyLinePlaceholder":159},[33,170506,170507,170510,170512,170514,170516],{"class":35,"line":57},[33,170508,170509],{"class":47},"data_dir ",[33,170511,73],{"class":39},[33,170513,109798],{"class":47},[33,170515,170468],{"class":119},[33,170517,884],{"class":47},[33,170519,170520,170523,170526,170528,170530],{"class":35,"line":64},[33,170521,170522],{"class":47},"data_dir.mkdir(",[33,170524,170525],{"class":955},"exist_ok",[33,170527,73],{"class":39},[33,170529,32729],{"class":76},[33,170531,884],{"class":47},[14,170533,170534],{},"判断文件是否存在：",[23,170536,170538],{"className":31631,"code":170537,"language":31633,"meta":28,"style":28},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[30,170539,170540,170553,170557,170564],{"__ignoreMap":28},[33,170541,170542,170544,170546,170548,170551],{"class":35,"line":36},[33,170543,169564],{"class":47},[33,170545,73],{"class":39},[33,170547,109798],{"class":47},[33,170549,170550],{"class":119},"\"data\u002Fstudents.txt\"",[33,170552,884],{"class":47},[33,170554,170555],{"class":35,"line":51},[33,170556,160],{"emptyLinePlaceholder":159},[33,170558,170559,170561],{"class":35,"line":57},[33,170560,2987],{"class":39},[33,170562,170563],{"class":47}," path.exists():\n",[33,170565,170566,170568,170570,170573],{"class":35,"line":64},[33,170567,32552],{"class":76},[33,170569,345],{"class":47},[33,170571,170572],{"class":119},"\"文件存在\"",[33,170574,884],{"class":47},[14,170576,170577],{},"读写文本：",[23,170579,170581],{"className":31631,"code":170580,"language":31633,"meta":28,"style":28},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[30,170582,170583,170595,170599,170616,170633],{"__ignoreMap":28},[33,170584,170585,170587,170589,170591,170593],{"class":35,"line":36},[33,170586,169564],{"class":47},[33,170588,73],{"class":39},[33,170590,109798],{"class":47},[33,170592,148049],{"class":119},[33,170594,884],{"class":47},[33,170596,170597],{"class":35,"line":51},[33,170598,160],{"emptyLinePlaceholder":159},[33,170600,170601,170604,170606,170608,170610,170612,170614],{"class":35,"line":57},[33,170602,170603],{"class":47},"path.write_text(",[33,170605,147129],{"class":119},[33,170607,13686],{"class":47},[33,170609,148059],{"class":955},[33,170611,73],{"class":39},[33,170613,148064],{"class":119},[33,170615,884],{"class":47},[33,170617,170618,170620,170622,170625,170627,170629,170631],{"class":35,"line":64},[33,170619,169747],{"class":47},[33,170621,73],{"class":39},[33,170623,170624],{"class":47}," path.read_text(",[33,170626,148059],{"class":955},[33,170628,73],{"class":39},[33,170630,148064],{"class":119},[33,170632,884],{"class":47},[33,170634,170635,170637],{"class":35,"line":83},[33,170636,31668],{"class":76},[33,170638,169761],{"class":47},[18,170640,170642],{"id":170641},"_810-json文件","8.10 JSON文件",[14,170644,170645],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[23,170647,170649],{"className":31631,"code":170648,"language":31633,"meta":28,"style":28},"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",[30,170650,170651,170657,170661,170669,170679,170689,170697,170701,170705,170730],{"__ignoreMap":28},[33,170652,170653,170655],{"class":35,"line":36},[33,170654,31645],{"class":39},[33,170656,148344],{"class":47},[33,170658,170659],{"class":35,"line":51},[33,170660,160],{"emptyLinePlaceholder":159},[33,170662,170663,170665,170667],{"class":35,"line":57},[33,170664,150734],{"class":47},[33,170666,73],{"class":39},[33,170668,16823],{"class":47},[33,170670,170671,170673,170675,170677],{"class":35,"line":64},[33,170672,148273],{"class":119},[33,170674,52690],{"class":47},[33,170676,151141],{"class":119},[33,170678,32719],{"class":47},[33,170680,170681,170683,170685,170687],{"class":35,"line":83},[33,170682,165790],{"class":119},[33,170684,52690],{"class":47},[33,170686,2250],{"class":76},[33,170688,32719],{"class":47},[33,170690,170691,170693,170695],{"class":35,"line":89},[33,170692,165801],{"class":119},[33,170694,52690],{"class":47},[33,170696,165806],{"class":76},[33,170698,170699],{"class":35,"line":98},[33,170700,231],{"class":47},[33,170702,170703],{"class":35,"line":110},[33,170704,160],{"emptyLinePlaceholder":159},[33,170706,170707,170709,170711,170714,170716,170718,170720,170722,170724,170726,170728],{"class":35,"line":134},[33,170708,157697],{"class":47},[33,170710,73],{"class":39},[33,170712,170713],{"class":47}," json.dumps(student, ",[33,170715,148390],{"class":955},[33,170717,73],{"class":39},[33,170719,35240],{"class":76},[33,170721,13686],{"class":47},[33,170723,153265],{"class":955},[33,170725,73],{"class":39},[33,170727,707],{"class":76},[33,170729,884],{"class":47},[33,170731,170732,170734],{"class":35,"line":156},[33,170733,31668],{"class":76},[33,170735,165324],{"class":47},[14,170737,170738],{},"写入 JSON 文件：",[23,170740,170742],{"className":31631,"code":170741,"language":31633,"meta":28,"style":28},"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",[30,170743,170744,170750,170754,170762,170790,170818,170822,170826,170856],{"__ignoreMap":28},[33,170745,170746,170748],{"class":35,"line":36},[33,170747,31645],{"class":39},[33,170749,148344],{"class":47},[33,170751,170752],{"class":35,"line":51},[33,170753,160],{"emptyLinePlaceholder":159},[33,170755,170756,170758,170760],{"class":35,"line":57},[33,170757,160969],{"class":47},[33,170759,73],{"class":39},[33,170761,56700],{"class":47},[33,170763,170764,170766,170768,170770,170772,170774,170776,170778,170780,170782,170784,170786,170788],{"class":35,"line":64},[33,170765,149638],{"class":47},[33,170767,63932],{"class":119},[33,170769,52690],{"class":47},[33,170771,151141],{"class":119},[33,170773,13686],{"class":47},[33,170775,70377],{"class":119},[33,170777,52690],{"class":47},[33,170779,2250],{"class":76},[33,170781,13686],{"class":47},[33,170783,152725],{"class":119},[33,170785,52690],{"class":47},[33,170787,2584],{"class":76},[33,170789,6321],{"class":47},[33,170791,170792,170794,170796,170798,170800,170802,170804,170806,170808,170810,170812,170814,170816],{"class":35,"line":83},[33,170793,149638],{"class":47},[33,170795,63932],{"class":119},[33,170797,52690],{"class":47},[33,170799,152189],{"class":119},[33,170801,13686],{"class":47},[33,170803,70377],{"class":119},[33,170805,52690],{"class":47},[33,170807,2225],{"class":76},[33,170809,13686],{"class":47},[33,170811,152725],{"class":119},[33,170813,52690],{"class":47},[33,170815,2410],{"class":76},[33,170817,6321],{"class":47},[33,170819,170820],{"class":35,"line":89},[33,170821,34499],{"class":47},[33,170823,170824],{"class":35,"line":98},[33,170825,160],{"emptyLinePlaceholder":159},[33,170827,170828,170830,170832,170834,170836,170838,170840,170842,170844,170846,170848,170850,170852,170854],{"class":35,"line":110},[33,170829,109086],{"class":39},[33,170831,148044],{"class":76},[33,170833,345],{"class":47},[33,170835,153084],{"class":119},[33,170837,13686],{"class":47},[33,170839,153229],{"class":119},[33,170841,13686],{"class":47},[33,170843,148059],{"class":955},[33,170845,73],{"class":39},[33,170847,148064],{"class":119},[33,170849,14965],{"class":47},[33,170851,32636],{"class":39},[33,170853,149406],{"class":955},[33,170855,5141],{"class":47},[33,170857,170858,170861,170863,170865,170867,170869,170871,170873,170875,170877,170879],{"class":35,"line":134},[33,170859,170860],{"class":47},"    json.dump(students, ",[33,170862,46607],{"class":955},[33,170864,13686],{"class":47},[33,170866,148390],{"class":955},[33,170868,73],{"class":39},[33,170870,35240],{"class":76},[33,170872,13686],{"class":47},[33,170874,153265],{"class":955},[33,170876,73],{"class":39},[33,170878,707],{"class":76},[33,170880,884],{"class":47},[14,170882,170883],{},"读取 JSON 文件：",[23,170885,170887],{"className":31631,"code":170886,"language":31633,"meta":28,"style":28},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[30,170888,170889,170895,170899,170929,170941,170945],{"__ignoreMap":28},[33,170890,170891,170893],{"class":35,"line":36},[33,170892,31645],{"class":39},[33,170894,148344],{"class":47},[33,170896,170897],{"class":35,"line":51},[33,170898,160],{"emptyLinePlaceholder":159},[33,170900,170901,170903,170905,170907,170909,170911,170913,170915,170917,170919,170921,170923,170925,170927],{"class":35,"line":57},[33,170902,109086],{"class":39},[33,170904,148044],{"class":76},[33,170906,345],{"class":47},[33,170908,153084],{"class":119},[33,170910,13686],{"class":47},[33,170912,148054],{"class":119},[33,170914,13686],{"class":47},[33,170916,148059],{"class":955},[33,170918,73],{"class":39},[33,170920,148064],{"class":119},[33,170922,14965],{"class":47},[33,170924,32636],{"class":39},[33,170926,149406],{"class":955},[33,170928,5141],{"class":47},[33,170930,170931,170933,170935,170937,170939],{"class":35,"line":64},[33,170932,154290],{"class":47},[33,170934,73],{"class":39},[33,170936,149417],{"class":47},[33,170938,46607],{"class":955},[33,170940,884],{"class":47},[33,170942,170943],{"class":35,"line":83},[33,170944,160],{"emptyLinePlaceholder":159},[33,170946,170947,170949],{"class":35,"line":89},[33,170948,31668],{"class":76},[33,170950,166248],{"class":47},[18,170952,170954],{"id":170953},"_811-csv文件","8.11 CSV文件",[14,170956,170957],{},"CSV 是逗号分隔值，常用于表格数据。",[14,170959,170960],{},"写入 CSV：",[23,170962,170964],{"className":31631,"code":170963,"language":31633,"meta":28,"style":28},"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",[30,170965,170966,170973,170977,170985,171003,171019,171035,171039,171043,171083,171097],{"__ignoreMap":28},[33,170967,170968,170970],{"class":35,"line":36},[33,170969,31645],{"class":39},[33,170971,170972],{"class":47}," csv\n",[33,170974,170975],{"class":35,"line":51},[33,170976,160],{"emptyLinePlaceholder":159},[33,170978,170979,170981,170983],{"class":35,"line":57},[33,170980,160969],{"class":47},[33,170982,73],{"class":39},[33,170984,56700],{"class":47},[33,170986,170987,170990,170992,170994,170996,170998,171001],{"class":35,"line":64},[33,170988,170989],{"class":47},"    [",[33,170991,74352],{"class":119},[33,170993,13686],{"class":47},[33,170995,74385],{"class":119},[33,170997,13686],{"class":47},[33,170999,171000],{"class":119},"\"成绩\"",[33,171002,89089],{"class":47},[33,171004,171005,171007,171009,171011,171013,171015,171017],{"class":35,"line":83},[33,171006,170989],{"class":47},[33,171008,151141],{"class":119},[33,171010,13686],{"class":47},[33,171012,2250],{"class":76},[33,171014,13686],{"class":47},[33,171016,2584],{"class":76},[33,171018,89089],{"class":47},[33,171020,171021,171023,171025,171027,171029,171031,171033],{"class":35,"line":89},[33,171022,170989],{"class":47},[33,171024,152189],{"class":119},[33,171026,13686],{"class":47},[33,171028,2225],{"class":76},[33,171030,13686],{"class":47},[33,171032,2410],{"class":76},[33,171034,89089],{"class":47},[33,171036,171037],{"class":35,"line":98},[33,171038,34499],{"class":47},[33,171040,171041],{"class":35,"line":110},[33,171042,160],{"emptyLinePlaceholder":159},[33,171044,171045,171047,171049,171051,171054,171056,171058,171060,171062,171064,171066,171068,171071,171073,171075,171077,171079,171081],{"class":35,"line":134},[33,171046,109086],{"class":39},[33,171048,148044],{"class":76},[33,171050,345],{"class":47},[33,171052,171053],{"class":119},"\"students.csv\"",[33,171055,13686],{"class":47},[33,171057,153229],{"class":119},[33,171059,13686],{"class":47},[33,171061,148059],{"class":955},[33,171063,73],{"class":39},[33,171065,148064],{"class":119},[33,171067,13686],{"class":47},[33,171069,171070],{"class":955},"newline",[33,171072,73],{"class":39},[33,171074,1520],{"class":119},[33,171076,14965],{"class":47},[33,171078,32636],{"class":39},[33,171080,149406],{"class":955},[33,171082,5141],{"class":47},[33,171084,171085,171088,171090,171093,171095],{"class":35,"line":156},[33,171086,171087],{"class":47},"    writer ",[33,171089,73],{"class":39},[33,171091,171092],{"class":47}," csv.writer(",[33,171094,46607],{"class":955},[33,171096,884],{"class":47},[33,171098,171099],{"class":35,"line":163},[33,171100,171101],{"class":47},"    writer.writerows(students)\n",[14,171103,171104],{},"读取 CSV：",[23,171106,171108],{"className":31631,"code":171107,"language":31633,"meta":28,"style":28},"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",[30,171109,171110,171116,171120,171150,171164,171176],{"__ignoreMap":28},[33,171111,171112,171114],{"class":35,"line":36},[33,171113,31645],{"class":39},[33,171115,170972],{"class":47},[33,171117,171118],{"class":35,"line":51},[33,171119,160],{"emptyLinePlaceholder":159},[33,171121,171122,171124,171126,171128,171130,171132,171134,171136,171138,171140,171142,171144,171146,171148],{"class":35,"line":57},[33,171123,109086],{"class":39},[33,171125,148044],{"class":76},[33,171127,345],{"class":47},[33,171129,171053],{"class":119},[33,171131,13686],{"class":47},[33,171133,148054],{"class":119},[33,171135,13686],{"class":47},[33,171137,148059],{"class":955},[33,171139,73],{"class":39},[33,171141,148064],{"class":119},[33,171143,14965],{"class":47},[33,171145,32636],{"class":39},[33,171147,149406],{"class":955},[33,171149,5141],{"class":47},[33,171151,171152,171155,171157,171160,171162],{"class":35,"line":64},[33,171153,171154],{"class":47},"    reader ",[33,171156,73],{"class":39},[33,171158,171159],{"class":47}," csv.reader(",[33,171161,46607],{"class":955},[33,171163,884],{"class":47},[33,171165,171166,171168,171171,171173],{"class":35,"line":83},[33,171167,857],{"class":39},[33,171169,171170],{"class":47}," row ",[33,171172,27296],{"class":39},[33,171174,171175],{"class":47}," reader:\n",[33,171177,171178,171180],{"class":35,"line":89},[33,171179,33704],{"class":76},[33,171181,171182],{"class":47},"(row)\n",[14,171184,171185],{},"使用字典写入：",[23,171187,171189],{"className":31631,"code":171188,"language":31633,"meta":28,"style":28},"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",[30,171190,171191,171197,171201,171209,171237,171265,171269,171273,171311,171332,171353,171358],{"__ignoreMap":28},[33,171192,171193,171195],{"class":35,"line":36},[33,171194,31645],{"class":39},[33,171196,170972],{"class":47},[33,171198,171199],{"class":35,"line":51},[33,171200,160],{"emptyLinePlaceholder":159},[33,171202,171203,171205,171207],{"class":35,"line":57},[33,171204,160969],{"class":47},[33,171206,73],{"class":39},[33,171208,56700],{"class":47},[33,171210,171211,171213,171215,171217,171219,171221,171223,171225,171227,171229,171231,171233,171235],{"class":35,"line":64},[33,171212,149638],{"class":47},[33,171214,63932],{"class":119},[33,171216,52690],{"class":47},[33,171218,151141],{"class":119},[33,171220,13686],{"class":47},[33,171222,70377],{"class":119},[33,171224,52690],{"class":47},[33,171226,2250],{"class":76},[33,171228,13686],{"class":47},[33,171230,152725],{"class":119},[33,171232,52690],{"class":47},[33,171234,2584],{"class":76},[33,171236,6321],{"class":47},[33,171238,171239,171241,171243,171245,171247,171249,171251,171253,171255,171257,171259,171261,171263],{"class":35,"line":83},[33,171240,149638],{"class":47},[33,171242,63932],{"class":119},[33,171244,52690],{"class":47},[33,171246,152189],{"class":119},[33,171248,13686],{"class":47},[33,171250,70377],{"class":119},[33,171252,52690],{"class":47},[33,171254,2225],{"class":76},[33,171256,13686],{"class":47},[33,171258,152725],{"class":119},[33,171260,52690],{"class":47},[33,171262,2410],{"class":76},[33,171264,6321],{"class":47},[33,171266,171267],{"class":35,"line":89},[33,171268,34499],{"class":47},[33,171270,171271],{"class":35,"line":98},[33,171272,160],{"emptyLinePlaceholder":159},[33,171274,171275,171277,171279,171281,171283,171285,171287,171289,171291,171293,171295,171297,171299,171301,171303,171305,171307,171309],{"class":35,"line":110},[33,171276,109086],{"class":39},[33,171278,148044],{"class":76},[33,171280,345],{"class":47},[33,171282,171053],{"class":119},[33,171284,13686],{"class":47},[33,171286,153229],{"class":119},[33,171288,13686],{"class":47},[33,171290,148059],{"class":955},[33,171292,73],{"class":39},[33,171294,148064],{"class":119},[33,171296,13686],{"class":47},[33,171298,171070],{"class":955},[33,171300,73],{"class":39},[33,171302,1520],{"class":119},[33,171304,14965],{"class":47},[33,171306,32636],{"class":39},[33,171308,149406],{"class":955},[33,171310,5141],{"class":47},[33,171312,171313,171316,171318,171320,171322,171324,171326,171328,171330],{"class":35,"line":134},[33,171314,171315],{"class":47},"    fieldnames ",[33,171317,73],{"class":39},[33,171319,53479],{"class":47},[33,171321,63932],{"class":119},[33,171323,13686],{"class":47},[33,171325,70377],{"class":119},[33,171327,13686],{"class":47},[33,171329,152725],{"class":119},[33,171331,34499],{"class":47},[33,171333,171334,171336,171338,171341,171343,171345,171348,171350],{"class":35,"line":156},[33,171335,171087],{"class":47},[33,171337,73],{"class":39},[33,171339,171340],{"class":47}," csv.DictWriter(",[33,171342,46607],{"class":955},[33,171344,13686],{"class":47},[33,171346,171347],{"class":955},"fieldnames",[33,171349,73],{"class":39},[33,171351,171352],{"class":47},"fieldnames)\n",[33,171354,171355],{"class":35,"line":163},[33,171356,171357],{"class":47},"    writer.writeheader()\n",[33,171359,171360],{"class":35,"line":169},[33,171361,171101],{"class":47},[18,171363,171365],{"id":171364},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,171367,124545],{},[574,171369,171370,171373,171376],{},[564,171371,171372],{},"读取文本文件。",[564,171374,171375],{},"统计每个单词出现次数。",[564,171377,171378],{},"输出出现次数最多的前 10 个单词。",[14,171380,11286],{},[23,171382,171384],{"className":31631,"code":171383,"language":31633,"meta":28,"style":28},"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",[30,171385,171386,171396,171400,171413,171429,171433,171443,171452,171456,171468,171488,171497,171501,171519,171523,171553,171557,171573],{"__ignoreMap":28},[33,171387,171388,171390,171392,171394],{"class":35,"line":36},[33,171389,31990],{"class":39},[33,171391,109564],{"class":47},[33,171393,31645],{"class":39},[33,171395,109569],{"class":47},[33,171397,171398],{"class":35,"line":51},[33,171399,160],{"emptyLinePlaceholder":159},[33,171401,171402,171404,171406,171408,171411],{"class":35,"line":57},[33,171403,169564],{"class":47},[33,171405,73],{"class":39},[33,171407,109798],{"class":47},[33,171409,171410],{"class":119},"\"article.txt\"",[33,171412,884],{"class":47},[33,171414,171415,171417,171419,171421,171423,171425,171427],{"class":35,"line":64},[33,171416,169747],{"class":47},[33,171418,73],{"class":39},[33,171420,170624],{"class":47},[33,171422,148059],{"class":955},[33,171424,73],{"class":39},[33,171426,148064],{"class":119},[33,171428,884],{"class":47},[33,171430,171431],{"class":35,"line":83},[33,171432,160],{"emptyLinePlaceholder":159},[33,171434,171435,171438,171440],{"class":35,"line":89},[33,171436,171437],{"class":47},"words ",[33,171439,73],{"class":39},[33,171441,171442],{"class":47}," content.lower().split()\n",[33,171444,171445,171448,171450],{"class":35,"line":98},[33,171446,171447],{"class":47},"counter ",[33,171449,73],{"class":39},[33,171451,89121],{"class":47},[33,171453,171454],{"class":35,"line":110},[33,171455,160],{"emptyLinePlaceholder":159},[33,171457,171458,171460,171463,171465],{"class":35,"line":134},[33,171459,4435],{"class":39},[33,171461,171462],{"class":47}," word ",[33,171464,27296],{"class":39},[33,171466,171467],{"class":47}," words:\n",[33,171469,171470,171473,171475,171478,171481,171483,171486],{"class":35,"line":156},[33,171471,171472],{"class":47},"    word ",[33,171474,73],{"class":39},[33,171476,171477],{"class":47}," word.strip(",[33,171479,171480],{"class":119},"\".,!?;:",[33,171482,157748],{"class":76},[33,171484,171485],{"class":119},"'()[]\"",[33,171487,884],{"class":47},[33,171489,171490,171492,171494],{"class":35,"line":163},[33,171491,4509],{"class":39},[33,171493,40183],{"class":39},[33,171495,171496],{"class":47}," word:\n",[33,171498,171499],{"class":35,"line":169},[33,171500,149765],{"class":39},[33,171502,171503,171506,171508,171511,171513,171515,171517],{"class":35,"line":175},[33,171504,171505],{"class":47},"    counter[word] ",[33,171507,73],{"class":39},[33,171509,171510],{"class":47}," counter.get(word, ",[33,171512,766],{"class":76},[33,171514,14965],{"class":47},[33,171516,1271],{"class":39},[33,171518,56952],{"class":76},[33,171520,171521],{"class":35,"line":181},[33,171522,160],{"emptyLinePlaceholder":159},[33,171524,171525,171528,171530,171532,171535,171537,171539,171541,171543,171545,171547,171549,171551],{"class":35,"line":196},[33,171526,171527],{"class":47},"items ",[33,171529,73],{"class":39},[33,171531,164857],{"class":76},[33,171533,171534],{"class":47},"(counter.items(), ",[33,171536,155199],{"class":955},[33,171538,155202],{"class":39},[33,171540,155205],{"class":47},[33,171542,701],{"class":76},[33,171544,113455],{"class":47},[33,171546,164781],{"class":955},[33,171548,73],{"class":39},[33,171550,32729],{"class":76},[33,171552,884],{"class":47},[33,171554,171555],{"class":35,"line":213},[33,171556,160],{"emptyLinePlaceholder":159},[33,171558,171559,171561,171564,171566,171569,171571],{"class":35,"line":228},[33,171560,4435],{"class":39},[33,171562,171563],{"class":47}," word, count ",[33,171565,27296],{"class":39},[33,171567,171568],{"class":47}," items[:",[33,171570,77],{"class":76},[33,171572,167008],{"class":47},[33,171574,171575,171577],{"class":35,"line":1345},[33,171576,32552],{"class":76},[33,171578,171579],{"class":47},"(word, count)\n",[18,171581,171583],{"id":171582},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[23,171585,171587],{"className":31631,"code":171586,"language":31633,"meta":28,"style":28},"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",[30,171588,171589,171595,171605,171609,171621,171625,171629,171637,171647,171653,171657,171687,171697,171701,171705,171713,171743,171767,171771,171775,171783,171812,171817],{"__ignoreMap":28},[33,171590,171591,171593],{"class":35,"line":36},[33,171592,31645],{"class":39},[33,171594,148344],{"class":47},[33,171596,171597,171599,171601,171603],{"class":35,"line":51},[33,171598,31990],{"class":39},[33,171600,109564],{"class":47},[33,171602,31645],{"class":39},[33,171604,109569],{"class":47},[33,171606,171607],{"class":35,"line":57},[33,171608,160],{"emptyLinePlaceholder":159},[33,171610,171611,171613,171615,171617,171619],{"class":35,"line":64},[33,171612,153077],{"class":76},[33,171614,14815],{"class":39},[33,171616,109798],{"class":47},[33,171618,153084],{"class":119},[33,171620,884],{"class":47},[33,171622,171623],{"class":35,"line":83},[33,171624,160],{"emptyLinePlaceholder":159},[33,171626,171627],{"class":35,"line":89},[33,171628,160],{"emptyLinePlaceholder":159},[33,171630,171631,171633,171635],{"class":35,"line":98},[33,171632,33200],{"class":39},[33,171634,153101],{"class":43},[33,171636,33206],{"class":47},[33,171638,171639,171641,171643,171645],{"class":35,"line":110},[33,171640,4509],{"class":39},[33,171642,40183],{"class":39},[33,171644,153112],{"class":76},[33,171646,153115],{"class":47},[33,171648,171649,171651],{"class":35,"line":134},[33,171650,16003],{"class":39},[33,171652,53091],{"class":47},[33,171654,171655],{"class":35,"line":156},[33,171656,160],{"emptyLinePlaceholder":159},[33,171658,171659,171661,171663,171665,171667,171669,171671,171673,171675,171677,171679,171681,171683,171685],{"class":35,"line":163},[33,171660,35431],{"class":39},[33,171662,148044],{"class":76},[33,171664,345],{"class":47},[33,171666,153077],{"class":76},[33,171668,13686],{"class":47},[33,171670,148054],{"class":119},[33,171672,13686],{"class":47},[33,171674,148059],{"class":955},[33,171676,73],{"class":39},[33,171678,148064],{"class":119},[33,171680,14965],{"class":47},[33,171682,32636],{"class":39},[33,171684,149406],{"class":955},[33,171686,5141],{"class":47},[33,171688,171689,171691,171693,171695],{"class":35,"line":169},[33,171690,16003],{"class":39},[33,171692,149417],{"class":47},[33,171694,46607],{"class":955},[33,171696,884],{"class":47},[33,171698,171699],{"class":35,"line":175},[33,171700,160],{"emptyLinePlaceholder":159},[33,171702,171703],{"class":35,"line":181},[33,171704,160],{"emptyLinePlaceholder":159},[33,171706,171707,171709,171711],{"class":35,"line":196},[33,171708,33200],{"class":39},[33,171710,153211],{"class":43},[33,171712,153214],{"class":47},[33,171714,171715,171717,171719,171721,171723,171725,171727,171729,171731,171733,171735,171737,171739,171741],{"class":35,"line":213},[33,171716,35431],{"class":39},[33,171718,148044],{"class":76},[33,171720,345],{"class":47},[33,171722,153077],{"class":76},[33,171724,13686],{"class":47},[33,171726,153229],{"class":119},[33,171728,13686],{"class":47},[33,171730,148059],{"class":955},[33,171732,73],{"class":39},[33,171734,148064],{"class":119},[33,171736,14965],{"class":47},[33,171738,32636],{"class":39},[33,171740,149406],{"class":955},[33,171742,5141],{"class":47},[33,171744,171745,171747,171749,171751,171753,171755,171757,171759,171761,171763,171765],{"class":35,"line":228},[33,171746,153250],{"class":47},[33,171748,46607],{"class":955},[33,171750,13686],{"class":47},[33,171752,148390],{"class":955},[33,171754,73],{"class":39},[33,171756,35240],{"class":76},[33,171758,13686],{"class":47},[33,171760,153265],{"class":955},[33,171762,73],{"class":39},[33,171764,707],{"class":76},[33,171766,884],{"class":47},[33,171768,171769],{"class":35,"line":1345},[33,171770,160],{"emptyLinePlaceholder":159},[33,171772,171773],{"class":35,"line":1350},[33,171774,160],{"emptyLinePlaceholder":159},[33,171776,171777,171779,171781],{"class":35,"line":1359},[33,171778,160969],{"class":47},[33,171780,73],{"class":39},[33,171782,154295],{"class":47},[33,171784,171785,171788,171790,171792,171794,171796,171798,171800,171802,171804,171806,171808,171810],{"class":35,"line":1364},[33,171786,171787],{"class":47},"students.append({",[33,171789,63932],{"class":119},[33,171791,52690],{"class":47},[33,171793,151141],{"class":119},[33,171795,13686],{"class":47},[33,171797,70377],{"class":119},[33,171799,52690],{"class":47},[33,171801,2250],{"class":76},[33,171803,13686],{"class":47},[33,171805,152725],{"class":119},[33,171807,52690],{"class":47},[33,171809,2584],{"class":76},[33,171811,166405],{"class":47},[33,171813,171814],{"class":35,"line":1370},[33,171815,171816],{"class":47},"save_students(students)\n",[33,171818,171819,171821,171823,171826],{"class":35,"line":1425},[33,171820,31668],{"class":76},[33,171822,345],{"class":47},[33,171824,171825],{"class":119},"\"保存成功\"",[33,171827,884],{"class":47},[18,171829,171831],{"id":171830},"_814-易错点","8.14 易错点",[574,171833,171834,171838,171844,171849,171856,171863],{},[564,171835,171836,170097],{},[30,171837,2394],{},[564,171839,171840,171841,29638],{},"读写中文要指定 ",[30,171842,171843],{},"encoding=\"utf-8\"",[564,171845,171846,171847,29638],{},"打开文件后要关闭，推荐使用 ",[30,171848,109086],{},[564,171850,171851,171852,171855],{},"读取大文件不要直接 ",[30,171853,171854],{},"read()"," 全部内容。",[564,171857,171858,171859,171862],{},"Windows 写 CSV 时建议加 ",[30,171860,171861],{},"newline=\"\"","，避免空行。",[564,171864,171865],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[18,171867,171869],{"id":171868},"_815-本章练习","8.15 本章练习",[574,171871,171872,171879,171884,171887,171890],{},[564,171873,171874,171875,171878],{},"写入一个 ",[30,171876,171877],{},"students.txt","，每行保存一个学生姓名。",[564,171880,105608,171881,171883],{},[30,171882,171877],{}," 并输出所有学生。",[564,171885,171886],{},"把学生列表保存为 JSON 文件。",[564,171888,171889],{},"从 JSON 文件读取学生数据，计算平均分。",[564,171891,171892,171893,171896,171897,171900],{},"写一个日志函数 ",[30,171894,171895],{},"write_log(message)","，每次调用向 ",[30,171898,171899],{},"app.log"," 追加一行。",[1544,171902,171903],{},"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":28,"searchDepth":51,"depth":51,"links":171905},[171906,171907,171911,171912,171918,171919,171920,171921,171922,171923,171924,171925,171926,171927,171928],{"id":169417,"depth":51,"text":169418},{"id":169458,"depth":51,"text":169459,"children":171908},[171909,171910],{"id":169462,"depth":57,"text":169463},{"id":169496,"depth":57,"text":169497},{"id":169610,"depth":51,"text":169611},{"id":169703,"depth":51,"text":169704,"children":171913},[171914,171915,171916,171917],{"id":169707,"depth":57,"text":169708},{"id":169794,"depth":57,"text":169795},{"id":169864,"depth":57,"text":169865},{"id":169958,"depth":57,"text":169959},{"id":170028,"depth":51,"text":170029},{"id":170091,"depth":51,"text":170092},{"id":170252,"depth":51,"text":170253},{"id":170315,"depth":51,"text":170316},{"id":170431,"depth":51,"text":170432},{"id":170641,"depth":51,"text":170642},{"id":170953,"depth":51,"text":170954},{"id":171364,"depth":51,"text":171365},{"id":171582,"depth":51,"text":171583},{"id":171830,"depth":51,"text":171831},{"id":171868,"depth":51,"text":171869},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169409,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171935,"title":171936,"body":171937,"description":24628,"extension":1557,"meta":174123,"navigation":159,"path":174124,"seo":174125,"stem":174126,"__hash__":174127},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171938,"toc":174090},[171939,171942,171946,171949,171952,172044,172046,172065,172070,172074,172077,172080,172109,172116,172119,172123,172126,172155,172157,172209,172215,172268,172272,172370,172373,172440,172444,172501,172503,172509,172513,172518,172524,172615,172620,172624,172627,172705,172708,172746,172750,172868,172871,172875,172878,172923,172926,172930,172935,172941,172991,172994,173025,173029,173033,173063,173067,173102,173106,173141,173181,173185,173201,173204,173208,173212,173291,173295,173336,173340,173395,173399,173433,173437,173467,173476,173483,173489,173546,173549,173557,173560,173564,173571,173574,173580,173583,173600,173605,173609,173615,173628,173631,173668,173671,173682,173685,173699,173702,173716,173720,173727,173760,173763,173765,173771,173774,173778,173780,173786,173791,173964,173968,174031,174035,174059,174063,174087],[10,171940,171936],{"id":171941},"_9-异常模块与包",[18,171943,171945],{"id":171944},"_91-什么是异常","9.1 什么是异常",[14,171947,171948],{},"异常是程序运行过程中出现的错误。",[14,171950,171951],{},"常见异常：",[1756,171953,171954,171963],{},[1759,171955,171956],{},[1762,171957,171958,171961],{},[1765,171959,171960],{},"异常",[1765,171962,27122],{},[1802,171964,171965,171975,171985,171994,172004,172014,172024,172034],{},[1762,171966,171967,171972],{},[1807,171968,171969],{},[30,171970,171971],{},"NameError",[1807,171973,171974],{},"使用了未定义变量",[1762,171976,171977,171982],{},[1807,171978,171979],{},[30,171980,171981],{},"TypeError",[1807,171983,171984],{},"类型不匹配",[1762,171986,171987,171991],{},[1807,171988,171989],{},[30,171990,156087],{},[1807,171992,171993],{},"值不合法",[1762,171995,171996,172001],{},[1807,171997,171998],{},[30,171999,172000],{},"IndexError",[1807,172002,172003],{},"列表索引越界",[1762,172005,172006,172011],{},[1807,172007,172008],{},[30,172009,172010],{},"KeyError",[1807,172012,172013],{},"字典 key 不存在",[1762,172015,172016,172021],{},[1807,172017,172018],{},[30,172019,172020],{},"FileNotFoundError",[1807,172022,172023],{},"文件不存在",[1762,172025,172026,172031],{},[1807,172027,172028],{},[30,172029,172030],{},"ZeroDivisionError",[1807,172032,172033],{},"除数为 0",[1762,172035,172036,172041],{},[1807,172037,172038],{},[30,172039,172040],{},"ImportError",[1807,172042,172043],{},"导入失败",[14,172045,16386],{},[23,172047,172049],{"className":31631,"code":172048,"language":31633,"meta":28,"style":28},"num = int(\"abc\")\n",[30,172050,172051],{"__ignoreMap":28},[33,172052,172053,172055,172057,172059,172061,172063],{"class":35,"line":36},[33,172054,157040],{"class":47},[33,172056,73],{"class":39},[33,172058,591],{"class":76},[33,172060,345],{"class":47},[33,172062,157133],{"class":119},[33,172064,884],{"class":47},[14,172066,172067,172068,29638],{},"会触发 ",[30,172069,156087],{},[18,172071,172073],{"id":172072},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,172075,172076],{},"如果不处理异常，程序会直接终止。",[14,172078,172079],{},"例如用户输入年龄：",[23,172081,172083],{"className":31631,"code":172082,"language":31633,"meta":28,"style":28},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[30,172084,172085,172103],{"__ignoreMap":28},[33,172086,172087,172089,172091,172093,172095,172097,172099,172101],{"class":35,"line":36},[33,172088,147799],{"class":47},[33,172090,73],{"class":39},[33,172092,591],{"class":76},[33,172094,345],{"class":47},[33,172096,55074],{"class":76},[33,172098,345],{"class":47},[33,172100,153647],{"class":119},[33,172102,31750],{"class":47},[33,172104,172105,172107],{"class":35,"line":51},[33,172106,31668],{"class":76},[33,172108,157014],{"class":47},[14,172110,172111,172112,172115],{},"用户输入 ",[30,172113,172114],{},"abc","，程序就会报错退出。",[14,172117,172118],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[18,172120,172122],{"id":172121},"_93-try-except","9.3 try except",[14,172124,172125],{},"基础语法：",[23,172127,172129],{"className":31631,"code":172128,"language":31633,"meta":28,"style":28},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[30,172130,172131,172138,172143,172150],{"__ignoreMap":28},[33,172132,172133,172136],{"class":35,"line":36},[33,172134,172135],{"class":39},"try",[33,172137,5141],{"class":47},[33,172139,172140],{"class":35,"line":51},[33,172141,172142],{"class":47},"    可能出错的代码\n",[33,172144,172145,172148],{"class":35,"line":57},[33,172146,172147],{"class":39},"except",[33,172149,5141],{"class":47},[33,172151,172152],{"class":35,"line":64},[33,172153,172154],{"class":47},"    出错后的处理代码\n",[14,172156,16386],{},[23,172158,172160],{"className":31631,"code":172159,"language":31633,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[30,172161,172162,172168,172186,172192,172198],{"__ignoreMap":28},[33,172163,172164,172166],{"class":35,"line":36},[33,172165,172135],{"class":39},[33,172167,5141],{"class":47},[33,172169,172170,172172,172174,172176,172178,172180,172182,172184],{"class":35,"line":51},[33,172171,153639],{"class":47},[33,172173,73],{"class":39},[33,172175,591],{"class":76},[33,172177,345],{"class":47},[33,172179,55074],{"class":76},[33,172181,345],{"class":47},[33,172183,153647],{"class":119},[33,172185,31750],{"class":47},[33,172187,172188,172190],{"class":35,"line":57},[33,172189,32552],{"class":76},[33,172191,157014],{"class":47},[33,172193,172194,172196],{"class":35,"line":64},[33,172195,172147],{"class":39},[33,172197,5141],{"class":47},[33,172199,172200,172202,172204,172207],{"class":35,"line":83},[33,172201,32552],{"class":76},[33,172203,345],{"class":47},[33,172205,172206],{"class":119},"\"年龄必须是数字\"",[33,172208,884],{"class":47},[14,172210,172211,172212,172214],{},"不建议裸写 ",[30,172213,172147],{},"，最好指定异常类型。",[23,172216,172218],{"className":31631,"code":172217,"language":31633,"meta":28,"style":28},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[30,172219,172220,172226,172244,172250,172258],{"__ignoreMap":28},[33,172221,172222,172224],{"class":35,"line":36},[33,172223,172135],{"class":39},[33,172225,5141],{"class":47},[33,172227,172228,172230,172232,172234,172236,172238,172240,172242],{"class":35,"line":51},[33,172229,153639],{"class":47},[33,172231,73],{"class":39},[33,172233,591],{"class":76},[33,172235,345],{"class":47},[33,172237,55074],{"class":76},[33,172239,345],{"class":47},[33,172241,153647],{"class":119},[33,172243,31750],{"class":47},[33,172245,172246,172248],{"class":35,"line":57},[33,172247,32552],{"class":76},[33,172249,157014],{"class":47},[33,172251,172252,172254,172256],{"class":35,"line":64},[33,172253,172147],{"class":39},[33,172255,153479],{"class":76},[33,172257,5141],{"class":47},[33,172259,172260,172262,172264,172266],{"class":35,"line":83},[33,172261,32552],{"class":76},[33,172263,345],{"class":47},[33,172265,172206],{"class":119},[33,172267,884],{"class":47},[18,172269,172271],{"id":172270},"_94-捕获多个异常","9.4 捕获多个异常",[23,172273,172275],{"className":31631,"code":172274,"language":31633,"meta":28,"style":28},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[30,172276,172277,172283,172304,172324,172331,172339,172350,172359],{"__ignoreMap":28},[33,172278,172279,172281],{"class":35,"line":36},[33,172280,172135],{"class":39},[33,172282,5141],{"class":47},[33,172284,172285,172288,172290,172292,172294,172296,172298,172300,172302],{"class":35,"line":51},[33,172286,172287],{"class":47},"    nums ",[33,172289,73],{"class":39},[33,172291,53479],{"class":47},[33,172293,701],{"class":76},[33,172295,13686],{"class":47},[33,172297,707],{"class":76},[33,172299,13686],{"class":47},[33,172301,712],{"class":76},[33,172303,34499],{"class":47},[33,172305,172306,172309,172311,172313,172315,172317,172319,172322],{"class":35,"line":57},[33,172307,172308],{"class":47},"    index ",[33,172310,73],{"class":39},[33,172312,591],{"class":76},[33,172314,345],{"class":47},[33,172316,55074],{"class":76},[33,172318,345],{"class":47},[33,172320,172321],{"class":119},"\"请输入索引:\"",[33,172323,31750],{"class":47},[33,172325,172326,172328],{"class":35,"line":64},[33,172327,32552],{"class":76},[33,172329,172330],{"class":47},"(nums[index])\n",[33,172332,172333,172335,172337],{"class":35,"line":83},[33,172334,172147],{"class":39},[33,172336,153479],{"class":76},[33,172338,5141],{"class":47},[33,172340,172341,172343,172345,172348],{"class":35,"line":89},[33,172342,32552],{"class":76},[33,172344,345],{"class":47},[33,172346,172347],{"class":119},"\"索引必须是整数\"",[33,172349,884],{"class":47},[33,172351,172352,172354,172357],{"class":35,"line":98},[33,172353,172147],{"class":39},[33,172355,172356],{"class":76}," IndexError",[33,172358,5141],{"class":47},[33,172360,172361,172363,172365,172368],{"class":35,"line":110},[33,172362,32552],{"class":76},[33,172364,345],{"class":47},[33,172366,172367],{"class":119},"\"索引越界\"",[33,172369,884],{"class":47},[14,172371,172372],{},"多个异常使用相同处理逻辑：",[23,172374,172376],{"className":31631,"code":172375,"language":31633,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[30,172377,172378,172384,172402,172415,172429],{"__ignoreMap":28},[33,172379,172380,172382],{"class":35,"line":36},[33,172381,172135],{"class":39},[33,172383,5141],{"class":47},[33,172385,172386,172388,172390,172392,172394,172396,172398,172400],{"class":35,"line":51},[33,172387,46846],{"class":47},[33,172389,73],{"class":39},[33,172391,591],{"class":76},[33,172393,345],{"class":47},[33,172395,55074],{"class":76},[33,172397,345],{"class":47},[33,172399,157049],{"class":119},[33,172401,31750],{"class":47},[33,172403,172404,172406,172408,172410,172412],{"class":35,"line":57},[33,172405,32552],{"class":76},[33,172407,345],{"class":47},[33,172409,77],{"class":76},[33,172411,157299],{"class":39},[33,172413,172414],{"class":47}," num)\n",[33,172416,172417,172419,172421,172423,172425,172427],{"class":35,"line":64},[33,172418,172147],{"class":39},[33,172420,860],{"class":47},[33,172422,156087],{"class":76},[33,172424,13686],{"class":47},[33,172426,172030],{"class":76},[33,172428,32039],{"class":47},[33,172430,172431,172433,172435,172438],{"class":35,"line":83},[33,172432,32552],{"class":76},[33,172434,345],{"class":47},[33,172436,172437],{"class":119},"\"输入不合法\"",[33,172439,884],{"class":47},[18,172441,172443],{"id":172442},"_95-获取异常信息","9.5 获取异常信息",[23,172445,172447],{"className":31631,"code":172446,"language":31633,"meta":28,"style":28},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[30,172448,172449,172455,172469,172480],{"__ignoreMap":28},[33,172450,172451,172453],{"class":35,"line":36},[33,172452,172135],{"class":39},[33,172454,5141],{"class":47},[33,172456,172457,172459,172461,172463,172465,172467],{"class":35,"line":51},[33,172458,46846],{"class":47},[33,172460,73],{"class":39},[33,172462,591],{"class":76},[33,172464,345],{"class":47},[33,172466,157133],{"class":119},[33,172468,884],{"class":47},[33,172470,172471,172473,172475,172477],{"class":35,"line":57},[33,172472,172147],{"class":39},[33,172474,153479],{"class":76},[33,172476,65857],{"class":39},[33,172478,172479],{"class":47}," e:\n",[33,172481,172482,172484,172486,172488,172491,172493,172495,172497,172499],{"class":35,"line":64},[33,172483,32552],{"class":76},[33,172485,345],{"class":47},[33,172487,1677],{"class":39},[33,172489,172490],{"class":119},"\"出错了:",[33,172492,698],{"class":76},[33,172494,1696],{"class":47},[33,172496,2542],{"class":76},[33,172498,1866],{"class":119},[33,172500,884],{"class":47},[14,172502,147710],{},[23,172504,172507],{"className":172505,"code":172506,"language":6578,"meta":28},[6576],"出错了:invalid literal for int() with base 10: 'abc'\n",[30,172508,172506],{"__ignoreMap":28},[18,172510,172512],{"id":172511},"_96-else和finally","9.6 else和finally",[14,172514,172515,172517],{},[30,172516,3142],{},"：没有异常时执行。",[14,172519,172520,172523],{},[30,172521,172522],{},"finally","：无论是否异常都会执行。",[23,172525,172527],{"className":31631,"code":172526,"language":31633,"meta":28,"style":28},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[30,172528,172529,172535,172553,172561,172571,172577,172598,172604],{"__ignoreMap":28},[33,172530,172531,172533],{"class":35,"line":36},[33,172532,172135],{"class":39},[33,172534,5141],{"class":47},[33,172536,172537,172539,172541,172543,172545,172547,172549,172551],{"class":35,"line":51},[33,172538,46846],{"class":47},[33,172540,73],{"class":39},[33,172542,591],{"class":76},[33,172544,345],{"class":47},[33,172546,55074],{"class":76},[33,172548,345],{"class":47},[33,172550,157049],{"class":119},[33,172552,31750],{"class":47},[33,172554,172555,172557,172559],{"class":35,"line":57},[33,172556,172147],{"class":39},[33,172558,153479],{"class":76},[33,172560,5141],{"class":47},[33,172562,172563,172565,172567,172569],{"class":35,"line":64},[33,172564,32552],{"class":76},[33,172566,345],{"class":47},[33,172568,154467],{"class":119},[33,172570,884],{"class":47},[33,172572,172573,172575],{"class":35,"line":83},[33,172574,3142],{"class":39},[33,172576,5141],{"class":47},[33,172578,172579,172581,172583,172585,172588,172590,172592,172594,172596],{"class":35,"line":89},[33,172580,32552],{"class":76},[33,172582,345],{"class":47},[33,172584,1677],{"class":39},[33,172586,172587],{"class":119},"\"输入正确:",[33,172589,698],{"class":76},[33,172591,3110],{"class":47},[33,172593,2542],{"class":76},[33,172595,1866],{"class":119},[33,172597,884],{"class":47},[33,172599,172600,172602],{"class":35,"line":98},[33,172601,172522],{"class":39},[33,172603,5141],{"class":47},[33,172605,172606,172608,172610,172613],{"class":35,"line":110},[33,172607,32552],{"class":76},[33,172609,345],{"class":47},[33,172611,172612],{"class":119},"\"程序结束\"",[33,172614,884],{"class":47},[14,172616,172617,172619],{},[30,172618,172522],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[18,172621,172623],{"id":172622},"_97-抛出异常","9.7 抛出异常",[14,172625,172626],{},"程序可以主动抛出异常。",[23,172628,172630],{"className":31631,"code":172629,"language":31633,"meta":28,"style":28},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[30,172631,172632,172641,172653,172666,172686,172690,172694],{"__ignoreMap":28},[33,172633,172634,172636,172639],{"class":35,"line":36},[33,172635,33200],{"class":39},[33,172637,172638],{"class":43}," set_age",[33,172640,162668],{"class":47},[33,172642,172643,172645,172647,172649,172651],{"class":35,"line":51},[33,172644,4509],{"class":39},[33,172646,16958],{"class":47},[33,172648,875],{"class":39},[33,172650,5492],{"class":76},[33,172652,5141],{"class":47},[33,172654,172655,172657,172659,172661,172664],{"class":35,"line":57},[33,172656,104685],{"class":39},[33,172658,153479],{"class":76},[33,172660,345],{"class":47},[33,172662,172663],{"class":119},"\"年龄不能为负数\"",[33,172665,884],{"class":47},[33,172667,172668,172670,172672,172674,172676,172678,172680,172682,172684],{"class":35,"line":64},[33,172669,32552],{"class":76},[33,172671,345],{"class":47},[33,172673,1677],{"class":39},[33,172675,163236],{"class":119},[33,172677,698],{"class":76},[33,172679,71474],{"class":47},[33,172681,2542],{"class":76},[33,172683,1866],{"class":119},[33,172685,884],{"class":47},[33,172687,172688],{"class":35,"line":83},[33,172689,160],{"emptyLinePlaceholder":159},[33,172691,172692],{"class":35,"line":89},[33,172693,160],{"emptyLinePlaceholder":159},[33,172695,172696,172699,172701,172703],{"class":35,"line":98},[33,172697,172698],{"class":47},"set_age(",[33,172700,1199],{"class":39},[33,172702,701],{"class":76},[33,172704,884],{"class":47},[14,172706,172707],{},"调用者可以捕获：",[23,172709,172711],{"className":31631,"code":172710,"language":31633,"meta":28,"style":28},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[30,172712,172713,172719,172730,172740],{"__ignoreMap":28},[33,172714,172715,172717],{"class":35,"line":36},[33,172716,172135],{"class":39},[33,172718,5141],{"class":47},[33,172720,172721,172724,172726,172728],{"class":35,"line":51},[33,172722,172723],{"class":47},"    set_age(",[33,172725,1199],{"class":39},[33,172727,701],{"class":76},[33,172729,884],{"class":47},[33,172731,172732,172734,172736,172738],{"class":35,"line":57},[33,172733,172147],{"class":39},[33,172735,153479],{"class":76},[33,172737,65857],{"class":39},[33,172739,172479],{"class":47},[33,172741,172742,172744],{"class":35,"line":64},[33,172743,32552],{"class":76},[33,172745,68252],{"class":47},[18,172747,172749],{"id":172748},"_98-自定义异常","9.8 自定义异常",[23,172751,172753],{"className":31631,"code":172752,"language":31633,"meta":28,"style":28},"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",[30,172754,172755,172769,172773,172777,172781,172789,172799,172810,172820,172824,172828,172834,172851,172862],{"__ignoreMap":28},[33,172756,172757,172759,172762,172764,172767],{"class":35,"line":36},[33,172758,15945],{"class":39},[33,172760,172761],{"class":43}," BalanceNotEnoughError",[33,172763,345],{"class":47},[33,172765,172766],{"class":76},"Exception",[33,172768,32039],{"class":47},[33,172770,172771],{"class":35,"line":51},[33,172772,150790],{"class":39},[33,172774,172775],{"class":35,"line":57},[33,172776,160],{"emptyLinePlaceholder":159},[33,172778,172779],{"class":35,"line":64},[33,172780,160],{"emptyLinePlaceholder":159},[33,172782,172783,172785,172787],{"class":35,"line":83},[33,172784,33200],{"class":39},[33,172786,151439],{"class":43},[33,172788,164065],{"class":47},[33,172790,172791,172793,172795,172797],{"class":35,"line":89},[33,172792,4509],{"class":39},[33,172794,151395],{"class":47},[33,172796,1265],{"class":39},[33,172798,163842],{"class":47},[33,172800,172801,172803,172806,172808],{"class":35,"line":98},[33,172802,104685],{"class":39},[33,172804,172805],{"class":47}," BalanceNotEnoughError(",[33,172807,151490],{"class":119},[33,172809,884],{"class":47},[33,172811,172812,172814,172816,172818],{"class":35,"line":110},[33,172813,5489],{"class":39},[33,172815,164072],{"class":47},[33,172817,1199],{"class":39},[33,172819,151428],{"class":47},[33,172821,172822],{"class":35,"line":134},[33,172823,160],{"emptyLinePlaceholder":159},[33,172825,172826],{"class":35,"line":156},[33,172827,160],{"emptyLinePlaceholder":159},[33,172829,172830,172832],{"class":35,"line":163},[33,172831,172135],{"class":39},[33,172833,5141],{"class":47},[33,172835,172836,172838,172840,172843,172845,172847,172849],{"class":35,"line":169},[33,172837,163743],{"class":47},[33,172839,73],{"class":39},[33,172841,172842],{"class":47}," withdraw(",[33,172844,457],{"class":76},[33,172846,13686],{"class":47},[33,172848,3163],{"class":76},[33,172850,884],{"class":47},[33,172852,172853,172855,172858,172860],{"class":35,"line":175},[33,172854,172147],{"class":39},[33,172856,172857],{"class":47}," BalanceNotEnoughError ",[33,172859,32636],{"class":39},[33,172861,172479],{"class":47},[33,172863,172864,172866],{"class":35,"line":181},[33,172865,32552],{"class":76},[33,172867,68252],{"class":47},[14,172869,172870],{},"入门阶段大多数情况使用内置异常即可。",[18,172872,172874],{"id":172873},"_99-traceback","9.9 traceback",[14,172876,172877],{},"调试时可以输出完整异常堆栈。",[23,172879,172881],{"className":31631,"code":172880,"language":31633,"meta":28,"style":28},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[30,172882,172883,172890,172894,172900,172910,172918],{"__ignoreMap":28},[33,172884,172885,172887],{"class":35,"line":36},[33,172886,31645],{"class":39},[33,172888,172889],{"class":47}," traceback\n",[33,172891,172892],{"class":35,"line":51},[33,172893,160],{"emptyLinePlaceholder":159},[33,172895,172896,172898],{"class":35,"line":57},[33,172897,172135],{"class":39},[33,172899,5141],{"class":47},[33,172901,172902,172904,172906,172908],{"class":35,"line":64},[33,172903,67],{"class":76},[33,172905,345],{"class":47},[33,172907,157133],{"class":119},[33,172909,884],{"class":47},[33,172911,172912,172914,172916],{"class":35,"line":83},[33,172913,172147],{"class":39},[33,172915,153479],{"class":76},[33,172917,5141],{"class":47},[33,172919,172920],{"class":35,"line":89},[33,172921,172922],{"class":47},"    traceback.print_exc()\n",[14,172924,172925],{},"日志系统中常把异常堆栈记录到文件。",[18,172927,172929],{"id":172928},"_910-什么是模块","9.10 什么是模块",[14,172931,172932,172933,127236],{},"模块就是一个 ",[30,172934,147605],{},[14,172936,172937,172938,25871],{},"例如创建 ",[30,172939,172940],{},"my_math.py",[23,172942,172944],{"className":31631,"code":172943,"language":31633,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[30,172945,172946,172954,172964,172968,172972,172981],{"__ignoreMap":28},[33,172947,172948,172950,172952],{"class":35,"line":36},[33,172949,33200],{"class":39},[33,172951,6600],{"class":43},[33,172953,152346],{"class":47},[33,172955,172956,172958,172960,172962],{"class":35,"line":51},[33,172957,5489],{"class":39},[33,172959,12120],{"class":47},[33,172961,1271],{"class":39},[33,172963,152357],{"class":47},[33,172965,172966],{"class":35,"line":57},[33,172967,160],{"emptyLinePlaceholder":159},[33,172969,172970],{"class":35,"line":64},[33,172971,160],{"emptyLinePlaceholder":159},[33,172973,172974,172976,172979],{"class":35,"line":83},[33,172975,33200],{"class":39},[33,172977,172978],{"class":43}," sub",[33,172980,152346],{"class":47},[33,172982,172983,172985,172987,172989],{"class":35,"line":89},[33,172984,5489],{"class":39},[33,172986,12120],{"class":47},[33,172988,1199],{"class":39},[33,172990,152357],{"class":47},[14,172992,172993],{},"在另一个文件中导入：",[23,172995,172997],{"className":31631,"code":172996,"language":31633,"meta":28,"style":28},"import my_math\n\nprint(my_math.add(1, 2))\n",[30,172998,172999,173006,173010],{"__ignoreMap":28},[33,173000,173001,173003],{"class":35,"line":36},[33,173002,31645],{"class":39},[33,173004,173005],{"class":47}," my_math\n",[33,173007,173008],{"class":35,"line":51},[33,173009,160],{"emptyLinePlaceholder":159},[33,173011,173012,173014,173017,173019,173021,173023],{"class":35,"line":57},[33,173013,31668],{"class":76},[33,173015,173016],{"class":47},"(my_math.add(",[33,173018,701],{"class":76},[33,173020,13686],{"class":47},[33,173022,707],{"class":76},[33,173024,31750],{"class":47},[18,173026,173028],{"id":173027},"_911-import导入","9.11 import导入",[1599,173030,173032],{"id":173031},"_9111-导入模块","9.11.1 导入模块",[23,173034,173036],{"className":31631,"code":173035,"language":31633,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\n",[30,173037,173038,173044,173048],{"__ignoreMap":28},[33,173039,173040,173042],{"class":35,"line":36},[33,173041,31645],{"class":39},[33,173043,46581],{"class":47},[33,173045,173046],{"class":35,"line":51},[33,173047,160],{"emptyLinePlaceholder":159},[33,173049,173050,173052,173055,173057,173059,173061],{"class":35,"line":57},[33,173051,31668],{"class":76},[33,173053,173054],{"class":47},"(random.randint(",[33,173056,701],{"class":76},[33,173058,13686],{"class":47},[33,173060,77],{"class":76},[33,173062,31750],{"class":47},[1599,173064,173066],{"id":173065},"_9112-导入指定内容","9.11.2 导入指定内容",[23,173068,173070],{"className":31631,"code":173069,"language":31633,"meta":28,"style":28},"from random import randint\n\nprint(randint(1, 10))\n",[30,173071,173072,173083,173087],{"__ignoreMap":28},[33,173073,173074,173076,173078,173080],{"class":35,"line":36},[33,173075,31990],{"class":39},[33,173077,59049],{"class":47},[33,173079,31645],{"class":39},[33,173081,173082],{"class":47}," randint\n",[33,173084,173085],{"class":35,"line":51},[33,173086,160],{"emptyLinePlaceholder":159},[33,173088,173089,173091,173094,173096,173098,173100],{"class":35,"line":57},[33,173090,31668],{"class":76},[33,173092,173093],{"class":47},"(randint(",[33,173095,701],{"class":76},[33,173097,13686],{"class":47},[33,173099,77],{"class":76},[33,173101,31750],{"class":47},[1599,173103,173105],{"id":173104},"_9113-起别名","9.11.3 起别名",[23,173107,173109],{"className":31631,"code":173108,"language":31633,"meta":28,"style":28},"import random as rd\n\nprint(rd.randint(1, 10))\n",[30,173110,173111,173122,173126],{"__ignoreMap":28},[33,173112,173113,173115,173117,173119],{"class":35,"line":36},[33,173114,31645],{"class":39},[33,173116,59049],{"class":47},[33,173118,32636],{"class":39},[33,173120,173121],{"class":47}," rd\n",[33,173123,173124],{"class":35,"line":51},[33,173125,160],{"emptyLinePlaceholder":159},[33,173127,173128,173130,173133,173135,173137,173139],{"class":35,"line":57},[33,173129,31668],{"class":76},[33,173131,173132],{"class":47},"(rd.randint(",[33,173134,701],{"class":76},[33,173136,13686],{"class":47},[33,173138,77],{"class":76},[33,173140,31750],{"class":47},[23,173142,173144],{"className":31631,"code":173143,"language":31633,"meta":28,"style":28},"from random import randint as rint\n\nprint(rint(1, 10))\n",[30,173145,173146,173162,173166],{"__ignoreMap":28},[33,173147,173148,173150,173152,173154,173157,173159],{"class":35,"line":36},[33,173149,31990],{"class":39},[33,173151,59049],{"class":47},[33,173153,31645],{"class":39},[33,173155,173156],{"class":47}," randint ",[33,173158,32636],{"class":39},[33,173160,173161],{"class":47}," rint\n",[33,173163,173164],{"class":35,"line":51},[33,173165,160],{"emptyLinePlaceholder":159},[33,173167,173168,173170,173173,173175,173177,173179],{"class":35,"line":57},[33,173169,31668],{"class":76},[33,173171,173172],{"class":47},"(rint(",[33,173174,701],{"class":76},[33,173176,13686],{"class":47},[33,173178,77],{"class":76},[33,173180,31750],{"class":47},[1599,173182,173184],{"id":173183},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[23,173186,173188],{"className":31631,"code":173187,"language":31633,"meta":28,"style":28},"from random import *\n",[30,173189,173190],{"__ignoreMap":28},[33,173191,173192,173194,173196,173198],{"class":35,"line":36},[33,173193,31990],{"class":39},[33,173195,59049],{"class":47},[33,173197,31645],{"class":39},[33,173199,173200],{"class":39}," *\n",[14,173202,173203],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[18,173205,173207],{"id":173206},"_912-常用内置模块","9.12 常用内置模块",[1599,173209,173211],{"id":173210},"_9121-random","9.12.1 random",[23,173213,173215],{"className":31631,"code":173214,"language":31633,"meta":28,"style":28},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[30,173216,173217,173223,173227,173241,173260],{"__ignoreMap":28},[33,173218,173219,173221],{"class":35,"line":36},[33,173220,31645],{"class":39},[33,173222,46581],{"class":47},[33,173224,173225],{"class":35,"line":51},[33,173226,160],{"emptyLinePlaceholder":159},[33,173228,173229,173231,173233,173235,173237,173239],{"class":35,"line":57},[33,173230,31668],{"class":76},[33,173232,173054],{"class":47},[33,173234,701],{"class":76},[33,173236,13686],{"class":47},[33,173238,77],{"class":76},[33,173240,31750],{"class":47},[33,173242,173243,173245,173248,173250,173252,173254,173256,173258],{"class":35,"line":64},[33,173244,31668],{"class":76},[33,173246,173247],{"class":47},"(random.choice([",[33,173249,151141],{"class":119},[33,173251,13686],{"class":47},[33,173253,152189],{"class":119},[33,173255,13686],{"class":47},[33,173257,160984],{"class":119},[33,173259,34396],{"class":47},[33,173261,173262,173264,173267,173269,173271,173273,173275,173277,173279,173281,173283,173285,173287,173289],{"class":35,"line":83},[33,173263,31668],{"class":76},[33,173265,173266],{"class":47},"(random.sample([",[33,173268,701],{"class":76},[33,173270,13686],{"class":47},[33,173272,707],{"class":76},[33,173274,13686],{"class":47},[33,173276,712],{"class":76},[33,173278,13686],{"class":47},[33,173280,717],{"class":76},[33,173282,13686],{"class":47},[33,173284,722],{"class":76},[33,173286,113455],{"class":47},[33,173288,707],{"class":76},[33,173290,31750],{"class":47},[1599,173292,173294],{"id":173293},"_9122-time","9.12.2 time",[23,173296,173298],{"className":31631,"code":173297,"language":31633,"meta":28,"style":28},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[30,173299,173300,173306,173310,173317,173325],{"__ignoreMap":28},[33,173301,173302,173304],{"class":35,"line":36},[33,173303,31645],{"class":39},[33,173305,33082],{"class":47},[33,173307,173308],{"class":35,"line":51},[33,173309,160],{"emptyLinePlaceholder":159},[33,173311,173312,173314],{"class":35,"line":57},[33,173313,31668],{"class":76},[33,173315,173316],{"class":47},"(time.time())\n",[33,173318,173319,173321,173323],{"class":35,"line":64},[33,173320,96324],{"class":47},[33,173322,701],{"class":76},[33,173324,884],{"class":47},[33,173326,173327,173329,173331,173334],{"class":35,"line":83},[33,173328,31668],{"class":76},[33,173330,345],{"class":47},[33,173332,173333],{"class":119},"\"1秒后执行\"",[33,173335,884],{"class":47},[1599,173337,173339],{"id":173338},"_9123-datetime","9.12.3 datetime",[23,173341,173343],{"className":31631,"code":173342,"language":31633,"meta":28,"style":28},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[30,173344,173345,173357,173361,173371,173378],{"__ignoreMap":28},[33,173346,173347,173349,173352,173354],{"class":35,"line":36},[33,173348,31990],{"class":39},[33,173350,173351],{"class":47}," datetime ",[33,173353,31645],{"class":39},[33,173355,173356],{"class":47}," datetime\n",[33,173358,173359],{"class":35,"line":51},[33,173360,160],{"emptyLinePlaceholder":159},[33,173362,173363,173366,173368],{"class":35,"line":57},[33,173364,173365],{"class":47},"now ",[33,173367,73],{"class":39},[33,173369,173370],{"class":47}," datetime.now()\n",[33,173372,173373,173375],{"class":35,"line":64},[33,173374,31668],{"class":76},[33,173376,173377],{"class":47},"(now)\n",[33,173379,173380,173382,173385,173388,173390,173393],{"class":35,"line":83},[33,173381,31668],{"class":76},[33,173383,173384],{"class":47},"(now.strftime(",[33,173386,173387],{"class":119},"\"%Y-%m-",[33,173389,157944],{"class":76},[33,173391,173392],{"class":119}," %H:%M:%S\"",[33,173394,31750],{"class":47},[1599,173396,173398],{"id":173397},"_9124-os","9.12.4 os",[23,173400,173402],{"className":31631,"code":173401,"language":31633,"meta":28,"style":28},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[30,173403,173404,173410,173414,173421],{"__ignoreMap":28},[33,173405,173406,173408],{"class":35,"line":36},[33,173407,31645],{"class":39},[33,173409,46558],{"class":47},[33,173411,173412],{"class":35,"line":51},[33,173413,160],{"emptyLinePlaceholder":159},[33,173415,173416,173418],{"class":35,"line":57},[33,173417,31668],{"class":76},[33,173419,173420],{"class":47},"(os.getcwd())\n",[33,173422,173423,173425,173428,173431],{"class":35,"line":64},[33,173424,31668],{"class":76},[33,173426,173427],{"class":47},"(os.listdir(",[33,173429,173430],{"class":119},"\".\"",[33,173432,31750],{"class":47},[1599,173434,173436],{"id":173435},"_9125-sys","9.12.5 sys",[23,173438,173440],{"className":31631,"code":173439,"language":31633,"meta":28,"style":28},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[30,173441,173442,173449,173453,173460],{"__ignoreMap":28},[33,173443,173444,173446],{"class":35,"line":36},[33,173445,31645],{"class":39},[33,173447,173448],{"class":47}," sys\n",[33,173450,173451],{"class":35,"line":51},[33,173452,160],{"emptyLinePlaceholder":159},[33,173454,173455,173457],{"class":35,"line":57},[33,173456,31668],{"class":76},[33,173458,173459],{"class":47},"(sys.version)\n",[33,173461,173462,173464],{"class":35,"line":64},[33,173463,31668],{"class":76},[33,173465,173466],{"class":47},"(sys.path)\n",[18,173468,173470,173471,173473,173474,1866],{"id":173469},"_913-if-name-main","9.13 if ",[480,173472,81063],{}," == \"",[480,173475,103311],{},[14,173477,173478,173479,173482],{},"模块被直接运行和被导入时，",[30,173480,173481],{},"__name__"," 的值不同。",[14,173484,173485,173486,25871],{},"创建 ",[30,173487,173488],{},"my_module.py",[23,173490,173492],{"className":31631,"code":173491,"language":31633,"meta":28,"style":28},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[30,173493,173494,173502,173512,173516,173520,173532],{"__ignoreMap":28},[33,173495,173496,173498,173500],{"class":35,"line":36},[33,173497,33200],{"class":39},[33,173499,6600],{"class":43},[33,173501,152346],{"class":47},[33,173503,173504,173506,173508,173510],{"class":35,"line":51},[33,173505,5489],{"class":39},[33,173507,12120],{"class":47},[33,173509,1271],{"class":39},[33,173511,152357],{"class":47},[33,173513,173514],{"class":35,"line":57},[33,173515,160],{"emptyLinePlaceholder":159},[33,173517,173518],{"class":35,"line":64},[33,173519,160],{"emptyLinePlaceholder":159},[33,173521,173522,173524,173526,173528,173530],{"class":35,"line":83},[33,173523,2987],{"class":39},[33,173525,32473],{"class":76},[33,173527,102812],{"class":39},[33,173529,102815],{"class":119},[33,173531,5141],{"class":47},[33,173533,173534,173536,173538,173540,173542,173544],{"class":35,"line":89},[33,173535,32552],{"class":76},[33,173537,167853],{"class":47},[33,173539,701],{"class":76},[33,173541,13686],{"class":47},[33,173543,707],{"class":76},[33,173545,31750],{"class":47},[14,173547,173548],{},"作用：",[574,173550,173551,173554],{},[564,173552,173553],{},"直接运行该文件时，执行测试代码。",[564,173555,173556],{},"被其他文件导入时，不执行测试代码。",[14,173558,173559],{},"这是写模块时很常用的习惯。",[18,173561,173563],{"id":173562},"_914-包","9.14 包",[14,173565,173566,173567,173570],{},"包是包含 ",[30,173568,173569],{},"__init__.py"," 的目录，用于组织多个模块。",[14,173572,173573],{},"目录结构：",[23,173575,173578],{"className":173576,"code":173577,"language":6578,"meta":28},[6576],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[30,173579,173577],{"__ignoreMap":28},[14,173581,173582],{},"导入：",[23,173584,173586],{"className":31631,"code":173585,"language":31633,"meta":28,"style":28},"from utils.file_utils import read_file\n",[30,173587,173588],{"__ignoreMap":28},[33,173589,173590,173592,173595,173597],{"class":35,"line":36},[33,173591,31990],{"class":39},[33,173593,173594],{"class":47}," utils.file_utils ",[33,173596,31645],{"class":39},[33,173598,173599],{"class":47}," read_file\n",[14,173601,173602,173604],{},[30,173603,173569],{}," 可以为空，也可以写包初始化逻辑。",[18,173606,173608],{"id":173607},"_915-第三方包","9.15 第三方包",[14,173610,173611,173612,173614],{},"第三方包通过 ",[30,173613,25083],{}," 安装。",[23,173616,173618],{"className":25074,"code":173617,"language":25076,"meta":28,"style":28},"pip install requests\n",[30,173619,173620],{"__ignoreMap":28},[33,173621,173622,173624,173626],{"class":35,"line":36},[33,173623,25083],{"class":43},[33,173625,25086],{"class":119},[33,173627,147351],{"class":119},[14,173629,173630],{},"使用：",[23,173632,173634],{"className":31631,"code":173633,"language":31633,"meta":28,"style":28},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[30,173635,173636,173642,173646,173661],{"__ignoreMap":28},[33,173637,173638,173640],{"class":35,"line":36},[33,173639,31645],{"class":39},[33,173641,147351],{"class":47},[33,173643,173644],{"class":35,"line":51},[33,173645,160],{"emptyLinePlaceholder":159},[33,173647,173648,173651,173653,173656,173659],{"class":35,"line":57},[33,173649,173650],{"class":47},"response ",[33,173652,73],{"class":39},[33,173654,173655],{"class":47}," requests.get(",[33,173657,173658],{"class":119},"\"https:\u002F\u002Fwww.example.com\"",[33,173660,884],{"class":47},[33,173662,173663,173665],{"class":35,"line":64},[33,173664,31668],{"class":76},[33,173666,173667],{"class":47},"(response.status_code)\n",[14,173669,173670],{},"查看已安装包：",[23,173672,173674],{"className":25074,"code":173673,"language":25076,"meta":28,"style":28},"pip list\n",[30,173675,173676],{"__ignoreMap":28},[33,173677,173678,173680],{"class":35,"line":36},[33,173679,25083],{"class":43},[33,173681,120208],{"class":119},[14,173683,173684],{},"导出项目依赖：",[23,173686,173687],{"className":25074,"code":147546,"language":25076,"meta":28,"style":28},[30,173688,173689],{"__ignoreMap":28},[33,173690,173691,173693,173695,173697],{"class":35,"line":36},[33,173692,25083],{"class":43},[33,173694,147555],{"class":119},[33,173696,27475],{"class":39},[33,173698,147560],{"class":119},[14,173700,173701],{},"安装项目依赖：",[23,173703,173704],{"className":25074,"code":147566,"language":25076,"meta":28,"style":28},[30,173705,173706],{"__ignoreMap":28},[33,173707,173708,173710,173712,173714],{"class":35,"line":36},[33,173709,25083],{"class":43},[33,173711,25086],{"class":119},[33,173713,120892],{"class":76},[33,173715,147560],{"class":119},[18,173717,173719],{"id":173718},"_916-模块搜索路径","9.16 模块搜索路径",[14,173721,173722,173723,173726],{},"Python 导入模块时会在 ",[30,173724,173725],{},"sys.path"," 中查找。",[23,173728,173730],{"className":31631,"code":173729,"language":31633,"meta":28,"style":28},"import sys\n\nfor path in sys.path:\n    print(path)\n",[30,173731,173732,173738,173742,173754],{"__ignoreMap":28},[33,173733,173734,173736],{"class":35,"line":36},[33,173735,31645],{"class":39},[33,173737,173448],{"class":47},[33,173739,173740],{"class":35,"line":51},[33,173741,160],{"emptyLinePlaceholder":159},[33,173743,173744,173746,173749,173751],{"class":35,"line":57},[33,173745,4435],{"class":39},[33,173747,173748],{"class":47}," path ",[33,173750,27296],{"class":39},[33,173752,173753],{"class":47}," sys.path:\n",[33,173755,173756,173758],{"class":35,"line":64},[33,173757,32552],{"class":76},[33,173759,170482],{"class":47},[14,173761,173762],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,173764,158876],{},[23,173766,173769],{"className":173767,"code":173768,"language":6578,"meta":28},[6576],"random.py\njson.py\ntime.py\n",[30,173770,173768],{"__ignoreMap":28},[14,173772,173773],{},"这些文件名可能导致导入异常。",[18,173775,173777],{"id":173776},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,173779,173573],{},[23,173781,173784],{"className":173782,"code":173783,"language":6578,"meta":28},[6576],"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",[30,173785,173783],{"__ignoreMap":28},[14,173787,173788,25871],{},[30,173789,173790],{},"utils\u002Ffile_utils.py",[23,173792,173794],{"className":31631,"code":173793,"language":31633,"meta":28,"style":28},"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",[30,173795,173796,173802,173812,173816,173820,173830,173840,173848,173854,173858,173885,173895,173899,173903,173913,173939],{"__ignoreMap":28},[33,173797,173798,173800],{"class":35,"line":36},[33,173799,31645],{"class":39},[33,173801,148344],{"class":47},[33,173803,173804,173806,173808,173810],{"class":35,"line":51},[33,173805,31990],{"class":39},[33,173807,109564],{"class":47},[33,173809,31645],{"class":39},[33,173811,109569],{"class":47},[33,173813,173814],{"class":35,"line":57},[33,173815,160],{"emptyLinePlaceholder":159},[33,173817,173818],{"class":35,"line":64},[33,173819,160],{"emptyLinePlaceholder":159},[33,173821,173822,173824,173827],{"class":35,"line":83},[33,173823,33200],{"class":39},[33,173825,173826],{"class":43}," read_json",[33,173828,173829],{"class":47},"(path):\n",[33,173831,173832,173835,173837],{"class":35,"line":89},[33,173833,173834],{"class":47},"    path ",[33,173836,73],{"class":39},[33,173838,173839],{"class":47}," Path(path)\n",[33,173841,173842,173844,173846],{"class":35,"line":98},[33,173843,4509],{"class":39},[33,173845,40183],{"class":39},[33,173847,170563],{"class":47},[33,173849,173850,173852],{"class":35,"line":110},[33,173851,16003],{"class":39},[33,173853,53091],{"class":47},[33,173855,173856],{"class":35,"line":134},[33,173857,160],{"emptyLinePlaceholder":159},[33,173859,173860,173862,173864,173867,173869,173871,173873,173875,173877,173879,173881,173883],{"class":35,"line":156},[33,173861,35431],{"class":39},[33,173863,148044],{"class":76},[33,173865,173866],{"class":47},"(path, ",[33,173868,148054],{"class":119},[33,173870,13686],{"class":47},[33,173872,148059],{"class":955},[33,173874,73],{"class":39},[33,173876,148064],{"class":119},[33,173878,14965],{"class":47},[33,173880,32636],{"class":39},[33,173882,149406],{"class":955},[33,173884,5141],{"class":47},[33,173886,173887,173889,173891,173893],{"class":35,"line":163},[33,173888,16003],{"class":39},[33,173890,149417],{"class":47},[33,173892,46607],{"class":955},[33,173894,884],{"class":47},[33,173896,173897],{"class":35,"line":169},[33,173898,160],{"emptyLinePlaceholder":159},[33,173900,173901],{"class":35,"line":175},[33,173902,160],{"emptyLinePlaceholder":159},[33,173904,173905,173907,173910],{"class":35,"line":181},[33,173906,33200],{"class":39},[33,173908,173909],{"class":43}," write_json",[33,173911,173912],{"class":47},"(path, data):\n",[33,173914,173915,173917,173919,173921,173923,173925,173927,173929,173931,173933,173935,173937],{"class":35,"line":196},[33,173916,35431],{"class":39},[33,173918,148044],{"class":76},[33,173920,173866],{"class":47},[33,173922,153229],{"class":119},[33,173924,13686],{"class":47},[33,173926,148059],{"class":955},[33,173928,73],{"class":39},[33,173930,148064],{"class":119},[33,173932,14965],{"class":47},[33,173934,32636],{"class":39},[33,173936,149406],{"class":955},[33,173938,5141],{"class":47},[33,173940,173941,173944,173946,173948,173950,173952,173954,173956,173958,173960,173962],{"class":35,"line":213},[33,173942,173943],{"class":47},"        json.dump(data, ",[33,173945,46607],{"class":955},[33,173947,13686],{"class":47},[33,173949,148390],{"class":955},[33,173951,73],{"class":39},[33,173953,35240],{"class":76},[33,173955,13686],{"class":47},[33,173957,153265],{"class":955},[33,173959,73],{"class":39},[33,173961,707],{"class":76},[33,173963,884],{"class":47},[14,173965,173966,25871],{},[30,173967,155860],{},[23,173969,173971],{"className":31631,"code":173970,"language":31633,"meta":28,"style":28},"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",[30,173972,173973,173984,173988,174001,174021],{"__ignoreMap":28},[33,173974,173975,173977,173979,173981],{"class":35,"line":36},[33,173976,31990],{"class":39},[33,173978,173594],{"class":47},[33,173980,31645],{"class":39},[33,173982,173983],{"class":47}," read_json, write_json\n",[33,173985,173986],{"class":35,"line":51},[33,173987,160],{"emptyLinePlaceholder":159},[33,173989,173990,173992,173994,173997,173999],{"class":35,"line":57},[33,173991,160969],{"class":47},[33,173993,73],{"class":39},[33,173995,173996],{"class":47}," read_json(",[33,173998,153084],{"class":119},[33,174000,884],{"class":47},[33,174002,174003,174005,174007,174009,174011,174013,174015,174017,174019],{"class":35,"line":64},[33,174004,171787],{"class":47},[33,174006,63932],{"class":119},[33,174008,52690],{"class":47},[33,174010,151141],{"class":119},[33,174012,13686],{"class":47},[33,174014,152725],{"class":119},[33,174016,52690],{"class":47},[33,174018,2584],{"class":76},[33,174020,166405],{"class":47},[33,174022,174023,174026,174028],{"class":35,"line":83},[33,174024,174025],{"class":47},"write_json(",[33,174027,153084],{"class":119},[33,174029,174030],{"class":47},", students)\n",[18,174032,174034],{"id":174033},"_918-易错点","9.18 易错点",[574,174036,174037,174040,174045,174050,174053,174056],{},[564,174038,174039],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[564,174041,174042,174043,29638],{},"能指定异常类型就不要裸写 ",[30,174044,172147],{},[564,174046,174047,174049],{},[30,174048,172522],{}," 无论是否出错都会执行。",[564,174051,174052],{},"模块文件名不要和标准库重名。",[564,174054,174055],{},"导入自己写的模块时，要注意运行目录。",[564,174057,174058],{},"第三方包要安装到当前解释器或虚拟环境中。",[18,174060,174062],{"id":174061},"_919-本章练习","9.19 本章练习",[574,174064,174065,174068,174071,174077,174084],{},[564,174066,174067],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[564,174069,174070],{},"写函数读取文件，如果文件不存在则返回空字符串。",[564,174072,173485,174073,174076],{},[30,174074,174075],{},"math_utils.py","，实现加减乘除函数并导入使用。",[564,174078,174079,174080,174083],{},"创建一个 ",[30,174081,174082],{},"utils"," 包，把 JSON 读写函数放进去。",[564,174085,174086],{},"写一个程序，捕获除零异常和输入格式异常。",[1544,174088,174089],{},"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":28,"searchDepth":51,"depth":51,"links":174091},[174092,174093,174094,174095,174096,174097,174098,174099,174100,174101,174102,174108,174115,174117,174118,174119,174120,174121,174122],{"id":171944,"depth":51,"text":171945},{"id":172072,"depth":51,"text":172073},{"id":172121,"depth":51,"text":172122},{"id":172270,"depth":51,"text":172271},{"id":172442,"depth":51,"text":172443},{"id":172511,"depth":51,"text":172512},{"id":172622,"depth":51,"text":172623},{"id":172748,"depth":51,"text":172749},{"id":172873,"depth":51,"text":172874},{"id":172928,"depth":51,"text":172929},{"id":173027,"depth":51,"text":173028,"children":174103},[174104,174105,174106,174107],{"id":173031,"depth":57,"text":173032},{"id":173065,"depth":57,"text":173066},{"id":173104,"depth":57,"text":173105},{"id":173183,"depth":57,"text":173184},{"id":173206,"depth":51,"text":173207,"children":174109},[174110,174111,174112,174113,174114],{"id":173210,"depth":57,"text":173211},{"id":173293,"depth":57,"text":173294},{"id":173338,"depth":57,"text":173339},{"id":173397,"depth":57,"text":173398},{"id":173435,"depth":57,"text":173436},{"id":173469,"depth":51,"text":174116},"9.13 if name == \"main\"",{"id":173562,"depth":51,"text":173563},{"id":173607,"depth":51,"text":173608},{"id":173718,"depth":51,"text":173719},{"id":173776,"depth":51,"text":173777},{"id":174033,"depth":51,"text":174034},{"id":174061,"depth":51,"text":174062},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171936,"description":24628},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174129,"title":174130,"body":174131,"description":174294,"extension":1557,"meta":174295,"navigation":159,"path":174296,"seo":174297,"stem":174298,"__hash__":174299},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174132,"toc":174289},[174133,174136,174139,174142,174153,174155,174229,174232,174235,174238,174241,174244,174247,174250,174253,174256,174259],[10,174134,174130],{"id":174135},"python教程",[14,174137,174138],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,174140,174141],{},"建议学习环境：",[574,174143,174144,174147,174150],{},[564,174145,174146],{},"Python 版本：Python 3.10 及以上。",[564,174148,174149],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[564,174151,174152],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[18,174154,118331],{"id":118331},[574,174156,174157,174163,174169,174175,174181,174187,174193,174199,174205,174211,174217,174223],{},[564,174158,174159],{},[126,174160,174162],{"href":174161},".\u002Fch1-Python","Python环境与第一个程序",[564,174164,174165],{},[126,174166,174168],{"href":174167},".\u002Fch2","基础语法、变量与字符串",[564,174170,174171],{},[126,174172,174174],{"href":174173},".\u002Fch3","判断语句",[564,174176,174177],{},[126,174178,174180],{"href":174179},".\u002Fch4","循环语句",[564,174182,174183],{},[126,174184,174186],{"href":174185},".\u002Fch5","函数基础",[564,174188,174189],{},[126,174190,174192],{"href":174191},".\u002Fch6","数据容器",[564,174194,174195],{},[126,174196,174198],{"href":174197},".\u002Fch7","函数进阶",[564,174200,174201],{},[126,174202,174204],{"href":174203},".\u002Fch8","文件操作",[564,174206,174207],{},[126,174208,174210],{"href":174209},".\u002Fch9","异常、模块与包",[564,174212,174213],{},[126,174214,174216],{"href":174215},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[564,174218,174219],{},[126,174220,174222],{"href":174221},".\u002Fch11","面向对象基础",[564,174224,174225],{},[126,174226,174228],{"href":174227},".\u002Fch12","综合案例与复习路线",[18,174230,174231],{"id":174231},"学习路线",[14,174233,174234],{},"第一阶段：能运行程序。",[14,174236,174237],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,174239,174240],{},"第二阶段：能组织数据。",[14,174242,174243],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,174245,174246],{},"第三阶段：能封装逻辑。",[14,174248,174249],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,174251,174252],{},"第四阶段：能做小项目。",[14,174254,174255],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[18,174257,174258],{"id":174258},"参考资料",[574,174260,174261,174268,174275,174282],{},[564,174262,174263,174264],{},"黑马程序员 Python 入门教程推荐：",[126,174265,174266],{"href":174266,"rel":174267},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25117],[564,174269,174270,174271],{},"Python 官方中文教程：",[126,174272,174273],{"href":174273,"rel":174274},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25117],[564,174276,174277,174278],{},"Python 标准库文档：",[126,174279,174280],{"href":174280,"rel":174281},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25117],[564,174283,174284,174285],{},"pyecharts 文档：",[126,174286,174287],{"href":174287,"rel":174288},"https:\u002F\u002Fpyecharts.org\u002F",[25117],{"title":28,"searchDepth":51,"depth":51,"links":174290},[174291,174292,174293],{"id":118331,"depth":51,"text":118331},{"id":174231,"depth":51,"text":174231},{"id":174258,"depth":51,"text":174258},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24630},"\u002Fwiki\u002F2024-10-10-python",{"title":174130,"description":174294},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379614]