[{"data":1,"prerenderedAt":174378},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2026-05-24-c-xue-xi\u002Fch6-yin-yong":3,"wiki-doc-nav":1609},{"id":4,"title":5,"body":6,"description":31,"extension":1603,"meta":1604,"navigation":57,"path":1605,"seo":1606,"stem":1607,"__hash__":1608},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":8,"toc":1595},"minimark",[9,13,18,22,25,251,255,262,279,284,439,443,446,449,876,880,883,890,893,1215,1219,1225,1386,1389,1397,1401,1404,1411,1591],[10,11,5],"h1",{"id":12},"_6引用",[14,15,17],"h2",{"id":16},"_61引用基本用法","6.1引用基本用法",[19,20,21],"p",{},"引用的本质：给变量起别名",[19,23,24],{},"语法：数据类型 &别名=原名",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","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","c++","",[33,34,35,52,59,78,94,99,126,147,152,165,170,190,209,214,229,234,245],"code",{"__ignoreMap":31},[36,37,40,44,48],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"szBVR","int",[36,45,47],{"class":46},"sScJk"," main",[36,49,51],{"class":50},"sVt8B","() {\n",[36,53,55],{"class":38,"line":54},2,[36,56,58],{"emptyLinePlaceholder":57},true,"\n",[36,60,62,65,68,71,75],{"class":38,"line":61},3,[36,63,64],{"class":42},"    int",[36,66,67],{"class":50}," a ",[36,69,70],{"class":42},"=",[36,72,74],{"class":73},"sj4cs"," 10",[36,76,77],{"class":50},";\n",[36,79,81,83,86,89,91],{"class":38,"line":80},4,[36,82,64],{"class":42},[36,84,85],{"class":42}," &",[36,87,88],{"class":50},"b ",[36,90,70],{"class":42},[36,92,93],{"class":50}," a;\n",[36,95,97],{"class":38,"line":96},5,[36,98,58],{"emptyLinePlaceholder":57},[36,100,102,105,108,112,115,117,119,122],{"class":38,"line":101},6,[36,103,104],{"class":50},"    cout ",[36,106,107],{"class":42},"\u003C\u003C",[36,109,111],{"class":110},"sZZnC"," \"a = \"",[36,113,114],{"class":42}," \u003C\u003C",[36,116,67],{"class":50},[36,118,107],{"class":42},[36,120,121],{"class":50}," endl;",[36,123,125],{"class":124},"sJ8bj","\u002F\u002F10\n",[36,127,129,131,133,136,138,141,143,145],{"class":38,"line":128},7,[36,130,104],{"class":50},[36,132,107],{"class":42},[36,134,135],{"class":110}," \"b = \"",[36,137,114],{"class":42},[36,139,140],{"class":50}," b ",[36,142,107],{"class":42},[36,144,121],{"class":50},[36,146,125],{"class":124},[36,148,150],{"class":38,"line":149},8,[36,151,58],{"emptyLinePlaceholder":57},[36,153,155,158,160,163],{"class":38,"line":154},9,[36,156,157],{"class":50},"    b ",[36,159,70],{"class":42},[36,161,162],{"class":73}," 100",[36,164,77],{"class":50},[36,166,168],{"class":38,"line":167},10,[36,169,58],{"emptyLinePlaceholder":57},[36,171,173,175,177,179,181,183,185,187],{"class":38,"line":172},11,[36,174,104],{"class":50},[36,176,107],{"class":42},[36,178,111],{"class":110},[36,180,114],{"class":42},[36,182,67],{"class":50},[36,184,107],{"class":42},[36,186,121],{"class":50},[36,188,189],{"class":124},"\u002F\u002F100\n",[36,191,193,195,197,199,201,203,205,207],{"class":38,"line":192},12,[36,194,104],{"class":50},[36,196,107],{"class":42},[36,198,135],{"class":110},[36,200,114],{"class":42},[36,202,140],{"class":50},[36,204,107],{"class":42},[36,206,121],{"class":50},[36,208,189],{"class":124},[36,210,212],{"class":38,"line":211},13,[36,213,58],{"emptyLinePlaceholder":57},[36,215,217,220,223,226],{"class":38,"line":216},14,[36,218,219],{"class":46},"    system",[36,221,222],{"class":50},"(",[36,224,225],{"class":110},"\"pause\"",[36,227,228],{"class":50},");\n",[36,230,232],{"class":38,"line":231},15,[36,233,58],{"emptyLinePlaceholder":57},[36,235,237,240,243],{"class":38,"line":236},16,[36,238,239],{"class":42},"    return",[36,241,242],{"class":73}," 0",[36,244,77],{"class":50},[36,246,248],{"class":38,"line":247},17,[36,249,250],{"class":50},"}\n",[14,252,254],{"id":253},"_62引用的注意事项","6.2引用的注意事项",[256,257,258],"ol",{},[259,260,261],"li",{},"引用必须要初始化",[26,263,265],{"className":28,"code":264,"language":30,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[33,266,267],{"__ignoreMap":31},[36,268,269,271,273,276],{"class":38,"line":39},[36,270,43],{"class":42},[36,272,85],{"class":42},[36,274,275],{"class":50},"b;",[36,277,278],{"class":124},"\u002F\u002F非常错误！\n",[256,280,281],{"start":54},[259,282,283],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,285,287],{"className":28,"code":286,"language":30,"meta":31,"style":31},"int main() {\n    int a = 10;\n    int b = 20;\n    \u002F\u002Fint &c; \u002F\u002F错误，引用必须初始化\n    int &c = a; \u002F\u002F一旦初始化后，就不可以更改\n    c = b; \u002F\u002F这是赋值操作，不是更改引用\n    cout \u003C\u003C \"a = \" \u003C\u003C a \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"b = \" \u003C\u003C b \u003C\u003C endl;\u002F\u002F20\n    cout \u003C\u003C \"c = \" \u003C\u003C c \u003C\u003C endl;\u002F\u002F20\n    system(\"pause\");\n    return 0;\n}\n",[33,288,289,297,309,322,330,347,360,379,397,417,427,435],{"__ignoreMap":31},[36,290,291,293,295],{"class":38,"line":39},[36,292,43],{"class":42},[36,294,47],{"class":46},[36,296,51],{"class":50},[36,298,299,301,303,305,307],{"class":38,"line":54},[36,300,64],{"class":42},[36,302,67],{"class":50},[36,304,70],{"class":42},[36,306,74],{"class":73},[36,308,77],{"class":50},[36,310,311,313,315,317,320],{"class":38,"line":61},[36,312,64],{"class":42},[36,314,140],{"class":50},[36,316,70],{"class":42},[36,318,319],{"class":73}," 20",[36,321,77],{"class":50},[36,323,324,327],{"class":38,"line":80},[36,325,326],{"class":124},"    \u002F\u002Fint &c;",[36,328,329],{"class":124}," \u002F\u002F错误，引用必须初始化\n",[36,331,332,334,336,339,341,344],{"class":38,"line":96},[36,333,64],{"class":42},[36,335,85],{"class":42},[36,337,338],{"class":50},"c ",[36,340,70],{"class":42},[36,342,343],{"class":50}," a;",[36,345,346],{"class":124}," \u002F\u002F一旦初始化后，就不可以更改\n",[36,348,349,352,354,357],{"class":38,"line":101},[36,350,351],{"class":50},"    c ",[36,353,70],{"class":42},[36,355,356],{"class":50}," b;",[36,358,359],{"class":124}," \u002F\u002F这是赋值操作，不是更改引用\n",[36,361,362,364,366,368,370,372,374,376],{"class":38,"line":128},[36,363,104],{"class":50},[36,365,107],{"class":42},[36,367,111],{"class":110},[36,369,114],{"class":42},[36,371,67],{"class":50},[36,373,107],{"class":42},[36,375,121],{"class":50},[36,377,378],{"class":124},"\u002F\u002F20\n",[36,380,381,383,385,387,389,391,393,395],{"class":38,"line":149},[36,382,104],{"class":50},[36,384,107],{"class":42},[36,386,135],{"class":110},[36,388,114],{"class":42},[36,390,140],{"class":50},[36,392,107],{"class":42},[36,394,121],{"class":50},[36,396,378],{"class":124},[36,398,399,401,403,406,408,411,413,415],{"class":38,"line":154},[36,400,104],{"class":50},[36,402,107],{"class":42},[36,404,405],{"class":110}," \"c = \"",[36,407,114],{"class":42},[36,409,410],{"class":50}," c ",[36,412,107],{"class":42},[36,414,121],{"class":50},[36,416,378],{"class":124},[36,418,419,421,423,425],{"class":38,"line":167},[36,420,219],{"class":46},[36,422,222],{"class":50},[36,424,225],{"class":110},[36,426,228],{"class":50},[36,428,429,431,433],{"class":38,"line":172},[36,430,239],{"class":42},[36,432,242],{"class":73},[36,434,77],{"class":50},[36,436,437],{"class":38,"line":192},[36,438,250],{"class":50},[14,440,442],{"id":441},"_63引用做函数参数","6.3引用做函数参数",[19,444,445],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,447,448],{},"优点：可以简化指针修改实参",[26,450,452],{"className":28,"code":451,"language":30,"meta":31,"style":31},"\u002F\u002F1. 值传递\nvoid mySwap01(int a, int b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\n\u002F\u002F2. 地址传递\nvoid mySwap02(int* a, int* b) {\n    int temp = *a;\n    *a = *b;\n    *b = temp;\n}\n\n\u002F\u002F3. 引用传递\nvoid mySwap03(int& a, int& b) {\n    int temp = a;\n    a = b;\n    b = temp;\n}\n\nint main() {\n\n    int a = 10;\n    int b = 20;\n\n    mySwap01(a, b);\u002F\u002F值传递，形参不会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap02(&a, &b);\u002F\u002F地址传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    mySwap03(a, b);\u002F\u002F引用传递，形参会修饰实参\n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C \" b:\" \u003C\u003C b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n\n",[33,453,454,459,486,497,507,516,520,524,529,551,565,580,590,594,598,603,625,635,644,653,658,663,672,677,690,703,708,720,748,753,775,800,805,816,841,846,857,862,871],{"__ignoreMap":31},[36,455,456],{"class":38,"line":39},[36,457,458],{"class":124},"\u002F\u002F1. 值传递\n",[36,460,461,464,467,469,471,475,478,480,483],{"class":38,"line":54},[36,462,463],{"class":42},"void",[36,465,466],{"class":46}," mySwap01",[36,468,222],{"class":50},[36,470,43],{"class":42},[36,472,474],{"class":473},"s4XuR"," a",[36,476,477],{"class":50},", ",[36,479,43],{"class":42},[36,481,482],{"class":473}," b",[36,484,485],{"class":50},") {\n",[36,487,488,490,493,495],{"class":38,"line":61},[36,489,64],{"class":42},[36,491,492],{"class":50}," temp ",[36,494,70],{"class":42},[36,496,93],{"class":50},[36,498,499,502,504],{"class":38,"line":80},[36,500,501],{"class":50},"    a ",[36,503,70],{"class":42},[36,505,506],{"class":50}," b;\n",[36,508,509,511,513],{"class":38,"line":96},[36,510,157],{"class":50},[36,512,70],{"class":42},[36,514,515],{"class":50}," temp;\n",[36,517,518],{"class":38,"line":101},[36,519,250],{"class":50},[36,521,522],{"class":38,"line":128},[36,523,58],{"emptyLinePlaceholder":57},[36,525,526],{"class":38,"line":149},[36,527,528],{"class":124},"\u002F\u002F2. 地址传递\n",[36,530,531,533,536,538,541,543,545,547,549],{"class":38,"line":154},[36,532,463],{"class":42},[36,534,535],{"class":46}," mySwap02",[36,537,222],{"class":50},[36,539,540],{"class":42},"int*",[36,542,474],{"class":473},[36,544,477],{"class":50},[36,546,540],{"class":42},[36,548,482],{"class":473},[36,550,485],{"class":50},[36,552,553,555,557,559,562],{"class":38,"line":167},[36,554,64],{"class":42},[36,556,492],{"class":50},[36,558,70],{"class":42},[36,560,561],{"class":42}," *",[36,563,564],{"class":50},"a;\n",[36,566,567,570,573,575,577],{"class":38,"line":172},[36,568,569],{"class":42},"    *",[36,571,572],{"class":50},"a ",[36,574,70],{"class":42},[36,576,561],{"class":42},[36,578,579],{"class":50},"b;\n",[36,581,582,584,586,588],{"class":38,"line":192},[36,583,569],{"class":42},[36,585,88],{"class":50},[36,587,70],{"class":42},[36,589,515],{"class":50},[36,591,592],{"class":38,"line":211},[36,593,250],{"class":50},[36,595,596],{"class":38,"line":216},[36,597,58],{"emptyLinePlaceholder":57},[36,599,600],{"class":38,"line":231},[36,601,602],{"class":124},"\u002F\u002F3. 引用传递\n",[36,604,605,607,610,612,615,617,619,621,623],{"class":38,"line":236},[36,606,463],{"class":42},[36,608,609],{"class":46}," mySwap03",[36,611,222],{"class":50},[36,613,614],{"class":42},"int&",[36,616,474],{"class":473},[36,618,477],{"class":50},[36,620,614],{"class":42},[36,622,482],{"class":473},[36,624,485],{"class":50},[36,626,627,629,631,633],{"class":38,"line":247},[36,628,64],{"class":42},[36,630,492],{"class":50},[36,632,70],{"class":42},[36,634,93],{"class":50},[36,636,638,640,642],{"class":38,"line":637},18,[36,639,501],{"class":50},[36,641,70],{"class":42},[36,643,506],{"class":50},[36,645,647,649,651],{"class":38,"line":646},19,[36,648,157],{"class":50},[36,650,70],{"class":42},[36,652,515],{"class":50},[36,654,656],{"class":38,"line":655},20,[36,657,250],{"class":50},[36,659,661],{"class":38,"line":660},21,[36,662,58],{"emptyLinePlaceholder":57},[36,664,666,668,670],{"class":38,"line":665},22,[36,667,43],{"class":42},[36,669,47],{"class":46},[36,671,51],{"class":50},[36,673,675],{"class":38,"line":674},23,[36,676,58],{"emptyLinePlaceholder":57},[36,678,680,682,684,686,688],{"class":38,"line":679},24,[36,681,64],{"class":42},[36,683,67],{"class":50},[36,685,70],{"class":42},[36,687,74],{"class":73},[36,689,77],{"class":50},[36,691,693,695,697,699,701],{"class":38,"line":692},25,[36,694,64],{"class":42},[36,696,140],{"class":50},[36,698,70],{"class":42},[36,700,319],{"class":73},[36,702,77],{"class":50},[36,704,706],{"class":38,"line":705},26,[36,707,58],{"emptyLinePlaceholder":57},[36,709,711,714,717],{"class":38,"line":710},27,[36,712,713],{"class":46},"    mySwap01",[36,715,716],{"class":50},"(a, b);",[36,718,719],{"class":124},"\u002F\u002F值传递，形参不会修饰实参\n",[36,721,723,725,727,730,732,734,736,739,741,743,745],{"class":38,"line":722},28,[36,724,104],{"class":50},[36,726,107],{"class":42},[36,728,729],{"class":110}," \"a:\"",[36,731,114],{"class":42},[36,733,67],{"class":50},[36,735,107],{"class":42},[36,737,738],{"class":110}," \" b:\"",[36,740,114],{"class":42},[36,742,140],{"class":50},[36,744,107],{"class":42},[36,746,747],{"class":50}," endl;\n",[36,749,751],{"class":38,"line":750},29,[36,752,58],{"emptyLinePlaceholder":57},[36,754,756,759,761,764,767,769,772],{"class":38,"line":755},30,[36,757,758],{"class":46},"    mySwap02",[36,760,222],{"class":50},[36,762,763],{"class":42},"&",[36,765,766],{"class":50},"a, ",[36,768,763],{"class":42},[36,770,771],{"class":50},"b);",[36,773,774],{"class":124},"\u002F\u002F地址传递，形参会修饰实参\n",[36,776,778,780,782,784,786,788,790,792,794,796,798],{"class":38,"line":777},31,[36,779,104],{"class":50},[36,781,107],{"class":42},[36,783,729],{"class":110},[36,785,114],{"class":42},[36,787,67],{"class":50},[36,789,107],{"class":42},[36,791,738],{"class":110},[36,793,114],{"class":42},[36,795,140],{"class":50},[36,797,107],{"class":42},[36,799,747],{"class":50},[36,801,803],{"class":38,"line":802},32,[36,804,58],{"emptyLinePlaceholder":57},[36,806,808,811,813],{"class":38,"line":807},33,[36,809,810],{"class":46},"    mySwap03",[36,812,716],{"class":50},[36,814,815],{"class":124},"\u002F\u002F引用传递，形参会修饰实参\n",[36,817,819,821,823,825,827,829,831,833,835,837,839],{"class":38,"line":818},34,[36,820,104],{"class":50},[36,822,107],{"class":42},[36,824,729],{"class":110},[36,826,114],{"class":42},[36,828,67],{"class":50},[36,830,107],{"class":42},[36,832,738],{"class":110},[36,834,114],{"class":42},[36,836,140],{"class":50},[36,838,107],{"class":42},[36,840,747],{"class":50},[36,842,844],{"class":38,"line":843},35,[36,845,58],{"emptyLinePlaceholder":57},[36,847,849,851,853,855],{"class":38,"line":848},36,[36,850,219],{"class":46},[36,852,222],{"class":50},[36,854,225],{"class":110},[36,856,228],{"class":50},[36,858,860],{"class":38,"line":859},37,[36,861,58],{"emptyLinePlaceholder":57},[36,863,865,867,869],{"class":38,"line":864},38,[36,866,239],{"class":42},[36,868,242],{"class":73},[36,870,77],{"class":50},[36,872,874],{"class":38,"line":873},39,[36,875,250],{"class":50},[14,877,879],{"id":878},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,881,882],{},"作用：引用是可以作为函数的返回值存在的",[19,884,885,886],{},"注意：",[887,888,889],"strong",{},"不要返回局部变量引用",[19,891,892],{},"用法：函数调用作为左值",[26,894,898],{"className":895,"code":896,"language":897,"meta":31,"style":31},"language-C++ shiki shiki-themes github-light github-dark","\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","C++",[33,899,900,905,914,930,936,940,944,949,958,977,983,987,991,999,1003,1008,1023,1043,1062,1066,1071,1084,1104,1122,1126,1144,1148,1167,1185,1189,1199,1203,1211],{"__ignoreMap":31},[36,901,902],{"class":38,"line":39},[36,903,904],{"class":124},"\u002F\u002F返回局部变量引用\n",[36,906,907,909,912],{"class":38,"line":54},[36,908,614],{"class":42},[36,910,911],{"class":46}," test01",[36,913,51],{"class":50},[36,915,916,918,920,922,924,927],{"class":38,"line":61},[36,917,64],{"class":42},[36,919,67],{"class":50},[36,921,70],{"class":42},[36,923,74],{"class":73},[36,925,926],{"class":50},";",[36,928,929],{"class":124}," \u002F\u002F局部变量\n",[36,931,932,934],{"class":38,"line":80},[36,933,239],{"class":42},[36,935,93],{"class":50},[36,937,938],{"class":38,"line":96},[36,939,250],{"class":50},[36,941,942],{"class":38,"line":101},[36,943,58],{"emptyLinePlaceholder":57},[36,945,946],{"class":38,"line":128},[36,947,948],{"class":124},"\u002F\u002F返回静态变量引用\n",[36,950,951,953,956],{"class":38,"line":149},[36,952,614],{"class":42},[36,954,955],{"class":46}," test02",[36,957,51],{"class":50},[36,959,960,963,966,968,970,972,974],{"class":38,"line":154},[36,961,962],{"class":42},"    static",[36,964,965],{"class":42}," int",[36,967,67],{"class":50},[36,969,70],{"class":42},[36,971,319],{"class":73},[36,973,926],{"class":50},[36,975,976],{"class":124},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[36,978,979,981],{"class":38,"line":167},[36,980,239],{"class":42},[36,982,93],{"class":50},[36,984,985],{"class":38,"line":172},[36,986,250],{"class":50},[36,988,989],{"class":38,"line":192},[36,990,58],{"emptyLinePlaceholder":57},[36,992,993,995,997],{"class":38,"line":211},[36,994,43],{"class":42},[36,996,47],{"class":46},[36,998,51],{"class":50},[36,1000,1001],{"class":38,"line":216},[36,1002,58],{"emptyLinePlaceholder":57},[36,1004,1005],{"class":38,"line":231},[36,1006,1007],{"class":124},"    \u002F\u002F不能返回局部变量的引用\n",[36,1009,1010,1013,1016,1018,1020],{"class":38,"line":236},[36,1011,1012],{"class":42},"    int&",[36,1014,1015],{"class":50}," ref ",[36,1017,70],{"class":42},[36,1019,911],{"class":46},[36,1021,1022],{"class":50},"();\n",[36,1024,1025,1027,1029,1032,1034,1036,1038,1040],{"class":38,"line":247},[36,1026,104],{"class":50},[36,1028,107],{"class":42},[36,1030,1031],{"class":110}," \"ref = \"",[36,1033,114],{"class":42},[36,1035,1015],{"class":50},[36,1037,107],{"class":42},[36,1039,121],{"class":50},[36,1041,1042],{"class":124},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[36,1044,1045,1047,1049,1051,1053,1055,1057,1059],{"class":38,"line":637},[36,1046,104],{"class":50},[36,1048,107],{"class":42},[36,1050,1031],{"class":110},[36,1052,114],{"class":42},[36,1054,1015],{"class":50},[36,1056,107],{"class":42},[36,1058,121],{"class":50},[36,1060,1061],{"class":124},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[36,1063,1064],{"class":38,"line":646},[36,1065,58],{"emptyLinePlaceholder":57},[36,1067,1068],{"class":38,"line":655},[36,1069,1070],{"class":124},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[36,1072,1073,1075,1078,1080,1082],{"class":38,"line":660},[36,1074,1012],{"class":42},[36,1076,1077],{"class":50}," ref2 ",[36,1079,70],{"class":42},[36,1081,955],{"class":46},[36,1083,1022],{"class":50},[36,1085,1086,1088,1090,1093,1095,1097,1099,1101],{"class":38,"line":665},[36,1087,104],{"class":50},[36,1089,107],{"class":42},[36,1091,1092],{"class":110}," \"ref2 = \"",[36,1094,114],{"class":42},[36,1096,1077],{"class":50},[36,1098,107],{"class":42},[36,1100,121],{"class":50},[36,1102,1103],{"class":124}," \u002F\u002F20\n",[36,1105,1106,1108,1110,1112,1114,1116,1118,1120],{"class":38,"line":674},[36,1107,104],{"class":50},[36,1109,107],{"class":42},[36,1111,1092],{"class":110},[36,1113,114],{"class":42},[36,1115,1077],{"class":50},[36,1117,107],{"class":42},[36,1119,121],{"class":50},[36,1121,1103],{"class":124},[36,1123,1124],{"class":38,"line":679},[36,1125,58],{"emptyLinePlaceholder":57},[36,1127,1128,1131,1134,1136,1139,1141],{"class":38,"line":692},[36,1129,1130],{"class":46},"    test02",[36,1132,1133],{"class":50},"() ",[36,1135,70],{"class":42},[36,1137,1138],{"class":73}," 1000",[36,1140,926],{"class":50},[36,1142,1143],{"class":124},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[36,1145,1146],{"class":38,"line":705},[36,1147,58],{"emptyLinePlaceholder":57},[36,1149,1150,1152,1154,1156,1158,1160,1162,1164],{"class":38,"line":710},[36,1151,104],{"class":50},[36,1153,107],{"class":42},[36,1155,1092],{"class":110},[36,1157,114],{"class":42},[36,1159,1077],{"class":50},[36,1161,107],{"class":42},[36,1163,121],{"class":50},[36,1165,1166],{"class":124}," \u002F\u002F1000\n",[36,1168,1169,1171,1173,1175,1177,1179,1181,1183],{"class":38,"line":722},[36,1170,104],{"class":50},[36,1172,107],{"class":42},[36,1174,1092],{"class":110},[36,1176,114],{"class":42},[36,1178,1077],{"class":50},[36,1180,107],{"class":42},[36,1182,121],{"class":50},[36,1184,1166],{"class":124},[36,1186,1187],{"class":38,"line":750},[36,1188,58],{"emptyLinePlaceholder":57},[36,1190,1191,1193,1195,1197],{"class":38,"line":755},[36,1192,219],{"class":46},[36,1194,222],{"class":50},[36,1196,225],{"class":110},[36,1198,228],{"class":50},[36,1200,1201],{"class":38,"line":777},[36,1202,58],{"emptyLinePlaceholder":57},[36,1204,1205,1207,1209],{"class":38,"line":802},[36,1206,239],{"class":42},[36,1208,242],{"class":73},[36,1210,77],{"class":50},[36,1212,1213],{"class":38,"line":807},[36,1214,250],{"class":50},[14,1216,1218],{"id":1217},"_65引用的本质","6.5引用的本质",[19,1220,1221,1222],{},"本质：",[887,1223,1224],{},"引用的本质在c++内部实现是一个指针常量.",[26,1226,1228],{"className":28,"code":1227,"language":30,"meta":31,"style":31},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\nvoid func(int& ref){\n    ref = 100; \u002F\u002F ref是引用，转换为*ref = 100\n}\nint main(){\n    int a = 10;\n    \n    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n    int& ref = a; \n    ref = 20; \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n    \n    cout \u003C\u003C \"a:\" \u003C\u003C a \u003C\u003C endl;\n    cout \u003C\u003C \"ref:\" \u003C\u003C ref \u003C\u003C endl;\n    \n    func(a);\n    return 0;\n}\n",[33,1229,1230,1235,1252,1266,1270,1279,1291,1296,1301,1312,1325,1329,1345,1362,1366,1374,1382],{"__ignoreMap":31},[36,1231,1232],{"class":38,"line":39},[36,1233,1234],{"class":124},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[36,1236,1237,1239,1242,1244,1246,1249],{"class":38,"line":54},[36,1238,463],{"class":42},[36,1240,1241],{"class":46}," func",[36,1243,222],{"class":50},[36,1245,614],{"class":42},[36,1247,1248],{"class":473}," ref",[36,1250,1251],{"class":50},"){\n",[36,1253,1254,1257,1259,1261,1263],{"class":38,"line":61},[36,1255,1256],{"class":50},"    ref ",[36,1258,70],{"class":42},[36,1260,162],{"class":73},[36,1262,926],{"class":50},[36,1264,1265],{"class":124}," \u002F\u002F ref是引用，转换为*ref = 100\n",[36,1267,1268],{"class":38,"line":80},[36,1269,250],{"class":50},[36,1271,1272,1274,1276],{"class":38,"line":96},[36,1273,43],{"class":42},[36,1275,47],{"class":46},[36,1277,1278],{"class":50},"(){\n",[36,1280,1281,1283,1285,1287,1289],{"class":38,"line":101},[36,1282,64],{"class":42},[36,1284,67],{"class":50},[36,1286,70],{"class":42},[36,1288,74],{"class":73},[36,1290,77],{"class":50},[36,1292,1293],{"class":38,"line":128},[36,1294,1295],{"class":50},"    \n",[36,1297,1298],{"class":38,"line":149},[36,1299,1300],{"class":124},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[36,1302,1303,1305,1307,1309],{"class":38,"line":154},[36,1304,1012],{"class":42},[36,1306,1015],{"class":50},[36,1308,70],{"class":42},[36,1310,1311],{"class":50}," a; \n",[36,1313,1314,1316,1318,1320,1322],{"class":38,"line":167},[36,1315,1256],{"class":50},[36,1317,70],{"class":42},[36,1319,319],{"class":73},[36,1321,926],{"class":50},[36,1323,1324],{"class":124}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[36,1326,1327],{"class":38,"line":172},[36,1328,1295],{"class":50},[36,1330,1331,1333,1335,1337,1339,1341,1343],{"class":38,"line":192},[36,1332,104],{"class":50},[36,1334,107],{"class":42},[36,1336,729],{"class":110},[36,1338,114],{"class":42},[36,1340,67],{"class":50},[36,1342,107],{"class":42},[36,1344,747],{"class":50},[36,1346,1347,1349,1351,1354,1356,1358,1360],{"class":38,"line":211},[36,1348,104],{"class":50},[36,1350,107],{"class":42},[36,1352,1353],{"class":110}," \"ref:\"",[36,1355,114],{"class":42},[36,1357,1015],{"class":50},[36,1359,107],{"class":42},[36,1361,747],{"class":50},[36,1363,1364],{"class":38,"line":216},[36,1365,1295],{"class":50},[36,1367,1368,1371],{"class":38,"line":231},[36,1369,1370],{"class":46},"    func",[36,1372,1373],{"class":50},"(a);\n",[36,1375,1376,1378,1380],{"class":38,"line":236},[36,1377,239],{"class":42},[36,1379,242],{"class":73},[36,1381,77],{"class":50},[36,1383,1384],{"class":38,"line":247},[36,1385,250],{"class":50},[19,1387,1388],{},"总结：",[256,1390,1391,1394],{},[259,1392,1393],{},"引用的本质，就是一个指针常量",[259,1395,1396],{},"引用一旦初始化，就不可以发生改变",[14,1398,1400],{"id":1399},"_66常量引用","6.6常量引用",[19,1402,1403],{},"作用：常量引用主要用来修饰形参",[19,1405,1406,1407,1410],{},"在函数形参列表中，可以加",[887,1408,1409],{},"const修饰形参","，防止形参改变实参",[26,1412,1414],{"className":28,"code":1413,"language":30,"meta":31,"style":31},"\u002F\u002F引用使用的场景，通常用来修饰形参\n\u002F\u002F加上const就不能修改实参的\nvoid showValue(const int& v) {\n    \u002F\u002Fv += 100;\n    cout \u003C\u003C v \u003C\u003C endl;\n}\n\nint main() {\n\n    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n    const int& ref = 10;\n\n    \u002F\u002Fref = 100;  \u002F\u002F加入const后不可以修改变量\n    cout \u003C\u003C ref \u003C\u003C endl;\n\n    \u002F\u002F函数中利用常量引用防止误操作修改实参\n    int a = 10;\n    showValue(a);\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,1415,1416,1421,1426,1446,1451,1464,1468,1472,1480,1484,1489,1494,1509,1513,1521,1533,1537,1542,1554,1561,1565,1575,1579,1587],{"__ignoreMap":31},[36,1417,1418],{"class":38,"line":39},[36,1419,1420],{"class":124},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[36,1422,1423],{"class":38,"line":54},[36,1424,1425],{"class":124},"\u002F\u002F加上const就不能修改实参的\n",[36,1427,1428,1430,1433,1435,1438,1441,1444],{"class":38,"line":61},[36,1429,463],{"class":42},[36,1431,1432],{"class":46}," showValue",[36,1434,222],{"class":50},[36,1436,1437],{"class":42},"const",[36,1439,1440],{"class":42}," int&",[36,1442,1443],{"class":473}," v",[36,1445,485],{"class":50},[36,1447,1448],{"class":38,"line":80},[36,1449,1450],{"class":124},"    \u002F\u002Fv += 100;\n",[36,1452,1453,1455,1457,1460,1462],{"class":38,"line":96},[36,1454,104],{"class":50},[36,1456,107],{"class":42},[36,1458,1459],{"class":50}," v ",[36,1461,107],{"class":42},[36,1463,747],{"class":50},[36,1465,1466],{"class":38,"line":101},[36,1467,250],{"class":50},[36,1469,1470],{"class":38,"line":128},[36,1471,58],{"emptyLinePlaceholder":57},[36,1473,1474,1476,1478],{"class":38,"line":149},[36,1475,43],{"class":42},[36,1477,47],{"class":46},[36,1479,51],{"class":50},[36,1481,1482],{"class":38,"line":154},[36,1483,58],{"emptyLinePlaceholder":57},[36,1485,1486],{"class":38,"line":167},[36,1487,1488],{"class":124},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[36,1490,1491],{"class":38,"line":172},[36,1492,1493],{"class":124},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[36,1495,1496,1499,1501,1503,1505,1507],{"class":38,"line":192},[36,1497,1498],{"class":42},"    const",[36,1500,1440],{"class":42},[36,1502,1015],{"class":50},[36,1504,70],{"class":42},[36,1506,74],{"class":73},[36,1508,77],{"class":50},[36,1510,1511],{"class":38,"line":211},[36,1512,58],{"emptyLinePlaceholder":57},[36,1514,1515,1518],{"class":38,"line":216},[36,1516,1517],{"class":124},"    \u002F\u002Fref = 100;",[36,1519,1520],{"class":124},"  \u002F\u002F加入const后不可以修改变量\n",[36,1522,1523,1525,1527,1529,1531],{"class":38,"line":231},[36,1524,104],{"class":50},[36,1526,107],{"class":42},[36,1528,1015],{"class":50},[36,1530,107],{"class":42},[36,1532,747],{"class":50},[36,1534,1535],{"class":38,"line":236},[36,1536,58],{"emptyLinePlaceholder":57},[36,1538,1539],{"class":38,"line":247},[36,1540,1541],{"class":124},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[36,1543,1544,1546,1548,1550,1552],{"class":38,"line":637},[36,1545,64],{"class":42},[36,1547,67],{"class":50},[36,1549,70],{"class":42},[36,1551,74],{"class":73},[36,1553,77],{"class":50},[36,1555,1556,1559],{"class":38,"line":646},[36,1557,1558],{"class":46},"    showValue",[36,1560,1373],{"class":50},[36,1562,1563],{"class":38,"line":655},[36,1564,58],{"emptyLinePlaceholder":57},[36,1566,1567,1569,1571,1573],{"class":38,"line":660},[36,1568,219],{"class":46},[36,1570,222],{"class":50},[36,1572,225],{"class":110},[36,1574,228],{"class":50},[36,1576,1577],{"class":38,"line":665},[36,1578,58],{"emptyLinePlaceholder":57},[36,1580,1581,1583,1585],{"class":38,"line":674},[36,1582,239],{"class":42},[36,1584,242],{"class":73},[36,1586,77],{"class":50},[36,1588,1589],{"class":38,"line":679},[36,1590,250],{"class":50},[1592,1593,1594],"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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":1596},[1597,1598,1599,1600,1601,1602],{"id":16,"depth":54,"text":17},{"id":253,"depth":54,"text":254},{"id":441,"depth":54,"text":442},{"id":878,"depth":54,"text":879},{"id":1217,"depth":54,"text":1218},{"id":1399,"depth":54,"text":1400},"md",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":5,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",[1610,6651,7750,9164,12144,13485,14848,15937,24700,24713,25312,25338,25462,25703,25768,25786,25799,25846,25970,26139,26338,26518,26723,26859,26954,26991,27004,27314,28055,28763,28784,29804,31435,31586,31599,31611,31912,51724,51739,51756,51789,54661,78009,94154,94175,94288,94409,95179,95842,96203,96241,96347,96447,96490,96516,96577,98231,98332,98357,98848,99348,100428,100711,101453,101955,101967,103983,105647,107150,108848,110765,112684,114706,118176,118608,119071,119820,122764,123112,123134,123490,126797,126809,127212,127235,127382,127549,127754,128055,128612,129269,131200,132798,133447,134941,136372,137607,139301,141053,143463,143579,144514,144725,145610,146845,147073,147086,148241,150653,153021,156342,158819,160463,162240,164253,167305,169485,172012,174206],{"id":1611,"title":1612,"body":1613,"description":31,"extension":1603,"meta":6646,"navigation":57,"path":6647,"seo":6648,"stem":6649,"__hash__":6650},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1614,"toc":6618},[1615,1618,1622,1625,1629,1640,1644,1649,1652,1655,1658,1661,1664,1688,1692,1695,1698,1701,1704,1753,1757,1775,1777,1791,1794,1802,1805,2666,2673,2690,2694,2779,2783,2789,2874,2878,2916,2920,2981,2985,2989,2996,3007,3011,3016,3020,3025,3029,3034,3038,3042,3047,3297,3302,3440,3445,3698,3701,3709,3713,3718,3819,3822,4119,4128,4228,4231,4234,4237,4240,4497,4502,4642,4645,4824,4827,4955,4958,5110,5114,5119,5122,5133,5141,5144,5251,5255,5259,5264,5314,5319,5324,5348,5353,5406,5409,5414,5589,5594,5879,5884,6281,6285,6290,6347,6352,6360,6363,6503,6506,6615],[10,1616,1612],{"id":1617},"_1基础入门",[14,1619,1621],{"id":1620},"_11注释","1.1注释",[19,1623,1624],{},"\u002F\u002F或者\u002F* *\u002F",[14,1626,1628],{"id":1627},"_12命名","1.2命名",[256,1630,1631,1634,1637],{},[259,1632,1633],{},"字母数字下划线",[259,1635,1636],{},"开头必须是字母或_",[259,1638,1639],{},"不能使用关键词",[14,1641,1643],{"id":1642},"_13数据类型","1.3数据类型",[1645,1646,1648],"h3",{"id":1647},"_131整形","1.3.1整形",[19,1650,1651],{},"short 短整形 2",[19,1653,1654],{},"int 整形 4",[19,1656,1657],{},"long 长整形 win4 linux32位4 linux64位8",[19,1659,1660],{},"long long 长长整形 8",[19,1662,1663],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,1665,1667],{"className":28,"code":1666,"language":30,"meta":31,"style":31},"sizeof(int)\nsizeof(num)\n",[33,1668,1669,1681],{"__ignoreMap":31},[36,1670,1671,1674,1676,1678],{"class":38,"line":39},[36,1672,1673],{"class":42},"sizeof",[36,1675,222],{"class":50},[36,1677,43],{"class":42},[36,1679,1680],{"class":50},")\n",[36,1682,1683,1685],{"class":38,"line":54},[36,1684,1673],{"class":42},[36,1686,1687],{"class":50},"(num)\n",[1645,1689,1691],{"id":1690},"_132浮点型","1.3.2浮点型",[19,1693,1694],{},"float 单精度 4节 7位有效数字",[19,1696,1697],{},"double 双精度 8节 15-16有效数字",[19,1699,1700],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1702,1703],{},"注意点：",[26,1705,1707],{"className":28,"code":1706,"language":30,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[33,1708,1709,1730],{"__ignoreMap":31},[36,1710,1711,1714,1717,1719,1722,1725,1727],{"class":38,"line":39},[36,1712,1713],{"class":42},"float",[36,1715,1716],{"class":50}," f1",[36,1718,70],{"class":42},[36,1720,1721],{"class":73},"3.14",[36,1723,1724],{"class":42},"f",[36,1726,926],{"class":50},[36,1728,1729],{"class":124}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[36,1731,1732,1734,1737,1739,1742,1745,1748,1750],{"class":38,"line":54},[36,1733,1713],{"class":42},[36,1735,1736],{"class":50}," f2",[36,1738,70],{"class":42},[36,1740,1741],{"class":73},"3",[36,1743,1744],{"class":42},"e",[36,1746,1747],{"class":73},"2",[36,1749,926],{"class":50},[36,1751,1752],{"class":124}," \u002F\u002F科学记数法\n",[1645,1754,1756],{"id":1755},"_133字符型","1.3.3字符型",[26,1758,1760],{"className":28,"code":1759,"language":30,"meta":31,"style":31},"char ch='a'\n",[33,1761,1762],{"__ignoreMap":31},[36,1763,1764,1767,1770,1772],{"class":38,"line":39},[36,1765,1766],{"class":42},"char",[36,1768,1769],{"class":50}," ch",[36,1771,70],{"class":42},[36,1773,1774],{"class":110},"'a'\n",[19,1776,1703],{},[256,1778,1779,1782,1785,1788],{},[259,1780,1781],{},"在显示字符型变量时，只能单引号，双引号x",[259,1783,1784],{},"单引号内只能一个字符，不能字符串",[259,1786,1787],{},"c和c++字符型变量只占用一个字符",[259,1789,1790],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1792,1793],{},"ASCII码大致由以下两部分组成：",[256,1795,1796,1799],{},[259,1797,1798],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[259,1800,1801],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1803,1804],{},"ASCII码表格：",[1806,1807,1808,1851],"table",{},[1809,1810,1811],"thead",{},[1812,1813,1814,1821,1826,1830,1835,1839,1843,1847],"tr",{},[1815,1816,1817,1820],"th",{},[887,1818,1819],{},"ASCII","值",[1815,1822,1823],{},[887,1824,1825],{},"控制字符",[1815,1827,1828,1820],{},[887,1829,1819],{},[1815,1831,1832],{},[887,1833,1834],{},"字符",[1815,1836,1837,1820],{},[887,1838,1819],{},[1815,1840,1841],{},[887,1842,1834],{},[1815,1844,1845,1820],{},[887,1846,1819],{},[1815,1848,1849],{},[887,1850,1834],{},[1852,1853,1854,1881,1907,1932,1957,1983,2008,2032,2058,2083,2109,2135,2161,2186,2212,2238,2264,2288,2313,2338,2363,2388,2413,2438,2463,2488,2513,2539,2564,2589,2614,2640],"tbody",{},[1812,1855,1856,1860,1863,1866,1869,1872,1875,1878],{},[1857,1858,1859],"td",{},"0",[1857,1861,1862],{},"NUT",[1857,1864,1865],{},"32",[1857,1867,1868],{},"(space)",[1857,1870,1871],{},"64",[1857,1873,1874],{},"@",[1857,1876,1877],{},"96",[1857,1879,1880],{},"、",[1812,1882,1883,1886,1889,1892,1895,1898,1901,1904],{},[1857,1884,1885],{},"1",[1857,1887,1888],{},"SOH",[1857,1890,1891],{},"33",[1857,1893,1894],{},"!",[1857,1896,1897],{},"65",[1857,1899,1900],{},"A",[1857,1902,1903],{},"97",[1857,1905,1906],{},"a",[1812,1908,1909,1911,1914,1917,1920,1923,1926,1929],{},[1857,1910,1747],{},[1857,1912,1913],{},"STX",[1857,1915,1916],{},"34",[1857,1918,1919],{},"\"",[1857,1921,1922],{},"66",[1857,1924,1925],{},"B",[1857,1927,1928],{},"98",[1857,1930,1931],{},"b",[1812,1933,1934,1936,1939,1942,1945,1948,1951,1954],{},[1857,1935,1741],{},[1857,1937,1938],{},"ETX",[1857,1940,1941],{},"35",[1857,1943,1944],{},"#",[1857,1946,1947],{},"67",[1857,1949,1950],{},"C",[1857,1952,1953],{},"99",[1857,1955,1956],{},"c",[1812,1958,1959,1962,1965,1968,1971,1974,1977,1980],{},[1857,1960,1961],{},"4",[1857,1963,1964],{},"EOT",[1857,1966,1967],{},"36",[1857,1969,1970],{},"$",[1857,1972,1973],{},"68",[1857,1975,1976],{},"D",[1857,1978,1979],{},"100",[1857,1981,1982],{},"d",[1812,1984,1985,1988,1991,1994,1997,2000,2003,2006],{},[1857,1986,1987],{},"5",[1857,1989,1990],{},"ENQ",[1857,1992,1993],{},"37",[1857,1995,1996],{},"%",[1857,1998,1999],{},"69",[1857,2001,2002],{},"E",[1857,2004,2005],{},"101",[1857,2007,1744],{},[1812,2009,2010,2013,2016,2019,2021,2024,2027,2030],{},[1857,2011,2012],{},"6",[1857,2014,2015],{},"ACK",[1857,2017,2018],{},"38",[1857,2020,763],{},[1857,2022,2023],{},"70",[1857,2025,2026],{},"F",[1857,2028,2029],{},"102",[1857,2031,1724],{},[1812,2033,2034,2037,2040,2043,2046,2049,2052,2055],{},[1857,2035,2036],{},"7",[1857,2038,2039],{},"BEL",[1857,2041,2042],{},"39",[1857,2044,2045],{},",",[1857,2047,2048],{},"71",[1857,2050,2051],{},"G",[1857,2053,2054],{},"103",[1857,2056,2057],{},"g",[1812,2059,2060,2063,2066,2069,2071,2074,2077,2080],{},[1857,2061,2062],{},"8",[1857,2064,2065],{},"BS",[1857,2067,2068],{},"40",[1857,2070,222],{},[1857,2072,2073],{},"72",[1857,2075,2076],{},"H",[1857,2078,2079],{},"104",[1857,2081,2082],{},"h",[1812,2084,2085,2088,2091,2094,2097,2100,2103,2106],{},[1857,2086,2087],{},"9",[1857,2089,2090],{},"HT",[1857,2092,2093],{},"41",[1857,2095,2096],{},")",[1857,2098,2099],{},"73",[1857,2101,2102],{},"I",[1857,2104,2105],{},"105",[1857,2107,2108],{},"i",[1812,2110,2111,2114,2117,2120,2123,2126,2129,2132],{},[1857,2112,2113],{},"10",[1857,2115,2116],{},"LF",[1857,2118,2119],{},"42",[1857,2121,2122],{},"*",[1857,2124,2125],{},"74",[1857,2127,2128],{},"J",[1857,2130,2131],{},"106",[1857,2133,2134],{},"j",[1812,2136,2137,2140,2143,2146,2149,2152,2155,2158],{},[1857,2138,2139],{},"11",[1857,2141,2142],{},"VT",[1857,2144,2145],{},"43",[1857,2147,2148],{},"+",[1857,2150,2151],{},"75",[1857,2153,2154],{},"K",[1857,2156,2157],{},"107",[1857,2159,2160],{},"k",[1812,2162,2163,2166,2169,2172,2174,2177,2180,2183],{},[1857,2164,2165],{},"12",[1857,2167,2168],{},"FF",[1857,2170,2171],{},"44",[1857,2173,2045],{},[1857,2175,2176],{},"76",[1857,2178,2179],{},"L",[1857,2181,2182],{},"108",[1857,2184,2185],{},"l",[1812,2187,2188,2191,2194,2197,2200,2203,2206,2209],{},[1857,2189,2190],{},"13",[1857,2192,2193],{},"CR",[1857,2195,2196],{},"45",[1857,2198,2199],{},"-",[1857,2201,2202],{},"77",[1857,2204,2205],{},"M",[1857,2207,2208],{},"109",[1857,2210,2211],{},"m",[1812,2213,2214,2217,2220,2223,2226,2229,2232,2235],{},[1857,2215,2216],{},"14",[1857,2218,2219],{},"SO",[1857,2221,2222],{},"46",[1857,2224,2225],{},".",[1857,2227,2228],{},"78",[1857,2230,2231],{},"N",[1857,2233,2234],{},"110",[1857,2236,2237],{},"n",[1812,2239,2240,2243,2246,2249,2252,2255,2258,2261],{},[1857,2241,2242],{},"15",[1857,2244,2245],{},"SI",[1857,2247,2248],{},"47",[1857,2250,2251],{},"\u002F",[1857,2253,2254],{},"79",[1857,2256,2257],{},"O",[1857,2259,2260],{},"111",[1857,2262,2263],{},"o",[1812,2265,2266,2269,2272,2275,2277,2280,2283,2286],{},[1857,2267,2268],{},"16",[1857,2270,2271],{},"DLE",[1857,2273,2274],{},"48",[1857,2276,1859],{},[1857,2278,2279],{},"80",[1857,2281,2282],{},"P",[1857,2284,2285],{},"112",[1857,2287,19],{},[1812,2289,2290,2293,2296,2299,2301,2304,2307,2310],{},[1857,2291,2292],{},"17",[1857,2294,2295],{},"DCI",[1857,2297,2298],{},"49",[1857,2300,1885],{},[1857,2302,2303],{},"81",[1857,2305,2306],{},"Q",[1857,2308,2309],{},"113",[1857,2311,2312],{},"q",[1812,2314,2315,2318,2321,2324,2326,2329,2332,2335],{},[1857,2316,2317],{},"18",[1857,2319,2320],{},"DC2",[1857,2322,2323],{},"50",[1857,2325,1747],{},[1857,2327,2328],{},"82",[1857,2330,2331],{},"R",[1857,2333,2334],{},"114",[1857,2336,2337],{},"r",[1812,2339,2340,2343,2346,2349,2351,2354,2357,2360],{},[1857,2341,2342],{},"19",[1857,2344,2345],{},"DC3",[1857,2347,2348],{},"51",[1857,2350,1741],{},[1857,2352,2353],{},"83",[1857,2355,2356],{},"S",[1857,2358,2359],{},"115",[1857,2361,2362],{},"s",[1812,2364,2365,2368,2371,2374,2376,2379,2382,2385],{},[1857,2366,2367],{},"20",[1857,2369,2370],{},"DC4",[1857,2372,2373],{},"52",[1857,2375,1961],{},[1857,2377,2378],{},"84",[1857,2380,2381],{},"T",[1857,2383,2384],{},"116",[1857,2386,2387],{},"t",[1812,2389,2390,2393,2396,2399,2401,2404,2407,2410],{},[1857,2391,2392],{},"21",[1857,2394,2395],{},"NAK",[1857,2397,2398],{},"53",[1857,2400,1987],{},[1857,2402,2403],{},"85",[1857,2405,2406],{},"U",[1857,2408,2409],{},"117",[1857,2411,2412],{},"u",[1812,2414,2415,2418,2421,2424,2426,2429,2432,2435],{},[1857,2416,2417],{},"22",[1857,2419,2420],{},"SYN",[1857,2422,2423],{},"54",[1857,2425,2012],{},[1857,2427,2428],{},"86",[1857,2430,2431],{},"V",[1857,2433,2434],{},"118",[1857,2436,2437],{},"v",[1812,2439,2440,2443,2446,2449,2451,2454,2457,2460],{},[1857,2441,2442],{},"23",[1857,2444,2445],{},"TB",[1857,2447,2448],{},"55",[1857,2450,2036],{},[1857,2452,2453],{},"87",[1857,2455,2456],{},"W",[1857,2458,2459],{},"119",[1857,2461,2462],{},"w",[1812,2464,2465,2468,2471,2474,2476,2479,2482,2485],{},[1857,2466,2467],{},"24",[1857,2469,2470],{},"CAN",[1857,2472,2473],{},"56",[1857,2475,2062],{},[1857,2477,2478],{},"88",[1857,2480,2481],{},"X",[1857,2483,2484],{},"120",[1857,2486,2487],{},"x",[1812,2489,2490,2493,2496,2499,2501,2504,2507,2510],{},[1857,2491,2492],{},"25",[1857,2494,2495],{},"EM",[1857,2497,2498],{},"57",[1857,2500,2087],{},[1857,2502,2503],{},"89",[1857,2505,2506],{},"Y",[1857,2508,2509],{},"121",[1857,2511,2512],{},"y",[1812,2514,2515,2518,2521,2524,2527,2530,2533,2536],{},[1857,2516,2517],{},"26",[1857,2519,2520],{},"SUB",[1857,2522,2523],{},"58",[1857,2525,2526],{},":",[1857,2528,2529],{},"90",[1857,2531,2532],{},"Z",[1857,2534,2535],{},"122",[1857,2537,2538],{},"z",[1812,2540,2541,2544,2547,2550,2552,2555,2558,2561],{},[1857,2542,2543],{},"27",[1857,2545,2546],{},"ESC",[1857,2548,2549],{},"59",[1857,2551,926],{},[1857,2553,2554],{},"91",[1857,2556,2557],{},"[",[1857,2559,2560],{},"123",[1857,2562,2563],{},"{",[1812,2565,2566,2569,2572,2575,2578,2581,2583,2586],{},[1857,2567,2568],{},"28",[1857,2570,2571],{},"FS",[1857,2573,2574],{},"60",[1857,2576,2577],{},"\u003C",[1857,2579,2580],{},"92",[1857,2582,2251],{},[1857,2584,2585],{},"124",[1857,2587,2588],{},"|",[1812,2590,2591,2594,2597,2600,2602,2605,2608,2611],{},[1857,2592,2593],{},"29",[1857,2595,2596],{},"GS",[1857,2598,2599],{},"61",[1857,2601,70],{},[1857,2603,2604],{},"93",[1857,2606,2607],{},"]",[1857,2609,2610],{},"125",[1857,2612,2613],{},"}",[1812,2615,2616,2619,2622,2625,2628,2631,2634,2637],{},[1857,2617,2618],{},"30",[1857,2620,2621],{},"RS",[1857,2623,2624],{},"62",[1857,2626,2627],{},">",[1857,2629,2630],{},"94",[1857,2632,2633],{},"^",[1857,2635,2636],{},"126",[1857,2638,2639],{},"`",[1812,2641,2642,2645,2648,2651,2654,2657,2660,2663],{},[1857,2643,2644],{},"31",[1857,2646,2647],{},"US",[1857,2649,2650],{},"63",[1857,2652,2653],{},"?",[1857,2655,2656],{},"95",[1857,2658,2659],{},"_",[1857,2661,2662],{},"127",[1857,2664,2665],{},"DEL",[19,2667,2668,2669,2672],{},"ASCII 码大致由以下",[887,2670,2671],{},"两部分组","成：",[2674,2675,2676,2683],"ul",{},[259,2677,2678,2679,2682],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[887,2680,2681],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[259,2684,2685,2686,2689],{},"ASCII 打印字符：数字 ",[887,2687,2688],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[1645,2691,2693],{"id":2692},"_134转义字符","1.3.4转义字符",[26,2695,2697],{"className":28,"code":2696,"language":30,"meta":31,"style":31},"\u002F\u002F换行符\ncout \u003C\u003C\"hello world\u002Fn\"; \u002F\u002F就等同于如下：\ncout \u003C\u003C\"hello world\"\u003C\u003Cendl;\n\u002F\u002F反斜杠\ncout \u003C\u003C\"\u002F\u002F\"\u003C\u003Cendl;\n\u002F\u002F水平制表符\ncout \u003C\u003C\"aaaa\\thelloworld\"\u003C\u003Cendl; \u002F\u002F输出窗口时有对齐效果\n",[33,2698,2699,2704,2719,2733,2738,2751,2756],{"__ignoreMap":31},[36,2700,2701],{"class":38,"line":39},[36,2702,2703],{"class":124},"\u002F\u002F换行符\n",[36,2705,2706,2709,2711,2714,2716],{"class":38,"line":54},[36,2707,2708],{"class":50},"cout ",[36,2710,107],{"class":42},[36,2712,2713],{"class":110},"\"hello world\u002Fn\"",[36,2715,926],{"class":50},[36,2717,2718],{"class":124}," \u002F\u002F就等同于如下：\n",[36,2720,2721,2723,2725,2728,2730],{"class":38,"line":61},[36,2722,2708],{"class":50},[36,2724,107],{"class":42},[36,2726,2727],{"class":110},"\"hello world\"",[36,2729,107],{"class":42},[36,2731,2732],{"class":50},"endl;\n",[36,2734,2735],{"class":38,"line":80},[36,2736,2737],{"class":124},"\u002F\u002F反斜杠\n",[36,2739,2740,2742,2744,2747,2749],{"class":38,"line":96},[36,2741,2708],{"class":50},[36,2743,107],{"class":42},[36,2745,2746],{"class":110},"\"\u002F\u002F\"",[36,2748,107],{"class":42},[36,2750,2732],{"class":50},[36,2752,2753],{"class":38,"line":101},[36,2754,2755],{"class":124},"\u002F\u002F水平制表符\n",[36,2757,2758,2760,2762,2765,2768,2771,2773,2776],{"class":38,"line":128},[36,2759,2708],{"class":50},[36,2761,107],{"class":42},[36,2763,2764],{"class":110},"\"aaaa",[36,2766,2767],{"class":73},"\\t",[36,2769,2770],{"class":110},"helloworld\"",[36,2772,107],{"class":42},[36,2774,2775],{"class":50},"endl;",[36,2777,2778],{"class":124}," \u002F\u002F输出窗口时有对齐效果\n",[1645,2780,2782],{"id":2781},"_135字符串型","1.3.5字符串型",[19,2784,2785,2786,2788],{},"char 变量名",[36,2787],{},"=\"字符串值\"",[26,2790,2792],{"className":28,"code":2791,"language":30,"meta":31,"style":31},"\u002F\u002Fc风格字符串\n\u002F\u002F注意事项：\n\u002F\u002F1.char字符串名[]\n\u002F\u002F2.等号后面要用双引号，包含起来字符串\nchar str[]=\"hello world\";\ncout \u003C\u003Cstr\u003C\u003Cendl;\n\u002F\u002Fc++风格字符串\n\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\nstring str2=\"hello world\";\ncout \u003C\u003Cstr2\u003C\u003Cendl;\n",[33,2793,2794,2799,2804,2809,2814,2827,2840,2845,2850,2861],{"__ignoreMap":31},[36,2795,2796],{"class":38,"line":39},[36,2797,2798],{"class":124},"\u002F\u002Fc风格字符串\n",[36,2800,2801],{"class":38,"line":54},[36,2802,2803],{"class":124},"\u002F\u002F注意事项：\n",[36,2805,2806],{"class":38,"line":61},[36,2807,2808],{"class":124},"\u002F\u002F1.char字符串名[]\n",[36,2810,2811],{"class":38,"line":80},[36,2812,2813],{"class":124},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[36,2815,2816,2818,2821,2823,2825],{"class":38,"line":96},[36,2817,1766],{"class":42},[36,2819,2820],{"class":50}," str[]",[36,2822,70],{"class":42},[36,2824,2727],{"class":110},[36,2826,77],{"class":50},[36,2828,2829,2831,2833,2836,2838],{"class":38,"line":101},[36,2830,2708],{"class":50},[36,2832,107],{"class":42},[36,2834,2835],{"class":50},"str",[36,2837,107],{"class":42},[36,2839,2732],{"class":50},[36,2841,2842],{"class":38,"line":128},[36,2843,2844],{"class":124},"\u002F\u002Fc++风格字符串\n",[36,2846,2847],{"class":38,"line":149},[36,2848,2849],{"class":124},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[36,2851,2852,2855,2857,2859],{"class":38,"line":154},[36,2853,2854],{"class":50},"string str2",[36,2856,70],{"class":42},[36,2858,2727],{"class":110},[36,2860,77],{"class":50},[36,2862,2863,2865,2867,2870,2872],{"class":38,"line":167},[36,2864,2708],{"class":50},[36,2866,107],{"class":42},[36,2868,2869],{"class":50},"str2",[36,2871,107],{"class":42},[36,2873,2732],{"class":50},[1645,2875,2877],{"id":2876},"_136布尔类型bool","1.3.6布尔类型bool",[26,2879,2881],{"className":28,"code":2880,"language":30,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[33,2882,2883,2898],{"__ignoreMap":31},[36,2884,2885,2888,2891,2893,2896],{"class":38,"line":39},[36,2886,2887],{"class":42},"bool",[36,2889,2890],{"class":50}," flag",[36,2892,70],{"class":42},[36,2894,2895],{"class":73},"true",[36,2897,77],{"class":50},[36,2899,2900,2903,2906,2909,2911,2913],{"class":38,"line":54},[36,2901,2902],{"class":50},"cout",[36,2904,2905],{"class":42},"\u003C\u003Csizeof",[36,2907,2908],{"class":50},"(flag)",[36,2910,107],{"class":42},[36,2912,2775],{"class":50},[36,2914,2915],{"class":124}," \u002F\u002F查看布尔占内存空间\n",[14,2917,2919],{"id":2918},"_14键盘输入cin","1.4键盘输入cin",[26,2921,2923],{"className":28,"code":2922,"language":30,"meta":31,"style":31},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[33,2924,2925,2937,2954,2964],{"__ignoreMap":31},[36,2926,2927,2929,2931,2933,2935],{"class":38,"line":39},[36,2928,43],{"class":42},[36,2930,474],{"class":50},[36,2932,70],{"class":42},[36,2934,1859],{"class":73},[36,2936,77],{"class":50},[36,2938,2939,2941,2943,2946,2948,2950,2952],{"class":38,"line":54},[36,2940,2902],{"class":50},[36,2942,107],{"class":42},[36,2944,2945],{"class":110},"\"请给整型变量a赋值\"",[36,2947,107],{"class":42},[36,2949,1906],{"class":50},[36,2951,107],{"class":42},[36,2953,2732],{"class":50},[36,2955,2956,2959,2962],{"class":38,"line":61},[36,2957,2958],{"class":50},"cin ",[36,2960,2961],{"class":42},">>",[36,2963,93],{"class":50},[36,2965,2966,2968,2970,2973,2975,2977,2979],{"class":38,"line":80},[36,2967,2708],{"class":50},[36,2969,107],{"class":42},[36,2971,2972],{"class":110}," \"整型变量a=\"",[36,2974,114],{"class":42},[36,2976,1906],{"class":50},[36,2978,107],{"class":42},[36,2980,2732],{"class":50},[14,2982,2984],{"id":2983},"_15运算符","1.5运算符",[1645,2986,2988],{"id":2987},"_151算术运算符","1.5.1算术运算符",[19,2990,2991,2995],{},[2992,2993],"img",{"alt":31,"src":2994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[256,2997,2998,3001,3004],{},[259,2999,3000],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[259,3002,3003],{},"两个小数不可以做取模运算",[259,3005,3006],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[1645,3008,3010],{"id":3009},"_152赋值运算符","1.5.2赋值运算符",[19,3012,3013],{},[2992,3014],{"alt":31,"src":3015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[1645,3017,3019],{"id":3018},"_153比较运算符","1.5.3比较运算符",[19,3021,3022],{},[2992,3023],{"alt":31,"src":3024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[1645,3026,3028],{"id":3027},"_154逻辑运算符","1.5.4逻辑运算符",[19,3030,3031],{},[2992,3032],{"alt":31,"src":3033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3035,3037],{"id":3036},"_16程序流程结构","1.6程序流程结构",[1645,3039,3041],{"id":3040},"_161选择结构","1.6.1选择结构",[256,3043,3044],{},[259,3045,3046],{},"if语句\n单行、多行、多条件if语句",[26,3048,3050],{"className":28,"code":3049,"language":30,"meta":31,"style":31},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\nif(score>600)\n{\n    cout\u003C\u003C'这是单行if语句'\u003C\u003Cendl;\n}\n\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\ncin >> score\nif(score\u003C=600)\n{\n    cout>>\"小于等于600\"\u003C\u003Cendl;\n}\nelse\n{\n    cout>>\"大于600\">>endl;\n}\n\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\nif (0\u003Cnum\u003C100)\n{\n    cout\u003C\u003C\"小于100\"\u003C\u003Cendl;\n}\nelse if (nmu>=100&&num\u003C200)\n{\n    cout\u003C\u003C\"不小于100且小于200\"\u003C\u003Cendl; \u002F\u002F可以无限else if,python中是elif：\n}\nelse\n{\n    cout\u003C\u003C\"不小于200\"\u003C\u003Cendl;\n}\n\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[33,3051,3052,3057,3072,3077,3091,3095,3100,3109,3122,3126,3139,3143,3148,3152,3165,3169,3174,3194,3198,3211,3215,3243,3247,3263,3267,3271,3275,3288,3292],{"__ignoreMap":31},[36,3053,3054],{"class":38,"line":39},[36,3055,3056],{"class":124},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[36,3058,3059,3062,3065,3067,3070],{"class":38,"line":54},[36,3060,3061],{"class":42},"if",[36,3063,3064],{"class":50},"(score",[36,3066,2627],{"class":42},[36,3068,3069],{"class":73},"600",[36,3071,1680],{"class":50},[36,3073,3074],{"class":38,"line":61},[36,3075,3076],{"class":50},"{\n",[36,3078,3079,3082,3084,3087,3089],{"class":38,"line":80},[36,3080,3081],{"class":50},"    cout",[36,3083,107],{"class":42},[36,3085,3086],{"class":110},"'这是单行if语句'",[36,3088,107],{"class":42},[36,3090,2732],{"class":50},[36,3092,3093],{"class":38,"line":96},[36,3094,250],{"class":50},[36,3096,3097],{"class":38,"line":101},[36,3098,3099],{"class":124},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[36,3101,3102,3104,3106],{"class":38,"line":128},[36,3103,2958],{"class":50},[36,3105,2961],{"class":42},[36,3107,3108],{"class":50}," score\n",[36,3110,3111,3113,3115,3118,3120],{"class":38,"line":149},[36,3112,3061],{"class":42},[36,3114,3064],{"class":50},[36,3116,3117],{"class":42},"\u003C=",[36,3119,3069],{"class":73},[36,3121,1680],{"class":50},[36,3123,3124],{"class":38,"line":154},[36,3125,3076],{"class":50},[36,3127,3128,3130,3132,3135,3137],{"class":38,"line":167},[36,3129,3081],{"class":50},[36,3131,2961],{"class":42},[36,3133,3134],{"class":110},"\"小于等于600\"",[36,3136,107],{"class":42},[36,3138,2732],{"class":50},[36,3140,3141],{"class":38,"line":172},[36,3142,250],{"class":50},[36,3144,3145],{"class":38,"line":192},[36,3146,3147],{"class":42},"else\n",[36,3149,3150],{"class":38,"line":211},[36,3151,3076],{"class":50},[36,3153,3154,3156,3158,3161,3163],{"class":38,"line":216},[36,3155,3081],{"class":50},[36,3157,2961],{"class":42},[36,3159,3160],{"class":110},"\"大于600\"",[36,3162,2961],{"class":42},[36,3164,2732],{"class":50},[36,3166,3167],{"class":38,"line":231},[36,3168,250],{"class":50},[36,3170,3171],{"class":38,"line":236},[36,3172,3173],{"class":124},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[36,3175,3176,3178,3181,3183,3185,3188,3190,3192],{"class":38,"line":247},[36,3177,3061],{"class":42},[36,3179,3180],{"class":50}," (",[36,3182,1859],{"class":73},[36,3184,2577],{"class":42},[36,3186,3187],{"class":50},"num",[36,3189,2577],{"class":42},[36,3191,1979],{"class":73},[36,3193,1680],{"class":50},[36,3195,3196],{"class":38,"line":637},[36,3197,3076],{"class":50},[36,3199,3200,3202,3204,3207,3209],{"class":38,"line":646},[36,3201,3081],{"class":50},[36,3203,107],{"class":42},[36,3205,3206],{"class":110},"\"小于100\"",[36,3208,107],{"class":42},[36,3210,2732],{"class":50},[36,3212,3213],{"class":38,"line":655},[36,3214,250],{"class":50},[36,3216,3217,3220,3223,3226,3229,3231,3234,3236,3238,3241],{"class":38,"line":660},[36,3218,3219],{"class":42},"else",[36,3221,3222],{"class":42}," if",[36,3224,3225],{"class":50}," (nmu",[36,3227,3228],{"class":42},">=",[36,3230,1979],{"class":73},[36,3232,3233],{"class":42},"&&",[36,3235,3187],{"class":50},[36,3237,2577],{"class":42},[36,3239,3240],{"class":73},"200",[36,3242,1680],{"class":50},[36,3244,3245],{"class":38,"line":665},[36,3246,3076],{"class":50},[36,3248,3249,3251,3253,3256,3258,3260],{"class":38,"line":674},[36,3250,3081],{"class":50},[36,3252,107],{"class":42},[36,3254,3255],{"class":110},"\"不小于100且小于200\"",[36,3257,107],{"class":42},[36,3259,2775],{"class":50},[36,3261,3262],{"class":124}," \u002F\u002F可以无限else if,python中是elif：\n",[36,3264,3265],{"class":38,"line":679},[36,3266,250],{"class":50},[36,3268,3269],{"class":38,"line":692},[36,3270,3147],{"class":42},[36,3272,3273],{"class":38,"line":705},[36,3274,3076],{"class":50},[36,3276,3277,3279,3281,3284,3286],{"class":38,"line":710},[36,3278,3081],{"class":50},[36,3280,107],{"class":42},[36,3282,3283],{"class":110},"\"不小于200\"",[36,3285,107],{"class":42},[36,3287,2732],{"class":50},[36,3289,3290],{"class":38,"line":722},[36,3291,250],{"class":50},[36,3293,3294],{"class":38,"line":750},[36,3295,3296],{"class":124},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[256,3298,3299],{"start":54},[259,3300,3301],{},"三目运算符",[26,3303,3305],{"className":28,"code":3304,"language":30,"meta":31,"style":31},"\u002F\u002F创建三个变量a,b,c\n\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\nint a=20,b=10,c=0;\nc=(a>b?a:b)\ncout\u003C\u003C\"c=\"\u003C\u003Cc\u003C\u003Cendl;\n\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n(a>b?a:b)=100;\ncout\u003C\u003Ca\u003C\u003Cendl; \u002F\u002F100  a是大于b的，将100赋值给了a\ncout\u003C\u003Cb\u003C\u003Cendl; \u002F\u002F10   a>b,b还是原值\n",[33,3306,3307,3312,3317,3343,3365,3382,3387,3410,3425],{"__ignoreMap":31},[36,3308,3309],{"class":38,"line":39},[36,3310,3311],{"class":124},"\u002F\u002F创建三个变量a,b,c\n",[36,3313,3314],{"class":38,"line":54},[36,3315,3316],{"class":124},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[36,3318,3319,3321,3323,3325,3327,3330,3332,3334,3337,3339,3341],{"class":38,"line":61},[36,3320,43],{"class":42},[36,3322,474],{"class":50},[36,3324,70],{"class":42},[36,3326,2367],{"class":73},[36,3328,3329],{"class":50},",b",[36,3331,70],{"class":42},[36,3333,2113],{"class":73},[36,3335,3336],{"class":50},",c",[36,3338,70],{"class":42},[36,3340,1859],{"class":73},[36,3342,77],{"class":50},[36,3344,3345,3347,3349,3352,3354,3356,3358,3360,3362],{"class":38,"line":80},[36,3346,1956],{"class":50},[36,3348,70],{"class":42},[36,3350,3351],{"class":50},"(a",[36,3353,2627],{"class":42},[36,3355,1931],{"class":50},[36,3357,2653],{"class":42},[36,3359,1906],{"class":50},[36,3361,2526],{"class":42},[36,3363,3364],{"class":50},"b)\n",[36,3366,3367,3369,3371,3374,3376,3378,3380],{"class":38,"line":96},[36,3368,2902],{"class":50},[36,3370,107],{"class":42},[36,3372,3373],{"class":110},"\"c=\"",[36,3375,107],{"class":42},[36,3377,1956],{"class":50},[36,3379,107],{"class":42},[36,3381,2732],{"class":50},[36,3383,3384],{"class":38,"line":101},[36,3385,3386],{"class":124},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[36,3388,3389,3391,3393,3395,3397,3399,3401,3404,3406,3408],{"class":38,"line":128},[36,3390,3351],{"class":50},[36,3392,2627],{"class":42},[36,3394,1931],{"class":50},[36,3396,2653],{"class":42},[36,3398,1906],{"class":50},[36,3400,2526],{"class":42},[36,3402,3403],{"class":50},"b)",[36,3405,70],{"class":42},[36,3407,1979],{"class":73},[36,3409,77],{"class":50},[36,3411,3412,3414,3416,3418,3420,3422],{"class":38,"line":149},[36,3413,2902],{"class":50},[36,3415,107],{"class":42},[36,3417,1906],{"class":50},[36,3419,107],{"class":42},[36,3421,2775],{"class":50},[36,3423,3424],{"class":124}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[36,3426,3427,3429,3431,3433,3435,3437],{"class":38,"line":154},[36,3428,2902],{"class":50},[36,3430,107],{"class":42},[36,3432,1931],{"class":50},[36,3434,107],{"class":42},[36,3436,2775],{"class":50},[36,3438,3439],{"class":124}," \u002F\u002F10   a>b,b还是原值\n",[256,3441,3442],{"start":61},[259,3443,3444],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,3446,3448],{"className":28,"code":3447,"language":30,"meta":31,"style":31},"\u002F\u002F案例-电影打分\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int score=0;\n    cout\u003C\u003C\"电影打分：\"\u003C\u003Cendl;\n    cin>>score;\n    switch(score)\n    {\n        case 10:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 9:cout\u003C\u003C\"经典\"\u003C\u003Cendl;break;\n        case 8:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 7:cout\u003C\u003C\"非常好\"\u003C\u003Cendl;break;\n        case 6:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        case 5:cout\u003C\u003C\"一般\"\u003C\u003Cendl;break;\n        default:cout\u003C\u003C\"烂片\"\u003C\u003Cendl;break;\n    }\n}\n",[33,3449,3450,3455,3463,3476,3485,3489,3502,3515,3525,3533,3538,3562,3583,3605,3626,3648,3669,3689,3694],{"__ignoreMap":31},[36,3451,3452],{"class":38,"line":39},[36,3453,3454],{"class":124},"\u002F\u002F案例-电影打分\n",[36,3456,3457,3460],{"class":38,"line":54},[36,3458,3459],{"class":42},"#include",[36,3461,3462],{"class":110},"\u003Ciostream>\n",[36,3464,3465,3468,3471,3474],{"class":38,"line":61},[36,3466,3467],{"class":42},"using",[36,3469,3470],{"class":42}," namespace",[36,3472,3473],{"class":46}," std",[36,3475,77],{"class":50},[36,3477,3478,3480,3482],{"class":38,"line":80},[36,3479,43],{"class":42},[36,3481,47],{"class":46},[36,3483,3484],{"class":50},"()\n",[36,3486,3487],{"class":38,"line":96},[36,3488,3076],{"class":50},[36,3490,3491,3493,3496,3498,3500],{"class":38,"line":101},[36,3492,64],{"class":42},[36,3494,3495],{"class":50}," score",[36,3497,70],{"class":42},[36,3499,1859],{"class":73},[36,3501,77],{"class":50},[36,3503,3504,3506,3508,3511,3513],{"class":38,"line":128},[36,3505,3081],{"class":50},[36,3507,107],{"class":42},[36,3509,3510],{"class":110},"\"电影打分：\"",[36,3512,107],{"class":42},[36,3514,2732],{"class":50},[36,3516,3517,3520,3522],{"class":38,"line":149},[36,3518,3519],{"class":50},"    cin",[36,3521,2961],{"class":42},[36,3523,3524],{"class":50},"score;\n",[36,3526,3527,3530],{"class":38,"line":154},[36,3528,3529],{"class":42},"    switch",[36,3531,3532],{"class":50},"(score)\n",[36,3534,3535],{"class":38,"line":167},[36,3536,3537],{"class":50},"    {\n",[36,3539,3540,3543,3545,3548,3550,3553,3555,3557,3560],{"class":38,"line":172},[36,3541,3542],{"class":42},"        case",[36,3544,74],{"class":73},[36,3546,3547],{"class":50},":cout",[36,3549,107],{"class":42},[36,3551,3552],{"class":110},"\"经典\"",[36,3554,107],{"class":42},[36,3556,2775],{"class":50},[36,3558,3559],{"class":42},"break",[36,3561,77],{"class":50},[36,3563,3564,3566,3569,3571,3573,3575,3577,3579,3581],{"class":38,"line":192},[36,3565,3542],{"class":42},[36,3567,3568],{"class":73}," 9",[36,3570,3547],{"class":50},[36,3572,107],{"class":42},[36,3574,3552],{"class":110},[36,3576,107],{"class":42},[36,3578,2775],{"class":50},[36,3580,3559],{"class":42},[36,3582,77],{"class":50},[36,3584,3585,3587,3590,3592,3594,3597,3599,3601,3603],{"class":38,"line":211},[36,3586,3542],{"class":42},[36,3588,3589],{"class":73}," 8",[36,3591,3547],{"class":50},[36,3593,107],{"class":42},[36,3595,3596],{"class":110},"\"非常好\"",[36,3598,107],{"class":42},[36,3600,2775],{"class":50},[36,3602,3559],{"class":42},[36,3604,77],{"class":50},[36,3606,3607,3609,3612,3614,3616,3618,3620,3622,3624],{"class":38,"line":216},[36,3608,3542],{"class":42},[36,3610,3611],{"class":73}," 7",[36,3613,3547],{"class":50},[36,3615,107],{"class":42},[36,3617,3596],{"class":110},[36,3619,107],{"class":42},[36,3621,2775],{"class":50},[36,3623,3559],{"class":42},[36,3625,77],{"class":50},[36,3627,3628,3630,3633,3635,3637,3640,3642,3644,3646],{"class":38,"line":231},[36,3629,3542],{"class":42},[36,3631,3632],{"class":73}," 6",[36,3634,3547],{"class":50},[36,3636,107],{"class":42},[36,3638,3639],{"class":110},"\"一般\"",[36,3641,107],{"class":42},[36,3643,2775],{"class":50},[36,3645,3559],{"class":42},[36,3647,77],{"class":50},[36,3649,3650,3652,3655,3657,3659,3661,3663,3665,3667],{"class":38,"line":236},[36,3651,3542],{"class":42},[36,3653,3654],{"class":73}," 5",[36,3656,3547],{"class":50},[36,3658,107],{"class":42},[36,3660,3639],{"class":110},[36,3662,107],{"class":42},[36,3664,2775],{"class":50},[36,3666,3559],{"class":42},[36,3668,77],{"class":50},[36,3670,3671,3674,3676,3678,3681,3683,3685,3687],{"class":38,"line":247},[36,3672,3673],{"class":42},"        default",[36,3675,3547],{"class":50},[36,3677,107],{"class":42},[36,3679,3680],{"class":110},"\"烂片\"",[36,3682,107],{"class":42},[36,3684,2775],{"class":50},[36,3686,3559],{"class":42},[36,3688,77],{"class":50},[36,3690,3691],{"class":38,"line":637},[36,3692,3693],{"class":50},"    }\n",[36,3695,3696],{"class":38,"line":646},[36,3697,250],{"class":50},[19,3699,3700],{},"if和switch区别：",[2674,3702,3703,3706],{},[259,3704,3705],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[259,3707,3708],{},"switch优点：结构清晰，执行效率高",[1645,3710,3712],{"id":3711},"_162循环结构","1.6.2循环结构",[256,3714,3715],{},[259,3716,3717],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,3719,3721],{"className":28,"code":3720,"language":30,"meta":31,"style":31},"\u002F\u002F打印0-9数字\nint main()\n{\n    int num=0;\n    while(num\u003C10)\n    {\n       std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++;\n    }\n    system(\"pause\")\n}\n",[33,3722,3723,3728,3736,3740,3753,3767,3771,3791,3801,3805,3815],{"__ignoreMap":31},[36,3724,3725],{"class":38,"line":39},[36,3726,3727],{"class":124},"\u002F\u002F打印0-9数字\n",[36,3729,3730,3732,3734],{"class":38,"line":54},[36,3731,43],{"class":42},[36,3733,47],{"class":46},[36,3735,3484],{"class":50},[36,3737,3738],{"class":38,"line":61},[36,3739,3076],{"class":50},[36,3741,3742,3744,3747,3749,3751],{"class":38,"line":80},[36,3743,64],{"class":42},[36,3745,3746],{"class":50}," num",[36,3748,70],{"class":42},[36,3750,1859],{"class":73},[36,3752,77],{"class":50},[36,3754,3755,3758,3761,3763,3765],{"class":38,"line":96},[36,3756,3757],{"class":42},"    while",[36,3759,3760],{"class":50},"(num",[36,3762,2577],{"class":42},[36,3764,2113],{"class":73},[36,3766,1680],{"class":50},[36,3768,3769],{"class":38,"line":101},[36,3770,3537],{"class":50},[36,3772,3773,3776,3779,3781,3783,3785,3788],{"class":38,"line":128},[36,3774,3775],{"class":46},"       std",[36,3777,3778],{"class":50},"::cout",[36,3780,107],{"class":42},[36,3782,3187],{"class":50},[36,3784,107],{"class":42},[36,3786,3787],{"class":46},"std",[36,3789,3790],{"class":50},"::endl;\n",[36,3792,3793,3796,3799],{"class":38,"line":149},[36,3794,3795],{"class":50},"        num",[36,3797,3798],{"class":42},"++",[36,3800,77],{"class":50},[36,3802,3803],{"class":38,"line":154},[36,3804,3693],{"class":50},[36,3806,3807,3809,3811,3813],{"class":38,"line":167},[36,3808,219],{"class":46},[36,3810,222],{"class":50},[36,3812,225],{"class":110},[36,3814,1680],{"class":50},[36,3816,3817],{"class":38,"line":172},[36,3818,250],{"class":50},[19,3820,3821],{},"注意：写好循环条件，避免死循环情况",[26,3823,3825],{"className":28,"code":3824,"language":30,"meta":31,"style":31},"\u002F\u002F循环结构-猜数字\n#include \u003Ciostream>\n#include \u003Cctime>\nusing namespace std;\nint main()\n{\n    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n    srand((unsigned int)time(NULL));\n\n    \u002F\u002F1.系统生成随机数\n    \u002F\u002Frand()%100 \u002F\u002F生成0-99的随机数\n    int num=rand()%100+1; \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n    \u002F\u002F2.玩家猜测\n    int val=0;\n    while (1)\n    {\n        cin>>val;\n        \u002F\u002F3.判断玩家猜测\n        if(val\u003Cnum) \n        {\n            cout\u003C\u003C\"猜小了！\"\u003C\u003Cendl;\n        }\n        else if (val>num)\n        {\n            cout\u003C\u003C\"猜大了！\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003C\"猜对了！\"\u003C\u003Cendl;\n            break;\n        }\n        \u002F\u002F猜对 退出游戏\n        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n    }\n}\n",[33,3826,3827,3832,3839,3846,3856,3864,3868,3873,3899,3903,3908,3916,3943,3948,3953,3966,3976,3980,3990,3995,4008,4013,4027,4032,4047,4051,4064,4068,4073,4077,4090,4097,4101,4106,4111,4115],{"__ignoreMap":31},[36,3828,3829],{"class":38,"line":39},[36,3830,3831],{"class":124},"\u002F\u002F循环结构-猜数字\n",[36,3833,3834,3836],{"class":38,"line":54},[36,3835,3459],{"class":42},[36,3837,3838],{"class":110}," \u003Ciostream>\n",[36,3840,3841,3843],{"class":38,"line":61},[36,3842,3459],{"class":42},[36,3844,3845],{"class":110}," \u003Cctime>\n",[36,3847,3848,3850,3852,3854],{"class":38,"line":80},[36,3849,3467],{"class":42},[36,3851,3470],{"class":42},[36,3853,3473],{"class":46},[36,3855,77],{"class":50},[36,3857,3858,3860,3862],{"class":38,"line":96},[36,3859,43],{"class":42},[36,3861,47],{"class":46},[36,3863,3484],{"class":50},[36,3865,3866],{"class":38,"line":101},[36,3867,3076],{"class":50},[36,3869,3870],{"class":38,"line":128},[36,3871,3872],{"class":124},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[36,3874,3875,3878,3881,3884,3886,3888,3891,3893,3896],{"class":38,"line":149},[36,3876,3877],{"class":46},"    srand",[36,3879,3880],{"class":50},"((",[36,3882,3883],{"class":42},"unsigned",[36,3885,965],{"class":42},[36,3887,2096],{"class":50},[36,3889,3890],{"class":46},"time",[36,3892,222],{"class":50},[36,3894,3895],{"class":73},"NULL",[36,3897,3898],{"class":50},"));\n",[36,3900,3901],{"class":38,"line":154},[36,3902,58],{"emptyLinePlaceholder":57},[36,3904,3905],{"class":38,"line":167},[36,3906,3907],{"class":124},"    \u002F\u002F1.系统生成随机数\n",[36,3909,3910,3913],{"class":38,"line":172},[36,3911,3912],{"class":124},"    \u002F\u002Frand()%100",[36,3914,3915],{"class":124}," \u002F\u002F生成0-99的随机数\n",[36,3917,3918,3920,3922,3924,3927,3930,3932,3934,3936,3938,3940],{"class":38,"line":192},[36,3919,64],{"class":42},[36,3921,3746],{"class":50},[36,3923,70],{"class":42},[36,3925,3926],{"class":46},"rand",[36,3928,3929],{"class":50},"()",[36,3931,1996],{"class":42},[36,3933,1979],{"class":73},[36,3935,2148],{"class":42},[36,3937,1885],{"class":73},[36,3939,926],{"class":50},[36,3941,3942],{"class":124}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[36,3944,3945],{"class":38,"line":211},[36,3946,3947],{"class":124},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[36,3949,3950],{"class":38,"line":216},[36,3951,3952],{"class":124},"    \u002F\u002F2.玩家猜测\n",[36,3954,3955,3957,3960,3962,3964],{"class":38,"line":231},[36,3956,64],{"class":42},[36,3958,3959],{"class":50}," val",[36,3961,70],{"class":42},[36,3963,1859],{"class":73},[36,3965,77],{"class":50},[36,3967,3968,3970,3972,3974],{"class":38,"line":236},[36,3969,3757],{"class":42},[36,3971,3180],{"class":50},[36,3973,1885],{"class":73},[36,3975,1680],{"class":50},[36,3977,3978],{"class":38,"line":247},[36,3979,3537],{"class":50},[36,3981,3982,3985,3987],{"class":38,"line":637},[36,3983,3984],{"class":50},"        cin",[36,3986,2961],{"class":42},[36,3988,3989],{"class":50},"val;\n",[36,3991,3992],{"class":38,"line":646},[36,3993,3994],{"class":124},"        \u002F\u002F3.判断玩家猜测\n",[36,3996,3997,4000,4003,4005],{"class":38,"line":655},[36,3998,3999],{"class":42},"        if",[36,4001,4002],{"class":50},"(val",[36,4004,2577],{"class":42},[36,4006,4007],{"class":50},"num) \n",[36,4009,4010],{"class":38,"line":660},[36,4011,4012],{"class":50},"        {\n",[36,4014,4015,4018,4020,4023,4025],{"class":38,"line":665},[36,4016,4017],{"class":50},"            cout",[36,4019,107],{"class":42},[36,4021,4022],{"class":110},"\"猜小了！\"",[36,4024,107],{"class":42},[36,4026,2732],{"class":50},[36,4028,4029],{"class":38,"line":674},[36,4030,4031],{"class":50},"        }\n",[36,4033,4034,4037,4039,4042,4044],{"class":38,"line":679},[36,4035,4036],{"class":42},"        else",[36,4038,3222],{"class":42},[36,4040,4041],{"class":50}," (val",[36,4043,2627],{"class":42},[36,4045,4046],{"class":50},"num)\n",[36,4048,4049],{"class":38,"line":692},[36,4050,4012],{"class":50},[36,4052,4053,4055,4057,4060,4062],{"class":38,"line":705},[36,4054,4017],{"class":50},[36,4056,107],{"class":42},[36,4058,4059],{"class":110},"\"猜大了！\"",[36,4061,107],{"class":42},[36,4063,2732],{"class":50},[36,4065,4066],{"class":38,"line":710},[36,4067,4031],{"class":50},[36,4069,4070],{"class":38,"line":722},[36,4071,4072],{"class":42},"        else\n",[36,4074,4075],{"class":38,"line":750},[36,4076,4012],{"class":50},[36,4078,4079,4081,4083,4086,4088],{"class":38,"line":755},[36,4080,4017],{"class":50},[36,4082,107],{"class":42},[36,4084,4085],{"class":110},"\"猜对了！\"",[36,4087,107],{"class":42},[36,4089,2732],{"class":50},[36,4091,4092,4095],{"class":38,"line":777},[36,4093,4094],{"class":42},"            break",[36,4096,77],{"class":50},[36,4098,4099],{"class":38,"line":802},[36,4100,4031],{"class":50},[36,4102,4103],{"class":38,"line":807},[36,4104,4105],{"class":124},"        \u002F\u002F猜对 退出游戏\n",[36,4107,4108],{"class":38,"line":818},[36,4109,4110],{"class":124},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[36,4112,4113],{"class":38,"line":843},[36,4114,3693],{"class":50},[36,4116,4117],{"class":38,"line":848},[36,4118,250],{"class":50},[256,4120,4121],{"start":54},[259,4122,4123,4124,4127],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[887,4125,4126],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,4129,4131],{"className":28,"code":4130,"language":30,"meta":31,"style":31},"\u002F\u002F在屏幕中输出0-9这10个数字\nint main()\n{\n    int num=0;\n    do \n    {\n        std::cout\u003C\u003Cnum\u003C\u003Cstd::endl;\n        num++\n    }\n    while(num\u003C10);\n    system(\"pause\");\n}\n",[33,4132,4133,4138,4146,4150,4162,4170,4174,4191,4198,4202,4214,4224],{"__ignoreMap":31},[36,4134,4135],{"class":38,"line":39},[36,4136,4137],{"class":124},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[36,4139,4140,4142,4144],{"class":38,"line":54},[36,4141,43],{"class":42},[36,4143,47],{"class":46},[36,4145,3484],{"class":50},[36,4147,4148],{"class":38,"line":61},[36,4149,3076],{"class":50},[36,4151,4152,4154,4156,4158,4160],{"class":38,"line":80},[36,4153,64],{"class":42},[36,4155,3746],{"class":50},[36,4157,70],{"class":42},[36,4159,1859],{"class":73},[36,4161,77],{"class":50},[36,4163,4164,4167],{"class":38,"line":96},[36,4165,4166],{"class":42},"    do",[36,4168,4169],{"class":50}," \n",[36,4171,4172],{"class":38,"line":101},[36,4173,3537],{"class":50},[36,4175,4176,4179,4181,4183,4185,4187,4189],{"class":38,"line":128},[36,4177,4178],{"class":46},"        std",[36,4180,3778],{"class":50},[36,4182,107],{"class":42},[36,4184,3187],{"class":50},[36,4186,107],{"class":42},[36,4188,3787],{"class":46},[36,4190,3790],{"class":50},[36,4192,4193,4195],{"class":38,"line":149},[36,4194,3795],{"class":50},[36,4196,4197],{"class":42},"++\n",[36,4199,4200],{"class":38,"line":154},[36,4201,3693],{"class":50},[36,4203,4204,4206,4208,4210,4212],{"class":38,"line":167},[36,4205,3757],{"class":42},[36,4207,3760],{"class":50},[36,4209,2577],{"class":42},[36,4211,2113],{"class":73},[36,4213,228],{"class":50},[36,4215,4216,4218,4220,4222],{"class":38,"line":172},[36,4217,219],{"class":46},[36,4219,222],{"class":50},[36,4221,225],{"class":110},[36,4223,228],{"class":50},[36,4225,4226],{"class":38,"line":192},[36,4227,250],{"class":50},[19,4229,4230],{},"案例-水仙花数",[19,4232,4233],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4235,4236],{},"例如：1^3+5^3+3^3=153",[19,4238,4239],{},"请用do...while语句，求出所有3位数的水仙花数",[26,4241,4243],{"className":28,"code":4242,"language":30,"meta":31,"style":31},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F1.先打印所有三位数字\n    int num=100;\n    do \n    {\n        \u002F\u002F2.从所有三位数字中找到水仙花数\n        int a=0; \u002F\u002F个位\n        int b=0; \u002F\u002F十位\n        int c=0; \u002F\u002F百位\n        a=num%10;\n        b=num\u002F10%10;\n        c=num\u002F100;\n        if(a*a*a+b*b*b+c*c*c == num) \u002F\u002F如果是水仙花数，才打印\n        {\n            cout\u003C\u003Cnum\u003C\u003Cendl;\n        }\n        num++;\n    }\n    while (num \u003C 1000);\n}\n",[33,4244,4245,4251,4261,4269,4273,4278,4290,4296,4300,4305,4321,4336,4352,4367,4386,4401,4448,4452,4464,4468,4476,4480,4493],{"__ignoreMap":31},[36,4246,4247,4249],{"class":38,"line":39},[36,4248,3459],{"class":42},[36,4250,3838],{"class":110},[36,4252,4253,4255,4257,4259],{"class":38,"line":54},[36,4254,3467],{"class":42},[36,4256,3470],{"class":42},[36,4258,3473],{"class":46},[36,4260,77],{"class":50},[36,4262,4263,4265,4267],{"class":38,"line":61},[36,4264,43],{"class":42},[36,4266,47],{"class":46},[36,4268,3484],{"class":50},[36,4270,4271],{"class":38,"line":80},[36,4272,3076],{"class":50},[36,4274,4275],{"class":38,"line":96},[36,4276,4277],{"class":124},"    \u002F\u002F1.先打印所有三位数字\n",[36,4279,4280,4282,4284,4286,4288],{"class":38,"line":101},[36,4281,64],{"class":42},[36,4283,3746],{"class":50},[36,4285,70],{"class":42},[36,4287,1979],{"class":73},[36,4289,77],{"class":50},[36,4291,4292,4294],{"class":38,"line":128},[36,4293,4166],{"class":42},[36,4295,4169],{"class":50},[36,4297,4298],{"class":38,"line":149},[36,4299,3537],{"class":50},[36,4301,4302],{"class":38,"line":154},[36,4303,4304],{"class":124},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[36,4306,4307,4310,4312,4314,4316,4318],{"class":38,"line":167},[36,4308,4309],{"class":42},"        int",[36,4311,474],{"class":50},[36,4313,70],{"class":42},[36,4315,1859],{"class":73},[36,4317,926],{"class":50},[36,4319,4320],{"class":124}," \u002F\u002F个位\n",[36,4322,4323,4325,4327,4329,4331,4333],{"class":38,"line":172},[36,4324,4309],{"class":42},[36,4326,482],{"class":50},[36,4328,70],{"class":42},[36,4330,1859],{"class":73},[36,4332,926],{"class":50},[36,4334,4335],{"class":124}," \u002F\u002F十位\n",[36,4337,4338,4340,4343,4345,4347,4349],{"class":38,"line":192},[36,4339,4309],{"class":42},[36,4341,4342],{"class":50}," c",[36,4344,70],{"class":42},[36,4346,1859],{"class":73},[36,4348,926],{"class":50},[36,4350,4351],{"class":124}," \u002F\u002F百位\n",[36,4353,4354,4357,4359,4361,4363,4365],{"class":38,"line":211},[36,4355,4356],{"class":50},"        a",[36,4358,70],{"class":42},[36,4360,3187],{"class":50},[36,4362,1996],{"class":42},[36,4364,2113],{"class":73},[36,4366,77],{"class":50},[36,4368,4369,4372,4374,4376,4378,4380,4382,4384],{"class":38,"line":216},[36,4370,4371],{"class":50},"        b",[36,4373,70],{"class":42},[36,4375,3187],{"class":50},[36,4377,2251],{"class":42},[36,4379,2113],{"class":73},[36,4381,1996],{"class":42},[36,4383,2113],{"class":73},[36,4385,77],{"class":50},[36,4387,4388,4391,4393,4395,4397,4399],{"class":38,"line":231},[36,4389,4390],{"class":50},"        c",[36,4392,70],{"class":42},[36,4394,3187],{"class":50},[36,4396,2251],{"class":42},[36,4398,1979],{"class":73},[36,4400,77],{"class":50},[36,4402,4403,4405,4407,4409,4411,4413,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439,4442,4445],{"class":38,"line":236},[36,4404,3999],{"class":42},[36,4406,3351],{"class":50},[36,4408,2122],{"class":42},[36,4410,1906],{"class":50},[36,4412,2122],{"class":42},[36,4414,1906],{"class":50},[36,4416,2148],{"class":42},[36,4418,1931],{"class":50},[36,4420,2122],{"class":42},[36,4422,1931],{"class":50},[36,4424,2122],{"class":42},[36,4426,1931],{"class":50},[36,4428,2148],{"class":42},[36,4430,1956],{"class":50},[36,4432,2122],{"class":42},[36,4434,1956],{"class":50},[36,4436,2122],{"class":42},[36,4438,338],{"class":50},[36,4440,4441],{"class":42},"==",[36,4443,4444],{"class":50}," num)",[36,4446,4447],{"class":124}," \u002F\u002F如果是水仙花数，才打印\n",[36,4449,4450],{"class":38,"line":247},[36,4451,4012],{"class":50},[36,4453,4454,4456,4458,4460,4462],{"class":38,"line":637},[36,4455,4017],{"class":50},[36,4457,107],{"class":42},[36,4459,3187],{"class":50},[36,4461,107],{"class":42},[36,4463,2732],{"class":50},[36,4465,4466],{"class":38,"line":646},[36,4467,4031],{"class":50},[36,4469,4470,4472,4474],{"class":38,"line":655},[36,4471,3795],{"class":50},[36,4473,3798],{"class":42},[36,4475,77],{"class":50},[36,4477,4478],{"class":38,"line":660},[36,4479,3693],{"class":50},[36,4481,4482,4484,4487,4489,4491],{"class":38,"line":665},[36,4483,3757],{"class":42},[36,4485,4486],{"class":50}," (num ",[36,4488,2577],{"class":42},[36,4490,1138],{"class":73},[36,4492,228],{"class":50},[36,4494,4495],{"class":38,"line":674},[36,4496,250],{"class":50},[256,4498,4499],{"start":61},[259,4500,4501],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,4503,4505],{"className":28,"code":4504,"language":30,"meta":31,"style":31},"\u002F\u002F从数字0-9打印\nfor(int i=0;i\u003C10;i++)\n{\n    cout\u003C\u003Ci\u003C\u003Cendl;\n}\n\u002F\u002F上式可以进行拆分\nint i=0\nfor(;;;)\n{\n    if(i>=10)\n    {\n        break;\n    }\n    cout\u003C\u003Ci\u003C\u003Cendl;\n    i++;\n}\n",[33,4506,4507,4512,4541,4545,4557,4561,4566,4577,4584,4588,4602,4606,4613,4617,4629,4638],{"__ignoreMap":31},[36,4508,4509],{"class":38,"line":39},[36,4510,4511],{"class":124},"\u002F\u002F从数字0-9打印\n",[36,4513,4514,4517,4519,4521,4524,4526,4528,4531,4533,4535,4537,4539],{"class":38,"line":54},[36,4515,4516],{"class":42},"for",[36,4518,222],{"class":50},[36,4520,43],{"class":42},[36,4522,4523],{"class":50}," i",[36,4525,70],{"class":42},[36,4527,1859],{"class":73},[36,4529,4530],{"class":50},";i",[36,4532,2577],{"class":42},[36,4534,2113],{"class":73},[36,4536,4530],{"class":50},[36,4538,3798],{"class":42},[36,4540,1680],{"class":50},[36,4542,4543],{"class":38,"line":61},[36,4544,3076],{"class":50},[36,4546,4547,4549,4551,4553,4555],{"class":38,"line":80},[36,4548,3081],{"class":50},[36,4550,107],{"class":42},[36,4552,2108],{"class":50},[36,4554,107],{"class":42},[36,4556,2732],{"class":50},[36,4558,4559],{"class":38,"line":96},[36,4560,250],{"class":50},[36,4562,4563],{"class":38,"line":101},[36,4564,4565],{"class":124},"\u002F\u002F上式可以进行拆分\n",[36,4567,4568,4570,4572,4574],{"class":38,"line":128},[36,4569,43],{"class":42},[36,4571,4523],{"class":50},[36,4573,70],{"class":42},[36,4575,4576],{"class":73},"0\n",[36,4578,4579,4581],{"class":38,"line":149},[36,4580,4516],{"class":42},[36,4582,4583],{"class":50},"(;;;)\n",[36,4585,4586],{"class":38,"line":154},[36,4587,3076],{"class":50},[36,4589,4590,4593,4596,4598,4600],{"class":38,"line":167},[36,4591,4592],{"class":42},"    if",[36,4594,4595],{"class":50},"(i",[36,4597,3228],{"class":42},[36,4599,2113],{"class":73},[36,4601,1680],{"class":50},[36,4603,4604],{"class":38,"line":172},[36,4605,3537],{"class":50},[36,4607,4608,4611],{"class":38,"line":192},[36,4609,4610],{"class":42},"        break",[36,4612,77],{"class":50},[36,4614,4615],{"class":38,"line":211},[36,4616,3693],{"class":50},[36,4618,4619,4621,4623,4625,4627],{"class":38,"line":216},[36,4620,3081],{"class":50},[36,4622,107],{"class":42},[36,4624,2108],{"class":50},[36,4626,107],{"class":42},[36,4628,2732],{"class":50},[36,4630,4631,4634,4636],{"class":38,"line":231},[36,4632,4633],{"class":50},"    i",[36,4635,3798],{"class":42},[36,4637,77],{"class":50},[36,4639,4640],{"class":38,"line":236},[36,4641,250],{"class":50},[19,4643,4644],{},"小练习",[26,4646,4648],{"className":28,"code":4647,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    \u002F\u002F敲桌子案例\n    \u002F\u002F1.先输出1-100的数字\n    for(int i=1; i\u003C=100; i++)\n    {\n        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n        if(i%7==0 || i%10==7 || i\u002F10==7)\n        {\n            cout\u003C\u003C\"敲桌子\"\u003C\u003Cendl;\n        }\n        else\n        {\n            cout\u003C\u003Ci\u003C\u003Cendl;\n        }\n    }\n}\n",[33,4649,4650,4656,4666,4674,4678,4683,4688,4716,4720,4725,4730,4771,4775,4788,4792,4796,4800,4812,4816,4820],{"__ignoreMap":31},[36,4651,4652,4654],{"class":38,"line":39},[36,4653,3459],{"class":42},[36,4655,3462],{"class":110},[36,4657,4658,4660,4662,4664],{"class":38,"line":54},[36,4659,3467],{"class":42},[36,4661,3470],{"class":42},[36,4663,3473],{"class":46},[36,4665,77],{"class":50},[36,4667,4668,4670,4672],{"class":38,"line":61},[36,4669,43],{"class":42},[36,4671,47],{"class":46},[36,4673,3484],{"class":50},[36,4675,4676],{"class":38,"line":80},[36,4677,3076],{"class":50},[36,4679,4680],{"class":38,"line":96},[36,4681,4682],{"class":124},"    \u002F\u002F敲桌子案例\n",[36,4684,4685],{"class":38,"line":101},[36,4686,4687],{"class":124},"    \u002F\u002F1.先输出1-100的数字\n",[36,4689,4690,4693,4695,4697,4699,4701,4703,4706,4708,4710,4712,4714],{"class":38,"line":128},[36,4691,4692],{"class":42},"    for",[36,4694,222],{"class":50},[36,4696,43],{"class":42},[36,4698,4523],{"class":50},[36,4700,70],{"class":42},[36,4702,1885],{"class":73},[36,4704,4705],{"class":50},"; i",[36,4707,3117],{"class":42},[36,4709,1979],{"class":73},[36,4711,4705],{"class":50},[36,4713,3798],{"class":42},[36,4715,1680],{"class":50},[36,4717,4718],{"class":38,"line":149},[36,4719,3537],{"class":50},[36,4721,4722],{"class":38,"line":154},[36,4723,4724],{"class":124},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[36,4726,4727],{"class":38,"line":167},[36,4728,4729],{"class":124},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[36,4731,4732,4734,4736,4738,4740,4742,4744,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769],{"class":38,"line":172},[36,4733,3999],{"class":42},[36,4735,4595],{"class":50},[36,4737,1996],{"class":42},[36,4739,2036],{"class":73},[36,4741,4441],{"class":42},[36,4743,1859],{"class":73},[36,4745,4746],{"class":42}," ||",[36,4748,4523],{"class":50},[36,4750,1996],{"class":42},[36,4752,2113],{"class":73},[36,4754,4441],{"class":42},[36,4756,2036],{"class":73},[36,4758,4746],{"class":42},[36,4760,4523],{"class":50},[36,4762,2251],{"class":42},[36,4764,2113],{"class":73},[36,4766,4441],{"class":42},[36,4768,2036],{"class":73},[36,4770,1680],{"class":50},[36,4772,4773],{"class":38,"line":192},[36,4774,4012],{"class":50},[36,4776,4777,4779,4781,4784,4786],{"class":38,"line":211},[36,4778,4017],{"class":50},[36,4780,107],{"class":42},[36,4782,4783],{"class":110},"\"敲桌子\"",[36,4785,107],{"class":42},[36,4787,2732],{"class":50},[36,4789,4790],{"class":38,"line":216},[36,4791,4031],{"class":50},[36,4793,4794],{"class":38,"line":231},[36,4795,4072],{"class":42},[36,4797,4798],{"class":38,"line":236},[36,4799,4012],{"class":50},[36,4801,4802,4804,4806,4808,4810],{"class":38,"line":247},[36,4803,4017],{"class":50},[36,4805,107],{"class":42},[36,4807,2108],{"class":50},[36,4809,107],{"class":42},[36,4811,2732],{"class":50},[36,4813,4814],{"class":38,"line":637},[36,4815,4031],{"class":50},[36,4817,4818],{"class":38,"line":646},[36,4819,3693],{"class":50},[36,4821,4822],{"class":38,"line":655},[36,4823,250],{"class":50},[19,4825,4826],{},"嵌套实现星图",[26,4828,4830],{"className":28,"code":4829,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    for (int i=0;i\u003C10;i++)\n    {\n        for (int j=0;j\u003C10;j++)\n        {\n            cout\u003C\u003C\"*\";\n        }\n        cout\u003C\u003Cendl;\n    }\n}\n",[33,4831,4832,4838,4848,4856,4860,4886,4890,4919,4923,4934,4938,4947,4951],{"__ignoreMap":31},[36,4833,4834,4836],{"class":38,"line":39},[36,4835,3459],{"class":42},[36,4837,3462],{"class":110},[36,4839,4840,4842,4844,4846],{"class":38,"line":54},[36,4841,3467],{"class":42},[36,4843,3470],{"class":42},[36,4845,3473],{"class":46},[36,4847,77],{"class":50},[36,4849,4850,4852,4854],{"class":38,"line":61},[36,4851,43],{"class":42},[36,4853,47],{"class":46},[36,4855,3484],{"class":50},[36,4857,4858],{"class":38,"line":80},[36,4859,3076],{"class":50},[36,4861,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880,4882,4884],{"class":38,"line":96},[36,4863,4692],{"class":42},[36,4865,3180],{"class":50},[36,4867,43],{"class":42},[36,4869,4523],{"class":50},[36,4871,70],{"class":42},[36,4873,1859],{"class":73},[36,4875,4530],{"class":50},[36,4877,2577],{"class":42},[36,4879,2113],{"class":73},[36,4881,4530],{"class":50},[36,4883,3798],{"class":42},[36,4885,1680],{"class":50},[36,4887,4888],{"class":38,"line":101},[36,4889,3537],{"class":50},[36,4891,4892,4895,4897,4899,4902,4904,4906,4909,4911,4913,4915,4917],{"class":38,"line":128},[36,4893,4894],{"class":42},"        for",[36,4896,3180],{"class":50},[36,4898,43],{"class":42},[36,4900,4901],{"class":50}," j",[36,4903,70],{"class":42},[36,4905,1859],{"class":73},[36,4907,4908],{"class":50},";j",[36,4910,2577],{"class":42},[36,4912,2113],{"class":73},[36,4914,4908],{"class":50},[36,4916,3798],{"class":42},[36,4918,1680],{"class":50},[36,4920,4921],{"class":38,"line":149},[36,4922,4012],{"class":50},[36,4924,4925,4927,4929,4932],{"class":38,"line":154},[36,4926,4017],{"class":50},[36,4928,107],{"class":42},[36,4930,4931],{"class":110},"\"*\"",[36,4933,77],{"class":50},[36,4935,4936],{"class":38,"line":167},[36,4937,4031],{"class":50},[36,4939,4940,4943,4945],{"class":38,"line":172},[36,4941,4942],{"class":50},"        cout",[36,4944,107],{"class":42},[36,4946,2732],{"class":50},[36,4948,4949],{"class":38,"line":192},[36,4950,3693],{"class":50},[36,4952,4953],{"class":38,"line":211},[36,4954,250],{"class":50},[19,4956,4957],{},"乘法口诀表",[26,4959,4961],{"className":28,"code":4960,"language":30,"meta":31,"style":31},"#include \u003Ciostream>\nusing namespace std;\nint main()\n{\n    for(int i=1;i\u003C10;i++)\n    {\n        for(int j=1;j\u003C=i;j++)\n        {\n            cout\u003C\u003Cj\u003C\u003C\"*\"\u003C\u003Ci\u003C\u003C\"=\"\u003C\u003Ci*j\u003C\u003C'\\t';\n        }\n        cout\u003C\u003Cendl;\n    }\n} \n",[33,4962,4963,4969,4979,4987,4991,5017,5021,5046,5050,5090,5094,5102,5106],{"__ignoreMap":31},[36,4964,4965,4967],{"class":38,"line":39},[36,4966,3459],{"class":42},[36,4968,3838],{"class":110},[36,4970,4971,4973,4975,4977],{"class":38,"line":54},[36,4972,3467],{"class":42},[36,4974,3470],{"class":42},[36,4976,3473],{"class":46},[36,4978,77],{"class":50},[36,4980,4981,4983,4985],{"class":38,"line":61},[36,4982,43],{"class":42},[36,4984,47],{"class":46},[36,4986,3484],{"class":50},[36,4988,4989],{"class":38,"line":80},[36,4990,3076],{"class":50},[36,4992,4993,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015],{"class":38,"line":96},[36,4994,4692],{"class":42},[36,4996,222],{"class":50},[36,4998,43],{"class":42},[36,5000,4523],{"class":50},[36,5002,70],{"class":42},[36,5004,1885],{"class":73},[36,5006,4530],{"class":50},[36,5008,2577],{"class":42},[36,5010,2113],{"class":73},[36,5012,4530],{"class":50},[36,5014,3798],{"class":42},[36,5016,1680],{"class":50},[36,5018,5019],{"class":38,"line":101},[36,5020,3537],{"class":50},[36,5022,5023,5025,5027,5029,5031,5033,5035,5037,5039,5042,5044],{"class":38,"line":128},[36,5024,4894],{"class":42},[36,5026,222],{"class":50},[36,5028,43],{"class":42},[36,5030,4901],{"class":50},[36,5032,70],{"class":42},[36,5034,1885],{"class":73},[36,5036,4908],{"class":50},[36,5038,3117],{"class":42},[36,5040,5041],{"class":50},"i;j",[36,5043,3798],{"class":42},[36,5045,1680],{"class":50},[36,5047,5048],{"class":38,"line":149},[36,5049,4012],{"class":50},[36,5051,5052,5054,5056,5058,5060,5062,5064,5066,5068,5071,5073,5075,5077,5079,5081,5084,5086,5088],{"class":38,"line":154},[36,5053,4017],{"class":50},[36,5055,107],{"class":42},[36,5057,2134],{"class":50},[36,5059,107],{"class":42},[36,5061,4931],{"class":110},[36,5063,107],{"class":42},[36,5065,2108],{"class":50},[36,5067,107],{"class":42},[36,5069,5070],{"class":110},"\"=\"",[36,5072,107],{"class":42},[36,5074,2108],{"class":50},[36,5076,2122],{"class":42},[36,5078,2134],{"class":50},[36,5080,107],{"class":42},[36,5082,5083],{"class":110},"'",[36,5085,2767],{"class":73},[36,5087,5083],{"class":110},[36,5089,77],{"class":50},[36,5091,5092],{"class":38,"line":167},[36,5093,4031],{"class":50},[36,5095,5096,5098,5100],{"class":38,"line":172},[36,5097,4942],{"class":50},[36,5099,107],{"class":42},[36,5101,2732],{"class":50},[36,5103,5104],{"class":38,"line":192},[36,5105,3693],{"class":50},[36,5107,5108],{"class":38,"line":211},[36,5109,250],{"class":50},[1645,5111,5113],{"id":5112},"_163跳出语句","1.6.3跳出语句",[256,5115,5116],{},[259,5117,5118],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5120,5121],{},"break使用时机：",[2674,5123,5124,5127,5130],{},[259,5125,5126],{},"出现在switch条件语句中，作用是终止case并跳出switch",[259,5128,5129],{},"出现在循环结构中，作用是跳出当前的循环结构",[259,5131,5132],{},"出现在嵌套循环中，跳出最近的内层循环语句",[256,5134,5135,5138],{"start":54},[259,5136,5137],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[259,5139,5140],{},"goto语句\n语法：goto 标记;",[19,5142,5143],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,5145,5147],{"className":28,"code":5146,"language":30,"meta":31,"style":31},"int main()\n{\n    cout\u003C\u003C\"1\"\u003C\u003Cendl;\n    goto FLAG;\n    cout\u003C\u003C\"2\"\u003C\u003Cendl;\n    cout\u003C\u003C\"3\"\u003C\u003Cendl;\n    cout\u003C\u003C\"4\"\u003C\u003Cendl;\n    FLAG:\n    cout\u003C\u003C\"5\"\u003C\u003Cendl;\u002F\u002F跳过了2,3,4,直接到5\n}\n",[33,5148,5149,5157,5161,5174,5184,5197,5210,5223,5231,5247],{"__ignoreMap":31},[36,5150,5151,5153,5155],{"class":38,"line":39},[36,5152,43],{"class":42},[36,5154,47],{"class":46},[36,5156,3484],{"class":50},[36,5158,5159],{"class":38,"line":54},[36,5160,3076],{"class":50},[36,5162,5163,5165,5167,5170,5172],{"class":38,"line":61},[36,5164,3081],{"class":50},[36,5166,107],{"class":42},[36,5168,5169],{"class":110},"\"1\"",[36,5171,107],{"class":42},[36,5173,2732],{"class":50},[36,5175,5176,5179,5182],{"class":38,"line":80},[36,5177,5178],{"class":42},"    goto",[36,5180,5181],{"class":46}," FLAG",[36,5183,77],{"class":50},[36,5185,5186,5188,5190,5193,5195],{"class":38,"line":96},[36,5187,3081],{"class":50},[36,5189,107],{"class":42},[36,5191,5192],{"class":110},"\"2\"",[36,5194,107],{"class":42},[36,5196,2732],{"class":50},[36,5198,5199,5201,5203,5206,5208],{"class":38,"line":101},[36,5200,3081],{"class":50},[36,5202,107],{"class":42},[36,5204,5205],{"class":110},"\"3\"",[36,5207,107],{"class":42},[36,5209,2732],{"class":50},[36,5211,5212,5214,5216,5219,5221],{"class":38,"line":128},[36,5213,3081],{"class":50},[36,5215,107],{"class":42},[36,5217,5218],{"class":110},"\"4\"",[36,5220,107],{"class":42},[36,5222,2732],{"class":50},[36,5224,5225,5228],{"class":38,"line":149},[36,5226,5227],{"class":46},"    FLAG",[36,5229,5230],{"class":50},":\n",[36,5232,5233,5235,5237,5240,5242,5244],{"class":38,"line":154},[36,5234,3081],{"class":50},[36,5236,107],{"class":42},[36,5238,5239],{"class":110},"\"5\"",[36,5241,107],{"class":42},[36,5243,2775],{"class":50},[36,5245,5246],{"class":124},"\u002F\u002F跳过了2,3,4,直接到5\n",[36,5248,5249],{"class":38,"line":167},[36,5250,250],{"class":50},[14,5252,5254],{"id":5253},"_17数组","1.7数组",[1645,5256,5258],{"id":5257},"_171一维数组","1.7.1一维数组",[256,5260,5261],{},[259,5262,5263],{},"一维数组定义方式",[1806,5265,5266,5276],{},[1809,5267,5268],{},[1812,5269,5270,5273],{},[1815,5271,5272],{},"方式",[1815,5274,5275],{},"注意事项",[1852,5277,5278,5292,5302],{},[1812,5279,5280,5286],{},[1857,5281,5282,5283,926],{},"数据类型 数组名",[36,5284,5285],{},"数组长度",[1857,5287,5288,5289,5291],{},"这种方式是先定义再arr",[36,5290,2108],{},"赋值",[1812,5293,5294,5299],{},[1857,5295,5282,5296,5298],{},[36,5297,5285],{},"={值1,值2....};",[1857,5300,5301],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1812,5303,5304,5308],{},[1857,5305,5282,5306,5298],{},[36,5307],{},[1857,5309,5310,5311,5313],{},"int arr",[36,5312],{},";这是不正确的，按照这样的方式定义必须有初始长度",[256,5315,5316],{"start":54},[259,5317,5318],{},"一维数组数组名\n用途：",[2674,5320,5321],{},[259,5322,5323],{},"1.可以统计整个数组在内存中的长度：",[26,5325,5327],{"className":28,"code":5326,"language":30,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[33,5328,5329,5336],{"__ignoreMap":31},[36,5330,5331,5333],{"class":38,"line":39},[36,5332,1673],{"class":42},[36,5334,5335],{"class":50},"(arr);\n",[36,5337,5338,5340,5343,5345],{"class":38,"line":54},[36,5339,1673],{"class":42},[36,5341,5342],{"class":50},"(arr[",[36,5344,1859],{"class":73},[36,5346,5347],{"class":50},"]);\n",[2674,5349,5350],{},[259,5351,5352],{},"2.可以获取数组在内存中的首地址:",[26,5354,5356],{"className":28,"code":5355,"language":30,"meta":31,"style":31},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[33,5357,5358,5363,5376,5381],{"__ignoreMap":31},[36,5359,5360],{"class":38,"line":39},[36,5361,5362],{"class":124},"\u002F\u002F查看16进制的首地址\n",[36,5364,5365,5367,5369,5372,5374],{"class":38,"line":54},[36,5366,2902],{"class":50},[36,5368,107],{"class":42},[36,5370,5371],{"class":50},"arr",[36,5373,107],{"class":42},[36,5375,2732],{"class":50},[36,5377,5378],{"class":38,"line":61},[36,5379,5380],{"class":124},"\u002F\u002F看10进制数\n",[36,5382,5383,5385,5387,5389,5391,5393,5395,5398,5400,5402,5404],{"class":38,"line":80},[36,5384,2902],{"class":50},[36,5386,107],{"class":42},[36,5388,222],{"class":50},[36,5390,43],{"class":42},[36,5392,2096],{"class":50},[36,5394,763],{"class":42},[36,5396,5397],{"class":50},"arr[",[36,5399,1859],{"class":73},[36,5401,2607],{"class":50},[36,5403,107],{"class":42},[36,5405,2732],{"class":50},[19,5407,5408],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2674,5410,5411],{},[259,5412,5413],{},"1️⃣五只小猪称体重",[26,5415,5417],{"className":28,"code":5416,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[5]={300,350,200,400,250};\n    int tmp=0;\n    for (int i=0;i\u003C5;i++)\n    {\n        if(tmp\u003Carr[i])\n        {\n            tmp=arr[i];\n        }\n    }\n    cout\u003C\u003Ctmp\u003C\u003Cendl;\n    return 0;\n}\n",[33,5418,5419,5425,5435,5443,5447,5487,5500,5526,5530,5542,5546,5556,5560,5564,5577,5585],{"__ignoreMap":31},[36,5420,5421,5423],{"class":38,"line":39},[36,5422,3459],{"class":42},[36,5424,3462],{"class":110},[36,5426,5427,5429,5431,5433],{"class":38,"line":54},[36,5428,3467],{"class":42},[36,5430,3470],{"class":42},[36,5432,3473],{"class":46},[36,5434,77],{"class":50},[36,5436,5437,5439,5441],{"class":38,"line":61},[36,5438,43],{"class":42},[36,5440,47],{"class":46},[36,5442,3484],{"class":50},[36,5444,5445],{"class":38,"line":80},[36,5446,3076],{"class":50},[36,5448,5449,5451,5454,5456,5458,5460,5462,5465,5467,5470,5472,5474,5476,5479,5481,5484],{"class":38,"line":96},[36,5450,64],{"class":42},[36,5452,5453],{"class":50}," arr[",[36,5455,1987],{"class":73},[36,5457,2607],{"class":50},[36,5459,70],{"class":42},[36,5461,2563],{"class":50},[36,5463,5464],{"class":73},"300",[36,5466,2045],{"class":50},[36,5468,5469],{"class":73},"350",[36,5471,2045],{"class":50},[36,5473,3240],{"class":73},[36,5475,2045],{"class":50},[36,5477,5478],{"class":73},"400",[36,5480,2045],{"class":50},[36,5482,5483],{"class":73},"250",[36,5485,5486],{"class":50},"};\n",[36,5488,5489,5491,5494,5496,5498],{"class":38,"line":101},[36,5490,64],{"class":42},[36,5492,5493],{"class":50}," tmp",[36,5495,70],{"class":42},[36,5497,1859],{"class":73},[36,5499,77],{"class":50},[36,5501,5502,5504,5506,5508,5510,5512,5514,5516,5518,5520,5522,5524],{"class":38,"line":128},[36,5503,4692],{"class":42},[36,5505,3180],{"class":50},[36,5507,43],{"class":42},[36,5509,4523],{"class":50},[36,5511,70],{"class":42},[36,5513,1859],{"class":73},[36,5515,4530],{"class":50},[36,5517,2577],{"class":42},[36,5519,1987],{"class":73},[36,5521,4530],{"class":50},[36,5523,3798],{"class":42},[36,5525,1680],{"class":50},[36,5527,5528],{"class":38,"line":149},[36,5529,3537],{"class":50},[36,5531,5532,5534,5537,5539],{"class":38,"line":154},[36,5533,3999],{"class":42},[36,5535,5536],{"class":50},"(tmp",[36,5538,2577],{"class":42},[36,5540,5541],{"class":50},"arr[i])\n",[36,5543,5544],{"class":38,"line":167},[36,5545,4012],{"class":50},[36,5547,5548,5551,5553],{"class":38,"line":172},[36,5549,5550],{"class":50},"            tmp",[36,5552,70],{"class":42},[36,5554,5555],{"class":50},"arr[i];\n",[36,5557,5558],{"class":38,"line":192},[36,5559,4031],{"class":50},[36,5561,5562],{"class":38,"line":211},[36,5563,3693],{"class":50},[36,5565,5566,5568,5570,5573,5575],{"class":38,"line":216},[36,5567,3081],{"class":50},[36,5569,107],{"class":42},[36,5571,5572],{"class":50},"tmp",[36,5574,107],{"class":42},[36,5576,2732],{"class":50},[36,5578,5579,5581,5583],{"class":38,"line":231},[36,5580,239],{"class":42},[36,5582,242],{"class":73},[36,5584,77],{"class":50},[36,5586,5587],{"class":38,"line":236},[36,5588,250],{"class":50},[2674,5590,5591],{},[259,5592,5593],{},"2️⃣数组元素逆置",[26,5595,5597],{"className":28,"code":5596,"language":30,"meta":31,"style":31},"\u002F\u002F元素逆置\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n   int arr[5]={1,2,3,4,5};\n   int start=0;\u002F\u002F起始下标\n   int end=sizeof(arr)\u002Fsizeof(arr[0])-1;\u002F\u002F结束下标\n   while (start\u003Cend)\n   {\n    \u002F\u002F实现元素互换代码\n    int temp=arr[start];\n    arr[start]=arr[end];\n    arr[end]=temp;\n    \u002F\u002F下标更新\n    start++;\n    end--;\n   }\n   \u002F\u002F输出逆置后的数组\n   for (int i=0;i\u003C5;i++)\n   {\n    cout\u003C\u003Carr[i]\u003C\u003C\" \";\n   }\n   system(\"pause\");\n   return 0;\n}\n",[33,5598,5599,5604,5610,5620,5628,5632,5667,5683,5715,5728,5733,5738,5750,5760,5770,5775,5784,5794,5799,5804,5831,5835,5851,5855,5866,5875],{"__ignoreMap":31},[36,5600,5601],{"class":38,"line":39},[36,5602,5603],{"class":124},"\u002F\u002F元素逆置\n",[36,5605,5606,5608],{"class":38,"line":54},[36,5607,3459],{"class":42},[36,5609,3462],{"class":110},[36,5611,5612,5614,5616,5618],{"class":38,"line":61},[36,5613,3467],{"class":42},[36,5615,3470],{"class":42},[36,5617,3473],{"class":46},[36,5619,77],{"class":50},[36,5621,5622,5624,5626],{"class":38,"line":80},[36,5623,43],{"class":42},[36,5625,47],{"class":46},[36,5627,3484],{"class":50},[36,5629,5630],{"class":38,"line":96},[36,5631,3076],{"class":50},[36,5633,5634,5637,5639,5641,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665],{"class":38,"line":101},[36,5635,5636],{"class":42},"   int",[36,5638,5453],{"class":50},[36,5640,1987],{"class":73},[36,5642,2607],{"class":50},[36,5644,70],{"class":42},[36,5646,2563],{"class":50},[36,5648,1885],{"class":73},[36,5650,2045],{"class":50},[36,5652,1747],{"class":73},[36,5654,2045],{"class":50},[36,5656,1741],{"class":73},[36,5658,2045],{"class":50},[36,5660,1961],{"class":73},[36,5662,2045],{"class":50},[36,5664,1987],{"class":73},[36,5666,5486],{"class":50},[36,5668,5669,5671,5674,5676,5678,5680],{"class":38,"line":128},[36,5670,5636],{"class":42},[36,5672,5673],{"class":50}," start",[36,5675,70],{"class":42},[36,5677,1859],{"class":73},[36,5679,926],{"class":50},[36,5681,5682],{"class":124},"\u002F\u002F起始下标\n",[36,5684,5685,5687,5690,5693,5696,5699,5701,5703,5706,5708,5710,5712],{"class":38,"line":149},[36,5686,5636],{"class":42},[36,5688,5689],{"class":50}," end",[36,5691,5692],{"class":42},"=sizeof",[36,5694,5695],{"class":50},"(arr)",[36,5697,5698],{"class":42},"\u002Fsizeof",[36,5700,5342],{"class":50},[36,5702,1859],{"class":73},[36,5704,5705],{"class":50},"])",[36,5707,2199],{"class":42},[36,5709,1885],{"class":73},[36,5711,926],{"class":50},[36,5713,5714],{"class":124},"\u002F\u002F结束下标\n",[36,5716,5717,5720,5723,5725],{"class":38,"line":154},[36,5718,5719],{"class":42},"   while",[36,5721,5722],{"class":50}," (start",[36,5724,2577],{"class":42},[36,5726,5727],{"class":50},"end)\n",[36,5729,5730],{"class":38,"line":167},[36,5731,5732],{"class":50},"   {\n",[36,5734,5735],{"class":38,"line":172},[36,5736,5737],{"class":124},"    \u002F\u002F实现元素互换代码\n",[36,5739,5740,5742,5745,5747],{"class":38,"line":192},[36,5741,64],{"class":42},[36,5743,5744],{"class":50}," temp",[36,5746,70],{"class":42},[36,5748,5749],{"class":50},"arr[start];\n",[36,5751,5752,5755,5757],{"class":38,"line":211},[36,5753,5754],{"class":50},"    arr[start]",[36,5756,70],{"class":42},[36,5758,5759],{"class":50},"arr[end];\n",[36,5761,5762,5765,5767],{"class":38,"line":216},[36,5763,5764],{"class":50},"    arr[end]",[36,5766,70],{"class":42},[36,5768,5769],{"class":50},"temp;\n",[36,5771,5772],{"class":38,"line":231},[36,5773,5774],{"class":124},"    \u002F\u002F下标更新\n",[36,5776,5777,5780,5782],{"class":38,"line":236},[36,5778,5779],{"class":50},"    start",[36,5781,3798],{"class":42},[36,5783,77],{"class":50},[36,5785,5786,5789,5792],{"class":38,"line":247},[36,5787,5788],{"class":50},"    end",[36,5790,5791],{"class":42},"--",[36,5793,77],{"class":50},[36,5795,5796],{"class":38,"line":637},[36,5797,5798],{"class":50},"   }\n",[36,5800,5801],{"class":38,"line":646},[36,5802,5803],{"class":124},"   \u002F\u002F输出逆置后的数组\n",[36,5805,5806,5809,5811,5813,5815,5817,5819,5821,5823,5825,5827,5829],{"class":38,"line":655},[36,5807,5808],{"class":42},"   for",[36,5810,3180],{"class":50},[36,5812,43],{"class":42},[36,5814,4523],{"class":50},[36,5816,70],{"class":42},[36,5818,1859],{"class":73},[36,5820,4530],{"class":50},[36,5822,2577],{"class":42},[36,5824,1987],{"class":73},[36,5826,4530],{"class":50},[36,5828,3798],{"class":42},[36,5830,1680],{"class":50},[36,5832,5833],{"class":38,"line":660},[36,5834,5732],{"class":50},[36,5836,5837,5839,5841,5844,5846,5849],{"class":38,"line":665},[36,5838,3081],{"class":50},[36,5840,107],{"class":42},[36,5842,5843],{"class":50},"arr[i]",[36,5845,107],{"class":42},[36,5847,5848],{"class":110},"\" \"",[36,5850,77],{"class":50},[36,5852,5853],{"class":38,"line":674},[36,5854,5798],{"class":50},[36,5856,5857,5860,5862,5864],{"class":38,"line":679},[36,5858,5859],{"class":46},"   system",[36,5861,222],{"class":50},[36,5863,225],{"class":110},[36,5865,228],{"class":50},[36,5867,5868,5871,5873],{"class":38,"line":692},[36,5869,5870],{"class":42},"   return",[36,5872,242],{"class":73},[36,5874,77],{"class":50},[36,5876,5877],{"class":38,"line":705},[36,5878,250],{"class":50},[2674,5880,5881],{},[259,5882,5883],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,5885,5887],{"className":28,"code":5886,"language":30,"meta":31,"style":31},"\u002F\u002F冒泡排序,升序\n#include\u003Ciostream>\nusing namespace std;\nint main()\n{\n    int arr[9] = {4,2,8,0,5,7,1,3,9};\n    cout\u003C\u003C\"排序前：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    \u002F\u002F开始冒泡排序\n    \u002F\u002F总共排序轮数为 元素个数-1\n    for (int i=0;i\u003C9-1;i++)\n    {\n        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n        for (int j=0;j\u003C9-i-1;j++)\n        {\n            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n            if(arr[j]>arr[j+1])\n            {\n                int temp=arr[j];\n                arr[j]=arr[j+1];\n                arr[j+1]=temp;\n            }\n        }\n    }\n    cout\u003C\u003C\"排序后：\"\u003C\u003Cendl;\n    for (int i=0;i\u003C9;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003C\" \";\n    }\n    return 0;\n}\n",[33,5888,5889,5894,5900,5910,5918,5922,5974,5987,6013,6017,6031,6035,6040,6045,6075,6079,6084,6118,6122,6127,6147,6152,6164,6180,6195,6200,6204,6208,6221,6247,6251,6265,6269,6277],{"__ignoreMap":31},[36,5890,5891],{"class":38,"line":39},[36,5892,5893],{"class":124},"\u002F\u002F冒泡排序,升序\n",[36,5895,5896,5898],{"class":38,"line":54},[36,5897,3459],{"class":42},[36,5899,3462],{"class":110},[36,5901,5902,5904,5906,5908],{"class":38,"line":61},[36,5903,3467],{"class":42},[36,5905,3470],{"class":42},[36,5907,3473],{"class":46},[36,5909,77],{"class":50},[36,5911,5912,5914,5916],{"class":38,"line":80},[36,5913,43],{"class":42},[36,5915,47],{"class":46},[36,5917,3484],{"class":50},[36,5919,5920],{"class":38,"line":96},[36,5921,3076],{"class":50},[36,5923,5924,5926,5928,5930,5933,5935,5938,5940,5942,5944,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964,5966,5968,5970,5972],{"class":38,"line":101},[36,5925,64],{"class":42},[36,5927,5453],{"class":50},[36,5929,2087],{"class":73},[36,5931,5932],{"class":50},"] ",[36,5934,70],{"class":42},[36,5936,5937],{"class":50}," {",[36,5939,1961],{"class":73},[36,5941,2045],{"class":50},[36,5943,1747],{"class":73},[36,5945,2045],{"class":50},[36,5947,2062],{"class":73},[36,5949,2045],{"class":50},[36,5951,1859],{"class":73},[36,5953,2045],{"class":50},[36,5955,1987],{"class":73},[36,5957,2045],{"class":50},[36,5959,2036],{"class":73},[36,5961,2045],{"class":50},[36,5963,1885],{"class":73},[36,5965,2045],{"class":50},[36,5967,1741],{"class":73},[36,5969,2045],{"class":50},[36,5971,2087],{"class":73},[36,5973,5486],{"class":50},[36,5975,5976,5978,5980,5983,5985],{"class":38,"line":128},[36,5977,3081],{"class":50},[36,5979,107],{"class":42},[36,5981,5982],{"class":110},"\"排序前：\"",[36,5984,107],{"class":42},[36,5986,2732],{"class":50},[36,5988,5989,5991,5993,5995,5997,5999,6001,6003,6005,6007,6009,6011],{"class":38,"line":149},[36,5990,4692],{"class":42},[36,5992,3180],{"class":50},[36,5994,43],{"class":42},[36,5996,4523],{"class":50},[36,5998,70],{"class":42},[36,6000,1859],{"class":73},[36,6002,4530],{"class":50},[36,6004,2577],{"class":42},[36,6006,2087],{"class":73},[36,6008,4530],{"class":50},[36,6010,3798],{"class":42},[36,6012,1680],{"class":50},[36,6014,6015],{"class":38,"line":154},[36,6016,3537],{"class":50},[36,6018,6019,6021,6023,6025,6027,6029],{"class":38,"line":167},[36,6020,4942],{"class":50},[36,6022,107],{"class":42},[36,6024,5843],{"class":50},[36,6026,107],{"class":42},[36,6028,5848],{"class":110},[36,6030,77],{"class":50},[36,6032,6033],{"class":38,"line":172},[36,6034,3693],{"class":50},[36,6036,6037],{"class":38,"line":192},[36,6038,6039],{"class":124},"    \u002F\u002F开始冒泡排序\n",[36,6041,6042],{"class":38,"line":211},[36,6043,6044],{"class":124},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[36,6046,6047,6049,6051,6053,6055,6057,6059,6061,6063,6065,6067,6069,6071,6073],{"class":38,"line":216},[36,6048,4692],{"class":42},[36,6050,3180],{"class":50},[36,6052,43],{"class":42},[36,6054,4523],{"class":50},[36,6056,70],{"class":42},[36,6058,1859],{"class":73},[36,6060,4530],{"class":50},[36,6062,2577],{"class":42},[36,6064,2087],{"class":73},[36,6066,2199],{"class":42},[36,6068,1885],{"class":73},[36,6070,4530],{"class":50},[36,6072,3798],{"class":42},[36,6074,1680],{"class":50},[36,6076,6077],{"class":38,"line":231},[36,6078,3537],{"class":50},[36,6080,6081],{"class":38,"line":236},[36,6082,6083],{"class":124},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[36,6085,6086,6088,6090,6092,6094,6096,6098,6100,6102,6104,6106,6108,6110,6112,6114,6116],{"class":38,"line":247},[36,6087,4894],{"class":42},[36,6089,3180],{"class":50},[36,6091,43],{"class":42},[36,6093,4901],{"class":50},[36,6095,70],{"class":42},[36,6097,1859],{"class":73},[36,6099,4908],{"class":50},[36,6101,2577],{"class":42},[36,6103,2087],{"class":73},[36,6105,2199],{"class":42},[36,6107,2108],{"class":50},[36,6109,2199],{"class":42},[36,6111,1885],{"class":73},[36,6113,4908],{"class":50},[36,6115,3798],{"class":42},[36,6117,1680],{"class":50},[36,6119,6120],{"class":38,"line":637},[36,6121,4012],{"class":50},[36,6123,6124],{"class":38,"line":646},[36,6125,6126],{"class":124},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[36,6128,6129,6132,6135,6137,6140,6142,6144],{"class":38,"line":655},[36,6130,6131],{"class":42},"            if",[36,6133,6134],{"class":50},"(arr[j]",[36,6136,2627],{"class":42},[36,6138,6139],{"class":50},"arr[j",[36,6141,2148],{"class":42},[36,6143,1885],{"class":73},[36,6145,6146],{"class":50},"])\n",[36,6148,6149],{"class":38,"line":660},[36,6150,6151],{"class":50},"            {\n",[36,6153,6154,6157,6159,6161],{"class":38,"line":665},[36,6155,6156],{"class":42},"                int",[36,6158,5744],{"class":50},[36,6160,70],{"class":42},[36,6162,6163],{"class":50},"arr[j];\n",[36,6165,6166,6169,6171,6173,6175,6177],{"class":38,"line":674},[36,6167,6168],{"class":50},"                arr[j]",[36,6170,70],{"class":42},[36,6172,6139],{"class":50},[36,6174,2148],{"class":42},[36,6176,1885],{"class":73},[36,6178,6179],{"class":50},"];\n",[36,6181,6182,6185,6187,6189,6191,6193],{"class":38,"line":679},[36,6183,6184],{"class":50},"                arr[j",[36,6186,2148],{"class":42},[36,6188,1885],{"class":73},[36,6190,2607],{"class":50},[36,6192,70],{"class":42},[36,6194,5769],{"class":50},[36,6196,6197],{"class":38,"line":692},[36,6198,6199],{"class":50},"            }\n",[36,6201,6202],{"class":38,"line":705},[36,6203,4031],{"class":50},[36,6205,6206],{"class":38,"line":710},[36,6207,3693],{"class":50},[36,6209,6210,6212,6214,6217,6219],{"class":38,"line":722},[36,6211,3081],{"class":50},[36,6213,107],{"class":42},[36,6215,6216],{"class":110},"\"排序后：\"",[36,6218,107],{"class":42},[36,6220,2732],{"class":50},[36,6222,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241,6243,6245],{"class":38,"line":750},[36,6224,4692],{"class":42},[36,6226,3180],{"class":50},[36,6228,43],{"class":42},[36,6230,4523],{"class":50},[36,6232,70],{"class":42},[36,6234,1859],{"class":73},[36,6236,4530],{"class":50},[36,6238,2577],{"class":42},[36,6240,2087],{"class":73},[36,6242,4530],{"class":50},[36,6244,3798],{"class":42},[36,6246,1680],{"class":50},[36,6248,6249],{"class":38,"line":755},[36,6250,3537],{"class":50},[36,6252,6253,6255,6257,6259,6261,6263],{"class":38,"line":777},[36,6254,4942],{"class":50},[36,6256,107],{"class":42},[36,6258,5843],{"class":50},[36,6260,107],{"class":42},[36,6262,5848],{"class":110},[36,6264,77],{"class":50},[36,6266,6267],{"class":38,"line":802},[36,6268,3693],{"class":50},[36,6270,6271,6273,6275],{"class":38,"line":807},[36,6272,239],{"class":42},[36,6274,242],{"class":73},[36,6276,77],{"class":50},[36,6278,6279],{"class":38,"line":818},[36,6280,250],{"class":50},[1645,6282,6284],{"id":6283},"_172二维数组","1.7.2二维数组",[256,6286,6287],{},[259,6288,6289],{},"二维数组的四种定义方式",[1806,6291,6292,6301],{},[1809,6293,6294],{},[1812,6295,6296,6299],{},[1815,6297,6298],{},"序号",[1815,6300,5272],{},[1852,6302,6303,6313,6322,6331,6340],{},[1812,6304,6305,6307],{},[1857,6306,1885],{},[1857,6308,6309,6310,926],{},"数据类型 数组名[行数]",[36,6311,6312],{},"列数",[1812,6314,6315,6317],{},[1857,6316,1747],{},[1857,6318,6309,6319,6321],{},[36,6320,6312],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1812,6323,6324,6326],{},[1857,6325,1741],{},[1857,6327,6309,6328,6330],{},[36,6329,6312],{},"={数据1,数据2,数据3...}",[1812,6332,6333,6335],{},[1857,6334,1961],{},[1857,6336,6337,6338,6330],{},"数据类型 数组名[]",[36,6339,6312],{},[1812,6341,6342,6345],{},[1857,6343,6344],{},"注意：不能只省略列数",[1857,6346],{},[256,6348,6349],{"start":54},[259,6350,6351],{},"二维数组数组名",[2674,6353,6354,6357],{},[259,6355,6356],{},"1.查看二维数组所占内存空间",[259,6358,6359],{},"2.获取二维数组首地址",[19,6361,6362],{},"已知二维数组，求二维数组的行数与列数",[26,6364,6366],{"className":28,"code":6365,"language":30,"meta":31,"style":31},"int main()\n{\n    int arr[2][3]=\n    {\n        {1,2,3},\n        {4,5,6}\n    };\n    cout\u003C\u003C\"二维数组的行数\"\u003C\u003Csizeof(arr)\u002Fsizeof(arr[0])\u003C\u003Cendl;\n    cout\u003C\u003C\"二维数组的列数\"\u003C\u003Csizeof(arr[0])\u002Fsizeof(arr[0][0])\u003C\u003Cendl;\n}\n",[33,6367,6368,6376,6380,6398,6402,6420,6436,6441,6466,6499],{"__ignoreMap":31},[36,6369,6370,6372,6374],{"class":38,"line":39},[36,6371,43],{"class":42},[36,6373,47],{"class":46},[36,6375,3484],{"class":50},[36,6377,6378],{"class":38,"line":54},[36,6379,3076],{"class":50},[36,6381,6382,6384,6386,6388,6391,6393,6395],{"class":38,"line":61},[36,6383,64],{"class":42},[36,6385,5453],{"class":50},[36,6387,1747],{"class":73},[36,6389,6390],{"class":50},"][",[36,6392,1741],{"class":73},[36,6394,2607],{"class":50},[36,6396,6397],{"class":42},"=\n",[36,6399,6400],{"class":38,"line":80},[36,6401,3537],{"class":50},[36,6403,6404,6407,6409,6411,6413,6415,6417],{"class":38,"line":96},[36,6405,6406],{"class":50},"        {",[36,6408,1885],{"class":73},[36,6410,2045],{"class":50},[36,6412,1747],{"class":73},[36,6414,2045],{"class":50},[36,6416,1741],{"class":73},[36,6418,6419],{"class":50},"},\n",[36,6421,6422,6424,6426,6428,6430,6432,6434],{"class":38,"line":101},[36,6423,6406],{"class":50},[36,6425,1961],{"class":73},[36,6427,2045],{"class":50},[36,6429,1987],{"class":73},[36,6431,2045],{"class":50},[36,6433,2012],{"class":73},[36,6435,250],{"class":50},[36,6437,6438],{"class":38,"line":128},[36,6439,6440],{"class":50},"    };\n",[36,6442,6443,6445,6447,6450,6452,6454,6456,6458,6460,6462,6464],{"class":38,"line":149},[36,6444,3081],{"class":50},[36,6446,107],{"class":42},[36,6448,6449],{"class":110},"\"二维数组的行数\"",[36,6451,2905],{"class":42},[36,6453,5695],{"class":50},[36,6455,5698],{"class":42},[36,6457,5342],{"class":50},[36,6459,1859],{"class":73},[36,6461,5705],{"class":50},[36,6463,107],{"class":42},[36,6465,2732],{"class":50},[36,6467,6468,6470,6472,6475,6477,6479,6481,6483,6485,6487,6489,6491,6493,6495,6497],{"class":38,"line":154},[36,6469,3081],{"class":50},[36,6471,107],{"class":42},[36,6473,6474],{"class":110},"\"二维数组的列数\"",[36,6476,2905],{"class":42},[36,6478,5342],{"class":50},[36,6480,1859],{"class":73},[36,6482,5705],{"class":50},[36,6484,5698],{"class":42},[36,6486,5342],{"class":50},[36,6488,1859],{"class":73},[36,6490,6390],{"class":50},[36,6492,1859],{"class":73},[36,6494,5705],{"class":50},[36,6496,107],{"class":42},[36,6498,2732],{"class":50},[36,6500,6501],{"class":38,"line":167},[36,6502,250],{"class":50},[19,6504,6505],{},"查看二维数组首地址",[26,6507,6509],{"className":28,"code":6508,"language":30,"meta":31,"style":31},"cout\u003C\u003C\"二维数组首地址：\"\u003C\u003Carr\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一行的首地址：\"\u003C\u003C(int)arr[0]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第二行的首地址：\"\u003C\u003C(int)arr[1]\u003C\u003Cendl;\ncout\u003C\u003C\"二维数组第一个元素的首地址:\"\u003C\u003C(int)&arr[0][0]\u003C\u003Cendl;\u002F\u002F对于数，要加取址符\n",[33,6510,6511,6528,6554,6579],{"__ignoreMap":31},[36,6512,6513,6515,6517,6520,6522,6524,6526],{"class":38,"line":39},[36,6514,2902],{"class":50},[36,6516,107],{"class":42},[36,6518,6519],{"class":110},"\"二维数组首地址：\"",[36,6521,107],{"class":42},[36,6523,5371],{"class":50},[36,6525,107],{"class":42},[36,6527,2732],{"class":50},[36,6529,6530,6532,6534,6537,6539,6541,6543,6546,6548,6550,6552],{"class":38,"line":54},[36,6531,2902],{"class":50},[36,6533,107],{"class":42},[36,6535,6536],{"class":110},"\"二维数组第一行的首地址：\"",[36,6538,107],{"class":42},[36,6540,222],{"class":50},[36,6542,43],{"class":42},[36,6544,6545],{"class":50},")arr[",[36,6547,1859],{"class":73},[36,6549,2607],{"class":50},[36,6551,107],{"class":42},[36,6553,2732],{"class":50},[36,6555,6556,6558,6560,6563,6565,6567,6569,6571,6573,6575,6577],{"class":38,"line":61},[36,6557,2902],{"class":50},[36,6559,107],{"class":42},[36,6561,6562],{"class":110},"\"二维数组第二行的首地址：\"",[36,6564,107],{"class":42},[36,6566,222],{"class":50},[36,6568,43],{"class":42},[36,6570,6545],{"class":50},[36,6572,1885],{"class":73},[36,6574,2607],{"class":50},[36,6576,107],{"class":42},[36,6578,2732],{"class":50},[36,6580,6581,6583,6585,6588,6590,6592,6594,6596,6598,6600,6602,6604,6606,6608,6610,6612],{"class":38,"line":80},[36,6582,2902],{"class":50},[36,6584,107],{"class":42},[36,6586,6587],{"class":110},"\"二维数组第一个元素的首地址:\"",[36,6589,107],{"class":42},[36,6591,222],{"class":50},[36,6593,43],{"class":42},[36,6595,2096],{"class":50},[36,6597,763],{"class":42},[36,6599,5397],{"class":50},[36,6601,1859],{"class":73},[36,6603,6390],{"class":50},[36,6605,1859],{"class":73},[36,6607,2607],{"class":50},[36,6609,107],{"class":42},[36,6611,2775],{"class":50},[36,6613,6614],{"class":124},"\u002F\u002F对于数，要加取址符\n",[1592,6616,6617],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":31,"searchDepth":54,"depth":54,"links":6619},[6620,6621,6622,6630,6631,6637,6642],{"id":1620,"depth":54,"text":1621},{"id":1627,"depth":54,"text":1628},{"id":1642,"depth":54,"text":1643,"children":6623},[6624,6625,6626,6627,6628,6629],{"id":1647,"depth":61,"text":1648},{"id":1690,"depth":61,"text":1691},{"id":1755,"depth":61,"text":1756},{"id":2692,"depth":61,"text":2693},{"id":2781,"depth":61,"text":2782},{"id":2876,"depth":61,"text":2877},{"id":2918,"depth":54,"text":2919},{"id":2983,"depth":54,"text":2984,"children":6632},[6633,6634,6635,6636],{"id":2987,"depth":61,"text":2988},{"id":3009,"depth":61,"text":3010},{"id":3018,"depth":61,"text":3019},{"id":3027,"depth":61,"text":3028},{"id":3036,"depth":54,"text":3037,"children":6638},[6639,6640,6641],{"id":3040,"depth":61,"text":3041},{"id":3711,"depth":61,"text":3712},{"id":5112,"depth":61,"text":5113},{"id":5253,"depth":54,"text":5254,"children":6643},[6644,6645],{"id":5257,"depth":61,"text":5258},{"id":6283,"depth":61,"text":6284},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1612,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6652,"title":6653,"body":6654,"description":31,"extension":1603,"meta":7745,"navigation":57,"path":7746,"seo":7747,"stem":7748,"__hash__":7749},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6655,"toc":7737},[6656,6659,6663,6671,6679,6682,6747,6751,6754,6830,6834,6837,6840,6843,7055,7059,7064,7126,7131,7196,7201,7291,7294,7399,7403,7406,7412,7555,7559,7562,7576,7579,7624,7627,7734],[10,6657,6653],{"id":6658},"_2函数",[14,6660,6662],{"id":6661},"_21函数概述","2.1函数概述",[256,6664,6665,6668],{},[259,6666,6667],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[259,6669,6670],{},"语法：",[26,6672,6677],{"className":6673,"code":6675,"language":6676,"meta":31},[6674],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[33,6678,6675],{"__ignoreMap":31},[19,6680,6681],{},"小案例",[26,6683,6685],{"className":28,"code":6684,"language":30,"meta":31,"style":31},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[33,6686,6687,6692,6715,6719,6736,6743],{"__ignoreMap":31},[36,6688,6689],{"class":38,"line":39},[36,6690,6691],{"class":124},"\u002F\u002Fnum1,num2形参\n",[36,6693,6694,6696,6699,6701,6703,6706,6708,6710,6713],{"class":38,"line":54},[36,6695,43],{"class":42},[36,6697,6698],{"class":46}," add",[36,6700,222],{"class":50},[36,6702,43],{"class":42},[36,6704,6705],{"class":473}," num1",[36,6707,2045],{"class":50},[36,6709,43],{"class":42},[36,6711,6712],{"class":473}," num2",[36,6714,1680],{"class":50},[36,6716,6717],{"class":38,"line":61},[36,6718,3076],{"class":50},[36,6720,6721,6723,6726,6728,6731,6733],{"class":38,"line":80},[36,6722,64],{"class":42},[36,6724,6725],{"class":50}," sum",[36,6727,70],{"class":42},[36,6729,6730],{"class":50},"num1",[36,6732,2148],{"class":42},[36,6734,6735],{"class":50},"num2;\n",[36,6737,6738,6740],{"class":38,"line":96},[36,6739,239],{"class":42},[36,6741,6742],{"class":50}," sum;\n",[36,6744,6745],{"class":38,"line":101},[36,6746,250],{"class":50},[14,6748,6750],{"id":6749},"_22函数调用","2.2函数调用",[19,6752,6753],{},"调用刚刚写的求和函数",[26,6755,6757],{"className":28,"code":6756,"language":30,"meta":31,"style":31},"int main()\n{\n    \u002F\u002Fa,b实参\n    int a=0;\n    int b=0;\n    cin>>a,b;\n    \u002F\u002F调用函数时，实参值传给了形参\n    cout\u003C\u003Cadd(a,b);\n}\n",[33,6758,6759,6767,6771,6776,6788,6800,6809,6814,6826],{"__ignoreMap":31},[36,6760,6761,6763,6765],{"class":38,"line":39},[36,6762,43],{"class":42},[36,6764,47],{"class":46},[36,6766,3484],{"class":50},[36,6768,6769],{"class":38,"line":54},[36,6770,3076],{"class":50},[36,6772,6773],{"class":38,"line":61},[36,6774,6775],{"class":124},"    \u002F\u002Fa,b实参\n",[36,6777,6778,6780,6782,6784,6786],{"class":38,"line":80},[36,6779,64],{"class":42},[36,6781,474],{"class":50},[36,6783,70],{"class":42},[36,6785,1859],{"class":73},[36,6787,77],{"class":50},[36,6789,6790,6792,6794,6796,6798],{"class":38,"line":96},[36,6791,64],{"class":42},[36,6793,482],{"class":50},[36,6795,70],{"class":42},[36,6797,1859],{"class":73},[36,6799,77],{"class":50},[36,6801,6802,6804,6806],{"class":38,"line":101},[36,6803,3519],{"class":50},[36,6805,2961],{"class":42},[36,6807,6808],{"class":50},"a,b;\n",[36,6810,6811],{"class":38,"line":128},[36,6812,6813],{"class":124},"    \u002F\u002F调用函数时，实参值传给了形参\n",[36,6815,6816,6818,6820,6823],{"class":38,"line":149},[36,6817,3081],{"class":50},[36,6819,107],{"class":42},[36,6821,6822],{"class":46},"add",[36,6824,6825],{"class":50},"(a,b);\n",[36,6827,6828],{"class":38,"line":154},[36,6829,250],{"class":50},[14,6831,6833],{"id":6832},"_23值传递","2.3值传递",[19,6835,6836],{},"值传递就是函数调用时实参将数值传给形参",[19,6838,6839],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6841,6842],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,6844,6846],{"className":28,"code":6845,"language":30,"meta":31,"style":31},"void swap(int num1,int num2)\n{\n    cout\u003C\u003C\"交换前：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    int temp=num1;\n    num1=num2;\n    num2=temp;\n    cout\u003C\u003C\"交换后：\"\u003C\u003Cendl;\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl;\n    cout\u003C\u003C\"num2=\"\u003C\u003Cnum2\u003C\u003Cendl;\n    return;\u002F\u002F或者不写\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    swap(a,b);\n}\n",[33,6847,6848,6869,6873,6886,6903,6921,6932,6941,6950,6963,6979,6995,7004,7008,7016,7020,7032,7044,7051],{"__ignoreMap":31},[36,6849,6850,6852,6855,6857,6859,6861,6863,6865,6867],{"class":38,"line":39},[36,6851,463],{"class":42},[36,6853,6854],{"class":46}," swap",[36,6856,222],{"class":50},[36,6858,43],{"class":42},[36,6860,6705],{"class":473},[36,6862,2045],{"class":50},[36,6864,43],{"class":42},[36,6866,6712],{"class":473},[36,6868,1680],{"class":50},[36,6870,6871],{"class":38,"line":54},[36,6872,3076],{"class":50},[36,6874,6875,6877,6879,6882,6884],{"class":38,"line":61},[36,6876,3081],{"class":50},[36,6878,107],{"class":42},[36,6880,6881],{"class":110},"\"交换前：\"",[36,6883,107],{"class":42},[36,6885,2732],{"class":50},[36,6887,6888,6890,6892,6895,6897,6899,6901],{"class":38,"line":80},[36,6889,3081],{"class":50},[36,6891,107],{"class":42},[36,6893,6894],{"class":110},"\"num1=\"",[36,6896,107],{"class":42},[36,6898,6730],{"class":50},[36,6900,107],{"class":42},[36,6902,2732],{"class":50},[36,6904,6905,6907,6909,6912,6914,6917,6919],{"class":38,"line":96},[36,6906,3081],{"class":50},[36,6908,107],{"class":42},[36,6910,6911],{"class":110},"\"num2=\"",[36,6913,107],{"class":42},[36,6915,6916],{"class":50},"num2",[36,6918,107],{"class":42},[36,6920,2732],{"class":50},[36,6922,6923,6925,6927,6929],{"class":38,"line":101},[36,6924,64],{"class":42},[36,6926,5744],{"class":50},[36,6928,70],{"class":42},[36,6930,6931],{"class":50},"num1;\n",[36,6933,6934,6937,6939],{"class":38,"line":128},[36,6935,6936],{"class":50},"    num1",[36,6938,70],{"class":42},[36,6940,6735],{"class":50},[36,6942,6943,6946,6948],{"class":38,"line":149},[36,6944,6945],{"class":50},"    num2",[36,6947,70],{"class":42},[36,6949,5769],{"class":50},[36,6951,6952,6954,6956,6959,6961],{"class":38,"line":154},[36,6953,3081],{"class":50},[36,6955,107],{"class":42},[36,6957,6958],{"class":110},"\"交换后：\"",[36,6960,107],{"class":42},[36,6962,2732],{"class":50},[36,6964,6965,6967,6969,6971,6973,6975,6977],{"class":38,"line":167},[36,6966,3081],{"class":50},[36,6968,107],{"class":42},[36,6970,6894],{"class":110},[36,6972,107],{"class":42},[36,6974,6730],{"class":50},[36,6976,107],{"class":42},[36,6978,2732],{"class":50},[36,6980,6981,6983,6985,6987,6989,6991,6993],{"class":38,"line":172},[36,6982,3081],{"class":50},[36,6984,107],{"class":42},[36,6986,6911],{"class":110},[36,6988,107],{"class":42},[36,6990,6916],{"class":50},[36,6992,107],{"class":42},[36,6994,2732],{"class":50},[36,6996,6997,6999,7001],{"class":38,"line":192},[36,6998,239],{"class":42},[36,7000,926],{"class":50},[36,7002,7003],{"class":124},"\u002F\u002F或者不写\n",[36,7005,7006],{"class":38,"line":211},[36,7007,250],{"class":50},[36,7009,7010,7012,7014],{"class":38,"line":216},[36,7011,43],{"class":42},[36,7013,47],{"class":46},[36,7015,3484],{"class":50},[36,7017,7018],{"class":38,"line":231},[36,7019,3076],{"class":50},[36,7021,7022,7024,7026,7028,7030],{"class":38,"line":236},[36,7023,64],{"class":42},[36,7025,474],{"class":50},[36,7027,70],{"class":42},[36,7029,2113],{"class":73},[36,7031,77],{"class":50},[36,7033,7034,7036,7038,7040,7042],{"class":38,"line":247},[36,7035,64],{"class":42},[36,7037,482],{"class":50},[36,7039,70],{"class":42},[36,7041,2367],{"class":73},[36,7043,77],{"class":50},[36,7045,7046,7049],{"class":38,"line":637},[36,7047,7048],{"class":46},"    swap",[36,7050,6825],{"class":50},[36,7052,7053],{"class":38,"line":646},[36,7054,250],{"class":50},[14,7056,7058],{"id":7057},"_24函数的常见形式","2.4函数的常见形式",[256,7060,7061],{},[259,7062,7063],{},"无参无返",[26,7065,7067],{"className":28,"code":7066,"language":30,"meta":31,"style":31},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[33,7068,7069,7077,7081,7094,7098,7106,7110,7115,7122],{"__ignoreMap":31},[36,7070,7071,7073,7075],{"class":38,"line":39},[36,7072,463],{"class":42},[36,7074,911],{"class":46},[36,7076,3484],{"class":50},[36,7078,7079],{"class":38,"line":54},[36,7080,3076],{"class":50},[36,7082,7083,7085,7087,7090,7092],{"class":38,"line":61},[36,7084,3081],{"class":50},[36,7086,107],{"class":42},[36,7088,7089],{"class":110},"\"你好\"",[36,7091,107],{"class":42},[36,7093,2732],{"class":50},[36,7095,7096],{"class":38,"line":80},[36,7097,250],{"class":50},[36,7099,7100,7102,7104],{"class":38,"line":96},[36,7101,43],{"class":42},[36,7103,47],{"class":46},[36,7105,3484],{"class":50},[36,7107,7108],{"class":38,"line":101},[36,7109,3076],{"class":50},[36,7111,7112],{"class":38,"line":128},[36,7113,7114],{"class":124},"    \u002F\u002F函数调用\n",[36,7116,7117,7120],{"class":38,"line":149},[36,7118,7119],{"class":46},"    test01",[36,7121,1022],{"class":50},[36,7123,7124],{"class":38,"line":154},[36,7125,250],{"class":50},[256,7127,7128],{"start":54},[259,7129,7130],{},"有参无返",[26,7132,7134],{"className":28,"code":7133,"language":30,"meta":31,"style":31},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[33,7135,7136,7150,7154,7166,7170,7178,7182,7192],{"__ignoreMap":31},[36,7137,7138,7140,7142,7144,7146,7148],{"class":38,"line":39},[36,7139,463],{"class":42},[36,7141,955],{"class":46},[36,7143,222],{"class":50},[36,7145,43],{"class":42},[36,7147,474],{"class":473},[36,7149,1680],{"class":50},[36,7151,7152],{"class":38,"line":54},[36,7153,3076],{"class":50},[36,7155,7156,7158,7160,7162,7164],{"class":38,"line":61},[36,7157,3081],{"class":50},[36,7159,107],{"class":42},[36,7161,7089],{"class":110},[36,7163,107],{"class":42},[36,7165,2732],{"class":50},[36,7167,7168],{"class":38,"line":80},[36,7169,250],{"class":50},[36,7171,7172,7174,7176],{"class":38,"line":96},[36,7173,43],{"class":42},[36,7175,47],{"class":46},[36,7177,3484],{"class":50},[36,7179,7180],{"class":38,"line":101},[36,7181,3076],{"class":50},[36,7183,7184,7186,7188,7190],{"class":38,"line":128},[36,7185,1130],{"class":46},[36,7187,222],{"class":50},[36,7189,1979],{"class":73},[36,7191,228],{"class":50},[36,7193,7194],{"class":38,"line":149},[36,7195,250],{"class":50},[256,7197,7198],{"start":61},[259,7199,7200],{},"无参有返",[26,7202,7204],{"className":28,"code":7203,"language":30,"meta":31,"style":31},"int test03()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n    return 100;\n}\nint main()\n{\n    int num1=test03();\n    cout\u003C\u003C\"num1=\"\u003C\u003Cnum1\u003C\u003Cendl; \u002F\u002F100\n}\n",[33,7205,7206,7215,7219,7231,7239,7243,7251,7255,7268,7287],{"__ignoreMap":31},[36,7207,7208,7210,7213],{"class":38,"line":39},[36,7209,43],{"class":42},[36,7211,7212],{"class":46}," test03",[36,7214,3484],{"class":50},[36,7216,7217],{"class":38,"line":54},[36,7218,3076],{"class":50},[36,7220,7221,7223,7225,7227,7229],{"class":38,"line":61},[36,7222,3081],{"class":50},[36,7224,107],{"class":42},[36,7226,7089],{"class":110},[36,7228,107],{"class":42},[36,7230,2732],{"class":50},[36,7232,7233,7235,7237],{"class":38,"line":80},[36,7234,239],{"class":42},[36,7236,162],{"class":73},[36,7238,77],{"class":50},[36,7240,7241],{"class":38,"line":96},[36,7242,250],{"class":50},[36,7244,7245,7247,7249],{"class":38,"line":101},[36,7246,43],{"class":42},[36,7248,47],{"class":46},[36,7250,3484],{"class":50},[36,7252,7253],{"class":38,"line":128},[36,7254,3076],{"class":50},[36,7256,7257,7259,7261,7263,7266],{"class":38,"line":149},[36,7258,64],{"class":42},[36,7260,6705],{"class":50},[36,7262,70],{"class":42},[36,7264,7265],{"class":46},"test03",[36,7267,1022],{"class":50},[36,7269,7270,7272,7274,7276,7278,7280,7282,7284],{"class":38,"line":154},[36,7271,3081],{"class":50},[36,7273,107],{"class":42},[36,7275,6894],{"class":110},[36,7277,107],{"class":42},[36,7279,6730],{"class":50},[36,7281,107],{"class":42},[36,7283,2775],{"class":50},[36,7285,7286],{"class":124}," \u002F\u002F100\n",[36,7288,7289],{"class":38,"line":167},[36,7290,250],{"class":50},[19,7292,7293],{},"4.有参有返",[26,7295,7297],{"className":28,"code":7296,"language":30,"meta":31,"style":31},"int test04(int a)\n{\n    cout\u003C\u003C\"hello\"\u003C\u003Cendl;\n    return a;\n}\nint mian()\n{\n    int b=1;\n    int c=test04(b);\n    cout\u003C\u003Cc\u003C\u003Cendl; \u002F\u002F1\n}\n",[33,7298,7299,7314,7318,7331,7337,7341,7350,7354,7366,7380,7395],{"__ignoreMap":31},[36,7300,7301,7303,7306,7308,7310,7312],{"class":38,"line":39},[36,7302,43],{"class":42},[36,7304,7305],{"class":46}," test04",[36,7307,222],{"class":50},[36,7309,43],{"class":42},[36,7311,474],{"class":473},[36,7313,1680],{"class":50},[36,7315,7316],{"class":38,"line":54},[36,7317,3076],{"class":50},[36,7319,7320,7322,7324,7327,7329],{"class":38,"line":61},[36,7321,3081],{"class":50},[36,7323,107],{"class":42},[36,7325,7326],{"class":110},"\"hello\"",[36,7328,107],{"class":42},[36,7330,2732],{"class":50},[36,7332,7333,7335],{"class":38,"line":80},[36,7334,239],{"class":42},[36,7336,93],{"class":50},[36,7338,7339],{"class":38,"line":96},[36,7340,250],{"class":50},[36,7342,7343,7345,7348],{"class":38,"line":101},[36,7344,43],{"class":42},[36,7346,7347],{"class":46}," mian",[36,7349,3484],{"class":50},[36,7351,7352],{"class":38,"line":128},[36,7353,3076],{"class":50},[36,7355,7356,7358,7360,7362,7364],{"class":38,"line":149},[36,7357,64],{"class":42},[36,7359,482],{"class":50},[36,7361,70],{"class":42},[36,7363,1885],{"class":73},[36,7365,77],{"class":50},[36,7367,7368,7370,7372,7374,7377],{"class":38,"line":154},[36,7369,64],{"class":42},[36,7371,4342],{"class":50},[36,7373,70],{"class":42},[36,7375,7376],{"class":46},"test04",[36,7378,7379],{"class":50},"(b);\n",[36,7381,7382,7384,7386,7388,7390,7392],{"class":38,"line":167},[36,7383,3081],{"class":50},[36,7385,107],{"class":42},[36,7387,1956],{"class":50},[36,7389,107],{"class":42},[36,7391,2775],{"class":50},[36,7393,7394],{"class":124}," \u002F\u002F1\n",[36,7396,7397],{"class":38,"line":172},[36,7398,250],{"class":50},[14,7400,7402],{"id":7401},"_25函数的声明","2.5函数的声明",[19,7404,7405],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7407,7408,7409],{},"函数的",[887,7410,7411],{},"声明可以多次，但是函数的定义只能有一次",[26,7413,7415],{"className":28,"code":7414,"language":30,"meta":31,"style":31},"\u002F\u002F函数声明\n\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\nint max(int a,int b);\u002F\u002F这样函数就可以写在后面，不报错了\nint main() \n{\n    int a=10;\n    int b=20;\n    cout\u003C\u003Cmax(a,b)\u003C\u003Cendl;\n}\nint max(int a,int b)\n{\n    return a>b?a:b;\n}\n",[33,7416,7417,7422,7427,7452,7461,7465,7477,7489,7505,7509,7529,7533,7551],{"__ignoreMap":31},[36,7418,7419],{"class":38,"line":39},[36,7420,7421],{"class":124},"\u002F\u002F函数声明\n",[36,7423,7424],{"class":38,"line":54},[36,7425,7426],{"class":124},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[36,7428,7429,7431,7434,7436,7438,7440,7442,7444,7446,7449],{"class":38,"line":61},[36,7430,43],{"class":42},[36,7432,7433],{"class":46}," max",[36,7435,222],{"class":50},[36,7437,43],{"class":42},[36,7439,474],{"class":473},[36,7441,2045],{"class":50},[36,7443,43],{"class":42},[36,7445,482],{"class":473},[36,7447,7448],{"class":50},");",[36,7450,7451],{"class":124},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[36,7453,7454,7456,7458],{"class":38,"line":80},[36,7455,43],{"class":42},[36,7457,47],{"class":46},[36,7459,7460],{"class":50},"() \n",[36,7462,7463],{"class":38,"line":96},[36,7464,3076],{"class":50},[36,7466,7467,7469,7471,7473,7475],{"class":38,"line":101},[36,7468,64],{"class":42},[36,7470,474],{"class":50},[36,7472,70],{"class":42},[36,7474,2113],{"class":73},[36,7476,77],{"class":50},[36,7478,7479,7481,7483,7485,7487],{"class":38,"line":128},[36,7480,64],{"class":42},[36,7482,482],{"class":50},[36,7484,70],{"class":42},[36,7486,2367],{"class":73},[36,7488,77],{"class":50},[36,7490,7491,7493,7495,7498,7501,7503],{"class":38,"line":149},[36,7492,3081],{"class":50},[36,7494,107],{"class":42},[36,7496,7497],{"class":46},"max",[36,7499,7500],{"class":50},"(a,b)",[36,7502,107],{"class":42},[36,7504,2732],{"class":50},[36,7506,7507],{"class":38,"line":154},[36,7508,250],{"class":50},[36,7510,7511,7513,7515,7517,7519,7521,7523,7525,7527],{"class":38,"line":167},[36,7512,43],{"class":42},[36,7514,7433],{"class":46},[36,7516,222],{"class":50},[36,7518,43],{"class":42},[36,7520,474],{"class":473},[36,7522,2045],{"class":50},[36,7524,43],{"class":42},[36,7526,482],{"class":473},[36,7528,1680],{"class":50},[36,7530,7531],{"class":38,"line":172},[36,7532,3076],{"class":50},[36,7534,7535,7537,7539,7541,7543,7545,7547,7549],{"class":38,"line":192},[36,7536,239],{"class":42},[36,7538,474],{"class":50},[36,7540,2627],{"class":42},[36,7542,1931],{"class":50},[36,7544,2653],{"class":42},[36,7546,1906],{"class":50},[36,7548,2526],{"class":42},[36,7550,579],{"class":50},[36,7552,7553],{"class":38,"line":211},[36,7554,250],{"class":50},[14,7556,7558],{"id":7557},"_26函数的分文件编写","2.6函数的分文件编写",[19,7560,7561],{},"4个步骤：",[2674,7563,7564,7567,7570,7573],{},[259,7565,7566],{},"1.创建后缀名为.h的头文件",[259,7568,7569],{},"2.创建后缀名为.cpp的源文件",[259,7571,7572],{},"3.在头文件中写函数的定义",[259,7574,7575],{},"4.在源文件中写函数的定义\n示例：",[19,7577,7578],{},"头文件：swap.h",[26,7580,7582],{"className":28,"code":7581,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[33,7583,7584,7590,7600,7604],{"__ignoreMap":31},[36,7585,7586,7588],{"class":38,"line":39},[36,7587,3459],{"class":42},[36,7589,3462],{"class":110},[36,7591,7592,7594,7596,7598],{"class":38,"line":54},[36,7593,3467],{"class":42},[36,7595,3470],{"class":42},[36,7597,3473],{"class":46},[36,7599,77],{"class":50},[36,7601,7602],{"class":38,"line":61},[36,7603,7421],{"class":124},[36,7605,7606,7608,7610,7612,7614,7616,7618,7620,7622],{"class":38,"line":80},[36,7607,463],{"class":42},[36,7609,6854],{"class":46},[36,7611,222],{"class":50},[36,7613,43],{"class":42},[36,7615,474],{"class":473},[36,7617,2045],{"class":50},[36,7619,43],{"class":42},[36,7621,482],{"class":473},[36,7623,228],{"class":50},[19,7625,7626],{},"源文件：swap.cpp",[26,7628,7630],{"className":28,"code":7629,"language":30,"meta":31,"style":31},"#include \"swap.h\"\n\u002F\u002F函数的定义\nvoid swap(int a,int b)\n{\n    int temp=a;\n    a=b;\n    b=temp;\n    cout\u003C\u003C\"a=\"\u003C\u003Ca\u003C\u003Cendl;\n    cout\u003C\u003C\"b=\"\u003C\u003Cb\u003C\u003Cendl;\n}\n",[33,7631,7632,7639,7644,7664,7668,7678,7687,7696,7713,7730],{"__ignoreMap":31},[36,7633,7634,7636],{"class":38,"line":39},[36,7635,3459],{"class":42},[36,7637,7638],{"class":110}," \"swap.h\"\n",[36,7640,7641],{"class":38,"line":54},[36,7642,7643],{"class":124},"\u002F\u002F函数的定义\n",[36,7645,7646,7648,7650,7652,7654,7656,7658,7660,7662],{"class":38,"line":61},[36,7647,463],{"class":42},[36,7649,6854],{"class":46},[36,7651,222],{"class":50},[36,7653,43],{"class":42},[36,7655,474],{"class":473},[36,7657,2045],{"class":50},[36,7659,43],{"class":42},[36,7661,482],{"class":473},[36,7663,1680],{"class":50},[36,7665,7666],{"class":38,"line":80},[36,7667,3076],{"class":50},[36,7669,7670,7672,7674,7676],{"class":38,"line":96},[36,7671,64],{"class":42},[36,7673,5744],{"class":50},[36,7675,70],{"class":42},[36,7677,564],{"class":50},[36,7679,7680,7683,7685],{"class":38,"line":101},[36,7681,7682],{"class":50},"    a",[36,7684,70],{"class":42},[36,7686,579],{"class":50},[36,7688,7689,7692,7694],{"class":38,"line":128},[36,7690,7691],{"class":50},"    b",[36,7693,70],{"class":42},[36,7695,5769],{"class":50},[36,7697,7698,7700,7702,7705,7707,7709,7711],{"class":38,"line":149},[36,7699,3081],{"class":50},[36,7701,107],{"class":42},[36,7703,7704],{"class":110},"\"a=\"",[36,7706,107],{"class":42},[36,7708,1906],{"class":50},[36,7710,107],{"class":42},[36,7712,2732],{"class":50},[36,7714,7715,7717,7719,7722,7724,7726,7728],{"class":38,"line":154},[36,7716,3081],{"class":50},[36,7718,107],{"class":42},[36,7720,7721],{"class":110},"\"b=\"",[36,7723,107],{"class":42},[36,7725,1931],{"class":50},[36,7727,107],{"class":42},[36,7729,2732],{"class":50},[36,7731,7732],{"class":38,"line":167},[36,7733,250],{"class":50},[1592,7735,7736],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":7738},[7739,7740,7741,7742,7743,7744],{"id":6661,"depth":54,"text":6662},{"id":6749,"depth":54,"text":6750},{"id":6832,"depth":54,"text":6833},{"id":7057,"depth":54,"text":7058},{"id":7401,"depth":54,"text":7402},{"id":7557,"depth":54,"text":7558},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6653,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7751,"title":7752,"body":7753,"description":7760,"extension":1603,"meta":9159,"navigation":57,"path":9160,"seo":9161,"stem":9162,"__hash__":9163},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7754,"toc":9149},[7755,7758,7761,7765,7926,7930,7933,7936,7939,7942,8080,8084,8087,8090,8093,8158,8162,8167,8234,8237,8241,8244,8255,8260,8279,8282,8287,8306,8309,8313,8332,8335,8339,8574,8578,8581,8584,8587,8747,8750,8754,8757,8763,9146],[10,7756,7752],{"id":7757},"_3指针",[19,7759,7760],{},"通过指针保存一个地址，指针就是个地址",[14,7762,7764],{"id":7763},"_31定义指针","3.1定义指针",[26,7766,7768],{"className":28,"code":7767,"language":30,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.定义指针\n    int a=10;\n    \u002F\u002F指针定义语法：数据类型*指针变量名;\n    int*p;\n    p=&a;\n    cout\u003C\u003C\"a的地址为：\"\u003C\u003C&a\u003C\u003Cendl;\n    cout\u003C\u003C\"指针p为：\"\u003C\u003Cp\u003C\u003Cendl;\u002F\u002F指针p表示的就是a的地址\n\n    \u002F\u002F2.使用指针\n    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n    *p=1000;\n    cout\u003C\u003C*p\u003C\u003Cendl;\u002F\u002F1000\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F1000\n}\n",[33,7769,7770,7778,7782,7787,7799,7804,7812,7822,7840,7860,7864,7869,7874,7879,7892,7908,7922],{"__ignoreMap":31},[36,7771,7772,7774,7776],{"class":38,"line":39},[36,7773,43],{"class":42},[36,7775,47],{"class":46},[36,7777,3484],{"class":50},[36,7779,7780],{"class":38,"line":54},[36,7781,3076],{"class":50},[36,7783,7784],{"class":38,"line":61},[36,7785,7786],{"class":124},"    \u002F\u002F1.定义指针\n",[36,7788,7789,7791,7793,7795,7797],{"class":38,"line":80},[36,7790,64],{"class":42},[36,7792,474],{"class":50},[36,7794,70],{"class":42},[36,7796,2113],{"class":73},[36,7798,77],{"class":50},[36,7800,7801],{"class":38,"line":96},[36,7802,7803],{"class":124},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[36,7805,7806,7809],{"class":38,"line":101},[36,7807,7808],{"class":42},"    int*",[36,7810,7811],{"class":50},"p;\n",[36,7813,7814,7817,7820],{"class":38,"line":128},[36,7815,7816],{"class":50},"    p",[36,7818,7819],{"class":42},"=&",[36,7821,564],{"class":50},[36,7823,7824,7826,7828,7831,7834,7836,7838],{"class":38,"line":149},[36,7825,3081],{"class":50},[36,7827,107],{"class":42},[36,7829,7830],{"class":110},"\"a的地址为：\"",[36,7832,7833],{"class":42},"\u003C\u003C&",[36,7835,1906],{"class":50},[36,7837,107],{"class":42},[36,7839,2732],{"class":50},[36,7841,7842,7844,7846,7849,7851,7853,7855,7857],{"class":38,"line":154},[36,7843,3081],{"class":50},[36,7845,107],{"class":42},[36,7847,7848],{"class":110},"\"指针p为：\"",[36,7850,107],{"class":42},[36,7852,19],{"class":50},[36,7854,107],{"class":42},[36,7856,2775],{"class":50},[36,7858,7859],{"class":124},"\u002F\u002F指针p表示的就是a的地址\n",[36,7861,7862],{"class":38,"line":167},[36,7863,58],{"emptyLinePlaceholder":57},[36,7865,7866],{"class":38,"line":172},[36,7867,7868],{"class":124},"    \u002F\u002F2.使用指针\n",[36,7870,7871],{"class":38,"line":192},[36,7872,7873],{"class":124},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[36,7875,7876],{"class":38,"line":211},[36,7877,7878],{"class":124},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[36,7880,7881,7883,7885,7887,7890],{"class":38,"line":216},[36,7882,569],{"class":42},[36,7884,19],{"class":50},[36,7886,70],{"class":42},[36,7888,7889],{"class":73},"1000",[36,7891,77],{"class":50},[36,7893,7894,7896,7899,7901,7903,7905],{"class":38,"line":231},[36,7895,3081],{"class":50},[36,7897,7898],{"class":42},"\u003C\u003C*",[36,7900,19],{"class":50},[36,7902,107],{"class":42},[36,7904,2775],{"class":50},[36,7906,7907],{"class":124},"\u002F\u002F1000\n",[36,7909,7910,7912,7914,7916,7918,7920],{"class":38,"line":236},[36,7911,3081],{"class":50},[36,7913,107],{"class":42},[36,7915,1906],{"class":50},[36,7917,107],{"class":42},[36,7919,2775],{"class":50},[36,7921,7907],{"class":124},[36,7923,7924],{"class":38,"line":247},[36,7925,250],{"class":50},[14,7927,7929],{"id":7928},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7931,7932],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7934,7935],{},"在32位操作系统下：占用4个字节空间",[19,7937,7938],{},"在64位操作系统下：占用8个字节空间",[19,7940,7941],{},"上方是不管啥数据类型的",[26,7943,7945],{"className":28,"code":7944,"language":30,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F指针所占内存空间\n    int a=10;\n    \u002F\u002Fint *p;\n    \u002F\u002Fp=&a;\n    \u002F\u002F上述可以写为以下：\n    int *p=&a;\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(p)\u003C\u003Cendl;\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n    cout \u003C\u003C\"sizeof(int *)\"\u003C\u003Csizeof(int *)\u003C\u003Cendl  \u002F\u002F4字节(32位的话)\n    cout \u003C\u003C\"sizeof(char *)\"\u003C\u003Csizeof(char *)\u003C\u003Cendl; \u002F\u002F4字节(32位的话)\n}\n",[33,7946,7947,7955,7959,7964,7976,7981,7986,7991,8003,8024,8050,8076],{"__ignoreMap":31},[36,7948,7949,7951,7953],{"class":38,"line":39},[36,7950,43],{"class":42},[36,7952,47],{"class":46},[36,7954,3484],{"class":50},[36,7956,7957],{"class":38,"line":54},[36,7958,3076],{"class":50},[36,7960,7961],{"class":38,"line":61},[36,7962,7963],{"class":124},"    \u002F\u002F指针所占内存空间\n",[36,7965,7966,7968,7970,7972,7974],{"class":38,"line":80},[36,7967,64],{"class":42},[36,7969,474],{"class":50},[36,7971,70],{"class":42},[36,7973,2113],{"class":73},[36,7975,77],{"class":50},[36,7977,7978],{"class":38,"line":96},[36,7979,7980],{"class":124},"    \u002F\u002Fint *p;\n",[36,7982,7983],{"class":38,"line":101},[36,7984,7985],{"class":124},"    \u002F\u002Fp=&a;\n",[36,7987,7988],{"class":38,"line":128},[36,7989,7990],{"class":124},"    \u002F\u002F上述可以写为以下：\n",[36,7992,7993,7995,7997,7999,8001],{"class":38,"line":149},[36,7994,64],{"class":42},[36,7996,561],{"class":42},[36,7998,19],{"class":50},[36,8000,7819],{"class":42},[36,8002,564],{"class":50},[36,8004,8005,8007,8009,8012,8014,8017,8019,8021],{"class":38,"line":154},[36,8006,104],{"class":50},[36,8008,107],{"class":42},[36,8010,8011],{"class":110},"\"sizeof(int *)\"",[36,8013,2905],{"class":42},[36,8015,8016],{"class":50},"(p)",[36,8018,107],{"class":42},[36,8020,2775],{"class":50},[36,8022,8023],{"class":124},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[36,8025,8026,8028,8030,8032,8034,8036,8038,8040,8042,8044,8047],{"class":38,"line":167},[36,8027,104],{"class":50},[36,8029,107],{"class":42},[36,8031,8011],{"class":110},[36,8033,2905],{"class":42},[36,8035,222],{"class":50},[36,8037,43],{"class":42},[36,8039,561],{"class":42},[36,8041,2096],{"class":50},[36,8043,107],{"class":42},[36,8045,8046],{"class":50},"endl",[36,8048,8049],{"class":124},"  \u002F\u002F4字节(32位的话)\n",[36,8051,8052,8054,8056,8059,8061,8063,8065,8067,8069,8071,8073],{"class":38,"line":172},[36,8053,104],{"class":50},[36,8055,107],{"class":42},[36,8057,8058],{"class":110},"\"sizeof(char *)\"",[36,8060,2905],{"class":42},[36,8062,222],{"class":50},[36,8064,1766],{"class":42},[36,8066,561],{"class":42},[36,8068,2096],{"class":50},[36,8070,107],{"class":42},[36,8072,2775],{"class":50},[36,8074,8075],{"class":124}," \u002F\u002F4字节(32位的话)\n",[36,8077,8078],{"class":38,"line":192},[36,8079,250],{"class":50},[14,8081,8083],{"id":8082},"_33空指针","3.3空指针",[19,8085,8086],{},"空指针：指针变量指向内存中编号为0的空间",[19,8088,8089],{},"用途：初始化指针变量",[19,8091,8092],{},"注意：空指针指向的内存是不可以访问的",[26,8094,8096],{"className":28,"code":8095,"language":30,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[33,8097,8098,8106,8110,8115,8129,8134,8149,8154],{"__ignoreMap":31},[36,8099,8100,8102,8104],{"class":38,"line":39},[36,8101,43],{"class":42},[36,8103,47],{"class":46},[36,8105,3484],{"class":50},[36,8107,8108],{"class":38,"line":54},[36,8109,3076],{"class":50},[36,8111,8112],{"class":38,"line":61},[36,8113,8114],{"class":124},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[36,8116,8117,8119,8121,8123,8125,8127],{"class":38,"line":80},[36,8118,64],{"class":42},[36,8120,561],{"class":42},[36,8122,19],{"class":50},[36,8124,70],{"class":42},[36,8126,3895],{"class":73},[36,8128,77],{"class":50},[36,8130,8131],{"class":38,"line":96},[36,8132,8133],{"class":124},"    \u002F\u002F2.空指针不能进行访问\n",[36,8135,8136,8138,8140,8142,8144,8146],{"class":38,"line":101},[36,8137,569],{"class":42},[36,8139,19],{"class":50},[36,8141,70],{"class":42},[36,8143,1979],{"class":73},[36,8145,926],{"class":50},[36,8147,8148],{"class":124},"\u002F\u002F直接报错，压根不能访问\n",[36,8150,8151],{"class":38,"line":128},[36,8152,8153],{"class":124},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[36,8155,8156],{"class":38,"line":149},[36,8157,250],{"class":50},[14,8159,8161],{"id":8160},"_34野指针","3.4野指针",[19,8163,8164],{},[887,8165,8166],{},"指针变量指向非法的内存空间",[26,8168,8170],{"className":28,"code":8169,"language":30,"meta":31,"style":31},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,8171,8172,8180,8184,8213,8218,8230],{"__ignoreMap":31},[36,8173,8174,8176,8178],{"class":38,"line":39},[36,8175,43],{"class":42},[36,8177,47],{"class":46},[36,8179,3484],{"class":50},[36,8181,8182],{"class":38,"line":54},[36,8183,3076],{"class":50},[36,8185,8186,8188,8190,8192,8194,8196,8198,8200,8202,8205,8208,8210],{"class":38,"line":61},[36,8187,64],{"class":42},[36,8189,561],{"class":42},[36,8191,19],{"class":50},[36,8193,70],{"class":42},[36,8195,222],{"class":50},[36,8197,43],{"class":42},[36,8199,561],{"class":42},[36,8201,2096],{"class":50},[36,8203,8204],{"class":42},"0x",[36,8206,8207],{"class":73},"1100",[36,8209,926],{"class":50},[36,8211,8212],{"class":124}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[36,8214,8215],{"class":38,"line":80},[36,8216,8217],{"class":124},"    \u002F\u002F访问野指针报错\n",[36,8219,8220,8222,8224,8226,8228],{"class":38,"line":96},[36,8221,3081],{"class":50},[36,8223,7898],{"class":42},[36,8225,19],{"class":50},[36,8227,107],{"class":42},[36,8229,2732],{"class":50},[36,8231,8232],{"class":38,"line":101},[36,8233,250],{"class":50},[19,8235,8236],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8238,8240],{"id":8239},"_35const修饰指针","3.5const修饰指针",[19,8242,8243],{},"三种情况：",[2674,8245,8246,8249,8252],{},[259,8247,8248],{},"const修饰指针 常量指针",[259,8250,8251],{},"const修饰常量 指针常量",[259,8253,8254],{},"const即修饰指针，又修饰常量",[256,8256,8257],{},[259,8258,8259],{},"常量指针",[26,8261,8263],{"className":28,"code":8262,"language":30,"meta":31,"style":31},"const int *p=&a;\n",[33,8264,8265],{"__ignoreMap":31},[36,8266,8267,8269,8271,8273,8275,8277],{"class":38,"line":39},[36,8268,1437],{"class":42},[36,8270,965],{"class":42},[36,8272,561],{"class":42},[36,8274,19],{"class":50},[36,8276,7819],{"class":42},[36,8278,564],{"class":50},[19,8280,8281],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[256,8283,8284],{"start":54},[259,8285,8286],{},"指针常量",[26,8288,8290],{"className":28,"code":8289,"language":30,"meta":31,"style":31},"int *const p=&a;\n",[33,8291,8292],{"__ignoreMap":31},[36,8293,8294,8296,8299,8302,8304],{"class":38,"line":39},[36,8295,43],{"class":42},[36,8297,8298],{"class":42}," *const",[36,8300,8301],{"class":50}," p",[36,8303,7819],{"class":42},[36,8305,564],{"class":50},[19,8307,8308],{},"指针的指向不可以改，指针指向的值可以改",[256,8310,8311],{"start":61},[259,8312,8254],{},[26,8314,8316],{"className":28,"code":8315,"language":30,"meta":31,"style":31},"const int *const p=&a;\n",[33,8317,8318],{"__ignoreMap":31},[36,8319,8320,8322,8324,8326,8328,8330],{"class":38,"line":39},[36,8321,1437],{"class":42},[36,8323,965],{"class":42},[36,8325,8298],{"class":42},[36,8327,8301],{"class":50},[36,8329,7819],{"class":42},[36,8331,564],{"class":50},[19,8333,8334],{},"指针的指向和指针指向的值都不可以改变",[14,8336,8338],{"id":8337},"_36指针和数组","3.6指针和数组",[26,8340,8342],{"className":28,"code":8341,"language":30,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F利用指针访问数组中的元素\n    int arr[10]={1,2,3,4,5,6,7,8,9,10};\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003Carr[0]\u003C\u003Cendl;\n    int *p=arr;\u002F\u002F注意数才要加取地址符号&\n    cout\u003C\u003C\"数组的第一个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    p++; \u002F\u002F让指针向后偏移4个字节\n    cout\u003C\u003C\"数组的第二个元素为：\"\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F利用指针遍历数组\n    int *p2=arr;\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003C*p2\u003C\u003Cendl;\n        p2++;\n    }\n}\n",[33,8343,8344,8352,8356,8361,8415,8436,8452,8468,8479,8496,8501,8515,8541,8545,8557,8566,8570],{"__ignoreMap":31},[36,8345,8346,8348,8350],{"class":38,"line":39},[36,8347,43],{"class":42},[36,8349,47],{"class":46},[36,8351,3484],{"class":50},[36,8353,8354],{"class":38,"line":54},[36,8355,3076],{"class":50},[36,8357,8358],{"class":38,"line":61},[36,8359,8360],{"class":124},"    \u002F\u002F利用指针访问数组中的元素\n",[36,8362,8363,8365,8367,8369,8371,8373,8375,8377,8379,8381,8383,8385,8387,8389,8391,8393,8395,8397,8399,8401,8403,8405,8407,8409,8411,8413],{"class":38,"line":80},[36,8364,64],{"class":42},[36,8366,5453],{"class":50},[36,8368,2113],{"class":73},[36,8370,2607],{"class":50},[36,8372,70],{"class":42},[36,8374,2563],{"class":50},[36,8376,1885],{"class":73},[36,8378,2045],{"class":50},[36,8380,1747],{"class":73},[36,8382,2045],{"class":50},[36,8384,1741],{"class":73},[36,8386,2045],{"class":50},[36,8388,1961],{"class":73},[36,8390,2045],{"class":50},[36,8392,1987],{"class":73},[36,8394,2045],{"class":50},[36,8396,2012],{"class":73},[36,8398,2045],{"class":50},[36,8400,2036],{"class":73},[36,8402,2045],{"class":50},[36,8404,2062],{"class":73},[36,8406,2045],{"class":50},[36,8408,2087],{"class":73},[36,8410,2045],{"class":50},[36,8412,2113],{"class":73},[36,8414,5486],{"class":50},[36,8416,8417,8419,8421,8424,8426,8428,8430,8432,8434],{"class":38,"line":96},[36,8418,3081],{"class":50},[36,8420,107],{"class":42},[36,8422,8423],{"class":110},"\"数组的第一个元素为：\"",[36,8425,107],{"class":42},[36,8427,5397],{"class":50},[36,8429,1859],{"class":73},[36,8431,2607],{"class":50},[36,8433,107],{"class":42},[36,8435,2732],{"class":50},[36,8437,8438,8440,8442,8444,8446,8449],{"class":38,"line":101},[36,8439,64],{"class":42},[36,8441,561],{"class":42},[36,8443,19],{"class":50},[36,8445,70],{"class":42},[36,8447,8448],{"class":50},"arr;",[36,8450,8451],{"class":124},"\u002F\u002F注意数才要加取地址符号&\n",[36,8453,8454,8456,8458,8460,8462,8464,8466],{"class":38,"line":128},[36,8455,3081],{"class":50},[36,8457,107],{"class":42},[36,8459,8423],{"class":110},[36,8461,7898],{"class":42},[36,8463,19],{"class":50},[36,8465,107],{"class":42},[36,8467,2732],{"class":50},[36,8469,8470,8472,8474,8476],{"class":38,"line":149},[36,8471,7816],{"class":50},[36,8473,3798],{"class":42},[36,8475,926],{"class":50},[36,8477,8478],{"class":124}," \u002F\u002F让指针向后偏移4个字节\n",[36,8480,8481,8483,8485,8488,8490,8492,8494],{"class":38,"line":154},[36,8482,3081],{"class":50},[36,8484,107],{"class":42},[36,8486,8487],{"class":110},"\"数组的第二个元素为：\"",[36,8489,7898],{"class":42},[36,8491,19],{"class":50},[36,8493,107],{"class":42},[36,8495,2732],{"class":50},[36,8497,8498],{"class":38,"line":167},[36,8499,8500],{"class":124},"    \u002F\u002F利用指针遍历数组\n",[36,8502,8503,8505,8507,8510,8512],{"class":38,"line":172},[36,8504,64],{"class":42},[36,8506,561],{"class":42},[36,8508,8509],{"class":50},"p2",[36,8511,70],{"class":42},[36,8513,8514],{"class":50},"arr;\n",[36,8516,8517,8519,8521,8523,8525,8527,8529,8531,8533,8535,8537,8539],{"class":38,"line":192},[36,8518,4692],{"class":42},[36,8520,3180],{"class":50},[36,8522,43],{"class":42},[36,8524,4523],{"class":50},[36,8526,70],{"class":42},[36,8528,1859],{"class":73},[36,8530,4530],{"class":50},[36,8532,2577],{"class":42},[36,8534,2113],{"class":73},[36,8536,4530],{"class":50},[36,8538,3798],{"class":42},[36,8540,1680],{"class":50},[36,8542,8543],{"class":38,"line":211},[36,8544,3537],{"class":50},[36,8546,8547,8549,8551,8553,8555],{"class":38,"line":216},[36,8548,4942],{"class":50},[36,8550,7898],{"class":42},[36,8552,8509],{"class":50},[36,8554,107],{"class":42},[36,8556,2732],{"class":50},[36,8558,8559,8562,8564],{"class":38,"line":231},[36,8560,8561],{"class":50},"        p2",[36,8563,3798],{"class":42},[36,8565,77],{"class":50},[36,8567,8568],{"class":38,"line":236},[36,8569,3693],{"class":50},[36,8571,8572],{"class":38,"line":247},[36,8573,250],{"class":50},[14,8575,8577],{"id":8576},"_37指针和函数","3.7指针和函数",[19,8579,8580],{},"利用指针做函数参数，可以修改实参的值",[19,8582,8583],{},"值传递：只改变形参，不改变实参",[19,8585,8586],{},"地址传递：",[26,8588,8590],{"className":28,"code":8589,"language":30,"meta":31,"style":31},"void swap(int *p1,int *p2)\n{\n    int temp=*p1;\n    *p1=*p2;\n    *p2=temp;\n}\nint main()\n{\n    int a=10;\n    int b=20;\n    \u002F\u002F地址传递\n    swap(&a,&b);\n    cout\u003C\u003Ca\u003C\u003Cendl;\u002F\u002F20\n    cout\u003C\u003Cb\u003C\u003Cendl;\u002F\u002F10\n}\n",[33,8591,8592,8617,8621,8633,8644,8654,8658,8666,8670,8682,8694,8699,8715,8729,8743],{"__ignoreMap":31},[36,8593,8594,8596,8598,8600,8602,8604,8607,8609,8611,8613,8615],{"class":38,"line":39},[36,8595,463],{"class":42},[36,8597,6854],{"class":46},[36,8599,222],{"class":50},[36,8601,43],{"class":42},[36,8603,561],{"class":42},[36,8605,8606],{"class":473},"p1",[36,8608,2045],{"class":50},[36,8610,43],{"class":42},[36,8612,561],{"class":42},[36,8614,8509],{"class":473},[36,8616,1680],{"class":50},[36,8618,8619],{"class":38,"line":54},[36,8620,3076],{"class":50},[36,8622,8623,8625,8627,8630],{"class":38,"line":61},[36,8624,64],{"class":42},[36,8626,5744],{"class":50},[36,8628,8629],{"class":42},"=*",[36,8631,8632],{"class":50},"p1;\n",[36,8634,8635,8637,8639,8641],{"class":38,"line":80},[36,8636,569],{"class":42},[36,8638,8606],{"class":50},[36,8640,8629],{"class":42},[36,8642,8643],{"class":50},"p2;\n",[36,8645,8646,8648,8650,8652],{"class":38,"line":96},[36,8647,569],{"class":42},[36,8649,8509],{"class":50},[36,8651,70],{"class":42},[36,8653,5769],{"class":50},[36,8655,8656],{"class":38,"line":101},[36,8657,250],{"class":50},[36,8659,8660,8662,8664],{"class":38,"line":128},[36,8661,43],{"class":42},[36,8663,47],{"class":46},[36,8665,3484],{"class":50},[36,8667,8668],{"class":38,"line":149},[36,8669,3076],{"class":50},[36,8671,8672,8674,8676,8678,8680],{"class":38,"line":154},[36,8673,64],{"class":42},[36,8675,474],{"class":50},[36,8677,70],{"class":42},[36,8679,2113],{"class":73},[36,8681,77],{"class":50},[36,8683,8684,8686,8688,8690,8692],{"class":38,"line":167},[36,8685,64],{"class":42},[36,8687,482],{"class":50},[36,8689,70],{"class":42},[36,8691,2367],{"class":73},[36,8693,77],{"class":50},[36,8695,8696],{"class":38,"line":172},[36,8697,8698],{"class":124},"    \u002F\u002F地址传递\n",[36,8700,8701,8703,8705,8707,8710,8712],{"class":38,"line":192},[36,8702,7048],{"class":46},[36,8704,222],{"class":50},[36,8706,763],{"class":42},[36,8708,8709],{"class":50},"a,",[36,8711,763],{"class":42},[36,8713,8714],{"class":50},"b);\n",[36,8716,8717,8719,8721,8723,8725,8727],{"class":38,"line":211},[36,8718,3081],{"class":50},[36,8720,107],{"class":42},[36,8722,1906],{"class":50},[36,8724,107],{"class":42},[36,8726,2775],{"class":50},[36,8728,378],{"class":124},[36,8730,8731,8733,8735,8737,8739,8741],{"class":38,"line":216},[36,8732,3081],{"class":50},[36,8734,107],{"class":42},[36,8736,1931],{"class":50},[36,8738,107],{"class":42},[36,8740,2775],{"class":50},[36,8742,125],{"class":124},[36,8744,8745],{"class":38,"line":231},[36,8746,250],{"class":50},[19,8748,8749],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8751,8753],{"id":8752},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8755,8756],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8758,8759,8760,8762],{},"例如数组：int arr",[36,8761,2113],{},"={4,3,6,9,1,2,10,8,7,5}",[26,8764,8766],{"className":28,"code":8765,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nvoid bubbleSort(int *p,int len)\n{\n    for(int i=0;i\u003Clen-1;i++)\n    {\n        for(int j=0;j\u003Clen-i-1;j++)\n        {\n            if(p[j]>p[j+1])\n            {\n                int temp=p[j];\n                p[j]=p[j+1];\n                p[j+1]=temp;\n            }\n        }\n    }\n}\n\nint main()\n{\n    \u002F\u002F 1.创建数组\n    int arr[10]={4,3,6,9,1,2,10,8,7,5};\n    int len=10;\n    int *p=arr;\n    \u002F\u002F 2.创建函数，实现冒泡排序\n    bubbleSort(p,len);\n\n    \u002F\u002F 3.打印排序后的数组\n    for (int i=0; i\u003Clen; i++)\n    {\n        cout\u003C\u003C*p\u003C\u003C\"\";\n        p++;\n    }\n}\n",[33,8767,8768,8774,8784,8808,8812,8843,8847,8881,8885,8903,8907,8918,8933,8948,8952,8956,8960,8964,8968,8976,8980,8985,9039,9051,9063,9068,9076,9080,9085,9110,9114,9129,9138,9142],{"__ignoreMap":31},[36,8769,8770,8772],{"class":38,"line":39},[36,8771,3459],{"class":42},[36,8773,3462],{"class":110},[36,8775,8776,8778,8780,8782],{"class":38,"line":54},[36,8777,3467],{"class":42},[36,8779,3470],{"class":42},[36,8781,3473],{"class":46},[36,8783,77],{"class":50},[36,8785,8786,8788,8791,8793,8795,8797,8799,8801,8803,8806],{"class":38,"line":61},[36,8787,463],{"class":42},[36,8789,8790],{"class":46}," bubbleSort",[36,8792,222],{"class":50},[36,8794,43],{"class":42},[36,8796,561],{"class":42},[36,8798,19],{"class":473},[36,8800,2045],{"class":50},[36,8802,43],{"class":42},[36,8804,8805],{"class":473}," len",[36,8807,1680],{"class":50},[36,8809,8810],{"class":38,"line":80},[36,8811,3076],{"class":50},[36,8813,8814,8816,8818,8820,8822,8824,8826,8828,8830,8833,8835,8837,8839,8841],{"class":38,"line":96},[36,8815,4692],{"class":42},[36,8817,222],{"class":50},[36,8819,43],{"class":42},[36,8821,4523],{"class":50},[36,8823,70],{"class":42},[36,8825,1859],{"class":73},[36,8827,4530],{"class":50},[36,8829,2577],{"class":42},[36,8831,8832],{"class":50},"len",[36,8834,2199],{"class":42},[36,8836,1885],{"class":73},[36,8838,4530],{"class":50},[36,8840,3798],{"class":42},[36,8842,1680],{"class":50},[36,8844,8845],{"class":38,"line":101},[36,8846,3537],{"class":50},[36,8848,8849,8851,8853,8855,8857,8859,8861,8863,8865,8867,8869,8871,8873,8875,8877,8879],{"class":38,"line":128},[36,8850,4894],{"class":42},[36,8852,222],{"class":50},[36,8854,43],{"class":42},[36,8856,4901],{"class":50},[36,8858,70],{"class":42},[36,8860,1859],{"class":73},[36,8862,4908],{"class":50},[36,8864,2577],{"class":42},[36,8866,8832],{"class":50},[36,8868,2199],{"class":42},[36,8870,2108],{"class":50},[36,8872,2199],{"class":42},[36,8874,1885],{"class":73},[36,8876,4908],{"class":50},[36,8878,3798],{"class":42},[36,8880,1680],{"class":50},[36,8882,8883],{"class":38,"line":149},[36,8884,4012],{"class":50},[36,8886,8887,8889,8892,8894,8897,8899,8901],{"class":38,"line":154},[36,8888,6131],{"class":42},[36,8890,8891],{"class":50},"(p[j]",[36,8893,2627],{"class":42},[36,8895,8896],{"class":50},"p[j",[36,8898,2148],{"class":42},[36,8900,1885],{"class":73},[36,8902,6146],{"class":50},[36,8904,8905],{"class":38,"line":167},[36,8906,6151],{"class":50},[36,8908,8909,8911,8913,8915],{"class":38,"line":172},[36,8910,6156],{"class":42},[36,8912,5744],{"class":50},[36,8914,70],{"class":42},[36,8916,8917],{"class":50},"p[j];\n",[36,8919,8920,8923,8925,8927,8929,8931],{"class":38,"line":192},[36,8921,8922],{"class":50},"                p[j]",[36,8924,70],{"class":42},[36,8926,8896],{"class":50},[36,8928,2148],{"class":42},[36,8930,1885],{"class":73},[36,8932,6179],{"class":50},[36,8934,8935,8938,8940,8942,8944,8946],{"class":38,"line":211},[36,8936,8937],{"class":50},"                p[j",[36,8939,2148],{"class":42},[36,8941,1885],{"class":73},[36,8943,2607],{"class":50},[36,8945,70],{"class":42},[36,8947,5769],{"class":50},[36,8949,8950],{"class":38,"line":216},[36,8951,6199],{"class":50},[36,8953,8954],{"class":38,"line":231},[36,8955,4031],{"class":50},[36,8957,8958],{"class":38,"line":236},[36,8959,3693],{"class":50},[36,8961,8962],{"class":38,"line":247},[36,8963,250],{"class":50},[36,8965,8966],{"class":38,"line":637},[36,8967,58],{"emptyLinePlaceholder":57},[36,8969,8970,8972,8974],{"class":38,"line":646},[36,8971,43],{"class":42},[36,8973,47],{"class":46},[36,8975,3484],{"class":50},[36,8977,8978],{"class":38,"line":655},[36,8979,3076],{"class":50},[36,8981,8982],{"class":38,"line":660},[36,8983,8984],{"class":124},"    \u002F\u002F 1.创建数组\n",[36,8986,8987,8989,8991,8993,8995,8997,8999,9001,9003,9005,9007,9009,9011,9013,9015,9017,9019,9021,9023,9025,9027,9029,9031,9033,9035,9037],{"class":38,"line":665},[36,8988,64],{"class":42},[36,8990,5453],{"class":50},[36,8992,2113],{"class":73},[36,8994,2607],{"class":50},[36,8996,70],{"class":42},[36,8998,2563],{"class":50},[36,9000,1961],{"class":73},[36,9002,2045],{"class":50},[36,9004,1741],{"class":73},[36,9006,2045],{"class":50},[36,9008,2012],{"class":73},[36,9010,2045],{"class":50},[36,9012,2087],{"class":73},[36,9014,2045],{"class":50},[36,9016,1885],{"class":73},[36,9018,2045],{"class":50},[36,9020,1747],{"class":73},[36,9022,2045],{"class":50},[36,9024,2113],{"class":73},[36,9026,2045],{"class":50},[36,9028,2062],{"class":73},[36,9030,2045],{"class":50},[36,9032,2036],{"class":73},[36,9034,2045],{"class":50},[36,9036,1987],{"class":73},[36,9038,5486],{"class":50},[36,9040,9041,9043,9045,9047,9049],{"class":38,"line":674},[36,9042,64],{"class":42},[36,9044,8805],{"class":50},[36,9046,70],{"class":42},[36,9048,2113],{"class":73},[36,9050,77],{"class":50},[36,9052,9053,9055,9057,9059,9061],{"class":38,"line":679},[36,9054,64],{"class":42},[36,9056,561],{"class":42},[36,9058,19],{"class":50},[36,9060,70],{"class":42},[36,9062,8514],{"class":50},[36,9064,9065],{"class":38,"line":692},[36,9066,9067],{"class":124},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[36,9069,9070,9073],{"class":38,"line":705},[36,9071,9072],{"class":46},"    bubbleSort",[36,9074,9075],{"class":50},"(p,len);\n",[36,9077,9078],{"class":38,"line":710},[36,9079,58],{"emptyLinePlaceholder":57},[36,9081,9082],{"class":38,"line":722},[36,9083,9084],{"class":124},"    \u002F\u002F 3.打印排序后的数组\n",[36,9086,9087,9089,9091,9093,9095,9097,9099,9101,9103,9106,9108],{"class":38,"line":750},[36,9088,4692],{"class":42},[36,9090,3180],{"class":50},[36,9092,43],{"class":42},[36,9094,4523],{"class":50},[36,9096,70],{"class":42},[36,9098,1859],{"class":73},[36,9100,4705],{"class":50},[36,9102,2577],{"class":42},[36,9104,9105],{"class":50},"len; i",[36,9107,3798],{"class":42},[36,9109,1680],{"class":50},[36,9111,9112],{"class":38,"line":755},[36,9113,3537],{"class":50},[36,9115,9116,9118,9120,9122,9124,9127],{"class":38,"line":777},[36,9117,4942],{"class":50},[36,9119,7898],{"class":42},[36,9121,19],{"class":50},[36,9123,107],{"class":42},[36,9125,9126],{"class":110},"\"\"",[36,9128,77],{"class":50},[36,9130,9131,9134,9136],{"class":38,"line":802},[36,9132,9133],{"class":50},"        p",[36,9135,3798],{"class":42},[36,9137,77],{"class":50},[36,9139,9140],{"class":38,"line":807},[36,9141,3693],{"class":50},[36,9143,9144],{"class":38,"line":818},[36,9145,250],{"class":50},[1592,9147,9148],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":9150},[9151,9152,9153,9154,9155,9156,9157,9158],{"id":7763,"depth":54,"text":7764},{"id":7928,"depth":54,"text":7929},{"id":8082,"depth":54,"text":8083},{"id":8160,"depth":54,"text":8161},{"id":8239,"depth":54,"text":8240},{"id":8337,"depth":54,"text":8338},{"id":8576,"depth":54,"text":8577},{"id":8752,"depth":54,"text":8753},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7752,"description":7760},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9165,"title":9166,"body":9167,"description":9174,"extension":1603,"meta":12139,"navigation":57,"path":12140,"seo":12141,"stem":12142,"__hash__":12143},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9168,"toc":12130},[9169,9172,9175,9179,9182,9185,9196,9531,9534,9538,9541,9548,9803,9807,9810,9813,9968,9972,9975,9978,10184,10188,10191,10492,10494,10502,10506,10509,10660,10662,10673,10730,10734,10739,11396,11404,11407,11499,11502,12121,12127],[10,9170,9166],{"id":9171},"_4结构体",[19,9173,9174],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9176,9178],{"id":9177},"_41结构体定义与使用","4.1结构体定义与使用",[19,9180,9181],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9183,9184],{},"通过结构体创建变量的方式：",[2674,9186,9187,9190,9193],{},[259,9188,9189],{},"struct 结构体名 变量名",[259,9191,9192],{},"struct 结构体名 变量名={成员1值，成员2值...}",[259,9194,9195],{},"定义结构体时顺便创建变量",[26,9197,9199],{"className":28,"code":9198,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\nstruct Student\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n};\nstruct School\n{\n    \u002F\u002F成员列表\n\n    \u002F\u002F姓名\n    string name;\n    \u002F\u002F年龄\n    int age;\n    \u002F\u002F分数\n    int score;\n} s3; \u002F\u002F创建结构体时就创建了变量\nint main()\n{\n    \u002F\u002F2.通过学生类型创建具体学生\n    \u002F\u002F2.1 struct Student s1;\n    struct Student s1;\n    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n    s1.name=\"张三\";\n    s1.age=18;\n    s1.score=66;\n    \u002F\u002F输出结果\n    cout\u003C\u003Cs1.name\u003C\u003Cs1.age\u003C\u003Cs1.score\u003C\u003Cendl;\n\n    \u002F\u002F2.2 struct Student s2={...}\n    struct Student s2={\"王五\",18,66};\n\n    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n    s3.name=\"1\";\n    s3.age=18;\n    s3.score=20;\n}\n",[33,9200,9201,9207,9217,9224,9229,9237,9241,9246,9250,9255,9260,9265,9272,9277,9284,9288,9295,9299,9303,9307,9311,9315,9319,9325,9329,9335,9343,9351,9355,9360,9365,9376,9381,9393,9404,9415,9420,9443,9447,9452,9479,9484,9490,9502,9514,9526],{"__ignoreMap":31},[36,9202,9203,9205],{"class":38,"line":39},[36,9204,3459],{"class":42},[36,9206,3462],{"class":110},[36,9208,9209,9211,9213,9215],{"class":38,"line":54},[36,9210,3467],{"class":42},[36,9212,3470],{"class":42},[36,9214,3473],{"class":46},[36,9216,77],{"class":50},[36,9218,9219,9221],{"class":38,"line":61},[36,9220,3459],{"class":42},[36,9222,9223],{"class":110},"\u003Cstring>\n",[36,9225,9226],{"class":38,"line":80},[36,9227,9228],{"class":124},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[36,9230,9231,9234],{"class":38,"line":96},[36,9232,9233],{"class":42},"struct",[36,9235,9236],{"class":46}," Student\n",[36,9238,9239],{"class":38,"line":101},[36,9240,3076],{"class":50},[36,9242,9243],{"class":38,"line":128},[36,9244,9245],{"class":124},"    \u002F\u002F成员列表\n",[36,9247,9248],{"class":38,"line":149},[36,9249,58],{"emptyLinePlaceholder":57},[36,9251,9252],{"class":38,"line":154},[36,9253,9254],{"class":124},"    \u002F\u002F姓名\n",[36,9256,9257],{"class":38,"line":167},[36,9258,9259],{"class":50},"    string name;\n",[36,9261,9262],{"class":38,"line":172},[36,9263,9264],{"class":124},"    \u002F\u002F年龄\n",[36,9266,9267,9269],{"class":38,"line":192},[36,9268,64],{"class":42},[36,9270,9271],{"class":50}," age;\n",[36,9273,9274],{"class":38,"line":211},[36,9275,9276],{"class":124},"    \u002F\u002F分数\n",[36,9278,9279,9281],{"class":38,"line":216},[36,9280,64],{"class":42},[36,9282,9283],{"class":50}," score;\n",[36,9285,9286],{"class":38,"line":231},[36,9287,5486],{"class":50},[36,9289,9290,9292],{"class":38,"line":236},[36,9291,9233],{"class":42},[36,9293,9294],{"class":46}," School\n",[36,9296,9297],{"class":38,"line":247},[36,9298,3076],{"class":50},[36,9300,9301],{"class":38,"line":637},[36,9302,9245],{"class":124},[36,9304,9305],{"class":38,"line":646},[36,9306,58],{"emptyLinePlaceholder":57},[36,9308,9309],{"class":38,"line":655},[36,9310,9254],{"class":124},[36,9312,9313],{"class":38,"line":660},[36,9314,9259],{"class":50},[36,9316,9317],{"class":38,"line":665},[36,9318,9264],{"class":124},[36,9320,9321,9323],{"class":38,"line":674},[36,9322,64],{"class":42},[36,9324,9271],{"class":50},[36,9326,9327],{"class":38,"line":679},[36,9328,9276],{"class":124},[36,9330,9331,9333],{"class":38,"line":692},[36,9332,64],{"class":42},[36,9334,9283],{"class":50},[36,9336,9337,9340],{"class":38,"line":705},[36,9338,9339],{"class":50},"} s3;",[36,9341,9342],{"class":124}," \u002F\u002F创建结构体时就创建了变量\n",[36,9344,9345,9347,9349],{"class":38,"line":710},[36,9346,43],{"class":42},[36,9348,47],{"class":46},[36,9350,3484],{"class":50},[36,9352,9353],{"class":38,"line":722},[36,9354,3076],{"class":50},[36,9356,9357],{"class":38,"line":750},[36,9358,9359],{"class":124},"    \u002F\u002F2.通过学生类型创建具体学生\n",[36,9361,9362],{"class":38,"line":755},[36,9363,9364],{"class":124},"    \u002F\u002F2.1 struct Student s1;\n",[36,9366,9367,9370,9373],{"class":38,"line":777},[36,9368,9369],{"class":42},"    struct",[36,9371,9372],{"class":46}," Student",[36,9374,9375],{"class":50}," s1;\n",[36,9377,9378],{"class":38,"line":802},[36,9379,9380],{"class":124},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[36,9382,9383,9386,9388,9391],{"class":38,"line":807},[36,9384,9385],{"class":50},"    s1.name",[36,9387,70],{"class":42},[36,9389,9390],{"class":110},"\"张三\"",[36,9392,77],{"class":50},[36,9394,9395,9398,9400,9402],{"class":38,"line":818},[36,9396,9397],{"class":50},"    s1.age",[36,9399,70],{"class":42},[36,9401,2317],{"class":73},[36,9403,77],{"class":50},[36,9405,9406,9409,9411,9413],{"class":38,"line":843},[36,9407,9408],{"class":50},"    s1.score",[36,9410,70],{"class":42},[36,9412,1922],{"class":73},[36,9414,77],{"class":50},[36,9416,9417],{"class":38,"line":848},[36,9418,9419],{"class":124},"    \u002F\u002F输出结果\n",[36,9421,9422,9424,9426,9429,9431,9434,9436,9439,9441],{"class":38,"line":859},[36,9423,3081],{"class":50},[36,9425,107],{"class":42},[36,9427,9428],{"class":50},"s1.name",[36,9430,107],{"class":42},[36,9432,9433],{"class":50},"s1.age",[36,9435,107],{"class":42},[36,9437,9438],{"class":50},"s1.score",[36,9440,107],{"class":42},[36,9442,2732],{"class":50},[36,9444,9445],{"class":38,"line":864},[36,9446,58],{"emptyLinePlaceholder":57},[36,9448,9449],{"class":38,"line":873},[36,9450,9451],{"class":124},"    \u002F\u002F2.2 struct Student s2={...}\n",[36,9453,9455,9457,9459,9462,9464,9466,9469,9471,9473,9475,9477],{"class":38,"line":9454},40,[36,9456,9369],{"class":42},[36,9458,9372],{"class":46},[36,9460,9461],{"class":50}," s2",[36,9463,70],{"class":42},[36,9465,2563],{"class":50},[36,9467,9468],{"class":110},"\"王五\"",[36,9470,2045],{"class":50},[36,9472,2317],{"class":73},[36,9474,2045],{"class":50},[36,9476,1922],{"class":73},[36,9478,5486],{"class":50},[36,9480,9482],{"class":38,"line":9481},41,[36,9483,58],{"emptyLinePlaceholder":57},[36,9485,9487],{"class":38,"line":9486},42,[36,9488,9489],{"class":124},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[36,9491,9493,9496,9498,9500],{"class":38,"line":9492},43,[36,9494,9495],{"class":50},"    s3.name",[36,9497,70],{"class":42},[36,9499,5169],{"class":110},[36,9501,77],{"class":50},[36,9503,9505,9508,9510,9512],{"class":38,"line":9504},44,[36,9506,9507],{"class":50},"    s3.age",[36,9509,70],{"class":42},[36,9511,2317],{"class":73},[36,9513,77],{"class":50},[36,9515,9517,9520,9522,9524],{"class":38,"line":9516},45,[36,9518,9519],{"class":50},"    s3.score",[36,9521,70],{"class":42},[36,9523,2367],{"class":73},[36,9525,77],{"class":50},[36,9527,9529],{"class":38,"line":9528},46,[36,9530,250],{"class":50},[19,9532,9533],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9535,9537],{"id":9536},"_42结构体数组","4.2结构体数组",[19,9539,9540],{},"将自定义的结构体放入到数组中方便维护",[19,9542,9543,9544,9547],{},"语法：struct 结构体名 数组名",[36,9545,9546],{},"元素个数","={ {}，{},...{} };",[26,9549,9551],{"className":28,"code":9550,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n\n};\nint main()\n{\n    \u002F\u002F2.创建结构体数组\n    struct Student stuArray[2]=\n    {\n        {\"张三\",18,100},\n        {\"1\",15,15}\n    }\n    \u002F\u002F3.给结构体数组中的元素赋值\n    stuArray[1].name=\"2\";\n    stuArray[1].age=2;\n    stuArray[1].score=2;\n    \u002F\u002F4.遍历结构体数组\n    for (int i=0;i\u003C2;i++)\n    {\n        cout\u003C\u003CstuArray[i].name\u003C\u003CstuArray[i].age\u003C\u003CstuArray[i].score\u003C\u003Cendl;\n    }\n}\n",[33,9552,9553,9559,9569,9575,9580,9586,9590,9594,9600,9606,9610,9614,9622,9626,9631,9646,9650,9666,9682,9686,9691,9707,9722,9737,9742,9768,9772,9795,9799],{"__ignoreMap":31},[36,9554,9555,9557],{"class":38,"line":39},[36,9556,3459],{"class":42},[36,9558,3462],{"class":110},[36,9560,9561,9563,9565,9567],{"class":38,"line":54},[36,9562,3467],{"class":42},[36,9564,3470],{"class":42},[36,9566,3473],{"class":46},[36,9568,77],{"class":50},[36,9570,9571,9573],{"class":38,"line":61},[36,9572,3459],{"class":42},[36,9574,9223],{"class":110},[36,9576,9577],{"class":38,"line":80},[36,9578,9579],{"class":124},"\u002F\u002F1.定义结构体\n",[36,9581,9582,9584],{"class":38,"line":96},[36,9583,9233],{"class":42},[36,9585,9236],{"class":46},[36,9587,9588],{"class":38,"line":101},[36,9589,3076],{"class":50},[36,9591,9592],{"class":38,"line":128},[36,9593,9259],{"class":50},[36,9595,9596,9598],{"class":38,"line":149},[36,9597,64],{"class":42},[36,9599,9271],{"class":50},[36,9601,9602,9604],{"class":38,"line":154},[36,9603,64],{"class":42},[36,9605,9283],{"class":50},[36,9607,9608],{"class":38,"line":167},[36,9609,58],{"emptyLinePlaceholder":57},[36,9611,9612],{"class":38,"line":172},[36,9613,5486],{"class":50},[36,9615,9616,9618,9620],{"class":38,"line":192},[36,9617,43],{"class":42},[36,9619,47],{"class":46},[36,9621,3484],{"class":50},[36,9623,9624],{"class":38,"line":211},[36,9625,3076],{"class":50},[36,9627,9628],{"class":38,"line":216},[36,9629,9630],{"class":124},"    \u002F\u002F2.创建结构体数组\n",[36,9632,9633,9635,9637,9640,9642,9644],{"class":38,"line":231},[36,9634,9369],{"class":42},[36,9636,9372],{"class":46},[36,9638,9639],{"class":50}," stuArray[",[36,9641,1747],{"class":73},[36,9643,2607],{"class":50},[36,9645,6397],{"class":42},[36,9647,9648],{"class":38,"line":236},[36,9649,3537],{"class":50},[36,9651,9652,9654,9656,9658,9660,9662,9664],{"class":38,"line":247},[36,9653,6406],{"class":50},[36,9655,9390],{"class":110},[36,9657,2045],{"class":50},[36,9659,2317],{"class":73},[36,9661,2045],{"class":50},[36,9663,1979],{"class":73},[36,9665,6419],{"class":50},[36,9667,9668,9670,9672,9674,9676,9678,9680],{"class":38,"line":637},[36,9669,6406],{"class":50},[36,9671,5169],{"class":110},[36,9673,2045],{"class":50},[36,9675,2242],{"class":73},[36,9677,2045],{"class":50},[36,9679,2242],{"class":73},[36,9681,250],{"class":50},[36,9683,9684],{"class":38,"line":646},[36,9685,3693],{"class":50},[36,9687,9688],{"class":38,"line":655},[36,9689,9690],{"class":124},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[36,9692,9693,9696,9698,9701,9703,9705],{"class":38,"line":660},[36,9694,9695],{"class":50},"    stuArray[",[36,9697,1885],{"class":73},[36,9699,9700],{"class":50},"].name",[36,9702,70],{"class":42},[36,9704,5192],{"class":110},[36,9706,77],{"class":50},[36,9708,9709,9711,9713,9716,9718,9720],{"class":38,"line":665},[36,9710,9695],{"class":50},[36,9712,1885],{"class":73},[36,9714,9715],{"class":50},"].age",[36,9717,70],{"class":42},[36,9719,1747],{"class":73},[36,9721,77],{"class":50},[36,9723,9724,9726,9728,9731,9733,9735],{"class":38,"line":674},[36,9725,9695],{"class":50},[36,9727,1885],{"class":73},[36,9729,9730],{"class":50},"].score",[36,9732,70],{"class":42},[36,9734,1747],{"class":73},[36,9736,77],{"class":50},[36,9738,9739],{"class":38,"line":679},[36,9740,9741],{"class":124},"    \u002F\u002F4.遍历结构体数组\n",[36,9743,9744,9746,9748,9750,9752,9754,9756,9758,9760,9762,9764,9766],{"class":38,"line":692},[36,9745,4692],{"class":42},[36,9747,3180],{"class":50},[36,9749,43],{"class":42},[36,9751,4523],{"class":50},[36,9753,70],{"class":42},[36,9755,1859],{"class":73},[36,9757,4530],{"class":50},[36,9759,2577],{"class":42},[36,9761,1747],{"class":73},[36,9763,4530],{"class":50},[36,9765,3798],{"class":42},[36,9767,1680],{"class":50},[36,9769,9770],{"class":38,"line":705},[36,9771,3537],{"class":50},[36,9773,9774,9776,9778,9781,9783,9786,9788,9791,9793],{"class":38,"line":710},[36,9775,4942],{"class":50},[36,9777,107],{"class":42},[36,9779,9780],{"class":50},"stuArray[i].name",[36,9782,107],{"class":42},[36,9784,9785],{"class":50},"stuArray[i].age",[36,9787,107],{"class":42},[36,9789,9790],{"class":50},"stuArray[i].score",[36,9792,107],{"class":42},[36,9794,2732],{"class":50},[36,9796,9797],{"class":38,"line":722},[36,9798,3693],{"class":50},[36,9800,9801],{"class":38,"line":750},[36,9802,250],{"class":50},[14,9804,9806],{"id":9805},"_43结构体指针","4.3结构体指针",[19,9808,9809],{},"作用：通过指针访问结构体中的成员",[19,9811,9812],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,9814,9816],{"className":28,"code":9815,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F1.定义结构体\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\nint main()\n{\n    \u002F\u002F创建学生结构体变量\n    struct Student s={\"张三\",18,200};\n    \u002F\u002F通过指针指向结构体变量\n    struct Student *p=&s\n    \u002F\u002F通过指针访问结构体变量中的数据\n    cout\u003C\u003Cp->name\u003C\u003Cp->age\u003C\u003Cp->score\u003C\u003Cendl;\n}\n",[33,9817,9818,9824,9834,9840,9844,9850,9854,9858,9864,9870,9874,9882,9886,9891,9916,9921,9936,9941,9964],{"__ignoreMap":31},[36,9819,9820,9822],{"class":38,"line":39},[36,9821,3459],{"class":42},[36,9823,3462],{"class":110},[36,9825,9826,9828,9830,9832],{"class":38,"line":54},[36,9827,3467],{"class":42},[36,9829,3470],{"class":42},[36,9831,3473],{"class":46},[36,9833,77],{"class":50},[36,9835,9836,9838],{"class":38,"line":61},[36,9837,3459],{"class":42},[36,9839,9223],{"class":110},[36,9841,9842],{"class":38,"line":80},[36,9843,9579],{"class":124},[36,9845,9846,9848],{"class":38,"line":96},[36,9847,9233],{"class":42},[36,9849,9236],{"class":46},[36,9851,9852],{"class":38,"line":101},[36,9853,3076],{"class":50},[36,9855,9856],{"class":38,"line":128},[36,9857,9259],{"class":50},[36,9859,9860,9862],{"class":38,"line":149},[36,9861,64],{"class":42},[36,9863,9271],{"class":50},[36,9865,9866,9868],{"class":38,"line":154},[36,9867,64],{"class":42},[36,9869,9283],{"class":50},[36,9871,9872],{"class":38,"line":167},[36,9873,5486],{"class":50},[36,9875,9876,9878,9880],{"class":38,"line":172},[36,9877,43],{"class":42},[36,9879,47],{"class":46},[36,9881,3484],{"class":50},[36,9883,9884],{"class":38,"line":192},[36,9885,3076],{"class":50},[36,9887,9888],{"class":38,"line":211},[36,9889,9890],{"class":124},"    \u002F\u002F创建学生结构体变量\n",[36,9892,9893,9895,9897,9900,9902,9904,9906,9908,9910,9912,9914],{"class":38,"line":216},[36,9894,9369],{"class":42},[36,9896,9372],{"class":46},[36,9898,9899],{"class":50}," s",[36,9901,70],{"class":42},[36,9903,2563],{"class":50},[36,9905,9390],{"class":110},[36,9907,2045],{"class":50},[36,9909,2317],{"class":73},[36,9911,2045],{"class":50},[36,9913,3240],{"class":73},[36,9915,5486],{"class":50},[36,9917,9918],{"class":38,"line":231},[36,9919,9920],{"class":124},"    \u002F\u002F通过指针指向结构体变量\n",[36,9922,9923,9925,9927,9929,9931,9933],{"class":38,"line":236},[36,9924,9369],{"class":42},[36,9926,9372],{"class":46},[36,9928,561],{"class":42},[36,9930,19],{"class":50},[36,9932,7819],{"class":42},[36,9934,9935],{"class":50},"s\n",[36,9937,9938],{"class":38,"line":247},[36,9939,9940],{"class":124},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[36,9942,9943,9945,9947,9950,9952,9955,9957,9960,9962],{"class":38,"line":637},[36,9944,3081],{"class":50},[36,9946,107],{"class":42},[36,9948,9949],{"class":50},"p->name",[36,9951,107],{"class":42},[36,9953,9954],{"class":50},"p->age",[36,9956,107],{"class":42},[36,9958,9959],{"class":50},"p->score",[36,9961,107],{"class":42},[36,9963,2732],{"class":50},[36,9965,9966],{"class":38,"line":646},[36,9967,250],{"class":50},[14,9969,9971],{"id":9970},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9973,9974],{},"作用：结构体中的成员可以是另一个结构体",[19,9976,9977],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,9979,9981],{"className":28,"code":9980,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n\u002F\u002F定义学生结构体\nstruct Student \n{\n    string name;\n    int age;\n    int score;\n}\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    int id;\n    string name;\n    int age;\n    Student stu;\n}\nint main() \n{\n    \u002F\u002F结构体嵌套结构体\n    \u002F\u002F创建老师\n    Teacher t;\n    t.id=100;\n    t.name=\"老王\";\n    t.age=18;\n    t.stu.name=\"小王\"；\n    t.stu.age=20;\n    t.stu.score=6;\n}\n",[33,9982,9983,9989,9999,10005,10010,10018,10022,10026,10032,10038,10042,10047,10054,10058,10065,10069,10075,10080,10084,10092,10096,10101,10106,10111,10122,10134,10145,10158,10169,10180],{"__ignoreMap":31},[36,9984,9985,9987],{"class":38,"line":39},[36,9986,3459],{"class":42},[36,9988,3462],{"class":110},[36,9990,9991,9993,9995,9997],{"class":38,"line":54},[36,9992,3467],{"class":42},[36,9994,3470],{"class":42},[36,9996,3473],{"class":46},[36,9998,77],{"class":50},[36,10000,10001,10003],{"class":38,"line":61},[36,10002,3459],{"class":42},[36,10004,9223],{"class":110},[36,10006,10007],{"class":38,"line":80},[36,10008,10009],{"class":124},"\u002F\u002F定义学生结构体\n",[36,10011,10012,10014,10016],{"class":38,"line":96},[36,10013,9233],{"class":42},[36,10015,9372],{"class":46},[36,10017,4169],{"class":50},[36,10019,10020],{"class":38,"line":101},[36,10021,3076],{"class":50},[36,10023,10024],{"class":38,"line":128},[36,10025,9259],{"class":50},[36,10027,10028,10030],{"class":38,"line":149},[36,10029,64],{"class":42},[36,10031,9271],{"class":50},[36,10033,10034,10036],{"class":38,"line":154},[36,10035,64],{"class":42},[36,10037,9283],{"class":50},[36,10039,10040],{"class":38,"line":167},[36,10041,250],{"class":50},[36,10043,10044],{"class":38,"line":172},[36,10045,10046],{"class":124},"\u002F\u002F定义老师结构体\n",[36,10048,10049,10051],{"class":38,"line":192},[36,10050,9233],{"class":42},[36,10052,10053],{"class":46}," Teacher\n",[36,10055,10056],{"class":38,"line":211},[36,10057,3076],{"class":50},[36,10059,10060,10062],{"class":38,"line":216},[36,10061,64],{"class":42},[36,10063,10064],{"class":50}," id;\n",[36,10066,10067],{"class":38,"line":231},[36,10068,9259],{"class":50},[36,10070,10071,10073],{"class":38,"line":236},[36,10072,64],{"class":42},[36,10074,9271],{"class":50},[36,10076,10077],{"class":38,"line":247},[36,10078,10079],{"class":50},"    Student stu;\n",[36,10081,10082],{"class":38,"line":637},[36,10083,250],{"class":50},[36,10085,10086,10088,10090],{"class":38,"line":646},[36,10087,43],{"class":42},[36,10089,47],{"class":46},[36,10091,7460],{"class":50},[36,10093,10094],{"class":38,"line":655},[36,10095,3076],{"class":50},[36,10097,10098],{"class":38,"line":660},[36,10099,10100],{"class":124},"    \u002F\u002F结构体嵌套结构体\n",[36,10102,10103],{"class":38,"line":665},[36,10104,10105],{"class":124},"    \u002F\u002F创建老师\n",[36,10107,10108],{"class":38,"line":674},[36,10109,10110],{"class":50},"    Teacher t;\n",[36,10112,10113,10116,10118,10120],{"class":38,"line":679},[36,10114,10115],{"class":50},"    t.id",[36,10117,70],{"class":42},[36,10119,1979],{"class":73},[36,10121,77],{"class":50},[36,10123,10124,10127,10129,10132],{"class":38,"line":692},[36,10125,10126],{"class":50},"    t.name",[36,10128,70],{"class":42},[36,10130,10131],{"class":110},"\"老王\"",[36,10133,77],{"class":50},[36,10135,10136,10139,10141,10143],{"class":38,"line":705},[36,10137,10138],{"class":50},"    t.age",[36,10140,70],{"class":42},[36,10142,2317],{"class":73},[36,10144,77],{"class":50},[36,10146,10147,10150,10152,10155],{"class":38,"line":710},[36,10148,10149],{"class":50},"    t.stu.name",[36,10151,70],{"class":42},[36,10153,10154],{"class":110},"\"小王\"",[36,10156,10157],{"class":50},"；\n",[36,10159,10160,10163,10165,10167],{"class":38,"line":722},[36,10161,10162],{"class":50},"    t.stu.age",[36,10164,70],{"class":42},[36,10166,2367],{"class":73},[36,10168,77],{"class":50},[36,10170,10171,10174,10176,10178],{"class":38,"line":750},[36,10172,10173],{"class":50},"    t.stu.score",[36,10175,70],{"class":42},[36,10177,2012],{"class":73},[36,10179,77],{"class":50},[36,10181,10182],{"class":38,"line":755},[36,10183,250],{"class":50},[14,10185,10187],{"id":10186},"_45结构体做函数参数","4.5结构体做函数参数",[19,10189,10190],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,10192,10194],{"className":28,"code":10193,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Student\n{\n    string name;\n    int age;\n    int score;\n};\n\u002F\u002F打印学生信息的函数\n\u002F\u002F值传递\nvoid printStudent1(struct Student s)\n{\n    cout \u003C\u003C s.name \u003C\u003C \" \" \u003C\u003C s.age \u003C\u003C \" \" \u003C\u003C s.score \u003C\u003C endl;\n}\n\u002F\u002F地址传递\nvoid printStudent2(struct Student *s)\n{\n    cout \u003C\u003C s->name \u003C\u003C \" \" \u003C\u003C s->age \u003C\u003C \" \" \u003C\u003C s->score \u003C\u003C endl;\n}\nint main()\n{\n    struct Student s;\n    s.name = \"张三\";\n    s.age = 20;\n    s.score = 85;\n    cout\u003C\u003C\"值传递:\"\u003C\u003Cendl;\n    printStudent1(s);\n    cout\u003C\u003C\"地址传递:\"\u003C\u003Cendl;\n    printStudent2(&s); \n    return 0;\n}\n",[33,10195,10196,10202,10212,10218,10224,10228,10232,10238,10244,10248,10253,10258,10275,10279,10311,10315,10320,10339,10343,10374,10378,10386,10390,10399,10411,10422,10434,10447,10455,10468,10480,10488],{"__ignoreMap":31},[36,10197,10198,10200],{"class":38,"line":39},[36,10199,3459],{"class":42},[36,10201,3462],{"class":110},[36,10203,10204,10206,10208,10210],{"class":38,"line":54},[36,10205,3467],{"class":42},[36,10207,3470],{"class":42},[36,10209,3473],{"class":46},[36,10211,77],{"class":50},[36,10213,10214,10216],{"class":38,"line":61},[36,10215,3459],{"class":42},[36,10217,9223],{"class":110},[36,10219,10220,10222],{"class":38,"line":80},[36,10221,9233],{"class":42},[36,10223,9236],{"class":46},[36,10225,10226],{"class":38,"line":96},[36,10227,3076],{"class":50},[36,10229,10230],{"class":38,"line":101},[36,10231,9259],{"class":50},[36,10233,10234,10236],{"class":38,"line":128},[36,10235,64],{"class":42},[36,10237,9271],{"class":50},[36,10239,10240,10242],{"class":38,"line":149},[36,10241,64],{"class":42},[36,10243,9283],{"class":50},[36,10245,10246],{"class":38,"line":154},[36,10247,5486],{"class":50},[36,10249,10250],{"class":38,"line":167},[36,10251,10252],{"class":124},"\u002F\u002F打印学生信息的函数\n",[36,10254,10255],{"class":38,"line":172},[36,10256,10257],{"class":124},"\u002F\u002F值传递\n",[36,10259,10260,10262,10265,10267,10269,10271,10273],{"class":38,"line":192},[36,10261,463],{"class":42},[36,10263,10264],{"class":46}," printStudent1",[36,10266,222],{"class":50},[36,10268,9233],{"class":42},[36,10270,9372],{"class":46},[36,10272,9899],{"class":473},[36,10274,1680],{"class":50},[36,10276,10277],{"class":38,"line":211},[36,10278,3076],{"class":50},[36,10280,10281,10283,10285,10288,10290,10293,10295,10298,10300,10302,10304,10307,10309],{"class":38,"line":216},[36,10282,104],{"class":50},[36,10284,107],{"class":42},[36,10286,10287],{"class":50}," s.name ",[36,10289,107],{"class":42},[36,10291,10292],{"class":110}," \" \"",[36,10294,114],{"class":42},[36,10296,10297],{"class":50}," s.age ",[36,10299,107],{"class":42},[36,10301,10292],{"class":110},[36,10303,114],{"class":42},[36,10305,10306],{"class":50}," s.score ",[36,10308,107],{"class":42},[36,10310,747],{"class":50},[36,10312,10313],{"class":38,"line":231},[36,10314,250],{"class":50},[36,10316,10317],{"class":38,"line":236},[36,10318,10319],{"class":124},"\u002F\u002F地址传递\n",[36,10321,10322,10324,10327,10329,10331,10333,10335,10337],{"class":38,"line":247},[36,10323,463],{"class":42},[36,10325,10326],{"class":46}," printStudent2",[36,10328,222],{"class":50},[36,10330,9233],{"class":42},[36,10332,9372],{"class":46},[36,10334,561],{"class":42},[36,10336,2362],{"class":473},[36,10338,1680],{"class":50},[36,10340,10341],{"class":38,"line":637},[36,10342,3076],{"class":50},[36,10344,10345,10347,10349,10352,10354,10356,10358,10361,10363,10365,10367,10370,10372],{"class":38,"line":646},[36,10346,104],{"class":50},[36,10348,107],{"class":42},[36,10350,10351],{"class":50}," s->name ",[36,10353,107],{"class":42},[36,10355,10292],{"class":110},[36,10357,114],{"class":42},[36,10359,10360],{"class":50}," s->age ",[36,10362,107],{"class":42},[36,10364,10292],{"class":110},[36,10366,114],{"class":42},[36,10368,10369],{"class":50}," s->score ",[36,10371,107],{"class":42},[36,10373,747],{"class":50},[36,10375,10376],{"class":38,"line":655},[36,10377,250],{"class":50},[36,10379,10380,10382,10384],{"class":38,"line":660},[36,10381,43],{"class":42},[36,10383,47],{"class":46},[36,10385,3484],{"class":50},[36,10387,10388],{"class":38,"line":665},[36,10389,3076],{"class":50},[36,10391,10392,10394,10396],{"class":38,"line":674},[36,10393,9369],{"class":42},[36,10395,9372],{"class":46},[36,10397,10398],{"class":50}," s;\n",[36,10400,10401,10404,10406,10409],{"class":38,"line":679},[36,10402,10403],{"class":50},"    s.name ",[36,10405,70],{"class":42},[36,10407,10408],{"class":110}," \"张三\"",[36,10410,77],{"class":50},[36,10412,10413,10416,10418,10420],{"class":38,"line":692},[36,10414,10415],{"class":50},"    s.age ",[36,10417,70],{"class":42},[36,10419,319],{"class":73},[36,10421,77],{"class":50},[36,10423,10424,10427,10429,10432],{"class":38,"line":705},[36,10425,10426],{"class":50},"    s.score ",[36,10428,70],{"class":42},[36,10430,10431],{"class":73}," 85",[36,10433,77],{"class":50},[36,10435,10436,10438,10440,10443,10445],{"class":38,"line":710},[36,10437,3081],{"class":50},[36,10439,107],{"class":42},[36,10441,10442],{"class":110},"\"值传递:\"",[36,10444,107],{"class":42},[36,10446,2732],{"class":50},[36,10448,10449,10452],{"class":38,"line":722},[36,10450,10451],{"class":46},"    printStudent1",[36,10453,10454],{"class":50},"(s);\n",[36,10456,10457,10459,10461,10464,10466],{"class":38,"line":750},[36,10458,3081],{"class":50},[36,10460,107],{"class":42},[36,10462,10463],{"class":110},"\"地址传递:\"",[36,10465,107],{"class":42},[36,10467,2732],{"class":50},[36,10469,10470,10473,10475,10477],{"class":38,"line":755},[36,10471,10472],{"class":46},"    printStudent2",[36,10474,222],{"class":50},[36,10476,763],{"class":42},[36,10478,10479],{"class":50},"s); \n",[36,10481,10482,10484,10486],{"class":38,"line":777},[36,10483,239],{"class":42},[36,10485,242],{"class":73},[36,10487,77],{"class":50},[36,10489,10490],{"class":38,"line":802},[36,10491,250],{"class":50},[19,10493,885],{},[2674,10495,10496,10499],{},[259,10497,10498],{},"1.先定义结构体，不要在函数中写结构体的定义",[259,10500,10501],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10503,10505],{"id":10504},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10507,10508],{},"用const防止误操作",[26,10510,10512],{"className":28,"code":10511,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nsctuct Student\n{\n    string name;\n    int age;\n    int score;\n};\nvoid printStudents(student s)\n{\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\nint main() \n{\n    Student s={\"张三\",18,18};\n    printStudent(s);\n\n}\n",[33,10513,10514,10520,10530,10536,10541,10545,10549,10555,10561,10565,10581,10585,10608,10612,10620,10624,10645,10652,10656],{"__ignoreMap":31},[36,10515,10516,10518],{"class":38,"line":39},[36,10517,3459],{"class":42},[36,10519,3462],{"class":110},[36,10521,10522,10524,10526,10528],{"class":38,"line":54},[36,10523,3467],{"class":42},[36,10525,3470],{"class":42},[36,10527,3473],{"class":46},[36,10529,77],{"class":50},[36,10531,10532,10534],{"class":38,"line":61},[36,10533,3459],{"class":42},[36,10535,9223],{"class":110},[36,10537,10538],{"class":38,"line":80},[36,10539,10540],{"class":50},"sctuct Student\n",[36,10542,10543],{"class":38,"line":96},[36,10544,3076],{"class":50},[36,10546,10547],{"class":38,"line":101},[36,10548,9259],{"class":50},[36,10550,10551,10553],{"class":38,"line":128},[36,10552,64],{"class":42},[36,10554,9271],{"class":50},[36,10556,10557,10559],{"class":38,"line":149},[36,10558,64],{"class":42},[36,10560,9283],{"class":50},[36,10562,10563],{"class":38,"line":154},[36,10564,5486],{"class":50},[36,10566,10567,10569,10572,10574,10577,10579],{"class":38,"line":167},[36,10568,463],{"class":42},[36,10570,10571],{"class":46}," printStudents",[36,10573,222],{"class":50},[36,10575,10576],{"class":46},"student",[36,10578,9899],{"class":473},[36,10580,1680],{"class":50},[36,10582,10583],{"class":38,"line":172},[36,10584,3076],{"class":50},[36,10586,10587,10589,10591,10594,10596,10599,10601,10604,10606],{"class":38,"line":192},[36,10588,3081],{"class":50},[36,10590,107],{"class":42},[36,10592,10593],{"class":50},"s.name",[36,10595,107],{"class":42},[36,10597,10598],{"class":50},"s.age",[36,10600,107],{"class":42},[36,10602,10603],{"class":50},"s.score",[36,10605,107],{"class":42},[36,10607,2732],{"class":50},[36,10609,10610],{"class":38,"line":211},[36,10611,250],{"class":50},[36,10613,10614,10616,10618],{"class":38,"line":216},[36,10615,43],{"class":42},[36,10617,47],{"class":46},[36,10619,7460],{"class":50},[36,10621,10622],{"class":38,"line":231},[36,10623,3076],{"class":50},[36,10625,10626,10629,10631,10633,10635,10637,10639,10641,10643],{"class":38,"line":236},[36,10627,10628],{"class":50},"    Student s",[36,10630,70],{"class":42},[36,10632,2563],{"class":50},[36,10634,9390],{"class":110},[36,10636,2045],{"class":50},[36,10638,2317],{"class":73},[36,10640,2045],{"class":50},[36,10642,2317],{"class":73},[36,10644,5486],{"class":50},[36,10646,10647,10650],{"class":38,"line":247},[36,10648,10649],{"class":46},"    printStudent",[36,10651,10454],{"class":50},[36,10653,10654],{"class":38,"line":637},[36,10655,58],{"emptyLinePlaceholder":57},[36,10657,10658],{"class":38,"line":646},[36,10659,250],{"class":50},[19,10661,885],{},[2674,10663,10664,10667,10670],{},[259,10665,10666],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[259,10668,10669],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[259,10671,10672],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,10674,10676],{"className":28,"code":10675,"language":30,"meta":31,"style":31},"void printStudents(const student *s)\n{\n    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n    cout\u003C\u003Cs.name\u003C\u003Cs.age\u003C\u003Cs.score\u003C\u003Cendl;\n}\n",[33,10677,10678,10697,10701,10706,10726],{"__ignoreMap":31},[36,10679,10680,10682,10684,10686,10688,10691,10693,10695],{"class":38,"line":39},[36,10681,463],{"class":42},[36,10683,10571],{"class":46},[36,10685,222],{"class":50},[36,10687,1437],{"class":42},[36,10689,10690],{"class":46}," student",[36,10692,561],{"class":42},[36,10694,2362],{"class":473},[36,10696,1680],{"class":50},[36,10698,10699],{"class":38,"line":54},[36,10700,3076],{"class":50},[36,10702,10703],{"class":38,"line":61},[36,10704,10705],{"class":124},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[36,10707,10708,10710,10712,10714,10716,10718,10720,10722,10724],{"class":38,"line":80},[36,10709,3081],{"class":50},[36,10711,107],{"class":42},[36,10713,10593],{"class":50},[36,10715,107],{"class":42},[36,10717,10598],{"class":50},[36,10719,107],{"class":42},[36,10721,10603],{"class":50},[36,10723,107],{"class":42},[36,10725,2732],{"class":50},[36,10727,10728],{"class":38,"line":96},[36,10729,250],{"class":50},[14,10731,10733],{"id":10732},"_47案例","4.7案例",[256,10735,10736],{},[259,10737,10738],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,10740,10742],{"className":28,"code":10741,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\n#include\u003Cctime>\n\u002F\u002F定义学生结构体\nstruct Student\n{\n    string sName;\n    int age;\n    int score;\n};\n\u002F\u002F定义老师结构体\nstruct Teacher\n{\n    string tName;\n    \u002F\u002F学生数组\n    struct Student sArray[5];\n};\n\u002F\u002F给老师和学生赋值的函数\nvoid allocateSpace(struct Teacher tArray[],int len)\n{\n    string nameSeed=\"ABCDE\";\n    for (int i = 0; i \u003C len; i++)\n    {\n        tArray[i].tName = \"Teacher_\";\n        tArray[i].tName +=nameSeed[i];\n\n        \u002F\u002F通过循环给每名老师带的学生赋值\n        for (int j = 0; j \u003C 5; j++)\n        {\n            tArray[i].sArray[j].sName = \"Student_\";\n            tArray[i].sArray[j].sName += nameSeed[j];\n            int random=rand()%60+40;\u002F\u002F40~99\n            tArray[i].sArray[j].age = 20;\n            tArray[i].sArray[j].score = random;\n        }\n    }\n}\n\u002F\u002F打印所有信息的函数\nvoid printInfo(struct Teacher tArray[], int len)\n{\n    for (int i = 0; i \u003C len; i++)\n    {\n        cout \u003C\u003C \"Teacher: \" \u003C\u003C tArray[i].tName \u003C\u003C endl;\n        for (int j = 0; j \u003C 5; j++)\n        {\n            cout \u003C\u003C \"\\tStudent: \" \u003C\u003C tArray[i].sArray[j].sName\u003C\u003Cendl;\n            cout \u003C\u003C \"\\tAge: \" \u003C\u003C tArray[i].sArray[j].age \u003C\u003C endl;\n            cout \u003C\u003C \"\\tScore: \" \u003C\u003C tArray[i].sArray[j].score \u003C\u003C endl;   \n        }\n    }\n}\nint main()\n{\n    \u002F\u002F随机数种子\n    srand((unsigned int)time(NULL));\n    \u002F\u002F1.创建3名老师的数组\n    struct Teacher tArray[3];\n    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n    int len = sizeof(tArray) \u002F sizeof(tArray[0]);\n    allocateSpace(tArray, len);\n    \u002F\u002F3.打印所有老师及所带的学生信息\n    printInfo(tArray, len);\n\n}\n",[33,10743,10744,10750,10760,10766,10773,10777,10783,10787,10792,10798,10804,10808,10812,10818,10822,10827,10832,10845,10849,10854,10880,10884,10896,10923,10927,10939,10949,10953,10958,10987,10991,11003,11012,11039,11050,11060,11064,11068,11072,11077,11101,11105,11129,11133,11152,11178,11182,11207,11230,11254,11259,11264,11269,11278,11283,11289,11310,11316,11330,11336,11363,11372,11378,11386,11391],{"__ignoreMap":31},[36,10745,10746,10748],{"class":38,"line":39},[36,10747,3459],{"class":42},[36,10749,3462],{"class":110},[36,10751,10752,10754,10756,10758],{"class":38,"line":54},[36,10753,3467],{"class":42},[36,10755,3470],{"class":42},[36,10757,3473],{"class":46},[36,10759,77],{"class":50},[36,10761,10762,10764],{"class":38,"line":61},[36,10763,3459],{"class":42},[36,10765,9223],{"class":110},[36,10767,10768,10770],{"class":38,"line":80},[36,10769,3459],{"class":42},[36,10771,10772],{"class":110},"\u003Cctime>\n",[36,10774,10775],{"class":38,"line":96},[36,10776,10009],{"class":124},[36,10778,10779,10781],{"class":38,"line":101},[36,10780,9233],{"class":42},[36,10782,9236],{"class":46},[36,10784,10785],{"class":38,"line":128},[36,10786,3076],{"class":50},[36,10788,10789],{"class":38,"line":149},[36,10790,10791],{"class":50},"    string sName;\n",[36,10793,10794,10796],{"class":38,"line":154},[36,10795,64],{"class":42},[36,10797,9271],{"class":50},[36,10799,10800,10802],{"class":38,"line":167},[36,10801,64],{"class":42},[36,10803,9283],{"class":50},[36,10805,10806],{"class":38,"line":172},[36,10807,5486],{"class":50},[36,10809,10810],{"class":38,"line":192},[36,10811,10046],{"class":124},[36,10813,10814,10816],{"class":38,"line":211},[36,10815,9233],{"class":42},[36,10817,10053],{"class":46},[36,10819,10820],{"class":38,"line":216},[36,10821,3076],{"class":50},[36,10823,10824],{"class":38,"line":231},[36,10825,10826],{"class":50},"    string tName;\n",[36,10828,10829],{"class":38,"line":236},[36,10830,10831],{"class":124},"    \u002F\u002F学生数组\n",[36,10833,10834,10836,10838,10841,10843],{"class":38,"line":247},[36,10835,9369],{"class":42},[36,10837,9372],{"class":46},[36,10839,10840],{"class":50}," sArray[",[36,10842,1987],{"class":73},[36,10844,6179],{"class":50},[36,10846,10847],{"class":38,"line":637},[36,10848,5486],{"class":50},[36,10850,10851],{"class":38,"line":646},[36,10852,10853],{"class":124},"\u002F\u002F给老师和学生赋值的函数\n",[36,10855,10856,10858,10861,10863,10865,10868,10871,10874,10876,10878],{"class":38,"line":655},[36,10857,463],{"class":42},[36,10859,10860],{"class":46}," allocateSpace",[36,10862,222],{"class":50},[36,10864,9233],{"class":42},[36,10866,10867],{"class":46}," Teacher",[36,10869,10870],{"class":473}," tArray",[36,10872,10873],{"class":50},"[],",[36,10875,43],{"class":42},[36,10877,8805],{"class":473},[36,10879,1680],{"class":50},[36,10881,10882],{"class":38,"line":660},[36,10883,3076],{"class":50},[36,10885,10886,10889,10891,10894],{"class":38,"line":665},[36,10887,10888],{"class":50},"    string nameSeed",[36,10890,70],{"class":42},[36,10892,10893],{"class":110},"\"ABCDE\"",[36,10895,77],{"class":50},[36,10897,10898,10900,10902,10904,10907,10909,10911,10914,10916,10919,10921],{"class":38,"line":674},[36,10899,4692],{"class":42},[36,10901,3180],{"class":50},[36,10903,43],{"class":42},[36,10905,10906],{"class":50}," i ",[36,10908,70],{"class":42},[36,10910,242],{"class":73},[36,10912,10913],{"class":50},"; i ",[36,10915,2577],{"class":42},[36,10917,10918],{"class":50}," len; i",[36,10920,3798],{"class":42},[36,10922,1680],{"class":50},[36,10924,10925],{"class":38,"line":679},[36,10926,3537],{"class":50},[36,10928,10929,10932,10934,10937],{"class":38,"line":692},[36,10930,10931],{"class":50},"        tArray[i].tName ",[36,10933,70],{"class":42},[36,10935,10936],{"class":110}," \"Teacher_\"",[36,10938,77],{"class":50},[36,10940,10941,10943,10946],{"class":38,"line":705},[36,10942,10931],{"class":50},[36,10944,10945],{"class":42},"+=",[36,10947,10948],{"class":50},"nameSeed[i];\n",[36,10950,10951],{"class":38,"line":710},[36,10952,58],{"emptyLinePlaceholder":57},[36,10954,10955],{"class":38,"line":722},[36,10956,10957],{"class":124},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[36,10959,10960,10962,10964,10966,10969,10971,10973,10976,10978,10980,10983,10985],{"class":38,"line":750},[36,10961,4894],{"class":42},[36,10963,3180],{"class":50},[36,10965,43],{"class":42},[36,10967,10968],{"class":50}," j ",[36,10970,70],{"class":42},[36,10972,242],{"class":73},[36,10974,10975],{"class":50},"; j ",[36,10977,2577],{"class":42},[36,10979,3654],{"class":73},[36,10981,10982],{"class":50},"; j",[36,10984,3798],{"class":42},[36,10986,1680],{"class":50},[36,10988,10989],{"class":38,"line":755},[36,10990,4012],{"class":50},[36,10992,10993,10996,10998,11001],{"class":38,"line":777},[36,10994,10995],{"class":50},"            tArray[i].sArray[j].sName ",[36,10997,70],{"class":42},[36,10999,11000],{"class":110}," \"Student_\"",[36,11002,77],{"class":50},[36,11004,11005,11007,11009],{"class":38,"line":802},[36,11006,10995],{"class":50},[36,11008,10945],{"class":42},[36,11010,11011],{"class":50}," nameSeed[j];\n",[36,11013,11014,11017,11020,11022,11024,11026,11028,11030,11032,11034,11036],{"class":38,"line":807},[36,11015,11016],{"class":42},"            int",[36,11018,11019],{"class":50}," random",[36,11021,70],{"class":42},[36,11023,3926],{"class":46},[36,11025,3929],{"class":50},[36,11027,1996],{"class":42},[36,11029,2574],{"class":73},[36,11031,2148],{"class":42},[36,11033,2068],{"class":73},[36,11035,926],{"class":50},[36,11037,11038],{"class":124},"\u002F\u002F40~99\n",[36,11040,11041,11044,11046,11048],{"class":38,"line":818},[36,11042,11043],{"class":50},"            tArray[i].sArray[j].age ",[36,11045,70],{"class":42},[36,11047,319],{"class":73},[36,11049,77],{"class":50},[36,11051,11052,11055,11057],{"class":38,"line":843},[36,11053,11054],{"class":50},"            tArray[i].sArray[j].score ",[36,11056,70],{"class":42},[36,11058,11059],{"class":50}," random;\n",[36,11061,11062],{"class":38,"line":848},[36,11063,4031],{"class":50},[36,11065,11066],{"class":38,"line":859},[36,11067,3693],{"class":50},[36,11069,11070],{"class":38,"line":864},[36,11071,250],{"class":50},[36,11073,11074],{"class":38,"line":873},[36,11075,11076],{"class":124},"\u002F\u002F打印所有信息的函数\n",[36,11078,11079,11081,11084,11086,11088,11090,11092,11095,11097,11099],{"class":38,"line":9454},[36,11080,463],{"class":42},[36,11082,11083],{"class":46}," printInfo",[36,11085,222],{"class":50},[36,11087,9233],{"class":42},[36,11089,10867],{"class":46},[36,11091,10870],{"class":473},[36,11093,11094],{"class":50},"[], ",[36,11096,43],{"class":42},[36,11098,8805],{"class":473},[36,11100,1680],{"class":50},[36,11102,11103],{"class":38,"line":9481},[36,11104,3076],{"class":50},[36,11106,11107,11109,11111,11113,11115,11117,11119,11121,11123,11125,11127],{"class":38,"line":9486},[36,11108,4692],{"class":42},[36,11110,3180],{"class":50},[36,11112,43],{"class":42},[36,11114,10906],{"class":50},[36,11116,70],{"class":42},[36,11118,242],{"class":73},[36,11120,10913],{"class":50},[36,11122,2577],{"class":42},[36,11124,10918],{"class":50},[36,11126,3798],{"class":42},[36,11128,1680],{"class":50},[36,11130,11131],{"class":38,"line":9492},[36,11132,3537],{"class":50},[36,11134,11135,11138,11140,11143,11145,11148,11150],{"class":38,"line":9504},[36,11136,11137],{"class":50},"        cout ",[36,11139,107],{"class":42},[36,11141,11142],{"class":110}," \"Teacher: \"",[36,11144,114],{"class":42},[36,11146,11147],{"class":50}," tArray[i].tName ",[36,11149,107],{"class":42},[36,11151,747],{"class":50},[36,11153,11154,11156,11158,11160,11162,11164,11166,11168,11170,11172,11174,11176],{"class":38,"line":9516},[36,11155,4894],{"class":42},[36,11157,3180],{"class":50},[36,11159,43],{"class":42},[36,11161,10968],{"class":50},[36,11163,70],{"class":42},[36,11165,242],{"class":73},[36,11167,10975],{"class":50},[36,11169,2577],{"class":42},[36,11171,3654],{"class":73},[36,11173,10982],{"class":50},[36,11175,3798],{"class":42},[36,11177,1680],{"class":50},[36,11179,11180],{"class":38,"line":9528},[36,11181,4012],{"class":50},[36,11183,11185,11188,11190,11193,11195,11198,11200,11203,11205],{"class":38,"line":11184},47,[36,11186,11187],{"class":50},"            cout ",[36,11189,107],{"class":42},[36,11191,11192],{"class":110}," \"",[36,11194,2767],{"class":73},[36,11196,11197],{"class":110},"Student: \"",[36,11199,114],{"class":42},[36,11201,11202],{"class":50}," tArray[i].sArray[j].sName",[36,11204,107],{"class":42},[36,11206,2732],{"class":50},[36,11208,11210,11212,11214,11216,11218,11221,11223,11226,11228],{"class":38,"line":11209},48,[36,11211,11187],{"class":50},[36,11213,107],{"class":42},[36,11215,11192],{"class":110},[36,11217,2767],{"class":73},[36,11219,11220],{"class":110},"Age: \"",[36,11222,114],{"class":42},[36,11224,11225],{"class":50}," tArray[i].sArray[j].age ",[36,11227,107],{"class":42},[36,11229,747],{"class":50},[36,11231,11233,11235,11237,11239,11241,11244,11246,11249,11251],{"class":38,"line":11232},49,[36,11234,11187],{"class":50},[36,11236,107],{"class":42},[36,11238,11192],{"class":110},[36,11240,2767],{"class":73},[36,11242,11243],{"class":110},"Score: \"",[36,11245,114],{"class":42},[36,11247,11248],{"class":50}," tArray[i].sArray[j].score ",[36,11250,107],{"class":42},[36,11252,11253],{"class":50}," endl;   \n",[36,11255,11257],{"class":38,"line":11256},50,[36,11258,4031],{"class":50},[36,11260,11262],{"class":38,"line":11261},51,[36,11263,3693],{"class":50},[36,11265,11267],{"class":38,"line":11266},52,[36,11268,250],{"class":50},[36,11270,11272,11274,11276],{"class":38,"line":11271},53,[36,11273,43],{"class":42},[36,11275,47],{"class":46},[36,11277,3484],{"class":50},[36,11279,11281],{"class":38,"line":11280},54,[36,11282,3076],{"class":50},[36,11284,11286],{"class":38,"line":11285},55,[36,11287,11288],{"class":124},"    \u002F\u002F随机数种子\n",[36,11290,11292,11294,11296,11298,11300,11302,11304,11306,11308],{"class":38,"line":11291},56,[36,11293,3877],{"class":46},[36,11295,3880],{"class":50},[36,11297,3883],{"class":42},[36,11299,965],{"class":42},[36,11301,2096],{"class":50},[36,11303,3890],{"class":46},[36,11305,222],{"class":50},[36,11307,3895],{"class":73},[36,11309,3898],{"class":50},[36,11311,11313],{"class":38,"line":11312},57,[36,11314,11315],{"class":124},"    \u002F\u002F1.创建3名老师的数组\n",[36,11317,11319,11321,11323,11326,11328],{"class":38,"line":11318},58,[36,11320,9369],{"class":42},[36,11322,10867],{"class":46},[36,11324,11325],{"class":50}," tArray[",[36,11327,1741],{"class":73},[36,11329,6179],{"class":50},[36,11331,11333],{"class":38,"line":11332},59,[36,11334,11335],{"class":124},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[36,11337,11339,11341,11344,11346,11349,11352,11354,11356,11359,11361],{"class":38,"line":11338},60,[36,11340,64],{"class":42},[36,11342,11343],{"class":50}," len ",[36,11345,70],{"class":42},[36,11347,11348],{"class":42}," sizeof",[36,11350,11351],{"class":50},"(tArray) ",[36,11353,2251],{"class":42},[36,11355,11348],{"class":42},[36,11357,11358],{"class":50},"(tArray[",[36,11360,1859],{"class":73},[36,11362,5347],{"class":50},[36,11364,11366,11369],{"class":38,"line":11365},61,[36,11367,11368],{"class":46},"    allocateSpace",[36,11370,11371],{"class":50},"(tArray, len);\n",[36,11373,11375],{"class":38,"line":11374},62,[36,11376,11377],{"class":124},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[36,11379,11381,11384],{"class":38,"line":11380},63,[36,11382,11383],{"class":46},"    printInfo",[36,11385,11371],{"class":50},[36,11387,11389],{"class":38,"line":11388},64,[36,11390,58],{"emptyLinePlaceholder":57},[36,11392,11394],{"class":38,"line":11393},65,[36,11395,250],{"class":50},[256,11397,11398],{"start":54},[259,11399,11400,11403],{},[887,11401,11402],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11405,11406],{},"五名英雄信息如下：",[26,11408,11410],{"className":895,"code":11409,"language":897,"meta":31,"style":31},"        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n",[33,11411,11412,11430,11447,11464,11481],{"__ignoreMap":31},[36,11413,11414,11416,11419,11421,11423,11425,11428],{"class":38,"line":39},[36,11415,6406],{"class":50},[36,11417,11418],{"class":110},"\"刘备\"",[36,11420,2045],{"class":50},[36,11422,2442],{"class":73},[36,11424,2045],{"class":50},[36,11426,11427],{"class":110},"\"男\"",[36,11429,6419],{"class":50},[36,11431,11432,11434,11437,11439,11441,11443,11445],{"class":38,"line":54},[36,11433,6406],{"class":50},[36,11435,11436],{"class":110},"\"关羽\"",[36,11438,2045],{"class":50},[36,11440,2417],{"class":73},[36,11442,2045],{"class":50},[36,11444,11427],{"class":110},[36,11446,6419],{"class":50},[36,11448,11449,11451,11454,11456,11458,11460,11462],{"class":38,"line":61},[36,11450,6406],{"class":50},[36,11452,11453],{"class":110},"\"张飞\"",[36,11455,2045],{"class":50},[36,11457,2367],{"class":73},[36,11459,2045],{"class":50},[36,11461,11427],{"class":110},[36,11463,6419],{"class":50},[36,11465,11466,11468,11471,11473,11475,11477,11479],{"class":38,"line":80},[36,11467,6406],{"class":50},[36,11469,11470],{"class":110},"\"赵云\"",[36,11472,2045],{"class":50},[36,11474,2392],{"class":73},[36,11476,2045],{"class":50},[36,11478,11427],{"class":110},[36,11480,6419],{"class":50},[36,11482,11483,11485,11488,11490,11492,11494,11497],{"class":38,"line":96},[36,11484,6406],{"class":50},[36,11486,11487],{"class":110},"\"貂蝉\"",[36,11489,2045],{"class":50},[36,11491,2342],{"class":73},[36,11493,2045],{"class":50},[36,11495,11496],{"class":110},"\"女\"",[36,11498,6419],{"class":50},[19,11500,11501],{},"代码：",[26,11503,11505],{"className":28,"code":11504,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nstruct Sanguo\n{\n    string name;\n    int age;\n    string gender;\n};\n\u002F\u002F定义排序函数\nvoid bubbleSort(Sanguo *s,int len)\n{\n    for(int i=0;i\u003Clen;i++)\n    {\n     for (int j=0;j\u003Clen-1-i;j++)\n     {\n         if ((s+j)->age > (s+j+1)->age)\n         {\n             Sanguo temp=*(s+j);\n             *(s+j)=*(s+j+1);\n             *(s+j+1)=temp;\n         }\n     }\n    }\n}\n\u002F\u002F定义打印函数\nvoid printInfo(Sanguo *s,int len)\n{\n    for (int i=0;i\u003Clen;i++)\n    {\n        cout\u003C\u003C\"\\t姓名：\"\u003C\u003C(s+i)->name\u003C\u003C\"\\t年龄：\"\u003C\u003C(s+i)->age\u003C\u003C\"\\t性别：\"\u003C\u003C(s+i)->gender\u003C\u003Cendl;\n    }\n}\nint main()\n{\n    \u002F\u002F定义结构体变量\n    Sanguo s1[5]=\n    {\n        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n    };\n    int len=sizeof(s1)\u002Fsizeof(s1[0]);\n    Sanguo *s = &s1[0];\n    \u002F\u002F排序前：\n    cout \u003C\u003C \"排序前：\" \u003C\u003C endl;\n    printInfo(s,len);\n    \u002F\u002F调用排序函数\n    bubbleSort(s,len);\n    \u002F\u002F排序后\n    cout \u003C\u003C \"排序后：\" \u003C\u003C endl;\n    printInfo(s,len);\n}\n",[33,11506,11507,11513,11523,11529,11536,11540,11544,11550,11555,11559,11564,11587,11591,11616,11620,11653,11658,11687,11692,11707,11733,11753,11758,11763,11767,11771,11776,11798,11802,11826,11830,11892,11896,11900,11908,11912,11917,11928,11932,11948,11964,11980,11996,12012,12016,12036,12057,12062,12075,12082,12087,12093,12098,12111,12117],{"__ignoreMap":31},[36,11508,11509,11511],{"class":38,"line":39},[36,11510,3459],{"class":42},[36,11512,3462],{"class":110},[36,11514,11515,11517,11519,11521],{"class":38,"line":54},[36,11516,3467],{"class":42},[36,11518,3470],{"class":42},[36,11520,3473],{"class":46},[36,11522,77],{"class":50},[36,11524,11525,11527],{"class":38,"line":61},[36,11526,3459],{"class":42},[36,11528,9223],{"class":110},[36,11530,11531,11533],{"class":38,"line":80},[36,11532,9233],{"class":42},[36,11534,11535],{"class":46}," Sanguo\n",[36,11537,11538],{"class":38,"line":96},[36,11539,3076],{"class":50},[36,11541,11542],{"class":38,"line":101},[36,11543,9259],{"class":50},[36,11545,11546,11548],{"class":38,"line":128},[36,11547,64],{"class":42},[36,11549,9271],{"class":50},[36,11551,11552],{"class":38,"line":149},[36,11553,11554],{"class":50},"    string gender;\n",[36,11556,11557],{"class":38,"line":154},[36,11558,5486],{"class":50},[36,11560,11561],{"class":38,"line":167},[36,11562,11563],{"class":124},"\u002F\u002F定义排序函数\n",[36,11565,11566,11568,11570,11572,11575,11577,11579,11581,11583,11585],{"class":38,"line":172},[36,11567,463],{"class":42},[36,11569,8790],{"class":46},[36,11571,222],{"class":50},[36,11573,11574],{"class":46},"Sanguo",[36,11576,561],{"class":42},[36,11578,2362],{"class":473},[36,11580,2045],{"class":50},[36,11582,43],{"class":42},[36,11584,8805],{"class":473},[36,11586,1680],{"class":50},[36,11588,11589],{"class":38,"line":192},[36,11590,3076],{"class":50},[36,11592,11593,11595,11597,11599,11601,11603,11605,11607,11609,11612,11614],{"class":38,"line":211},[36,11594,4692],{"class":42},[36,11596,222],{"class":50},[36,11598,43],{"class":42},[36,11600,4523],{"class":50},[36,11602,70],{"class":42},[36,11604,1859],{"class":73},[36,11606,4530],{"class":50},[36,11608,2577],{"class":42},[36,11610,11611],{"class":50},"len;i",[36,11613,3798],{"class":42},[36,11615,1680],{"class":50},[36,11617,11618],{"class":38,"line":216},[36,11619,3537],{"class":50},[36,11621,11622,11625,11627,11629,11631,11633,11635,11637,11639,11641,11643,11645,11647,11649,11651],{"class":38,"line":231},[36,11623,11624],{"class":42},"     for",[36,11626,3180],{"class":50},[36,11628,43],{"class":42},[36,11630,4901],{"class":50},[36,11632,70],{"class":42},[36,11634,1859],{"class":73},[36,11636,4908],{"class":50},[36,11638,2577],{"class":42},[36,11640,8832],{"class":50},[36,11642,2199],{"class":42},[36,11644,1885],{"class":73},[36,11646,2199],{"class":42},[36,11648,5041],{"class":50},[36,11650,3798],{"class":42},[36,11652,1680],{"class":50},[36,11654,11655],{"class":38,"line":236},[36,11656,11657],{"class":50},"     {\n",[36,11659,11660,11663,11666,11668,11671,11673,11676,11678,11680,11682,11684],{"class":38,"line":247},[36,11661,11662],{"class":42},"         if",[36,11664,11665],{"class":50}," ((s",[36,11667,2148],{"class":42},[36,11669,11670],{"class":50},"j)->age ",[36,11672,2627],{"class":42},[36,11674,11675],{"class":50}," (s",[36,11677,2148],{"class":42},[36,11679,2134],{"class":50},[36,11681,2148],{"class":42},[36,11683,1885],{"class":73},[36,11685,11686],{"class":50},")->age)\n",[36,11688,11689],{"class":38,"line":637},[36,11690,11691],{"class":50},"         {\n",[36,11693,11694,11697,11699,11702,11704],{"class":38,"line":646},[36,11695,11696],{"class":50},"             Sanguo temp",[36,11698,8629],{"class":42},[36,11700,11701],{"class":50},"(s",[36,11703,2148],{"class":42},[36,11705,11706],{"class":50},"j);\n",[36,11708,11709,11712,11714,11716,11719,11721,11723,11725,11727,11729,11731],{"class":38,"line":655},[36,11710,11711],{"class":42},"             *",[36,11713,11701],{"class":50},[36,11715,2148],{"class":42},[36,11717,11718],{"class":50},"j)",[36,11720,8629],{"class":42},[36,11722,11701],{"class":50},[36,11724,2148],{"class":42},[36,11726,2134],{"class":50},[36,11728,2148],{"class":42},[36,11730,1885],{"class":73},[36,11732,228],{"class":50},[36,11734,11735,11737,11739,11741,11743,11745,11747,11749,11751],{"class":38,"line":660},[36,11736,11711],{"class":42},[36,11738,11701],{"class":50},[36,11740,2148],{"class":42},[36,11742,2134],{"class":50},[36,11744,2148],{"class":42},[36,11746,1885],{"class":73},[36,11748,2096],{"class":50},[36,11750,70],{"class":42},[36,11752,5769],{"class":50},[36,11754,11755],{"class":38,"line":665},[36,11756,11757],{"class":50},"         }\n",[36,11759,11760],{"class":38,"line":674},[36,11761,11762],{"class":50},"     }\n",[36,11764,11765],{"class":38,"line":679},[36,11766,3693],{"class":50},[36,11768,11769],{"class":38,"line":692},[36,11770,250],{"class":50},[36,11772,11773],{"class":38,"line":705},[36,11774,11775],{"class":124},"\u002F\u002F定义打印函数\n",[36,11777,11778,11780,11782,11784,11786,11788,11790,11792,11794,11796],{"class":38,"line":710},[36,11779,463],{"class":42},[36,11781,11083],{"class":46},[36,11783,222],{"class":50},[36,11785,11574],{"class":46},[36,11787,561],{"class":42},[36,11789,2362],{"class":473},[36,11791,2045],{"class":50},[36,11793,43],{"class":42},[36,11795,8805],{"class":473},[36,11797,1680],{"class":50},[36,11799,11800],{"class":38,"line":722},[36,11801,3076],{"class":50},[36,11803,11804,11806,11808,11810,11812,11814,11816,11818,11820,11822,11824],{"class":38,"line":750},[36,11805,4692],{"class":42},[36,11807,3180],{"class":50},[36,11809,43],{"class":42},[36,11811,4523],{"class":50},[36,11813,70],{"class":42},[36,11815,1859],{"class":73},[36,11817,4530],{"class":50},[36,11819,2577],{"class":42},[36,11821,11611],{"class":50},[36,11823,3798],{"class":42},[36,11825,1680],{"class":50},[36,11827,11828],{"class":38,"line":755},[36,11829,3537],{"class":50},[36,11831,11832,11834,11836,11838,11840,11843,11845,11847,11849,11852,11854,11856,11858,11861,11863,11865,11867,11870,11872,11874,11876,11879,11881,11883,11885,11888,11890],{"class":38,"line":777},[36,11833,4942],{"class":50},[36,11835,107],{"class":42},[36,11837,1919],{"class":110},[36,11839,2767],{"class":73},[36,11841,11842],{"class":110},"姓名：\"",[36,11844,107],{"class":42},[36,11846,11701],{"class":50},[36,11848,2148],{"class":42},[36,11850,11851],{"class":50},"i)->name",[36,11853,107],{"class":42},[36,11855,1919],{"class":110},[36,11857,2767],{"class":73},[36,11859,11860],{"class":110},"年龄：\"",[36,11862,107],{"class":42},[36,11864,11701],{"class":50},[36,11866,2148],{"class":42},[36,11868,11869],{"class":50},"i)->age",[36,11871,107],{"class":42},[36,11873,1919],{"class":110},[36,11875,2767],{"class":73},[36,11877,11878],{"class":110},"性别：\"",[36,11880,107],{"class":42},[36,11882,11701],{"class":50},[36,11884,2148],{"class":42},[36,11886,11887],{"class":50},"i)->gender",[36,11889,107],{"class":42},[36,11891,2732],{"class":50},[36,11893,11894],{"class":38,"line":802},[36,11895,3693],{"class":50},[36,11897,11898],{"class":38,"line":807},[36,11899,250],{"class":50},[36,11901,11902,11904,11906],{"class":38,"line":818},[36,11903,43],{"class":42},[36,11905,47],{"class":46},[36,11907,3484],{"class":50},[36,11909,11910],{"class":38,"line":843},[36,11911,3076],{"class":50},[36,11913,11914],{"class":38,"line":848},[36,11915,11916],{"class":124},"    \u002F\u002F定义结构体变量\n",[36,11918,11919,11922,11924,11926],{"class":38,"line":859},[36,11920,11921],{"class":50},"    Sanguo s1[",[36,11923,1987],{"class":73},[36,11925,2607],{"class":50},[36,11927,6397],{"class":42},[36,11929,11930],{"class":38,"line":864},[36,11931,3537],{"class":50},[36,11933,11934,11936,11938,11940,11942,11944,11946],{"class":38,"line":873},[36,11935,6406],{"class":50},[36,11937,11418],{"class":110},[36,11939,2045],{"class":50},[36,11941,2442],{"class":73},[36,11943,2045],{"class":50},[36,11945,11427],{"class":110},[36,11947,6419],{"class":50},[36,11949,11950,11952,11954,11956,11958,11960,11962],{"class":38,"line":9454},[36,11951,6406],{"class":50},[36,11953,11436],{"class":110},[36,11955,2045],{"class":50},[36,11957,2417],{"class":73},[36,11959,2045],{"class":50},[36,11961,11427],{"class":110},[36,11963,6419],{"class":50},[36,11965,11966,11968,11970,11972,11974,11976,11978],{"class":38,"line":9481},[36,11967,6406],{"class":50},[36,11969,11453],{"class":110},[36,11971,2045],{"class":50},[36,11973,2367],{"class":73},[36,11975,2045],{"class":50},[36,11977,11427],{"class":110},[36,11979,6419],{"class":50},[36,11981,11982,11984,11986,11988,11990,11992,11994],{"class":38,"line":9486},[36,11983,6406],{"class":50},[36,11985,11470],{"class":110},[36,11987,2045],{"class":50},[36,11989,2392],{"class":73},[36,11991,2045],{"class":50},[36,11993,11427],{"class":110},[36,11995,6419],{"class":50},[36,11997,11998,12000,12002,12004,12006,12008,12010],{"class":38,"line":9492},[36,11999,6406],{"class":50},[36,12001,11487],{"class":110},[36,12003,2045],{"class":50},[36,12005,2342],{"class":73},[36,12007,2045],{"class":50},[36,12009,11496],{"class":110},[36,12011,6419],{"class":50},[36,12013,12014],{"class":38,"line":9504},[36,12015,6440],{"class":50},[36,12017,12018,12020,12022,12024,12027,12029,12032,12034],{"class":38,"line":9516},[36,12019,64],{"class":42},[36,12021,8805],{"class":50},[36,12023,5692],{"class":42},[36,12025,12026],{"class":50},"(s1)",[36,12028,5698],{"class":42},[36,12030,12031],{"class":50},"(s1[",[36,12033,1859],{"class":73},[36,12035,5347],{"class":50},[36,12037,12038,12041,12043,12046,12048,12050,12053,12055],{"class":38,"line":9528},[36,12039,12040],{"class":50},"    Sanguo ",[36,12042,2122],{"class":42},[36,12044,12045],{"class":50},"s ",[36,12047,70],{"class":42},[36,12049,85],{"class":42},[36,12051,12052],{"class":50},"s1[",[36,12054,1859],{"class":73},[36,12056,6179],{"class":50},[36,12058,12059],{"class":38,"line":11184},[36,12060,12061],{"class":124},"    \u002F\u002F排序前：\n",[36,12063,12064,12066,12068,12071,12073],{"class":38,"line":11209},[36,12065,104],{"class":50},[36,12067,107],{"class":42},[36,12069,12070],{"class":110}," \"排序前：\"",[36,12072,114],{"class":42},[36,12074,747],{"class":50},[36,12076,12077,12079],{"class":38,"line":11232},[36,12078,11383],{"class":46},[36,12080,12081],{"class":50},"(s,len);\n",[36,12083,12084],{"class":38,"line":11256},[36,12085,12086],{"class":124},"    \u002F\u002F调用排序函数\n",[36,12088,12089,12091],{"class":38,"line":11261},[36,12090,9072],{"class":46},[36,12092,12081],{"class":50},[36,12094,12095],{"class":38,"line":11266},[36,12096,12097],{"class":124},"    \u002F\u002F排序后\n",[36,12099,12100,12102,12104,12107,12109],{"class":38,"line":11271},[36,12101,104],{"class":50},[36,12103,107],{"class":42},[36,12105,12106],{"class":110}," \"排序后：\"",[36,12108,114],{"class":42},[36,12110,747],{"class":50},[36,12112,12113,12115],{"class":38,"line":11280},[36,12114,11383],{"class":46},[36,12116,12081],{"class":50},[36,12118,12119],{"class":38,"line":11285},[36,12120,250],{"class":50},[19,12122,12123,12124,12126],{},"注意：使用指针时直接用传首地址**&s",[36,12125,1859],{},"**",[1592,12128,12129],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":12131},[12132,12133,12134,12135,12136,12137,12138],{"id":9177,"depth":54,"text":9178},{"id":9536,"depth":54,"text":9537},{"id":9805,"depth":54,"text":9806},{"id":9970,"depth":54,"text":9971},{"id":10186,"depth":54,"text":10187},{"id":10504,"depth":54,"text":10505},{"id":10732,"depth":54,"text":10733},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9166,"description":9174},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12145,"title":12146,"body":12147,"description":31,"extension":1603,"meta":13480,"navigation":57,"path":13481,"seo":13482,"stem":13483,"__hash__":13484},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12148,"toc":13474},[12149,12152,12156,12162,12176,12181,12184,12188,12195,12201,12204,12211,12217,12222,12225,12228,12231,12788,12790,12804,12808,12813,12829,12967,12970,12976,12979,12984,12992,13100,13103,13108,13111,13116,13119,13125,13128,13471],[10,12150,12146],{"id":12151},"_5程序内存模型",[14,12153,12155],{"id":12154},"_51内存分区模型","5.1内存分区模型",[19,12157,12158,12159],{},"C++程序在执行时，将内存大方向划分为",[887,12160,12161],{},"4个区域",[2674,12163,12164,12167,12170,12173],{},[259,12165,12166],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[259,12168,12169],{},"全局区：存放全局变量和静态变量以及常量",[259,12171,12172],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[259,12174,12175],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12177,12178],{},[887,12179,12180],{},"内存四区意义：",[19,12182,12183],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[1645,12185,12187],{"id":12186},"_511程序运行前","5.1.1程序运行前",[19,12189,12190,12191,12194],{},"​\t在程序编译后，生成了exe可执行程序，",[887,12192,12193],{},"未执行该程序前","分为两个区域",[19,12196,12197,12198],{},"​\t",[887,12199,12200],{},"代码区：",[19,12202,12203],{},"​\t\t存放 CPU 执行的机器指令",[19,12205,12206,12207,12210],{},"​\t\t代码区是",[887,12208,12209],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12212,12206,12213,12216],{},[887,12214,12215],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12218,12197,12219],{},[887,12220,12221],{},"全局区：",[19,12223,12224],{},"​\t\t全局变量和静态变量存放在此.",[19,12226,12227],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12229,12230],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,12232,12234],{"className":28,"code":12233,"language":30,"meta":31,"style":31},"\u002F\u002F全局变量\nint g_a = 10;\nint g_b = 10;\n\n\u002F\u002F全局常量\nconst int c_g_a = 10;\nconst int c_g_b = 10;\n\nint main() {\n\n    \u002F\u002F局部变量\n    int a = 10;\n    int b = 10;\n\n    \u002F\u002F打印地址\n    cout \u003C\u003C \"局部变量a地址为： \" \u003C\u003C (int)&a \u003C\u003C endl;\n    cout \u003C\u003C \"局部变量b地址为： \" \u003C\u003C (int)&b \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局变量g_a地址为： \" \u003C\u003C  (int)&g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局变量g_b地址为： \" \u003C\u003C  (int)&g_b \u003C\u003C endl;\n\n    \u002F\u002F静态变量\n    static int s_a = 10;\n    static int s_b = 10;\n\n    cout \u003C\u003C \"静态变量s_a地址为： \" \u003C\u003C (int)&s_a \u003C\u003C endl;\n    cout \u003C\u003C \"静态变量s_b地址为： \" \u003C\u003C (int)&s_b \u003C\u003C endl;\n\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world\" \u003C\u003C endl;\n    cout \u003C\u003C \"字符串常量地址为： \" \u003C\u003C (int)&\"hello world1\" \u003C\u003C endl;\n\n    cout \u003C\u003C \"全局常量c_g_a地址为： \" \u003C\u003C (int)&c_g_a \u003C\u003C endl;\n    cout \u003C\u003C \"全局常量c_g_b地址为： \" \u003C\u003C (int)&c_g_b \u003C\u003C endl;\n\n    const int c_l_a = 10;\n    const int c_l_b = 10;\n    cout \u003C\u003C \"局部常量c_l_a地址为： \" \u003C\u003C (int)&c_l_a \u003C\u003C endl;\n    cout \u003C\u003C \"局部常量c_l_b地址为： \" \u003C\u003C (int)&c_l_b \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,12235,12236,12241,12254,12267,12271,12276,12291,12306,12310,12318,12322,12327,12339,12351,12355,12360,12385,12410,12414,12441,12467,12471,12476,12491,12506,12510,12536,12562,12566,12591,12616,12620,12646,12672,12676,12691,12706,12732,12758,12762,12772,12776,12784],{"__ignoreMap":31},[36,12237,12238],{"class":38,"line":39},[36,12239,12240],{"class":124},"\u002F\u002F全局变量\n",[36,12242,12243,12245,12248,12250,12252],{"class":38,"line":54},[36,12244,43],{"class":42},[36,12246,12247],{"class":50}," g_a ",[36,12249,70],{"class":42},[36,12251,74],{"class":73},[36,12253,77],{"class":50},[36,12255,12256,12258,12261,12263,12265],{"class":38,"line":61},[36,12257,43],{"class":42},[36,12259,12260],{"class":50}," g_b ",[36,12262,70],{"class":42},[36,12264,74],{"class":73},[36,12266,77],{"class":50},[36,12268,12269],{"class":38,"line":80},[36,12270,58],{"emptyLinePlaceholder":57},[36,12272,12273],{"class":38,"line":96},[36,12274,12275],{"class":124},"\u002F\u002F全局常量\n",[36,12277,12278,12280,12282,12285,12287,12289],{"class":38,"line":101},[36,12279,1437],{"class":42},[36,12281,965],{"class":42},[36,12283,12284],{"class":50}," c_g_a ",[36,12286,70],{"class":42},[36,12288,74],{"class":73},[36,12290,77],{"class":50},[36,12292,12293,12295,12297,12300,12302,12304],{"class":38,"line":128},[36,12294,1437],{"class":42},[36,12296,965],{"class":42},[36,12298,12299],{"class":50}," c_g_b ",[36,12301,70],{"class":42},[36,12303,74],{"class":73},[36,12305,77],{"class":50},[36,12307,12308],{"class":38,"line":149},[36,12309,58],{"emptyLinePlaceholder":57},[36,12311,12312,12314,12316],{"class":38,"line":154},[36,12313,43],{"class":42},[36,12315,47],{"class":46},[36,12317,51],{"class":50},[36,12319,12320],{"class":38,"line":167},[36,12321,58],{"emptyLinePlaceholder":57},[36,12323,12324],{"class":38,"line":172},[36,12325,12326],{"class":124},"    \u002F\u002F局部变量\n",[36,12328,12329,12331,12333,12335,12337],{"class":38,"line":192},[36,12330,64],{"class":42},[36,12332,67],{"class":50},[36,12334,70],{"class":42},[36,12336,74],{"class":73},[36,12338,77],{"class":50},[36,12340,12341,12343,12345,12347,12349],{"class":38,"line":211},[36,12342,64],{"class":42},[36,12344,140],{"class":50},[36,12346,70],{"class":42},[36,12348,74],{"class":73},[36,12350,77],{"class":50},[36,12352,12353],{"class":38,"line":216},[36,12354,58],{"emptyLinePlaceholder":57},[36,12356,12357],{"class":38,"line":231},[36,12358,12359],{"class":124},"    \u002F\u002F打印地址\n",[36,12361,12362,12364,12366,12369,12371,12373,12375,12377,12379,12381,12383],{"class":38,"line":236},[36,12363,104],{"class":50},[36,12365,107],{"class":42},[36,12367,12368],{"class":110}," \"局部变量a地址为： \"",[36,12370,114],{"class":42},[36,12372,3180],{"class":50},[36,12374,43],{"class":42},[36,12376,2096],{"class":50},[36,12378,763],{"class":42},[36,12380,572],{"class":50},[36,12382,107],{"class":42},[36,12384,747],{"class":50},[36,12386,12387,12389,12391,12394,12396,12398,12400,12402,12404,12406,12408],{"class":38,"line":247},[36,12388,104],{"class":50},[36,12390,107],{"class":42},[36,12392,12393],{"class":110}," \"局部变量b地址为： \"",[36,12395,114],{"class":42},[36,12397,3180],{"class":50},[36,12399,43],{"class":42},[36,12401,2096],{"class":50},[36,12403,763],{"class":42},[36,12405,88],{"class":50},[36,12407,107],{"class":42},[36,12409,747],{"class":50},[36,12411,12412],{"class":38,"line":637},[36,12413,58],{"emptyLinePlaceholder":57},[36,12415,12416,12418,12420,12423,12425,12428,12430,12432,12434,12437,12439],{"class":38,"line":646},[36,12417,104],{"class":50},[36,12419,107],{"class":42},[36,12421,12422],{"class":110}," \"全局变量g_a地址为： \"",[36,12424,114],{"class":42},[36,12426,12427],{"class":50},"  (",[36,12429,43],{"class":42},[36,12431,2096],{"class":50},[36,12433,763],{"class":42},[36,12435,12436],{"class":50},"g_a ",[36,12438,107],{"class":42},[36,12440,747],{"class":50},[36,12442,12443,12445,12447,12450,12452,12454,12456,12458,12460,12463,12465],{"class":38,"line":655},[36,12444,104],{"class":50},[36,12446,107],{"class":42},[36,12448,12449],{"class":110}," \"全局变量g_b地址为： \"",[36,12451,114],{"class":42},[36,12453,12427],{"class":50},[36,12455,43],{"class":42},[36,12457,2096],{"class":50},[36,12459,763],{"class":42},[36,12461,12462],{"class":50},"g_b ",[36,12464,107],{"class":42},[36,12466,747],{"class":50},[36,12468,12469],{"class":38,"line":660},[36,12470,58],{"emptyLinePlaceholder":57},[36,12472,12473],{"class":38,"line":665},[36,12474,12475],{"class":124},"    \u002F\u002F静态变量\n",[36,12477,12478,12480,12482,12485,12487,12489],{"class":38,"line":674},[36,12479,962],{"class":42},[36,12481,965],{"class":42},[36,12483,12484],{"class":50}," s_a ",[36,12486,70],{"class":42},[36,12488,74],{"class":73},[36,12490,77],{"class":50},[36,12492,12493,12495,12497,12500,12502,12504],{"class":38,"line":679},[36,12494,962],{"class":42},[36,12496,965],{"class":42},[36,12498,12499],{"class":50}," s_b ",[36,12501,70],{"class":42},[36,12503,74],{"class":73},[36,12505,77],{"class":50},[36,12507,12508],{"class":38,"line":692},[36,12509,58],{"emptyLinePlaceholder":57},[36,12511,12512,12514,12516,12519,12521,12523,12525,12527,12529,12532,12534],{"class":38,"line":705},[36,12513,104],{"class":50},[36,12515,107],{"class":42},[36,12517,12518],{"class":110}," \"静态变量s_a地址为： \"",[36,12520,114],{"class":42},[36,12522,3180],{"class":50},[36,12524,43],{"class":42},[36,12526,2096],{"class":50},[36,12528,763],{"class":42},[36,12530,12531],{"class":50},"s_a ",[36,12533,107],{"class":42},[36,12535,747],{"class":50},[36,12537,12538,12540,12542,12545,12547,12549,12551,12553,12555,12558,12560],{"class":38,"line":710},[36,12539,104],{"class":50},[36,12541,107],{"class":42},[36,12543,12544],{"class":110}," \"静态变量s_b地址为： \"",[36,12546,114],{"class":42},[36,12548,3180],{"class":50},[36,12550,43],{"class":42},[36,12552,2096],{"class":50},[36,12554,763],{"class":42},[36,12556,12557],{"class":50},"s_b ",[36,12559,107],{"class":42},[36,12561,747],{"class":50},[36,12563,12564],{"class":38,"line":722},[36,12565,58],{"emptyLinePlaceholder":57},[36,12567,12568,12570,12572,12575,12577,12579,12581,12583,12585,12587,12589],{"class":38,"line":750},[36,12569,104],{"class":50},[36,12571,107],{"class":42},[36,12573,12574],{"class":110}," \"字符串常量地址为： \"",[36,12576,114],{"class":42},[36,12578,3180],{"class":50},[36,12580,43],{"class":42},[36,12582,2096],{"class":50},[36,12584,763],{"class":42},[36,12586,2727],{"class":110},[36,12588,114],{"class":42},[36,12590,747],{"class":50},[36,12592,12593,12595,12597,12599,12601,12603,12605,12607,12609,12612,12614],{"class":38,"line":755},[36,12594,104],{"class":50},[36,12596,107],{"class":42},[36,12598,12574],{"class":110},[36,12600,114],{"class":42},[36,12602,3180],{"class":50},[36,12604,43],{"class":42},[36,12606,2096],{"class":50},[36,12608,763],{"class":42},[36,12610,12611],{"class":110},"\"hello world1\"",[36,12613,114],{"class":42},[36,12615,747],{"class":50},[36,12617,12618],{"class":38,"line":777},[36,12619,58],{"emptyLinePlaceholder":57},[36,12621,12622,12624,12626,12629,12631,12633,12635,12637,12639,12642,12644],{"class":38,"line":802},[36,12623,104],{"class":50},[36,12625,107],{"class":42},[36,12627,12628],{"class":110}," \"全局常量c_g_a地址为： \"",[36,12630,114],{"class":42},[36,12632,3180],{"class":50},[36,12634,43],{"class":42},[36,12636,2096],{"class":50},[36,12638,763],{"class":42},[36,12640,12641],{"class":50},"c_g_a ",[36,12643,107],{"class":42},[36,12645,747],{"class":50},[36,12647,12648,12650,12652,12655,12657,12659,12661,12663,12665,12668,12670],{"class":38,"line":807},[36,12649,104],{"class":50},[36,12651,107],{"class":42},[36,12653,12654],{"class":110}," \"全局常量c_g_b地址为： \"",[36,12656,114],{"class":42},[36,12658,3180],{"class":50},[36,12660,43],{"class":42},[36,12662,2096],{"class":50},[36,12664,763],{"class":42},[36,12666,12667],{"class":50},"c_g_b ",[36,12669,107],{"class":42},[36,12671,747],{"class":50},[36,12673,12674],{"class":38,"line":818},[36,12675,58],{"emptyLinePlaceholder":57},[36,12677,12678,12680,12682,12685,12687,12689],{"class":38,"line":843},[36,12679,1498],{"class":42},[36,12681,965],{"class":42},[36,12683,12684],{"class":50}," c_l_a ",[36,12686,70],{"class":42},[36,12688,74],{"class":73},[36,12690,77],{"class":50},[36,12692,12693,12695,12697,12700,12702,12704],{"class":38,"line":848},[36,12694,1498],{"class":42},[36,12696,965],{"class":42},[36,12698,12699],{"class":50}," c_l_b ",[36,12701,70],{"class":42},[36,12703,74],{"class":73},[36,12705,77],{"class":50},[36,12707,12708,12710,12712,12715,12717,12719,12721,12723,12725,12728,12730],{"class":38,"line":859},[36,12709,104],{"class":50},[36,12711,107],{"class":42},[36,12713,12714],{"class":110}," \"局部常量c_l_a地址为： \"",[36,12716,114],{"class":42},[36,12718,3180],{"class":50},[36,12720,43],{"class":42},[36,12722,2096],{"class":50},[36,12724,763],{"class":42},[36,12726,12727],{"class":50},"c_l_a ",[36,12729,107],{"class":42},[36,12731,747],{"class":50},[36,12733,12734,12736,12738,12741,12743,12745,12747,12749,12751,12754,12756],{"class":38,"line":864},[36,12735,104],{"class":50},[36,12737,107],{"class":42},[36,12739,12740],{"class":110}," \"局部常量c_l_b地址为： \"",[36,12742,114],{"class":42},[36,12744,3180],{"class":50},[36,12746,43],{"class":42},[36,12748,2096],{"class":50},[36,12750,763],{"class":42},[36,12752,12753],{"class":50},"c_l_b ",[36,12755,107],{"class":42},[36,12757,747],{"class":50},[36,12759,12760],{"class":38,"line":873},[36,12761,58],{"emptyLinePlaceholder":57},[36,12763,12764,12766,12768,12770],{"class":38,"line":9454},[36,12765,219],{"class":46},[36,12767,222],{"class":50},[36,12769,225],{"class":110},[36,12771,228],{"class":50},[36,12773,12774],{"class":38,"line":9481},[36,12775,58],{"emptyLinePlaceholder":57},[36,12777,12778,12780,12782],{"class":38,"line":9486},[36,12779,239],{"class":42},[36,12781,242],{"class":73},[36,12783,77],{"class":50},[36,12785,12786],{"class":38,"line":9492},[36,12787,250],{"class":50},[19,12789,1388],{},[2674,12791,12792,12795,12798,12801],{},[259,12793,12794],{},"c++中程序运行前分为全局区和代码区",[259,12796,12797],{},"代码区特点是共享和只读",[259,12799,12800],{},"全局区中存放全局变量、静态变量、常量",[259,12802,12803],{},"常量区中存放const修饰的全局常量和字符串常量",[1645,12805,12807],{"id":12806},"_512程序运行后","5.1.2程序运行后",[256,12809,12810],{},[259,12811,12812],{},"栈区：",[2674,12814,12815,12822],{},[259,12816,12817,12818,12821],{},"由编译器自动分配释放, 存放",[887,12819,12820],{},"函数的参数值,局部变量","等",[259,12823,12824,12825,12828],{},"注意事项：",[887,12826,12827],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,12830,12832],{"className":28,"code":12831,"language":30,"meta":31,"style":31},"int * func()\n{\n    int a = 10; \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n    return &a; \u002F\u002F放回局部变量的地址\n}\n\nint main() {\n    \u002F\u002F接受func的返回值\n    int *p = func();\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n    cout \u003C\u003C *p \u003C\u003C endl; \u002F\u002F第二次这个数据不再保留\n    system(\"pause\");\n    return 0;\n}\n",[33,12833,12834,12844,12848,12863,12875,12879,12883,12891,12896,12911,12928,12945,12955,12963],{"__ignoreMap":31},[36,12835,12836,12838,12840,12842],{"class":38,"line":39},[36,12837,43],{"class":42},[36,12839,561],{"class":42},[36,12841,1241],{"class":46},[36,12843,3484],{"class":50},[36,12845,12846],{"class":38,"line":54},[36,12847,3076],{"class":50},[36,12849,12850,12852,12854,12856,12858,12860],{"class":38,"line":61},[36,12851,64],{"class":42},[36,12853,67],{"class":50},[36,12855,70],{"class":42},[36,12857,74],{"class":73},[36,12859,926],{"class":50},[36,12861,12862],{"class":124}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[36,12864,12865,12867,12869,12872],{"class":38,"line":80},[36,12866,239],{"class":42},[36,12868,85],{"class":42},[36,12870,12871],{"class":50},"a;",[36,12873,12874],{"class":124}," \u002F\u002F放回局部变量的地址\n",[36,12876,12877],{"class":38,"line":96},[36,12878,250],{"class":50},[36,12880,12881],{"class":38,"line":101},[36,12882,58],{"emptyLinePlaceholder":57},[36,12884,12885,12887,12889],{"class":38,"line":128},[36,12886,43],{"class":42},[36,12888,47],{"class":46},[36,12890,51],{"class":50},[36,12892,12893],{"class":38,"line":149},[36,12894,12895],{"class":124},"    \u002F\u002F接受func的返回值\n",[36,12897,12898,12900,12902,12905,12907,12909],{"class":38,"line":154},[36,12899,64],{"class":42},[36,12901,561],{"class":42},[36,12903,12904],{"class":50},"p ",[36,12906,70],{"class":42},[36,12908,1241],{"class":46},[36,12910,1022],{"class":50},[36,12912,12913,12915,12917,12919,12921,12923,12925],{"class":38,"line":167},[36,12914,104],{"class":50},[36,12916,107],{"class":42},[36,12918,561],{"class":42},[36,12920,12904],{"class":50},[36,12922,107],{"class":42},[36,12924,121],{"class":50},[36,12926,12927],{"class":124}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[36,12929,12930,12932,12934,12936,12938,12940,12942],{"class":38,"line":172},[36,12931,104],{"class":50},[36,12933,107],{"class":42},[36,12935,561],{"class":42},[36,12937,12904],{"class":50},[36,12939,107],{"class":42},[36,12941,121],{"class":50},[36,12943,12944],{"class":124}," \u002F\u002F第二次这个数据不再保留\n",[36,12946,12947,12949,12951,12953],{"class":38,"line":192},[36,12948,219],{"class":46},[36,12950,222],{"class":50},[36,12952,225],{"class":110},[36,12954,228],{"class":50},[36,12956,12957,12959,12961],{"class":38,"line":211},[36,12958,239],{"class":42},[36,12960,242],{"class":73},[36,12962,77],{"class":50},[36,12964,12965],{"class":38,"line":216},[36,12966,250],{"class":50},[19,12968,12969],{},"输出结果：",[19,12971,12972],{},[2992,12973],{"alt":12974,"src":12975},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12977,12978],{},"总结：不要返回局部变量的地址",[256,12980,12981],{"start":54},[259,12982,12983],{},"堆区",[2674,12985,12986,12989],{},[259,12987,12988],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[259,12990,12991],{},"在c++中主要利用new在堆区开辟内存",[26,12993,12995],{"className":28,"code":12994,"language":30,"meta":31,"style":31},"int  *func()  \u002F\u002F函数返回指针\n{\n    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n   int *p= new int(10);\n   return p;\n}\nint main()\n{\n    \u002F\u002F在堆区开辟数据\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,12996,12997,13012,13016,13021,13042,13049,13053,13061,13065,13070,13084,13096],{"__ignoreMap":31},[36,12998,12999,13001,13004,13007,13009],{"class":38,"line":39},[36,13000,43],{"class":42},[36,13002,13003],{"class":42},"  *",[36,13005,13006],{"class":46},"func",[36,13008,3929],{"class":50},[36,13010,13011],{"class":124},"  \u002F\u002F函数返回指针\n",[36,13013,13014],{"class":38,"line":54},[36,13015,3076],{"class":50},[36,13017,13018],{"class":38,"line":61},[36,13019,13020],{"class":124},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[36,13022,13023,13025,13027,13029,13031,13034,13036,13038,13040],{"class":38,"line":80},[36,13024,5636],{"class":42},[36,13026,561],{"class":42},[36,13028,19],{"class":50},[36,13030,70],{"class":42},[36,13032,13033],{"class":42}," new",[36,13035,965],{"class":42},[36,13037,222],{"class":50},[36,13039,2113],{"class":73},[36,13041,228],{"class":50},[36,13043,13044,13046],{"class":38,"line":96},[36,13045,5870],{"class":42},[36,13047,13048],{"class":50}," p;\n",[36,13050,13051],{"class":38,"line":101},[36,13052,250],{"class":50},[36,13054,13055,13057,13059],{"class":38,"line":128},[36,13056,43],{"class":42},[36,13058,47],{"class":46},[36,13060,3484],{"class":50},[36,13062,13063],{"class":38,"line":149},[36,13064,3076],{"class":50},[36,13066,13067],{"class":38,"line":154},[36,13068,13069],{"class":124},"    \u002F\u002F在堆区开辟数据\n",[36,13071,13072,13074,13076,13078,13080,13082],{"class":38,"line":167},[36,13073,64],{"class":42},[36,13075,561],{"class":42},[36,13077,19],{"class":50},[36,13079,70],{"class":42},[36,13081,13006],{"class":46},[36,13083,1022],{"class":50},[36,13085,13086,13088,13090,13092,13094],{"class":38,"line":172},[36,13087,3081],{"class":50},[36,13089,7898],{"class":42},[36,13091,19],{"class":50},[36,13093,107],{"class":42},[36,13095,2732],{"class":50},[36,13097,13098],{"class":38,"line":192},[36,13099,250],{"class":50},[19,13101,13102],{},"图片展示：",[19,13104,13105],{},[2992,13106],{"alt":12974,"src":13107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13109,13110],{},"堆区内存由程序员管生死！！！",[256,13112,13113],{"start":61},[259,13114,13115],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13117,13118],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13120,13121,13122],{},"​语法：",[33,13123,13124],{}," new 数据类型",[19,13126,13127],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,13129,13131],{"className":28,"code":13130,"language":30,"meta":31,"style":31},"\u002F\u002F1.new的基本语法\nint *func()\n{\n    \u002F\u002F在堆区创建整型数据\n    \u002F\u002Fnew返回的是该数据类型的指针\n    int *p=new int(10);\u002F\u002Fnew啥类型就返回啥类型数据的指针\n}\nvoid test01()\n{\n    int *p=func();\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    cout\u003C\u003C*p\u003C\u003Cendl;\n    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n    delete p;\u002F\u002F删除这块地址\n}\n\u002F\u002F2.在堆区利用new开辟数组\nvoid test02()\n{\n    \u002F\u002F创建10整数数据的数组，在堆区\n    int *arr=new int[10];\u002F\u002F10代表数组有10个元素\n    for (int i=0;i\u003C10;i++)\n    {\n        arr[i]=i+100;\u002F\u002F给10个元素赋值100～109\n    }\n    for (int i=0;i\u003C10;i++)\n    {\n        cout\u003C\u003Carr[i]\u003C\u003Cendl;\n    }\n    \u002F\u002F释放堆区数组\n    \u002F\u002F释放数组的时候 要加[]才可以\n    delete[] arr;\n}\n\nint main()\n{\n    test01();\n    test02();\n}\n\n",[33,13132,13133,13138,13148,13152,13157,13162,13184,13188,13196,13200,13214,13226,13238,13250,13255,13260,13271,13275,13280,13288,13292,13297,13319,13345,13349,13367,13371,13397,13401,13413,13417,13422,13427,13435,13439,13443,13451,13455,13461,13467],{"__ignoreMap":31},[36,13134,13135],{"class":38,"line":39},[36,13136,13137],{"class":124},"\u002F\u002F1.new的基本语法\n",[36,13139,13140,13142,13144,13146],{"class":38,"line":54},[36,13141,43],{"class":42},[36,13143,561],{"class":42},[36,13145,13006],{"class":46},[36,13147,3484],{"class":50},[36,13149,13150],{"class":38,"line":61},[36,13151,3076],{"class":50},[36,13153,13154],{"class":38,"line":80},[36,13155,13156],{"class":124},"    \u002F\u002F在堆区创建整型数据\n",[36,13158,13159],{"class":38,"line":96},[36,13160,13161],{"class":124},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[36,13163,13164,13166,13168,13170,13173,13175,13177,13179,13181],{"class":38,"line":101},[36,13165,64],{"class":42},[36,13167,561],{"class":42},[36,13169,19],{"class":50},[36,13171,13172],{"class":42},"=new",[36,13174,965],{"class":42},[36,13176,222],{"class":50},[36,13178,2113],{"class":73},[36,13180,7448],{"class":50},[36,13182,13183],{"class":124},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[36,13185,13186],{"class":38,"line":128},[36,13187,250],{"class":50},[36,13189,13190,13192,13194],{"class":38,"line":149},[36,13191,463],{"class":42},[36,13193,911],{"class":46},[36,13195,3484],{"class":50},[36,13197,13198],{"class":38,"line":154},[36,13199,3076],{"class":50},[36,13201,13202,13204,13206,13208,13210,13212],{"class":38,"line":167},[36,13203,64],{"class":42},[36,13205,561],{"class":42},[36,13207,19],{"class":50},[36,13209,70],{"class":42},[36,13211,13006],{"class":46},[36,13213,1022],{"class":50},[36,13215,13216,13218,13220,13222,13224],{"class":38,"line":172},[36,13217,3081],{"class":50},[36,13219,7898],{"class":42},[36,13221,19],{"class":50},[36,13223,107],{"class":42},[36,13225,2732],{"class":50},[36,13227,13228,13230,13232,13234,13236],{"class":38,"line":192},[36,13229,3081],{"class":50},[36,13231,7898],{"class":42},[36,13233,19],{"class":50},[36,13235,107],{"class":42},[36,13237,2732],{"class":50},[36,13239,13240,13242,13244,13246,13248],{"class":38,"line":211},[36,13241,3081],{"class":50},[36,13243,7898],{"class":42},[36,13245,19],{"class":50},[36,13247,107],{"class":42},[36,13249,2732],{"class":50},[36,13251,13252],{"class":38,"line":216},[36,13253,13254],{"class":124},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[36,13256,13257],{"class":38,"line":231},[36,13258,13259],{"class":124},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[36,13261,13262,13265,13268],{"class":38,"line":236},[36,13263,13264],{"class":42},"    delete",[36,13266,13267],{"class":50}," p;",[36,13269,13270],{"class":124},"\u002F\u002F删除这块地址\n",[36,13272,13273],{"class":38,"line":247},[36,13274,250],{"class":50},[36,13276,13277],{"class":38,"line":637},[36,13278,13279],{"class":124},"\u002F\u002F2.在堆区利用new开辟数组\n",[36,13281,13282,13284,13286],{"class":38,"line":646},[36,13283,463],{"class":42},[36,13285,955],{"class":46},[36,13287,3484],{"class":50},[36,13289,13290],{"class":38,"line":655},[36,13291,3076],{"class":50},[36,13293,13294],{"class":38,"line":660},[36,13295,13296],{"class":124},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[36,13298,13299,13301,13303,13305,13307,13309,13311,13313,13316],{"class":38,"line":665},[36,13300,64],{"class":42},[36,13302,561],{"class":42},[36,13304,5371],{"class":50},[36,13306,13172],{"class":42},[36,13308,965],{"class":42},[36,13310,2557],{"class":50},[36,13312,2113],{"class":73},[36,13314,13315],{"class":50},"];",[36,13317,13318],{"class":124},"\u002F\u002F10代表数组有10个元素\n",[36,13320,13321,13323,13325,13327,13329,13331,13333,13335,13337,13339,13341,13343],{"class":38,"line":674},[36,13322,4692],{"class":42},[36,13324,3180],{"class":50},[36,13326,43],{"class":42},[36,13328,4523],{"class":50},[36,13330,70],{"class":42},[36,13332,1859],{"class":73},[36,13334,4530],{"class":50},[36,13336,2577],{"class":42},[36,13338,2113],{"class":73},[36,13340,4530],{"class":50},[36,13342,3798],{"class":42},[36,13344,1680],{"class":50},[36,13346,13347],{"class":38,"line":679},[36,13348,3537],{"class":50},[36,13350,13351,13354,13356,13358,13360,13362,13364],{"class":38,"line":692},[36,13352,13353],{"class":50},"        arr[i]",[36,13355,70],{"class":42},[36,13357,2108],{"class":50},[36,13359,2148],{"class":42},[36,13361,1979],{"class":73},[36,13363,926],{"class":50},[36,13365,13366],{"class":124},"\u002F\u002F给10个元素赋值100～109\n",[36,13368,13369],{"class":38,"line":705},[36,13370,3693],{"class":50},[36,13372,13373,13375,13377,13379,13381,13383,13385,13387,13389,13391,13393,13395],{"class":38,"line":710},[36,13374,4692],{"class":42},[36,13376,3180],{"class":50},[36,13378,43],{"class":42},[36,13380,4523],{"class":50},[36,13382,70],{"class":42},[36,13384,1859],{"class":73},[36,13386,4530],{"class":50},[36,13388,2577],{"class":42},[36,13390,2113],{"class":73},[36,13392,4530],{"class":50},[36,13394,3798],{"class":42},[36,13396,1680],{"class":50},[36,13398,13399],{"class":38,"line":722},[36,13400,3537],{"class":50},[36,13402,13403,13405,13407,13409,13411],{"class":38,"line":750},[36,13404,4942],{"class":50},[36,13406,107],{"class":42},[36,13408,5843],{"class":50},[36,13410,107],{"class":42},[36,13412,2732],{"class":50},[36,13414,13415],{"class":38,"line":755},[36,13416,3693],{"class":50},[36,13418,13419],{"class":38,"line":777},[36,13420,13421],{"class":124},"    \u002F\u002F释放堆区数组\n",[36,13423,13424],{"class":38,"line":802},[36,13425,13426],{"class":124},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[36,13428,13429,13432],{"class":38,"line":807},[36,13430,13431],{"class":42},"    delete[]",[36,13433,13434],{"class":50}," arr;\n",[36,13436,13437],{"class":38,"line":818},[36,13438,250],{"class":50},[36,13440,13441],{"class":38,"line":843},[36,13442,58],{"emptyLinePlaceholder":57},[36,13444,13445,13447,13449],{"class":38,"line":848},[36,13446,43],{"class":42},[36,13448,47],{"class":46},[36,13450,3484],{"class":50},[36,13452,13453],{"class":38,"line":859},[36,13454,3076],{"class":50},[36,13456,13457,13459],{"class":38,"line":864},[36,13458,7119],{"class":46},[36,13460,1022],{"class":50},[36,13462,13463,13465],{"class":38,"line":873},[36,13464,1130],{"class":46},[36,13466,1022],{"class":50},[36,13468,13469],{"class":38,"line":9454},[36,13470,250],{"class":50},[1592,13472,13473],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":13475},[13476],{"id":12154,"depth":54,"text":12155,"children":13477},[13478,13479],{"id":12186,"depth":61,"text":12187},{"id":12806,"depth":61,"text":12807},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12146,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":4,"title":5,"body":13486,"description":31,"extension":1603,"meta":14846,"navigation":57,"path":1605,"seo":14847,"stem":1607,"__hash__":1608},{"type":7,"value":13487,"toc":14838},[13488,13490,13492,13494,13496,13660,13662,13666,13680,13684,13826,13828,13830,13832,14200,14202,14204,14208,14210,14504,14506,14510,14656,14658,14664,14666,14668,14672,14836],[10,13489,5],{"id":12},[14,13491,17],{"id":16},[19,13493,21],{},[19,13495,24],{},[26,13497,13498],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,13499,13500,13508,13512,13524,13536,13540,13558,13576,13580,13590,13594,13612,13630,13634,13644,13648,13656],{"__ignoreMap":31},[36,13501,13502,13504,13506],{"class":38,"line":39},[36,13503,43],{"class":42},[36,13505,47],{"class":46},[36,13507,51],{"class":50},[36,13509,13510],{"class":38,"line":54},[36,13511,58],{"emptyLinePlaceholder":57},[36,13513,13514,13516,13518,13520,13522],{"class":38,"line":61},[36,13515,64],{"class":42},[36,13517,67],{"class":50},[36,13519,70],{"class":42},[36,13521,74],{"class":73},[36,13523,77],{"class":50},[36,13525,13526,13528,13530,13532,13534],{"class":38,"line":80},[36,13527,64],{"class":42},[36,13529,85],{"class":42},[36,13531,88],{"class":50},[36,13533,70],{"class":42},[36,13535,93],{"class":50},[36,13537,13538],{"class":38,"line":96},[36,13539,58],{"emptyLinePlaceholder":57},[36,13541,13542,13544,13546,13548,13550,13552,13554,13556],{"class":38,"line":101},[36,13543,104],{"class":50},[36,13545,107],{"class":42},[36,13547,111],{"class":110},[36,13549,114],{"class":42},[36,13551,67],{"class":50},[36,13553,107],{"class":42},[36,13555,121],{"class":50},[36,13557,125],{"class":124},[36,13559,13560,13562,13564,13566,13568,13570,13572,13574],{"class":38,"line":128},[36,13561,104],{"class":50},[36,13563,107],{"class":42},[36,13565,135],{"class":110},[36,13567,114],{"class":42},[36,13569,140],{"class":50},[36,13571,107],{"class":42},[36,13573,121],{"class":50},[36,13575,125],{"class":124},[36,13577,13578],{"class":38,"line":149},[36,13579,58],{"emptyLinePlaceholder":57},[36,13581,13582,13584,13586,13588],{"class":38,"line":154},[36,13583,157],{"class":50},[36,13585,70],{"class":42},[36,13587,162],{"class":73},[36,13589,77],{"class":50},[36,13591,13592],{"class":38,"line":167},[36,13593,58],{"emptyLinePlaceholder":57},[36,13595,13596,13598,13600,13602,13604,13606,13608,13610],{"class":38,"line":172},[36,13597,104],{"class":50},[36,13599,107],{"class":42},[36,13601,111],{"class":110},[36,13603,114],{"class":42},[36,13605,67],{"class":50},[36,13607,107],{"class":42},[36,13609,121],{"class":50},[36,13611,189],{"class":124},[36,13613,13614,13616,13618,13620,13622,13624,13626,13628],{"class":38,"line":192},[36,13615,104],{"class":50},[36,13617,107],{"class":42},[36,13619,135],{"class":110},[36,13621,114],{"class":42},[36,13623,140],{"class":50},[36,13625,107],{"class":42},[36,13627,121],{"class":50},[36,13629,189],{"class":124},[36,13631,13632],{"class":38,"line":211},[36,13633,58],{"emptyLinePlaceholder":57},[36,13635,13636,13638,13640,13642],{"class":38,"line":216},[36,13637,219],{"class":46},[36,13639,222],{"class":50},[36,13641,225],{"class":110},[36,13643,228],{"class":50},[36,13645,13646],{"class":38,"line":231},[36,13647,58],{"emptyLinePlaceholder":57},[36,13649,13650,13652,13654],{"class":38,"line":236},[36,13651,239],{"class":42},[36,13653,242],{"class":73},[36,13655,77],{"class":50},[36,13657,13658],{"class":38,"line":247},[36,13659,250],{"class":50},[14,13661,254],{"id":253},[256,13663,13664],{},[259,13665,261],{},[26,13667,13668],{"className":28,"code":264,"language":30,"meta":31,"style":31},[33,13669,13670],{"__ignoreMap":31},[36,13671,13672,13674,13676,13678],{"class":38,"line":39},[36,13673,43],{"class":42},[36,13675,85],{"class":42},[36,13677,275],{"class":50},[36,13679,278],{"class":124},[256,13681,13682],{"start":54},[259,13683,283],{},[26,13685,13686],{"className":28,"code":286,"language":30,"meta":31,"style":31},[33,13687,13688,13696,13708,13720,13726,13740,13750,13768,13786,13804,13814,13822],{"__ignoreMap":31},[36,13689,13690,13692,13694],{"class":38,"line":39},[36,13691,43],{"class":42},[36,13693,47],{"class":46},[36,13695,51],{"class":50},[36,13697,13698,13700,13702,13704,13706],{"class":38,"line":54},[36,13699,64],{"class":42},[36,13701,67],{"class":50},[36,13703,70],{"class":42},[36,13705,74],{"class":73},[36,13707,77],{"class":50},[36,13709,13710,13712,13714,13716,13718],{"class":38,"line":61},[36,13711,64],{"class":42},[36,13713,140],{"class":50},[36,13715,70],{"class":42},[36,13717,319],{"class":73},[36,13719,77],{"class":50},[36,13721,13722,13724],{"class":38,"line":80},[36,13723,326],{"class":124},[36,13725,329],{"class":124},[36,13727,13728,13730,13732,13734,13736,13738],{"class":38,"line":96},[36,13729,64],{"class":42},[36,13731,85],{"class":42},[36,13733,338],{"class":50},[36,13735,70],{"class":42},[36,13737,343],{"class":50},[36,13739,346],{"class":124},[36,13741,13742,13744,13746,13748],{"class":38,"line":101},[36,13743,351],{"class":50},[36,13745,70],{"class":42},[36,13747,356],{"class":50},[36,13749,359],{"class":124},[36,13751,13752,13754,13756,13758,13760,13762,13764,13766],{"class":38,"line":128},[36,13753,104],{"class":50},[36,13755,107],{"class":42},[36,13757,111],{"class":110},[36,13759,114],{"class":42},[36,13761,67],{"class":50},[36,13763,107],{"class":42},[36,13765,121],{"class":50},[36,13767,378],{"class":124},[36,13769,13770,13772,13774,13776,13778,13780,13782,13784],{"class":38,"line":149},[36,13771,104],{"class":50},[36,13773,107],{"class":42},[36,13775,135],{"class":110},[36,13777,114],{"class":42},[36,13779,140],{"class":50},[36,13781,107],{"class":42},[36,13783,121],{"class":50},[36,13785,378],{"class":124},[36,13787,13788,13790,13792,13794,13796,13798,13800,13802],{"class":38,"line":154},[36,13789,104],{"class":50},[36,13791,107],{"class":42},[36,13793,405],{"class":110},[36,13795,114],{"class":42},[36,13797,410],{"class":50},[36,13799,107],{"class":42},[36,13801,121],{"class":50},[36,13803,378],{"class":124},[36,13805,13806,13808,13810,13812],{"class":38,"line":167},[36,13807,219],{"class":46},[36,13809,222],{"class":50},[36,13811,225],{"class":110},[36,13813,228],{"class":50},[36,13815,13816,13818,13820],{"class":38,"line":172},[36,13817,239],{"class":42},[36,13819,242],{"class":73},[36,13821,77],{"class":50},[36,13823,13824],{"class":38,"line":192},[36,13825,250],{"class":50},[14,13827,442],{"id":441},[19,13829,445],{},[19,13831,448],{},[26,13833,13834],{"className":28,"code":451,"language":30,"meta":31,"style":31},[33,13835,13836,13840,13860,13870,13878,13886,13890,13894,13898,13918,13930,13942,13952,13956,13960,13964,13984,13994,14002,14010,14014,14018,14026,14030,14042,14054,14058,14066,14090,14094,14110,14134,14138,14146,14170,14174,14184,14188,14196],{"__ignoreMap":31},[36,13837,13838],{"class":38,"line":39},[36,13839,458],{"class":124},[36,13841,13842,13844,13846,13848,13850,13852,13854,13856,13858],{"class":38,"line":54},[36,13843,463],{"class":42},[36,13845,466],{"class":46},[36,13847,222],{"class":50},[36,13849,43],{"class":42},[36,13851,474],{"class":473},[36,13853,477],{"class":50},[36,13855,43],{"class":42},[36,13857,482],{"class":473},[36,13859,485],{"class":50},[36,13861,13862,13864,13866,13868],{"class":38,"line":61},[36,13863,64],{"class":42},[36,13865,492],{"class":50},[36,13867,70],{"class":42},[36,13869,93],{"class":50},[36,13871,13872,13874,13876],{"class":38,"line":80},[36,13873,501],{"class":50},[36,13875,70],{"class":42},[36,13877,506],{"class":50},[36,13879,13880,13882,13884],{"class":38,"line":96},[36,13881,157],{"class":50},[36,13883,70],{"class":42},[36,13885,515],{"class":50},[36,13887,13888],{"class":38,"line":101},[36,13889,250],{"class":50},[36,13891,13892],{"class":38,"line":128},[36,13893,58],{"emptyLinePlaceholder":57},[36,13895,13896],{"class":38,"line":149},[36,13897,528],{"class":124},[36,13899,13900,13902,13904,13906,13908,13910,13912,13914,13916],{"class":38,"line":154},[36,13901,463],{"class":42},[36,13903,535],{"class":46},[36,13905,222],{"class":50},[36,13907,540],{"class":42},[36,13909,474],{"class":473},[36,13911,477],{"class":50},[36,13913,540],{"class":42},[36,13915,482],{"class":473},[36,13917,485],{"class":50},[36,13919,13920,13922,13924,13926,13928],{"class":38,"line":167},[36,13921,64],{"class":42},[36,13923,492],{"class":50},[36,13925,70],{"class":42},[36,13927,561],{"class":42},[36,13929,564],{"class":50},[36,13931,13932,13934,13936,13938,13940],{"class":38,"line":172},[36,13933,569],{"class":42},[36,13935,572],{"class":50},[36,13937,70],{"class":42},[36,13939,561],{"class":42},[36,13941,579],{"class":50},[36,13943,13944,13946,13948,13950],{"class":38,"line":192},[36,13945,569],{"class":42},[36,13947,88],{"class":50},[36,13949,70],{"class":42},[36,13951,515],{"class":50},[36,13953,13954],{"class":38,"line":211},[36,13955,250],{"class":50},[36,13957,13958],{"class":38,"line":216},[36,13959,58],{"emptyLinePlaceholder":57},[36,13961,13962],{"class":38,"line":231},[36,13963,602],{"class":124},[36,13965,13966,13968,13970,13972,13974,13976,13978,13980,13982],{"class":38,"line":236},[36,13967,463],{"class":42},[36,13969,609],{"class":46},[36,13971,222],{"class":50},[36,13973,614],{"class":42},[36,13975,474],{"class":473},[36,13977,477],{"class":50},[36,13979,614],{"class":42},[36,13981,482],{"class":473},[36,13983,485],{"class":50},[36,13985,13986,13988,13990,13992],{"class":38,"line":247},[36,13987,64],{"class":42},[36,13989,492],{"class":50},[36,13991,70],{"class":42},[36,13993,93],{"class":50},[36,13995,13996,13998,14000],{"class":38,"line":637},[36,13997,501],{"class":50},[36,13999,70],{"class":42},[36,14001,506],{"class":50},[36,14003,14004,14006,14008],{"class":38,"line":646},[36,14005,157],{"class":50},[36,14007,70],{"class":42},[36,14009,515],{"class":50},[36,14011,14012],{"class":38,"line":655},[36,14013,250],{"class":50},[36,14015,14016],{"class":38,"line":660},[36,14017,58],{"emptyLinePlaceholder":57},[36,14019,14020,14022,14024],{"class":38,"line":665},[36,14021,43],{"class":42},[36,14023,47],{"class":46},[36,14025,51],{"class":50},[36,14027,14028],{"class":38,"line":674},[36,14029,58],{"emptyLinePlaceholder":57},[36,14031,14032,14034,14036,14038,14040],{"class":38,"line":679},[36,14033,64],{"class":42},[36,14035,67],{"class":50},[36,14037,70],{"class":42},[36,14039,74],{"class":73},[36,14041,77],{"class":50},[36,14043,14044,14046,14048,14050,14052],{"class":38,"line":692},[36,14045,64],{"class":42},[36,14047,140],{"class":50},[36,14049,70],{"class":42},[36,14051,319],{"class":73},[36,14053,77],{"class":50},[36,14055,14056],{"class":38,"line":705},[36,14057,58],{"emptyLinePlaceholder":57},[36,14059,14060,14062,14064],{"class":38,"line":710},[36,14061,713],{"class":46},[36,14063,716],{"class":50},[36,14065,719],{"class":124},[36,14067,14068,14070,14072,14074,14076,14078,14080,14082,14084,14086,14088],{"class":38,"line":722},[36,14069,104],{"class":50},[36,14071,107],{"class":42},[36,14073,729],{"class":110},[36,14075,114],{"class":42},[36,14077,67],{"class":50},[36,14079,107],{"class":42},[36,14081,738],{"class":110},[36,14083,114],{"class":42},[36,14085,140],{"class":50},[36,14087,107],{"class":42},[36,14089,747],{"class":50},[36,14091,14092],{"class":38,"line":750},[36,14093,58],{"emptyLinePlaceholder":57},[36,14095,14096,14098,14100,14102,14104,14106,14108],{"class":38,"line":755},[36,14097,758],{"class":46},[36,14099,222],{"class":50},[36,14101,763],{"class":42},[36,14103,766],{"class":50},[36,14105,763],{"class":42},[36,14107,771],{"class":50},[36,14109,774],{"class":124},[36,14111,14112,14114,14116,14118,14120,14122,14124,14126,14128,14130,14132],{"class":38,"line":777},[36,14113,104],{"class":50},[36,14115,107],{"class":42},[36,14117,729],{"class":110},[36,14119,114],{"class":42},[36,14121,67],{"class":50},[36,14123,107],{"class":42},[36,14125,738],{"class":110},[36,14127,114],{"class":42},[36,14129,140],{"class":50},[36,14131,107],{"class":42},[36,14133,747],{"class":50},[36,14135,14136],{"class":38,"line":802},[36,14137,58],{"emptyLinePlaceholder":57},[36,14139,14140,14142,14144],{"class":38,"line":807},[36,14141,810],{"class":46},[36,14143,716],{"class":50},[36,14145,815],{"class":124},[36,14147,14148,14150,14152,14154,14156,14158,14160,14162,14164,14166,14168],{"class":38,"line":818},[36,14149,104],{"class":50},[36,14151,107],{"class":42},[36,14153,729],{"class":110},[36,14155,114],{"class":42},[36,14157,67],{"class":50},[36,14159,107],{"class":42},[36,14161,738],{"class":110},[36,14163,114],{"class":42},[36,14165,140],{"class":50},[36,14167,107],{"class":42},[36,14169,747],{"class":50},[36,14171,14172],{"class":38,"line":843},[36,14173,58],{"emptyLinePlaceholder":57},[36,14175,14176,14178,14180,14182],{"class":38,"line":848},[36,14177,219],{"class":46},[36,14179,222],{"class":50},[36,14181,225],{"class":110},[36,14183,228],{"class":50},[36,14185,14186],{"class":38,"line":859},[36,14187,58],{"emptyLinePlaceholder":57},[36,14189,14190,14192,14194],{"class":38,"line":864},[36,14191,239],{"class":42},[36,14193,242],{"class":73},[36,14195,77],{"class":50},[36,14197,14198],{"class":38,"line":873},[36,14199,250],{"class":50},[14,14201,879],{"id":878},[19,14203,882],{},[19,14205,885,14206],{},[887,14207,889],{},[19,14209,892],{},[26,14211,14212],{"className":895,"code":896,"language":897,"meta":31,"style":31},[33,14213,14214,14218,14226,14240,14246,14250,14254,14258,14266,14282,14288,14292,14296,14304,14308,14312,14324,14342,14360,14364,14368,14380,14398,14416,14420,14434,14438,14456,14474,14478,14488,14492,14500],{"__ignoreMap":31},[36,14215,14216],{"class":38,"line":39},[36,14217,904],{"class":124},[36,14219,14220,14222,14224],{"class":38,"line":54},[36,14221,614],{"class":42},[36,14223,911],{"class":46},[36,14225,51],{"class":50},[36,14227,14228,14230,14232,14234,14236,14238],{"class":38,"line":61},[36,14229,64],{"class":42},[36,14231,67],{"class":50},[36,14233,70],{"class":42},[36,14235,74],{"class":73},[36,14237,926],{"class":50},[36,14239,929],{"class":124},[36,14241,14242,14244],{"class":38,"line":80},[36,14243,239],{"class":42},[36,14245,93],{"class":50},[36,14247,14248],{"class":38,"line":96},[36,14249,250],{"class":50},[36,14251,14252],{"class":38,"line":101},[36,14253,58],{"emptyLinePlaceholder":57},[36,14255,14256],{"class":38,"line":128},[36,14257,948],{"class":124},[36,14259,14260,14262,14264],{"class":38,"line":149},[36,14261,614],{"class":42},[36,14263,955],{"class":46},[36,14265,51],{"class":50},[36,14267,14268,14270,14272,14274,14276,14278,14280],{"class":38,"line":154},[36,14269,962],{"class":42},[36,14271,965],{"class":42},[36,14273,67],{"class":50},[36,14275,70],{"class":42},[36,14277,319],{"class":73},[36,14279,926],{"class":50},[36,14281,976],{"class":124},[36,14283,14284,14286],{"class":38,"line":167},[36,14285,239],{"class":42},[36,14287,93],{"class":50},[36,14289,14290],{"class":38,"line":172},[36,14291,250],{"class":50},[36,14293,14294],{"class":38,"line":192},[36,14295,58],{"emptyLinePlaceholder":57},[36,14297,14298,14300,14302],{"class":38,"line":211},[36,14299,43],{"class":42},[36,14301,47],{"class":46},[36,14303,51],{"class":50},[36,14305,14306],{"class":38,"line":216},[36,14307,58],{"emptyLinePlaceholder":57},[36,14309,14310],{"class":38,"line":231},[36,14311,1007],{"class":124},[36,14313,14314,14316,14318,14320,14322],{"class":38,"line":236},[36,14315,1012],{"class":42},[36,14317,1015],{"class":50},[36,14319,70],{"class":42},[36,14321,911],{"class":46},[36,14323,1022],{"class":50},[36,14325,14326,14328,14330,14332,14334,14336,14338,14340],{"class":38,"line":247},[36,14327,104],{"class":50},[36,14329,107],{"class":42},[36,14331,1031],{"class":110},[36,14333,114],{"class":42},[36,14335,1015],{"class":50},[36,14337,107],{"class":42},[36,14339,121],{"class":50},[36,14341,1042],{"class":124},[36,14343,14344,14346,14348,14350,14352,14354,14356,14358],{"class":38,"line":637},[36,14345,104],{"class":50},[36,14347,107],{"class":42},[36,14349,1031],{"class":110},[36,14351,114],{"class":42},[36,14353,1015],{"class":50},[36,14355,107],{"class":42},[36,14357,121],{"class":50},[36,14359,1061],{"class":124},[36,14361,14362],{"class":38,"line":646},[36,14363,58],{"emptyLinePlaceholder":57},[36,14365,14366],{"class":38,"line":655},[36,14367,1070],{"class":124},[36,14369,14370,14372,14374,14376,14378],{"class":38,"line":660},[36,14371,1012],{"class":42},[36,14373,1077],{"class":50},[36,14375,70],{"class":42},[36,14377,955],{"class":46},[36,14379,1022],{"class":50},[36,14381,14382,14384,14386,14388,14390,14392,14394,14396],{"class":38,"line":665},[36,14383,104],{"class":50},[36,14385,107],{"class":42},[36,14387,1092],{"class":110},[36,14389,114],{"class":42},[36,14391,1077],{"class":50},[36,14393,107],{"class":42},[36,14395,121],{"class":50},[36,14397,1103],{"class":124},[36,14399,14400,14402,14404,14406,14408,14410,14412,14414],{"class":38,"line":674},[36,14401,104],{"class":50},[36,14403,107],{"class":42},[36,14405,1092],{"class":110},[36,14407,114],{"class":42},[36,14409,1077],{"class":50},[36,14411,107],{"class":42},[36,14413,121],{"class":50},[36,14415,1103],{"class":124},[36,14417,14418],{"class":38,"line":679},[36,14419,58],{"emptyLinePlaceholder":57},[36,14421,14422,14424,14426,14428,14430,14432],{"class":38,"line":692},[36,14423,1130],{"class":46},[36,14425,1133],{"class":50},[36,14427,70],{"class":42},[36,14429,1138],{"class":73},[36,14431,926],{"class":50},[36,14433,1143],{"class":124},[36,14435,14436],{"class":38,"line":705},[36,14437,58],{"emptyLinePlaceholder":57},[36,14439,14440,14442,14444,14446,14448,14450,14452,14454],{"class":38,"line":710},[36,14441,104],{"class":50},[36,14443,107],{"class":42},[36,14445,1092],{"class":110},[36,14447,114],{"class":42},[36,14449,1077],{"class":50},[36,14451,107],{"class":42},[36,14453,121],{"class":50},[36,14455,1166],{"class":124},[36,14457,14458,14460,14462,14464,14466,14468,14470,14472],{"class":38,"line":722},[36,14459,104],{"class":50},[36,14461,107],{"class":42},[36,14463,1092],{"class":110},[36,14465,114],{"class":42},[36,14467,1077],{"class":50},[36,14469,107],{"class":42},[36,14471,121],{"class":50},[36,14473,1166],{"class":124},[36,14475,14476],{"class":38,"line":750},[36,14477,58],{"emptyLinePlaceholder":57},[36,14479,14480,14482,14484,14486],{"class":38,"line":755},[36,14481,219],{"class":46},[36,14483,222],{"class":50},[36,14485,225],{"class":110},[36,14487,228],{"class":50},[36,14489,14490],{"class":38,"line":777},[36,14491,58],{"emptyLinePlaceholder":57},[36,14493,14494,14496,14498],{"class":38,"line":802},[36,14495,239],{"class":42},[36,14497,242],{"class":73},[36,14499,77],{"class":50},[36,14501,14502],{"class":38,"line":807},[36,14503,250],{"class":50},[14,14505,1218],{"id":1217},[19,14507,1221,14508],{},[887,14509,1224],{},[26,14511,14512],{"className":28,"code":1227,"language":30,"meta":31,"style":31},[33,14513,14514,14518,14532,14544,14548,14556,14568,14572,14576,14586,14598,14602,14618,14634,14638,14644,14652],{"__ignoreMap":31},[36,14515,14516],{"class":38,"line":39},[36,14517,1234],{"class":124},[36,14519,14520,14522,14524,14526,14528,14530],{"class":38,"line":54},[36,14521,463],{"class":42},[36,14523,1241],{"class":46},[36,14525,222],{"class":50},[36,14527,614],{"class":42},[36,14529,1248],{"class":473},[36,14531,1251],{"class":50},[36,14533,14534,14536,14538,14540,14542],{"class":38,"line":61},[36,14535,1256],{"class":50},[36,14537,70],{"class":42},[36,14539,162],{"class":73},[36,14541,926],{"class":50},[36,14543,1265],{"class":124},[36,14545,14546],{"class":38,"line":80},[36,14547,250],{"class":50},[36,14549,14550,14552,14554],{"class":38,"line":96},[36,14551,43],{"class":42},[36,14553,47],{"class":46},[36,14555,1278],{"class":50},[36,14557,14558,14560,14562,14564,14566],{"class":38,"line":101},[36,14559,64],{"class":42},[36,14561,67],{"class":50},[36,14563,70],{"class":42},[36,14565,74],{"class":73},[36,14567,77],{"class":50},[36,14569,14570],{"class":38,"line":128},[36,14571,1295],{"class":50},[36,14573,14574],{"class":38,"line":149},[36,14575,1300],{"class":124},[36,14577,14578,14580,14582,14584],{"class":38,"line":154},[36,14579,1012],{"class":42},[36,14581,1015],{"class":50},[36,14583,70],{"class":42},[36,14585,1311],{"class":50},[36,14587,14588,14590,14592,14594,14596],{"class":38,"line":167},[36,14589,1256],{"class":50},[36,14591,70],{"class":42},[36,14593,319],{"class":73},[36,14595,926],{"class":50},[36,14597,1324],{"class":124},[36,14599,14600],{"class":38,"line":172},[36,14601,1295],{"class":50},[36,14603,14604,14606,14608,14610,14612,14614,14616],{"class":38,"line":192},[36,14605,104],{"class":50},[36,14607,107],{"class":42},[36,14609,729],{"class":110},[36,14611,114],{"class":42},[36,14613,67],{"class":50},[36,14615,107],{"class":42},[36,14617,747],{"class":50},[36,14619,14620,14622,14624,14626,14628,14630,14632],{"class":38,"line":211},[36,14621,104],{"class":50},[36,14623,107],{"class":42},[36,14625,1353],{"class":110},[36,14627,114],{"class":42},[36,14629,1015],{"class":50},[36,14631,107],{"class":42},[36,14633,747],{"class":50},[36,14635,14636],{"class":38,"line":216},[36,14637,1295],{"class":50},[36,14639,14640,14642],{"class":38,"line":231},[36,14641,1370],{"class":46},[36,14643,1373],{"class":50},[36,14645,14646,14648,14650],{"class":38,"line":236},[36,14647,239],{"class":42},[36,14649,242],{"class":73},[36,14651,77],{"class":50},[36,14653,14654],{"class":38,"line":247},[36,14655,250],{"class":50},[19,14657,1388],{},[256,14659,14660,14662],{},[259,14661,1393],{},[259,14663,1396],{},[14,14665,1400],{"id":1399},[19,14667,1403],{},[19,14669,1406,14670,1410],{},[887,14671,1409],{},[26,14673,14674],{"className":28,"code":1413,"language":30,"meta":31,"style":31},[33,14675,14676,14680,14684,14700,14704,14716,14720,14724,14732,14736,14740,14744,14758,14762,14768,14780,14784,14788,14800,14806,14810,14820,14824,14832],{"__ignoreMap":31},[36,14677,14678],{"class":38,"line":39},[36,14679,1420],{"class":124},[36,14681,14682],{"class":38,"line":54},[36,14683,1425],{"class":124},[36,14685,14686,14688,14690,14692,14694,14696,14698],{"class":38,"line":61},[36,14687,463],{"class":42},[36,14689,1432],{"class":46},[36,14691,222],{"class":50},[36,14693,1437],{"class":42},[36,14695,1440],{"class":42},[36,14697,1443],{"class":473},[36,14699,485],{"class":50},[36,14701,14702],{"class":38,"line":80},[36,14703,1450],{"class":124},[36,14705,14706,14708,14710,14712,14714],{"class":38,"line":96},[36,14707,104],{"class":50},[36,14709,107],{"class":42},[36,14711,1459],{"class":50},[36,14713,107],{"class":42},[36,14715,747],{"class":50},[36,14717,14718],{"class":38,"line":101},[36,14719,250],{"class":50},[36,14721,14722],{"class":38,"line":128},[36,14723,58],{"emptyLinePlaceholder":57},[36,14725,14726,14728,14730],{"class":38,"line":149},[36,14727,43],{"class":42},[36,14729,47],{"class":46},[36,14731,51],{"class":50},[36,14733,14734],{"class":38,"line":154},[36,14735,58],{"emptyLinePlaceholder":57},[36,14737,14738],{"class":38,"line":167},[36,14739,1488],{"class":124},[36,14741,14742],{"class":38,"line":172},[36,14743,1493],{"class":124},[36,14745,14746,14748,14750,14752,14754,14756],{"class":38,"line":192},[36,14747,1498],{"class":42},[36,14749,1440],{"class":42},[36,14751,1015],{"class":50},[36,14753,70],{"class":42},[36,14755,74],{"class":73},[36,14757,77],{"class":50},[36,14759,14760],{"class":38,"line":211},[36,14761,58],{"emptyLinePlaceholder":57},[36,14763,14764,14766],{"class":38,"line":216},[36,14765,1517],{"class":124},[36,14767,1520],{"class":124},[36,14769,14770,14772,14774,14776,14778],{"class":38,"line":231},[36,14771,104],{"class":50},[36,14773,107],{"class":42},[36,14775,1015],{"class":50},[36,14777,107],{"class":42},[36,14779,747],{"class":50},[36,14781,14782],{"class":38,"line":236},[36,14783,58],{"emptyLinePlaceholder":57},[36,14785,14786],{"class":38,"line":247},[36,14787,1541],{"class":124},[36,14789,14790,14792,14794,14796,14798],{"class":38,"line":637},[36,14791,64],{"class":42},[36,14793,67],{"class":50},[36,14795,70],{"class":42},[36,14797,74],{"class":73},[36,14799,77],{"class":50},[36,14801,14802,14804],{"class":38,"line":646},[36,14803,1558],{"class":46},[36,14805,1373],{"class":50},[36,14807,14808],{"class":38,"line":655},[36,14809,58],{"emptyLinePlaceholder":57},[36,14811,14812,14814,14816,14818],{"class":38,"line":660},[36,14813,219],{"class":46},[36,14815,222],{"class":50},[36,14817,225],{"class":110},[36,14819,228],{"class":50},[36,14821,14822],{"class":38,"line":665},[36,14823,58],{"emptyLinePlaceholder":57},[36,14825,14826,14828,14830],{"class":38,"line":674},[36,14827,239],{"class":42},[36,14829,242],{"class":73},[36,14831,77],{"class":50},[36,14833,14834],{"class":38,"line":679},[36,14835,250],{"class":50},[1592,14837,1594],{},{"title":31,"searchDepth":54,"depth":54,"links":14839},[14840,14841,14842,14843,14844,14845],{"id":16,"depth":54,"text":17},{"id":253,"depth":54,"text":254},{"id":441,"depth":54,"text":442},{"id":878,"depth":54,"text":879},{"id":1217,"depth":54,"text":1218},{"id":1399,"depth":54,"text":1400},{},{"title":5,"description":31},{"id":14849,"title":14850,"body":14851,"description":31,"extension":1603,"meta":15932,"navigation":57,"path":15933,"seo":15934,"stem":15935,"__hash__":15936},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14852,"toc":15924},[14853,14856,14860,14863,14868,15100,15102,15113,15117,15120,15128,15232,15235,15239,15242,15246,15249,15254,15276,15282,15609,15612,15616,15624,15921],[10,14854,14850],{"id":14855},"_7函数高级部分",[14,14857,14859],{"id":14858},"_71函数默认参数","7.1函数默认参数",[19,14861,14862],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14864,6670,14865],{},[33,14866,14867],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,14869,14871],{"className":28,"code":14870,"language":30,"meta":31,"style":31},"int func(int a, int b = 10, int c = 10) {\n    return a + b + c;\n}\n\n\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\nint func2(int a = 10, int b = 10);\nint func2(int a, int b) {\n    return a + b;\n}\n\nint main() {\n\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(20, 20) \u003C\u003C endl;\n    cout \u003C\u003C \"ret = \" \u003C\u003C func(100) \u003C\u003C endl;\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,14872,14873,14908,14923,14927,14931,14936,14941,14970,14990,15000,15004,15008,15016,15020,15048,15070,15074,15084,15088,15096],{"__ignoreMap":31},[36,14874,14875,14877,14879,14881,14883,14885,14887,14889,14891,14894,14896,14898,14900,14902,14904,14906],{"class":38,"line":39},[36,14876,43],{"class":42},[36,14878,1241],{"class":46},[36,14880,222],{"class":50},[36,14882,43],{"class":42},[36,14884,474],{"class":473},[36,14886,477],{"class":50},[36,14888,43],{"class":42},[36,14890,482],{"class":473},[36,14892,14893],{"class":42}," =",[36,14895,74],{"class":73},[36,14897,477],{"class":50},[36,14899,43],{"class":42},[36,14901,4342],{"class":473},[36,14903,14893],{"class":42},[36,14905,74],{"class":73},[36,14907,485],{"class":50},[36,14909,14910,14912,14914,14916,14918,14920],{"class":38,"line":54},[36,14911,239],{"class":42},[36,14913,67],{"class":50},[36,14915,2148],{"class":42},[36,14917,140],{"class":50},[36,14919,2148],{"class":42},[36,14921,14922],{"class":50}," c;\n",[36,14924,14925],{"class":38,"line":61},[36,14926,250],{"class":50},[36,14928,14929],{"class":38,"line":80},[36,14930,58],{"emptyLinePlaceholder":57},[36,14932,14933],{"class":38,"line":96},[36,14934,14935],{"class":124},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[36,14937,14938],{"class":38,"line":101},[36,14939,14940],{"class":124},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[36,14942,14943,14945,14948,14950,14952,14954,14956,14958,14960,14962,14964,14966,14968],{"class":38,"line":128},[36,14944,43],{"class":42},[36,14946,14947],{"class":46}," func2",[36,14949,222],{"class":50},[36,14951,43],{"class":42},[36,14953,474],{"class":473},[36,14955,14893],{"class":42},[36,14957,74],{"class":73},[36,14959,477],{"class":50},[36,14961,43],{"class":42},[36,14963,482],{"class":473},[36,14965,14893],{"class":42},[36,14967,74],{"class":73},[36,14969,228],{"class":50},[36,14971,14972,14974,14976,14978,14980,14982,14984,14986,14988],{"class":38,"line":149},[36,14973,43],{"class":42},[36,14975,14947],{"class":46},[36,14977,222],{"class":50},[36,14979,43],{"class":42},[36,14981,474],{"class":473},[36,14983,477],{"class":50},[36,14985,43],{"class":42},[36,14987,482],{"class":473},[36,14989,485],{"class":50},[36,14991,14992,14994,14996,14998],{"class":38,"line":154},[36,14993,239],{"class":42},[36,14995,67],{"class":50},[36,14997,2148],{"class":42},[36,14999,506],{"class":50},[36,15001,15002],{"class":38,"line":167},[36,15003,250],{"class":50},[36,15005,15006],{"class":38,"line":172},[36,15007,58],{"emptyLinePlaceholder":57},[36,15009,15010,15012,15014],{"class":38,"line":192},[36,15011,43],{"class":42},[36,15013,47],{"class":46},[36,15015,51],{"class":50},[36,15017,15018],{"class":38,"line":211},[36,15019,58],{"emptyLinePlaceholder":57},[36,15021,15022,15024,15026,15029,15031,15033,15035,15037,15039,15041,15044,15046],{"class":38,"line":216},[36,15023,104],{"class":50},[36,15025,107],{"class":42},[36,15027,15028],{"class":110}," \"ret = \"",[36,15030,114],{"class":42},[36,15032,1241],{"class":46},[36,15034,222],{"class":50},[36,15036,2367],{"class":73},[36,15038,477],{"class":50},[36,15040,2367],{"class":73},[36,15042,15043],{"class":50},") ",[36,15045,107],{"class":42},[36,15047,747],{"class":50},[36,15049,15050,15052,15054,15056,15058,15060,15062,15064,15066,15068],{"class":38,"line":231},[36,15051,104],{"class":50},[36,15053,107],{"class":42},[36,15055,15028],{"class":110},[36,15057,114],{"class":42},[36,15059,1241],{"class":46},[36,15061,222],{"class":50},[36,15063,1979],{"class":73},[36,15065,15043],{"class":50},[36,15067,107],{"class":42},[36,15069,747],{"class":50},[36,15071,15072],{"class":38,"line":236},[36,15073,58],{"emptyLinePlaceholder":57},[36,15075,15076,15078,15080,15082],{"class":38,"line":247},[36,15077,219],{"class":46},[36,15079,222],{"class":50},[36,15081,225],{"class":110},[36,15083,228],{"class":50},[36,15085,15086],{"class":38,"line":637},[36,15087,58],{"emptyLinePlaceholder":57},[36,15089,15090,15092,15094],{"class":38,"line":646},[36,15091,239],{"class":42},[36,15093,242],{"class":73},[36,15095,77],{"class":50},[36,15097,15098],{"class":38,"line":655},[36,15099,250],{"class":50},[19,15101,1388],{},[256,15103,15104,15107,15110],{},[259,15105,15106],{},"我传就用我；没传就用你",[259,15108,15109],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[259,15111,15112],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15114,15116],{"id":15115},"_72函数的占位参数","7.2函数的占位参数",[19,15118,15119],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15121,15122,15124,15125],{},[887,15123,6670],{}," ",[33,15126,15127],{},"返回值类型 函数名 (数据类型){}",[26,15129,15131],{"className":28,"code":15130,"language":30,"meta":31,"style":31},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\nvoid func(int a, int) {\n    cout \u003C\u003C \"this is func\" \u003C\u003C endl;\n}\nint main() {\n\n    func(10,10); \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,15132,15133,15138,15156,15169,15173,15181,15185,15202,15206,15216,15220,15228],{"__ignoreMap":31},[36,15134,15135],{"class":38,"line":39},[36,15136,15137],{"class":124},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[36,15139,15140,15142,15144,15146,15148,15150,15152,15154],{"class":38,"line":54},[36,15141,463],{"class":42},[36,15143,1241],{"class":46},[36,15145,222],{"class":50},[36,15147,43],{"class":42},[36,15149,474],{"class":473},[36,15151,477],{"class":50},[36,15153,43],{"class":42},[36,15155,485],{"class":50},[36,15157,15158,15160,15162,15165,15167],{"class":38,"line":61},[36,15159,104],{"class":50},[36,15161,107],{"class":42},[36,15163,15164],{"class":110}," \"this is func\"",[36,15166,114],{"class":42},[36,15168,747],{"class":50},[36,15170,15171],{"class":38,"line":80},[36,15172,250],{"class":50},[36,15174,15175,15177,15179],{"class":38,"line":96},[36,15176,43],{"class":42},[36,15178,47],{"class":46},[36,15180,51],{"class":50},[36,15182,15183],{"class":38,"line":101},[36,15184,58],{"emptyLinePlaceholder":57},[36,15186,15187,15189,15191,15193,15195,15197,15199],{"class":38,"line":128},[36,15188,1370],{"class":46},[36,15190,222],{"class":50},[36,15192,2113],{"class":73},[36,15194,2045],{"class":50},[36,15196,2113],{"class":73},[36,15198,7448],{"class":50},[36,15200,15201],{"class":124}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[36,15203,15204],{"class":38,"line":149},[36,15205,58],{"emptyLinePlaceholder":57},[36,15207,15208,15210,15212,15214],{"class":38,"line":154},[36,15209,219],{"class":46},[36,15211,222],{"class":50},[36,15213,225],{"class":110},[36,15215,228],{"class":50},[36,15217,15218],{"class":38,"line":167},[36,15219,58],{"emptyLinePlaceholder":57},[36,15221,15222,15224,15226],{"class":38,"line":172},[36,15223,239],{"class":42},[36,15225,242],{"class":73},[36,15227,77],{"class":50},[36,15229,15230],{"class":38,"line":192},[36,15231,250],{"class":50},[19,15233,15234],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15236,15238],{"id":15237},"_73函数重载","7.3函数重载",[19,15240,15241],{},"意思是函数名是可以相同的",[1645,15243,15245],{"id":15244},"_731基本语法","7.3.1基本语法",[19,15247,15248],{},"作用：函数名可以相同，提高复用性",[19,15250,15251],{},[887,15252,15253],{},"函数重载满足条件：",[2674,15255,15256,15259,15262],{},[259,15257,15258],{},"同一个作用域下",[259,15260,15261],{},"函数名称相同",[259,15263,15264,15265,15268,15269,15272,15273],{},"函数参数",[887,15266,15267],{},"类型不同","  或者 ",[887,15270,15271],{},"个数不同"," 或者 ",[887,15274,15275],{},"顺序不同",[19,15277,15278,15281],{},[887,15279,15280],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,15283,15285],{"className":895,"code":15284,"language":897,"meta":31,"style":31},"\u002F\u002F函数重载需要函数都在同一个作用域下\nvoid func()\n{\n    cout \u003C\u003C \"func 的调用！\" \u003C\u003C endl;\n}\nvoid func(int a)\n{\n    cout \u003C\u003C \"func (int a) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a)\n{\n    cout \u003C\u003C \"func (double a)的调用！\" \u003C\u003C endl;\n}\nvoid func(int a ,double b)\n{\n    cout \u003C\u003C \"func (int a ,double b) 的调用！\" \u003C\u003C endl;\n}\nvoid func(double a ,int b)\n{\n    cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n}\n\n\u002F\u002F函数返回值不可以作为函数重载条件\n\u002F\u002Fint func(double a, int b)\n\u002F\u002F{\n\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n\u002F\u002F}\n\n\nint main() {\n\n    func();\n    func(10);\n    func(3.14);\n    func(10,3.14);\n    func(3.14 , 10);\n    \n    system(\"pause\");\n\n    return 0;\n}\n",[33,15286,15287,15292,15300,15304,15317,15321,15335,15339,15352,15356,15371,15375,15388,15392,15413,15417,15430,15434,15454,15458,15471,15475,15479,15484,15489,15494,15499,15504,15508,15512,15520,15524,15530,15540,15550,15564,15579,15583,15593,15597,15605],{"__ignoreMap":31},[36,15288,15289],{"class":38,"line":39},[36,15290,15291],{"class":124},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[36,15293,15294,15296,15298],{"class":38,"line":54},[36,15295,463],{"class":42},[36,15297,1241],{"class":46},[36,15299,3484],{"class":50},[36,15301,15302],{"class":38,"line":61},[36,15303,3076],{"class":50},[36,15305,15306,15308,15310,15313,15315],{"class":38,"line":80},[36,15307,104],{"class":50},[36,15309,107],{"class":42},[36,15311,15312],{"class":110}," \"func 的调用！\"",[36,15314,114],{"class":42},[36,15316,747],{"class":50},[36,15318,15319],{"class":38,"line":96},[36,15320,250],{"class":50},[36,15322,15323,15325,15327,15329,15331,15333],{"class":38,"line":101},[36,15324,463],{"class":42},[36,15326,1241],{"class":46},[36,15328,222],{"class":50},[36,15330,43],{"class":42},[36,15332,474],{"class":473},[36,15334,1680],{"class":50},[36,15336,15337],{"class":38,"line":128},[36,15338,3076],{"class":50},[36,15340,15341,15343,15345,15348,15350],{"class":38,"line":149},[36,15342,104],{"class":50},[36,15344,107],{"class":42},[36,15346,15347],{"class":110}," \"func (int a) 的调用！\"",[36,15349,114],{"class":42},[36,15351,747],{"class":50},[36,15353,15354],{"class":38,"line":154},[36,15355,250],{"class":50},[36,15357,15358,15360,15362,15364,15367,15369],{"class":38,"line":167},[36,15359,463],{"class":42},[36,15361,1241],{"class":46},[36,15363,222],{"class":50},[36,15365,15366],{"class":42},"double",[36,15368,474],{"class":473},[36,15370,1680],{"class":50},[36,15372,15373],{"class":38,"line":172},[36,15374,3076],{"class":50},[36,15376,15377,15379,15381,15384,15386],{"class":38,"line":192},[36,15378,104],{"class":50},[36,15380,107],{"class":42},[36,15382,15383],{"class":110}," \"func (double a)的调用！\"",[36,15385,114],{"class":42},[36,15387,747],{"class":50},[36,15389,15390],{"class":38,"line":211},[36,15391,250],{"class":50},[36,15393,15394,15396,15398,15400,15402,15404,15407,15409,15411],{"class":38,"line":216},[36,15395,463],{"class":42},[36,15397,1241],{"class":46},[36,15399,222],{"class":50},[36,15401,43],{"class":42},[36,15403,474],{"class":473},[36,15405,15406],{"class":50}," ,",[36,15408,15366],{"class":42},[36,15410,482],{"class":473},[36,15412,1680],{"class":50},[36,15414,15415],{"class":38,"line":231},[36,15416,3076],{"class":50},[36,15418,15419,15421,15423,15426,15428],{"class":38,"line":236},[36,15420,104],{"class":50},[36,15422,107],{"class":42},[36,15424,15425],{"class":110}," \"func (int a ,double b) 的调用！\"",[36,15427,114],{"class":42},[36,15429,747],{"class":50},[36,15431,15432],{"class":38,"line":247},[36,15433,250],{"class":50},[36,15435,15436,15438,15440,15442,15444,15446,15448,15450,15452],{"class":38,"line":637},[36,15437,463],{"class":42},[36,15439,1241],{"class":46},[36,15441,222],{"class":50},[36,15443,15366],{"class":42},[36,15445,474],{"class":473},[36,15447,15406],{"class":50},[36,15449,43],{"class":42},[36,15451,482],{"class":473},[36,15453,1680],{"class":50},[36,15455,15456],{"class":38,"line":646},[36,15457,3076],{"class":50},[36,15459,15460,15462,15464,15467,15469],{"class":38,"line":655},[36,15461,104],{"class":50},[36,15463,107],{"class":42},[36,15465,15466],{"class":110}," \"func (double a ,int b)的调用！\"",[36,15468,114],{"class":42},[36,15470,747],{"class":50},[36,15472,15473],{"class":38,"line":660},[36,15474,250],{"class":50},[36,15476,15477],{"class":38,"line":665},[36,15478,58],{"emptyLinePlaceholder":57},[36,15480,15481],{"class":38,"line":674},[36,15482,15483],{"class":124},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[36,15485,15486],{"class":38,"line":679},[36,15487,15488],{"class":124},"\u002F\u002Fint func(double a, int b)\n",[36,15490,15491],{"class":38,"line":692},[36,15492,15493],{"class":124},"\u002F\u002F{\n",[36,15495,15496],{"class":38,"line":705},[36,15497,15498],{"class":124},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[36,15500,15501],{"class":38,"line":710},[36,15502,15503],{"class":124},"\u002F\u002F}\n",[36,15505,15506],{"class":38,"line":722},[36,15507,58],{"emptyLinePlaceholder":57},[36,15509,15510],{"class":38,"line":750},[36,15511,58],{"emptyLinePlaceholder":57},[36,15513,15514,15516,15518],{"class":38,"line":755},[36,15515,43],{"class":42},[36,15517,47],{"class":46},[36,15519,51],{"class":50},[36,15521,15522],{"class":38,"line":777},[36,15523,58],{"emptyLinePlaceholder":57},[36,15525,15526,15528],{"class":38,"line":802},[36,15527,1370],{"class":46},[36,15529,1022],{"class":50},[36,15531,15532,15534,15536,15538],{"class":38,"line":807},[36,15533,1370],{"class":46},[36,15535,222],{"class":50},[36,15537,2113],{"class":73},[36,15539,228],{"class":50},[36,15541,15542,15544,15546,15548],{"class":38,"line":818},[36,15543,1370],{"class":46},[36,15545,222],{"class":50},[36,15547,1721],{"class":73},[36,15549,228],{"class":50},[36,15551,15552,15554,15556,15558,15560,15562],{"class":38,"line":843},[36,15553,1370],{"class":46},[36,15555,222],{"class":50},[36,15557,2113],{"class":73},[36,15559,2045],{"class":50},[36,15561,1721],{"class":73},[36,15563,228],{"class":50},[36,15565,15566,15568,15570,15572,15575,15577],{"class":38,"line":848},[36,15567,1370],{"class":46},[36,15569,222],{"class":50},[36,15571,1721],{"class":73},[36,15573,15574],{"class":50}," , ",[36,15576,2113],{"class":73},[36,15578,228],{"class":50},[36,15580,15581],{"class":38,"line":859},[36,15582,1295],{"class":50},[36,15584,15585,15587,15589,15591],{"class":38,"line":864},[36,15586,219],{"class":46},[36,15588,222],{"class":50},[36,15590,225],{"class":110},[36,15592,228],{"class":50},[36,15594,15595],{"class":38,"line":873},[36,15596,58],{"emptyLinePlaceholder":57},[36,15598,15599,15601,15603],{"class":38,"line":9454},[36,15600,239],{"class":42},[36,15602,242],{"class":73},[36,15604,77],{"class":50},[36,15606,15607],{"class":38,"line":9481},[36,15608,250],{"class":50},[19,15610,15611],{},"重点：函数返回值不可以作为函数重载条件！",[1645,15613,15615],{"id":15614},"_732注意事项","7.3.2注意事项",[2674,15617,15618,15621],{},[259,15619,15620],{},"引用作为重载条件!!!",[259,15622,15623],{},"函数重载碰到函数默认参数",[26,15625,15627],{"className":28,"code":15626,"language":30,"meta":31,"style":31},"\u002F\u002F函数重载注意事项\n\u002F\u002F1、引用作为重载条件\n\nvoid func(int &a)\n{\n    cout \u003C\u003C \"func (int &a) 调用 \" \u003C\u003C endl;\n}\n\nvoid func(const int &a)\n{\n    cout \u003C\u003C \"func (const int &a) 调用 \" \u003C\u003C endl;\n}\n\n\n\u002F\u002F2、函数重载碰到函数默认参数\n\nvoid func2(int a, int b = 10)\n{\n    cout \u003C\u003C \"func2(int a, int b = 10) 调用\" \u003C\u003C endl;\n}\n\nvoid func2(int a)\n{\n    cout \u003C\u003C \"func2(int a) 调用\" \u003C\u003C endl;\n}\n\nint main() {\n    \n    int a = 10;\n    func(a); \u002F\u002F调用无const   因为a本身是个变量，可读可写\n    func(10);\u002F\u002F调用有const   10是个常量\n\n\n    \u002F\u002Ffunc2(10); \u002F\u002F碰到默认参数产生歧义，需要避免\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,15628,15629,15634,15639,15643,15659,15663,15676,15680,15684,15702,15706,15719,15723,15727,15731,15736,15740,15764,15768,15781,15785,15789,15803,15807,15820,15824,15828,15836,15840,15852,15862,15875,15879,15883,15891,15895,15905,15909,15917],{"__ignoreMap":31},[36,15630,15631],{"class":38,"line":39},[36,15632,15633],{"class":124},"\u002F\u002F函数重载注意事项\n",[36,15635,15636],{"class":38,"line":54},[36,15637,15638],{"class":124},"\u002F\u002F1、引用作为重载条件\n",[36,15640,15641],{"class":38,"line":61},[36,15642,58],{"emptyLinePlaceholder":57},[36,15644,15645,15647,15649,15651,15653,15655,15657],{"class":38,"line":80},[36,15646,463],{"class":42},[36,15648,1241],{"class":46},[36,15650,222],{"class":50},[36,15652,43],{"class":42},[36,15654,85],{"class":42},[36,15656,1906],{"class":473},[36,15658,1680],{"class":50},[36,15660,15661],{"class":38,"line":96},[36,15662,3076],{"class":50},[36,15664,15665,15667,15669,15672,15674],{"class":38,"line":101},[36,15666,104],{"class":50},[36,15668,107],{"class":42},[36,15670,15671],{"class":110}," \"func (int &a) 调用 \"",[36,15673,114],{"class":42},[36,15675,747],{"class":50},[36,15677,15678],{"class":38,"line":128},[36,15679,250],{"class":50},[36,15681,15682],{"class":38,"line":149},[36,15683,58],{"emptyLinePlaceholder":57},[36,15685,15686,15688,15690,15692,15694,15696,15698,15700],{"class":38,"line":154},[36,15687,463],{"class":42},[36,15689,1241],{"class":46},[36,15691,222],{"class":50},[36,15693,1437],{"class":42},[36,15695,965],{"class":42},[36,15697,85],{"class":42},[36,15699,1906],{"class":473},[36,15701,1680],{"class":50},[36,15703,15704],{"class":38,"line":167},[36,15705,3076],{"class":50},[36,15707,15708,15710,15712,15715,15717],{"class":38,"line":172},[36,15709,104],{"class":50},[36,15711,107],{"class":42},[36,15713,15714],{"class":110}," \"func (const int &a) 调用 \"",[36,15716,114],{"class":42},[36,15718,747],{"class":50},[36,15720,15721],{"class":38,"line":192},[36,15722,250],{"class":50},[36,15724,15725],{"class":38,"line":211},[36,15726,58],{"emptyLinePlaceholder":57},[36,15728,15729],{"class":38,"line":216},[36,15730,58],{"emptyLinePlaceholder":57},[36,15732,15733],{"class":38,"line":231},[36,15734,15735],{"class":124},"\u002F\u002F2、函数重载碰到函数默认参数\n",[36,15737,15738],{"class":38,"line":236},[36,15739,58],{"emptyLinePlaceholder":57},[36,15741,15742,15744,15746,15748,15750,15752,15754,15756,15758,15760,15762],{"class":38,"line":247},[36,15743,463],{"class":42},[36,15745,14947],{"class":46},[36,15747,222],{"class":50},[36,15749,43],{"class":42},[36,15751,474],{"class":473},[36,15753,477],{"class":50},[36,15755,43],{"class":42},[36,15757,482],{"class":473},[36,15759,14893],{"class":42},[36,15761,74],{"class":73},[36,15763,1680],{"class":50},[36,15765,15766],{"class":38,"line":637},[36,15767,3076],{"class":50},[36,15769,15770,15772,15774,15777,15779],{"class":38,"line":646},[36,15771,104],{"class":50},[36,15773,107],{"class":42},[36,15775,15776],{"class":110}," \"func2(int a, int b = 10) 调用\"",[36,15778,114],{"class":42},[36,15780,747],{"class":50},[36,15782,15783],{"class":38,"line":655},[36,15784,250],{"class":50},[36,15786,15787],{"class":38,"line":660},[36,15788,58],{"emptyLinePlaceholder":57},[36,15790,15791,15793,15795,15797,15799,15801],{"class":38,"line":665},[36,15792,463],{"class":42},[36,15794,14947],{"class":46},[36,15796,222],{"class":50},[36,15798,43],{"class":42},[36,15800,474],{"class":473},[36,15802,1680],{"class":50},[36,15804,15805],{"class":38,"line":674},[36,15806,3076],{"class":50},[36,15808,15809,15811,15813,15816,15818],{"class":38,"line":679},[36,15810,104],{"class":50},[36,15812,107],{"class":42},[36,15814,15815],{"class":110}," \"func2(int a) 调用\"",[36,15817,114],{"class":42},[36,15819,747],{"class":50},[36,15821,15822],{"class":38,"line":692},[36,15823,250],{"class":50},[36,15825,15826],{"class":38,"line":705},[36,15827,58],{"emptyLinePlaceholder":57},[36,15829,15830,15832,15834],{"class":38,"line":710},[36,15831,43],{"class":42},[36,15833,47],{"class":46},[36,15835,51],{"class":50},[36,15837,15838],{"class":38,"line":722},[36,15839,1295],{"class":50},[36,15841,15842,15844,15846,15848,15850],{"class":38,"line":750},[36,15843,64],{"class":42},[36,15845,67],{"class":50},[36,15847,70],{"class":42},[36,15849,74],{"class":73},[36,15851,77],{"class":50},[36,15853,15854,15856,15859],{"class":38,"line":755},[36,15855,1370],{"class":46},[36,15857,15858],{"class":50},"(a);",[36,15860,15861],{"class":124}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[36,15863,15864,15866,15868,15870,15872],{"class":38,"line":777},[36,15865,1370],{"class":46},[36,15867,222],{"class":50},[36,15869,2113],{"class":73},[36,15871,7448],{"class":50},[36,15873,15874],{"class":124},"\u002F\u002F调用有const   10是个常量\n",[36,15876,15877],{"class":38,"line":802},[36,15878,58],{"emptyLinePlaceholder":57},[36,15880,15881],{"class":38,"line":807},[36,15882,58],{"emptyLinePlaceholder":57},[36,15884,15885,15888],{"class":38,"line":818},[36,15886,15887],{"class":124},"    \u002F\u002Ffunc2(10);",[36,15889,15890],{"class":124}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[36,15892,15893],{"class":38,"line":843},[36,15894,58],{"emptyLinePlaceholder":57},[36,15896,15897,15899,15901,15903],{"class":38,"line":848},[36,15898,219],{"class":46},[36,15900,222],{"class":50},[36,15902,225],{"class":110},[36,15904,228],{"class":50},[36,15906,15907],{"class":38,"line":859},[36,15908,58],{"emptyLinePlaceholder":57},[36,15910,15911,15913,15915],{"class":38,"line":864},[36,15912,239],{"class":42},[36,15914,242],{"class":73},[36,15916,77],{"class":50},[36,15918,15919],{"class":38,"line":873},[36,15920,250],{"class":50},[1592,15922,15923],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":15925},[15926,15927,15928],{"id":14858,"depth":54,"text":14859},{"id":15115,"depth":54,"text":15116},{"id":15237,"depth":54,"text":15238,"children":15929},[15930,15931],{"id":15244,"depth":61,"text":15245},{"id":15614,"depth":61,"text":15615},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14850,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15938,"title":15939,"body":15940,"description":24694,"extension":1603,"meta":24695,"navigation":57,"path":24696,"seo":24697,"stem":24698,"__hash__":24699},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15941,"toc":24675},[15942,15945,15951,15958,15963,15966,15969,15972,15976,15980,15983,15986,15994,15999,16002,16009,16014,16173,16176,16429,16432,16435,16438,16443,16446,16449,16460,16465,16701,16705,16715,16718,16726,16873,16877,16880,16883,16887,17332,17336,17344,17352,18264,18271,18276,18904,18907,18910,18913,19032,19035,19122,19125,19251,19254,19348,19351,19704,19708,19716,19720,19727,19730,19733,19744,19750,19755,19767,19775,19795,19803,19820,20006,20009,20013,20016,20019,20022,20025,20028,20031,20034,20494,20500,20504,20507,20518,21105,21108,21597,21601,21604,21607,21610,21613,21616,21624,22020,22024,22027,22030,22477,22480,22483,22488,22491,22496,22499,22503,22506,22508,22514,22517,22823,22833,22874,22878,22881,22883,22916,22919,23226,23228,23243,23246,23269,23278,23284,23287,23291,23294,23297,23302,23313,23318,23326,23331,23461,23464,23467,23642,23647,23859,23863,23866,23980,23985,24224,24228,24232,24235,24238,24243,24348,24351,24354,24357,24361,24472,24475,24478,24483,24535,24538,24541,24546,24592,24595,24600,24668,24670,24673],[10,15943,15939],{"id":15944},"_8类和对象",[19,15946,15947,15948],{},"C++面向对象的三大特性为",[887,15949,15950],{},"封装、继承、多态",[19,15952,15953,15954,15957],{},"C++认为",[887,15955,15956],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15959,15960],{},[887,15961,15962],{},"例如：",[19,15964,15965],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15967,15968],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15970,15971],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15973,15975],{"id":15974},"_81封装","8.1封装",[1645,15977,15979],{"id":15978},"_811封装的意义","8.1.1封装的意义",[19,15981,15982],{},"封装是C++面向对象三大特性之一",[19,15984,15985],{},"封装的意义：",[2674,15987,15988,15991],{},[259,15989,15990],{},"将属性和行为作为一个整体，表现生活中的事物",[259,15992,15993],{},"将属性和行为加以权限控制",[19,15995,15996],{},[887,15997,15998],{},"封装意义一：",[19,16000,16001],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16003,16004,15124,16006],{},[887,16005,6670],{},[33,16007,16008],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[256,16010,16011],{},[259,16012,16013],{},"**示例1：**设计一个圆类，求圆的周长",[26,16015,16017],{"className":28,"code":16016,"language":30,"meta":31,"style":31},"class Circle\n{\n    \u002F\u002F访问权限\n    \u002F\u002F公共权限\npublic:\n    \u002F\u002F属性\n    int m_r;\n    \u002F\u002F行为\n    double calculateZC()\n    {\n        return 2*PI*m_r;\n    }\n};\nint main()\n{\n    \u002F\u002F通过圆类 创建具体的圆(对象)\n    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n    Circle c1;\n    \u002F\u002F给圆对象 的属性进行赋值\n    c1.m_r=10;\n    cout\u003C\u003C\"圆的周长\"\u003C\u003Cc1.calculateZC()\u003C\u003Cendl;\n}\n",[33,16018,16019,16027,16031,16036,16041,16046,16051,16058,16063,16073,16077,16095,16099,16103,16111,16115,16120,16125,16130,16135,16146,16169],{"__ignoreMap":31},[36,16020,16021,16024],{"class":38,"line":39},[36,16022,16023],{"class":42},"class",[36,16025,16026],{"class":46}," Circle\n",[36,16028,16029],{"class":38,"line":54},[36,16030,3076],{"class":50},[36,16032,16033],{"class":38,"line":61},[36,16034,16035],{"class":124},"    \u002F\u002F访问权限\n",[36,16037,16038],{"class":38,"line":80},[36,16039,16040],{"class":124},"    \u002F\u002F公共权限\n",[36,16042,16043],{"class":38,"line":96},[36,16044,16045],{"class":42},"public:\n",[36,16047,16048],{"class":38,"line":101},[36,16049,16050],{"class":124},"    \u002F\u002F属性\n",[36,16052,16053,16055],{"class":38,"line":128},[36,16054,64],{"class":42},[36,16056,16057],{"class":50}," m_r;\n",[36,16059,16060],{"class":38,"line":149},[36,16061,16062],{"class":124},"    \u002F\u002F行为\n",[36,16064,16065,16068,16071],{"class":38,"line":154},[36,16066,16067],{"class":42},"    double",[36,16069,16070],{"class":46}," calculateZC",[36,16072,3484],{"class":50},[36,16074,16075],{"class":38,"line":167},[36,16076,3537],{"class":50},[36,16078,16079,16082,16085,16087,16090,16092],{"class":38,"line":172},[36,16080,16081],{"class":42},"        return",[36,16083,16084],{"class":73}," 2",[36,16086,2122],{"class":42},[36,16088,16089],{"class":50},"PI",[36,16091,2122],{"class":42},[36,16093,16094],{"class":50},"m_r;\n",[36,16096,16097],{"class":38,"line":192},[36,16098,3693],{"class":50},[36,16100,16101],{"class":38,"line":211},[36,16102,5486],{"class":50},[36,16104,16105,16107,16109],{"class":38,"line":216},[36,16106,43],{"class":42},[36,16108,47],{"class":46},[36,16110,3484],{"class":50},[36,16112,16113],{"class":38,"line":231},[36,16114,3076],{"class":50},[36,16116,16117],{"class":38,"line":236},[36,16118,16119],{"class":124},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[36,16121,16122],{"class":38,"line":247},[36,16123,16124],{"class":124},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[36,16126,16127],{"class":38,"line":637},[36,16128,16129],{"class":50},"    Circle c1;\n",[36,16131,16132],{"class":38,"line":646},[36,16133,16134],{"class":124},"    \u002F\u002F给圆对象 的属性进行赋值\n",[36,16136,16137,16140,16142,16144],{"class":38,"line":655},[36,16138,16139],{"class":50},"    c1.m_r",[36,16141,70],{"class":42},[36,16143,2113],{"class":73},[36,16145,77],{"class":50},[36,16147,16148,16150,16152,16155,16157,16160,16163,16165,16167],{"class":38,"line":660},[36,16149,3081],{"class":50},[36,16151,107],{"class":42},[36,16153,16154],{"class":110},"\"圆的周长\"",[36,16156,107],{"class":42},[36,16158,16159],{"class":50},"c1.",[36,16161,16162],{"class":46},"calculateZC",[36,16164,3929],{"class":50},[36,16166,107],{"class":42},[36,16168,2732],{"class":50},[36,16170,16171],{"class":38,"line":665},[36,16172,250],{"class":50},[19,16174,16175],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,16177,16179],{"className":28,"code":16178,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Cstring>\nclass Student\n{\npublic:\n    string m_name;\n    int m_id;\n    \u002F\u002F赋值姓名\n    void setName(string name)\n    {\n        m_name=name;\n    }\n    \u002F\u002F赋值学号\n    void setId(int id)\n    {\n        m_id=id;\n    }\n    \u002F\u002F打印学生信息\n    void printInfo()\n    {\n        cout\u003C\u003C\"姓名：\"\u003C\u003Cm_name\u003C\u003C\" \"\u003C\u003C\"学号：\"\u003C\u003Cm_id\u003C\u003Cendl;\n    }\n};\nint main()\n{\n    \u002F\u002F实例化\n    Student s1;\n    s1.setName(\"张三\");\n    s1.setId(123456);\n    s1.printInfo();\n}\n",[33,16180,16181,16187,16197,16203,16209,16213,16217,16222,16229,16234,16252,16256,16266,16270,16275,16291,16295,16305,16309,16314,16322,16326,16358,16362,16366,16374,16378,16383,16388,16402,16416,16425],{"__ignoreMap":31},[36,16182,16183,16185],{"class":38,"line":39},[36,16184,3459],{"class":42},[36,16186,3462],{"class":110},[36,16188,16189,16191,16193,16195],{"class":38,"line":54},[36,16190,3467],{"class":42},[36,16192,3470],{"class":42},[36,16194,3473],{"class":46},[36,16196,77],{"class":50},[36,16198,16199,16201],{"class":38,"line":61},[36,16200,3459],{"class":42},[36,16202,9223],{"class":110},[36,16204,16205,16207],{"class":38,"line":80},[36,16206,16023],{"class":42},[36,16208,9236],{"class":46},[36,16210,16211],{"class":38,"line":96},[36,16212,3076],{"class":50},[36,16214,16215],{"class":38,"line":101},[36,16216,16045],{"class":42},[36,16218,16219],{"class":38,"line":128},[36,16220,16221],{"class":50},"    string m_name;\n",[36,16223,16224,16226],{"class":38,"line":149},[36,16225,64],{"class":42},[36,16227,16228],{"class":50}," m_id;\n",[36,16230,16231],{"class":38,"line":154},[36,16232,16233],{"class":124},"    \u002F\u002F赋值姓名\n",[36,16235,16236,16239,16242,16244,16247,16250],{"class":38,"line":167},[36,16237,16238],{"class":42},"    void",[36,16240,16241],{"class":46}," setName",[36,16243,222],{"class":50},[36,16245,16246],{"class":46},"string",[36,16248,16249],{"class":473}," name",[36,16251,1680],{"class":50},[36,16253,16254],{"class":38,"line":172},[36,16255,3537],{"class":50},[36,16257,16258,16261,16263],{"class":38,"line":192},[36,16259,16260],{"class":50},"        m_name",[36,16262,70],{"class":42},[36,16264,16265],{"class":50},"name;\n",[36,16267,16268],{"class":38,"line":211},[36,16269,3693],{"class":50},[36,16271,16272],{"class":38,"line":216},[36,16273,16274],{"class":124},"    \u002F\u002F赋值学号\n",[36,16276,16277,16279,16282,16284,16286,16289],{"class":38,"line":231},[36,16278,16238],{"class":42},[36,16280,16281],{"class":46}," setId",[36,16283,222],{"class":50},[36,16285,43],{"class":42},[36,16287,16288],{"class":473}," id",[36,16290,1680],{"class":50},[36,16292,16293],{"class":38,"line":236},[36,16294,3537],{"class":50},[36,16296,16297,16300,16302],{"class":38,"line":247},[36,16298,16299],{"class":50},"        m_id",[36,16301,70],{"class":42},[36,16303,16304],{"class":50},"id;\n",[36,16306,16307],{"class":38,"line":637},[36,16308,3693],{"class":50},[36,16310,16311],{"class":38,"line":646},[36,16312,16313],{"class":124},"    \u002F\u002F打印学生信息\n",[36,16315,16316,16318,16320],{"class":38,"line":655},[36,16317,16238],{"class":42},[36,16319,11083],{"class":46},[36,16321,3484],{"class":50},[36,16323,16324],{"class":38,"line":660},[36,16325,3537],{"class":50},[36,16327,16328,16330,16332,16335,16337,16340,16342,16344,16346,16349,16351,16354,16356],{"class":38,"line":665},[36,16329,4942],{"class":50},[36,16331,107],{"class":42},[36,16333,16334],{"class":110},"\"姓名：\"",[36,16336,107],{"class":42},[36,16338,16339],{"class":50},"m_name",[36,16341,107],{"class":42},[36,16343,5848],{"class":110},[36,16345,107],{"class":42},[36,16347,16348],{"class":110},"\"学号：\"",[36,16350,107],{"class":42},[36,16352,16353],{"class":50},"m_id",[36,16355,107],{"class":42},[36,16357,2732],{"class":50},[36,16359,16360],{"class":38,"line":674},[36,16361,3693],{"class":50},[36,16363,16364],{"class":38,"line":679},[36,16365,5486],{"class":50},[36,16367,16368,16370,16372],{"class":38,"line":692},[36,16369,43],{"class":42},[36,16371,47],{"class":46},[36,16373,3484],{"class":50},[36,16375,16376],{"class":38,"line":705},[36,16377,3076],{"class":50},[36,16379,16380],{"class":38,"line":710},[36,16381,16382],{"class":124},"    \u002F\u002F实例化\n",[36,16384,16385],{"class":38,"line":722},[36,16386,16387],{"class":50},"    Student s1;\n",[36,16389,16390,16393,16396,16398,16400],{"class":38,"line":750},[36,16391,16392],{"class":50},"    s1.",[36,16394,16395],{"class":46},"setName",[36,16397,222],{"class":50},[36,16399,9390],{"class":110},[36,16401,228],{"class":50},[36,16403,16404,16406,16409,16411,16414],{"class":38,"line":755},[36,16405,16392],{"class":50},[36,16407,16408],{"class":46},"setId",[36,16410,222],{"class":50},[36,16412,16413],{"class":73},"123456",[36,16415,228],{"class":50},[36,16417,16418,16420,16423],{"class":38,"line":777},[36,16419,16392],{"class":50},[36,16421,16422],{"class":46},"printInfo",[36,16424,1022],{"class":50},[36,16426,16427],{"class":38,"line":802},[36,16428,250],{"class":50},[19,16430,16431],{},"类中的属性和行为统称为成员",[19,16433,16434],{},"属性：成员属性(成员变量)",[19,16436,16437],{},"方法：成员函数(成员方法)",[19,16439,16440],{},[887,16441,16442],{},"封装意义二：",[19,16444,16445],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16447,16448],{},"访问权限有三种：",[256,16450,16451,16454,16457],{},[259,16452,16453],{},"public        公共权限",[259,16455,16456],{},"protected 保护权限",[259,16458,16459],{},"private      私有权限",[19,16461,16462],{},[887,16463,16464],{},"示例：",[26,16466,16468],{"className":895,"code":16467,"language":897,"meta":31,"style":31},"\u002F\u002F三种权限\n\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n\nclass Person\n{\n    \u002F\u002F姓名  公共权限\npublic:\n    string m_Name;\n\n    \u002F\u002F汽车  保护权限\nprotected:\n    string m_Car;\n\n    \u002F\u002F银行卡密码  私有权限\nprivate:\n    int m_Password;\n\npublic:\n    void func()\n    {\n        m_Name = \"张三\";\n        m_Car = \"拖拉机\";\n        m_Password = 123456;\n    }\n};\n\nint main() {\n\n    Person p;\n    p.m_Name = \"李四\";\n    \u002F\u002Fp.m_Car = \"奔驰\";  \u002F\u002F保护权限类外访问不到\n    \u002F\u002Fp.m_Password = 123; \u002F\u002F私有权限类外访问不到\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,16469,16470,16475,16480,16485,16490,16494,16501,16505,16510,16514,16519,16523,16528,16533,16538,16542,16547,16552,16559,16563,16567,16575,16579,16590,16602,16614,16618,16622,16626,16634,16638,16643,16655,16663,16671,16675,16685,16689,16697],{"__ignoreMap":31},[36,16471,16472],{"class":38,"line":39},[36,16473,16474],{"class":124},"\u002F\u002F三种权限\n",[36,16476,16477],{"class":38,"line":54},[36,16478,16479],{"class":124},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[36,16481,16482],{"class":38,"line":61},[36,16483,16484],{"class":124},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[36,16486,16487],{"class":38,"line":80},[36,16488,16489],{"class":124},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[36,16491,16492],{"class":38,"line":96},[36,16493,58],{"emptyLinePlaceholder":57},[36,16495,16496,16498],{"class":38,"line":101},[36,16497,16023],{"class":42},[36,16499,16500],{"class":46}," Person\n",[36,16502,16503],{"class":38,"line":128},[36,16504,3076],{"class":50},[36,16506,16507],{"class":38,"line":149},[36,16508,16509],{"class":124},"    \u002F\u002F姓名  公共权限\n",[36,16511,16512],{"class":38,"line":154},[36,16513,16045],{"class":42},[36,16515,16516],{"class":38,"line":167},[36,16517,16518],{"class":50},"    string m_Name;\n",[36,16520,16521],{"class":38,"line":172},[36,16522,58],{"emptyLinePlaceholder":57},[36,16524,16525],{"class":38,"line":192},[36,16526,16527],{"class":124},"    \u002F\u002F汽车  保护权限\n",[36,16529,16530],{"class":38,"line":211},[36,16531,16532],{"class":42},"protected:\n",[36,16534,16535],{"class":38,"line":216},[36,16536,16537],{"class":50},"    string m_Car;\n",[36,16539,16540],{"class":38,"line":231},[36,16541,58],{"emptyLinePlaceholder":57},[36,16543,16544],{"class":38,"line":236},[36,16545,16546],{"class":124},"    \u002F\u002F银行卡密码  私有权限\n",[36,16548,16549],{"class":38,"line":247},[36,16550,16551],{"class":42},"private:\n",[36,16553,16554,16556],{"class":38,"line":637},[36,16555,64],{"class":42},[36,16557,16558],{"class":50}," m_Password;\n",[36,16560,16561],{"class":38,"line":646},[36,16562,58],{"emptyLinePlaceholder":57},[36,16564,16565],{"class":38,"line":655},[36,16566,16045],{"class":42},[36,16568,16569,16571,16573],{"class":38,"line":660},[36,16570,16238],{"class":42},[36,16572,1241],{"class":46},[36,16574,3484],{"class":50},[36,16576,16577],{"class":38,"line":665},[36,16578,3537],{"class":50},[36,16580,16581,16584,16586,16588],{"class":38,"line":674},[36,16582,16583],{"class":50},"        m_Name ",[36,16585,70],{"class":42},[36,16587,10408],{"class":110},[36,16589,77],{"class":50},[36,16591,16592,16595,16597,16600],{"class":38,"line":679},[36,16593,16594],{"class":50},"        m_Car ",[36,16596,70],{"class":42},[36,16598,16599],{"class":110}," \"拖拉机\"",[36,16601,77],{"class":50},[36,16603,16604,16607,16609,16612],{"class":38,"line":692},[36,16605,16606],{"class":50},"        m_Password ",[36,16608,70],{"class":42},[36,16610,16611],{"class":73}," 123456",[36,16613,77],{"class":50},[36,16615,16616],{"class":38,"line":705},[36,16617,3693],{"class":50},[36,16619,16620],{"class":38,"line":710},[36,16621,5486],{"class":50},[36,16623,16624],{"class":38,"line":722},[36,16625,58],{"emptyLinePlaceholder":57},[36,16627,16628,16630,16632],{"class":38,"line":750},[36,16629,43],{"class":42},[36,16631,47],{"class":46},[36,16633,51],{"class":50},[36,16635,16636],{"class":38,"line":755},[36,16637,58],{"emptyLinePlaceholder":57},[36,16639,16640],{"class":38,"line":777},[36,16641,16642],{"class":50},"    Person p;\n",[36,16644,16645,16648,16650,16653],{"class":38,"line":802},[36,16646,16647],{"class":50},"    p.m_Name ",[36,16649,70],{"class":42},[36,16651,16652],{"class":110}," \"李四\"",[36,16654,77],{"class":50},[36,16656,16657,16660],{"class":38,"line":807},[36,16658,16659],{"class":124},"    \u002F\u002Fp.m_Car = \"奔驰\";",[36,16661,16662],{"class":124},"  \u002F\u002F保护权限类外访问不到\n",[36,16664,16665,16668],{"class":38,"line":818},[36,16666,16667],{"class":124},"    \u002F\u002Fp.m_Password = 123;",[36,16669,16670],{"class":124}," \u002F\u002F私有权限类外访问不到\n",[36,16672,16673],{"class":38,"line":843},[36,16674,58],{"emptyLinePlaceholder":57},[36,16676,16677,16679,16681,16683],{"class":38,"line":848},[36,16678,219],{"class":46},[36,16680,222],{"class":50},[36,16682,225],{"class":110},[36,16684,228],{"class":50},[36,16686,16687],{"class":38,"line":859},[36,16688,58],{"emptyLinePlaceholder":57},[36,16690,16691,16693,16695],{"class":38,"line":864},[36,16692,239],{"class":42},[36,16694,242],{"class":73},[36,16696,77],{"class":50},[36,16698,16699],{"class":38,"line":873},[36,16700,250],{"class":50},[1645,16702,16704],{"id":16703},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16706,16707,16708,16711,16712],{},"在C++中 struct和class唯一的",[887,16709,16710],{},"区别","就在于 ",[887,16713,16714],{},"默认的访问权限不同",[19,16716,16717],{},"区别：",[2674,16719,16720,16723],{},[259,16721,16722],{},"struct 默认权限为公共",[259,16724,16725],{},"class   默认权限为私有",[26,16727,16729],{"className":895,"code":16728,"language":897,"meta":31,"style":31},"class C1\n{\n    int  m_A; \u002F\u002F默认是私有权限\n};\n\nstruct C2\n{\n    int m_A;  \u002F\u002F默认是公共权限\n};\n\nint main() {\n\n    C1 c1;\n    c1.m_A = 10; \u002F\u002F错误，访问权限是私有\n\n    C2 c2;\n    c2.m_A = 10; \u002F\u002F正确，访问权限是公共\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,16730,16731,16738,16742,16752,16756,16760,16767,16771,16781,16785,16789,16797,16801,16806,16820,16824,16829,16843,16847,16857,16861,16869],{"__ignoreMap":31},[36,16732,16733,16735],{"class":38,"line":39},[36,16734,16023],{"class":42},[36,16736,16737],{"class":46}," C1\n",[36,16739,16740],{"class":38,"line":54},[36,16741,3076],{"class":50},[36,16743,16744,16746,16749],{"class":38,"line":61},[36,16745,64],{"class":42},[36,16747,16748],{"class":50},"  m_A;",[36,16750,16751],{"class":124}," \u002F\u002F默认是私有权限\n",[36,16753,16754],{"class":38,"line":80},[36,16755,5486],{"class":50},[36,16757,16758],{"class":38,"line":96},[36,16759,58],{"emptyLinePlaceholder":57},[36,16761,16762,16764],{"class":38,"line":101},[36,16763,9233],{"class":42},[36,16765,16766],{"class":46}," C2\n",[36,16768,16769],{"class":38,"line":128},[36,16770,3076],{"class":50},[36,16772,16773,16775,16778],{"class":38,"line":149},[36,16774,64],{"class":42},[36,16776,16777],{"class":50}," m_A;",[36,16779,16780],{"class":124},"  \u002F\u002F默认是公共权限\n",[36,16782,16783],{"class":38,"line":154},[36,16784,5486],{"class":50},[36,16786,16787],{"class":38,"line":167},[36,16788,58],{"emptyLinePlaceholder":57},[36,16790,16791,16793,16795],{"class":38,"line":172},[36,16792,43],{"class":42},[36,16794,47],{"class":46},[36,16796,51],{"class":50},[36,16798,16799],{"class":38,"line":192},[36,16800,58],{"emptyLinePlaceholder":57},[36,16802,16803],{"class":38,"line":211},[36,16804,16805],{"class":50},"    C1 c1;\n",[36,16807,16808,16811,16813,16815,16817],{"class":38,"line":216},[36,16809,16810],{"class":50},"    c1.m_A ",[36,16812,70],{"class":42},[36,16814,74],{"class":73},[36,16816,926],{"class":50},[36,16818,16819],{"class":124}," \u002F\u002F错误，访问权限是私有\n",[36,16821,16822],{"class":38,"line":231},[36,16823,58],{"emptyLinePlaceholder":57},[36,16825,16826],{"class":38,"line":236},[36,16827,16828],{"class":50},"    C2 c2;\n",[36,16830,16831,16834,16836,16838,16840],{"class":38,"line":247},[36,16832,16833],{"class":50},"    c2.m_A ",[36,16835,70],{"class":42},[36,16837,74],{"class":73},[36,16839,926],{"class":50},[36,16841,16842],{"class":124}," \u002F\u002F正确，访问权限是公共\n",[36,16844,16845],{"class":38,"line":637},[36,16846,58],{"emptyLinePlaceholder":57},[36,16848,16849,16851,16853,16855],{"class":38,"line":646},[36,16850,219],{"class":46},[36,16852,222],{"class":50},[36,16854,225],{"class":110},[36,16856,228],{"class":50},[36,16858,16859],{"class":38,"line":655},[36,16860,58],{"emptyLinePlaceholder":57},[36,16862,16863,16865,16867],{"class":38,"line":660},[36,16864,239],{"class":42},[36,16866,242],{"class":73},[36,16868,77],{"class":50},[36,16870,16871],{"class":38,"line":665},[36,16872,250],{"class":50},[1645,16874,16876],{"id":16875},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16878,16879],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16881,16882],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16884,16885],{},[887,16886,16464],{},[26,16888,16890],{"className":895,"code":16889,"language":897,"meta":31,"style":31},"class Person {\npublic:\n\n    \u002F\u002F姓名设置可读可写\n    void setName(string name) {\n        m_Name = name;\n    }\n    string getName()\n    {\n        return m_Name;\n    }\n\n\n    \u002F\u002F获取年龄 \n    int getAge() {\n        return m_Age;\n    }\n    \u002F\u002F设置年龄\n    void setAge(int age) {\n        if (age \u003C 0 || age > 150) {\n            cout \u003C\u003C \"你个老妖精!\" \u003C\u003C endl;\n            return;\n        }\n        m_Age = age;\n    }\n\n    \u002F\u002F情人设置为只写\n    void setLover(string lover) {\n        m_Lover = lover;\n    }\n\nprivate:\n    string m_Name; \u002F\u002F可读可写  姓名\n    \n    int m_Age; \u002F\u002F只读  年龄\n\n    string m_Lover; \u002F\u002F只写  情人\n};\n\nint main() {\n\n    Person p;\n    \u002F\u002F姓名设置\n    p.setName(\"张三\");\n    cout \u003C\u003C \"姓名： \" \u003C\u003C p.getName() \u003C\u003C endl;\n\n    \u002F\u002F年龄设置\n    p.setAge(50);\n    cout \u003C\u003C \"年龄： \" \u003C\u003C p.getAge() \u003C\u003C endl;\n\n    \u002F\u002F情人设置\n    p.setLover(\"苍井\");\n    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;  \u002F\u002F只写属性，不可以读取\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,16891,16892,16902,16906,16910,16915,16929,16938,16942,16952,16956,16963,16967,16971,16975,16980,16989,16996,17000,17005,17021,17044,17057,17064,17068,17077,17081,17085,17090,17106,17116,17120,17124,17128,17136,17140,17150,17154,17162,17166,17170,17178,17182,17186,17191,17204,17227,17231,17236,17249,17271,17275,17280,17294,17302,17306,17316,17320,17328],{"__ignoreMap":31},[36,16893,16894,16896,16899],{"class":38,"line":39},[36,16895,16023],{"class":42},[36,16897,16898],{"class":46}," Person",[36,16900,16901],{"class":50}," {\n",[36,16903,16904],{"class":38,"line":54},[36,16905,16045],{"class":42},[36,16907,16908],{"class":38,"line":61},[36,16909,58],{"emptyLinePlaceholder":57},[36,16911,16912],{"class":38,"line":80},[36,16913,16914],{"class":124},"    \u002F\u002F姓名设置可读可写\n",[36,16916,16917,16919,16921,16923,16925,16927],{"class":38,"line":96},[36,16918,16238],{"class":42},[36,16920,16241],{"class":46},[36,16922,222],{"class":50},[36,16924,16246],{"class":46},[36,16926,16249],{"class":473},[36,16928,485],{"class":50},[36,16930,16931,16933,16935],{"class":38,"line":101},[36,16932,16583],{"class":50},[36,16934,70],{"class":42},[36,16936,16937],{"class":50}," name;\n",[36,16939,16940],{"class":38,"line":128},[36,16941,3693],{"class":50},[36,16943,16944,16947,16950],{"class":38,"line":149},[36,16945,16946],{"class":46},"    string",[36,16948,16949],{"class":46}," getName",[36,16951,3484],{"class":50},[36,16953,16954],{"class":38,"line":154},[36,16955,3537],{"class":50},[36,16957,16958,16960],{"class":38,"line":167},[36,16959,16081],{"class":42},[36,16961,16962],{"class":50}," m_Name;\n",[36,16964,16965],{"class":38,"line":172},[36,16966,3693],{"class":50},[36,16968,16969],{"class":38,"line":192},[36,16970,58],{"emptyLinePlaceholder":57},[36,16972,16973],{"class":38,"line":211},[36,16974,58],{"emptyLinePlaceholder":57},[36,16976,16977],{"class":38,"line":216},[36,16978,16979],{"class":124},"    \u002F\u002F获取年龄 \n",[36,16981,16982,16984,16987],{"class":38,"line":231},[36,16983,64],{"class":42},[36,16985,16986],{"class":46}," getAge",[36,16988,51],{"class":50},[36,16990,16991,16993],{"class":38,"line":236},[36,16992,16081],{"class":42},[36,16994,16995],{"class":50}," m_Age;\n",[36,16997,16998],{"class":38,"line":247},[36,16999,3693],{"class":50},[36,17001,17002],{"class":38,"line":637},[36,17003,17004],{"class":124},"    \u002F\u002F设置年龄\n",[36,17006,17007,17009,17012,17014,17016,17019],{"class":38,"line":646},[36,17008,16238],{"class":42},[36,17010,17011],{"class":46}," setAge",[36,17013,222],{"class":50},[36,17015,43],{"class":42},[36,17017,17018],{"class":473}," age",[36,17020,485],{"class":50},[36,17022,17023,17025,17028,17030,17032,17034,17037,17039,17042],{"class":38,"line":655},[36,17024,3999],{"class":42},[36,17026,17027],{"class":50}," (age ",[36,17029,2577],{"class":42},[36,17031,242],{"class":73},[36,17033,4746],{"class":42},[36,17035,17036],{"class":50}," age ",[36,17038,2627],{"class":42},[36,17040,17041],{"class":73}," 150",[36,17043,485],{"class":50},[36,17045,17046,17048,17050,17053,17055],{"class":38,"line":660},[36,17047,11187],{"class":50},[36,17049,107],{"class":42},[36,17051,17052],{"class":110}," \"你个老妖精!\"",[36,17054,114],{"class":42},[36,17056,747],{"class":50},[36,17058,17059,17062],{"class":38,"line":665},[36,17060,17061],{"class":42},"            return",[36,17063,77],{"class":50},[36,17065,17066],{"class":38,"line":674},[36,17067,4031],{"class":50},[36,17069,17070,17073,17075],{"class":38,"line":679},[36,17071,17072],{"class":50},"        m_Age ",[36,17074,70],{"class":42},[36,17076,9271],{"class":50},[36,17078,17079],{"class":38,"line":692},[36,17080,3693],{"class":50},[36,17082,17083],{"class":38,"line":705},[36,17084,58],{"emptyLinePlaceholder":57},[36,17086,17087],{"class":38,"line":710},[36,17088,17089],{"class":124},"    \u002F\u002F情人设置为只写\n",[36,17091,17092,17094,17097,17099,17101,17104],{"class":38,"line":722},[36,17093,16238],{"class":42},[36,17095,17096],{"class":46}," setLover",[36,17098,222],{"class":50},[36,17100,16246],{"class":46},[36,17102,17103],{"class":473}," lover",[36,17105,485],{"class":50},[36,17107,17108,17111,17113],{"class":38,"line":750},[36,17109,17110],{"class":50},"        m_Lover ",[36,17112,70],{"class":42},[36,17114,17115],{"class":50}," lover;\n",[36,17117,17118],{"class":38,"line":755},[36,17119,3693],{"class":50},[36,17121,17122],{"class":38,"line":777},[36,17123,58],{"emptyLinePlaceholder":57},[36,17125,17126],{"class":38,"line":802},[36,17127,16551],{"class":42},[36,17129,17130,17133],{"class":38,"line":807},[36,17131,17132],{"class":50},"    string m_Name;",[36,17134,17135],{"class":124}," \u002F\u002F可读可写  姓名\n",[36,17137,17138],{"class":38,"line":818},[36,17139,1295],{"class":50},[36,17141,17142,17144,17147],{"class":38,"line":843},[36,17143,64],{"class":42},[36,17145,17146],{"class":50}," m_Age;",[36,17148,17149],{"class":124}," \u002F\u002F只读  年龄\n",[36,17151,17152],{"class":38,"line":848},[36,17153,58],{"emptyLinePlaceholder":57},[36,17155,17156,17159],{"class":38,"line":859},[36,17157,17158],{"class":50},"    string m_Lover;",[36,17160,17161],{"class":124}," \u002F\u002F只写  情人\n",[36,17163,17164],{"class":38,"line":864},[36,17165,5486],{"class":50},[36,17167,17168],{"class":38,"line":873},[36,17169,58],{"emptyLinePlaceholder":57},[36,17171,17172,17174,17176],{"class":38,"line":9454},[36,17173,43],{"class":42},[36,17175,47],{"class":46},[36,17177,51],{"class":50},[36,17179,17180],{"class":38,"line":9481},[36,17181,58],{"emptyLinePlaceholder":57},[36,17183,17184],{"class":38,"line":9486},[36,17185,16642],{"class":50},[36,17187,17188],{"class":38,"line":9492},[36,17189,17190],{"class":124},"    \u002F\u002F姓名设置\n",[36,17192,17193,17196,17198,17200,17202],{"class":38,"line":9504},[36,17194,17195],{"class":50},"    p.",[36,17197,16395],{"class":46},[36,17199,222],{"class":50},[36,17201,9390],{"class":110},[36,17203,228],{"class":50},[36,17205,17206,17208,17210,17213,17215,17218,17221,17223,17225],{"class":38,"line":9516},[36,17207,104],{"class":50},[36,17209,107],{"class":42},[36,17211,17212],{"class":110}," \"姓名： \"",[36,17214,114],{"class":42},[36,17216,17217],{"class":50}," p.",[36,17219,17220],{"class":46},"getName",[36,17222,1133],{"class":50},[36,17224,107],{"class":42},[36,17226,747],{"class":50},[36,17228,17229],{"class":38,"line":9528},[36,17230,58],{"emptyLinePlaceholder":57},[36,17232,17233],{"class":38,"line":11184},[36,17234,17235],{"class":124},"    \u002F\u002F年龄设置\n",[36,17237,17238,17240,17243,17245,17247],{"class":38,"line":11209},[36,17239,17195],{"class":50},[36,17241,17242],{"class":46},"setAge",[36,17244,222],{"class":50},[36,17246,2323],{"class":73},[36,17248,228],{"class":50},[36,17250,17251,17253,17255,17258,17260,17262,17265,17267,17269],{"class":38,"line":11232},[36,17252,104],{"class":50},[36,17254,107],{"class":42},[36,17256,17257],{"class":110}," \"年龄： \"",[36,17259,114],{"class":42},[36,17261,17217],{"class":50},[36,17263,17264],{"class":46},"getAge",[36,17266,1133],{"class":50},[36,17268,107],{"class":42},[36,17270,747],{"class":50},[36,17272,17273],{"class":38,"line":11256},[36,17274,58],{"emptyLinePlaceholder":57},[36,17276,17277],{"class":38,"line":11261},[36,17278,17279],{"class":124},"    \u002F\u002F情人设置\n",[36,17281,17282,17284,17287,17289,17292],{"class":38,"line":11266},[36,17283,17195],{"class":50},[36,17285,17286],{"class":46},"setLover",[36,17288,222],{"class":50},[36,17290,17291],{"class":110},"\"苍井\"",[36,17293,228],{"class":50},[36,17295,17296,17299],{"class":38,"line":11271},[36,17297,17298],{"class":124},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[36,17300,17301],{"class":124},"  \u002F\u002F只写属性，不可以读取\n",[36,17303,17304],{"class":38,"line":11280},[36,17305,58],{"emptyLinePlaceholder":57},[36,17307,17308,17310,17312,17314],{"class":38,"line":11285},[36,17309,219],{"class":46},[36,17311,222],{"class":50},[36,17313,225],{"class":110},[36,17315,228],{"class":50},[36,17317,17318],{"class":38,"line":11291},[36,17319,58],{"emptyLinePlaceholder":57},[36,17321,17322,17324,17326],{"class":38,"line":11312},[36,17323,239],{"class":42},[36,17325,242],{"class":73},[36,17327,77],{"class":50},[36,17329,17330],{"class":38,"line":11318},[36,17331,250],{"class":50},[1645,17333,17335],{"id":17334},"_814封装案例","8.1.4封装案例",[256,17337,17338],{},[259,17339,17340,17343],{},[887,17341,17342],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2674,17345,17346,17349],{},[259,17347,17348],{},"求出立方体的面积和体积",[259,17350,17351],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,17353,17355],{"className":28,"code":17354,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Cube\n{\npublic:\n    \u002F\u002F输入长宽高\n    void setLwh(int l,int w,int h)\n    {\n        m_L=l;\n        m_W=w;\n        m_H=h;\n    }\n    int mianji()\n    {\n        return 2*(m_L*m_W + m_L*m_H + m_W*m_H);\n    }\n    int tiji()\n    {\n        return m_L*m_W*m_H;\n    }\n    \u002F\u002F获取长宽高\n    int getLength()\n    {\n        return m_L;\n    }\n    int getWidth()\n    {\n        return m_W;\n    }\n    int getHeight()\n    {\n        return m_H;\n    }\n    \u002F\u002F成员函数判断两个立方体是否相等\n    bool isEqual(Cube c)\n    {\n        if (c.getLength() == m_L && c.getWidth() == m_W && c.getHeight() == m_H)\n        {\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n    \u002F\u002F私有属性\nprivate:\n    int m_L;\n    int m_W;\n    int m_H;\n\n};\n\u002F\u002F全局函数判断两个立方体是否相等\nbool isEqual(Cube c1,Cube c2)\n{\n    return (c1.getLength() == c2.getLength()) && (c1.getWidth() == c2.getWidth()) && (c1.getHeight() == c2.getHeight());\n}\nint main()\n{\n    Cube c1;\n    \u002F\u002F输入立方体的长宽高\n    cout\u003C\u003C\"请输入第一个立方体的长、宽、高：\"\u003C\u003Cendl;\n    int l,w,h,l1,w1,h1;\n    cin>>l>>w>>h;\n    c1.setLwh(l,w,h);\n    \u002F\u002F面积\n    cout\u003C\u003C\"立方体的表面积为：\"\u003C\u003Cc1.mianji()\u003C\u003Cendl;\n    \u002F\u002F体积\n    cout\u003C\u003C\"立方体的体积为：\"\u003C\u003Cc1.tiji()\u003C\u003Cendl;\n    cout\u003C\u003C\"请输入第二个立方体的长、宽、高：\"\u003C\u003Cendl;\n    cin>>l1>>w1>>h1;\n    Cube c2;\n    c2.setLwh(l1,w1,h1);\n    cout\u003C\u003C\"第二个立方体的表面积为：\"\u003C\u003Cc2.mianji()\u003C\u003Cendl;\n    cout\u003C\u003C\"第二个立方体的体积为：\"\u003C\u003Cc2.tiji()\u003C\u003Cendl;\n\n    \u002F\u002F判断两个立方体的表面积和体积是否相等\n    cout\u003C\u003C\"内部函数判断结果：\"\u003C\u003Cendl;\n    if (c1.isEqual(c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n\n    cout\u003C\u003C\"全局函数判断结果：\"\u003C\u003Cendl;\n    if (isEqual(c1, c2))\n    {\n        cout\u003C\u003C\"两个立方体相等\"\u003C\u003Cendl;\n    }\n    else\n    {\n        cout\u003C\u003C\"两个立方体不相等\"\u003C\u003Cendl;\n    }\n}\n",[33,17356,17357,17363,17373,17380,17384,17388,17393,17423,17427,17437,17447,17457,17461,17470,17474,17510,17514,17523,17527,17543,17547,17552,17561,17565,17572,17576,17585,17589,17596,17600,17609,17613,17620,17624,17629,17646,17650,17696,17700,17709,17713,17717,17721,17730,17734,17738,17743,17747,17753,17759,17765,17769,17773,17778,17800,17804,17858,17862,17870,17874,17879,17884,17897,17904,17920,17931,17937,17960,17966,17989,18003,18023,18029,18040,18063,18085,18090,18096,18110,18123,18128,18142,18147,18153,18158,18172,18177,18182,18196,18208,18213,18226,18231,18236,18241,18254,18259],{"__ignoreMap":31},[36,17358,17359,17361],{"class":38,"line":39},[36,17360,3459],{"class":42},[36,17362,3462],{"class":110},[36,17364,17365,17367,17369,17371],{"class":38,"line":54},[36,17366,3467],{"class":42},[36,17368,3470],{"class":42},[36,17370,3473],{"class":46},[36,17372,77],{"class":50},[36,17374,17375,17377],{"class":38,"line":61},[36,17376,16023],{"class":42},[36,17378,17379],{"class":46}," Cube\n",[36,17381,17382],{"class":38,"line":80},[36,17383,3076],{"class":50},[36,17385,17386],{"class":38,"line":96},[36,17387,16045],{"class":42},[36,17389,17390],{"class":38,"line":101},[36,17391,17392],{"class":124},"    \u002F\u002F输入长宽高\n",[36,17394,17395,17397,17400,17402,17404,17407,17409,17411,17414,17416,17418,17421],{"class":38,"line":128},[36,17396,16238],{"class":42},[36,17398,17399],{"class":46}," setLwh",[36,17401,222],{"class":50},[36,17403,43],{"class":42},[36,17405,17406],{"class":473}," l",[36,17408,2045],{"class":50},[36,17410,43],{"class":42},[36,17412,17413],{"class":473}," w",[36,17415,2045],{"class":50},[36,17417,43],{"class":42},[36,17419,17420],{"class":473}," h",[36,17422,1680],{"class":50},[36,17424,17425],{"class":38,"line":149},[36,17426,3537],{"class":50},[36,17428,17429,17432,17434],{"class":38,"line":154},[36,17430,17431],{"class":50},"        m_L",[36,17433,70],{"class":42},[36,17435,17436],{"class":50},"l;\n",[36,17438,17439,17442,17444],{"class":38,"line":167},[36,17440,17441],{"class":50},"        m_W",[36,17443,70],{"class":42},[36,17445,17446],{"class":50},"w;\n",[36,17448,17449,17452,17454],{"class":38,"line":172},[36,17450,17451],{"class":50},"        m_H",[36,17453,70],{"class":42},[36,17455,17456],{"class":50},"h;\n",[36,17458,17459],{"class":38,"line":192},[36,17460,3693],{"class":50},[36,17462,17463,17465,17468],{"class":38,"line":211},[36,17464,64],{"class":42},[36,17466,17467],{"class":46}," mianji",[36,17469,3484],{"class":50},[36,17471,17472],{"class":38,"line":216},[36,17473,3537],{"class":50},[36,17475,17476,17478,17480,17482,17485,17487,17490,17492,17495,17497,17500,17502,17505,17507],{"class":38,"line":231},[36,17477,16081],{"class":42},[36,17479,16084],{"class":73},[36,17481,2122],{"class":42},[36,17483,17484],{"class":50},"(m_L",[36,17486,2122],{"class":42},[36,17488,17489],{"class":50},"m_W ",[36,17491,2148],{"class":42},[36,17493,17494],{"class":50}," m_L",[36,17496,2122],{"class":42},[36,17498,17499],{"class":50},"m_H ",[36,17501,2148],{"class":42},[36,17503,17504],{"class":50}," m_W",[36,17506,2122],{"class":42},[36,17508,17509],{"class":50},"m_H);\n",[36,17511,17512],{"class":38,"line":236},[36,17513,3693],{"class":50},[36,17515,17516,17518,17521],{"class":38,"line":247},[36,17517,64],{"class":42},[36,17519,17520],{"class":46}," tiji",[36,17522,3484],{"class":50},[36,17524,17525],{"class":38,"line":637},[36,17526,3537],{"class":50},[36,17528,17529,17531,17533,17535,17538,17540],{"class":38,"line":646},[36,17530,16081],{"class":42},[36,17532,17494],{"class":50},[36,17534,2122],{"class":42},[36,17536,17537],{"class":50},"m_W",[36,17539,2122],{"class":42},[36,17541,17542],{"class":50},"m_H;\n",[36,17544,17545],{"class":38,"line":655},[36,17546,3693],{"class":50},[36,17548,17549],{"class":38,"line":660},[36,17550,17551],{"class":124},"    \u002F\u002F获取长宽高\n",[36,17553,17554,17556,17559],{"class":38,"line":665},[36,17555,64],{"class":42},[36,17557,17558],{"class":46}," getLength",[36,17560,3484],{"class":50},[36,17562,17563],{"class":38,"line":674},[36,17564,3537],{"class":50},[36,17566,17567,17569],{"class":38,"line":679},[36,17568,16081],{"class":42},[36,17570,17571],{"class":50}," m_L;\n",[36,17573,17574],{"class":38,"line":692},[36,17575,3693],{"class":50},[36,17577,17578,17580,17583],{"class":38,"line":705},[36,17579,64],{"class":42},[36,17581,17582],{"class":46}," getWidth",[36,17584,3484],{"class":50},[36,17586,17587],{"class":38,"line":710},[36,17588,3537],{"class":50},[36,17590,17591,17593],{"class":38,"line":722},[36,17592,16081],{"class":42},[36,17594,17595],{"class":50}," m_W;\n",[36,17597,17598],{"class":38,"line":750},[36,17599,3693],{"class":50},[36,17601,17602,17604,17607],{"class":38,"line":755},[36,17603,64],{"class":42},[36,17605,17606],{"class":46}," getHeight",[36,17608,3484],{"class":50},[36,17610,17611],{"class":38,"line":777},[36,17612,3537],{"class":50},[36,17614,17615,17617],{"class":38,"line":802},[36,17616,16081],{"class":42},[36,17618,17619],{"class":50}," m_H;\n",[36,17621,17622],{"class":38,"line":807},[36,17623,3693],{"class":50},[36,17625,17626],{"class":38,"line":818},[36,17627,17628],{"class":124},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[36,17630,17631,17634,17637,17639,17642,17644],{"class":38,"line":843},[36,17632,17633],{"class":42},"    bool",[36,17635,17636],{"class":46}," isEqual",[36,17638,222],{"class":50},[36,17640,17641],{"class":46},"Cube",[36,17643,4342],{"class":473},[36,17645,1680],{"class":50},[36,17647,17648],{"class":38,"line":848},[36,17649,3537],{"class":50},[36,17651,17652,17654,17657,17660,17662,17664,17667,17669,17672,17675,17677,17679,17682,17684,17686,17689,17691,17693],{"class":38,"line":859},[36,17653,3999],{"class":42},[36,17655,17656],{"class":50}," (c.",[36,17658,17659],{"class":46},"getLength",[36,17661,1133],{"class":50},[36,17663,4441],{"class":42},[36,17665,17666],{"class":50}," m_L ",[36,17668,3233],{"class":42},[36,17670,17671],{"class":50}," c.",[36,17673,17674],{"class":46},"getWidth",[36,17676,1133],{"class":50},[36,17678,4441],{"class":42},[36,17680,17681],{"class":50}," m_W ",[36,17683,3233],{"class":42},[36,17685,17671],{"class":50},[36,17687,17688],{"class":46},"getHeight",[36,17690,1133],{"class":50},[36,17692,4441],{"class":42},[36,17694,17695],{"class":50}," m_H)\n",[36,17697,17698],{"class":38,"line":864},[36,17699,4012],{"class":50},[36,17701,17702,17704,17707],{"class":38,"line":873},[36,17703,17061],{"class":42},[36,17705,17706],{"class":73}," true",[36,17708,77],{"class":50},[36,17710,17711],{"class":38,"line":9454},[36,17712,4031],{"class":50},[36,17714,17715],{"class":38,"line":9481},[36,17716,4072],{"class":42},[36,17718,17719],{"class":38,"line":9486},[36,17720,4012],{"class":50},[36,17722,17723,17725,17728],{"class":38,"line":9492},[36,17724,17061],{"class":42},[36,17726,17727],{"class":73}," false",[36,17729,77],{"class":50},[36,17731,17732],{"class":38,"line":9504},[36,17733,4031],{"class":50},[36,17735,17736],{"class":38,"line":9516},[36,17737,3693],{"class":50},[36,17739,17740],{"class":38,"line":9528},[36,17741,17742],{"class":124},"    \u002F\u002F私有属性\n",[36,17744,17745],{"class":38,"line":11184},[36,17746,16551],{"class":42},[36,17748,17749,17751],{"class":38,"line":11209},[36,17750,64],{"class":42},[36,17752,17571],{"class":50},[36,17754,17755,17757],{"class":38,"line":11232},[36,17756,64],{"class":42},[36,17758,17595],{"class":50},[36,17760,17761,17763],{"class":38,"line":11256},[36,17762,64],{"class":42},[36,17764,17619],{"class":50},[36,17766,17767],{"class":38,"line":11261},[36,17768,58],{"emptyLinePlaceholder":57},[36,17770,17771],{"class":38,"line":11266},[36,17772,5486],{"class":50},[36,17774,17775],{"class":38,"line":11271},[36,17776,17777],{"class":124},"\u002F\u002F全局函数判断两个立方体是否相等\n",[36,17779,17780,17782,17784,17786,17788,17791,17793,17795,17798],{"class":38,"line":11280},[36,17781,2887],{"class":42},[36,17783,17636],{"class":46},[36,17785,222],{"class":50},[36,17787,17641],{"class":46},[36,17789,17790],{"class":473}," c1",[36,17792,2045],{"class":50},[36,17794,17641],{"class":46},[36,17796,17797],{"class":473}," c2",[36,17799,1680],{"class":50},[36,17801,17802],{"class":38,"line":11285},[36,17803,3076],{"class":50},[36,17805,17806,17808,17811,17813,17815,17817,17820,17822,17825,17827,17829,17831,17833,17835,17837,17839,17841,17843,17845,17847,17849,17851,17853,17855],{"class":38,"line":11291},[36,17807,239],{"class":42},[36,17809,17810],{"class":50}," (c1.",[36,17812,17659],{"class":46},[36,17814,1133],{"class":50},[36,17816,4441],{"class":42},[36,17818,17819],{"class":50}," c2.",[36,17821,17659],{"class":46},[36,17823,17824],{"class":50},"()) ",[36,17826,3233],{"class":42},[36,17828,17810],{"class":50},[36,17830,17674],{"class":46},[36,17832,1133],{"class":50},[36,17834,4441],{"class":42},[36,17836,17819],{"class":50},[36,17838,17674],{"class":46},[36,17840,17824],{"class":50},[36,17842,3233],{"class":42},[36,17844,17810],{"class":50},[36,17846,17688],{"class":46},[36,17848,1133],{"class":50},[36,17850,4441],{"class":42},[36,17852,17819],{"class":50},[36,17854,17688],{"class":46},[36,17856,17857],{"class":50},"());\n",[36,17859,17860],{"class":38,"line":11312},[36,17861,250],{"class":50},[36,17863,17864,17866,17868],{"class":38,"line":11318},[36,17865,43],{"class":42},[36,17867,47],{"class":46},[36,17869,3484],{"class":50},[36,17871,17872],{"class":38,"line":11332},[36,17873,3076],{"class":50},[36,17875,17876],{"class":38,"line":11338},[36,17877,17878],{"class":50},"    Cube c1;\n",[36,17880,17881],{"class":38,"line":11365},[36,17882,17883],{"class":124},"    \u002F\u002F输入立方体的长宽高\n",[36,17885,17886,17888,17890,17893,17895],{"class":38,"line":11374},[36,17887,3081],{"class":50},[36,17889,107],{"class":42},[36,17891,17892],{"class":110},"\"请输入第一个立方体的长、宽、高：\"",[36,17894,107],{"class":42},[36,17896,2732],{"class":50},[36,17898,17899,17901],{"class":38,"line":11380},[36,17900,64],{"class":42},[36,17902,17903],{"class":50}," l,w,h,l1,w1,h1;\n",[36,17905,17906,17908,17910,17912,17914,17916,17918],{"class":38,"line":11388},[36,17907,3519],{"class":50},[36,17909,2961],{"class":42},[36,17911,2185],{"class":50},[36,17913,2961],{"class":42},[36,17915,2462],{"class":50},[36,17917,2961],{"class":42},[36,17919,17456],{"class":50},[36,17921,17922,17925,17928],{"class":38,"line":11393},[36,17923,17924],{"class":50},"    c1.",[36,17926,17927],{"class":46},"setLwh",[36,17929,17930],{"class":50},"(l,w,h);\n",[36,17932,17934],{"class":38,"line":17933},66,[36,17935,17936],{"class":124},"    \u002F\u002F面积\n",[36,17938,17940,17942,17944,17947,17949,17951,17954,17956,17958],{"class":38,"line":17939},67,[36,17941,3081],{"class":50},[36,17943,107],{"class":42},[36,17945,17946],{"class":110},"\"立方体的表面积为：\"",[36,17948,107],{"class":42},[36,17950,16159],{"class":50},[36,17952,17953],{"class":46},"mianji",[36,17955,3929],{"class":50},[36,17957,107],{"class":42},[36,17959,2732],{"class":50},[36,17961,17963],{"class":38,"line":17962},68,[36,17964,17965],{"class":124},"    \u002F\u002F体积\n",[36,17967,17969,17971,17973,17976,17978,17980,17983,17985,17987],{"class":38,"line":17968},69,[36,17970,3081],{"class":50},[36,17972,107],{"class":42},[36,17974,17975],{"class":110},"\"立方体的体积为：\"",[36,17977,107],{"class":42},[36,17979,16159],{"class":50},[36,17981,17982],{"class":46},"tiji",[36,17984,3929],{"class":50},[36,17986,107],{"class":42},[36,17988,2732],{"class":50},[36,17990,17992,17994,17996,17999,18001],{"class":38,"line":17991},70,[36,17993,3081],{"class":50},[36,17995,107],{"class":42},[36,17997,17998],{"class":110},"\"请输入第二个立方体的长、宽、高：\"",[36,18000,107],{"class":42},[36,18002,2732],{"class":50},[36,18004,18006,18008,18010,18013,18015,18018,18020],{"class":38,"line":18005},71,[36,18007,3519],{"class":50},[36,18009,2961],{"class":42},[36,18011,18012],{"class":50},"l1",[36,18014,2961],{"class":42},[36,18016,18017],{"class":50},"w1",[36,18019,2961],{"class":42},[36,18021,18022],{"class":50},"h1;\n",[36,18024,18026],{"class":38,"line":18025},72,[36,18027,18028],{"class":50},"    Cube c2;\n",[36,18030,18032,18035,18037],{"class":38,"line":18031},73,[36,18033,18034],{"class":50},"    c2.",[36,18036,17927],{"class":46},[36,18038,18039],{"class":50},"(l1,w1,h1);\n",[36,18041,18043,18045,18047,18050,18052,18055,18057,18059,18061],{"class":38,"line":18042},74,[36,18044,3081],{"class":50},[36,18046,107],{"class":42},[36,18048,18049],{"class":110},"\"第二个立方体的表面积为：\"",[36,18051,107],{"class":42},[36,18053,18054],{"class":50},"c2.",[36,18056,17953],{"class":46},[36,18058,3929],{"class":50},[36,18060,107],{"class":42},[36,18062,2732],{"class":50},[36,18064,18066,18068,18070,18073,18075,18077,18079,18081,18083],{"class":38,"line":18065},75,[36,18067,3081],{"class":50},[36,18069,107],{"class":42},[36,18071,18072],{"class":110},"\"第二个立方体的体积为：\"",[36,18074,107],{"class":42},[36,18076,18054],{"class":50},[36,18078,17982],{"class":46},[36,18080,3929],{"class":50},[36,18082,107],{"class":42},[36,18084,2732],{"class":50},[36,18086,18088],{"class":38,"line":18087},76,[36,18089,58],{"emptyLinePlaceholder":57},[36,18091,18093],{"class":38,"line":18092},77,[36,18094,18095],{"class":124},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[36,18097,18099,18101,18103,18106,18108],{"class":38,"line":18098},78,[36,18100,3081],{"class":50},[36,18102,107],{"class":42},[36,18104,18105],{"class":110},"\"内部函数判断结果：\"",[36,18107,107],{"class":42},[36,18109,2732],{"class":50},[36,18111,18113,18115,18117,18120],{"class":38,"line":18112},79,[36,18114,4592],{"class":42},[36,18116,17810],{"class":50},[36,18118,18119],{"class":46},"isEqual",[36,18121,18122],{"class":50},"(c2))\n",[36,18124,18126],{"class":38,"line":18125},80,[36,18127,3537],{"class":50},[36,18129,18131,18133,18135,18138,18140],{"class":38,"line":18130},81,[36,18132,4942],{"class":50},[36,18134,107],{"class":42},[36,18136,18137],{"class":110},"\"两个立方体相等\"",[36,18139,107],{"class":42},[36,18141,2732],{"class":50},[36,18143,18145],{"class":38,"line":18144},82,[36,18146,3693],{"class":50},[36,18148,18150],{"class":38,"line":18149},83,[36,18151,18152],{"class":42},"    else\n",[36,18154,18156],{"class":38,"line":18155},84,[36,18157,3537],{"class":50},[36,18159,18161,18163,18165,18168,18170],{"class":38,"line":18160},85,[36,18162,4942],{"class":50},[36,18164,107],{"class":42},[36,18166,18167],{"class":110},"\"两个立方体不相等\"",[36,18169,107],{"class":42},[36,18171,2732],{"class":50},[36,18173,18175],{"class":38,"line":18174},86,[36,18176,3693],{"class":50},[36,18178,18180],{"class":38,"line":18179},87,[36,18181,58],{"emptyLinePlaceholder":57},[36,18183,18185,18187,18189,18192,18194],{"class":38,"line":18184},88,[36,18186,3081],{"class":50},[36,18188,107],{"class":42},[36,18190,18191],{"class":110},"\"全局函数判断结果：\"",[36,18193,107],{"class":42},[36,18195,2732],{"class":50},[36,18197,18199,18201,18203,18205],{"class":38,"line":18198},89,[36,18200,4592],{"class":42},[36,18202,3180],{"class":50},[36,18204,18119],{"class":46},[36,18206,18207],{"class":50},"(c1, c2))\n",[36,18209,18211],{"class":38,"line":18210},90,[36,18212,3537],{"class":50},[36,18214,18216,18218,18220,18222,18224],{"class":38,"line":18215},91,[36,18217,4942],{"class":50},[36,18219,107],{"class":42},[36,18221,18137],{"class":110},[36,18223,107],{"class":42},[36,18225,2732],{"class":50},[36,18227,18229],{"class":38,"line":18228},92,[36,18230,3693],{"class":50},[36,18232,18234],{"class":38,"line":18233},93,[36,18235,18152],{"class":42},[36,18237,18239],{"class":38,"line":18238},94,[36,18240,3537],{"class":50},[36,18242,18244,18246,18248,18250,18252],{"class":38,"line":18243},95,[36,18245,4942],{"class":50},[36,18247,107],{"class":42},[36,18249,18167],{"class":110},[36,18251,107],{"class":42},[36,18253,2732],{"class":50},[36,18255,18257],{"class":38,"line":18256},96,[36,18258,3693],{"class":50},[36,18260,18262],{"class":38,"line":18261},97,[36,18263,250],{"class":50},[256,18265,18266],{"start":54},[259,18267,18268],{},[887,18269,18270],{},"练习案例2：点和圆的关系",[2674,18272,18273],{},[259,18274,18275],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,18277,18279],{"className":28,"code":18278,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccmath>\nclass Point\n{\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double getX() { return m_x; }\n    double getY() { return m_y; }\n\nprivate:\n    double m_x;\n    double m_y;\n};\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r) { m_r = r; }\n    void setCenter(Point center) { m_center = center; }\n    \u002F\u002F获取属性\n    double getRadius() { return m_r; }\n    Point getCenter() { return m_center; }\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[33,18280,18281,18287,18297,18304,18311,18315,18319,18324,18358,18363,18379,18393,18397,18401,18408,18415,18419,18425,18429,18433,18437,18459,18482,18487,18501,18516,18520,18524,18530,18535,18540,18544,18570,18574,18604,18632,18660,18677,18681,18694,18698,18702,18706,18719,18723,18727,18735,18739,18743,18747,18752,18756,18767,18774,18783,18793,18804,18811,18824,18835,18845,18856,18863,18877,18882,18892,18900],{"__ignoreMap":31},[36,18282,18283,18285],{"class":38,"line":39},[36,18284,3459],{"class":42},[36,18286,3462],{"class":110},[36,18288,18289,18291,18293,18295],{"class":38,"line":54},[36,18290,3467],{"class":42},[36,18292,3470],{"class":42},[36,18294,3473],{"class":46},[36,18296,77],{"class":50},[36,18298,18299,18301],{"class":38,"line":61},[36,18300,3459],{"class":42},[36,18302,18303],{"class":110},"\u003Ccmath>\n",[36,18305,18306,18308],{"class":38,"line":80},[36,18307,16023],{"class":42},[36,18309,18310],{"class":46}," Point\n",[36,18312,18313],{"class":38,"line":96},[36,18314,3076],{"class":50},[36,18316,18317],{"class":38,"line":101},[36,18318,16045],{"class":42},[36,18320,18321],{"class":38,"line":128},[36,18322,18323],{"class":124},"    \u002F\u002F赋值\n",[36,18325,18326,18328,18331,18333,18335,18338,18340,18342,18345,18348,18350,18353,18355],{"class":38,"line":149},[36,18327,16238],{"class":42},[36,18329,18330],{"class":46}," setPoint",[36,18332,222],{"class":50},[36,18334,15366],{"class":42},[36,18336,18337],{"class":473}," x",[36,18339,477],{"class":50},[36,18341,15366],{"class":42},[36,18343,18344],{"class":473}," y",[36,18346,18347],{"class":50},") { m_x ",[36,18349,70],{"class":42},[36,18351,18352],{"class":50}," x; m_y ",[36,18354,70],{"class":42},[36,18356,18357],{"class":50}," y; }\n",[36,18359,18360],{"class":38,"line":154},[36,18361,18362],{"class":124},"    \u002F\u002F获取坐标\n",[36,18364,18365,18367,18370,18373,18376],{"class":38,"line":167},[36,18366,16067],{"class":42},[36,18368,18369],{"class":46}," getX",[36,18371,18372],{"class":50},"() { ",[36,18374,18375],{"class":42},"return",[36,18377,18378],{"class":50}," m_x; }\n",[36,18380,18381,18383,18386,18388,18390],{"class":38,"line":172},[36,18382,16067],{"class":42},[36,18384,18385],{"class":46}," getY",[36,18387,18372],{"class":50},[36,18389,18375],{"class":42},[36,18391,18392],{"class":50}," m_y; }\n",[36,18394,18395],{"class":38,"line":192},[36,18396,58],{"emptyLinePlaceholder":57},[36,18398,18399],{"class":38,"line":211},[36,18400,16551],{"class":42},[36,18402,18403,18405],{"class":38,"line":216},[36,18404,16067],{"class":42},[36,18406,18407],{"class":50}," m_x;\n",[36,18409,18410,18412],{"class":38,"line":231},[36,18411,16067],{"class":42},[36,18413,18414],{"class":50}," m_y;\n",[36,18416,18417],{"class":38,"line":236},[36,18418,5486],{"class":50},[36,18420,18421,18423],{"class":38,"line":247},[36,18422,16023],{"class":42},[36,18424,16026],{"class":46},[36,18426,18427],{"class":38,"line":637},[36,18428,3076],{"class":50},[36,18430,18431],{"class":38,"line":646},[36,18432,16045],{"class":42},[36,18434,18435],{"class":38,"line":655},[36,18436,18323],{"class":124},[36,18438,18439,18441,18444,18446,18448,18451,18454,18456],{"class":38,"line":660},[36,18440,16238],{"class":42},[36,18442,18443],{"class":46}," setRadius",[36,18445,222],{"class":50},[36,18447,15366],{"class":42},[36,18449,18450],{"class":473}," r",[36,18452,18453],{"class":50},") { m_r ",[36,18455,70],{"class":42},[36,18457,18458],{"class":50}," r; }\n",[36,18460,18461,18463,18466,18468,18471,18474,18477,18479],{"class":38,"line":665},[36,18462,16238],{"class":42},[36,18464,18465],{"class":46}," setCenter",[36,18467,222],{"class":50},[36,18469,18470],{"class":46},"Point",[36,18472,18473],{"class":473}," center",[36,18475,18476],{"class":50},") { m_center ",[36,18478,70],{"class":42},[36,18480,18481],{"class":50}," center; }\n",[36,18483,18484],{"class":38,"line":674},[36,18485,18486],{"class":124},"    \u002F\u002F获取属性\n",[36,18488,18489,18491,18494,18496,18498],{"class":38,"line":679},[36,18490,16067],{"class":42},[36,18492,18493],{"class":46}," getRadius",[36,18495,18372],{"class":50},[36,18497,18375],{"class":42},[36,18499,18500],{"class":50}," m_r; }\n",[36,18502,18503,18506,18509,18511,18513],{"class":38,"line":692},[36,18504,18505],{"class":46},"    Point",[36,18507,18508],{"class":46}," getCenter",[36,18510,18372],{"class":50},[36,18512,18375],{"class":42},[36,18514,18515],{"class":50}," m_center; }\n",[36,18517,18518],{"class":38,"line":705},[36,18519,58],{"emptyLinePlaceholder":57},[36,18521,18522],{"class":38,"line":710},[36,18523,16551],{"class":42},[36,18525,18526,18528],{"class":38,"line":722},[36,18527,16067],{"class":42},[36,18529,16057],{"class":50},[36,18531,18532],{"class":38,"line":750},[36,18533,18534],{"class":124},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[36,18536,18537],{"class":38,"line":755},[36,18538,18539],{"class":50},"    Point m_center;\n",[36,18541,18542],{"class":38,"line":777},[36,18543,5486],{"class":50},[36,18545,18546,18548,18551,18553,18556,18558,18560,18562,18564,18566,18568],{"class":38,"line":802},[36,18547,463],{"class":42},[36,18549,18550],{"class":46}," isInCircle",[36,18552,222],{"class":50},[36,18554,18555],{"class":46},"Circle",[36,18557,85],{"class":42},[36,18559,1956],{"class":473},[36,18561,2045],{"class":50},[36,18563,18470],{"class":46},[36,18565,85],{"class":42},[36,18567,19],{"class":473},[36,18569,1680],{"class":50},[36,18571,18572],{"class":38,"line":807},[36,18573,3076],{"class":50},[36,18575,18576,18578,18581,18583,18585,18588,18591,18594,18596,18598,18600,18602],{"class":38,"line":818},[36,18577,16067],{"class":42},[36,18579,18580],{"class":50}," dx ",[36,18582,70],{"class":42},[36,18584,17671],{"class":50},[36,18586,18587],{"class":46},"getCenter",[36,18589,18590],{"class":50},"().",[36,18592,18593],{"class":46},"getX",[36,18595,1133],{"class":50},[36,18597,2199],{"class":42},[36,18599,17217],{"class":50},[36,18601,18593],{"class":46},[36,18603,1022],{"class":50},[36,18605,18606,18608,18611,18613,18615,18617,18619,18622,18624,18626,18628,18630],{"class":38,"line":843},[36,18607,16067],{"class":42},[36,18609,18610],{"class":50}," dy ",[36,18612,70],{"class":42},[36,18614,17671],{"class":50},[36,18616,18587],{"class":46},[36,18618,18590],{"class":50},[36,18620,18621],{"class":46},"getY",[36,18623,1133],{"class":50},[36,18625,2199],{"class":42},[36,18627,17217],{"class":50},[36,18629,18621],{"class":46},[36,18631,1022],{"class":50},[36,18633,18634,18636,18639,18641,18644,18647,18649,18651,18653,18655,18657],{"class":38,"line":848},[36,18635,16067],{"class":42},[36,18637,18638],{"class":50}," distance ",[36,18640,70],{"class":42},[36,18642,18643],{"class":46}," sqrt",[36,18645,18646],{"class":50},"(dx ",[36,18648,2122],{"class":42},[36,18650,18580],{"class":50},[36,18652,2148],{"class":42},[36,18654,18610],{"class":50},[36,18656,2122],{"class":42},[36,18658,18659],{"class":50}," dy);\n",[36,18661,18662,18664,18667,18669,18671,18674],{"class":38,"line":859},[36,18663,4592],{"class":42},[36,18665,18666],{"class":50}," (distance ",[36,18668,2577],{"class":42},[36,18670,17671],{"class":50},[36,18672,18673],{"class":46},"getRadius",[36,18675,18676],{"class":50},"())\n",[36,18678,18679],{"class":38,"line":864},[36,18680,3537],{"class":50},[36,18682,18683,18685,18687,18690,18692],{"class":38,"line":873},[36,18684,11137],{"class":50},[36,18686,107],{"class":42},[36,18688,18689],{"class":110}," \"点在圆内\"",[36,18691,114],{"class":42},[36,18693,747],{"class":50},[36,18695,18696],{"class":38,"line":9454},[36,18697,3693],{"class":50},[36,18699,18700],{"class":38,"line":9481},[36,18701,18152],{"class":42},[36,18703,18704],{"class":38,"line":9486},[36,18705,3537],{"class":50},[36,18707,18708,18710,18712,18715,18717],{"class":38,"line":9492},[36,18709,11137],{"class":50},[36,18711,107],{"class":42},[36,18713,18714],{"class":110}," \"点在圆外\"",[36,18716,114],{"class":42},[36,18718,747],{"class":50},[36,18720,18721],{"class":38,"line":9504},[36,18722,3693],{"class":50},[36,18724,18725],{"class":38,"line":9516},[36,18726,250],{"class":50},[36,18728,18729,18731,18733],{"class":38,"line":9528},[36,18730,43],{"class":42},[36,18732,47],{"class":46},[36,18734,3484],{"class":50},[36,18736,18737],{"class":38,"line":11184},[36,18738,3076],{"class":50},[36,18740,18741],{"class":38,"line":11209},[36,18742,16382],{"class":124},[36,18744,18745],{"class":38,"line":11232},[36,18746,16129],{"class":50},[36,18748,18749],{"class":38,"line":11256},[36,18750,18751],{"class":50},"    Point p1;\n",[36,18753,18754],{"class":38,"line":11261},[36,18755,18323],{"class":124},[36,18757,18758,18760,18762,18765],{"class":38,"line":11266},[36,18759,3081],{"class":50},[36,18761,107],{"class":42},[36,18763,18764],{"class":110},"\"请输入圆的半径：\"",[36,18766,77],{"class":50},[36,18768,18769,18771],{"class":38,"line":11271},[36,18770,16067],{"class":42},[36,18772,18773],{"class":50}," r;\n",[36,18775,18776,18778,18780],{"class":38,"line":11280},[36,18777,3519],{"class":50},[36,18779,2961],{"class":42},[36,18781,18782],{"class":50},"r;\n",[36,18784,18785,18787,18790],{"class":38,"line":11285},[36,18786,17924],{"class":50},[36,18788,18789],{"class":46},"setRadius",[36,18791,18792],{"class":50},"(r);\n",[36,18794,18795,18797,18799,18802],{"class":38,"line":11291},[36,18796,3081],{"class":50},[36,18798,107],{"class":42},[36,18800,18801],{"class":110},"\"请输入圆心坐标：\"",[36,18803,77],{"class":50},[36,18805,18806,18808],{"class":38,"line":11312},[36,18807,16067],{"class":42},[36,18809,18810],{"class":50}," x, y;\n",[36,18812,18813,18815,18817,18819,18821],{"class":38,"line":11318},[36,18814,3519],{"class":50},[36,18816,2961],{"class":42},[36,18818,2487],{"class":50},[36,18820,2961],{"class":42},[36,18822,18823],{"class":50},"y;\n",[36,18825,18826,18829,18832],{"class":38,"line":11332},[36,18827,18828],{"class":50},"    p1.",[36,18830,18831],{"class":46},"setPoint",[36,18833,18834],{"class":50},"(x, y);\n",[36,18836,18837,18839,18842],{"class":38,"line":11338},[36,18838,17924],{"class":50},[36,18840,18841],{"class":46},"setCenter",[36,18843,18844],{"class":50},"(p1);\n",[36,18846,18847,18849,18851,18854],{"class":38,"line":11365},[36,18848,3081],{"class":50},[36,18850,107],{"class":42},[36,18852,18853],{"class":110},"\"请输入测试点坐标：\"",[36,18855,77],{"class":50},[36,18857,18858,18860],{"class":38,"line":11374},[36,18859,16067],{"class":42},[36,18861,18862],{"class":50}," x1, y1;\n",[36,18864,18865,18867,18869,18872,18874],{"class":38,"line":11380},[36,18866,3519],{"class":50},[36,18868,2961],{"class":42},[36,18870,18871],{"class":50},"x1",[36,18873,2961],{"class":42},[36,18875,18876],{"class":50},"y1;\n",[36,18878,18879],{"class":38,"line":11388},[36,18880,18881],{"class":50},"    Point p2;\n",[36,18883,18884,18887,18889],{"class":38,"line":11393},[36,18885,18886],{"class":50},"    p2.",[36,18888,18831],{"class":46},[36,18890,18891],{"class":50},"(x1, y1);\n",[36,18893,18894,18897],{"class":38,"line":17933},[36,18895,18896],{"class":46},"    isInCircle",[36,18898,18899],{"class":50},"(c1, p2);\n",[36,18901,18902],{"class":38,"line":17939},[36,18903,250],{"class":50},[19,18905,18906],{},"在类中可以让另一个类作为本来的成员",[19,18908,18909],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18911,18912],{},"创建point.h",[26,18914,18916],{"className":28,"code":18915,"language":30,"meta":31,"style":31},"#pragma once \u002F\u002F防止头文件重复包含\n#include\u003Ciostream>\nusing namespace std;\nclass Point\n{\n\u002F\u002F做好声明与变量定义就可以\npublic:\n    \u002F\u002F赋值\n    void setPoint(double x, double y);\n    \u002F\u002F获取坐标\n    double getX();\n    double getY();\n\nprivate:\n    double m_x;\n    double m_y;\n};\n",[33,18917,18918,18929,18935,18945,18951,18955,18960,18964,18968,18988,18992,19000,19008,19012,19016,19022,19028],{"__ignoreMap":31},[36,18919,18920,18923,18926],{"class":38,"line":39},[36,18921,18922],{"class":42},"#pragma",[36,18924,18925],{"class":46}," once",[36,18927,18928],{"class":124}," \u002F\u002F防止头文件重复包含\n",[36,18930,18931,18933],{"class":38,"line":54},[36,18932,3459],{"class":42},[36,18934,3462],{"class":110},[36,18936,18937,18939,18941,18943],{"class":38,"line":61},[36,18938,3467],{"class":42},[36,18940,3470],{"class":42},[36,18942,3473],{"class":46},[36,18944,77],{"class":50},[36,18946,18947,18949],{"class":38,"line":80},[36,18948,16023],{"class":42},[36,18950,18310],{"class":46},[36,18952,18953],{"class":38,"line":96},[36,18954,3076],{"class":50},[36,18956,18957],{"class":38,"line":101},[36,18958,18959],{"class":124},"\u002F\u002F做好声明与变量定义就可以\n",[36,18961,18962],{"class":38,"line":128},[36,18963,16045],{"class":42},[36,18965,18966],{"class":38,"line":149},[36,18967,18323],{"class":124},[36,18969,18970,18972,18974,18976,18978,18980,18982,18984,18986],{"class":38,"line":154},[36,18971,16238],{"class":42},[36,18973,18330],{"class":46},[36,18975,222],{"class":50},[36,18977,15366],{"class":42},[36,18979,18337],{"class":473},[36,18981,477],{"class":50},[36,18983,15366],{"class":42},[36,18985,18344],{"class":473},[36,18987,228],{"class":50},[36,18989,18990],{"class":38,"line":167},[36,18991,18362],{"class":124},[36,18993,18994,18996,18998],{"class":38,"line":172},[36,18995,16067],{"class":42},[36,18997,18369],{"class":46},[36,18999,1022],{"class":50},[36,19001,19002,19004,19006],{"class":38,"line":192},[36,19003,16067],{"class":42},[36,19005,18385],{"class":46},[36,19007,1022],{"class":50},[36,19009,19010],{"class":38,"line":211},[36,19011,58],{"emptyLinePlaceholder":57},[36,19013,19014],{"class":38,"line":216},[36,19015,16551],{"class":42},[36,19017,19018,19020],{"class":38,"line":231},[36,19019,16067],{"class":42},[36,19021,18407],{"class":50},[36,19023,19024,19026],{"class":38,"line":236},[36,19025,16067],{"class":42},[36,19027,18414],{"class":50},[36,19029,19030],{"class":38,"line":247},[36,19031,5486],{"class":50},[19,19033,19034],{},"创建point.cpp",[26,19036,19038],{"className":28,"code":19037,"language":30,"meta":31,"style":31},"#include\u003Cpoint.h>\n\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n    void Point::setPoint(double x, double y) { m_x = x; m_y = y; }\n    \u002F\u002F获取坐标\n    double Point::getX() { return m_x; }\n    double Point::getY() { return m_y; }\n",[33,19039,19040,19047,19052,19086,19090,19106],{"__ignoreMap":31},[36,19041,19042,19044],{"class":38,"line":39},[36,19043,3459],{"class":42},[36,19045,19046],{"class":110},"\u003Cpoint.h>\n",[36,19048,19049],{"class":38,"line":54},[36,19050,19051],{"class":124},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[36,19053,19054,19056,19059,19062,19064,19066,19068,19070,19072,19074,19076,19078,19080,19082,19084],{"class":38,"line":61},[36,19055,16238],{"class":42},[36,19057,19058],{"class":46}," Point",[36,19060,19061],{"class":50},"::",[36,19063,18831],{"class":46},[36,19065,222],{"class":50},[36,19067,15366],{"class":42},[36,19069,18337],{"class":473},[36,19071,477],{"class":50},[36,19073,15366],{"class":42},[36,19075,18344],{"class":473},[36,19077,18347],{"class":50},[36,19079,70],{"class":42},[36,19081,18352],{"class":50},[36,19083,70],{"class":42},[36,19085,18357],{"class":50},[36,19087,19088],{"class":38,"line":80},[36,19089,18362],{"class":124},[36,19091,19092,19094,19096,19098,19100,19102,19104],{"class":38,"line":96},[36,19093,16067],{"class":42},[36,19095,19058],{"class":46},[36,19097,19061],{"class":50},[36,19099,18593],{"class":46},[36,19101,18372],{"class":50},[36,19103,18375],{"class":42},[36,19105,18378],{"class":50},[36,19107,19108,19110,19112,19114,19116,19118,19120],{"class":38,"line":101},[36,19109,16067],{"class":42},[36,19111,19058],{"class":46},[36,19113,19061],{"class":50},[36,19115,18621],{"class":46},[36,19117,18372],{"class":50},[36,19119,18375],{"class":42},[36,19121,18392],{"class":50},[19,19123,19124],{},"创建circle.h",[26,19126,19128],{"className":28,"code":19127,"language":30,"meta":31,"style":31},"#pragma once\n#include\u003Ciostream>\nusing namespace std;\n#include\u003Cpoint.h>\nclass Circle\n{\npublic:\n    \u002F\u002F赋值\n    void setRadius(double r);\n    void setCenter(Point center);\n    \u002F\u002F获取属性\n    double getRadius();\n    Point getCenter();\n\nprivate:\n    double m_r;\n    \u002F\u002F在类中可以让另一个类作为本来的成员\n    Point m_center;\n};\n",[33,19129,19130,19137,19143,19153,19159,19165,19169,19173,19177,19191,19205,19209,19217,19225,19229,19233,19239,19243,19247],{"__ignoreMap":31},[36,19131,19132,19134],{"class":38,"line":39},[36,19133,18922],{"class":42},[36,19135,19136],{"class":46}," once\n",[36,19138,19139,19141],{"class":38,"line":54},[36,19140,3459],{"class":42},[36,19142,3462],{"class":110},[36,19144,19145,19147,19149,19151],{"class":38,"line":61},[36,19146,3467],{"class":42},[36,19148,3470],{"class":42},[36,19150,3473],{"class":46},[36,19152,77],{"class":50},[36,19154,19155,19157],{"class":38,"line":80},[36,19156,3459],{"class":42},[36,19158,19046],{"class":110},[36,19160,19161,19163],{"class":38,"line":96},[36,19162,16023],{"class":42},[36,19164,16026],{"class":46},[36,19166,19167],{"class":38,"line":101},[36,19168,3076],{"class":50},[36,19170,19171],{"class":38,"line":128},[36,19172,16045],{"class":42},[36,19174,19175],{"class":38,"line":149},[36,19176,18323],{"class":124},[36,19178,19179,19181,19183,19185,19187,19189],{"class":38,"line":154},[36,19180,16238],{"class":42},[36,19182,18443],{"class":46},[36,19184,222],{"class":50},[36,19186,15366],{"class":42},[36,19188,18450],{"class":473},[36,19190,228],{"class":50},[36,19192,19193,19195,19197,19199,19201,19203],{"class":38,"line":167},[36,19194,16238],{"class":42},[36,19196,18465],{"class":46},[36,19198,222],{"class":50},[36,19200,18470],{"class":46},[36,19202,18473],{"class":473},[36,19204,228],{"class":50},[36,19206,19207],{"class":38,"line":172},[36,19208,18486],{"class":124},[36,19210,19211,19213,19215],{"class":38,"line":192},[36,19212,16067],{"class":42},[36,19214,18493],{"class":46},[36,19216,1022],{"class":50},[36,19218,19219,19221,19223],{"class":38,"line":211},[36,19220,18505],{"class":46},[36,19222,18508],{"class":46},[36,19224,1022],{"class":50},[36,19226,19227],{"class":38,"line":216},[36,19228,58],{"emptyLinePlaceholder":57},[36,19230,19231],{"class":38,"line":231},[36,19232,16551],{"class":42},[36,19234,19235,19237],{"class":38,"line":236},[36,19236,16067],{"class":42},[36,19238,16057],{"class":50},[36,19240,19241],{"class":38,"line":247},[36,19242,18534],{"class":124},[36,19244,19245],{"class":38,"line":637},[36,19246,18539],{"class":50},[36,19248,19249],{"class":38,"line":646},[36,19250,5486],{"class":50},[19,19252,19253],{},"创建circle.cpp",[26,19255,19257],{"className":28,"code":19256,"language":30,"meta":31,"style":31},"#include\u003Ccircle.h>\nvoid Circle::setRadius(double r) { m_r = r; }\nvoid Circle::setCenter(Point center) { m_center = center; }\n\u002F\u002F获取属性\ndouble Circle::getRadius() { return m_r; }\nPoint Circle::getCenter() { return m_center; }\n",[33,19258,19259,19266,19289,19311,19316,19332],{"__ignoreMap":31},[36,19260,19261,19263],{"class":38,"line":39},[36,19262,3459],{"class":42},[36,19264,19265],{"class":110},"\u003Ccircle.h>\n",[36,19267,19268,19270,19273,19275,19277,19279,19281,19283,19285,19287],{"class":38,"line":54},[36,19269,463],{"class":42},[36,19271,19272],{"class":46}," Circle",[36,19274,19061],{"class":50},[36,19276,18789],{"class":46},[36,19278,222],{"class":50},[36,19280,15366],{"class":42},[36,19282,18450],{"class":473},[36,19284,18453],{"class":50},[36,19286,70],{"class":42},[36,19288,18458],{"class":50},[36,19290,19291,19293,19295,19297,19299,19301,19303,19305,19307,19309],{"class":38,"line":61},[36,19292,463],{"class":42},[36,19294,19272],{"class":46},[36,19296,19061],{"class":50},[36,19298,18841],{"class":46},[36,19300,222],{"class":50},[36,19302,18470],{"class":46},[36,19304,18473],{"class":473},[36,19306,18476],{"class":50},[36,19308,70],{"class":42},[36,19310,18481],{"class":50},[36,19312,19313],{"class":38,"line":80},[36,19314,19315],{"class":124},"\u002F\u002F获取属性\n",[36,19317,19318,19320,19322,19324,19326,19328,19330],{"class":38,"line":96},[36,19319,15366],{"class":42},[36,19321,19272],{"class":46},[36,19323,19061],{"class":50},[36,19325,18673],{"class":46},[36,19327,18372],{"class":50},[36,19329,18375],{"class":42},[36,19331,18500],{"class":50},[36,19333,19334,19336,19338,19340,19342,19344,19346],{"class":38,"line":101},[36,19335,18470],{"class":46},[36,19337,19272],{"class":46},[36,19339,19061],{"class":50},[36,19341,18587],{"class":46},[36,19343,18372],{"class":50},[36,19345,18375],{"class":42},[36,19347,18515],{"class":50},[19,19349,19350],{},"使用封装的类",[26,19352,19354],{"className":28,"code":19353,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n#include\u003Ccircle.h>\n#include\u003Cpoint.h>\nvoid isInCircle(Circle &c,Point &p)\n{\n    double dx = c.getCenter().getX() - p.getX();\n    double dy = c.getCenter().getY() - p.getY();\n    double distance = sqrt(dx * dx + dy * dy);\n    if (distance \u003C c.getRadius())\n    {\n        cout \u003C\u003C \"点在圆内\" \u003C\u003C endl;\n    }\n    else\n    {\n        cout \u003C\u003C \"点在圆外\" \u003C\u003C endl;\n    }\n}\nint main()\n{\n    \u002F\u002F实例化\n    Circle c1;\n    Point p1;\n    \u002F\u002F赋值\n    cout\u003C\u003C\"请输入圆的半径：\";\n    double r;\n    cin>>r;\n    c1.setRadius(r);\n    cout\u003C\u003C\"请输入圆心坐标：\";\n    double x, y;\n    cin>>x>>y;\n    p1.setPoint(x, y);\n    c1.setCenter(p1);\n    cout\u003C\u003C\"请输入测试点坐标：\";\n    double x1, y1;\n    cin>>x1>>y1;\n    Point p2;\n    p2.setPoint(x1, y1);\n    isInCircle(c1, p2);\n}\n",[33,19355,19356,19362,19372,19378,19384,19408,19412,19438,19464,19488,19502,19506,19518,19522,19526,19530,19542,19546,19550,19558,19562,19566,19570,19574,19578,19588,19594,19602,19610,19620,19626,19638,19646,19654,19664,19670,19682,19686,19694,19700],{"__ignoreMap":31},[36,19357,19358,19360],{"class":38,"line":39},[36,19359,3459],{"class":42},[36,19361,3462],{"class":110},[36,19363,19364,19366,19368,19370],{"class":38,"line":54},[36,19365,3467],{"class":42},[36,19367,3470],{"class":42},[36,19369,3473],{"class":46},[36,19371,77],{"class":50},[36,19373,19374,19376],{"class":38,"line":61},[36,19375,3459],{"class":42},[36,19377,19265],{"class":110},[36,19379,19380,19382],{"class":38,"line":80},[36,19381,3459],{"class":42},[36,19383,19046],{"class":110},[36,19385,19386,19388,19390,19392,19394,19396,19398,19400,19402,19404,19406],{"class":38,"line":96},[36,19387,463],{"class":42},[36,19389,18550],{"class":46},[36,19391,222],{"class":50},[36,19393,18555],{"class":46},[36,19395,85],{"class":42},[36,19397,1956],{"class":473},[36,19399,2045],{"class":50},[36,19401,18470],{"class":46},[36,19403,85],{"class":42},[36,19405,19],{"class":473},[36,19407,1680],{"class":50},[36,19409,19410],{"class":38,"line":101},[36,19411,3076],{"class":50},[36,19413,19414,19416,19418,19420,19422,19424,19426,19428,19430,19432,19434,19436],{"class":38,"line":128},[36,19415,16067],{"class":42},[36,19417,18580],{"class":50},[36,19419,70],{"class":42},[36,19421,17671],{"class":50},[36,19423,18587],{"class":46},[36,19425,18590],{"class":50},[36,19427,18593],{"class":46},[36,19429,1133],{"class":50},[36,19431,2199],{"class":42},[36,19433,17217],{"class":50},[36,19435,18593],{"class":46},[36,19437,1022],{"class":50},[36,19439,19440,19442,19444,19446,19448,19450,19452,19454,19456,19458,19460,19462],{"class":38,"line":149},[36,19441,16067],{"class":42},[36,19443,18610],{"class":50},[36,19445,70],{"class":42},[36,19447,17671],{"class":50},[36,19449,18587],{"class":46},[36,19451,18590],{"class":50},[36,19453,18621],{"class":46},[36,19455,1133],{"class":50},[36,19457,2199],{"class":42},[36,19459,17217],{"class":50},[36,19461,18621],{"class":46},[36,19463,1022],{"class":50},[36,19465,19466,19468,19470,19472,19474,19476,19478,19480,19482,19484,19486],{"class":38,"line":154},[36,19467,16067],{"class":42},[36,19469,18638],{"class":50},[36,19471,70],{"class":42},[36,19473,18643],{"class":46},[36,19475,18646],{"class":50},[36,19477,2122],{"class":42},[36,19479,18580],{"class":50},[36,19481,2148],{"class":42},[36,19483,18610],{"class":50},[36,19485,2122],{"class":42},[36,19487,18659],{"class":50},[36,19489,19490,19492,19494,19496,19498,19500],{"class":38,"line":167},[36,19491,4592],{"class":42},[36,19493,18666],{"class":50},[36,19495,2577],{"class":42},[36,19497,17671],{"class":50},[36,19499,18673],{"class":46},[36,19501,18676],{"class":50},[36,19503,19504],{"class":38,"line":172},[36,19505,3537],{"class":50},[36,19507,19508,19510,19512,19514,19516],{"class":38,"line":192},[36,19509,11137],{"class":50},[36,19511,107],{"class":42},[36,19513,18689],{"class":110},[36,19515,114],{"class":42},[36,19517,747],{"class":50},[36,19519,19520],{"class":38,"line":211},[36,19521,3693],{"class":50},[36,19523,19524],{"class":38,"line":216},[36,19525,18152],{"class":42},[36,19527,19528],{"class":38,"line":231},[36,19529,3537],{"class":50},[36,19531,19532,19534,19536,19538,19540],{"class":38,"line":236},[36,19533,11137],{"class":50},[36,19535,107],{"class":42},[36,19537,18714],{"class":110},[36,19539,114],{"class":42},[36,19541,747],{"class":50},[36,19543,19544],{"class":38,"line":247},[36,19545,3693],{"class":50},[36,19547,19548],{"class":38,"line":637},[36,19549,250],{"class":50},[36,19551,19552,19554,19556],{"class":38,"line":646},[36,19553,43],{"class":42},[36,19555,47],{"class":46},[36,19557,3484],{"class":50},[36,19559,19560],{"class":38,"line":655},[36,19561,3076],{"class":50},[36,19563,19564],{"class":38,"line":660},[36,19565,16382],{"class":124},[36,19567,19568],{"class":38,"line":665},[36,19569,16129],{"class":50},[36,19571,19572],{"class":38,"line":674},[36,19573,18751],{"class":50},[36,19575,19576],{"class":38,"line":679},[36,19577,18323],{"class":124},[36,19579,19580,19582,19584,19586],{"class":38,"line":692},[36,19581,3081],{"class":50},[36,19583,107],{"class":42},[36,19585,18764],{"class":110},[36,19587,77],{"class":50},[36,19589,19590,19592],{"class":38,"line":705},[36,19591,16067],{"class":42},[36,19593,18773],{"class":50},[36,19595,19596,19598,19600],{"class":38,"line":710},[36,19597,3519],{"class":50},[36,19599,2961],{"class":42},[36,19601,18782],{"class":50},[36,19603,19604,19606,19608],{"class":38,"line":722},[36,19605,17924],{"class":50},[36,19607,18789],{"class":46},[36,19609,18792],{"class":50},[36,19611,19612,19614,19616,19618],{"class":38,"line":750},[36,19613,3081],{"class":50},[36,19615,107],{"class":42},[36,19617,18801],{"class":110},[36,19619,77],{"class":50},[36,19621,19622,19624],{"class":38,"line":755},[36,19623,16067],{"class":42},[36,19625,18810],{"class":50},[36,19627,19628,19630,19632,19634,19636],{"class":38,"line":777},[36,19629,3519],{"class":50},[36,19631,2961],{"class":42},[36,19633,2487],{"class":50},[36,19635,2961],{"class":42},[36,19637,18823],{"class":50},[36,19639,19640,19642,19644],{"class":38,"line":802},[36,19641,18828],{"class":50},[36,19643,18831],{"class":46},[36,19645,18834],{"class":50},[36,19647,19648,19650,19652],{"class":38,"line":807},[36,19649,17924],{"class":50},[36,19651,18841],{"class":46},[36,19653,18844],{"class":50},[36,19655,19656,19658,19660,19662],{"class":38,"line":818},[36,19657,3081],{"class":50},[36,19659,107],{"class":42},[36,19661,18853],{"class":110},[36,19663,77],{"class":50},[36,19665,19666,19668],{"class":38,"line":843},[36,19667,16067],{"class":42},[36,19669,18862],{"class":50},[36,19671,19672,19674,19676,19678,19680],{"class":38,"line":848},[36,19673,3519],{"class":50},[36,19675,2961],{"class":42},[36,19677,18871],{"class":50},[36,19679,2961],{"class":42},[36,19681,18876],{"class":50},[36,19683,19684],{"class":38,"line":859},[36,19685,18881],{"class":50},[36,19687,19688,19690,19692],{"class":38,"line":864},[36,19689,18886],{"class":50},[36,19691,18831],{"class":46},[36,19693,18891],{"class":50},[36,19695,19696,19698],{"class":38,"line":873},[36,19697,18896],{"class":46},[36,19699,18899],{"class":50},[36,19701,19702],{"class":38,"line":9454},[36,19703,250],{"class":50},[14,19705,19707],{"id":19706},"_82对象的初始化清理","8.2对象的初始化清理",[2674,19709,19710,19713],{},[259,19711,19712],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[259,19714,19715],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[1645,19717,19719],{"id":19718},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19721,19722,19723,19726],{},"对象的",[887,19724,19725],{},"初始化和清理","也是两个非常重要的安全问题",[19,19728,19729],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19731,19732],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19734,19735,19736,19739,19740,19743],{},"c++利用了",[887,19737,19738],{},"构造函数","和",[887,19741,19742],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19745,19746,19747],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[887,19748,19749],{},"我们不提供构造和析构，编译器会提供",[19,19751,19752],{},[887,19753,19754],{},"编译器提供的构造函数和析构函数是空实现。",[2674,19756,19757,19760],{},[259,19758,19759],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[259,19761,19762,19763,19766],{},"析构函数：主要作用在于对象",[887,19764,19765],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19768,19769,19772],{},[887,19770,19771],{},"构造函数语法：",[33,19773,19774],{},"类名(){}",[256,19776,19777,19780,19783,19786,19789],{},[259,19778,19779],{},"构造函数，没有返回值也不写void",[259,19781,19782],{},"函数名称与类名相同",[259,19784,19785],{},"构造函数可以有参数，因此可以发生重载",[259,19787,19788],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[259,19790,19791,19792,2096],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[33,19793,19794],{},"Person(){}",[19,19796,19797,15124,19800],{},[887,19798,19799],{},"析构函数语法：",[33,19801,19802],{},"~类名(){}",[256,19804,19805,19808,19811,19817],{},[259,19806,19807],{},"析构函数，没有返回值也不写void",[259,19809,19810],{},"函数名称与类名相同,在名称前加上符号  ~",[259,19812,19813,19814],{},"析构函数不可以有参数，因此",[887,19815,19816],{},"不可以发生重载",[259,19818,19819],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,19821,19823],{"className":28,"code":19822,"language":30,"meta":31,"style":31},"class Person\n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout \u003C\u003C \"Person的构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n\n};\n\nvoid test01()\n{\n    Person p;\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n}\n\nint main() {\n    \n    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n\n    Person p;\u002F\u002F只有构造函数\n\n    system(\"pause\");\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n\n    return 0;\n}\n",[33,19824,19825,19831,19835,19839,19844,19851,19855,19868,19872,19877,19884,19888,19901,19905,19909,19913,19917,19925,19929,19937,19941,19945,19953,19957,19962,19966,19973,19977,19990,19994,20002],{"__ignoreMap":31},[36,19826,19827,19829],{"class":38,"line":39},[36,19828,16023],{"class":42},[36,19830,16500],{"class":46},[36,19832,19833],{"class":38,"line":54},[36,19834,3076],{"class":50},[36,19836,19837],{"class":38,"line":61},[36,19838,16045],{"class":42},[36,19840,19841],{"class":38,"line":80},[36,19842,19843],{"class":124},"    \u002F\u002F构造函数\n",[36,19845,19846,19849],{"class":38,"line":96},[36,19847,19848],{"class":46},"    Person",[36,19850,3484],{"class":50},[36,19852,19853],{"class":38,"line":101},[36,19854,3537],{"class":50},[36,19856,19857,19859,19861,19864,19866],{"class":38,"line":128},[36,19858,11137],{"class":50},[36,19860,107],{"class":42},[36,19862,19863],{"class":110}," \"Person的构造函数调用\"",[36,19865,114],{"class":42},[36,19867,747],{"class":50},[36,19869,19870],{"class":38,"line":149},[36,19871,3693],{"class":50},[36,19873,19874],{"class":38,"line":154},[36,19875,19876],{"class":124},"    \u002F\u002F析构函数\n",[36,19878,19879,19882],{"class":38,"line":167},[36,19880,19881],{"class":46},"    ~Person",[36,19883,3484],{"class":50},[36,19885,19886],{"class":38,"line":172},[36,19887,3537],{"class":50},[36,19889,19890,19892,19894,19897,19899],{"class":38,"line":192},[36,19891,11137],{"class":50},[36,19893,107],{"class":42},[36,19895,19896],{"class":110}," \"Person的析构函数调用\"",[36,19898,114],{"class":42},[36,19900,747],{"class":50},[36,19902,19903],{"class":38,"line":211},[36,19904,3693],{"class":50},[36,19906,19907],{"class":38,"line":216},[36,19908,58],{"emptyLinePlaceholder":57},[36,19910,19911],{"class":38,"line":231},[36,19912,5486],{"class":50},[36,19914,19915],{"class":38,"line":236},[36,19916,58],{"emptyLinePlaceholder":57},[36,19918,19919,19921,19923],{"class":38,"line":247},[36,19920,463],{"class":42},[36,19922,911],{"class":46},[36,19924,3484],{"class":50},[36,19926,19927],{"class":38,"line":637},[36,19928,3076],{"class":50},[36,19930,19931,19934],{"class":38,"line":646},[36,19932,19933],{"class":50},"    Person p;",[36,19935,19936],{"class":124},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[36,19938,19939],{"class":38,"line":655},[36,19940,250],{"class":50},[36,19942,19943],{"class":38,"line":660},[36,19944,58],{"emptyLinePlaceholder":57},[36,19946,19947,19949,19951],{"class":38,"line":665},[36,19948,43],{"class":42},[36,19950,47],{"class":46},[36,19952,51],{"class":50},[36,19954,19955],{"class":38,"line":674},[36,19956,1295],{"class":50},[36,19958,19959],{"class":38,"line":679},[36,19960,19961],{"class":124},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[36,19963,19964],{"class":38,"line":692},[36,19965,58],{"emptyLinePlaceholder":57},[36,19967,19968,19970],{"class":38,"line":705},[36,19969,19933],{"class":50},[36,19971,19972],{"class":124},"\u002F\u002F只有构造函数\n",[36,19974,19975],{"class":38,"line":710},[36,19976,58],{"emptyLinePlaceholder":57},[36,19978,19979,19981,19983,19985,19987],{"class":38,"line":722},[36,19980,219],{"class":46},[36,19982,222],{"class":50},[36,19984,225],{"class":110},[36,19986,7448],{"class":50},[36,19988,19989],{"class":124},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[36,19991,19992],{"class":38,"line":750},[36,19993,58],{"emptyLinePlaceholder":57},[36,19995,19996,19998,20000],{"class":38,"line":755},[36,19997,239],{"class":42},[36,19999,242],{"class":73},[36,20001,77],{"class":50},[36,20003,20004],{"class":38,"line":777},[36,20005,250],{"class":50},[19,20007,20008],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[1645,20010,20012],{"id":20011},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20014,20015],{},"两种分类方式：",[19,20017,20018],{},"​\t按参数分为： 有参构造和无参构造",[19,20020,20021],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20023,20024],{},"三种调用方式：",[19,20026,20027],{},"​\t括号法",[19,20029,20030],{},"​\t显示法",[19,20032,20033],{},"​\t隐式转换法",[26,20035,20037],{"className":28,"code":20036,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F1.构造函数的分类及调用\n\u002F\u002F分类\n\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n\u002F\u002F  按照类型分类 普通构造 拷贝构造\n\nclass Person \n{\npublic:\n    \u002F\u002F构造函数\n    Person()\n    {\n        cout\u003C\u003C\"Person构造函数无参构造\"\u003C\u003Cendl;\n    }\n    Person(int a)\n    {\n        age=a;\n        cout\u003C\u003C\"Person构造函数有参构造\"\u003C\u003Cendl;\n    }\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数被调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        \u002F\u002F将传入对象的age赋值给当前对象的age\n        age=p.age;\n        cout\u003C\u003C\"Person拷贝构造函数被调用\"\u003C\u003Cendl;\n    }\n    int age;\n};\n\u002F\u002F调用\nvoid test01()\n{\n    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n}\nvoid test02()\n{\n    \u002F\u002F1.括号法\n    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n\n    \u002F\u002F注意事项\n    \u002F\u002F调用默认构造函数时候，不要加()\n    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n    \u002F\u002F Person p4();\n\n    \u002F\u002F2.显示法\n    Person p1;\n    Person p2=Person(10);\n    Person p3=Person(p2);\n    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n\n    \u002F\u002F 注意事项2\n    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n\n    \u002F\u002F3.隐士转换法\n    Person p4=10;  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n    Person p5=p4; \u002F\u002F 这里会调用拷贝构造函数\n}\nint main()\n{\n    test01();\n    test02();\n    return 0;\n}\n",[33,20038,20039,20045,20055,20060,20065,20070,20075,20079,20087,20091,20095,20099,20105,20109,20122,20126,20138,20142,20151,20164,20168,20172,20178,20182,20195,20199,20204,20220,20224,20229,20238,20251,20255,20261,20265,20270,20278,20282,20287,20291,20299,20303,20308,20313,20318,20323,20328,20332,20337,20342,20347,20352,20356,20361,20366,20382,20394,20399,20403,20408,20413,20418,20422,20427,20441,20454,20458,20466,20470,20476,20482,20490],{"__ignoreMap":31},[36,20040,20041,20043],{"class":38,"line":39},[36,20042,3459],{"class":42},[36,20044,3462],{"class":110},[36,20046,20047,20049,20051,20053],{"class":38,"line":54},[36,20048,3467],{"class":42},[36,20050,3470],{"class":42},[36,20052,3473],{"class":46},[36,20054,77],{"class":50},[36,20056,20057],{"class":38,"line":61},[36,20058,20059],{"class":124},"\u002F\u002F1.构造函数的分类及调用\n",[36,20061,20062],{"class":38,"line":80},[36,20063,20064],{"class":124},"\u002F\u002F分类\n",[36,20066,20067],{"class":38,"line":96},[36,20068,20069],{"class":124},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[36,20071,20072],{"class":38,"line":101},[36,20073,20074],{"class":124},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[36,20076,20077],{"class":38,"line":128},[36,20078,58],{"emptyLinePlaceholder":57},[36,20080,20081,20083,20085],{"class":38,"line":149},[36,20082,16023],{"class":42},[36,20084,16898],{"class":46},[36,20086,4169],{"class":50},[36,20088,20089],{"class":38,"line":154},[36,20090,3076],{"class":50},[36,20092,20093],{"class":38,"line":167},[36,20094,16045],{"class":42},[36,20096,20097],{"class":38,"line":172},[36,20098,19843],{"class":124},[36,20100,20101,20103],{"class":38,"line":192},[36,20102,19848],{"class":46},[36,20104,3484],{"class":50},[36,20106,20107],{"class":38,"line":211},[36,20108,3537],{"class":50},[36,20110,20111,20113,20115,20118,20120],{"class":38,"line":216},[36,20112,4942],{"class":50},[36,20114,107],{"class":42},[36,20116,20117],{"class":110},"\"Person构造函数无参构造\"",[36,20119,107],{"class":42},[36,20121,2732],{"class":50},[36,20123,20124],{"class":38,"line":231},[36,20125,3693],{"class":50},[36,20127,20128,20130,20132,20134,20136],{"class":38,"line":236},[36,20129,19848],{"class":46},[36,20131,222],{"class":50},[36,20133,43],{"class":42},[36,20135,474],{"class":473},[36,20137,1680],{"class":50},[36,20139,20140],{"class":38,"line":247},[36,20141,3537],{"class":50},[36,20143,20144,20147,20149],{"class":38,"line":637},[36,20145,20146],{"class":50},"        age",[36,20148,70],{"class":42},[36,20150,564],{"class":50},[36,20152,20153,20155,20157,20160,20162],{"class":38,"line":646},[36,20154,4942],{"class":50},[36,20156,107],{"class":42},[36,20158,20159],{"class":110},"\"Person构造函数有参构造\"",[36,20161,107],{"class":42},[36,20163,2732],{"class":50},[36,20165,20166],{"class":38,"line":655},[36,20167,3693],{"class":50},[36,20169,20170],{"class":38,"line":660},[36,20171,19876],{"class":124},[36,20173,20174,20176],{"class":38,"line":665},[36,20175,19881],{"class":46},[36,20177,3484],{"class":50},[36,20179,20180],{"class":38,"line":674},[36,20181,3537],{"class":50},[36,20183,20184,20186,20188,20191,20193],{"class":38,"line":679},[36,20185,4942],{"class":50},[36,20187,107],{"class":42},[36,20189,20190],{"class":110},"\"Person析构函数被调用\"",[36,20192,107],{"class":42},[36,20194,2732],{"class":50},[36,20196,20197],{"class":38,"line":692},[36,20198,3693],{"class":50},[36,20200,20201],{"class":38,"line":705},[36,20202,20203],{"class":124},"    \u002F\u002F拷贝构造函数\n",[36,20205,20206,20208,20210,20212,20214,20216,20218],{"class":38,"line":710},[36,20207,19848],{"class":46},[36,20209,222],{"class":50},[36,20211,1437],{"class":42},[36,20213,16898],{"class":46},[36,20215,85],{"class":42},[36,20217,19],{"class":473},[36,20219,1680],{"class":50},[36,20221,20222],{"class":38,"line":722},[36,20223,3537],{"class":50},[36,20225,20226],{"class":38,"line":750},[36,20227,20228],{"class":124},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[36,20230,20231,20233,20235],{"class":38,"line":755},[36,20232,20146],{"class":50},[36,20234,70],{"class":42},[36,20236,20237],{"class":50},"p.age;\n",[36,20239,20240,20242,20244,20247,20249],{"class":38,"line":777},[36,20241,4942],{"class":50},[36,20243,107],{"class":42},[36,20245,20246],{"class":110},"\"Person拷贝构造函数被调用\"",[36,20248,107],{"class":42},[36,20250,2732],{"class":50},[36,20252,20253],{"class":38,"line":802},[36,20254,3693],{"class":50},[36,20256,20257,20259],{"class":38,"line":807},[36,20258,64],{"class":42},[36,20260,9271],{"class":50},[36,20262,20263],{"class":38,"line":818},[36,20264,5486],{"class":50},[36,20266,20267],{"class":38,"line":843},[36,20268,20269],{"class":124},"\u002F\u002F调用\n",[36,20271,20272,20274,20276],{"class":38,"line":848},[36,20273,463],{"class":42},[36,20275,911],{"class":46},[36,20277,3484],{"class":50},[36,20279,20280],{"class":38,"line":859},[36,20281,3076],{"class":50},[36,20283,20284],{"class":38,"line":864},[36,20285,20286],{"class":124},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[36,20288,20289],{"class":38,"line":873},[36,20290,250],{"class":50},[36,20292,20293,20295,20297],{"class":38,"line":9454},[36,20294,463],{"class":42},[36,20296,955],{"class":46},[36,20298,3484],{"class":50},[36,20300,20301],{"class":38,"line":9481},[36,20302,3076],{"class":50},[36,20304,20305],{"class":38,"line":9486},[36,20306,20307],{"class":124},"    \u002F\u002F1.括号法\n",[36,20309,20310],{"class":38,"line":9492},[36,20311,20312],{"class":124},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[36,20314,20315],{"class":38,"line":9504},[36,20316,20317],{"class":124},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[36,20319,20320],{"class":38,"line":9516},[36,20321,20322],{"class":124},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[36,20324,20325],{"class":38,"line":9528},[36,20326,20327],{"class":124},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[36,20329,20330],{"class":38,"line":11184},[36,20331,58],{"emptyLinePlaceholder":57},[36,20333,20334],{"class":38,"line":11209},[36,20335,20336],{"class":124},"    \u002F\u002F注意事项\n",[36,20338,20339],{"class":38,"line":11232},[36,20340,20341],{"class":124},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[36,20343,20344],{"class":38,"line":11256},[36,20345,20346],{"class":124},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[36,20348,20349],{"class":38,"line":11261},[36,20350,20351],{"class":124},"    \u002F\u002F Person p4();\n",[36,20353,20354],{"class":38,"line":11266},[36,20355,58],{"emptyLinePlaceholder":57},[36,20357,20358],{"class":38,"line":11271},[36,20359,20360],{"class":124},"    \u002F\u002F2.显示法\n",[36,20362,20363],{"class":38,"line":11280},[36,20364,20365],{"class":50},"    Person p1;\n",[36,20367,20368,20371,20373,20376,20378,20380],{"class":38,"line":11285},[36,20369,20370],{"class":50},"    Person p2",[36,20372,70],{"class":42},[36,20374,20375],{"class":46},"Person",[36,20377,222],{"class":50},[36,20379,2113],{"class":73},[36,20381,228],{"class":50},[36,20383,20384,20387,20389,20391],{"class":38,"line":11291},[36,20385,20386],{"class":50},"    Person p3",[36,20388,70],{"class":42},[36,20390,20375],{"class":46},[36,20392,20393],{"class":50},"(p2);\n",[36,20395,20396],{"class":38,"line":11312},[36,20397,20398],{"class":124},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[36,20400,20401],{"class":38,"line":11318},[36,20402,58],{"emptyLinePlaceholder":57},[36,20404,20405],{"class":38,"line":11332},[36,20406,20407],{"class":124},"    \u002F\u002F 注意事项2\n",[36,20409,20410],{"class":38,"line":11338},[36,20411,20412],{"class":124},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[36,20414,20415],{"class":38,"line":11365},[36,20416,20417],{"class":124},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[36,20419,20420],{"class":38,"line":11374},[36,20421,58],{"emptyLinePlaceholder":57},[36,20423,20424],{"class":38,"line":11380},[36,20425,20426],{"class":124},"    \u002F\u002F3.隐士转换法\n",[36,20428,20429,20432,20434,20436,20438],{"class":38,"line":11388},[36,20430,20431],{"class":50},"    Person p4",[36,20433,70],{"class":42},[36,20435,2113],{"class":73},[36,20437,926],{"class":50},[36,20439,20440],{"class":124},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[36,20442,20443,20446,20448,20451],{"class":38,"line":11393},[36,20444,20445],{"class":50},"    Person p5",[36,20447,70],{"class":42},[36,20449,20450],{"class":50},"p4;",[36,20452,20453],{"class":124}," \u002F\u002F 这里会调用拷贝构造函数\n",[36,20455,20456],{"class":38,"line":17933},[36,20457,250],{"class":50},[36,20459,20460,20462,20464],{"class":38,"line":17939},[36,20461,43],{"class":42},[36,20463,47],{"class":46},[36,20465,3484],{"class":50},[36,20467,20468],{"class":38,"line":17962},[36,20469,3076],{"class":50},[36,20471,20472,20474],{"class":38,"line":17968},[36,20473,7119],{"class":46},[36,20475,1022],{"class":50},[36,20477,20478,20480],{"class":38,"line":17991},[36,20479,1130],{"class":46},[36,20481,1022],{"class":50},[36,20483,20484,20486,20488],{"class":38,"line":18005},[36,20485,239],{"class":42},[36,20487,242],{"class":73},[36,20489,77],{"class":50},[36,20491,20492],{"class":38,"line":18025},[36,20493,250],{"class":50},[19,20495,20496,20499],{},[887,20497,20498],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[1645,20501,20503],{"id":20502},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20505,20506],{},"C++中拷贝构造函数调用时机通常有三种情况",[2674,20508,20509,20512,20515],{},[259,20510,20511],{},"使用一个已经创建完毕的对象来初始化一个新对象",[259,20513,20514],{},"值传递的方式给函数参数传值",[259,20516,20517],{},"以值方式返回局部对象",[26,20519,20521],{"className":28,"code":20520,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\n\u002F\u002F拷贝构造函数调用时机\n\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n\u002F\u002F2.值传递的方式给函数参数传值\n\u002F\u002F3.以值方式返回局部对象\nclass Person\n{\npublic:\n    Person()\n    {\n        cout \u003C\u003C \"Person的默认构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造\n    Person(int age)\n    {\n        m_Age = age;\n        cout \u003C\u003C \"Person的有参构造函数调用\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person &p)\n    {\n        m_Age = p.m_Age;\n        cout \u003C\u003C \"Person的拷贝构造函数调用\" \u003C\u003C endl;\n    }\n    ~Person()\n    {\n        cout \u003C\u003C \"Person的析构函数调用\" \u003C\u003C endl;\n    }\n    int m_Age;\n};\n\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\nvoid test01()\n{\n    Person p1(20);\n    Person p2(p1);\n    cout\u003C\u003C\"P2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003Cendl;\n}\n\u002F\u002F 2.值传递的方式给函数参数传值\n\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\nvoid doWork(Person p)\n{\n    cout \u003C\u003C \"doWork函数调用\" \u003C\u003C endl;\n}\nvoid test02()\n{\n    Person p;\n    doWork(p);\n}\n\u002F\u002F 3.以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout\u003C\u003C(int *)&p1\u003C\u003Cendl;\u002F\u002F打印p1的地址\n    return p1;\u002F\u002F返回局部对象，调用拷贝构造函数\n}\nvoid test03()\n{\n    Person p = doWork2();\n    cout\u003C\u003C(int *)&p\u003C\u003Cendl;\u002F\u002F打印p的地址\n}\n\n\nint main()\n{\n    \u002F\u002F test01();\n    \u002F\u002F test02();\n    test03();\n\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n\u002F\u002F 输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F 0x7fffffffceec\n\u002F\u002F Person的析构函数调用\n\n\u002F\u002F 之前的输出结果如下：\n\u002F\u002F Person的默认构造函数调用\n\u002F\u002F 地址\n\u002F\u002F Person的拷贝构造函数调用\n\u002F\u002F Person的析构函数调用\n\u002F\u002F 地址\n\u002F\u002F (这两次输出的地址也是不同的) \n\u002F\u002F Person的析构函数调用     \n    return 0;\n}\n",[33,20522,20523,20529,20539,20543,20548,20552,20557,20562,20567,20573,20577,20581,20587,20591,20604,20608,20613,20625,20629,20637,20650,20654,20658,20674,20678,20687,20700,20704,20710,20714,20726,20730,20736,20740,20744,20752,20756,20769,20777,20795,20799,20804,20809,20824,20828,20841,20845,20853,20857,20861,20869,20873,20878,20887,20891,20895,20920,20930,20934,20942,20946,20957,20982,20986,20990,20994,21002,21006,21011,21016,21023,21028,21033,21038,21043,21047,21052,21056,21061,21065,21070,21075,21079,21083,21088,21093,21101],{"__ignoreMap":31},[36,20524,20525,20527],{"class":38,"line":39},[36,20526,3459],{"class":42},[36,20528,3462],{"class":110},[36,20530,20531,20533,20535,20537],{"class":38,"line":54},[36,20532,3467],{"class":42},[36,20534,3470],{"class":42},[36,20536,3473],{"class":46},[36,20538,77],{"class":50},[36,20540,20541],{"class":38,"line":61},[36,20542,58],{"emptyLinePlaceholder":57},[36,20544,20545],{"class":38,"line":80},[36,20546,20547],{"class":124},"\u002F\u002F拷贝构造函数调用时机\n",[36,20549,20550],{"class":38,"line":96},[36,20551,58],{"emptyLinePlaceholder":57},[36,20553,20554],{"class":38,"line":101},[36,20555,20556],{"class":124},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[36,20558,20559],{"class":38,"line":128},[36,20560,20561],{"class":124},"\u002F\u002F2.值传递的方式给函数参数传值\n",[36,20563,20564],{"class":38,"line":149},[36,20565,20566],{"class":124},"\u002F\u002F3.以值方式返回局部对象\n",[36,20568,20569,20571],{"class":38,"line":154},[36,20570,16023],{"class":42},[36,20572,16500],{"class":46},[36,20574,20575],{"class":38,"line":167},[36,20576,3076],{"class":50},[36,20578,20579],{"class":38,"line":172},[36,20580,16045],{"class":42},[36,20582,20583,20585],{"class":38,"line":192},[36,20584,19848],{"class":46},[36,20586,3484],{"class":50},[36,20588,20589],{"class":38,"line":211},[36,20590,3537],{"class":50},[36,20592,20593,20595,20597,20600,20602],{"class":38,"line":216},[36,20594,11137],{"class":50},[36,20596,107],{"class":42},[36,20598,20599],{"class":110}," \"Person的默认构造函数调用\"",[36,20601,114],{"class":42},[36,20603,747],{"class":50},[36,20605,20606],{"class":38,"line":231},[36,20607,3693],{"class":50},[36,20609,20610],{"class":38,"line":236},[36,20611,20612],{"class":124},"    \u002F\u002F有参构造\n",[36,20614,20615,20617,20619,20621,20623],{"class":38,"line":247},[36,20616,19848],{"class":46},[36,20618,222],{"class":50},[36,20620,43],{"class":42},[36,20622,17018],{"class":473},[36,20624,1680],{"class":50},[36,20626,20627],{"class":38,"line":637},[36,20628,3537],{"class":50},[36,20630,20631,20633,20635],{"class":38,"line":646},[36,20632,17072],{"class":50},[36,20634,70],{"class":42},[36,20636,9271],{"class":50},[36,20638,20639,20641,20643,20646,20648],{"class":38,"line":655},[36,20640,11137],{"class":50},[36,20642,107],{"class":42},[36,20644,20645],{"class":110}," \"Person的有参构造函数调用\"",[36,20647,114],{"class":42},[36,20649,747],{"class":50},[36,20651,20652],{"class":38,"line":660},[36,20653,3693],{"class":50},[36,20655,20656],{"class":38,"line":665},[36,20657,20203],{"class":124},[36,20659,20660,20662,20664,20666,20668,20670,20672],{"class":38,"line":674},[36,20661,19848],{"class":46},[36,20663,222],{"class":50},[36,20665,1437],{"class":42},[36,20667,16898],{"class":46},[36,20669,85],{"class":42},[36,20671,19],{"class":473},[36,20673,1680],{"class":50},[36,20675,20676],{"class":38,"line":679},[36,20677,3537],{"class":50},[36,20679,20680,20682,20684],{"class":38,"line":692},[36,20681,17072],{"class":50},[36,20683,70],{"class":42},[36,20685,20686],{"class":50}," p.m_Age;\n",[36,20688,20689,20691,20693,20696,20698],{"class":38,"line":705},[36,20690,11137],{"class":50},[36,20692,107],{"class":42},[36,20694,20695],{"class":110}," \"Person的拷贝构造函数调用\"",[36,20697,114],{"class":42},[36,20699,747],{"class":50},[36,20701,20702],{"class":38,"line":710},[36,20703,3693],{"class":50},[36,20705,20706,20708],{"class":38,"line":722},[36,20707,19881],{"class":46},[36,20709,3484],{"class":50},[36,20711,20712],{"class":38,"line":750},[36,20713,3537],{"class":50},[36,20715,20716,20718,20720,20722,20724],{"class":38,"line":755},[36,20717,11137],{"class":50},[36,20719,107],{"class":42},[36,20721,19896],{"class":110},[36,20723,114],{"class":42},[36,20725,747],{"class":50},[36,20727,20728],{"class":38,"line":777},[36,20729,3693],{"class":50},[36,20731,20732,20734],{"class":38,"line":802},[36,20733,64],{"class":42},[36,20735,16995],{"class":50},[36,20737,20738],{"class":38,"line":807},[36,20739,5486],{"class":50},[36,20741,20742],{"class":38,"line":818},[36,20743,20556],{"class":124},[36,20745,20746,20748,20750],{"class":38,"line":843},[36,20747,463],{"class":42},[36,20749,911],{"class":46},[36,20751,3484],{"class":50},[36,20753,20754],{"class":38,"line":848},[36,20755,3076],{"class":50},[36,20757,20758,20761,20763,20765,20767],{"class":38,"line":859},[36,20759,20760],{"class":50},"    Person ",[36,20762,8606],{"class":46},[36,20764,222],{"class":50},[36,20766,2367],{"class":73},[36,20768,228],{"class":50},[36,20770,20771,20773,20775],{"class":38,"line":864},[36,20772,20760],{"class":50},[36,20774,8509],{"class":46},[36,20776,18844],{"class":50},[36,20778,20779,20781,20783,20786,20788,20791,20793],{"class":38,"line":873},[36,20780,3081],{"class":50},[36,20782,107],{"class":42},[36,20784,20785],{"class":110},"\"P2的年龄为：\"",[36,20787,107],{"class":42},[36,20789,20790],{"class":50},"p2.m_Age",[36,20792,107],{"class":42},[36,20794,2732],{"class":50},[36,20796,20797],{"class":38,"line":9454},[36,20798,250],{"class":50},[36,20800,20801],{"class":38,"line":9481},[36,20802,20803],{"class":124},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[36,20805,20806],{"class":38,"line":9486},[36,20807,20808],{"class":124},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[36,20810,20811,20813,20816,20818,20820,20822],{"class":38,"line":9492},[36,20812,463],{"class":42},[36,20814,20815],{"class":46}," doWork",[36,20817,222],{"class":50},[36,20819,20375],{"class":46},[36,20821,8301],{"class":473},[36,20823,1680],{"class":50},[36,20825,20826],{"class":38,"line":9504},[36,20827,3076],{"class":50},[36,20829,20830,20832,20834,20837,20839],{"class":38,"line":9516},[36,20831,104],{"class":50},[36,20833,107],{"class":42},[36,20835,20836],{"class":110}," \"doWork函数调用\"",[36,20838,114],{"class":42},[36,20840,747],{"class":50},[36,20842,20843],{"class":38,"line":9528},[36,20844,250],{"class":50},[36,20846,20847,20849,20851],{"class":38,"line":11184},[36,20848,463],{"class":42},[36,20850,955],{"class":46},[36,20852,3484],{"class":50},[36,20854,20855],{"class":38,"line":11209},[36,20856,3076],{"class":50},[36,20858,20859],{"class":38,"line":11232},[36,20860,16642],{"class":50},[36,20862,20863,20866],{"class":38,"line":11256},[36,20864,20865],{"class":46},"    doWork",[36,20867,20868],{"class":50},"(p);\n",[36,20870,20871],{"class":38,"line":11261},[36,20872,250],{"class":50},[36,20874,20875],{"class":38,"line":11266},[36,20876,20877],{"class":124},"\u002F\u002F 3.以值方式返回局部对象\n",[36,20879,20880,20882,20885],{"class":38,"line":11271},[36,20881,20375],{"class":46},[36,20883,20884],{"class":46}," doWork2",[36,20886,3484],{"class":50},[36,20888,20889],{"class":38,"line":11280},[36,20890,3076],{"class":50},[36,20892,20893],{"class":38,"line":11285},[36,20894,20365],{"class":50},[36,20896,20897,20899,20901,20903,20905,20907,20909,20911,20913,20915,20917],{"class":38,"line":11291},[36,20898,3081],{"class":50},[36,20900,107],{"class":42},[36,20902,222],{"class":50},[36,20904,43],{"class":42},[36,20906,561],{"class":42},[36,20908,2096],{"class":50},[36,20910,763],{"class":42},[36,20912,8606],{"class":50},[36,20914,107],{"class":42},[36,20916,2775],{"class":50},[36,20918,20919],{"class":124},"\u002F\u002F打印p1的地址\n",[36,20921,20922,20924,20927],{"class":38,"line":11312},[36,20923,239],{"class":42},[36,20925,20926],{"class":50}," p1;",[36,20928,20929],{"class":124},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[36,20931,20932],{"class":38,"line":11318},[36,20933,250],{"class":50},[36,20935,20936,20938,20940],{"class":38,"line":11332},[36,20937,463],{"class":42},[36,20939,7212],{"class":46},[36,20941,3484],{"class":50},[36,20943,20944],{"class":38,"line":11338},[36,20945,3076],{"class":50},[36,20947,20948,20951,20953,20955],{"class":38,"line":11365},[36,20949,20950],{"class":50},"    Person p ",[36,20952,70],{"class":42},[36,20954,20884],{"class":46},[36,20956,1022],{"class":50},[36,20958,20959,20961,20963,20965,20967,20969,20971,20973,20975,20977,20979],{"class":38,"line":11374},[36,20960,3081],{"class":50},[36,20962,107],{"class":42},[36,20964,222],{"class":50},[36,20966,43],{"class":42},[36,20968,561],{"class":42},[36,20970,2096],{"class":50},[36,20972,763],{"class":42},[36,20974,19],{"class":50},[36,20976,107],{"class":42},[36,20978,2775],{"class":50},[36,20980,20981],{"class":124},"\u002F\u002F打印p的地址\n",[36,20983,20984],{"class":38,"line":11380},[36,20985,250],{"class":50},[36,20987,20988],{"class":38,"line":11388},[36,20989,58],{"emptyLinePlaceholder":57},[36,20991,20992],{"class":38,"line":11393},[36,20993,58],{"emptyLinePlaceholder":57},[36,20995,20996,20998,21000],{"class":38,"line":17933},[36,20997,43],{"class":42},[36,20999,47],{"class":46},[36,21001,3484],{"class":50},[36,21003,21004],{"class":38,"line":17939},[36,21005,3076],{"class":50},[36,21007,21008],{"class":38,"line":17962},[36,21009,21010],{"class":124},"    \u002F\u002F test01();\n",[36,21012,21013],{"class":38,"line":17968},[36,21014,21015],{"class":124},"    \u002F\u002F test02();\n",[36,21017,21018,21021],{"class":38,"line":17991},[36,21019,21020],{"class":46},"    test03",[36,21022,1022],{"class":50},[36,21024,21025],{"class":38,"line":18005},[36,21026,21027],{"class":124},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[36,21029,21030],{"class":38,"line":18025},[36,21031,21032],{"class":124},"\u002F\u002F 输出结果如下：\n",[36,21034,21035],{"class":38,"line":18031},[36,21036,21037],{"class":124},"\u002F\u002F Person的默认构造函数调用\n",[36,21039,21040],{"class":38,"line":18042},[36,21041,21042],{"class":124},"\u002F\u002F 0x7fffffffceec\n",[36,21044,21045],{"class":38,"line":18065},[36,21046,21042],{"class":124},[36,21048,21049],{"class":38,"line":18087},[36,21050,21051],{"class":124},"\u002F\u002F Person的析构函数调用\n",[36,21053,21054],{"class":38,"line":18092},[36,21055,58],{"emptyLinePlaceholder":57},[36,21057,21058],{"class":38,"line":18098},[36,21059,21060],{"class":124},"\u002F\u002F 之前的输出结果如下：\n",[36,21062,21063],{"class":38,"line":18112},[36,21064,21037],{"class":124},[36,21066,21067],{"class":38,"line":18125},[36,21068,21069],{"class":124},"\u002F\u002F 地址\n",[36,21071,21072],{"class":38,"line":18130},[36,21073,21074],{"class":124},"\u002F\u002F Person的拷贝构造函数调用\n",[36,21076,21077],{"class":38,"line":18144},[36,21078,21051],{"class":124},[36,21080,21081],{"class":38,"line":18149},[36,21082,21069],{"class":124},[36,21084,21085],{"class":38,"line":18155},[36,21086,21087],{"class":124},"\u002F\u002F (这两次输出的地址也是不同的) \n",[36,21089,21090],{"class":38,"line":18160},[36,21091,21092],{"class":124},"\u002F\u002F Person的析构函数调用     \n",[36,21094,21095,21097,21099],{"class":38,"line":18174},[36,21096,239],{"class":42},[36,21098,242],{"class":73},[36,21100,77],{"class":50},[36,21102,21103],{"class":38,"line":18179},[36,21104,250],{"class":50},[19,21106,21107],{},"简化版理解",[26,21109,21111],{"className":28,"code":21110,"language":30,"meta":31,"style":31},"class Person {\npublic:\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n        mAge = 0;\n    }\n    Person(int age) {\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n        mAge = age;\n    }\n    Person(const Person& p) {\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n        mAge = p.mAge;\n    }\n    \u002F\u002F析构函数在释放内存之前调用\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int mAge;\n};\n\n\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\nvoid test01() {\n\n    Person man(100); \u002F\u002Fp对象已经创建完毕\n    Person newman(man); \u002F\u002F调用拷贝构造函数\n    Person newman2 = man; \u002F\u002F拷贝构造\n\n    \u002F\u002FPerson newman3;\n    \u002F\u002Fnewman3 = man; \u002F\u002F不是调用拷贝构造函数，赋值操作\n}\n\n\u002F\u002F2. 值传递的方式给函数参数传值\n\u002F\u002F相当于Person p1 = p;\nvoid doWork(Person p1) {}\nvoid test02() {\n    Person p; \u002F\u002F无参构造函数\n    doWork(p);\n}\n\n\u002F\u002F3. 以值方式返回局部对象\nPerson doWork2()\n{\n    Person p1;\n    cout \u003C\u003C (int *)&p1 \u003C\u003C endl;\n    return p1;\n}\n\nvoid test03()\n{\n    Person p = doWork2();\n    cout \u003C\u003C (int *)&p \u003C\u003C endl;\n}\n\n\nint main() {\n\n    \u002F\u002Ftest01();\n    \u002F\u002Ftest02();\n    test03();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,21112,21113,21121,21125,21131,21144,21155,21159,21171,21184,21192,21196,21212,21225,21234,21238,21243,21249,21262,21266,21270,21277,21281,21285,21290,21298,21302,21318,21331,21344,21348,21353,21361,21365,21369,21374,21379,21395,21403,21410,21416,21420,21424,21429,21437,21441,21445,21468,21475,21479,21483,21491,21495,21505,21527,21531,21535,21539,21547,21551,21556,21561,21567,21571,21581,21585,21593],{"__ignoreMap":31},[36,21114,21115,21117,21119],{"class":38,"line":39},[36,21116,16023],{"class":42},[36,21118,16898],{"class":46},[36,21120,16901],{"class":50},[36,21122,21123],{"class":38,"line":54},[36,21124,16045],{"class":42},[36,21126,21127,21129],{"class":38,"line":61},[36,21128,19848],{"class":46},[36,21130,51],{"class":50},[36,21132,21133,21135,21137,21140,21142],{"class":38,"line":80},[36,21134,11137],{"class":50},[36,21136,107],{"class":42},[36,21138,21139],{"class":110}," \"无参构造函数!\"",[36,21141,114],{"class":42},[36,21143,747],{"class":50},[36,21145,21146,21149,21151,21153],{"class":38,"line":96},[36,21147,21148],{"class":50},"        mAge ",[36,21150,70],{"class":42},[36,21152,242],{"class":73},[36,21154,77],{"class":50},[36,21156,21157],{"class":38,"line":101},[36,21158,3693],{"class":50},[36,21160,21161,21163,21165,21167,21169],{"class":38,"line":128},[36,21162,19848],{"class":46},[36,21164,222],{"class":50},[36,21166,43],{"class":42},[36,21168,17018],{"class":473},[36,21170,485],{"class":50},[36,21172,21173,21175,21177,21180,21182],{"class":38,"line":149},[36,21174,11137],{"class":50},[36,21176,107],{"class":42},[36,21178,21179],{"class":110}," \"有参构造函数!\"",[36,21181,114],{"class":42},[36,21183,747],{"class":50},[36,21185,21186,21188,21190],{"class":38,"line":154},[36,21187,21148],{"class":50},[36,21189,70],{"class":42},[36,21191,9271],{"class":50},[36,21193,21194],{"class":38,"line":167},[36,21195,3693],{"class":50},[36,21197,21198,21200,21202,21204,21206,21208,21210],{"class":38,"line":172},[36,21199,19848],{"class":46},[36,21201,222],{"class":50},[36,21203,1437],{"class":42},[36,21205,16898],{"class":46},[36,21207,763],{"class":42},[36,21209,8301],{"class":473},[36,21211,485],{"class":50},[36,21213,21214,21216,21218,21221,21223],{"class":38,"line":192},[36,21215,11137],{"class":50},[36,21217,107],{"class":42},[36,21219,21220],{"class":110}," \"拷贝构造函数!\"",[36,21222,114],{"class":42},[36,21224,747],{"class":50},[36,21226,21227,21229,21231],{"class":38,"line":211},[36,21228,21148],{"class":50},[36,21230,70],{"class":42},[36,21232,21233],{"class":50}," p.mAge;\n",[36,21235,21236],{"class":38,"line":216},[36,21237,3693],{"class":50},[36,21239,21240],{"class":38,"line":231},[36,21241,21242],{"class":124},"    \u002F\u002F析构函数在释放内存之前调用\n",[36,21244,21245,21247],{"class":38,"line":236},[36,21246,19881],{"class":46},[36,21248,51],{"class":50},[36,21250,21251,21253,21255,21258,21260],{"class":38,"line":247},[36,21252,11137],{"class":50},[36,21254,107],{"class":42},[36,21256,21257],{"class":110}," \"析构函数!\"",[36,21259,114],{"class":42},[36,21261,747],{"class":50},[36,21263,21264],{"class":38,"line":637},[36,21265,3693],{"class":50},[36,21267,21268],{"class":38,"line":646},[36,21269,16045],{"class":42},[36,21271,21272,21274],{"class":38,"line":655},[36,21273,64],{"class":42},[36,21275,21276],{"class":50}," mAge;\n",[36,21278,21279],{"class":38,"line":660},[36,21280,5486],{"class":50},[36,21282,21283],{"class":38,"line":665},[36,21284,58],{"emptyLinePlaceholder":57},[36,21286,21287],{"class":38,"line":674},[36,21288,21289],{"class":124},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[36,21291,21292,21294,21296],{"class":38,"line":679},[36,21293,463],{"class":42},[36,21295,911],{"class":46},[36,21297,51],{"class":50},[36,21299,21300],{"class":38,"line":692},[36,21301,58],{"emptyLinePlaceholder":57},[36,21303,21304,21306,21309,21311,21313,21315],{"class":38,"line":705},[36,21305,20760],{"class":50},[36,21307,21308],{"class":46},"man",[36,21310,222],{"class":50},[36,21312,1979],{"class":73},[36,21314,7448],{"class":50},[36,21316,21317],{"class":124}," \u002F\u002Fp对象已经创建完毕\n",[36,21319,21320,21322,21325,21328],{"class":38,"line":710},[36,21321,20760],{"class":50},[36,21323,21324],{"class":46},"newman",[36,21326,21327],{"class":50},"(man);",[36,21329,21330],{"class":124}," \u002F\u002F调用拷贝构造函数\n",[36,21332,21333,21336,21338,21341],{"class":38,"line":722},[36,21334,21335],{"class":50},"    Person newman2 ",[36,21337,70],{"class":42},[36,21339,21340],{"class":50}," man;",[36,21342,21343],{"class":124}," \u002F\u002F拷贝构造\n",[36,21345,21346],{"class":38,"line":750},[36,21347,58],{"emptyLinePlaceholder":57},[36,21349,21350],{"class":38,"line":755},[36,21351,21352],{"class":124},"    \u002F\u002FPerson newman3;\n",[36,21354,21355,21358],{"class":38,"line":777},[36,21356,21357],{"class":124},"    \u002F\u002Fnewman3 = man;",[36,21359,21360],{"class":124}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[36,21362,21363],{"class":38,"line":802},[36,21364,250],{"class":50},[36,21366,21367],{"class":38,"line":807},[36,21368,58],{"emptyLinePlaceholder":57},[36,21370,21371],{"class":38,"line":818},[36,21372,21373],{"class":124},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[36,21375,21376],{"class":38,"line":843},[36,21377,21378],{"class":124},"\u002F\u002F相当于Person p1 = p;\n",[36,21380,21381,21383,21385,21387,21389,21392],{"class":38,"line":848},[36,21382,463],{"class":42},[36,21384,20815],{"class":46},[36,21386,222],{"class":50},[36,21388,20375],{"class":46},[36,21390,21391],{"class":473}," p1",[36,21393,21394],{"class":50},") {}\n",[36,21396,21397,21399,21401],{"class":38,"line":859},[36,21398,463],{"class":42},[36,21400,955],{"class":46},[36,21402,51],{"class":50},[36,21404,21405,21407],{"class":38,"line":864},[36,21406,19933],{"class":50},[36,21408,21409],{"class":124}," \u002F\u002F无参构造函数\n",[36,21411,21412,21414],{"class":38,"line":873},[36,21413,20865],{"class":46},[36,21415,20868],{"class":50},[36,21417,21418],{"class":38,"line":9454},[36,21419,250],{"class":50},[36,21421,21422],{"class":38,"line":9481},[36,21423,58],{"emptyLinePlaceholder":57},[36,21425,21426],{"class":38,"line":9486},[36,21427,21428],{"class":124},"\u002F\u002F3. 以值方式返回局部对象\n",[36,21430,21431,21433,21435],{"class":38,"line":9492},[36,21432,20375],{"class":46},[36,21434,20884],{"class":46},[36,21436,3484],{"class":50},[36,21438,21439],{"class":38,"line":9504},[36,21440,3076],{"class":50},[36,21442,21443],{"class":38,"line":9516},[36,21444,20365],{"class":50},[36,21446,21447,21449,21451,21453,21455,21457,21459,21461,21464,21466],{"class":38,"line":9528},[36,21448,104],{"class":50},[36,21450,107],{"class":42},[36,21452,3180],{"class":50},[36,21454,43],{"class":42},[36,21456,561],{"class":42},[36,21458,2096],{"class":50},[36,21460,763],{"class":42},[36,21462,21463],{"class":50},"p1 ",[36,21465,107],{"class":42},[36,21467,747],{"class":50},[36,21469,21470,21472],{"class":38,"line":11184},[36,21471,239],{"class":42},[36,21473,21474],{"class":50}," p1;\n",[36,21476,21477],{"class":38,"line":11209},[36,21478,250],{"class":50},[36,21480,21481],{"class":38,"line":11232},[36,21482,58],{"emptyLinePlaceholder":57},[36,21484,21485,21487,21489],{"class":38,"line":11256},[36,21486,463],{"class":42},[36,21488,7212],{"class":46},[36,21490,3484],{"class":50},[36,21492,21493],{"class":38,"line":11261},[36,21494,3076],{"class":50},[36,21496,21497,21499,21501,21503],{"class":38,"line":11266},[36,21498,20950],{"class":50},[36,21500,70],{"class":42},[36,21502,20884],{"class":46},[36,21504,1022],{"class":50},[36,21506,21507,21509,21511,21513,21515,21517,21519,21521,21523,21525],{"class":38,"line":11271},[36,21508,104],{"class":50},[36,21510,107],{"class":42},[36,21512,3180],{"class":50},[36,21514,43],{"class":42},[36,21516,561],{"class":42},[36,21518,2096],{"class":50},[36,21520,763],{"class":42},[36,21522,12904],{"class":50},[36,21524,107],{"class":42},[36,21526,747],{"class":50},[36,21528,21529],{"class":38,"line":11280},[36,21530,250],{"class":50},[36,21532,21533],{"class":38,"line":11285},[36,21534,58],{"emptyLinePlaceholder":57},[36,21536,21537],{"class":38,"line":11291},[36,21538,58],{"emptyLinePlaceholder":57},[36,21540,21541,21543,21545],{"class":38,"line":11312},[36,21542,43],{"class":42},[36,21544,47],{"class":46},[36,21546,51],{"class":50},[36,21548,21549],{"class":38,"line":11318},[36,21550,58],{"emptyLinePlaceholder":57},[36,21552,21553],{"class":38,"line":11332},[36,21554,21555],{"class":124},"    \u002F\u002Ftest01();\n",[36,21557,21558],{"class":38,"line":11338},[36,21559,21560],{"class":124},"    \u002F\u002Ftest02();\n",[36,21562,21563,21565],{"class":38,"line":11365},[36,21564,21020],{"class":46},[36,21566,1022],{"class":50},[36,21568,21569],{"class":38,"line":11374},[36,21570,58],{"emptyLinePlaceholder":57},[36,21572,21573,21575,21577,21579],{"class":38,"line":11380},[36,21574,219],{"class":46},[36,21576,222],{"class":50},[36,21578,225],{"class":110},[36,21580,228],{"class":50},[36,21582,21583],{"class":38,"line":11388},[36,21584,58],{"emptyLinePlaceholder":57},[36,21586,21587,21589,21591],{"class":38,"line":11393},[36,21588,239],{"class":42},[36,21590,242],{"class":73},[36,21592,77],{"class":50},[36,21594,21595],{"class":38,"line":17933},[36,21596,250],{"class":50},[1645,21598,21600],{"id":21599},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21602,21603],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21605,21606],{},"1．默认构造函数(无参，函数体为空)",[19,21608,21609],{},"2．默认析构函数(无参，函数体为空)",[19,21611,21612],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21614,21615],{},"构造函数调用规则如下：",[2674,21617,21618,21621],{},[259,21619,21620],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[259,21622,21623],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,21625,21627],{"className":28,"code":21626,"language":30,"meta":31,"style":31},"class Person {\npublic:\n    \u002F\u002F无参（默认）构造函数\n    Person() {\n        cout \u003C\u003C \"无参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F有参构造函数\n    Person(int a) {\n        age = a;\n        cout \u003C\u003C \"有参构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F拷贝构造函数\n    Person(const Person& p) {\n        age = p.age;\n        cout \u003C\u003C \"拷贝构造函数!\" \u003C\u003C endl;\n    }\n    \u002F\u002F析构函数\n    ~Person() {\n        cout \u003C\u003C \"析构函数!\" \u003C\u003C endl;\n    }\npublic:\n    int age;\n};\n\nvoid test01()\n{\n    Person p1(18);\n    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n    Person p2(p1);\n\n    cout \u003C\u003C \"p2的年龄为： \" \u003C\u003C p2.age \u003C\u003C endl;\n}\n\nvoid test02()\n{\n    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n    Person p1; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p2(10); \u002F\u002F用户提供的有参\n    Person p3(p2); \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n\n    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n    Person p4; \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n    Person p5(10); \u002F\u002F此时如果用户自己没有提供有参，会出错\n    Person p6(p5); \u002F\u002F用户自己提供拷贝构造\n}\n\nint main() {\n\n    test01();\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,21628,21629,21637,21641,21646,21652,21664,21668,21673,21685,21694,21706,21710,21714,21730,21739,21751,21755,21759,21765,21777,21781,21785,21791,21795,21799,21807,21811,21823,21828,21836,21840,21858,21862,21866,21874,21878,21883,21891,21906,21919,21923,21928,21935,21951,21964,21968,21972,21980,21984,21990,21994,22004,22008,22016],{"__ignoreMap":31},[36,21630,21631,21633,21635],{"class":38,"line":39},[36,21632,16023],{"class":42},[36,21634,16898],{"class":46},[36,21636,16901],{"class":50},[36,21638,21639],{"class":38,"line":54},[36,21640,16045],{"class":42},[36,21642,21643],{"class":38,"line":61},[36,21644,21645],{"class":124},"    \u002F\u002F无参（默认）构造函数\n",[36,21647,21648,21650],{"class":38,"line":80},[36,21649,19848],{"class":46},[36,21651,51],{"class":50},[36,21653,21654,21656,21658,21660,21662],{"class":38,"line":96},[36,21655,11137],{"class":50},[36,21657,107],{"class":42},[36,21659,21139],{"class":110},[36,21661,114],{"class":42},[36,21663,747],{"class":50},[36,21665,21666],{"class":38,"line":101},[36,21667,3693],{"class":50},[36,21669,21670],{"class":38,"line":128},[36,21671,21672],{"class":124},"    \u002F\u002F有参构造函数\n",[36,21674,21675,21677,21679,21681,21683],{"class":38,"line":149},[36,21676,19848],{"class":46},[36,21678,222],{"class":50},[36,21680,43],{"class":42},[36,21682,474],{"class":473},[36,21684,485],{"class":50},[36,21686,21687,21690,21692],{"class":38,"line":154},[36,21688,21689],{"class":50},"        age ",[36,21691,70],{"class":42},[36,21693,93],{"class":50},[36,21695,21696,21698,21700,21702,21704],{"class":38,"line":167},[36,21697,11137],{"class":50},[36,21699,107],{"class":42},[36,21701,21179],{"class":110},[36,21703,114],{"class":42},[36,21705,747],{"class":50},[36,21707,21708],{"class":38,"line":172},[36,21709,3693],{"class":50},[36,21711,21712],{"class":38,"line":192},[36,21713,20203],{"class":124},[36,21715,21716,21718,21720,21722,21724,21726,21728],{"class":38,"line":211},[36,21717,19848],{"class":46},[36,21719,222],{"class":50},[36,21721,1437],{"class":42},[36,21723,16898],{"class":46},[36,21725,763],{"class":42},[36,21727,8301],{"class":473},[36,21729,485],{"class":50},[36,21731,21732,21734,21736],{"class":38,"line":216},[36,21733,21689],{"class":50},[36,21735,70],{"class":42},[36,21737,21738],{"class":50}," p.age;\n",[36,21740,21741,21743,21745,21747,21749],{"class":38,"line":231},[36,21742,11137],{"class":50},[36,21744,107],{"class":42},[36,21746,21220],{"class":110},[36,21748,114],{"class":42},[36,21750,747],{"class":50},[36,21752,21753],{"class":38,"line":236},[36,21754,3693],{"class":50},[36,21756,21757],{"class":38,"line":247},[36,21758,19876],{"class":124},[36,21760,21761,21763],{"class":38,"line":637},[36,21762,19881],{"class":46},[36,21764,51],{"class":50},[36,21766,21767,21769,21771,21773,21775],{"class":38,"line":646},[36,21768,11137],{"class":50},[36,21770,107],{"class":42},[36,21772,21257],{"class":110},[36,21774,114],{"class":42},[36,21776,747],{"class":50},[36,21778,21779],{"class":38,"line":655},[36,21780,3693],{"class":50},[36,21782,21783],{"class":38,"line":660},[36,21784,16045],{"class":42},[36,21786,21787,21789],{"class":38,"line":665},[36,21788,64],{"class":42},[36,21790,9271],{"class":50},[36,21792,21793],{"class":38,"line":674},[36,21794,5486],{"class":50},[36,21796,21797],{"class":38,"line":679},[36,21798,58],{"emptyLinePlaceholder":57},[36,21800,21801,21803,21805],{"class":38,"line":692},[36,21802,463],{"class":42},[36,21804,911],{"class":46},[36,21806,3484],{"class":50},[36,21808,21809],{"class":38,"line":705},[36,21810,3076],{"class":50},[36,21812,21813,21815,21817,21819,21821],{"class":38,"line":710},[36,21814,20760],{"class":50},[36,21816,8606],{"class":46},[36,21818,222],{"class":50},[36,21820,2317],{"class":73},[36,21822,228],{"class":50},[36,21824,21825],{"class":38,"line":722},[36,21826,21827],{"class":124},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[36,21829,21830,21832,21834],{"class":38,"line":750},[36,21831,20760],{"class":50},[36,21833,8509],{"class":46},[36,21835,18844],{"class":50},[36,21837,21838],{"class":38,"line":755},[36,21839,58],{"emptyLinePlaceholder":57},[36,21841,21842,21844,21846,21849,21851,21854,21856],{"class":38,"line":777},[36,21843,104],{"class":50},[36,21845,107],{"class":42},[36,21847,21848],{"class":110}," \"p2的年龄为： \"",[36,21850,114],{"class":42},[36,21852,21853],{"class":50}," p2.age ",[36,21855,107],{"class":42},[36,21857,747],{"class":50},[36,21859,21860],{"class":38,"line":802},[36,21861,250],{"class":50},[36,21863,21864],{"class":38,"line":807},[36,21865,58],{"emptyLinePlaceholder":57},[36,21867,21868,21870,21872],{"class":38,"line":818},[36,21869,463],{"class":42},[36,21871,955],{"class":46},[36,21873,3484],{"class":50},[36,21875,21876],{"class":38,"line":843},[36,21877,3076],{"class":50},[36,21879,21880],{"class":38,"line":848},[36,21881,21882],{"class":124},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[36,21884,21885,21888],{"class":38,"line":859},[36,21886,21887],{"class":50},"    Person p1;",[36,21889,21890],{"class":124}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[36,21892,21893,21895,21897,21899,21901,21903],{"class":38,"line":864},[36,21894,20760],{"class":50},[36,21896,8509],{"class":46},[36,21898,222],{"class":50},[36,21900,2113],{"class":73},[36,21902,7448],{"class":50},[36,21904,21905],{"class":124}," \u002F\u002F用户提供的有参\n",[36,21907,21908,21910,21913,21916],{"class":38,"line":873},[36,21909,20760],{"class":50},[36,21911,21912],{"class":46},"p3",[36,21914,21915],{"class":50},"(p2);",[36,21917,21918],{"class":124}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[36,21920,21921],{"class":38,"line":9454},[36,21922,58],{"emptyLinePlaceholder":57},[36,21924,21925],{"class":38,"line":9481},[36,21926,21927],{"class":124},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[36,21929,21930,21933],{"class":38,"line":9486},[36,21931,21932],{"class":50},"    Person p4;",[36,21934,21890],{"class":124},[36,21936,21937,21939,21942,21944,21946,21948],{"class":38,"line":9492},[36,21938,20760],{"class":50},[36,21940,21941],{"class":46},"p5",[36,21943,222],{"class":50},[36,21945,2113],{"class":73},[36,21947,7448],{"class":50},[36,21949,21950],{"class":124}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[36,21952,21953,21955,21958,21961],{"class":38,"line":9504},[36,21954,20760],{"class":50},[36,21956,21957],{"class":46},"p6",[36,21959,21960],{"class":50},"(p5);",[36,21962,21963],{"class":124}," \u002F\u002F用户自己提供拷贝构造\n",[36,21965,21966],{"class":38,"line":9516},[36,21967,250],{"class":50},[36,21969,21970],{"class":38,"line":9528},[36,21971,58],{"emptyLinePlaceholder":57},[36,21973,21974,21976,21978],{"class":38,"line":11184},[36,21975,43],{"class":42},[36,21977,47],{"class":46},[36,21979,51],{"class":50},[36,21981,21982],{"class":38,"line":11209},[36,21983,58],{"emptyLinePlaceholder":57},[36,21985,21986,21988],{"class":38,"line":11232},[36,21987,7119],{"class":46},[36,21989,1022],{"class":50},[36,21991,21992],{"class":38,"line":11256},[36,21993,58],{"emptyLinePlaceholder":57},[36,21995,21996,21998,22000,22002],{"class":38,"line":11261},[36,21997,219],{"class":46},[36,21999,222],{"class":50},[36,22001,225],{"class":110},[36,22003,228],{"class":50},[36,22005,22006],{"class":38,"line":11266},[36,22007,58],{"emptyLinePlaceholder":57},[36,22009,22010,22012,22014],{"class":38,"line":11271},[36,22011,239],{"class":42},[36,22013,242],{"class":73},[36,22015,77],{"class":50},[36,22017,22018],{"class":38,"line":11280},[36,22019,250],{"class":50},[1645,22021,22023],{"id":22022},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22025,22026],{},"浅拷贝：简单的赋值拷贝操作",[19,22028,22029],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,22031,22033],{"className":28,"code":22032,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F默认构造函数\n    Person()\n    {\n        cout\u003C\u003C\"默认构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F有参构造函数\n    ~Person(int age,int height)\n    {\n        m_Age=age;\n        m_Height=new int(height);\u002F\u002F放到堆区\n        cout\u003C\u003C\"有参构造函数\"\u003C\u003Cendl;\n    }\n    \u002F\u002F深拷贝解决上述问题\n    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n    Person(const Person &p)\n    {\n        cout\u003C\u003C\"拷贝构造函数\"\u003C\u003Cendl;\n        \u002F\u002F编译器默认的写如下注释部分\n        \u002F\u002Fm_Age=p.m_Age;\n        \u002F\u002Fm_Height=p.m_Height;\n        m_Age=p.m_Age;\n        \u002F\u002F深拷贝操作\n        m_Height=new int(*p.m_Height);\n    }\n\n    \u002F\u002F析构函数\n    ~Person()\n    {\n        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n        if(m_Height != NULL)\n        {\n            delete m_Height; \u002F\u002F释放堆区内存\n            m_Height=NULL; \u002F\u002F防止野指针\n        }\n        cout\u003C\u003C\"Person的析构函数调用\"\n    }\n    int m_Age;\n    int *m_Height; \u002F\u002F定义一个指针，指向身高\n};\nvoid test01()\n{\n    Person p1(18,160);\n    cout\u003C\u003C\"p1的年龄为:\"\u003C\u003Cp1.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p1.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    Person p2(p1);\n    cout\u003C\u003C\"p2的年龄为：\"\u003C\u003Cp2.m_Age\u003C\u003C\"身高为：\"\u003C\u003C*p2.m_Height\u003C\u003Cendl;  \u002F\u002F18\n    \n}\nint main()\n{\n    test01();\n}\n",[33,22034,22035,22041,22051,22057,22061,22065,22070,22076,22080,22093,22097,22101,22108,22112,22122,22137,22150,22154,22159,22164,22180,22184,22197,22202,22207,22212,22221,22226,22241,22245,22249,22253,22259,22263,22268,22283,22287,22298,22312,22316,22325,22329,22335,22347,22351,22359,22363,22380,22411,22419,22447,22451,22455,22463,22467,22473],{"__ignoreMap":31},[36,22036,22037,22039],{"class":38,"line":39},[36,22038,3459],{"class":42},[36,22040,3462],{"class":110},[36,22042,22043,22045,22047,22049],{"class":38,"line":54},[36,22044,3467],{"class":42},[36,22046,3470],{"class":42},[36,22048,3473],{"class":46},[36,22050,77],{"class":50},[36,22052,22053,22055],{"class":38,"line":61},[36,22054,16023],{"class":42},[36,22056,16500],{"class":46},[36,22058,22059],{"class":38,"line":80},[36,22060,3076],{"class":50},[36,22062,22063],{"class":38,"line":96},[36,22064,16045],{"class":42},[36,22066,22067],{"class":38,"line":101},[36,22068,22069],{"class":124},"    \u002F\u002F默认构造函数\n",[36,22071,22072,22074],{"class":38,"line":128},[36,22073,19848],{"class":46},[36,22075,3484],{"class":50},[36,22077,22078],{"class":38,"line":149},[36,22079,3537],{"class":50},[36,22081,22082,22084,22086,22089,22091],{"class":38,"line":154},[36,22083,4942],{"class":50},[36,22085,107],{"class":42},[36,22087,22088],{"class":110},"\"默认构造函数\"",[36,22090,107],{"class":42},[36,22092,2732],{"class":50},[36,22094,22095],{"class":38,"line":167},[36,22096,3693],{"class":50},[36,22098,22099],{"class":38,"line":172},[36,22100,21672],{"class":124},[36,22102,22103,22105],{"class":38,"line":192},[36,22104,19881],{"class":46},[36,22106,22107],{"class":50},"(int age,int height)\n",[36,22109,22110],{"class":38,"line":211},[36,22111,3537],{"class":50},[36,22113,22114,22117,22119],{"class":38,"line":216},[36,22115,22116],{"class":50},"        m_Age",[36,22118,70],{"class":42},[36,22120,22121],{"class":50},"age;\n",[36,22123,22124,22127,22129,22131,22134],{"class":38,"line":231},[36,22125,22126],{"class":50},"        m_Height",[36,22128,13172],{"class":42},[36,22130,965],{"class":42},[36,22132,22133],{"class":50},"(height);",[36,22135,22136],{"class":124},"\u002F\u002F放到堆区\n",[36,22138,22139,22141,22143,22146,22148],{"class":38,"line":236},[36,22140,4942],{"class":50},[36,22142,107],{"class":42},[36,22144,22145],{"class":110},"\"有参构造函数\"",[36,22147,107],{"class":42},[36,22149,2732],{"class":50},[36,22151,22152],{"class":38,"line":247},[36,22153,3693],{"class":50},[36,22155,22156],{"class":38,"line":637},[36,22157,22158],{"class":124},"    \u002F\u002F深拷贝解决上述问题\n",[36,22160,22161],{"class":38,"line":646},[36,22162,22163],{"class":124},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[36,22165,22166,22168,22170,22172,22174,22176,22178],{"class":38,"line":655},[36,22167,19848],{"class":46},[36,22169,222],{"class":50},[36,22171,1437],{"class":42},[36,22173,16898],{"class":46},[36,22175,85],{"class":42},[36,22177,19],{"class":473},[36,22179,1680],{"class":50},[36,22181,22182],{"class":38,"line":660},[36,22183,3537],{"class":50},[36,22185,22186,22188,22190,22193,22195],{"class":38,"line":665},[36,22187,4942],{"class":50},[36,22189,107],{"class":42},[36,22191,22192],{"class":110},"\"拷贝构造函数\"",[36,22194,107],{"class":42},[36,22196,2732],{"class":50},[36,22198,22199],{"class":38,"line":674},[36,22200,22201],{"class":124},"        \u002F\u002F编译器默认的写如下注释部分\n",[36,22203,22204],{"class":38,"line":679},[36,22205,22206],{"class":124},"        \u002F\u002Fm_Age=p.m_Age;\n",[36,22208,22209],{"class":38,"line":692},[36,22210,22211],{"class":124},"        \u002F\u002Fm_Height=p.m_Height;\n",[36,22213,22214,22216,22218],{"class":38,"line":705},[36,22215,22116],{"class":50},[36,22217,70],{"class":42},[36,22219,22220],{"class":50},"p.m_Age;\n",[36,22222,22223],{"class":38,"line":710},[36,22224,22225],{"class":124},"        \u002F\u002F深拷贝操作\n",[36,22227,22228,22230,22232,22234,22236,22238],{"class":38,"line":722},[36,22229,22126],{"class":50},[36,22231,13172],{"class":42},[36,22233,965],{"class":42},[36,22235,222],{"class":50},[36,22237,2122],{"class":42},[36,22239,22240],{"class":50},"p.m_Height);\n",[36,22242,22243],{"class":38,"line":750},[36,22244,3693],{"class":50},[36,22246,22247],{"class":38,"line":755},[36,22248,58],{"emptyLinePlaceholder":57},[36,22250,22251],{"class":38,"line":777},[36,22252,19876],{"class":124},[36,22254,22255,22257],{"class":38,"line":802},[36,22256,19881],{"class":46},[36,22258,3484],{"class":50},[36,22260,22261],{"class":38,"line":807},[36,22262,3537],{"class":50},[36,22264,22265],{"class":38,"line":818},[36,22266,22267],{"class":124},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[36,22269,22270,22272,22275,22278,22281],{"class":38,"line":843},[36,22271,3999],{"class":42},[36,22273,22274],{"class":50},"(m_Height ",[36,22276,22277],{"class":42},"!=",[36,22279,22280],{"class":73}," NULL",[36,22282,1680],{"class":50},[36,22284,22285],{"class":38,"line":848},[36,22286,4012],{"class":50},[36,22288,22289,22292,22295],{"class":38,"line":859},[36,22290,22291],{"class":42},"            delete",[36,22293,22294],{"class":50}," m_Height;",[36,22296,22297],{"class":124}," \u002F\u002F释放堆区内存\n",[36,22299,22300,22303,22305,22307,22309],{"class":38,"line":864},[36,22301,22302],{"class":50},"            m_Height",[36,22304,70],{"class":42},[36,22306,3895],{"class":73},[36,22308,926],{"class":50},[36,22310,22311],{"class":124}," \u002F\u002F防止野指针\n",[36,22313,22314],{"class":38,"line":873},[36,22315,4031],{"class":50},[36,22317,22318,22320,22322],{"class":38,"line":9454},[36,22319,4942],{"class":50},[36,22321,107],{"class":42},[36,22323,22324],{"class":110},"\"Person的析构函数调用\"\n",[36,22326,22327],{"class":38,"line":9481},[36,22328,3693],{"class":50},[36,22330,22331,22333],{"class":38,"line":9486},[36,22332,64],{"class":42},[36,22334,16995],{"class":50},[36,22336,22337,22339,22341,22344],{"class":38,"line":9492},[36,22338,64],{"class":42},[36,22340,561],{"class":42},[36,22342,22343],{"class":50},"m_Height;",[36,22345,22346],{"class":124}," \u002F\u002F定义一个指针，指向身高\n",[36,22348,22349],{"class":38,"line":9504},[36,22350,5486],{"class":50},[36,22352,22353,22355,22357],{"class":38,"line":9516},[36,22354,463],{"class":42},[36,22356,911],{"class":46},[36,22358,3484],{"class":50},[36,22360,22361],{"class":38,"line":9528},[36,22362,3076],{"class":50},[36,22364,22365,22367,22369,22371,22373,22375,22378],{"class":38,"line":11184},[36,22366,20760],{"class":50},[36,22368,8606],{"class":46},[36,22370,222],{"class":50},[36,22372,2317],{"class":73},[36,22374,2045],{"class":50},[36,22376,22377],{"class":73},"160",[36,22379,228],{"class":50},[36,22381,22382,22384,22386,22389,22391,22394,22396,22399,22401,22404,22406,22408],{"class":38,"line":11209},[36,22383,3081],{"class":50},[36,22385,107],{"class":42},[36,22387,22388],{"class":110},"\"p1的年龄为:\"",[36,22390,107],{"class":42},[36,22392,22393],{"class":50},"p1.m_Age",[36,22395,107],{"class":42},[36,22397,22398],{"class":110},"\"身高为：\"",[36,22400,7898],{"class":42},[36,22402,22403],{"class":50},"p1.m_Height",[36,22405,107],{"class":42},[36,22407,2775],{"class":50},[36,22409,22410],{"class":124},"  \u002F\u002F18\n",[36,22412,22413,22415,22417],{"class":38,"line":11232},[36,22414,20760],{"class":50},[36,22416,8509],{"class":46},[36,22418,18844],{"class":50},[36,22420,22421,22423,22425,22428,22430,22432,22434,22436,22438,22441,22443,22445],{"class":38,"line":11256},[36,22422,3081],{"class":50},[36,22424,107],{"class":42},[36,22426,22427],{"class":110},"\"p2的年龄为：\"",[36,22429,107],{"class":42},[36,22431,20790],{"class":50},[36,22433,107],{"class":42},[36,22435,22398],{"class":110},[36,22437,7898],{"class":42},[36,22439,22440],{"class":50},"p2.m_Height",[36,22442,107],{"class":42},[36,22444,2775],{"class":50},[36,22446,22410],{"class":124},[36,22448,22449],{"class":38,"line":11261},[36,22450,1295],{"class":50},[36,22452,22453],{"class":38,"line":11266},[36,22454,250],{"class":50},[36,22456,22457,22459,22461],{"class":38,"line":11271},[36,22458,43],{"class":42},[36,22460,47],{"class":46},[36,22462,3484],{"class":50},[36,22464,22465],{"class":38,"line":11280},[36,22466,3076],{"class":50},[36,22468,22469,22471],{"class":38,"line":11285},[36,22470,7119],{"class":46},[36,22472,1022],{"class":50},[36,22474,22475],{"class":38,"line":11291},[36,22476,250],{"class":50},[19,22478,22479],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22481,22482],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22484,22485],{},[2992,22486],{"alt":31,"src":22487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22489,22490],{},"浅拷贝问题要使用深拷贝来解决",[19,22492,22493],{},[2992,22494],{"alt":31,"src":22495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22497,22498],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[1645,22500,22502],{"id":22501},"_826初始化列表","8.2.6初始化列表",[19,22504,22505],{},"作用：初始化属性",[19,22507,6670],{},[26,22509,22512],{"className":22510,"code":22511,"language":6676},[6674],"构造函数():属性1(值1),属性2(值2).....{}\n",[33,22513,22511],{"__ignoreMap":31},[19,22515,22516],{},"例子",[26,22518,22520],{"className":28,"code":22519,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\n    public:\n\n    \u002F\u002F\u002F\u002F传统方式初始化\n    \u002F\u002FPerson(int a, int b, int c) {\n    \u002F\u002F  m_A = a;\n    \u002F\u002F  m_B = b;\n    \u002F\u002F  m_C = c;\n    \u002F\u002F}\n\n    \u002F\u002F初始化列表方式初始化\n    \u002F\u002F使用有参构造函数\n    Person(int a, int b, int c) :m_A(a), m_B(b), m_C(c) {}\n    void PrintPerson() {\n        cout \u003C\u003C \"mA:\" \u003C\u003C m_A \u003C\u003C endl;\n        cout \u003C\u003C \"mB:\" \u003C\u003C m_B \u003C\u003C endl;\n        cout \u003C\u003C \"mC:\" \u003C\u003C m_C \u003C\u003C endl;\n    }\nprivate:\n    int m_A;\n    int m_B;\n    int m_C;\n};\n\nint main() \n{\n\n    Person p(1, 2, 3);\n    p.PrintPerson();\n\n\n    system(\"pause\");\n\n    return 0;\n}\n",[33,22521,22522,22528,22538,22544,22548,22553,22557,22562,22567,22572,22577,22582,22587,22591,22596,22601,22644,22653,22671,22689,22707,22711,22715,22722,22729,22736,22740,22744,22752,22756,22760,22780,22789,22793,22797,22807,22811,22819],{"__ignoreMap":31},[36,22523,22524,22526],{"class":38,"line":39},[36,22525,3459],{"class":42},[36,22527,3462],{"class":110},[36,22529,22530,22532,22534,22536],{"class":38,"line":54},[36,22531,3467],{"class":42},[36,22533,3470],{"class":42},[36,22535,3473],{"class":46},[36,22537,77],{"class":50},[36,22539,22540,22542],{"class":38,"line":61},[36,22541,16023],{"class":42},[36,22543,16500],{"class":46},[36,22545,22546],{"class":38,"line":80},[36,22547,3076],{"class":50},[36,22549,22550],{"class":38,"line":96},[36,22551,22552],{"class":42},"    public:\n",[36,22554,22555],{"class":38,"line":101},[36,22556,58],{"emptyLinePlaceholder":57},[36,22558,22559],{"class":38,"line":128},[36,22560,22561],{"class":124},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[36,22563,22564],{"class":38,"line":149},[36,22565,22566],{"class":124},"    \u002F\u002FPerson(int a, int b, int c) {\n",[36,22568,22569],{"class":38,"line":154},[36,22570,22571],{"class":124},"    \u002F\u002F  m_A = a;\n",[36,22573,22574],{"class":38,"line":167},[36,22575,22576],{"class":124},"    \u002F\u002F  m_B = b;\n",[36,22578,22579],{"class":38,"line":172},[36,22580,22581],{"class":124},"    \u002F\u002F  m_C = c;\n",[36,22583,22584],{"class":38,"line":192},[36,22585,22586],{"class":124},"    \u002F\u002F}\n",[36,22588,22589],{"class":38,"line":211},[36,22590,58],{"emptyLinePlaceholder":57},[36,22592,22593],{"class":38,"line":216},[36,22594,22595],{"class":124},"    \u002F\u002F初始化列表方式初始化\n",[36,22597,22598],{"class":38,"line":231},[36,22599,22600],{"class":124},"    \u002F\u002F使用有参构造函数\n",[36,22602,22603,22605,22607,22609,22611,22613,22615,22617,22619,22621,22623,22626,22629,22632,22635,22638,22641],{"class":38,"line":236},[36,22604,19848],{"class":46},[36,22606,222],{"class":50},[36,22608,43],{"class":42},[36,22610,474],{"class":473},[36,22612,477],{"class":50},[36,22614,43],{"class":42},[36,22616,482],{"class":473},[36,22618,477],{"class":50},[36,22620,43],{"class":42},[36,22622,4342],{"class":473},[36,22624,22625],{"class":50},") :",[36,22627,22628],{"class":46},"m_A",[36,22630,22631],{"class":50},"(a), ",[36,22633,22634],{"class":46},"m_B",[36,22636,22637],{"class":50},"(b), ",[36,22639,22640],{"class":46},"m_C",[36,22642,22643],{"class":50},"(c) {}\n",[36,22645,22646,22648,22651],{"class":38,"line":247},[36,22647,16238],{"class":42},[36,22649,22650],{"class":46}," PrintPerson",[36,22652,51],{"class":50},[36,22654,22655,22657,22659,22662,22664,22667,22669],{"class":38,"line":637},[36,22656,11137],{"class":50},[36,22658,107],{"class":42},[36,22660,22661],{"class":110}," \"mA:\"",[36,22663,114],{"class":42},[36,22665,22666],{"class":50}," m_A ",[36,22668,107],{"class":42},[36,22670,747],{"class":50},[36,22672,22673,22675,22677,22680,22682,22685,22687],{"class":38,"line":646},[36,22674,11137],{"class":50},[36,22676,107],{"class":42},[36,22678,22679],{"class":110}," \"mB:\"",[36,22681,114],{"class":42},[36,22683,22684],{"class":50}," m_B ",[36,22686,107],{"class":42},[36,22688,747],{"class":50},[36,22690,22691,22693,22695,22698,22700,22703,22705],{"class":38,"line":655},[36,22692,11137],{"class":50},[36,22694,107],{"class":42},[36,22696,22697],{"class":110}," \"mC:\"",[36,22699,114],{"class":42},[36,22701,22702],{"class":50}," m_C ",[36,22704,107],{"class":42},[36,22706,747],{"class":50},[36,22708,22709],{"class":38,"line":660},[36,22710,3693],{"class":50},[36,22712,22713],{"class":38,"line":665},[36,22714,16551],{"class":42},[36,22716,22717,22719],{"class":38,"line":674},[36,22718,64],{"class":42},[36,22720,22721],{"class":50}," m_A;\n",[36,22723,22724,22726],{"class":38,"line":679},[36,22725,64],{"class":42},[36,22727,22728],{"class":50}," m_B;\n",[36,22730,22731,22733],{"class":38,"line":692},[36,22732,64],{"class":42},[36,22734,22735],{"class":50}," m_C;\n",[36,22737,22738],{"class":38,"line":705},[36,22739,5486],{"class":50},[36,22741,22742],{"class":38,"line":710},[36,22743,58],{"emptyLinePlaceholder":57},[36,22745,22746,22748,22750],{"class":38,"line":722},[36,22747,43],{"class":42},[36,22749,47],{"class":46},[36,22751,7460],{"class":50},[36,22753,22754],{"class":38,"line":750},[36,22755,3076],{"class":50},[36,22757,22758],{"class":38,"line":755},[36,22759,58],{"emptyLinePlaceholder":57},[36,22761,22762,22764,22766,22768,22770,22772,22774,22776,22778],{"class":38,"line":777},[36,22763,20760],{"class":50},[36,22765,19],{"class":46},[36,22767,222],{"class":50},[36,22769,1885],{"class":73},[36,22771,477],{"class":50},[36,22773,1747],{"class":73},[36,22775,477],{"class":50},[36,22777,1741],{"class":73},[36,22779,228],{"class":50},[36,22781,22782,22784,22787],{"class":38,"line":802},[36,22783,17195],{"class":50},[36,22785,22786],{"class":46},"PrintPerson",[36,22788,1022],{"class":50},[36,22790,22791],{"class":38,"line":807},[36,22792,58],{"emptyLinePlaceholder":57},[36,22794,22795],{"class":38,"line":818},[36,22796,58],{"emptyLinePlaceholder":57},[36,22798,22799,22801,22803,22805],{"class":38,"line":843},[36,22800,219],{"class":46},[36,22802,222],{"class":50},[36,22804,225],{"class":110},[36,22806,228],{"class":50},[36,22808,22809],{"class":38,"line":848},[36,22810,58],{"emptyLinePlaceholder":57},[36,22812,22813,22815,22817],{"class":38,"line":859},[36,22814,239],{"class":42},[36,22816,242],{"class":73},[36,22818,77],{"class":50},[36,22820,22821],{"class":38,"line":864},[36,22822,250],{"class":50},[19,22824,22825,22826,22829,22830],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[887,22827,22828],{},"参数名就是定义的对象属性","，",[887,22831,22832],{},"属性后面的值为有参构造函数的形参",[26,22834,22836],{"className":28,"code":22835,"language":30,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[33,22837,22838],{"__ignoreMap":31},[36,22839,22840,22842,22844,22846,22849,22851,22854,22856,22859,22861,22864,22866,22869,22871],{"class":38,"line":39},[36,22841,20375],{"class":46},[36,22843,222],{"class":50},[36,22845,43],{"class":42},[36,22847,22848],{"class":50}," a.",[36,22850,43],{"class":42},[36,22852,22853],{"class":50}," b,",[36,22855,43],{"class":42},[36,22857,22858],{"class":50}," b):",[36,22860,22628],{"class":46},[36,22862,22863],{"class":50},"(a),",[36,22865,22634],{"class":46},[36,22867,22868],{"class":50},"(c),",[36,22870,22640],{"class":46},[36,22872,22873],{"class":50},"(b) {}\n",[1645,22875,22877],{"id":22876},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22879,22880],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22882,15962],{},[26,22884,22886],{"className":28,"code":22885,"language":30,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[33,22887,22888,22893,22898,22902,22907,22911],{"__ignoreMap":31},[36,22889,22890],{"class":38,"line":39},[36,22891,22892],{"class":50},"A{};\n",[36,22894,22895],{"class":38,"line":54},[36,22896,22897],{"class":50},"B\n",[36,22899,22900],{"class":38,"line":61},[36,22901,3076],{"class":50},[36,22903,22904],{"class":38,"line":80},[36,22905,22906],{"class":50},"    A a;\n",[36,22908,22909],{"class":38,"line":96},[36,22910,250],{"class":50},[36,22912,22913],{"class":38,"line":101},[36,22914,22915],{"class":124},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22917,22918],{},"案例",[26,22920,22922],{"className":28,"code":22921,"language":30,"meta":31,"style":31},"\u002F\u002Fphone这个对象作为Person这个类的类成员\nclass Phone\n{\npublic：\n    \u002F\u002F 赋值(构造函数)\n    Phone(string pName)\n    {\n        m_pName=pName;\n        cout\u003C\u003C\"Phone的构造函数调用\";\n    }\n    ~Phone()\n    {\n        cout\u003C\u003C\"Phone析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F\n    string m_PName;\n};\nclass Person\n{\npublic:\n    \u002F\u002F赋值\n    Person(string name,string pname):m_name(name),m_phone.m_PName(pname) \n    {\n        cout\u003C\u003C\"Person的构造函数调用\";\n    }\n    ~Person()\n    {\n        cout\u003C\u003C\"Person析构函数调用\"\u003C\u003Cendl;\n    }\n    \u002F\u002F姓名\n    string m_name;\n    \u002F\u002F手机\n    Phone m_Phone;\n};\nvoid test01()\n{\n    Person p(\"张三\",\"安卓\");\n    cout\u003C\u003Cp.Name\u003C\u003C\"拿着：\"\u003C\u003Cp.m_phone.m_PName;\n}\nint main()\n{\n    test01();\n}\n",[33,22923,22924,22929,22936,22940,22945,22950,22964,22968,22978,22989,22993,23000,23004,23017,23021,23026,23031,23035,23041,23045,23049,23053,23084,23088,23099,23103,23109,23113,23126,23130,23134,23138,23143,23148,23152,23160,23164,23181,23200,23204,23212,23216,23222],{"__ignoreMap":31},[36,22925,22926],{"class":38,"line":39},[36,22927,22928],{"class":124},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[36,22930,22931,22933],{"class":38,"line":54},[36,22932,16023],{"class":42},[36,22934,22935],{"class":46}," Phone\n",[36,22937,22938],{"class":38,"line":61},[36,22939,3076],{"class":50},[36,22941,22942],{"class":38,"line":80},[36,22943,22944],{"class":50},"public：\n",[36,22946,22947],{"class":38,"line":96},[36,22948,22949],{"class":124},"    \u002F\u002F 赋值(构造函数)\n",[36,22951,22952,22955,22957,22959,22962],{"class":38,"line":101},[36,22953,22954],{"class":46},"    Phone",[36,22956,222],{"class":50},[36,22958,16246],{"class":46},[36,22960,22961],{"class":473}," pName",[36,22963,1680],{"class":50},[36,22965,22966],{"class":38,"line":128},[36,22967,3537],{"class":50},[36,22969,22970,22973,22975],{"class":38,"line":149},[36,22971,22972],{"class":50},"        m_pName",[36,22974,70],{"class":42},[36,22976,22977],{"class":50},"pName;\n",[36,22979,22980,22982,22984,22987],{"class":38,"line":154},[36,22981,4942],{"class":50},[36,22983,107],{"class":42},[36,22985,22986],{"class":110},"\"Phone的构造函数调用\"",[36,22988,77],{"class":50},[36,22990,22991],{"class":38,"line":167},[36,22992,3693],{"class":50},[36,22994,22995,22998],{"class":38,"line":172},[36,22996,22997],{"class":46},"    ~Phone",[36,22999,3484],{"class":50},[36,23001,23002],{"class":38,"line":192},[36,23003,3537],{"class":50},[36,23005,23006,23008,23010,23013,23015],{"class":38,"line":211},[36,23007,4942],{"class":50},[36,23009,107],{"class":42},[36,23011,23012],{"class":110},"\"Phone析构函数调用\"",[36,23014,107],{"class":42},[36,23016,2732],{"class":50},[36,23018,23019],{"class":38,"line":216},[36,23020,3693],{"class":50},[36,23022,23023],{"class":38,"line":231},[36,23024,23025],{"class":124},"    \u002F\u002F\n",[36,23027,23028],{"class":38,"line":236},[36,23029,23030],{"class":50},"    string m_PName;\n",[36,23032,23033],{"class":38,"line":247},[36,23034,5486],{"class":50},[36,23036,23037,23039],{"class":38,"line":637},[36,23038,16023],{"class":42},[36,23040,16500],{"class":46},[36,23042,23043],{"class":38,"line":646},[36,23044,3076],{"class":50},[36,23046,23047],{"class":38,"line":655},[36,23048,16045],{"class":42},[36,23050,23051],{"class":38,"line":660},[36,23052,18323],{"class":124},[36,23054,23055,23057,23059,23061,23063,23065,23067,23070,23073,23075,23078,23081],{"class":38,"line":665},[36,23056,19848],{"class":46},[36,23058,222],{"class":50},[36,23060,16246],{"class":46},[36,23062,16249],{"class":473},[36,23064,2045],{"class":50},[36,23066,16246],{"class":46},[36,23068,23069],{"class":473}," pname",[36,23071,23072],{"class":50},"):",[36,23074,16339],{"class":46},[36,23076,23077],{"class":50},"(name),m_phone.",[36,23079,23080],{"class":46},"m_PName",[36,23082,23083],{"class":50},"(pname) \n",[36,23085,23086],{"class":38,"line":674},[36,23087,3537],{"class":50},[36,23089,23090,23092,23094,23097],{"class":38,"line":679},[36,23091,4942],{"class":50},[36,23093,107],{"class":42},[36,23095,23096],{"class":110},"\"Person的构造函数调用\"",[36,23098,77],{"class":50},[36,23100,23101],{"class":38,"line":692},[36,23102,3693],{"class":50},[36,23104,23105,23107],{"class":38,"line":705},[36,23106,19881],{"class":46},[36,23108,3484],{"class":50},[36,23110,23111],{"class":38,"line":710},[36,23112,3537],{"class":50},[36,23114,23115,23117,23119,23122,23124],{"class":38,"line":722},[36,23116,4942],{"class":50},[36,23118,107],{"class":42},[36,23120,23121],{"class":110},"\"Person析构函数调用\"",[36,23123,107],{"class":42},[36,23125,2732],{"class":50},[36,23127,23128],{"class":38,"line":750},[36,23129,3693],{"class":50},[36,23131,23132],{"class":38,"line":755},[36,23133,9254],{"class":124},[36,23135,23136],{"class":38,"line":777},[36,23137,16221],{"class":50},[36,23139,23140],{"class":38,"line":802},[36,23141,23142],{"class":124},"    \u002F\u002F手机\n",[36,23144,23145],{"class":38,"line":807},[36,23146,23147],{"class":50},"    Phone m_Phone;\n",[36,23149,23150],{"class":38,"line":818},[36,23151,5486],{"class":50},[36,23153,23154,23156,23158],{"class":38,"line":843},[36,23155,463],{"class":42},[36,23157,911],{"class":46},[36,23159,3484],{"class":50},[36,23161,23162],{"class":38,"line":848},[36,23163,3076],{"class":50},[36,23165,23166,23168,23170,23172,23174,23176,23179],{"class":38,"line":859},[36,23167,20760],{"class":50},[36,23169,19],{"class":46},[36,23171,222],{"class":50},[36,23173,9390],{"class":110},[36,23175,2045],{"class":50},[36,23177,23178],{"class":110},"\"安卓\"",[36,23180,228],{"class":50},[36,23182,23183,23185,23187,23190,23192,23195,23197],{"class":38,"line":864},[36,23184,3081],{"class":50},[36,23186,107],{"class":42},[36,23188,23189],{"class":50},"p.Name",[36,23191,107],{"class":42},[36,23193,23194],{"class":110},"\"拿着：\"",[36,23196,107],{"class":42},[36,23198,23199],{"class":50},"p.m_phone.m_PName;\n",[36,23201,23202],{"class":38,"line":873},[36,23203,250],{"class":50},[36,23205,23206,23208,23210],{"class":38,"line":9454},[36,23207,43],{"class":42},[36,23209,47],{"class":46},[36,23211,3484],{"class":50},[36,23213,23214],{"class":38,"line":9481},[36,23215,3076],{"class":50},[36,23217,23218,23220],{"class":38,"line":9486},[36,23219,7119],{"class":46},[36,23221,1022],{"class":50},[36,23223,23224],{"class":38,"line":9492},[36,23225,250],{"class":50},[19,23227,885],{},[26,23229,23231],{"className":28,"code":23230,"language":30,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[33,23232,23233,23238],{"__ignoreMap":31},[36,23234,23235],{"class":38,"line":39},[36,23236,23237],{"class":124},"    \u002F\u002F不需要写这个：\n",[36,23239,23240],{"class":38,"line":54},[36,23241,23242],{"class":124},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23244,23245],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,23247,23249],{"className":28,"code":23248,"language":30,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[33,23250,23251],{"__ignoreMap":31},[36,23252,23253,23255,23258,23260,23263,23266],{"class":38,"line":39},[36,23254,20375],{"class":46},[36,23256,23257],{"class":50},"(string name.string pname):",[36,23259,16339],{"class":46},[36,23261,23262],{"class":50},"(name),",[36,23264,23265],{"class":46},"m_phone",[36,23267,23268],{"class":50},"(pname) {}\n",[19,23270,23271,23272,70,23275],{},"采用的是隐式转换法，实际为如下：\n",[33,23273,23274],{},"m_phone(pname)",[33,23276,23277],{},"Phone m_phone=pname",[19,23279,23280,23283],{},[887,23281,23282],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23285,23286],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[1645,23288,23290],{"id":23289},"_828静态对象","8.2.8静态对象",[19,23292,23293],{},"静态对象在成员对象前static，称为静态对象",[19,23295,23296],{},"静态对象分为两类：",[256,23298,23299],{},[259,23300,23301],{},"静态成员变量",[2674,23303,23304,23307,23310],{},[259,23305,23306],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[259,23308,23309],{},"②在编译阶段分配内存",[259,23311,23312],{},"③类内声明，类外初始化",[256,23314,23315],{"start":54},[259,23316,23317],{},"静态成员函数",[2674,23319,23320,23323],{},[259,23321,23322],{},"①所有对象共享同一个函数",[259,23324,23325],{},"②静态成员函数只能访问静态成员变量",[23327,23328,23330],"h4",{"id":23329},"_8281静态成员变量","8.2.8.1静态成员变量",[26,23332,23334],{"className":28,"code":23333,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F非静态成员变量\n    \u002F\u002F int m_A;\n    \u002F\u002F定义静态成员变量\n    static int m_A;\n\n\n};\nvoid test01()\n{\n    Person p;\n    \u002F\u002F输出类成员变量这块内存\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01()\n}\n",[33,23335,23336,23342,23352,23358,23362,23366,23371,23376,23381,23389,23393,23397,23401,23409,23413,23417,23422,23435,23439,23447,23451,23457],{"__ignoreMap":31},[36,23337,23338,23340],{"class":38,"line":39},[36,23339,3459],{"class":42},[36,23341,3462],{"class":110},[36,23343,23344,23346,23348,23350],{"class":38,"line":54},[36,23345,3467],{"class":42},[36,23347,3470],{"class":42},[36,23349,3473],{"class":46},[36,23351,77],{"class":50},[36,23353,23354,23356],{"class":38,"line":61},[36,23355,16023],{"class":42},[36,23357,16500],{"class":46},[36,23359,23360],{"class":38,"line":80},[36,23361,3076],{"class":50},[36,23363,23364],{"class":38,"line":96},[36,23365,16045],{"class":42},[36,23367,23368],{"class":38,"line":101},[36,23369,23370],{"class":124},"    \u002F\u002F非静态成员变量\n",[36,23372,23373],{"class":38,"line":128},[36,23374,23375],{"class":124},"    \u002F\u002F int m_A;\n",[36,23377,23378],{"class":38,"line":149},[36,23379,23380],{"class":124},"    \u002F\u002F定义静态成员变量\n",[36,23382,23383,23385,23387],{"class":38,"line":154},[36,23384,962],{"class":42},[36,23386,965],{"class":42},[36,23388,22721],{"class":50},[36,23390,23391],{"class":38,"line":167},[36,23392,58],{"emptyLinePlaceholder":57},[36,23394,23395],{"class":38,"line":172},[36,23396,58],{"emptyLinePlaceholder":57},[36,23398,23399],{"class":38,"line":192},[36,23400,5486],{"class":50},[36,23402,23403,23405,23407],{"class":38,"line":211},[36,23404,463],{"class":42},[36,23406,911],{"class":46},[36,23408,3484],{"class":50},[36,23410,23411],{"class":38,"line":216},[36,23412,3076],{"class":50},[36,23414,23415],{"class":38,"line":231},[36,23416,16642],{"class":50},[36,23418,23419],{"class":38,"line":236},[36,23420,23421],{"class":124},"    \u002F\u002F输出类成员变量这块内存\n",[36,23423,23424,23426,23428,23431,23433],{"class":38,"line":247},[36,23425,3081],{"class":50},[36,23427,107],{"class":42},[36,23429,23430],{"class":50},"p.m_A",[36,23432,107],{"class":42},[36,23434,2732],{"class":50},[36,23436,23437],{"class":38,"line":637},[36,23438,250],{"class":50},[36,23440,23441,23443,23445],{"class":38,"line":646},[36,23442,43],{"class":42},[36,23444,47],{"class":46},[36,23446,3484],{"class":50},[36,23448,23449],{"class":38,"line":655},[36,23450,3076],{"class":50},[36,23452,23453,23455],{"class":38,"line":660},[36,23454,7119],{"class":46},[36,23456,3484],{"class":50},[36,23458,23459],{"class":38,"line":665},[36,23460,250],{"class":50},[19,23462,23463],{},"此时输出是报错的：无法解析外部命令",[19,23465,23466],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,23468,23470],{"className":28,"code":23469,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nvoid test01()\n{\n    Person p;\n    \u002F\u002F访问变量的原内存空间\n    \u002F\u002F100\n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    Person p2;\n    p2.m_A=200;\n    \u002F\u002F继续访问这片空间\n    \u002F\u002F200\n    cout\u003C\u003Cp2.m_A\u003C\u003Cendl;\n}\nint main()\n{\n    test01();\n}\n",[33,23471,23472,23478,23488,23494,23498,23502,23507,23515,23519,23524,23539,23547,23551,23555,23560,23565,23577,23582,23593,23598,23603,23616,23620,23628,23632,23638],{"__ignoreMap":31},[36,23473,23474,23476],{"class":38,"line":39},[36,23475,3459],{"class":42},[36,23477,3462],{"class":110},[36,23479,23480,23482,23484,23486],{"class":38,"line":54},[36,23481,3467],{"class":42},[36,23483,3470],{"class":42},[36,23485,3473],{"class":46},[36,23487,77],{"class":50},[36,23489,23490,23492],{"class":38,"line":61},[36,23491,16023],{"class":42},[36,23493,16500],{"class":46},[36,23495,23496],{"class":38,"line":80},[36,23497,3076],{"class":50},[36,23499,23500],{"class":38,"line":96},[36,23501,16045],{"class":42},[36,23503,23504],{"class":38,"line":101},[36,23505,23506],{"class":124},"    \u002F\u002F类内声明\n",[36,23508,23509,23511,23513],{"class":38,"line":128},[36,23510,962],{"class":42},[36,23512,965],{"class":42},[36,23514,22721],{"class":50},[36,23516,23517],{"class":38,"line":149},[36,23518,5486],{"class":50},[36,23520,23521],{"class":38,"line":154},[36,23522,23523],{"class":124},"\u002F\u002F类外初始化\n",[36,23525,23526,23528,23530,23533,23535,23537],{"class":38,"line":167},[36,23527,43],{"class":42},[36,23529,16898],{"class":46},[36,23531,23532],{"class":50},"::m_A",[36,23534,70],{"class":42},[36,23536,2113],{"class":73},[36,23538,77],{"class":50},[36,23540,23541,23543,23545],{"class":38,"line":172},[36,23542,463],{"class":42},[36,23544,911],{"class":46},[36,23546,3484],{"class":50},[36,23548,23549],{"class":38,"line":192},[36,23550,3076],{"class":50},[36,23552,23553],{"class":38,"line":211},[36,23554,16642],{"class":50},[36,23556,23557],{"class":38,"line":216},[36,23558,23559],{"class":124},"    \u002F\u002F访问变量的原内存空间\n",[36,23561,23562],{"class":38,"line":231},[36,23563,23564],{"class":124},"    \u002F\u002F100\n",[36,23566,23567,23569,23571,23573,23575],{"class":38,"line":236},[36,23568,3081],{"class":50},[36,23570,107],{"class":42},[36,23572,23430],{"class":50},[36,23574,107],{"class":42},[36,23576,2732],{"class":50},[36,23578,23579],{"class":38,"line":247},[36,23580,23581],{"class":50},"    Person p2;\n",[36,23583,23584,23587,23589,23591],{"class":38,"line":637},[36,23585,23586],{"class":50},"    p2.m_A",[36,23588,70],{"class":42},[36,23590,3240],{"class":73},[36,23592,77],{"class":50},[36,23594,23595],{"class":38,"line":646},[36,23596,23597],{"class":124},"    \u002F\u002F继续访问这片空间\n",[36,23599,23600],{"class":38,"line":655},[36,23601,23602],{"class":124},"    \u002F\u002F200\n",[36,23604,23605,23607,23609,23612,23614],{"class":38,"line":660},[36,23606,3081],{"class":50},[36,23608,107],{"class":42},[36,23610,23611],{"class":50},"p2.m_A",[36,23613,107],{"class":42},[36,23615,2732],{"class":50},[36,23617,23618],{"class":38,"line":665},[36,23619,250],{"class":50},[36,23621,23622,23624,23626],{"class":38,"line":674},[36,23623,43],{"class":42},[36,23625,47],{"class":46},[36,23627,3484],{"class":50},[36,23629,23630],{"class":38,"line":679},[36,23631,3076],{"class":50},[36,23633,23634,23636],{"class":38,"line":692},[36,23635,7119],{"class":46},[36,23637,1022],{"class":50},[36,23639,23640],{"class":38,"line":705},[36,23641,250],{"class":50},[19,23643,23644],{},[887,23645,23646],{},"静态变量的访问",[26,23648,23650],{"className":28,"code":23649,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person\n{\npublic:\n    \u002F\u002F类内声明\n    static int m_A;\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static int m_B;\n};\n\u002F\u002F类外初始化\nint Person::m_A=10;\nint Person::m_B=20;\nvoid test02()\n{\n    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n    \u002F\u002F静态成员变量有两种访问方式：\n    \u002F\u002F1.通过对象进行访问\n    Person p;  \n    cout\u003C\u003Cp.m_A\u003C\u003Cendl;\n    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n    \u002F\u002F2.通过类名进行访问\n    cout\u003C\u003CPerson::m_A\u003C\u003Cendl;\n    cout\u003C\u003CPerson::m_B\u003C\u003Cendl; \u002F\u002F没有访问权限，报错\n}\nint main()\n{\n    test02();\n}\n",[33,23651,23652,23658,23668,23674,23678,23682,23686,23694,23698,23703,23711,23715,23719,23733,23748,23756,23760,23765,23770,23775,23780,23792,23797,23802,23816,23833,23837,23845,23849,23855],{"__ignoreMap":31},[36,23653,23654,23656],{"class":38,"line":39},[36,23655,3459],{"class":42},[36,23657,3462],{"class":110},[36,23659,23660,23662,23664,23666],{"class":38,"line":54},[36,23661,3467],{"class":42},[36,23663,3470],{"class":42},[36,23665,3473],{"class":46},[36,23667,77],{"class":50},[36,23669,23670,23672],{"class":38,"line":61},[36,23671,16023],{"class":42},[36,23673,16500],{"class":46},[36,23675,23676],{"class":38,"line":80},[36,23677,3076],{"class":50},[36,23679,23680],{"class":38,"line":96},[36,23681,16045],{"class":42},[36,23683,23684],{"class":38,"line":101},[36,23685,23506],{"class":124},[36,23687,23688,23690,23692],{"class":38,"line":128},[36,23689,962],{"class":42},[36,23691,965],{"class":42},[36,23693,22721],{"class":50},[36,23695,23696],{"class":38,"line":149},[36,23697,16551],{"class":42},[36,23699,23700],{"class":38,"line":154},[36,23701,23702],{"class":124},"    \u002F\u002F静态成员变量也是有访问权限的\n",[36,23704,23705,23707,23709],{"class":38,"line":167},[36,23706,962],{"class":42},[36,23708,965],{"class":42},[36,23710,22728],{"class":50},[36,23712,23713],{"class":38,"line":172},[36,23714,5486],{"class":50},[36,23716,23717],{"class":38,"line":192},[36,23718,23523],{"class":124},[36,23720,23721,23723,23725,23727,23729,23731],{"class":38,"line":211},[36,23722,43],{"class":42},[36,23724,16898],{"class":46},[36,23726,23532],{"class":50},[36,23728,70],{"class":42},[36,23730,2113],{"class":73},[36,23732,77],{"class":50},[36,23734,23735,23737,23739,23742,23744,23746],{"class":38,"line":216},[36,23736,43],{"class":42},[36,23738,16898],{"class":46},[36,23740,23741],{"class":50},"::m_B",[36,23743,70],{"class":42},[36,23745,2367],{"class":73},[36,23747,77],{"class":50},[36,23749,23750,23752,23754],{"class":38,"line":231},[36,23751,463],{"class":42},[36,23753,955],{"class":46},[36,23755,3484],{"class":50},[36,23757,23758],{"class":38,"line":236},[36,23759,3076],{"class":50},[36,23761,23762],{"class":38,"line":247},[36,23763,23764],{"class":124},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[36,23766,23767],{"class":38,"line":637},[36,23768,23769],{"class":124},"    \u002F\u002F静态成员变量有两种访问方式：\n",[36,23771,23772],{"class":38,"line":646},[36,23773,23774],{"class":124},"    \u002F\u002F1.通过对象进行访问\n",[36,23776,23777],{"class":38,"line":655},[36,23778,23779],{"class":50},"    Person p;  \n",[36,23781,23782,23784,23786,23788,23790],{"class":38,"line":660},[36,23783,3081],{"class":50},[36,23785,107],{"class":42},[36,23787,23430],{"class":50},[36,23789,107],{"class":42},[36,23791,2732],{"class":50},[36,23793,23794],{"class":38,"line":665},[36,23795,23796],{"class":124},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[36,23798,23799],{"class":38,"line":674},[36,23800,23801],{"class":124},"    \u002F\u002F2.通过类名进行访问\n",[36,23803,23804,23806,23808,23810,23812,23814],{"class":38,"line":679},[36,23805,3081],{"class":50},[36,23807,107],{"class":42},[36,23809,20375],{"class":46},[36,23811,23532],{"class":50},[36,23813,107],{"class":42},[36,23815,2732],{"class":50},[36,23817,23818,23820,23822,23824,23826,23828,23830],{"class":38,"line":692},[36,23819,3081],{"class":50},[36,23821,107],{"class":42},[36,23823,20375],{"class":46},[36,23825,23741],{"class":50},[36,23827,107],{"class":42},[36,23829,2775],{"class":50},[36,23831,23832],{"class":124}," \u002F\u002F没有访问权限，报错\n",[36,23834,23835],{"class":38,"line":705},[36,23836,250],{"class":50},[36,23838,23839,23841,23843],{"class":38,"line":710},[36,23840,43],{"class":42},[36,23842,47],{"class":46},[36,23844,3484],{"class":50},[36,23846,23847],{"class":38,"line":722},[36,23848,3076],{"class":50},[36,23850,23851,23853],{"class":38,"line":750},[36,23852,1130],{"class":46},[36,23854,1022],{"class":50},[36,23856,23857],{"class":38,"line":755},[36,23858,250],{"class":50},[23327,23860,23862],{"id":23861},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23864,23865],{},"1.静态成员函数定义与访问",[26,23867,23869],{"className":28,"code":23868,"language":30,"meta":31,"style":31},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n};\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n}\n",[33,23870,23871,23877,23881,23885,23890,23901,23905,23919,23923,23927,23935,23939,23944,23949,23953,23961,23966,23976],{"__ignoreMap":31},[36,23872,23873,23875],{"class":38,"line":39},[36,23874,16023],{"class":42},[36,23876,16500],{"class":46},[36,23878,23879],{"class":38,"line":54},[36,23880,3076],{"class":50},[36,23882,23883],{"class":38,"line":61},[36,23884,16045],{"class":42},[36,23886,23887],{"class":38,"line":80},[36,23888,23889],{"class":124},"    \u002F\u002F在公共权限下定义静态成员函数\n",[36,23891,23892,23894,23897,23899],{"class":38,"line":96},[36,23893,962],{"class":42},[36,23895,23896],{"class":42}," void",[36,23898,1241],{"class":46},[36,23900,3484],{"class":50},[36,23902,23903],{"class":38,"line":101},[36,23904,3537],{"class":50},[36,23906,23907,23910,23912,23915,23917],{"class":38,"line":128},[36,23908,23909],{"class":50},"        coout",[36,23911,107],{"class":42},[36,23913,23914],{"class":110},"\"静态成员函数的调用\"",[36,23916,107],{"class":42},[36,23918,2732],{"class":50},[36,23920,23921],{"class":38,"line":149},[36,23922,3693],{"class":50},[36,23924,23925],{"class":38,"line":154},[36,23926,5486],{"class":50},[36,23928,23929,23931,23933],{"class":38,"line":167},[36,23930,463],{"class":42},[36,23932,911],{"class":46},[36,23934,3484],{"class":50},[36,23936,23937],{"class":38,"line":172},[36,23938,3076],{"class":50},[36,23940,23941],{"class":38,"line":192},[36,23942,23943],{"class":124},"    \u002F\u002F静态成员函数的调用方式:\n",[36,23945,23946],{"class":38,"line":211},[36,23947,23948],{"class":124},"    \u002F\u002F1.通过对象访问\n",[36,23950,23951],{"class":38,"line":216},[36,23952,16642],{"class":50},[36,23954,23955,23957,23959],{"class":38,"line":231},[36,23956,17195],{"class":50},[36,23958,13006],{"class":46},[36,23960,1022],{"class":50},[36,23962,23963],{"class":38,"line":236},[36,23964,23965],{"class":124},"    \u002F\u002F2.通过类名访问\n",[36,23967,23968,23970,23972,23974],{"class":38,"line":247},[36,23969,19848],{"class":46},[36,23971,19061],{"class":50},[36,23973,13006],{"class":46},[36,23975,1022],{"class":50},[36,23977,23978],{"class":38,"line":637},[36,23979,250],{"class":50},[256,23981,23982],{"start":54},[259,23983,23984],{},"静态成员函数只能访问静态成员变量",[26,23986,23988],{"className":28,"code":23987,"language":30,"meta":31,"style":31},"class Person\n{\npublic:\n    \u002F\u002F在公共权限下定义静态成员函数\n    static void func()\n    {\n        m_A=100; \u002F\u002F静态成员函数可以访问 静态成员变量\n        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n        coout\u003C\u003C\"静态成员函数的调用\"\u003C\u003Cendl;\n    }\n    static int m_A; \u002F\u002F静态成员变量\n    int m_B; \u002F\u002F非静态成员变量\n\nprivate:\n    \u002F\u002F静态成员变量也是有访问权限的\n    static void func2()\n    {\n        cout\u003C\u003C\"这是私有权限下的静态函数调用\"\u003C\u003Cendl;\n    }\n\n\n};\nint Person::m_A=0;\nvoid test01()\n{\n    \u002F\u002F静态成员函数的调用方式:\n    \u002F\u002F1.通过对象访问\n    Person p;\n    p.func();\n    \u002F\u002F2.通过类名访问\n    Person::func();\n    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n}\nint main()\n{\n    test01();\n}\n",[33,23989,23990,23996,24000,24004,24008,24018,24022,24036,24041,24053,24057,24068,24078,24082,24086,24090,24100,24104,24117,24121,24125,24129,24133,24147,24155,24159,24163,24167,24171,24179,24183,24193,24198,24202,24210,24214,24220],{"__ignoreMap":31},[36,23991,23992,23994],{"class":38,"line":39},[36,23993,16023],{"class":42},[36,23995,16500],{"class":46},[36,23997,23998],{"class":38,"line":54},[36,23999,3076],{"class":50},[36,24001,24002],{"class":38,"line":61},[36,24003,16045],{"class":42},[36,24005,24006],{"class":38,"line":80},[36,24007,23889],{"class":124},[36,24009,24010,24012,24014,24016],{"class":38,"line":96},[36,24011,962],{"class":42},[36,24013,23896],{"class":42},[36,24015,1241],{"class":46},[36,24017,3484],{"class":50},[36,24019,24020],{"class":38,"line":101},[36,24021,3537],{"class":50},[36,24023,24024,24027,24029,24031,24033],{"class":38,"line":128},[36,24025,24026],{"class":50},"        m_A",[36,24028,70],{"class":42},[36,24030,1979],{"class":73},[36,24032,926],{"class":50},[36,24034,24035],{"class":124}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[36,24037,24038],{"class":38,"line":149},[36,24039,24040],{"class":124},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[36,24042,24043,24045,24047,24049,24051],{"class":38,"line":154},[36,24044,23909],{"class":50},[36,24046,107],{"class":42},[36,24048,23914],{"class":110},[36,24050,107],{"class":42},[36,24052,2732],{"class":50},[36,24054,24055],{"class":38,"line":167},[36,24056,3693],{"class":50},[36,24058,24059,24061,24063,24065],{"class":38,"line":172},[36,24060,962],{"class":42},[36,24062,965],{"class":42},[36,24064,16777],{"class":50},[36,24066,24067],{"class":124}," \u002F\u002F静态成员变量\n",[36,24069,24070,24072,24075],{"class":38,"line":192},[36,24071,64],{"class":42},[36,24073,24074],{"class":50}," m_B;",[36,24076,24077],{"class":124}," \u002F\u002F非静态成员变量\n",[36,24079,24080],{"class":38,"line":211},[36,24081,58],{"emptyLinePlaceholder":57},[36,24083,24084],{"class":38,"line":216},[36,24085,16551],{"class":42},[36,24087,24088],{"class":38,"line":231},[36,24089,23702],{"class":124},[36,24091,24092,24094,24096,24098],{"class":38,"line":236},[36,24093,962],{"class":42},[36,24095,23896],{"class":42},[36,24097,14947],{"class":46},[36,24099,3484],{"class":50},[36,24101,24102],{"class":38,"line":247},[36,24103,3537],{"class":50},[36,24105,24106,24108,24110,24113,24115],{"class":38,"line":637},[36,24107,4942],{"class":50},[36,24109,107],{"class":42},[36,24111,24112],{"class":110},"\"这是私有权限下的静态函数调用\"",[36,24114,107],{"class":42},[36,24116,2732],{"class":50},[36,24118,24119],{"class":38,"line":646},[36,24120,3693],{"class":50},[36,24122,24123],{"class":38,"line":655},[36,24124,58],{"emptyLinePlaceholder":57},[36,24126,24127],{"class":38,"line":660},[36,24128,58],{"emptyLinePlaceholder":57},[36,24130,24131],{"class":38,"line":665},[36,24132,5486],{"class":50},[36,24134,24135,24137,24139,24141,24143,24145],{"class":38,"line":674},[36,24136,43],{"class":42},[36,24138,16898],{"class":46},[36,24140,23532],{"class":50},[36,24142,70],{"class":42},[36,24144,1859],{"class":73},[36,24146,77],{"class":50},[36,24148,24149,24151,24153],{"class":38,"line":679},[36,24150,463],{"class":42},[36,24152,911],{"class":46},[36,24154,3484],{"class":50},[36,24156,24157],{"class":38,"line":692},[36,24158,3076],{"class":50},[36,24160,24161],{"class":38,"line":705},[36,24162,23943],{"class":124},[36,24164,24165],{"class":38,"line":710},[36,24166,23948],{"class":124},[36,24168,24169],{"class":38,"line":722},[36,24170,16642],{"class":50},[36,24172,24173,24175,24177],{"class":38,"line":750},[36,24174,17195],{"class":50},[36,24176,13006],{"class":46},[36,24178,1022],{"class":50},[36,24180,24181],{"class":38,"line":755},[36,24182,23965],{"class":124},[36,24184,24185,24187,24189,24191],{"class":38,"line":777},[36,24186,19848],{"class":46},[36,24188,19061],{"class":50},[36,24190,13006],{"class":46},[36,24192,1022],{"class":50},[36,24194,24195],{"class":38,"line":802},[36,24196,24197],{"class":124},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[36,24199,24200],{"class":38,"line":807},[36,24201,250],{"class":50},[36,24203,24204,24206,24208],{"class":38,"line":818},[36,24205,43],{"class":42},[36,24207,47],{"class":46},[36,24209,3484],{"class":50},[36,24211,24212],{"class":38,"line":843},[36,24213,3076],{"class":50},[36,24215,24216,24218],{"class":38,"line":848},[36,24217,7119],{"class":46},[36,24219,1022],{"class":50},[36,24221,24222],{"class":38,"line":859},[36,24223,250],{"class":50},[1645,24225,24227],{"id":24226},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23327,24229,24231],{"id":24230},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24233,24234],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24236,24237],{},"只有非静态成员变量才属于类的对象上",[24239,24240,24242],"h5",{"id":24241},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,24244,24246],{"className":28,"code":24245,"language":30,"meta":31,"style":31},"#include\u003Ciostraem>\nusing namespace std;\nclass Person\n{\n\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeoif(p)\u003C\u003Cendl; \u002F\u002F查看这个空类的占用的内存空间\n}\nint main()\n{\n    test01();\n}\n",[33,24247,24248,24255,24265,24271,24275,24279,24283,24291,24295,24299,24322,24326,24334,24338,24344],{"__ignoreMap":31},[36,24249,24250,24252],{"class":38,"line":39},[36,24251,3459],{"class":42},[36,24253,24254],{"class":110},"\u003Ciostraem>\n",[36,24256,24257,24259,24261,24263],{"class":38,"line":54},[36,24258,3467],{"class":42},[36,24260,3470],{"class":42},[36,24262,3473],{"class":46},[36,24264,77],{"class":50},[36,24266,24267,24269],{"class":38,"line":61},[36,24268,16023],{"class":42},[36,24270,16500],{"class":46},[36,24272,24273],{"class":38,"line":80},[36,24274,3076],{"class":50},[36,24276,24277],{"class":38,"line":96},[36,24278,58],{"emptyLinePlaceholder":57},[36,24280,24281],{"class":38,"line":101},[36,24282,5486],{"class":50},[36,24284,24285,24287,24289],{"class":38,"line":128},[36,24286,463],{"class":42},[36,24288,911],{"class":46},[36,24290,3484],{"class":50},[36,24292,24293],{"class":38,"line":149},[36,24294,3076],{"class":50},[36,24296,24297],{"class":38,"line":154},[36,24298,16642],{"class":50},[36,24300,24301,24303,24305,24308,24310,24313,24315,24317,24319],{"class":38,"line":167},[36,24302,3081],{"class":50},[36,24304,107],{"class":42},[36,24306,24307],{"class":110},"\"size of p=\"",[36,24309,107],{"class":42},[36,24311,24312],{"class":46},"sizeoif",[36,24314,8016],{"class":50},[36,24316,107],{"class":42},[36,24318,2775],{"class":50},[36,24320,24321],{"class":124}," \u002F\u002F查看这个空类的占用的内存空间\n",[36,24323,24324],{"class":38,"line":172},[36,24325,250],{"class":50},[36,24327,24328,24330,24332],{"class":38,"line":192},[36,24329,43],{"class":42},[36,24331,47],{"class":46},[36,24333,3484],{"class":50},[36,24335,24336],{"class":38,"line":211},[36,24337,3076],{"class":50},[36,24339,24340,24342],{"class":38,"line":216},[36,24341,7119],{"class":46},[36,24343,1022],{"class":50},[36,24345,24346],{"class":38,"line":231},[36,24347,250],{"class":50},[19,24349,24350],{},"输出结果为：size of p=1",[19,24352,24353],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24355,24356],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24239,24358,24360],{"id":24359},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,24362,24364],{"className":28,"code":24363,"language":30,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\nclass Person \n{\n    int m_A;\u002F\u002F非静态成员变量\n};\nvoid test01()\n{\n    Person p;\n    cout\u003C\u003C\"size of p=\"\u003C\u003Csizeof(p)\u003C\u003Cendl; \u002F\u002F查看不是空对象时占用多少内存\n\n}\nint main()\n{\n    test01();\n}\n",[33,24365,24366,24372,24382,24390,24394,24403,24407,24415,24419,24423,24442,24446,24450,24458,24462,24468],{"__ignoreMap":31},[36,24367,24368,24370],{"class":38,"line":39},[36,24369,3459],{"class":42},[36,24371,3462],{"class":110},[36,24373,24374,24376,24378,24380],{"class":38,"line":54},[36,24375,3467],{"class":42},[36,24377,3470],{"class":42},[36,24379,3473],{"class":46},[36,24381,77],{"class":50},[36,24383,24384,24386,24388],{"class":38,"line":61},[36,24385,16023],{"class":42},[36,24387,16898],{"class":46},[36,24389,4169],{"class":50},[36,24391,24392],{"class":38,"line":80},[36,24393,3076],{"class":50},[36,24395,24396,24398,24400],{"class":38,"line":96},[36,24397,64],{"class":42},[36,24399,16777],{"class":50},[36,24401,24402],{"class":124},"\u002F\u002F非静态成员变量\n",[36,24404,24405],{"class":38,"line":101},[36,24406,5486],{"class":50},[36,24408,24409,24411,24413],{"class":38,"line":128},[36,24410,463],{"class":42},[36,24412,911],{"class":46},[36,24414,3484],{"class":50},[36,24416,24417],{"class":38,"line":149},[36,24418,3076],{"class":50},[36,24420,24421],{"class":38,"line":154},[36,24422,16642],{"class":50},[36,24424,24425,24427,24429,24431,24433,24435,24437,24439],{"class":38,"line":167},[36,24426,3081],{"class":50},[36,24428,107],{"class":42},[36,24430,24307],{"class":110},[36,24432,2905],{"class":42},[36,24434,8016],{"class":50},[36,24436,107],{"class":42},[36,24438,2775],{"class":50},[36,24440,24441],{"class":124}," \u002F\u002F查看不是空对象时占用多少内存\n",[36,24443,24444],{"class":38,"line":172},[36,24445,58],{"emptyLinePlaceholder":57},[36,24447,24448],{"class":38,"line":192},[36,24449,250],{"class":50},[36,24451,24452,24454,24456],{"class":38,"line":211},[36,24453,43],{"class":42},[36,24455,47],{"class":46},[36,24457,3484],{"class":50},[36,24459,24460],{"class":38,"line":216},[36,24461,3076],{"class":50},[36,24463,24464,24466],{"class":38,"line":231},[36,24465,7119],{"class":46},[36,24467,1022],{"class":50},[36,24469,24470],{"class":38,"line":236},[36,24471,250],{"class":50},[19,24473,24474],{},"输出结果：size of p=4",[19,24476,24477],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[256,24479,24480],{},[259,24481,24482],{},"如果加上非静态成员变量，Person类修改如下",[26,24484,24486],{"className":28,"code":24485,"language":30,"meta":31,"style":31},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[33,24487,24488,24494,24498,24504,24512,24516,24521],{"__ignoreMap":31},[36,24489,24490,24492],{"class":38,"line":39},[36,24491,16023],{"class":42},[36,24493,16500],{"class":46},[36,24495,24496],{"class":38,"line":54},[36,24497,3076],{"class":50},[36,24499,24500,24502],{"class":38,"line":61},[36,24501,64],{"class":42},[36,24503,22721],{"class":50},[36,24505,24506,24508,24510],{"class":38,"line":80},[36,24507,962],{"class":42},[36,24509,965],{"class":42},[36,24511,22728],{"class":50},[36,24513,24514],{"class":38,"line":96},[36,24515,5486],{"class":50},[36,24517,24518],{"class":38,"line":101},[36,24519,24520],{"class":124},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[36,24522,24523,24525,24527,24529,24531,24533],{"class":38,"line":128},[36,24524,43],{"class":42},[36,24526,16898],{"class":46},[36,24528,23741],{"class":50},[36,24530,70],{"class":42},[36,24532,1859],{"class":73},[36,24534,77],{"class":50},[19,24536,24537],{},"输出结果：4",[19,24539,24540],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[256,24542,24543],{"start":54},[259,24544,24545],{},"加上非静态成员函数",[26,24547,24549],{"className":28,"code":24548,"language":30,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[33,24550,24551,24558,24562,24568,24576,24580,24584,24588],{"__ignoreMap":31},[36,24552,24553,24555],{"class":38,"line":39},[36,24554,16023],{"class":42},[36,24556,24557],{"class":46},"  Person\n",[36,24559,24560],{"class":38,"line":54},[36,24561,3076],{"class":50},[36,24563,24564,24566],{"class":38,"line":61},[36,24565,64],{"class":42},[36,24567,22721],{"class":50},[36,24569,24570,24572,24574],{"class":38,"line":80},[36,24571,16238],{"class":42},[36,24573,1241],{"class":46},[36,24575,3484],{"class":50},[36,24577,24578],{"class":38,"line":96},[36,24579,3537],{"class":50},[36,24581,24582],{"class":38,"line":101},[36,24583,58],{"emptyLinePlaceholder":57},[36,24585,24586],{"class":38,"line":128},[36,24587,3693],{"class":50},[36,24589,24590],{"class":38,"line":149},[36,24591,5486],{"class":50},[19,24593,24594],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[256,24596,24597],{"start":61},[259,24598,24599],{},"加上静态成员函数",[26,24601,24603],{"className":28,"code":24602,"language":30,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[33,24604,24605,24611,24615,24621,24629,24633,24637,24641,24652,24656,24660,24664],{"__ignoreMap":31},[36,24606,24607,24609],{"class":38,"line":39},[36,24608,16023],{"class":42},[36,24610,24557],{"class":46},[36,24612,24613],{"class":38,"line":54},[36,24614,3076],{"class":50},[36,24616,24617,24619],{"class":38,"line":61},[36,24618,64],{"class":42},[36,24620,22721],{"class":50},[36,24622,24623,24625,24627],{"class":38,"line":80},[36,24624,16238],{"class":42},[36,24626,1241],{"class":46},[36,24628,3484],{"class":50},[36,24630,24631],{"class":38,"line":96},[36,24632,3537],{"class":50},[36,24634,24635],{"class":38,"line":101},[36,24636,58],{"emptyLinePlaceholder":57},[36,24638,24639],{"class":38,"line":128},[36,24640,3693],{"class":50},[36,24642,24643,24645,24647,24650],{"class":38,"line":149},[36,24644,962],{"class":42},[36,24646,23896],{"class":42},[36,24648,24649],{"class":46}," func1",[36,24651,3484],{"class":50},[36,24653,24654],{"class":38,"line":154},[36,24655,3537],{"class":50},[36,24657,24658],{"class":38,"line":167},[36,24659,58],{"emptyLinePlaceholder":57},[36,24661,24662],{"class":38,"line":172},[36,24663,3693],{"class":50},[36,24665,24666],{"class":38,"line":192},[36,24667,5486],{"class":50},[19,24669,24537],{},[19,24671,24672],{},"解释：静态成员函数也不属于类上",[1592,24674,9148],{},{"title":31,"searchDepth":54,"depth":54,"links":24676},[24677,24683],{"id":15974,"depth":54,"text":15975,"children":24678},[24679,24680,24681,24682],{"id":15978,"depth":61,"text":15979},{"id":16703,"depth":61,"text":16704},{"id":16875,"depth":61,"text":16876},{"id":17334,"depth":61,"text":17335},{"id":19706,"depth":54,"text":19707,"children":24684},[24685,24686,24687,24688,24689,24690,24691,24692,24693],{"id":19718,"depth":61,"text":19719},{"id":20011,"depth":61,"text":20012},{"id":20502,"depth":61,"text":20503},{"id":21599,"depth":61,"text":21600},{"id":22022,"depth":61,"text":22023},{"id":22501,"depth":61,"text":22502},{"id":22876,"depth":61,"text":22877},{"id":23289,"depth":61,"text":23290},{"id":24226,"depth":61,"text":24227},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15939,"description":24694},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24701,"title":30,"body":24702,"description":24706,"extension":1603,"meta":24707,"navigation":57,"path":24709,"seo":24710,"stem":24711,"__hash__":24712},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24703,"toc":24704},[],{"title":31,"searchDepth":54,"depth":54,"links":24705},[],null,{"category":24708},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":30,"description":24706},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24714,"title":24715,"body":24716,"description":31,"extension":1603,"meta":25307,"navigation":57,"path":25308,"seo":25309,"stem":25310,"__hash__":25311},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24717,"toc":25289},[24718,24721,24725,24728,24731,24734,24752,24757,24760,24763,24766,24769,24774,24777,24782,24785,24788,24792,24795,24798,24804,24807,24825,24829,24833,24836,24841,24844,24848,24851,24864,24867,24871,24874,24877,24880,24905,24908,24917,24928,24943,24975,24979,24986,24994,24998,25001,25004,25009,25013,25016,25019,25024,25027,25031,25034,25037,25042,25045,25049,25054,25058,25125,25129,25132,25135,25138,25141,25144,25150,25171,25174,25188,25197,25201,25204,25207,25212,25215,25220,25225,25228,25231,25236,25241,25244,25249,25254,25257,25262,25267,25270,25273,25278,25281,25286],[10,24719,24715],{"id":24720},"_1强化学习基本认识",[14,24722,24724],{"id":24723},"_11什么是强化学习","1.1.什么是强化学习",[19,24726,24727],{},"强化学习有两部分组成：智能体和环境；",[19,24729,24730],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24732,24733],{},"强化学习与监督学习的区别:",[256,24735,24736,24739,24742,24745],{},[259,24737,24738],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[259,24740,24741],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[259,24743,24744],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[259,24746,24747,24748,24751],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[887,24749,24750],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24753,24754],{},[2992,24755],{"alt":31,"src":24756},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24758,24759],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24761,24762],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24764,24765],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24767,24768],{},"获取奖励",[19,24770,24771],{},[2992,24772],{"alt":31,"src":24773},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24775,24776],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24778,24779],{},[2992,24780],{"alt":31,"src":24781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24783,24784],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24786,24787],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24789,24791],{"id":24790},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24793,24794],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24796,24797],{},"具身智能中的应用",[19,24799,24800,24803],{},[887,24801,24802],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24805,24806],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24808,24809,24810,24813,24814,24817,24818,24821,24822],{},"机器人是",[887,24811,24812],{},"躯体","，深度学习是",[887,24815,24816],{},"神经元****网络","，VLA是",[887,24819,24820],{},"通用的行为逻辑","，而强化学习是",[887,24823,24824],{},"教练",[14,24826,24828],{"id":24827},"_13序列决策","1.3.序列决策",[1645,24830,24832],{"id":24831},"_131智能体与环境","1.3.1.智能体与环境",[19,24834,24835],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24837,24838],{},[2992,24839],{"alt":31,"src":24840},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24842,24843],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[1645,24845,24847],{"id":24846},"_132奖励","1.3.2.奖励",[19,24849,24850],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24852,24853,24854,24863],{},"取某个策略的表现如何。强化学习的目的就是",[887,24855,24856,24857,24862],{},"最大化",[887,24858,24859],{},[887,24860,24861],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24865,24866],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[1645,24868,24870],{"id":24869},"_133序列决策","1.3.3.序列决策",[19,24872,24873],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24875,24876],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24878,24879],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24881,24882,24886,24887,24889,24890,24892,24893,24895,24896,15124,24899,15124,24902],{},[24883,24884,24885],"em",{},"Ht"," = ",[24883,24888,2263],{},"1*, a",[24883,24891,1885],{},", r",[24883,24894,1885],{},", . . . ,* ",[24883,24897,24898],{},"ot",[24883,24900,24901],{},", at ,",[24883,24903,24904],{},"rt",[19,24906,24907],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24909,24910,24886,24913,3180,24915,2096],{},[24883,24911,24912],{},"st",[24883,24914,1724],{},[24883,24916,24885],{},[19,24918,24919,24920,24923,24924,24927],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[887,24921,24922],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[887,24925,24926],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24929,24930,24931,24934,24935,24938,24939,24942],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[887,24932,24933],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[887,24936,24937],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24883,24940,24941],{},"S, A, T, R, Ω, O, γ",")。",[19,24944,24945,24946,24948,24949,24951,24952,222,24954,24957,24958,24960,24961,222,24964,24967,24968,24970,24971,24974],{},"其中 ",[24883,24947,2356],{}," 表示状态空间，为隐变量，",[24883,24950,1900],{}," 为动作空间，",[24883,24953,2381],{},[24883,24955,24956],{},"s ′ |s, a",") 为状态转移概率，",[24883,24959,2331],{}," 为奖励函数，",[24883,24962,24963],{},"Ω",[24883,24965,24966],{},"o|s, a",") 为观测概率，",[24883,24969,2257],{}," 为观测空间，",[24883,24972,24973],{},"γ"," 为折扣因子。",[14,24976,24978],{"id":24977},"_14动作空间","1.4.动作空间",[19,24980,24981,24982,24985],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[887,24983,24984],{},"动作空间"," ，动作空间分为:",[256,24987,24988,24991],{},[259,24989,24990],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[259,24992,24993],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24995,24997],{"id":24996},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24999,25000],{},"由策略、价值函数、模型三部分组成",[19,25002,25003],{},"这三者组成马尔可夫决策过程",[19,25005,25006],{},[2992,25007],{"alt":31,"src":25008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[1645,25010,25012],{"id":25011},"_151策略","1.5.1.策略",[19,25014,25015],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25017,25018],{},"策略可分为两种：",[19,25020,25021],{},[2992,25022],{"alt":31,"src":25023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25025,25026],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[1645,25028,25030],{"id":25029},"_152价值函数","1.5.2.价值函数",[19,25032,25033],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25035,25036],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25038,25039],{},[2992,25040],{"alt":31,"src":25041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25043,25044],{},"进入某个状态采取的最优动作可以通过Q函数得到",[1645,25046,25048],{"id":25047},"_153模型","1.5.3.模型",[19,25050,25051],{},[2992,25052],{"alt":31,"src":25053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25055,25057],{"id":25056},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1806,25059,25060,25071],{},[1809,25061,25062],{},[1812,25063,25064,25068],{},[1815,25065,25067],{"align":25066},"left","类型",[1815,25069,25070],{"align":25066},"特点",[1852,25072,25073,25083,25093,25103,25115],{},[1812,25074,25075,25080],{},[1857,25076,25077],{"align":25066},[887,25078,25079],{},"基于价值的智能体",[1857,25081,25082],{"align":25066},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1812,25084,25085,25090],{},[1857,25086,25087],{"align":25066},[887,25088,25089],{},"基于策略的智能体",[1857,25091,25092],{"align":25066},"直接学习策略，没有学习价值函数",[1812,25094,25095,25100],{},[1857,25096,25097],{"align":25066},[887,25098,25099],{},"演员-评论员智能体",[1857,25101,25102],{"align":25066},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1812,25104,25105,25110],{},[1857,25106,25107],{"align":25066},[887,25108,25109],{},"有模型强化学习智能体",[1857,25111,25112],{"align":25066},[2992,25113],{"alt":31,"src":25114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1812,25116,25117,25122],{},[1857,25118,25119],{"align":25066},[887,25120,25121],{},"免模型强化学习智能体",[1857,25123,25124],{"align":25066},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25126,25128],{"id":25127},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25130,25131],{},"学习和规划是序列决策的两个基本问题",[19,25133,25134],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25136,25137],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25139,25140],{},"强化学习用到的库：Gym",[19,25142,25143],{},"Gym可以检验强化学习算法的优劣",[19,25145,25146,25149],{},[887,25147,25148],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,25151,25155],{"className":25152,"code":25153,"language":25154,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[33,25156,25157],{"__ignoreMap":31},[36,25158,25159,25162,25165,25168],{"class":38,"line":39},[36,25160,25161],{"class":46},"pip",[36,25163,25164],{"class":110}," install",[36,25166,25167],{"class":110}," gym==",[36,25169,25170],{"class":73},"0.25.2\n",[19,25172,25173],{},"显示图形界面需要",[26,25175,25177],{"className":25152,"code":25176,"language":25154,"meta":31,"style":31},"pip install pygame\n",[33,25178,25179],{"__ignoreMap":31},[36,25180,25181,25183,25185],{"class":38,"line":39},[36,25182,25161],{"class":46},[36,25184,25164],{"class":110},[36,25186,25187],{"class":110}," pygame\n",[19,25189,25190,25191],{},"有关Gym库的相关文档介绍：",[1906,25192,25196],{"href":25193,"rel":25194},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25195],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25198,25200],{"id":25199},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25202,25203],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25205,25206],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25208,25209],{},[2992,25210],{"alt":31,"src":25211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25213,25214],{},"折扣率需要自己来设定",[19,25216,25217],{},[2992,25218],{"alt":31,"src":25219},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[256,25221,25222],{},[259,25223,25224],{},"状态转移函数：",[19,25226,25227],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25229,25230],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25232,25233],{},[2992,25234],{"alt":31,"src":25235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[256,25237,25238],{"start":54},[259,25239,25240],{},"动作价值函数：",[19,25242,25243],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25245,25246],{},[2992,25247],{"alt":31,"src":25248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[256,25250,25251],{"start":61},[259,25252,25253],{},"最优动作价值函数：",[19,25255,25256],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,25258,25259],{},[2992,25260],{"alt":31,"src":25261},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[256,25263,25264],{"start":80},[259,25265,25266],{},"状态价值函数:",[19,25268,25269],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25271,25272],{},"它衡量的是“一个具体动作”的长期价值",[19,25274,25275],{},[2992,25276],{"alt":31,"src":25277},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25279,25280],{},"几个价值函数之间的比较：",[19,25282,25283],{},[2992,25284],{"alt":31,"src":25285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1592,25287,25288],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":25290},[25291,25292,25293,25298,25299,25304,25305,25306],{"id":24723,"depth":54,"text":24724},{"id":24790,"depth":54,"text":24791},{"id":24827,"depth":54,"text":24828,"children":25294},[25295,25296,25297],{"id":24831,"depth":61,"text":24832},{"id":24846,"depth":61,"text":24847},{"id":24869,"depth":61,"text":24870},{"id":24977,"depth":54,"text":24978},{"id":24996,"depth":54,"text":24997,"children":25300},[25301,25302,25303],{"id":25011,"depth":61,"text":25012},{"id":25029,"depth":61,"text":25030},{"id":25047,"depth":61,"text":25048},{"id":25056,"depth":54,"text":25057},{"id":25127,"depth":54,"text":25128},{"id":25199,"depth":54,"text":25200},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24715,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25313,"title":25314,"body":25315,"description":25322,"extension":1603,"meta":25333,"navigation":57,"path":25334,"seo":25335,"stem":25336,"__hash__":25337},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25316,"toc":25331},[25317,25320,25323,25328],[10,25318,25314],{"id":25319},"_2马尔可夫决策过程",[19,25321,25322],{},"这是强化学习的基本框架",[19,25324,25325],{},[2992,25326],{"alt":31,"src":25327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25329,25330],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":54,"depth":54,"links":25332},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25314,"description":25322},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25339,"title":25340,"body":25341,"description":31,"extension":1603,"meta":25457,"navigation":57,"path":25458,"seo":25459,"stem":25460,"__hash__":25461},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25342,"toc":25452},[25343,25346,25350,25353,25358,25363,25366,25371,25374,25379,25382,25386,25391,25394,25399,25404,25409,25412,25416,25421,25424,25429,25434,25439,25444,25447],[10,25344,25340],{"id":25345},"_3动作价值函数",[14,25347,25349],{"id":25348},"_31dqn","3.1.DQN",[19,25351,25352],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25354,25355],{},[2992,25356],{"alt":31,"src":25357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25359,25360],{},[2992,25361],{"alt":31,"src":25362},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25364,25365],{},"DQN算法的描述：",[19,25367,25368],{},[2992,25369],{"alt":31,"src":25370},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25372,25373],{},"这里的Dense指的是全连接层",[19,25375,25376],{},[2992,25377],{"alt":31,"src":25378},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25380,25381],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,25383,25385],{"id":25384},"_32dqn的举例","3.2.DQN的举例",[19,25387,25388],{},[2992,25389],{"alt":31,"src":25390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25392,25393],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25395,25396],{},[2992,25397],{"alt":31,"src":25398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25400,25401],{},[2992,25402],{"alt":31,"src":25403},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25405,25406],{},[2992,25407],{"alt":31,"src":25408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25410,25411],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25413,25415],{"id":25414},"_33td算法","3.3.TD算法",[19,25417,25418],{},[2992,25419],{"alt":31,"src":25420},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25422,25423],{},"强化学习TD算法公式的粗略解释：",[19,25425,25426],{},[2992,25427],{"alt":31,"src":25428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25430,25431],{},[2992,25432],{"alt":31,"src":25433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25435,25436],{},[2992,25437],{"alt":31,"src":25438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25440,25441],{},[2992,25442],{"alt":31,"src":25443},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25445,25446],{},"TD算法总结：",[19,25448,25449],{},[2992,25450],{"alt":31,"src":25451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":54,"depth":54,"links":25453},[25454,25455,25456],{"id":25348,"depth":54,"text":25349},{"id":25384,"depth":54,"text":25385},{"id":25414,"depth":54,"text":25415},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25340,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25463,"title":25464,"body":25465,"description":31,"extension":1603,"meta":25698,"navigation":57,"path":25699,"seo":25700,"stem":25701,"__hash__":25702},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25466,"toc":25694},[25467,25470,25474,25477,25480,25485,25490,25493,25498,25503,25506,25511,25514,25519,25522,25527,25530,25535,25538,25543,25548,25551,25556,25559,25562,25567,25570,25575,25580,25584,25587,25590,25595,25600,25603,25608,25613,25616,25621,25624,25627,25632,25635,25640,25643,25648,25653,25656,25661,25666,25669,25674,25677,25682,25685],[10,25468,25464],{"id":25469},"_4策略学习",[14,25471,25473],{"id":25472},"_41概念描述","4.1.概念描述",[19,25475,25476],{},"用神经网络（策略网络）近似策略函数",[19,25478,25479],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25481,25482],{},[2992,25483],{"alt":31,"src":25484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25486,25487],{},[2992,25488],{"alt":31,"src":25489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25491,25492],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25494,25495],{},[2992,25496],{"alt":31,"src":25497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25499,25500],{},[2992,25501],{"alt":31,"src":25502},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25504,25505],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25507,25508],{},[2992,25509],{"alt":31,"src":25510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25512,25513],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25515,25516],{},[2992,25517],{"alt":31,"src":25518},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25520,25521],{},"改进theta要用到策略梯度算法",[19,25523,25524],{},[2992,25525],{"alt":31,"src":25526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25528,25529],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25531,25532],{},[2992,25533],{"alt":31,"src":25534},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25536,25537],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25539,25540],{},[2992,25541],{"alt":31,"src":25542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25544,25545],{},[2992,25546],{"alt":31,"src":25547},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25549,25550],{},"梯度公式总结：",[19,25552,25553],{},[2992,25554],{"alt":31,"src":25555},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25557,25558],{},"两个公式的分别应用场景：",[19,25560,25561],{},"对于离散的动作：",[19,25563,25564],{},[2992,25565],{"alt":31,"src":25566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25568,25569],{},"对于连续的动作：",[19,25571,25572],{},[2992,25573],{"alt":31,"src":25574},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25576,25577],{},[2992,25578],{"alt":31,"src":25579},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25581,25583],{"id":25582},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25585,25586],{},"使用蒙特卡洛来近似计算策略梯度",[19,25588,25589],{},"蒙特卡洛法的解释如下：",[19,25591,25592],{},[2992,25593],{"alt":31,"src":25594},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25596,25597],{},[2992,25598],{"alt":31,"src":25599},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25601,25602],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[256,25604,25605],{},[259,25606,25607],{},"方法一：reinforce算法",[19,25609,25610],{},[2992,25611],{"alt":31,"src":25612},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25614,25615],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[256,25617,25618],{"start":54},[259,25619,25620],{},"方法二：actor-critic算法",[19,25622,25623],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25625,25626],{},"两个网络的构建：",[19,25628,25629],{},[2992,25630],{"alt":31,"src":25631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25633,25634],{},"actor网路：",[19,25636,25637],{},[2992,25638],{"alt":31,"src":25639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25641,25642],{},"critic网络",[19,25644,25645],{},[2992,25646],{"alt":31,"src":25647},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[256,25649,25650],{"start":61},[259,25651,25652],{},"网络的训练",[19,25654,25655],{},"网络描述",[19,25657,25658],{},[2992,25659],{"alt":31,"src":25660},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25662,25663],{},[2992,25664],{"alt":31,"src":25665},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25667,25668],{},"TD算法更新梯度：",[19,25670,25671],{},[2992,25672],{"alt":31,"src":25673},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25675,25676],{},"策略网络更新梯度：",[19,25678,25679],{},[2992,25680],{"alt":31,"src":25681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25683,25684],{},"训练整个流程的具体描述：",[19,25686,25687,25690,25691],{},[2992,25688],{"alt":31,"src":25689},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[2992,25692],{"alt":31,"src":25693},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":54,"depth":54,"links":25695},[25696,25697],{"id":25472,"depth":54,"text":25473},{"id":25582,"depth":54,"text":25583},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25464,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25704,"title":25705,"body":25706,"description":25713,"extension":1603,"meta":25763,"navigation":57,"path":25764,"seo":25765,"stem":25766,"__hash__":25767},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25707,"toc":25759},[25708,25711,25714,25718,25721,25726,25730,25733,25738,25741,25746,25751,25754],[10,25709,25705],{"id":25710},"_5alphago算法",[19,25712,25713],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25715,25717],{"id":25716},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25719,25720],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25722,25723],{},[2992,25724],{"alt":31,"src":25725},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25727,25729],{"id":25728},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25731,25732],{},"采用强化学习的方式训练策略网络",[19,25734,25735],{},[2992,25736],{"alt":31,"src":25737},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25739,25740],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25742,25743],{},[2992,25744],{"alt":31,"src":25745},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25747,25748],{},[2992,25749],{"alt":31,"src":25750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25752,25753],{},"强化学习训练策略网络的总结：",[19,25755,25756],{},[2992,25757],{"alt":31,"src":25758},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":54,"depth":54,"links":25760},[25761,25762],{"id":25716,"depth":54,"text":25717},{"id":25728,"depth":54,"text":25729},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25705,"description":25713},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25769,"title":25770,"body":25771,"description":25778,"extension":1603,"meta":25781,"navigation":57,"path":25782,"seo":25783,"stem":25784,"__hash__":25785},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25772,"toc":25779},[25773,25776],[10,25774,25770],{"id":25775},"_6价值网络",[19,25777,25778],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":54,"depth":54,"links":25780},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25770,"description":25778},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25787,"title":25788,"body":25789,"description":25793,"extension":1603,"meta":25794,"navigation":57,"path":25795,"seo":25796,"stem":25797,"__hash__":25798},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25790,"toc":25791},[],{"title":31,"searchDepth":54,"depth":54,"links":25792},[],"记录自己的强化学习笔记。",{"category":24708},"\u002Fwiki\u002F2025-12-04",{"title":25788,"description":25793},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25800,"title":25801,"body":25802,"description":24706,"extension":1603,"meta":25841,"navigation":57,"path":25842,"seo":25843,"stem":25844,"__hash__":25845},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25803,"toc":25839},[25804,25807,25810,25816,25819,25825,25828,25833,25836],[10,25805,25801],{"id":25806},"_1-项目概览与官方资源",[19,25808,25809],{},"官方文档：",[19,25811,25812],{},[1906,25813,25814],{"href":25814,"rel":25815},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25195],[19,25817,25818],{},"官方代码仓库：",[19,25820,25821],{},[1906,25822,25823],{"href":25823,"rel":25824},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25195],[19,25826,25827],{},"复现大体流程：",[19,25829,25830],{},[2992,25831],{"alt":31,"src":25832},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25834,25835],{},"本教程的目标是打通这条链路：",[19,25837,25838],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":54,"depth":54,"links":25840},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25801,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25847,"title":25848,"body":25849,"description":24706,"extension":1603,"meta":25965,"navigation":57,"path":25966,"seo":25967,"stem":25968,"__hash__":25969},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25850,"toc":25960},[25851,25854,25858,25861,25868,25872,25875,25884,25894,25898,25928,25931,25957],[10,25852,25848],{"id":25853},"_2-环境准备与设备连接",[14,25855,25857],{"id":25856},"_21-系统与环境","2.1 系统与环境",[19,25859,25860],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25862,25863,25864,25867],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[33,25865,25866],{},"lerobot"," 依赖。",[14,25869,25871],{"id":25870},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25873,25874],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,25876,25878],{"className":25152,"code":25877,"language":25154,"meta":31,"style":31},"lerobot-find-out\n",[33,25879,25880],{"__ignoreMap":31},[36,25881,25882],{"class":38,"line":39},[36,25883,25877],{"class":46},[19,25885,25886,25887,1880,25890,25893],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[33,25888,25889],{},"\u002Fdev\u002FttyACM0",[33,25891,25892],{},"\u002Fdev\u002FttyACM1","）。",[14,25895,25897],{"id":25896},"_23-串口授权","2.3 串口授权",[26,25899,25901],{"className":25152,"code":25900,"language":25154,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[33,25902,25903,25917],{"__ignoreMap":31},[36,25904,25905,25908,25911,25914],{"class":38,"line":39},[36,25906,25907],{"class":46},"sudo",[36,25909,25910],{"class":110}," chmod",[36,25912,25913],{"class":73}," 666",[36,25915,25916],{"class":110}," \u002Fdev\u002FttyACM0\n",[36,25918,25919,25921,25923,25925],{"class":38,"line":54},[36,25920,25907],{"class":46},[36,25922,25910],{"class":110},[36,25924,25913],{"class":73},[36,25926,25927],{"class":110}," \u002Fdev\u002FttyACM1\n",[19,25929,25930],{},"说明：",[2674,25932,25933,25938,25944,25954],{},[259,25934,25935,25937],{},[33,25936,25907],{},"：以 root 权限执行命令。",[259,25939,25940,25943],{},[33,25941,25942],{},"chmod","：修改设备节点权限。",[259,25945,25946,25949,25950,25953],{},[33,25947,25948],{},"666","：",[33,25951,25952],{},"rw-rw-rw-","，所有用户可读写。",[259,25955,25956],{},"串口号必须替换为你机器上的真实端口。",[1592,25958,25959],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":25961},[25962,25963,25964],{"id":25856,"depth":54,"text":25857},{"id":25870,"depth":54,"text":25871},{"id":25896,"depth":54,"text":25897},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25848,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25971,"title":25972,"body":25973,"description":24706,"extension":1603,"meta":26134,"navigation":57,"path":26135,"seo":26136,"stem":26137,"__hash__":26138},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25974,"toc":26130},[25975,25979,25983,25989,25992,26049,26052,26056,26059,26127],[10,25976,25978],{"id":25977},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25980,25982],{"id":25981},"_31-配置电机-id","3.1 配置电机 ID",[19,25984,25985,25986,25988],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[33,25987,1885],{},"，需要改成机械臂链路里不冲突的编号。",[19,25990,25991],{},"方式一：用 LeRobot 命令逐步写入。",[26,25993,25995],{"className":25152,"code":25994,"language":25154,"meta":31,"style":31},"# 主臂舵机配置 ID\nlerobot-setup-motors \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0\n\n# 从臂舵机配置 ID\nlerobot-setup-motors \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1\n",[33,25996,25997,26002,26010,26017,26022,26026,26031,26037,26044],{"__ignoreMap":31},[36,25998,25999],{"class":38,"line":39},[36,26000,26001],{"class":124},"# 主臂舵机配置 ID\n",[36,26003,26004,26007],{"class":38,"line":54},[36,26005,26006],{"class":46},"lerobot-setup-motors",[36,26008,26009],{"class":73}," \\\n",[36,26011,26012,26015],{"class":38,"line":61},[36,26013,26014],{"class":73},"  --teleop.type=so101_leader",[36,26016,26009],{"class":73},[36,26018,26019],{"class":38,"line":80},[36,26020,26021],{"class":73},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[36,26023,26024],{"class":38,"line":96},[36,26025,58],{"emptyLinePlaceholder":57},[36,26027,26028],{"class":38,"line":101},[36,26029,26030],{"class":124},"# 从臂舵机配置 ID\n",[36,26032,26033,26035],{"class":38,"line":128},[36,26034,26006],{"class":46},[36,26036,26009],{"class":73},[36,26038,26039,26042],{"class":38,"line":149},[36,26040,26041],{"class":73},"  --robot.type=so101_follower",[36,26043,26009],{"class":73},[36,26045,26046],{"class":38,"line":154},[36,26047,26048],{"class":73},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26050,26051],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26053,26055],{"id":26054},"_32-机械臂校准","3.2 机械臂校准",[19,26057,26058],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,26060,26062],{"className":25152,"code":26061,"language":25154,"meta":31,"style":31},"# 主臂校准\nlerobot-calibrate \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n\n# 从臂校准\nlerobot-calibrate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm\n",[33,26063,26064,26069,26076,26082,26089,26094,26098,26103,26109,26115,26122],{"__ignoreMap":31},[36,26065,26066],{"class":38,"line":39},[36,26067,26068],{"class":124},"# 主臂校准\n",[36,26070,26071,26074],{"class":38,"line":54},[36,26072,26073],{"class":46},"lerobot-calibrate",[36,26075,26009],{"class":73},[36,26077,26078,26080],{"class":38,"line":61},[36,26079,26014],{"class":73},[36,26081,26009],{"class":73},[36,26083,26084,26087],{"class":38,"line":80},[36,26085,26086],{"class":73},"  --teleop.port=\u002Fdev\u002FttyACM0",[36,26088,26009],{"class":73},[36,26090,26091],{"class":38,"line":96},[36,26092,26093],{"class":73},"  --teleop.id=my_awesome_leader_arm\n",[36,26095,26096],{"class":38,"line":101},[36,26097,58],{"emptyLinePlaceholder":57},[36,26099,26100],{"class":38,"line":128},[36,26101,26102],{"class":124},"# 从臂校准\n",[36,26104,26105,26107],{"class":38,"line":149},[36,26106,26073],{"class":46},[36,26108,26009],{"class":73},[36,26110,26111,26113],{"class":38,"line":154},[36,26112,26041],{"class":73},[36,26114,26009],{"class":73},[36,26116,26117,26120],{"class":38,"line":167},[36,26118,26119],{"class":73},"  --robot.port=\u002Fdev\u002FttyACM1",[36,26121,26009],{"class":73},[36,26123,26124],{"class":38,"line":172},[36,26125,26126],{"class":73},"  --robot.id=my_awesome_follower_arm\n",[1592,26128,26129],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":26131},[26132,26133],{"id":25981,"depth":54,"text":25982},{"id":26054,"depth":54,"text":26055},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25972,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26140,"title":26141,"body":26142,"description":24706,"extension":1603,"meta":26333,"navigation":57,"path":26334,"seo":26335,"stem":26336,"__hash__":26337},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26143,"toc":26329},[26144,26147,26151,26198,26202,26215,26278,26281,26326],[10,26145,26141],{"id":26146},"_4-遥操与相机接入",[14,26148,26150],{"id":26149},"_41-不带相机遥操","4.1 不带相机遥操",[26,26152,26154],{"className":25152,"code":26153,"language":25154,"meta":31,"style":31},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm\n",[33,26155,26156,26163,26169,26175,26182,26188,26194],{"__ignoreMap":31},[36,26157,26158,26161],{"class":38,"line":39},[36,26159,26160],{"class":46},"lerobot-teleoperate",[36,26162,26009],{"class":73},[36,26164,26165,26167],{"class":38,"line":54},[36,26166,26041],{"class":73},[36,26168,26009],{"class":73},[36,26170,26171,26173],{"class":38,"line":61},[36,26172,26119],{"class":73},[36,26174,26009],{"class":73},[36,26176,26177,26180],{"class":38,"line":80},[36,26178,26179],{"class":73},"  --robot.id=my_awesome_follower_arm",[36,26181,26009],{"class":73},[36,26183,26184,26186],{"class":38,"line":96},[36,26185,26014],{"class":73},[36,26187,26009],{"class":73},[36,26189,26190,26192],{"class":38,"line":101},[36,26191,26086],{"class":73},[36,26193,26009],{"class":73},[36,26195,26196],{"class":38,"line":128},[36,26197,26093],{"class":73},[14,26199,26201],{"id":26200},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,26203,26205],{"className":25152,"code":26204,"language":25154,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[33,26206,26207],{"__ignoreMap":31},[36,26208,26209,26212],{"class":38,"line":39},[36,26210,26211],{"class":46},"lerobot-find-cameras",[36,26213,26214],{"class":110}," opencv\n",[26,26216,26218],{"className":25152,"code":26217,"language":25154,"meta":31,"style":31},"lerobot-teleoperate \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true\n",[33,26219,26220,26226,26232,26238,26244,26254,26260,26266,26273],{"__ignoreMap":31},[36,26221,26222,26224],{"class":38,"line":39},[36,26223,26160],{"class":46},[36,26225,26009],{"class":73},[36,26227,26228,26230],{"class":38,"line":54},[36,26229,26041],{"class":73},[36,26231,26009],{"class":73},[36,26233,26234,26236],{"class":38,"line":61},[36,26235,26119],{"class":73},[36,26237,26009],{"class":73},[36,26239,26240,26242],{"class":38,"line":80},[36,26241,26179],{"class":73},[36,26243,26009],{"class":73},[36,26245,26246,26249,26252],{"class":38,"line":96},[36,26247,26248],{"class":73},"  --robot.cameras=",[36,26250,26251],{"class":110},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[36,26253,26009],{"class":73},[36,26255,26256,26258],{"class":38,"line":101},[36,26257,26014],{"class":73},[36,26259,26009],{"class":73},[36,26261,26262,26264],{"class":38,"line":128},[36,26263,26086],{"class":73},[36,26265,26009],{"class":73},[36,26267,26268,26271],{"class":38,"line":149},[36,26269,26270],{"class":73},"  --teleop.id=my_awesome_leader_arm",[36,26272,26009],{"class":73},[36,26274,26275],{"class":38,"line":154},[36,26276,26277],{"class":73},"  --display_data=true\n",[19,26279,26280],{},"相机参数说明：",[2674,26282,26283,26289,26295,26304,26314,26320],{},[259,26284,26285,26288],{},[33,26286,26287],{},"front","：相机名称。",[259,26290,26291,26294],{},[33,26292,26293],{},"type: opencv","：相机驱动类型。",[259,26296,26297,26300,26301,25893],{},[33,26298,26299],{},"index_or_path","：设备编号或设备路径（如 ",[33,26302,26303],{},"\u002Fdev\u002Fvideo4",[259,26305,26306,26309,26310,26313],{},[33,26307,26308],{},"width"," \u002F ",[33,26311,26312],{},"height","：图像分辨率。",[259,26315,26316,26319],{},[33,26317,26318],{},"fps","：采样帧率。",[259,26321,26322,26325],{},[33,26323,26324],{},"--display_data=true","：启用实时可视化。",[1592,26327,26328],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":26330},[26331,26332],{"id":26149,"depth":54,"text":26150},{"id":26200,"depth":54,"text":26201},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26141,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26339,"title":26340,"body":26341,"description":24706,"extension":1603,"meta":26513,"navigation":57,"path":26514,"seo":26515,"stem":26516,"__hash__":26517},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26342,"toc":26508},[26343,26347,26351,26356,26361,26364,26406,26412,26416,26465,26470,26474,26477,26485,26490,26495,26500,26505],[10,26344,26346],{"id":26345},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26348,26350],{"id":26349},"_51-生成访问令牌","5.1 生成访问令牌",[19,26352,26353],{},[2992,26354],{"alt":31,"src":26355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26357,26358],{},[2992,26359],{"alt":31,"src":26360},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26362,26363],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,26365,26367],{"className":25152,"code":26366,"language":25154,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[33,26368,26369,26382],{"__ignoreMap":31},[36,26370,26371,26374,26377,26379],{"class":38,"line":39},[36,26372,26373],{"class":42},"export",[36,26375,26376],{"class":50}," HF_TOKEN",[36,26378,70],{"class":42},[36,26380,26381],{"class":110},"\"your_huggingface_token\"\n",[36,26383,26384,26387,26390,26393,26396,26398,26401,26403],{"class":38,"line":54},[36,26385,26386],{"class":46},"hf",[36,26388,26389],{"class":110}," auth",[36,26391,26392],{"class":110}," login",[36,26394,26395],{"class":73}," --token",[36,26397,11192],{"class":110},[36,26399,26400],{"class":50},"$HF_TOKEN",[36,26402,1919],{"class":110},[36,26404,26405],{"class":73}," --add-to-git-credential\n",[19,26407,26408,26411],{},[33,26409,26410],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26413,26415],{"id":26414},"_52-验证登录","5.2 验证登录",[26,26417,26419],{"className":25152,"code":26418,"language":25154,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[33,26420,26421,26452],{"__ignoreMap":31},[36,26422,26423,26426,26428,26431,26433,26435,26438,26441,26444,26447,26450],{"class":38,"line":39},[36,26424,26425],{"class":50},"HF_USER",[36,26427,70],{"class":42},[36,26429,26430],{"class":50},"$(",[36,26432,26386],{"class":46},[36,26434,26389],{"class":110},[36,26436,26437],{"class":110}," whoami",[36,26439,26440],{"class":42}," |",[36,26442,26443],{"class":46}," head",[36,26445,26446],{"class":73}," -n",[36,26448,26449],{"class":73}," 1",[36,26451,1680],{"class":50},[36,26453,26454,26457,26459,26462],{"class":38,"line":54},[36,26455,26456],{"class":73},"echo",[36,26458,11192],{"class":110},[36,26460,26461],{"class":50},"$HF_USER",[36,26463,26464],{"class":110},"\"\n",[19,26466,26467],{},[2992,26468],{"alt":31,"src":26469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26471,26473],{"id":26472},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26475,26476],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2674,26478,26479,26482],{},[259,26480,26481],{},"Dataset Repo（用于上传演示数据）",[259,26483,26484],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26486,26487],{},[2992,26488],{"alt":31,"src":26489},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26491,26492],{},[2992,26493],{"alt":31,"src":26494},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26496,26497],{},[2992,26498],{"alt":31,"src":26499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26501,26502],{},[2992,26503],{"alt":31,"src":26504},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1592,26506,26507],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":26509},[26510,26511,26512],{"id":26349,"depth":54,"text":26350},{"id":26414,"depth":54,"text":26415},{"id":26472,"depth":54,"text":26473},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26340,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26519,"title":26520,"body":26521,"description":24706,"extension":1603,"meta":26718,"navigation":57,"path":26719,"seo":26720,"stem":26721,"__hash__":26722},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26522,"toc":26713},[26523,26527,26531,26627,26635,26640,26644,26660,26663,26667,26710],[10,26524,26526],{"id":26525},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26528,26530],{"id":26529},"_61-录制示教数据","6.1 录制示教数据",[26,26532,26534],{"className":25152,"code":26533,"language":25154,"meta":31,"style":31},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --teleop.type=so101_leader \\\n  --teleop.port=\u002Fdev\u002FttyACM0 \\\n  --teleop.id=my_awesome_leader_arm \\\n  --display_data=true \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.num_episodes=10 \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --resume=true\n",[33,26535,26536,26543,26549,26555,26561,26570,26576,26582,26588,26595,26605,26612,26622],{"__ignoreMap":31},[36,26537,26538,26541],{"class":38,"line":39},[36,26539,26540],{"class":46},"lerobot-record",[36,26542,26009],{"class":73},[36,26544,26545,26547],{"class":38,"line":54},[36,26546,26041],{"class":73},[36,26548,26009],{"class":73},[36,26550,26551,26553],{"class":38,"line":61},[36,26552,26119],{"class":73},[36,26554,26009],{"class":73},[36,26556,26557,26559],{"class":38,"line":80},[36,26558,26179],{"class":73},[36,26560,26009],{"class":73},[36,26562,26563,26565,26568],{"class":38,"line":96},[36,26564,26248],{"class":73},[36,26566,26567],{"class":110},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[36,26569,26009],{"class":73},[36,26571,26572,26574],{"class":38,"line":101},[36,26573,26014],{"class":73},[36,26575,26009],{"class":73},[36,26577,26578,26580],{"class":38,"line":128},[36,26579,26086],{"class":73},[36,26581,26009],{"class":73},[36,26583,26584,26586],{"class":38,"line":149},[36,26585,26270],{"class":73},[36,26587,26009],{"class":73},[36,26589,26590,26593],{"class":38,"line":154},[36,26591,26592],{"class":73},"  --display_data=true",[36,26594,26009],{"class":73},[36,26596,26597,26600,26603],{"class":38,"line":167},[36,26598,26599],{"class":73},"  --dataset.repo_id=",[36,26601,26602],{"class":110},"\"Embodied-AI-6\u002Fso101_test\"",[36,26604,26009],{"class":73},[36,26606,26607,26610],{"class":38,"line":172},[36,26608,26609],{"class":73},"  --dataset.num_episodes=10",[36,26611,26009],{"class":73},[36,26613,26614,26617,26620],{"class":38,"line":192},[36,26615,26616],{"class":73},"  --dataset.single_task=",[36,26618,26619],{"class":110},"\"Grab the green cube\"",[36,26621,26009],{"class":73},[36,26623,26624],{"class":38,"line":211},[36,26625,26626],{"class":73},"  --resume=true\n",[2674,26628,26629],{},[259,26630,26631,26634],{},[33,26632,26633],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26636,26637],{},[2992,26638],{"alt":31,"src":26639},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26641,26643],{"id":26642},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,26645,26647],{"className":25152,"code":26646,"language":25154,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[33,26648,26649],{"__ignoreMap":31},[36,26650,26651,26654,26657],{"class":38,"line":39},[36,26652,26653],{"class":46},"rm",[36,26655,26656],{"class":73}," -rf",[36,26658,26659],{"class":110}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26661,26662],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26664,26666],{"id":26665},"_63-回放指定-episode","6.3 回放指定 episode",[26,26668,26670],{"className":25152,"code":26669,"language":25154,"meta":31,"style":31},"lerobot-replay \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.id=my_awesome_follower_arm \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.episode=0\n",[33,26671,26672,26679,26685,26691,26697,26705],{"__ignoreMap":31},[36,26673,26674,26677],{"class":38,"line":39},[36,26675,26676],{"class":46},"lerobot-replay",[36,26678,26009],{"class":73},[36,26680,26681,26683],{"class":38,"line":54},[36,26682,26041],{"class":73},[36,26684,26009],{"class":73},[36,26686,26687,26689],{"class":38,"line":61},[36,26688,26119],{"class":73},[36,26690,26009],{"class":73},[36,26692,26693,26695],{"class":38,"line":80},[36,26694,26179],{"class":73},[36,26696,26009],{"class":73},[36,26698,26699,26701,26703],{"class":38,"line":96},[36,26700,26599],{"class":73},[36,26702,26602],{"class":110},[36,26704,26009],{"class":73},[36,26706,26707],{"class":38,"line":101},[36,26708,26709],{"class":73},"  --dataset.episode=0\n",[1592,26711,26712],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":26714},[26715,26716,26717],{"id":26529,"depth":54,"text":26530},{"id":26642,"depth":54,"text":26643},{"id":26665,"depth":54,"text":26666},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26520,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26724,"title":26725,"body":26726,"description":24706,"extension":1603,"meta":26854,"navigation":57,"path":26855,"seo":26856,"stem":26857,"__hash__":26858},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26727,"toc":26852},[26728,26732,26795,26798,26845,26850],[10,26729,26731],{"id":26730},"_7-act-模型训练","7. ACT 模型训练",[26,26733,26735],{"className":25152,"code":26734,"language":25154,"meta":31,"style":31},"lerobot-train \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --policy.type=act \\\n  --output_dir=outputs\u002Ftrain\u002Fact_so101_test \\\n  --job_name=act_so101_test \\\n  --policy.device=cuda \\\n  --wandb.enable=false \\\n  --policy.repo_id=\"Embodied-AI-6\u002Flerobot_new\"\n",[33,26736,26737,26744,26752,26759,26766,26773,26780,26787],{"__ignoreMap":31},[36,26738,26739,26742],{"class":38,"line":39},[36,26740,26741],{"class":46},"lerobot-train",[36,26743,26009],{"class":73},[36,26745,26746,26748,26750],{"class":38,"line":54},[36,26747,26599],{"class":73},[36,26749,26602],{"class":110},[36,26751,26009],{"class":73},[36,26753,26754,26757],{"class":38,"line":61},[36,26755,26756],{"class":73},"  --policy.type=act",[36,26758,26009],{"class":73},[36,26760,26761,26764],{"class":38,"line":80},[36,26762,26763],{"class":73},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[36,26765,26009],{"class":73},[36,26767,26768,26771],{"class":38,"line":96},[36,26769,26770],{"class":73},"  --job_name=act_so101_test",[36,26772,26009],{"class":73},[36,26774,26775,26778],{"class":38,"line":101},[36,26776,26777],{"class":73},"  --policy.device=cuda",[36,26779,26009],{"class":73},[36,26781,26782,26785],{"class":38,"line":128},[36,26783,26784],{"class":73},"  --wandb.enable=false",[36,26786,26009],{"class":73},[36,26788,26789,26792],{"class":38,"line":149},[36,26790,26791],{"class":73},"  --policy.repo_id=",[36,26793,26794],{"class":110},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26796,26797],{},"参数说明：",[2674,26799,26800,26806,26812,26818,26824,26833,26839],{},[259,26801,26802,26805],{},[33,26803,26804],{},"--dataset.repo_id","：训练数据集仓库。",[259,26807,26808,26811],{},[33,26809,26810],{},"--policy.type=act","：策略模型类型为 ACT。",[259,26813,26814,26817],{},[33,26815,26816],{},"--output_dir","：本地训练输出目录。",[259,26819,26820,26823],{},[33,26821,26822],{},"--job_name","：训练任务名称。",[259,26825,26826,26829,26830,25893],{},[33,26827,26828],{},"--policy.device","：训练设备（如 ",[33,26831,26832],{},"cuda",[259,26834,26835,26838],{},[33,26836,26837],{},"--wandb.enable","：是否启用 WandB 可视化。",[259,26840,26841,26844],{},[33,26842,26843],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26846,26847],{},[2992,26848],{"alt":31,"src":26849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1592,26851,26712],{},{"title":31,"searchDepth":54,"depth":54,"links":26853},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26725,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26860,"title":26861,"body":26862,"description":24706,"extension":1603,"meta":26949,"navigation":57,"path":26950,"seo":26951,"stem":26952,"__hash__":26953},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26863,"toc":26947},[26864,26867,26870,26937,26945],[10,26865,26861],{"id":26866},"_8-策略部署与自动采集",[19,26868,26869],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,26871,26873],{"className":25152,"code":26872,"language":25154,"meta":31,"style":31},"lerobot-record \\\n  --robot.type=so101_follower \\\n  --robot.port=\u002Fdev\u002FttyACM1 \\\n  --robot.cameras=\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\" \\\n  --robot.id=my_awesome_follower_arm \\\n  --display_data=false \\\n  --dataset.repo_id=\"Embodied-AI-6\u002Fso101_test\" \\\n  --dataset.single_task=\"Grab the green cube\" \\\n  --policy.path=\"Embodied-AI-6\u002Flerobot_new\"\n",[33,26874,26875,26881,26887,26893,26901,26907,26914,26922,26930],{"__ignoreMap":31},[36,26876,26877,26879],{"class":38,"line":39},[36,26878,26540],{"class":46},[36,26880,26009],{"class":73},[36,26882,26883,26885],{"class":38,"line":54},[36,26884,26041],{"class":73},[36,26886,26009],{"class":73},[36,26888,26889,26891],{"class":38,"line":61},[36,26890,26119],{"class":73},[36,26892,26009],{"class":73},[36,26894,26895,26897,26899],{"class":38,"line":80},[36,26896,26248],{"class":73},[36,26898,26567],{"class":110},[36,26900,26009],{"class":73},[36,26902,26903,26905],{"class":38,"line":96},[36,26904,26179],{"class":73},[36,26906,26009],{"class":73},[36,26908,26909,26912],{"class":38,"line":101},[36,26910,26911],{"class":73},"  --display_data=false",[36,26913,26009],{"class":73},[36,26915,26916,26918,26920],{"class":38,"line":128},[36,26917,26599],{"class":73},[36,26919,26602],{"class":110},[36,26921,26009],{"class":73},[36,26923,26924,26926,26928],{"class":38,"line":149},[36,26925,26616],{"class":73},[36,26927,26619],{"class":110},[36,26929,26009],{"class":73},[36,26931,26932,26935],{"class":38,"line":154},[36,26933,26934],{"class":73},"  --policy.path=",[36,26936,26794],{"class":110},[2674,26938,26939],{},[259,26940,26941,26944],{},[33,26942,26943],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1592,26946,26712],{},{"title":31,"searchDepth":54,"depth":54,"links":26948},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26861,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26955,"title":26956,"body":26957,"description":24706,"extension":1603,"meta":26986,"navigation":57,"path":26987,"seo":26988,"stem":26989,"__hash__":26990},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26958,"toc":26984},[26959,26963,26966,26972,26975,26981],[10,26960,26962],{"id":26961},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26964,26965],{},"项目地址：",[19,26967,26968],{},[1906,26969,26970],{"href":26970,"rel":26971},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25195],[19,26973,26974],{},"参考教程：",[19,26976,26977],{},[1906,26978,26979],{"href":26979,"rel":26980},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25195],[19,26982,26983],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":54,"depth":54,"links":26985},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26956,"description":24706},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26992,"title":26993,"body":26994,"description":26998,"extension":1603,"meta":26999,"navigation":57,"path":27000,"seo":27001,"stem":27002,"__hash__":27003},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26995,"toc":26996},[],{"title":31,"searchDepth":54,"depth":54,"links":26997},[],"act复现",{"category":24708},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26993,"description":26998},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27005,"title":27006,"body":27007,"description":31,"extension":1603,"meta":27309,"navigation":57,"path":27310,"seo":27311,"stem":27312,"__hash__":27313},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27008,"toc":27301},[27009,27012,27016,27026,27033,27040,27043,27050,27053,27056,27060,27072,27076,27122,27125,27128,27131,27134,27137,27141,27179,27185,27189,27243,27248,27251,27254,27259,27262,27267,27270,27273,27277,27280,27283,27287],[10,27010,27006],{"id":27011},"_1简介",[1645,27013,27015],{"id":27014},"_11什么是-docker","1.1什么是 Docker？",[19,27017,27018,27019,27022,27023],{},"Docker 是一个开源的 ",[887,27020,27021],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[887,27024,27025],{},"一次构建，到处运行。",[19,27027,27028,27029,27032],{},"“ ",[887,27030,27031],{},"一次构建，到处运行"," ”也就是说：",[256,27034,27035],{},[259,27036,27037],{},[887,27038,27039],{},"之前：",[19,27041,27042],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[256,27044,27045],{},[259,27046,27047],{},[887,27048,27049],{},"使用docker后：",[19,27051,27052],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27054,27055],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[1645,27057,27059],{"id":27058},"_12它是怎么工作的","1.2.它是怎么工作的？",[2674,27061,27062,27065],{},[259,27063,27064],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[259,27066,27067,27068,27071],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[887,27069,27070],{},"无论在哪运行都一样稳定"," 。",[1645,27073,27075],{"id":27074},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1806,27077,27078,27088],{},[1809,27079,27080],{},[1812,27081,27082,27085],{},[1815,27083,27084],{"align":25066},"概念",[1815,27086,27087],{"align":25066},"解释",[1852,27089,27090,27098,27106,27114],{},[1812,27091,27092,27095],{},[1857,27093,27094],{"align":25066},"镜像",[1857,27096,27097],{"align":25066},"Image，运行容器的模板，像是一个应用快照",[1812,27099,27100,27103],{},[1857,27101,27102],{"align":25066},"容器",[1857,27104,27105],{"align":25066},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1812,27107,27108,27111],{},[1857,27109,27110],{"align":25066},"Dockerfile",[1857,27112,27113],{"align":25066},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1812,27115,27116,27119],{},[1857,27117,27118],{"align":25066},"仓库",[1857,27120,27121],{"align":25066},"Registry，存放镜像的地方，比如 Docker Hub",[19,27123,27124],{},"抽象化理解:",[19,27126,27127],{},"Docker镜像≈C++类",[19,27129,27130],{},"Docker容器≈C++类实例(即对象)",[19,27132,27133],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27135,27136],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[1645,27138,27140],{"id":27139},"_14类比理解","1.4.类比理解",[1806,27142,27143,27153],{},[1809,27144,27145],{},[1812,27146,27147,27150],{},[1815,27148,27149],{"align":25066},"传统部署",[1815,27151,27152],{"align":25066},"Docker部署",[1852,27154,27155,27163,27171],{},[1812,27156,27157,27160],{},[1857,27158,27159],{"align":25066},"手动安装依赖、调试版本不一致问题",[1857,27161,27162],{"align":25066},"一次打包环境和代码",[1812,27164,27165,27168],{},[1857,27166,27167],{"align":25066},"程序“裸奔”跑在系统上",[1857,27169,27170],{"align":25066},"程序“穿着容器”隔离运行",[1812,27172,27173,27176],{},[1857,27174,27175],{"align":25066},"容易“在我电脑上能跑”",[1857,27177,27178],{"align":25066},"保证“无论在哪都能跑”",[19,27180,27181,27182],{},"就像快递包裹： ",[887,27183,27184],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[1645,27186,27188],{"id":27187},"_15docker-的核心优势","1.5.Docker 的核心优势",[1806,27190,27191,27201],{},[1809,27192,27193],{},[1812,27194,27195,27198],{},[1815,27196,27197],{"align":25066},"优势",[1815,27199,27200],{"align":25066},"说明",[1852,27202,27203,27211,27219,27227,27235],{},[1812,27204,27205,27208],{},[1857,27206,27207],{"align":25066},"轻量级",[1857,27209,27210],{"align":25066},"基于系统内核共享，启动速度快，占资源少",[1812,27212,27213,27216],{},[1857,27214,27215],{"align":25066},"跨平台",[1857,27217,27218],{"align":25066},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1812,27220,27221,27224],{},[1857,27222,27223],{"align":25066},"易于迁移部署",[1857,27225,27226],{"align":25066},"应用和环境一起封装，不怕依赖不一致",[1812,27228,27229,27232],{},[1857,27230,27231],{"align":25066},"易于版本控制",[1857,27233,27234],{"align":25066},"镜像版本可控，支持回滚",[1812,27236,27237,27240],{},[1857,27238,27239],{"align":25066},"生态丰富",[1857,27241,27242],{"align":25066},"Docker Hub 上有成千上万的现成镜像可用",[256,27244,27245],{},[259,27246,27247],{},"在Linux上可以几乎实现无性能损失。",[19,27249,27250],{},"docker里的发行版和本机共用Linux内核。",[19,27252,27253],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[256,27255,27256],{},[259,27257,27258],{},"可以快速部署在绝大多数Linux发行版",[19,27260,27261],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[256,27263,27264],{},[259,27265,27266],{},"配置环境简单",[19,27268,27269],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27271,27272],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[256,27274,27275],{},[259,27276,27239],{},[19,27278,27279],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27281,27282],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[1645,27284,27286],{"id":27285},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2674,27288,27289,27292,27295,27298],{},[259,27290,27291],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[259,27293,27294],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[259,27296,27297],{},"微服务架构：每个服务一个容器，灵活组合",[259,27299,27300],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":54,"depth":54,"links":27302},[27303,27304,27305,27306,27307,27308],{"id":27014,"depth":61,"text":27015},{"id":27058,"depth":61,"text":27059},{"id":27074,"depth":61,"text":27075},{"id":27139,"depth":61,"text":27140},{"id":27187,"depth":61,"text":27188},{"id":27285,"depth":61,"text":27286},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27006,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27315,"title":27316,"body":27317,"description":31,"extension":1603,"meta":28050,"navigation":57,"path":28051,"seo":28052,"stem":28053,"__hash__":28054},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27318,"toc":28045},[27319,27322,27326,27329,27332,27338,27344,27348,27357,27360,27417,27420,27471,27474,27557,27560,27597,27601,27612,27625,27632,27635,27715,27718,27768,27771,27794,27798,27805,27808,27824,27830,27833,27849,27855,27858,27874,27888,27894,27914,27920,27923,27935,27941,27944,27958,27964,27967,27987,27992,27995,27998,28002,28005,28008,28011,28018,28021,28024,28027,28032,28037,28042],[10,27320,27316],{"id":27321},"_2安装docker",[1645,27323,27325],{"id":27324},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27327,27328],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27330,27331],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27333,27334],{},[1906,27335,27336],{"href":27336,"rel":27337},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25195],[19,27339,27340],{},[1906,27341,27342],{"href":27342,"rel":27343},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25195],[23327,27345,27347],{"id":27346},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27349,27350,27351,27356],{},"以下内容根据 ",[1906,27352,27355],{"href":27353,"rel":27354},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25195],"官方文档"," 修改而来。",[19,27358,27359],{},"如果你过去安装过 docker，先删掉：",[26,27361,27363],{"className":25152,"code":27362,"language":25154,"meta":31,"style":31},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[33,27364,27365],{"__ignoreMap":31},[36,27366,27367,27369,27372,27375,27378,27381,27384,27387,27390,27393,27396,27399,27402,27405,27408,27411,27414],{"class":38,"line":39},[36,27368,4516],{"class":42},[36,27370,27371],{"class":50}," pkg ",[36,27373,27374],{"class":42},"in",[36,27376,27377],{"class":110}," docker.io",[36,27379,27380],{"class":110}," docker-doc",[36,27382,27383],{"class":110}," docker-compose",[36,27385,27386],{"class":110}," docker-compose-v2",[36,27388,27389],{"class":110}," podman-docker",[36,27391,27392],{"class":110}," containerd",[36,27394,27395],{"class":110}," runc",[36,27397,27398],{"class":50},"; ",[36,27400,27401],{"class":42},"do",[36,27403,27404],{"class":46}," sudo",[36,27406,27407],{"class":110}," apt-get",[36,27409,27410],{"class":110}," remove",[36,27412,27413],{"class":50}," $pkg; ",[36,27415,27416],{"class":42},"done\n",[19,27418,27419],{},"首先安装依赖和GPG：",[26,27421,27425],{"className":27422,"code":27423,"language":27424,"meta":31,"style":31},"language-markdown shiki shiki-themes github-light github-dark","# Add Docker's official GPG key:\nsudo apt-get update\nsudo apt-get install ca-certificates curl\nsudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\nsudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n\n# 如果上面这行报错就弄下面这行\nsudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n","markdown",[33,27426,27427,27432,27437,27442,27447,27452,27457,27461,27466],{"__ignoreMap":31},[36,27428,27429],{"class":38,"line":39},[36,27430,27431],{},"# Add Docker's official GPG key:\n",[36,27433,27434],{"class":38,"line":54},[36,27435,27436],{},"sudo apt-get update\n",[36,27438,27439],{"class":38,"line":61},[36,27440,27441],{},"sudo apt-get install ca-certificates curl\n",[36,27443,27444],{"class":38,"line":80},[36,27445,27446],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[36,27448,27449],{"class":38,"line":96},[36,27450,27451],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[36,27453,27454],{"class":38,"line":101},[36,27455,27456],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[36,27458,27459],{"class":38,"line":128},[36,27460,58],{"emptyLinePlaceholder":57},[36,27462,27463],{"class":38,"line":149},[36,27464,27465],{},"# 如果上面这行报错就弄下面这行\n",[36,27467,27468],{"class":38,"line":154},[36,27469,27470],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27472,27473],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,27475,27477],{"className":25152,"code":27476,"language":25154,"meta":31,"style":31},"# Add the repository to Apt sources:\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu \\\n  \"$(. \u002Fetc\u002Fos-release && echo \"$VERSION_CODENAME\")\" stable\" | \\\n  sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n",[33,27478,27479,27484,27490,27507,27540],{"__ignoreMap":31},[36,27480,27481],{"class":38,"line":39},[36,27482,27483],{"class":124},"# Add the repository to Apt sources:\n",[36,27485,27486,27488],{"class":38,"line":54},[36,27487,26456],{"class":73},[36,27489,26009],{"class":73},[36,27491,27492,27495,27498,27501,27504],{"class":38,"line":61},[36,27493,27494],{"class":110},"  \"deb [arch=$(",[36,27496,27497],{"class":46},"dpkg",[36,27499,27500],{"class":73}," --print-architecture",[36,27502,27503],{"class":110},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[36,27505,27506],{"class":73},"\\\n",[36,27508,27509,27512,27514,27516,27519,27522,27524,27526,27529,27531,27533,27536,27538],{"class":38,"line":80},[36,27510,27511],{"class":110},"  \"",[36,27513,26430],{"class":50},[36,27515,2225],{"class":73},[36,27517,27518],{"class":110}," \u002Fetc\u002Fos-release",[36,27520,27521],{"class":50}," && ",[36,27523,26456],{"class":73},[36,27525,11192],{"class":110},[36,27527,27528],{"class":50},"$VERSION_CODENAME",[36,27530,1919],{"class":110},[36,27532,2096],{"class":50},[36,27534,27535],{"class":110},"\" stable\"",[36,27537,26440],{"class":42},[36,27539,26009],{"class":73},[36,27541,27542,27545,27548,27551,27554],{"class":38,"line":96},[36,27543,27544],{"class":46},"  sudo",[36,27546,27547],{"class":110}," tee",[36,27549,27550],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[36,27552,27553],{"class":42}," >",[36,27555,27556],{"class":110}," \u002Fdev\u002Fnull\n",[19,27558,27559],{},"最后安装",[26,27561,27563],{"className":25152,"code":27562,"language":25154,"meta":31,"style":31},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,27564,27565,27574],{"__ignoreMap":31},[36,27566,27567,27569,27571],{"class":38,"line":39},[36,27568,25907],{"class":46},[36,27570,27407],{"class":110},[36,27572,27573],{"class":110}," update\n",[36,27575,27576,27578,27580,27582,27585,27588,27591,27594],{"class":38,"line":54},[36,27577,25907],{"class":46},[36,27579,27407],{"class":110},[36,27581,25164],{"class":110},[36,27583,27584],{"class":110}," docker-ce",[36,27586,27587],{"class":110}," docker-ce-cli",[36,27589,27590],{"class":110}," containerd.io",[36,27592,27593],{"class":110}," docker-buildx-plugin",[36,27595,27596],{"class":110}," docker-compose-plugin\n",[23327,27598,27600],{"id":27599},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27602,27603,27604,27607,27608,27611],{},"查看自己自己包管理工具版本（dnf是 ",[887,27605,27606],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[887,27609,27610],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,27613,27615],{"className":25152,"code":27614,"language":25154,"meta":31,"style":31},"dnf --version\n",[33,27616,27617],{"__ignoreMap":31},[36,27618,27619,27622],{"class":38,"line":39},[36,27620,27621],{"class":46},"dnf",[36,27623,27624],{"class":73}," --version\n",[19,27626,27350,27627,27631],{},[1906,27628,27355],{"href":27629,"rel":27630},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25195]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27633,27634],{},"如果你之前安装过 docker，请先删掉",[26,27636,27638],{"className":25152,"code":27637,"language":25154,"meta":31,"style":31},"sudo dnf remove docker \\\n                  docker-client \\\n                  docker-client-latest \\\n                  docker-common \\\n                  docker-latest \\\n                  docker-latest-logrotate \\\n                  docker-logrotate \\\n                  docker-selinux \\\n                  docker-engine-selinux \\\n                  docker-engine\n",[33,27639,27640,27654,27661,27668,27675,27682,27689,27696,27703,27710],{"__ignoreMap":31},[36,27641,27642,27644,27647,27649,27652],{"class":38,"line":39},[36,27643,25907],{"class":46},[36,27645,27646],{"class":110}," dnf",[36,27648,27410],{"class":110},[36,27650,27651],{"class":110}," docker",[36,27653,26009],{"class":73},[36,27655,27656,27659],{"class":38,"line":54},[36,27657,27658],{"class":110},"                  docker-client",[36,27660,26009],{"class":73},[36,27662,27663,27666],{"class":38,"line":61},[36,27664,27665],{"class":110},"                  docker-client-latest",[36,27667,26009],{"class":73},[36,27669,27670,27673],{"class":38,"line":80},[36,27671,27672],{"class":110},"                  docker-common",[36,27674,26009],{"class":73},[36,27676,27677,27680],{"class":38,"line":96},[36,27678,27679],{"class":110},"                  docker-latest",[36,27681,26009],{"class":73},[36,27683,27684,27687],{"class":38,"line":101},[36,27685,27686],{"class":110},"                  docker-latest-logrotate",[36,27688,26009],{"class":73},[36,27690,27691,27694],{"class":38,"line":128},[36,27692,27693],{"class":110},"                  docker-logrotate",[36,27695,26009],{"class":73},[36,27697,27698,27701],{"class":38,"line":149},[36,27699,27700],{"class":110},"                  docker-selinux",[36,27702,26009],{"class":73},[36,27704,27705,27708],{"class":38,"line":154},[36,27706,27707],{"class":110},"                  docker-engine-selinux",[36,27709,26009],{"class":73},[36,27711,27712],{"class":38,"line":167},[36,27713,27714],{"class":110},"                  docker-engine\n",[19,27716,27717],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,27719,27721],{"className":25152,"code":27720,"language":25154,"meta":31,"style":31},"sudo dnf -y install dnf-plugins-core\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\nsudo sed -i 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+' \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[33,27722,27723,27737,27752],{"__ignoreMap":31},[36,27724,27725,27727,27729,27732,27734],{"class":38,"line":39},[36,27726,25907],{"class":46},[36,27728,27646],{"class":110},[36,27730,27731],{"class":73}," -y",[36,27733,25164],{"class":110},[36,27735,27736],{"class":110}," dnf-plugins-core\n",[36,27738,27739,27741,27743,27746,27749],{"class":38,"line":54},[36,27740,25907],{"class":46},[36,27742,27646],{"class":110},[36,27744,27745],{"class":110}," config-manager",[36,27747,27748],{"class":110}," addrepo",[36,27750,27751],{"class":73}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[36,27753,27754,27756,27759,27762,27765],{"class":38,"line":61},[36,27755,25907],{"class":46},[36,27757,27758],{"class":110}," sed",[36,27760,27761],{"class":73}," -i",[36,27763,27764],{"class":110}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[36,27766,27767],{"class":110}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27769,27770],{},"最后安装：",[26,27772,27774],{"className":25152,"code":27773,"language":25154,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,27775,27776],{"__ignoreMap":31},[36,27777,27778,27780,27782,27784,27786,27788,27790,27792],{"class":38,"line":39},[36,27779,25907],{"class":46},[36,27781,27646],{"class":110},[36,27783,25164],{"class":110},[36,27785,27584],{"class":110},[36,27787,27587],{"class":110},[36,27789,27590],{"class":110},[36,27791,27593],{"class":110},[36,27793,27596],{"class":110},[1645,27795,27797],{"id":27796},"_22配置环境","2.2.配置环境",[23327,27799,27801,27804],{"id":27800},"_221检查-docker-服务状态",[887,27802,27803],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27806,27807],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,27809,27811],{"className":25152,"code":27810,"language":25154,"meta":31,"style":31},"systemctl status docker\n",[33,27812,27813],{"__ignoreMap":31},[36,27814,27815,27818,27821],{"class":38,"line":39},[36,27816,27817],{"class":46},"systemctl",[36,27819,27820],{"class":110}," status",[36,27822,27823],{"class":110}," docker\n",[23327,27825,27827,27804],{"id":27826},"_222启动-docker-服务",[887,27828,27829],{},"2.2.2.启动 Docker 服务",[19,27831,27832],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,27834,27836],{"className":25152,"code":27835,"language":25154,"meta":31,"style":31},"sudo systemctl start docker\n",[33,27837,27838],{"__ignoreMap":31},[36,27839,27840,27842,27845,27847],{"class":38,"line":39},[36,27841,25907],{"class":46},[36,27843,27844],{"class":110}," systemctl",[36,27846,5673],{"class":110},[36,27848,27823],{"class":110},[23327,27850,27852,27804],{"id":27851},"_223设置-docker-开机自启",[887,27853,27854],{},"2.2.3.设置 Docker 开机自启",[19,27856,27857],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,27859,27861],{"className":25152,"code":27860,"language":25154,"meta":31,"style":31},"sudo systemctl enable docker\n",[33,27862,27863],{"__ignoreMap":31},[36,27864,27865,27867,27869,27872],{"class":38,"line":39},[36,27866,25907],{"class":46},[36,27868,27844],{"class":110},[36,27870,27871],{"class":110}," enable",[36,27873,27823],{"class":110},[23327,27875,27877,15124,27880,15124,27885,27804],{"id":27876},"_224将用户添加到-docker-组",[887,27878,27879],{},"2.2.4.将用户添加到",[887,27881,27882],{},[33,27883,27884],{},"docker",[887,27886,27887],{},"组",[19,27889,27890,27891,27893],{},"使用以下命令将当前用户添加到 ",[33,27892,27884],{}," 组：",[26,27895,27897],{"className":25152,"code":27896,"language":25154,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[33,27898,27899],{"__ignoreMap":31},[36,27900,27901,27903,27906,27909,27911],{"class":38,"line":39},[36,27902,25907],{"class":46},[36,27904,27905],{"class":110}," usermod",[36,27907,27908],{"class":73}," -aG",[36,27910,27651],{"class":110},[36,27912,27913],{"class":50}," $USER\n",[23327,27915,27917,27804],{"id":27916},"_225退出并重新登录",[887,27918,27919],{},"2.2.5.退出并重新登录",[19,27921,27922],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,27924,27926],{"className":25152,"code":27925,"language":25154,"meta":31,"style":31},"newgrp docker\n",[33,27927,27928],{"__ignoreMap":31},[36,27929,27930,27933],{"class":38,"line":39},[36,27931,27932],{"class":46},"newgrp",[36,27934,27823],{"class":110},[23327,27936,27938,27804],{"id":27937},"_226重新启动-docker-服务如果需要",[887,27939,27940],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27942,27943],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,27945,27946],{"className":25152,"code":27835,"language":25154,"meta":31,"style":31},[33,27947,27948],{"__ignoreMap":31},[36,27949,27950,27952,27954,27956],{"class":38,"line":39},[36,27951,25907],{"class":46},[36,27953,27844],{"class":110},[36,27955,5673],{"class":110},[36,27957,27823],{"class":110},[23327,27959,27961,27804],{"id":27960},"_227重启电脑后检查-docker-服务状态",[887,27962,27963],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27965,27966],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,27968,27970],{"className":25152,"code":27969,"language":25154,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[33,27971,27972,27979],{"__ignoreMap":31},[36,27973,27974,27976],{"class":38,"line":39},[36,27975,25907],{"class":46},[36,27977,27978],{"class":110}," reboot\n",[36,27980,27981,27983,27985],{"class":38,"line":54},[36,27982,27817],{"class":46},[36,27984,27820],{"class":110},[36,27986,27823],{"class":110},[19,27988,27989],{},[2992,27990],{"alt":31,"src":27991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27993,27994],{},"第三行显示enabled说明开机自启动成功",[19,27996,27997],{},"按q退出",[1645,27999,28001],{"id":28000},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28003,28004],{},"优先使用linux来使用docker是比较好的",[19,28006,28007],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28009,28010],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28012,28013,28014],{},"官方下载安装:",[1906,28015,28016],{"href":28016,"rel":28017},"https:\u002F\u002Fwww.docker.com\u002F",[25195],[19,28019,28020],{},"Windows的Docker显卡直通与USB直通:",[19,28022,28023],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28025,28026],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28028,28029],{},[2992,28030],{"alt":31,"src":28031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28033,28034],{},[2992,28035],{"alt":31,"src":28036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28038,28039],{},[2992,28040],{"alt":31,"src":28041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1592,28043,28044],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":28046},[28047,28048,28049],{"id":27324,"depth":61,"text":27325},{"id":27796,"depth":61,"text":27797},{"id":28000,"depth":61,"text":28001},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27316,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28056,"title":28057,"body":28058,"description":28065,"extension":1603,"meta":28758,"navigation":57,"path":28759,"seo":28760,"stem":28761,"__hash__":28762},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28059,"toc":28752},[28060,28063,28066,28070,28075,28080,28083,28111,28116,28125,28128,28133,28137,28144,28149,28155,28159,28162,28166,28171,28263,28268,28286,28291,28312,28317,28333,28337,28342,28371,28376,28422,28427,28471,28479,28496,28501,28517,28522,28536,28539,28542,28545,28548,28577,28580,28585,28589,28592,28595,28601,28604,28607,28610,28672,28679,28684,28687,28705,28709,28712,28729,28732,28735,28749],[10,28061,28057],{"id":28062},"_3docker直通",[19,28064,28065],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[1645,28067,28069],{"id":28068},"_31usb直通","3.1.USB直通",[19,28071,28072],{},[2992,28073],{"alt":31,"src":28074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[256,28076,28077],{},[259,28078,28079],{},"方法一(不是很推荐新手)：",[19,28081,28082],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,28084,28086],{"className":25152,"code":28085,"language":25154,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[33,28087,28088,28096,28101],{"__ignoreMap":31},[36,28089,28090,28093],{"class":38,"line":39},[36,28091,28092],{"class":46},"ls",[36,28094,28095],{"class":110}," \u002Fdev\n",[36,28097,28098],{"class":38,"line":54},[36,28099,28100],{"class":124},"#例如\n",[36,28102,28103,28106,28108],{"class":38,"line":61},[36,28104,28105],{"class":50},"--device",[36,28107,70],{"class":42},[36,28109,28110],{"class":110},"\u002Fdev\u002Ftty_USB0\n",[256,28112,28113],{"start":54},[259,28114,28115],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,28117,28119],{"className":25152,"code":28118,"language":25154,"meta":31,"style":31},"--privileged\n",[33,28120,28121],{"__ignoreMap":31},[36,28122,28123],{"class":38,"line":39},[36,28124,28118],{"class":46},[19,28126,28127],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28129,28130],{},[2992,28131],{"alt":31,"src":28132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[1645,28134,28136],{"id":28135},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28138,28139,28140,28143],{},"NVIDIA Container Toolkit使用户 ",[887,28141,28142],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28145,28146],{},[2992,28147],{"alt":31,"src":28148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28150,28151],{},[1906,28152,28153],{"href":28153,"rel":28154},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25195],[23327,28156,28158],{"id":28157},"_321安装","3.2.1.安装",[19,28160,28161],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24239,28163,28165],{"id":28164},"_3211ubuntu","3.2.1.1.Ubuntu",[256,28167,28168],{},[259,28169,28170],{},"配置存储库 并更新",[26,28172,28174],{"className":25152,"code":28173,"language":25154,"meta":31,"style":31},"curl -fsSL https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg \\\n  && curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list | \\\n    sed 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g' | \\\n    sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list \\\n  && \\\n    sudo apt-get update\n",[33,28175,28176,28205,28225,28237,28249,28255],{"__ignoreMap":31},[36,28177,28178,28181,28184,28187,28189,28191,28194,28197,28200,28203],{"class":38,"line":39},[36,28179,28180],{"class":46},"curl",[36,28182,28183],{"class":73}," -fsSL",[36,28185,28186],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[36,28188,26440],{"class":42},[36,28190,27404],{"class":46},[36,28192,28193],{"class":110}," gpg",[36,28195,28196],{"class":73}," --dearmor",[36,28198,28199],{"class":73}," -o",[36,28201,28202],{"class":110}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[36,28204,26009],{"class":73},[36,28206,28207,28210,28212,28215,28218,28221,28223],{"class":38,"line":54},[36,28208,28209],{"class":50},"  && ",[36,28211,28180],{"class":46},[36,28213,28214],{"class":73}," -s",[36,28216,28217],{"class":73}," -L",[36,28219,28220],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[36,28222,26440],{"class":42},[36,28224,26009],{"class":73},[36,28226,28227,28230,28233,28235],{"class":38,"line":61},[36,28228,28229],{"class":46},"    sed",[36,28231,28232],{"class":110}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[36,28234,26440],{"class":42},[36,28236,26009],{"class":73},[36,28238,28239,28242,28244,28247],{"class":38,"line":80},[36,28240,28241],{"class":46},"    sudo",[36,28243,27547],{"class":110},[36,28245,28246],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[36,28248,26009],{"class":73},[36,28250,28251,28253],{"class":38,"line":96},[36,28252,28209],{"class":50},[36,28254,27506],{"class":73},[36,28256,28257,28259,28261],{"class":38,"line":101},[36,28258,28241],{"class":46},[36,28260,27407],{"class":110},[36,28262,27573],{"class":110},[256,28264,28265],{"start":54},[259,28266,28267],{},"安装nvidia-docker2",[26,28269,28271],{"className":25152,"code":28270,"language":25154,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[33,28272,28273],{"__ignoreMap":31},[36,28274,28275,28277,28279,28281,28283],{"class":38,"line":39},[36,28276,25907],{"class":46},[36,28278,27407],{"class":110},[36,28280,25164],{"class":110},[36,28282,27731],{"class":73},[36,28284,28285],{"class":110}," nvidia-docker2\n",[256,28287,28288],{"start":61},[259,28289,28290],{},"使用nvidia-ctk命令配置container runtime",[26,28292,28294],{"className":25152,"code":28293,"language":25154,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[33,28295,28296],{"__ignoreMap":31},[36,28297,28298,28300,28303,28306,28309],{"class":38,"line":39},[36,28299,25907],{"class":46},[36,28301,28302],{"class":110}," nvidia-ctk",[36,28304,28305],{"class":110}," runtime",[36,28307,28308],{"class":110}," configure",[36,28310,28311],{"class":73}," --runtime=docker\n",[256,28313,28314],{"start":80},[259,28315,28316],{},"重启docker服务:",[26,28318,28320],{"className":25152,"code":28319,"language":25154,"meta":31,"style":31},"sudo systemctl restart docker\n",[33,28321,28322],{"__ignoreMap":31},[36,28323,28324,28326,28328,28331],{"class":38,"line":39},[36,28325,25907],{"class":46},[36,28327,27844],{"class":110},[36,28329,28330],{"class":110}," restart",[36,28332,27823],{"class":110},[24239,28334,28336],{"id":28335},"_3212fedora","3.2.1.2.Fedora",[256,28338,28339],{},[259,28340,28341],{},"配置存储库",[26,28343,28345],{"className":25152,"code":28344,"language":25154,"meta":31,"style":31},"curl -s -L https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo | \\\nsudo tee \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[33,28346,28347,28362],{"__ignoreMap":31},[36,28348,28349,28351,28353,28355,28358,28360],{"class":38,"line":39},[36,28350,28180],{"class":46},[36,28352,28214],{"class":73},[36,28354,28217],{"class":73},[36,28356,28357],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[36,28359,26440],{"class":42},[36,28361,26009],{"class":73},[36,28363,28364,28366,28368],{"class":38,"line":54},[36,28365,25907],{"class":46},[36,28367,27547],{"class":110},[36,28369,28370],{"class":110}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[256,28372,28373],{"start":54},[259,28374,28375],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,28377,28379],{"className":25152,"code":28378,"language":25154,"meta":31,"style":31},"# 如果是RHEL或者Rocky（DNF4）\nsudo dnf config-manager --add-repo https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n\n# 如果是Feodra41+（DNF5）\nsudo dnf config-manager addrepo --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[33,28380,28381,28386,28400,28404,28409],{"__ignoreMap":31},[36,28382,28383],{"class":38,"line":39},[36,28384,28385],{"class":124},"# 如果是RHEL或者Rocky（DNF4）\n",[36,28387,28388,28390,28392,28394,28397],{"class":38,"line":54},[36,28389,25907],{"class":46},[36,28391,27646],{"class":110},[36,28393,27745],{"class":110},[36,28395,28396],{"class":73}," --add-repo",[36,28398,28399],{"class":110}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[36,28401,28402],{"class":38,"line":61},[36,28403,58],{"emptyLinePlaceholder":57},[36,28405,28406],{"class":38,"line":80},[36,28407,28408],{"class":124},"# 如果是Feodra41+（DNF5）\n",[36,28410,28411,28413,28415,28417,28419],{"class":38,"line":96},[36,28412,25907],{"class":46},[36,28414,27646],{"class":110},[36,28416,27745],{"class":110},[36,28418,27748],{"class":110},[36,28420,28421],{"class":73}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[256,28423,28424],{"start":61},[259,28425,28426],{},"安装NVIDIA Container Toolki包",[26,28428,28430],{"className":25152,"code":28429,"language":25154,"meta":31,"style":31},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[33,28431,28432,28437,28450,28454,28459],{"__ignoreMap":31},[36,28433,28434],{"class":38,"line":39},[36,28435,28436],{"class":124},"# 如果是RHEL或者Rocky\n",[36,28438,28439,28441,28443,28445,28447],{"class":38,"line":54},[36,28440,25907],{"class":46},[36,28442,27646],{"class":110},[36,28444,25164],{"class":110},[36,28446,27731],{"class":73},[36,28448,28449],{"class":110}," nvidia-container-toolkit\n",[36,28451,28452],{"class":38,"line":61},[36,28453,58],{"emptyLinePlaceholder":57},[36,28455,28456],{"class":38,"line":80},[36,28457,28458],{"class":124},"# 如果是Fedora\n",[36,28460,28461,28463,28465,28467,28469],{"class":38,"line":96},[36,28462,25907],{"class":46},[36,28464,27646],{"class":110},[36,28466,25164],{"class":110},[36,28468,27731],{"class":73},[36,28470,28449],{"class":110},[256,28472,28473],{"start":80},[259,28474,28475,28476,28478],{},"安装nvidia-docker2 ： 在Fedora上使用",[33,28477,27621],{},"进行安装",[26,28480,28482],{"className":25152,"code":28481,"language":25154,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[33,28483,28484],{"__ignoreMap":31},[36,28485,28486,28488,28490,28492,28494],{"class":38,"line":39},[36,28487,25907],{"class":46},[36,28489,27646],{"class":110},[36,28491,25164],{"class":110},[36,28493,27731],{"class":73},[36,28495,28285],{"class":110},[256,28497,28498],{"start":96},[259,28499,28500],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,28502,28503],{"className":25152,"code":28293,"language":25154,"meta":31,"style":31},[33,28504,28505],{"__ignoreMap":31},[36,28506,28507,28509,28511,28513,28515],{"class":38,"line":39},[36,28508,25907],{"class":46},[36,28510,28302],{"class":110},[36,28512,28305],{"class":110},[36,28514,28308],{"class":110},[36,28516,28311],{"class":73},[256,28518,28519],{"start":101},[259,28520,28521],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,28523,28524],{"className":25152,"code":28319,"language":25154,"meta":31,"style":31},[33,28525,28526],{"__ignoreMap":31},[36,28527,28528,28530,28532,28534],{"class":38,"line":39},[36,28529,25907],{"class":46},[36,28531,27844],{"class":110},[36,28533,28330],{"class":110},[36,28535,27823],{"class":110},[19,28537,28538],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28540,28541],{},"方法：",[19,28543,28544],{},"1️⃣nvidia-smi",[19,28546,28547],{},"2️⃣运行nvidia cuda 容器进行测试",[26,28549,28551],{"className":25152,"code":28550,"language":25154,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[33,28552,28553],{"__ignoreMap":31},[36,28554,28555,28557,28559,28562,28565,28568,28571,28574],{"class":38,"line":39},[36,28556,25907],{"class":46},[36,28558,27651],{"class":110},[36,28560,28561],{"class":110}," run",[36,28563,28564],{"class":73}," --rm",[36,28566,28567],{"class":73}," --gpus",[36,28569,28570],{"class":110}," all",[36,28572,28573],{"class":110}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[36,28575,28576],{"class":110}," nvidia-smi\n",[19,28578,28579],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28581,28582],{},[2992,28583],{"alt":31,"src":28584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[1645,28586,28588],{"id":28587},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28590,28591],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28593,28594],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28596,28597],{},[1906,28598,28599],{"href":28599,"rel":28600},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25195],[19,28602,28603],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28605,28606],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28608,28609],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1806,28611,28612,28628],{},[1809,28613,28614],{},[1812,28615,28616,28619,28622,28625],{},[1815,28617,28618],{"align":25066},"镜像类型",[1815,28620,28621],{"align":25066},"适用场景",[1815,28623,28624],{"align":25066},"示例标签",[1815,28626,28627],{"align":25066},"大小",[1852,28629,28630,28644,28658],{},[1812,28631,28632,28635,28638,28641],{},[1857,28633,28634],{"align":25066},"base",[1857,28636,28637],{"align":25066},"仅需 CUDA 运行时库",[1857,28639,28640],{"align":25066},"12.4.0-base-ubuntu22.04",[1857,28642,28643],{"align":25066},"~240MB",[1812,28645,28646,28649,28652,28655],{},[1857,28647,28648],{"align":25066},"runtime",[1857,28650,28651],{"align":25066},"部署编译后的应用（含数学库）",[1857,28653,28654],{"align":25066},"12.4.0-runtime-ubuntu22.04",[1857,28656,28657],{"align":25066},"~2GB",[1812,28659,28660,28663,28666,28669],{},[1857,28661,28662],{"align":25066},"devel",[1857,28664,28665],{"align":25066},"开发环境（含编译工具）",[1857,28667,28668],{"align":25066},"12.4.0-devel-ubuntu22.04",[1857,28670,28671],{"align":25066},"~3GB",[19,28673,28674,28675,28678],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[33,28676,28677],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28680,28681],{},[2992,28682],{"alt":31,"src":28683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28685,28686],{},"在dockerfile里就可以开头这么写：",[26,28688,28690],{"className":25152,"code":28689,"language":25154,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[33,28691,28692,28697],{"__ignoreMap":31},[36,28693,28694],{"class":38,"line":39},[36,28695,28696],{"class":124},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[36,28698,28699,28702],{"class":38,"line":54},[36,28700,28701],{"class":46},"FROM",[36,28703,28704],{"class":110}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[1645,28706,28708],{"id":28707},"_34配置以太网","3.4.配置以太网",[19,28710,28711],{},"指定网络模式",[26,28713,28715],{"className":25152,"code":28714,"language":25154,"meta":31,"style":31},"--net=host \\\n",[33,28716,28717],{"__ignoreMap":31},[36,28718,28719,28722,28724,28727],{"class":38,"line":39},[36,28720,28721],{"class":50},"--net",[36,28723,70],{"class":42},[36,28725,28726],{"class":110},"host",[36,28728,26009],{"class":46},[19,28730,28731],{},"启动参数里加上这行即可。具体在下方",[19,28733,28734],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2674,28736,28737,28740,28743,28746],{},[259,28738,28739],{},"--net=bridge:默认选项，表示连接到默认的网桥",[259,28741,28742],{},"--net=host:容器使用宿主机的网络",[259,28744,28745],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[259,28747,28748],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1592,28750,28751],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":28753},[28754,28755,28756,28757],{"id":28068,"depth":61,"text":28069},{"id":28135,"depth":61,"text":28136},{"id":28587,"depth":61,"text":28588},{"id":28707,"depth":61,"text":28708},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28057,"description":28065},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28764,"title":28765,"body":28766,"description":28773,"extension":1603,"meta":28779,"navigation":57,"path":28780,"seo":28781,"stem":28782,"__hash__":28783},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28767,"toc":28777},[28768,28771,28774],[10,28769,28765],{"id":28770},"_4dockerhub换源",[19,28772,28773],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28775,28776],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":54,"depth":54,"links":28778},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28765,"description":28773},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28785,"title":28786,"body":28787,"description":31,"extension":1603,"meta":29799,"navigation":57,"path":29800,"seo":29801,"stem":29802,"__hash__":29803},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28788,"toc":29794},[28789,28792,28796,28802,28806,28809,29149,29152,29155,29158,29163,29168,29171,29174,29177,29180,29199,29202,29213,29219,29401,29411,29427,29690,29692,29717,29732,29741,29791],[10,28790,28786],{"id":28791},"_5docker命令学习",[1645,28793,28795],{"id":28794},"_51参考文档","5.1.参考文档",[19,28797,28798],{},[1906,28799,28800],{"href":28800,"rel":28801},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25195],[1645,28803,28805],{"id":28804},"_52常用命令","5.2.常用命令",[19,28807,28808],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1806,28810,28811,28824],{},[1809,28812,28813],{},[1812,28814,28815,28818,28821],{},[1815,28816,28817],{"align":25066},"命令",[1815,28819,28820],{"align":25066},"描述",[1815,28822,28823],{"align":25066},"示例",[1852,28825,28826,28837,28848,28859,28870,28881,28892,28903,28913,28924,28935,28946,28956,28967,28978,28989,28999,29009,29019,29029,29040,29051,29062,29073,29084,29095,29105,29116,29127,29138],{},[1812,28827,28828,28831,28834],{},[1857,28829,28830],{"align":25066},"docker run",[1857,28832,28833],{"align":25066},"创建并启动一个新的容器。",[1857,28835,28836],{"align":25066},"docker run -it ubuntu bash",[1812,28838,28839,28842,28845],{},[1857,28840,28841],{"align":25066},"docker build",[1857,28843,28844],{"align":25066},"通过指定的 Dockerfile 创建一个新的镜像。",[1857,28846,28847],{"align":25066},"docker build -t myimage .",[1812,28849,28850,28853,28856],{},[1857,28851,28852],{"align":25066},"docker pull",[1857,28854,28855],{"align":25066},"从 Docker 仓库拉取镜像。",[1857,28857,28858],{"align":25066},"docker pull ubuntu",[1812,28860,28861,28864,28867],{},[1857,28862,28863],{"align":25066},"docker push",[1857,28865,28866],{"align":25066},"将本地镜像推送到 Docker 仓库。",[1857,28868,28869],{"align":25066},"docker push myimage",[1812,28871,28872,28875,28878],{},[1857,28873,28874],{"align":25066},"docker stop",[1857,28876,28877],{"align":25066},"停止一个正在运行的容器。",[1857,28879,28880],{"align":25066},"docker stop container_id",[1812,28882,28883,28886,28889],{},[1857,28884,28885],{"align":25066},"docker start",[1857,28887,28888],{"align":25066},"启动一个已经存在的容器。",[1857,28890,28891],{"align":25066},"docker start container_id",[1812,28893,28894,28897,28900],{},[1857,28895,28896],{"align":25066},"docker restart",[1857,28898,28899],{"align":25066},"重新启动容器。",[1857,28901,28902],{"align":25066},"docker restart container_id",[1812,28904,28905,28908,28911],{},[1857,28906,28907],{"align":25066},"docker ps",[1857,28909,28910],{"align":25066},"列出当前正在运行的容器。",[1857,28912,28907],{"align":25066},[1812,28914,28915,28918,28921],{},[1857,28916,28917],{"align":25066},"docker rm",[1857,28919,28920],{"align":25066},"删除一个或多个停止的容器。",[1857,28922,28923],{"align":25066},"docker rm container_id",[1812,28925,28926,28929,28932],{},[1857,28927,28928],{"align":25066},"docker exec",[1857,28930,28931],{"align":25066},"在一个正在运行的容器中执行命令。",[1857,28933,28934],{"align":25066},"docker exec -it container_id bash",[1812,28936,28937,28940,28943],{},[1857,28938,28939],{"align":25066},"docker logs",[1857,28941,28942],{"align":25066},"查看容器的日志输出。",[1857,28944,28945],{"align":25066},"docker logs container_id",[1812,28947,28948,28951,28954],{},[1857,28949,28950],{"align":25066},"docker images",[1857,28952,28953],{"align":25066},"列出本地所有镜像。",[1857,28955,28950],{"align":25066},[1812,28957,28958,28961,28964],{},[1857,28959,28960],{"align":25066},"docker rmi",[1857,28962,28963],{"align":25066},"删除一个或多个镜像。",[1857,28965,28966],{"align":25066},"docker rmi myimage",[1812,28968,28969,28972,28975],{},[1857,28970,28971],{"align":25066},"docker network",[1857,28973,28974],{"align":25066},"管理 Docker 网络。",[1857,28976,28977],{"align":25066},"docker network ls",[1812,28979,28980,28983,28986],{},[1857,28981,28982],{"align":25066},"docker volume",[1857,28984,28985],{"align":25066},"管理 Docker 数据卷。",[1857,28987,28988],{"align":25066},"docker volume ls",[1812,28990,28991,28994,28997],{},[1857,28992,28993],{"align":25066},"docker-compose up",[1857,28995,28996],{"align":25066},"启动 docker-compose.yml 中定义的所有服务。",[1857,28998,28993],{"align":25066},[1812,29000,29001,29004,29007],{},[1857,29002,29003],{"align":25066},"docker-compose down",[1857,29005,29006],{"align":25066},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1857,29008,29003],{"align":25066},[1812,29010,29011,29014,29017],{},[1857,29012,29013],{"align":25066},"docker info",[1857,29015,29016],{"align":25066},"显示 Docker 系统的详细信息。",[1857,29018,29013],{"align":25066},[1812,29020,29021,29024,29027],{},[1857,29022,29023],{"align":25066},"docker stats",[1857,29025,29026],{"align":25066},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1857,29028,29023],{"align":25066},[1812,29030,29031,29034,29037],{},[1857,29032,29033],{"align":25066},"docker inspect",[1857,29035,29036],{"align":25066},"查看容器或镜像的详细信息（JSON 格式）。",[1857,29038,29039],{"align":25066},"docker inspect container_id",[1812,29041,29042,29045,29048],{},[1857,29043,29044],{"align":25066},"docker save",[1857,29046,29047],{"align":25066},"将一个镜像保存为 tar 文件。",[1857,29049,29050],{"align":25066},"docker save -o myimage.tar myimage",[1812,29052,29053,29056,29059],{},[1857,29054,29055],{"align":25066},"docker load",[1857,29057,29058],{"align":25066},"从 tar 文件中加载镜像。",[1857,29060,29061],{"align":25066},"docker load -i myimage.tar",[1812,29063,29064,29067,29070],{},[1857,29065,29066],{"align":25066},"docker tag",[1857,29068,29069],{"align":25066},"为镜像添加标签（tag）。",[1857,29071,29072],{"align":25066},"docker tag myimage myimage:v1",[1812,29074,29075,29078,29081],{},[1857,29076,29077],{"align":25066},"docker buildx build",[1857,29079,29080],{"align":25066},"使用 Buildx 构建多架构镜像。",[1857,29082,29083],{"align":25066},"docker buildx build -t myimage .",[1812,29085,29086,29089,29092],{},[1857,29087,29088],{"align":25066},"docker buildx create",[1857,29090,29091],{"align":25066},"创建一个新的 Buildx 构建实例。",[1857,29093,29094],{"align":25066},"docker buildx create –use",[1812,29096,29097,29100,29103],{},[1857,29098,29099],{"align":25066},"docker buildx ls",[1857,29101,29102],{"align":25066},"列出所有可用的 Buildx 构建实例。",[1857,29104,29099],{"align":25066},[1812,29106,29107,29110,29113],{},[1857,29108,29109],{"align":25066},"docker buildx use",[1857,29111,29112],{"align":25066},"设置当前的 Buildx 构建实例。",[1857,29114,29115],{"align":25066},"docker buildx use mybuilder",[1812,29117,29118,29121,29124],{},[1857,29119,29120],{"align":25066},"docker buildx bake",[1857,29122,29123],{"align":25066},"使用 Bake 文件批量构建镜像。",[1857,29125,29126],{"align":25066},"docker buildx bake -f bake.hcl",[1812,29128,29129,29132,29135],{},[1857,29130,29131],{"align":25066},"docker buildx build –push",[1857,29133,29134],{"align":25066},"构建镜像并推送到镜像仓库。",[1857,29136,29137],{"align":25066},"docker buildx build –push -t myimage .",[1812,29139,29140,29143,29146],{},[1857,29141,29142],{"align":25066},"docker buildx build –platform",[1857,29144,29145],{"align":25066},"构建镜像并为多个平台生成支持。",[1857,29147,29148],{"align":25066},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29150,29151],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29153,29154],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29156,29157],{},"docker images 可以查看已经下载的镜像",[19,29159,29160],{},[2992,29161],{"alt":31,"src":29162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29164,29165],{},[887,29166,29167],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29169,29170],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29172,29173],{},"docker container logs 查看容器日志",[19,29175,29176],{},"docker top 查看容器里的进程",[19,29178,29179],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,29181,29183],{"className":25152,"code":29182,"language":25154,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[33,29184,29185],{"__ignoreMap":31},[36,29186,29187,29190,29193,29196],{"class":38,"line":39},[36,29188,29189],{"class":46},"如：docker",[36,29191,29192],{"class":110}," cp",[36,29194,29195],{"class":110}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[36,29197,29198],{"class":110}," \u002Fmydata\u002Fnginx\n",[19,29200,29201],{},"docker run时在启动容器的时候会有几个常用的选项：",[2674,29203,29204,29207,29210],{},[259,29205,29206],{},"-d选项：表示后台运行",[259,29208,29209],{},"-P选项：随机端口映射",[259,29211,29212],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[1645,29214,29216],{"id":29215},"_53run命令的参数非常重要",[887,29217,29218],{},"5.3.run命令的参数（非常重要）",[1806,29220,29221,29234],{},[1809,29222,29223],{},[1812,29224,29225,29228,29231],{},[1815,29226,29227],{"align":25066},"参数\u002F配置",[1815,29229,29230],{"align":25066},"功能说明",[1815,29232,29233],{"align":25066},"重要性与参考依据",[1852,29235,29236,29247,29258,29269,29280,29291,29302,29313,29324,29335,29346,29357,29368,29379,29390],{},[1812,29237,29238,29241,29244],{},[1857,29239,29240],{"align":25066},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1857,29242,29243],{"align":25066},"指定容器名称，便于后续管理",[1857,29245,29246],{"align":25066},"替代随机生成的容器名。",[1812,29248,29249,29252,29255],{},[1857,29250,29251],{"align":25066},"–gpus all",[1857,29253,29254],{"align":25066},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1857,29256,29257],{"align":25066},"用于CUDA加速等GPU依赖任务。",[1812,29259,29260,29263,29266],{},[1857,29261,29262],{"align":25066},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1857,29264,29265],{"align":25066},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1857,29267,29268],{"align":25066},"确保容器内GPU功能完整67。",[1812,29270,29271,29274,29277],{},[1857,29272,29273],{"align":25066},"-dit",[1857,29275,29276],{"align":25066},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1857,29278,29279],{"align":25066},"允许容器在后台运行并支持交互操作。",[1812,29281,29282,29285,29288],{},[1857,29283,29284],{"align":25066},"–privileged",[1857,29286,29287],{"align":25066},"赋予容器完全主机权限（可访问设备、内核模块等）",[1857,29289,29290],{"align":25066},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1812,29292,29293,29296,29299],{},[1857,29294,29295],{"align":25066},"–net=host",[1857,29297,29298],{"align":25066},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1857,29300,29301],{"align":25066},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1812,29303,29304,29307,29310],{},[1857,29305,29306],{"align":25066},"–group-add audio–group-add video–group-add dialout",[1857,29308,29309],{"align":25066},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1857,29311,29312],{"align":25066},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1812,29314,29315,29318,29321],{},[1857,29316,29317],{"align":25066},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1857,29319,29320],{"align":25066},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1857,29322,29323],{"align":25066},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1812,29325,29326,29329,29332],{},[1857,29327,29328],{"align":25066},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1857,29330,29331],{"align":25066},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1857,29333,29334],{"align":25066},"实现容器内图形显示。",[1812,29336,29337,29340,29343],{},[1857,29338,29339],{"align":25066},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1857,29341,29342],{"align":25066},"挂载X11认证文件（只读）",[1857,29344,29345],{"align":25066},"确保容器有权连接宿主机显示服务。",[1812,29347,29348,29351,29354],{},[1857,29349,29350],{"align":25066},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1857,29352,29353],{"align":25066},"挂载Wayland显示协议相关目录",[1857,29355,29356],{"align":25066},"支持Wayland协议的图形显示。",[1812,29358,29359,29362,29365],{},[1857,29360,29361],{"align":25066},"–ulimit nofile=1024:524288",[1857,29363,29364],{"align":25066},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1857,29366,29367],{"align":25066},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1812,29369,29370,29373,29376],{},[1857,29371,29372],{"align":25066},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1857,29374,29375],{"align":25066},"挂载宿主机用户目录到容器内同名路径",[1857,29377,29378],{"align":25066},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1812,29380,29381,29384,29387],{},[1857,29382,29383],{"align":25066},"-w \u002Fhome\u002Ftungchiahui",[1857,29385,29386],{"align":25066},"设置容器启动后的默认工作目录",[1857,29388,29389],{"align":25066},"直接进入项目路径，方便执行命令2324。",[1812,29391,29392,29395,29398],{},[1857,29393,29394],{"align":25066},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1857,29396,29397],{"align":25066},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1857,29399,29400],{"align":25066},"提供预配置的深度学习与机器人开发环境。",[19,29402,29403,29404,29406,29407,29410],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[33,29405,25907],{},"加不加",[33,29408,29409],{},"sudo -E","都无所谓。",[19,29412,29413,29414,29416,29417,29419,29420,29423,29424,29426],{},"用户已经被加到docker组了，不用",[33,29415,25907],{},"也行跑，其次，",[33,29418,25907],{},"运行的话，你的",[33,29421,29422],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[33,29425,29422],{},"更不可能变了。",[26,29428,29430],{"className":25152,"code":29429,"language":25154,"meta":31,"style":31},"sudo docker run --name=ros_opencv_cuda \\\n--gpus all \\\n-e NVIDIA_DRIVER_CAPABILITIES=all \\\n-e DISPLAY=$DISPLAY \\\n-dit \\\n--privileged \\\n--net=host \\\n--group-add audio \\\n--group-add video \\\n--group-add dialout \\\n-e XAUTHORITY=$HOME\u002F.Xauthority \\\n-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \\\n-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \\\n-e QT_QPA_PLATFORM=xcb \\\n-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw \\\n-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri \\\n-v $HOME\u002F.Xauthority:$HOME\u002F.Xauthority:ro \\\n-v \u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0:\u002Frun\u002Fuser\u002F$(id -u)\u002Fwayland-0 \\\n-v \u002Frun\u002Fuser\u002F$(id -u):\u002Frun\u002Fuser\u002F$(id -u) \\\n-v $HOME:$HOME \\\n-w $HOME \\\ntungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[33,29431,29432,29445,29455,29465,29477,29484,29491,29498,29508,29517,29526,29540,29552,29564,29573,29583,29592,29607,29640,29667,29678,29685],{"__ignoreMap":31},[36,29433,29434,29436,29438,29440,29443],{"class":38,"line":39},[36,29435,25907],{"class":46},[36,29437,27651],{"class":110},[36,29439,28561],{"class":110},[36,29441,29442],{"class":73}," --name=ros_opencv_cuda",[36,29444,26009],{"class":73},[36,29446,29447,29450,29453],{"class":38,"line":54},[36,29448,29449],{"class":50},"--gpus ",[36,29451,29452],{"class":110},"all",[36,29454,26009],{"class":73},[36,29456,29457,29460,29463],{"class":38,"line":61},[36,29458,29459],{"class":50},"-e ",[36,29461,29462],{"class":110},"NVIDIA_DRIVER_CAPABILITIES=all",[36,29464,26009],{"class":73},[36,29466,29467,29469,29472,29475],{"class":38,"line":80},[36,29468,29459],{"class":50},[36,29470,29471],{"class":110},"DISPLAY=",[36,29473,29474],{"class":50},"$DISPLAY ",[36,29476,27506],{"class":73},[36,29478,29479,29482],{"class":38,"line":96},[36,29480,29481],{"class":50},"-dit ",[36,29483,27506],{"class":73},[36,29485,29486,29489],{"class":38,"line":101},[36,29487,29488],{"class":50},"--privileged ",[36,29490,27506],{"class":73},[36,29492,29493,29496],{"class":38,"line":128},[36,29494,29495],{"class":50},"--net=host ",[36,29497,27506],{"class":73},[36,29499,29500,29503,29506],{"class":38,"line":149},[36,29501,29502],{"class":50},"--group-add ",[36,29504,29505],{"class":110},"audio",[36,29507,26009],{"class":73},[36,29509,29510,29512,29515],{"class":38,"line":154},[36,29511,29502],{"class":50},[36,29513,29514],{"class":110},"video",[36,29516,26009],{"class":73},[36,29518,29519,29521,29524],{"class":38,"line":167},[36,29520,29502],{"class":50},[36,29522,29523],{"class":110},"dialout",[36,29525,26009],{"class":73},[36,29527,29528,29530,29533,29535,29538],{"class":38,"line":172},[36,29529,29459],{"class":50},[36,29531,29532],{"class":110},"XAUTHORITY=",[36,29534,29422],{"class":50},[36,29536,29537],{"class":110},"\u002F.Xauthority",[36,29539,26009],{"class":73},[36,29541,29542,29544,29547,29550],{"class":38,"line":192},[36,29543,29459],{"class":50},[36,29545,29546],{"class":110},"WAYLAND_DISPLAY=",[36,29548,29549],{"class":50},"$WAYLAND_DISPLAY ",[36,29551,27506],{"class":73},[36,29553,29554,29556,29559,29562],{"class":38,"line":211},[36,29555,29459],{"class":50},[36,29557,29558],{"class":110},"XDG_RUNTIME_DIR=",[36,29560,29561],{"class":50},"$XDG_RUNTIME_DIR ",[36,29563,27506],{"class":73},[36,29565,29566,29568,29571],{"class":38,"line":216},[36,29567,29459],{"class":50},[36,29569,29570],{"class":110},"QT_QPA_PLATFORM=xcb",[36,29572,26009],{"class":73},[36,29574,29575,29578,29581],{"class":38,"line":231},[36,29576,29577],{"class":50},"-v ",[36,29579,29580],{"class":110},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[36,29582,26009],{"class":73},[36,29584,29585,29587,29590],{"class":38,"line":236},[36,29586,29577],{"class":50},[36,29588,29589],{"class":110},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[36,29591,26009],{"class":73},[36,29593,29594,29597,29600,29602,29605],{"class":38,"line":247},[36,29595,29596],{"class":50},"-v $HOME",[36,29598,29599],{"class":110},"\u002F.Xauthority:",[36,29601,29422],{"class":50},[36,29603,29604],{"class":110},"\u002F.Xauthority:ro",[36,29606,26009],{"class":73},[36,29608,29609,29611,29614,29616,29619,29622,29624,29627,29629,29631,29633,29635,29638],{"class":38,"line":637},[36,29610,29577],{"class":50},[36,29612,29613],{"class":110},"\u002Frun\u002Fuser\u002F",[36,29615,26430],{"class":50},[36,29617,29618],{"class":46},"id",[36,29620,29621],{"class":73}," -u",[36,29623,2096],{"class":50},[36,29625,29626],{"class":110},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[36,29628,26430],{"class":50},[36,29630,29618],{"class":46},[36,29632,29621],{"class":73},[36,29634,2096],{"class":50},[36,29636,29637],{"class":110},"\u002Fwayland-0",[36,29639,26009],{"class":73},[36,29641,29642,29644,29646,29648,29650,29652,29654,29657,29659,29661,29663,29665],{"class":38,"line":646},[36,29643,29577],{"class":50},[36,29645,29613],{"class":110},[36,29647,26430],{"class":50},[36,29649,29618],{"class":46},[36,29651,29621],{"class":73},[36,29653,2096],{"class":50},[36,29655,29656],{"class":110},":\u002Frun\u002Fuser\u002F",[36,29658,26430],{"class":50},[36,29660,29618],{"class":46},[36,29662,29621],{"class":73},[36,29664,15043],{"class":50},[36,29666,27506],{"class":73},[36,29668,29669,29671,29673,29676],{"class":38,"line":655},[36,29670,29596],{"class":50},[36,29672,2526],{"class":110},[36,29674,29675],{"class":50},"$HOME ",[36,29677,27506],{"class":73},[36,29679,29680,29683],{"class":38,"line":660},[36,29681,29682],{"class":50},"-w $HOME ",[36,29684,27506],{"class":73},[36,29686,29687],{"class":38,"line":665},[36,29688,29689],{"class":50},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29691,885],{},[256,29693,29694,29702,29705,29708],{},[259,29695,29696,15124,29698,29701],{},[33,29697,29462],{},[33,29699,29700],{},"--gpus all","没有英伟达显卡请注释。",[259,29703,29704],{},"--name后面请自己为容器起名。",[259,29706,29707],{},"最后一行仓库名称请你自己找对应的镜像填上。",[259,29709,29710,29711,29716],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24883,29712,29713],{},[887,29714,29715],{},"请不要加","。",[26,29718,29720],{"className":25152,"code":29719,"language":25154,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[33,29721,29722],{"__ignoreMap":31},[36,29723,29724,29727,29730],{"class":38,"line":39},[36,29725,29726],{"class":46},"--ulimit",[36,29728,29729],{"class":110}," nofile=1024:524288",[36,29731,26009],{"class":73},[19,29733,29734,29735,29740],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24883,29736,29737],{},[887,29738,29739],{},"不建议","**.**",[26,29742,29744],{"className":25152,"code":29743,"language":25154,"meta":31,"style":31},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[33,29745,29746,29773,29782],{"__ignoreMap":31},[36,29747,29748,29751,29754,29756,29758,29760,29762,29764,29766,29769,29771],{"class":38,"line":39},[36,29749,29750],{"class":46},"--user",[36,29752,29753],{"class":50}," $(",[36,29755,29618],{"class":46},[36,29757,29621],{"class":73},[36,29759,2096],{"class":50},[36,29761,2526],{"class":110},[36,29763,26430],{"class":50},[36,29765,29618],{"class":46},[36,29767,29768],{"class":73}," -g",[36,29770,15043],{"class":50},[36,29772,27506],{"class":73},[36,29774,29775,29777,29780],{"class":38,"line":54},[36,29776,29577],{"class":50},[36,29778,29779],{"class":110},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[36,29781,26009],{"class":73},[36,29783,29784,29786,29789],{"class":38,"line":61},[36,29785,29577],{"class":50},[36,29787,29788],{"class":110},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[36,29790,26009],{"class":73},[1592,29792,29793],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":29795},[29796,29797,29798],{"id":28794,"depth":61,"text":28795},{"id":28804,"depth":61,"text":28805},{"id":29215,"depth":61,"text":29218},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28786,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29805,"title":29806,"body":29807,"description":31,"extension":1603,"meta":31430,"navigation":57,"path":31431,"seo":31432,"stem":31433,"__hash__":31434},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29808,"toc":31425},[29809,29812,29816,29819,30041,30045,30049,30052,30158,30163,30166,30171,30174,30179,30182,30187,30190,30202,30205,30210,30217,30245,30252,30328,30333,30336,30359,30361,30436,30441,30444,30448,30456,30461,30466,30470,30481,30487,30490,30493,30517,30520,30523,30551,30554,30557,31022,31025,31030,31035,31039,31062,31067,31071,31075,31078,31081,31084,31111,31114,31117,31135,31138,31141,31163,31171,31176,31181,31185,31188,31191,31194,31197,31242,31245,31263,31266,31271,31274,31295,31298,31354,31357,31362,31366,31369,31376,31379,31382,31387,31390,31406,31409,31422],[10,29810,29806],{"id":29811},"_6手动创建docker镜像",[1645,29813,29815],{"id":29814},"_61dockerfile","6.1.DockerFile",[19,29817,29818],{},"常用命令：",[1806,29820,29821,29832],{},[1809,29822,29823],{},[1812,29824,29825,29828,29830],{},[1815,29826,29827],{"align":25066},"指令",[1815,29829,27200],{"align":25066},[1815,29831,28823],{"align":25066},[1852,29833,29834,29844,29860,29871,29882,29893,29904,29915,29926,29940,29954,29965,29979,29990,30001,30015,30030],{},[1812,29835,29836,29838,29841],{},[1857,29837,28701],{"align":25066},[1857,29839,29840],{"align":25066},"指定基础镜像，是 Dockerfile 的起点",[1857,29842,29843],{"align":25066},"FROM ubuntu:22.04",[1812,29845,29846,29849,29852],{},[1857,29847,29848],{"align":25066},"LABEL",[1857,29850,29851],{"align":25066},"添加元数据（如作者、版本等）",[1857,29853,29854,29855,29859],{"align":25066},"LABEL maintainer=”",[1906,29856,29858],{"href":29857},"mailto:you@example.com","you@example.com","”",[1812,29861,29862,29865,29868],{},[1857,29863,29864],{"align":25066},"ENV",[1857,29866,29867],{"align":25066},"设置环境变量",[1857,29869,29870],{"align":25066},"ENV PORT=8080",[1812,29872,29873,29876,29879],{},[1857,29874,29875],{"align":25066},"ARG",[1857,29877,29878],{"align":25066},"构建参数，只在构建期间可用",[1857,29880,29881],{"align":25066},"ARG VERSION=1.0",[1812,29883,29884,29887,29890],{},[1857,29885,29886],{"align":25066},"RUN",[1857,29888,29889],{"align":25066},"构建镜像时运行命令",[1857,29891,29892],{"align":25066},"RUN apt-get update && apt-get install -y curl",[1812,29894,29895,29898,29901],{},[1857,29896,29897],{"align":25066},"COPY",[1857,29899,29900],{"align":25066},"复制文件到镜像中",[1857,29902,29903],{"align":25066},"COPY . \u002Fapp",[1812,29905,29906,29909,29912],{},[1857,29907,29908],{"align":25066},"ADD",[1857,29910,29911],{"align":25066},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1857,29913,29914],{"align":25066},"ADD archive.tar.gz \u002Fdata\u002F",[1812,29916,29917,29920,29923],{},[1857,29918,29919],{"align":25066},"WORKDIR",[1857,29921,29922],{"align":25066},"设置工作目录",[1857,29924,29925],{"align":25066},"WORKDIR \u002Fopt",[1812,29927,29928,29931,29934],{},[1857,29929,29930],{"align":25066},"CMD",[1857,29932,29933],{"align":25066},"设置容器启动时默认命令（可被 docker run 覆盖）",[1857,29935,29936,29937],{"align":25066},"CMD ",[36,29938,29939],{},"“node”, “index.js”",[1812,29941,29942,29945,29948],{},[1857,29943,29944],{"align":25066},"ENTRYPOINT",[1857,29946,29947],{"align":25066},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1857,29949,29950,29951],{"align":25066},"ENTRYPOINT ",[36,29952,29953],{},"“python3”",[1812,29955,29956,29959,29962],{},[1857,29957,29958],{"align":25066},"EXPOSE",[1857,29960,29961],{"align":25066},"声明镜像内服务监听的端口（不会自动映射）",[1857,29963,29964],{"align":25066},"EXPOSE 80",[1812,29966,29967,29970,29973],{},[1857,29968,29969],{"align":25066},"VOLUME",[1857,29971,29972],{"align":25066},"声明数据卷挂载点",[1857,29974,29975,29976],{"align":25066},"VOLUME ",[36,29977,29978],{},"“\u002Fdata”",[1812,29980,29981,29984,29987],{},[1857,29982,29983],{"align":25066},"USER",[1857,29985,29986],{"align":25066},"设置后续命令执行的用户",[1857,29988,29989],{"align":25066},"USER appuser",[1812,29991,29992,29995,29998],{},[1857,29993,29994],{"align":25066},"ONBUILD",[1857,29996,29997],{"align":25066},"当镜像作为其他镜像基础镜像时触发的构建指令",[1857,29999,30000],{"align":25066},"ONBUILD COPY . \u002Fsrc",[1812,30002,30003,30006,30009],{},[1857,30004,30005],{"align":25066},"SHELL",[1857,30007,30008],{"align":25066},"更改默认 shell，比如将 sh -c 改为 bash -c",[1857,30010,30011,30012],{"align":25066},"SHELL ",[36,30013,30014],{},"“\u002Fbin\u002Fbash”, “-c”",[1812,30016,30017,30020,30023],{},[1857,30018,30019],{"align":25066},"HEALTHCHECK",[1857,30021,30022],{"align":25066},"定义容器运行时的健康检查命令",[1857,30024,30025,30026],{"align":25066},"`HEALTHCHECK CMD curl –fail ",[1906,30027,30028],{"href":30028,"rel":30029},"http:\u002F\u002Flocalhost:8080",[25195],[1812,30031,30032,30035,30038],{},[1857,30033,30034],{"align":25066},"STOPSIGNAL",[1857,30036,30037],{"align":25066},"容器停止时发送的信号",[1857,30039,30040],{"align":25066},"STOPSIGNAL SIGKILL",[1645,30042,30044],{"id":30043},"_62自己创建容器","6.2.自己创建容器",[23327,30046,30048],{"id":30047},"_621手动创建","6.2.1.手动创建",[19,30050,30051],{},"在x86电脑上编译x86的：",[26,30053,30055],{"className":25152,"code":30054,"language":25154,"meta":31,"style":31},"docker build -t ros-melodic-cuda118-cudnn8-bionic:latest .\n\ndocker build -t ros-noetic-focal:latest .\n\ndocker build -t ros-humble-jammy:latest .\n\ndocker build -t ros-jazzy-noble:latest .\n\ndocker build -t ros-humble-opencv411-cuda128-cudnn970-jammy:latest .\n\ndocker build -t ros-jazzy-opencv411-cuda128-cudnn970-noble:latest .\n",[33,30056,30057,30073,30077,30090,30094,30107,30111,30124,30128,30141,30145],{"__ignoreMap":31},[36,30058,30059,30061,30064,30067,30070],{"class":38,"line":39},[36,30060,27884],{"class":46},[36,30062,30063],{"class":110}," build",[36,30065,30066],{"class":73}," -t",[36,30068,30069],{"class":110}," ros-melodic-cuda118-cudnn8-bionic:latest",[36,30071,30072],{"class":110}," .\n",[36,30074,30075],{"class":38,"line":54},[36,30076,58],{"emptyLinePlaceholder":57},[36,30078,30079,30081,30083,30085,30088],{"class":38,"line":61},[36,30080,27884],{"class":46},[36,30082,30063],{"class":110},[36,30084,30066],{"class":73},[36,30086,30087],{"class":110}," ros-noetic-focal:latest",[36,30089,30072],{"class":110},[36,30091,30092],{"class":38,"line":80},[36,30093,58],{"emptyLinePlaceholder":57},[36,30095,30096,30098,30100,30102,30105],{"class":38,"line":96},[36,30097,27884],{"class":46},[36,30099,30063],{"class":110},[36,30101,30066],{"class":73},[36,30103,30104],{"class":110}," ros-humble-jammy:latest",[36,30106,30072],{"class":110},[36,30108,30109],{"class":38,"line":101},[36,30110,58],{"emptyLinePlaceholder":57},[36,30112,30113,30115,30117,30119,30122],{"class":38,"line":128},[36,30114,27884],{"class":46},[36,30116,30063],{"class":110},[36,30118,30066],{"class":73},[36,30120,30121],{"class":110}," ros-jazzy-noble:latest",[36,30123,30072],{"class":110},[36,30125,30126],{"class":38,"line":149},[36,30127,58],{"emptyLinePlaceholder":57},[36,30129,30130,30132,30134,30136,30139],{"class":38,"line":154},[36,30131,27884],{"class":46},[36,30133,30063],{"class":110},[36,30135,30066],{"class":73},[36,30137,30138],{"class":110}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[36,30140,30072],{"class":110},[36,30142,30143],{"class":38,"line":167},[36,30144,58],{"emptyLinePlaceholder":57},[36,30146,30147,30149,30151,30153,30156],{"class":38,"line":172},[36,30148,27884],{"class":46},[36,30150,30063],{"class":110},[36,30152,30066],{"class":73},[36,30154,30155],{"class":110}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[36,30157,30072],{"class":110},[19,30159,30160],{},[2992,30161],{"alt":31,"src":30162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30164,30165],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30167,30168],{},[2992,30169],{"alt":31,"src":30170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30172,30173],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[256,30175,30176],{},[259,30177,30178],{},"创建 Docker Hub 账户",[19,30180,30181],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[256,30183,30184],{"start":54},[259,30185,30186],{},"登录 Docker Hub",[19,30188,30189],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,30191,30193],{"className":25152,"code":30192,"language":25154,"meta":31,"style":31},"docker login\n",[33,30194,30195],{"__ignoreMap":31},[36,30196,30197,30199],{"class":38,"line":39},[36,30198,27884],{"class":46},[36,30200,30201],{"class":110}," login\n",[19,30203,30204],{},"输入你的 Docker Hub 用户名和密码进行验证。",[256,30206,30207],{},[259,30208,30209],{},"为你的镜像打标签",[19,30211,30212,30213,30216],{},"Docker Hub 使用 ",[33,30214,30215],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,30218,30220],{"className":25152,"code":30219,"language":25154,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[33,30221,30222],{"__ignoreMap":31},[36,30223,30224,30226,30229,30231,30234,30237,30240,30242],{"class":38,"line":39},[36,30225,27884],{"class":46},[36,30227,30228],{"class":110}," tag",[36,30230,30121],{"class":110},[36,30232,30233],{"class":42}," \u003C",[36,30235,30236],{"class":110},"你的用户",[36,30238,30239],{"class":50},"名",[36,30241,2627],{"class":42},[36,30243,30244],{"class":110},"\u002Fros-jazzy-noble:latest\n",[19,30246,30247,30248,30251],{},"例如，如果你的 Docker Hub 用户名是 ",[33,30249,30250],{},"tungchiahui","，你应该执行：",[26,30253,30255],{"className":25152,"code":30254,"language":25154,"meta":31,"style":31},"docker tag ros-noetic-focal:latest tungchiahui\u002Fros-noetic-focal:latest\n\ndocker tag ros-humble-jammy:latest tungchiahui\u002Fros-humble-jammy:latest\n\ndocker tag ros-jazzy-noble:latest tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker tag ros-humble-opencv411-cuda128-cudnn970-jammy:latest \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker tag ros-jazzy-opencv411-cuda128-cudnn970-noble:latest tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[33,30256,30257,30268,30272,30283,30287,30298,30302,30313,30317],{"__ignoreMap":31},[36,30258,30259,30261,30263,30265],{"class":38,"line":39},[36,30260,27884],{"class":46},[36,30262,30228],{"class":110},[36,30264,30087],{"class":110},[36,30266,30267],{"class":110}," tungchiahui\u002Fros-noetic-focal:latest\n",[36,30269,30270],{"class":38,"line":54},[36,30271,58],{"emptyLinePlaceholder":57},[36,30273,30274,30276,30278,30280],{"class":38,"line":61},[36,30275,27884],{"class":46},[36,30277,30228],{"class":110},[36,30279,30104],{"class":110},[36,30281,30282],{"class":110}," tungchiahui\u002Fros-humble-jammy:latest\n",[36,30284,30285],{"class":38,"line":80},[36,30286,58],{"emptyLinePlaceholder":57},[36,30288,30289,30291,30293,30295],{"class":38,"line":96},[36,30290,27884],{"class":46},[36,30292,30228],{"class":110},[36,30294,30121],{"class":110},[36,30296,30297],{"class":110}," tungchiahui\u002Fros-jazzy-noble:latest\n",[36,30299,30300],{"class":38,"line":101},[36,30301,58],{"emptyLinePlaceholder":57},[36,30303,30304,30306,30308,30310],{"class":38,"line":128},[36,30305,27884],{"class":46},[36,30307,30228],{"class":110},[36,30309,30138],{"class":110},[36,30311,30312],{"class":110}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,30314,30315],{"class":38,"line":149},[36,30316,58],{"emptyLinePlaceholder":57},[36,30318,30319,30321,30323,30325],{"class":38,"line":154},[36,30320,27884],{"class":46},[36,30322,30228],{"class":110},[36,30324,30155],{"class":110},[36,30326,30327],{"class":110}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[256,30329,30330],{"start":54},[259,30331,30332],{},"推送镜像到 Docker Hub",[19,30334,30335],{},"使用以下命令将镜像推送到 Docker Hub：",[26,30337,30339],{"className":25152,"code":30338,"language":25154,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[33,30340,30341],{"__ignoreMap":31},[36,30342,30343,30345,30348,30350,30352,30354,30356],{"class":38,"line":39},[36,30344,27884],{"class":46},[36,30346,30347],{"class":110}," push",[36,30349,30233],{"class":42},[36,30351,30236],{"class":110},[36,30353,30239],{"class":50},[36,30355,2627],{"class":42},[36,30357,30358],{"class":110},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30360,15962],{},[26,30362,30364],{"className":25152,"code":30363,"language":25154,"meta":31,"style":31},"docker push tungchiahui\u002Fros-noetic-focal:latest\n\ndocker push tungchiahui\u002Fros-humble-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-noble:latest\n\ndocker push tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n\ndocker push tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n\ndocker push tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[33,30365,30366,30374,30378,30386,30390,30398,30402,30411,30415,30423,30427],{"__ignoreMap":31},[36,30367,30368,30370,30372],{"class":38,"line":39},[36,30369,27884],{"class":46},[36,30371,30347],{"class":110},[36,30373,30267],{"class":110},[36,30375,30376],{"class":38,"line":54},[36,30377,58],{"emptyLinePlaceholder":57},[36,30379,30380,30382,30384],{"class":38,"line":61},[36,30381,27884],{"class":46},[36,30383,30347],{"class":110},[36,30385,30282],{"class":110},[36,30387,30388],{"class":38,"line":80},[36,30389,58],{"emptyLinePlaceholder":57},[36,30391,30392,30394,30396],{"class":38,"line":96},[36,30393,27884],{"class":46},[36,30395,30347],{"class":110},[36,30397,30297],{"class":110},[36,30399,30400],{"class":38,"line":101},[36,30401,58],{"emptyLinePlaceholder":57},[36,30403,30404,30406,30408],{"class":38,"line":128},[36,30405,27884],{"class":46},[36,30407,30347],{"class":110},[36,30409,30410],{"class":110}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,30412,30413],{"class":38,"line":149},[36,30414,58],{"emptyLinePlaceholder":57},[36,30416,30417,30419,30421],{"class":38,"line":154},[36,30418,27884],{"class":46},[36,30420,30347],{"class":110},[36,30422,30327],{"class":110},[36,30424,30425],{"class":38,"line":167},[36,30426,58],{"emptyLinePlaceholder":57},[36,30428,30429,30431,30433],{"class":38,"line":172},[36,30430,27884],{"class":46},[36,30432,30347],{"class":110},[36,30434,30435],{"class":110}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[256,30437,30438],{"start":61},[259,30439,30440],{},"验证推送成功",[19,30442,30443],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30445,30446],{},[887,30447,5275],{},[2674,30449,30450,30453],{},[259,30451,30452],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[259,30454,30455],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30457,30458],{},[2992,30459],{"alt":31,"src":30460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30462,30463],{},[2992,30464],{"alt":31,"src":30465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23327,30467,30469],{"id":30468},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30471,30472,30473,30476,30477,30480],{},"如果您想在 ",[887,30474,30475],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[887,30478,30479],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30482,30483,30484],{},"1. ",[887,30485,30486],{},"启用 Docker 跨平台构建",[19,30488,30489],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30491,30492],{},"第一步：启用 buildx（只需执行一次）",[26,30494,30496],{"className":25152,"code":30495,"language":25154,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[33,30497,30498],{"__ignoreMap":31},[36,30499,30500,30502,30505,30508,30511,30514],{"class":38,"line":39},[36,30501,27884],{"class":46},[36,30503,30504],{"class":110}," buildx",[36,30506,30507],{"class":110}," create",[36,30509,30510],{"class":73}," --name",[36,30512,30513],{"class":110}," multiarch_builder",[36,30515,30516],{"class":73}," --use\n",[19,30518,30519],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30521,30522],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,30524,30526],{"className":25152,"code":30525,"language":25154,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[33,30527,30528],{"__ignoreMap":31},[36,30529,30530,30532,30534,30536,30539,30542,30545,30548],{"class":38,"line":39},[36,30531,27884],{"class":46},[36,30533,28561],{"class":110},[36,30535,28564],{"class":73},[36,30537,30538],{"class":73}," --privileged",[36,30540,30541],{"class":110}," multiarch\u002Fqemu-user-static",[36,30543,30544],{"class":73}," --reset",[36,30546,30547],{"class":73}," -p",[36,30549,30550],{"class":110}," yes\n",[19,30552,30553],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30555,30556],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,30558,30560],{"className":25152,"code":30559,"language":25154,"meta":31,"style":31},"docker buildx build --platform linux\u002Famd64,linux\u002Farm64 -t \u003C你的镜像名>:\u003C标签> --push .\n\n# 例子：\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:noetic-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:humble-jammy \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros:jazzy-noble \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal \\\n --push \\\n .\n\ndocker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n\n docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble \\\n --push \\\n .\n\n  docker buildx build \\\n--platform linux\u002Famd64,linux\u002Farm64 \\\n -t sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy \\\n --push \\\n .\n",[33,30561,30562,30604,30608,30613,30623,30633,30642,30648,30652,30656,30666,30674,30683,30689,30693,30697,30707,30715,30724,30730,30734,30738,30748,30756,30765,30771,30775,30779,30789,30797,30806,30812,30816,30820,30830,30838,30847,30853,30857,30861,30871,30879,30888,30894,30898,30902,30912,30920,30929,30935,30939,30943,30953,30961,30970,30976,30980,30984,30995,31003,31012,31018],{"__ignoreMap":31},[36,30563,30564,30566,30568,30570,30573,30576,30578,30580,30583,30585,30587,30589,30591,30594,30597,30599,30602],{"class":38,"line":39},[36,30565,27884],{"class":46},[36,30567,30504],{"class":110},[36,30569,30063],{"class":110},[36,30571,30572],{"class":73}," --platform",[36,30574,30575],{"class":110}," linux\u002Famd64,linux\u002Farm64",[36,30577,30066],{"class":73},[36,30579,30233],{"class":42},[36,30581,30582],{"class":110},"你的镜像",[36,30584,30239],{"class":50},[36,30586,2627],{"class":42},[36,30588,2526],{"class":110},[36,30590,2577],{"class":42},[36,30592,30593],{"class":110},"标",[36,30595,30596],{"class":50},"签",[36,30598,2627],{"class":42},[36,30600,30601],{"class":73}," --push",[36,30603,30072],{"class":110},[36,30605,30606],{"class":38,"line":54},[36,30607,58],{"emptyLinePlaceholder":57},[36,30609,30610],{"class":38,"line":61},[36,30611,30612],{"class":124},"# 例子：\n",[36,30614,30615,30617,30619,30621],{"class":38,"line":80},[36,30616,27884],{"class":46},[36,30618,30504],{"class":110},[36,30620,30063],{"class":110},[36,30622,26009],{"class":73},[36,30624,30625,30628,30631],{"class":38,"line":96},[36,30626,30627],{"class":50},"--platform ",[36,30629,30630],{"class":110},"linux\u002Famd64,linux\u002Farm64",[36,30632,26009],{"class":73},[36,30634,30635,30637,30640],{"class":38,"line":101},[36,30636,30066],{"class":73},[36,30638,30639],{"class":110}," tungchiahui\u002Fros:noetic-focal",[36,30641,26009],{"class":73},[36,30643,30644,30646],{"class":38,"line":128},[36,30645,30601],{"class":73},[36,30647,26009],{"class":73},[36,30649,30650],{"class":38,"line":149},[36,30651,30072],{"class":110},[36,30653,30654],{"class":38,"line":154},[36,30655,58],{"emptyLinePlaceholder":57},[36,30657,30658,30660,30662,30664],{"class":38,"line":167},[36,30659,27884],{"class":46},[36,30661,30504],{"class":110},[36,30663,30063],{"class":110},[36,30665,26009],{"class":73},[36,30667,30668,30670,30672],{"class":38,"line":172},[36,30669,30627],{"class":50},[36,30671,30630],{"class":110},[36,30673,26009],{"class":73},[36,30675,30676,30678,30681],{"class":38,"line":192},[36,30677,30066],{"class":73},[36,30679,30680],{"class":110}," tungchiahui\u002Fros:humble-jammy",[36,30682,26009],{"class":73},[36,30684,30685,30687],{"class":38,"line":211},[36,30686,30601],{"class":73},[36,30688,26009],{"class":73},[36,30690,30691],{"class":38,"line":216},[36,30692,30072],{"class":110},[36,30694,30695],{"class":38,"line":231},[36,30696,58],{"emptyLinePlaceholder":57},[36,30698,30699,30701,30703,30705],{"class":38,"line":236},[36,30700,27884],{"class":46},[36,30702,30504],{"class":110},[36,30704,30063],{"class":110},[36,30706,26009],{"class":73},[36,30708,30709,30711,30713],{"class":38,"line":247},[36,30710,30627],{"class":50},[36,30712,30630],{"class":110},[36,30714,26009],{"class":73},[36,30716,30717,30719,30722],{"class":38,"line":637},[36,30718,30066],{"class":73},[36,30720,30721],{"class":110}," tungchiahui\u002Fros:jazzy-noble",[36,30723,26009],{"class":73},[36,30725,30726,30728],{"class":38,"line":646},[36,30727,30601],{"class":73},[36,30729,26009],{"class":73},[36,30731,30732],{"class":38,"line":655},[36,30733,30072],{"class":110},[36,30735,30736],{"class":38,"line":660},[36,30737,58],{"emptyLinePlaceholder":57},[36,30739,30740,30742,30744,30746],{"class":38,"line":665},[36,30741,27651],{"class":46},[36,30743,30504],{"class":110},[36,30745,30063],{"class":110},[36,30747,26009],{"class":73},[36,30749,30750,30752,30754],{"class":38,"line":674},[36,30751,30627],{"class":50},[36,30753,30630],{"class":110},[36,30755,26009],{"class":73},[36,30757,30758,30760,30763],{"class":38,"line":679},[36,30759,30066],{"class":73},[36,30761,30762],{"class":110}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[36,30764,26009],{"class":73},[36,30766,30767,30769],{"class":38,"line":692},[36,30768,30601],{"class":73},[36,30770,26009],{"class":73},[36,30772,30773],{"class":38,"line":705},[36,30774,30072],{"class":110},[36,30776,30777],{"class":38,"line":710},[36,30778,58],{"emptyLinePlaceholder":57},[36,30780,30781,30783,30785,30787],{"class":38,"line":722},[36,30782,27884],{"class":46},[36,30784,30504],{"class":110},[36,30786,30063],{"class":110},[36,30788,26009],{"class":73},[36,30790,30791,30793,30795],{"class":38,"line":750},[36,30792,30627],{"class":50},[36,30794,30630],{"class":110},[36,30796,26009],{"class":73},[36,30798,30799,30801,30804],{"class":38,"line":755},[36,30800,30066],{"class":73},[36,30802,30803],{"class":110}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[36,30805,26009],{"class":73},[36,30807,30808,30810],{"class":38,"line":777},[36,30809,30601],{"class":73},[36,30811,26009],{"class":73},[36,30813,30814],{"class":38,"line":802},[36,30815,30072],{"class":110},[36,30817,30818],{"class":38,"line":807},[36,30819,58],{"emptyLinePlaceholder":57},[36,30821,30822,30824,30826,30828],{"class":38,"line":818},[36,30823,27651],{"class":46},[36,30825,30504],{"class":110},[36,30827,30063],{"class":110},[36,30829,26009],{"class":73},[36,30831,30832,30834,30836],{"class":38,"line":843},[36,30833,30627],{"class":50},[36,30835,30630],{"class":110},[36,30837,26009],{"class":73},[36,30839,30840,30842,30845],{"class":38,"line":848},[36,30841,30066],{"class":73},[36,30843,30844],{"class":110}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[36,30846,26009],{"class":73},[36,30848,30849,30851],{"class":38,"line":859},[36,30850,30601],{"class":73},[36,30852,26009],{"class":73},[36,30854,30855],{"class":38,"line":864},[36,30856,30072],{"class":110},[36,30858,30859],{"class":38,"line":873},[36,30860,58],{"emptyLinePlaceholder":57},[36,30862,30863,30865,30867,30869],{"class":38,"line":9454},[36,30864,27884],{"class":46},[36,30866,30504],{"class":110},[36,30868,30063],{"class":110},[36,30870,26009],{"class":73},[36,30872,30873,30875,30877],{"class":38,"line":9481},[36,30874,30627],{"class":50},[36,30876,30630],{"class":110},[36,30878,26009],{"class":73},[36,30880,30881,30883,30886],{"class":38,"line":9486},[36,30882,30066],{"class":73},[36,30884,30885],{"class":110}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[36,30887,26009],{"class":73},[36,30889,30890,30892],{"class":38,"line":9492},[36,30891,30601],{"class":73},[36,30893,26009],{"class":73},[36,30895,30896],{"class":38,"line":9504},[36,30897,30072],{"class":110},[36,30899,30900],{"class":38,"line":9516},[36,30901,58],{"emptyLinePlaceholder":57},[36,30903,30904,30906,30908,30910],{"class":38,"line":9528},[36,30905,27884],{"class":46},[36,30907,30504],{"class":110},[36,30909,30063],{"class":110},[36,30911,26009],{"class":73},[36,30913,30914,30916,30918],{"class":38,"line":11184},[36,30915,30627],{"class":50},[36,30917,30630],{"class":110},[36,30919,26009],{"class":73},[36,30921,30922,30924,30927],{"class":38,"line":11209},[36,30923,30066],{"class":73},[36,30925,30926],{"class":110}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,30928,26009],{"class":73},[36,30930,30931,30933],{"class":38,"line":11232},[36,30932,30601],{"class":73},[36,30934,26009],{"class":73},[36,30936,30937],{"class":38,"line":11256},[36,30938,30072],{"class":110},[36,30940,30941],{"class":38,"line":11261},[36,30942,58],{"emptyLinePlaceholder":57},[36,30944,30945,30947,30949,30951],{"class":38,"line":11266},[36,30946,27651],{"class":46},[36,30948,30504],{"class":110},[36,30950,30063],{"class":110},[36,30952,26009],{"class":73},[36,30954,30955,30957,30959],{"class":38,"line":11271},[36,30956,30627],{"class":50},[36,30958,30630],{"class":110},[36,30960,26009],{"class":73},[36,30962,30963,30965,30968],{"class":38,"line":11280},[36,30964,30066],{"class":73},[36,30966,30967],{"class":110}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[36,30969,26009],{"class":73},[36,30971,30972,30974],{"class":38,"line":11285},[36,30973,30601],{"class":73},[36,30975,26009],{"class":73},[36,30977,30978],{"class":38,"line":11291},[36,30979,30072],{"class":110},[36,30981,30982],{"class":38,"line":11312},[36,30983,58],{"emptyLinePlaceholder":57},[36,30985,30986,30989,30991,30993],{"class":38,"line":11318},[36,30987,30988],{"class":46},"  docker",[36,30990,30504],{"class":110},[36,30992,30063],{"class":110},[36,30994,26009],{"class":73},[36,30996,30997,30999,31001],{"class":38,"line":11332},[36,30998,30627],{"class":50},[36,31000,30630],{"class":110},[36,31002,26009],{"class":73},[36,31004,31005,31007,31010],{"class":38,"line":11338},[36,31006,30066],{"class":73},[36,31008,31009],{"class":110}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,31011,26009],{"class":73},[36,31013,31014,31016],{"class":38,"line":11365},[36,31015,30601],{"class":73},[36,31017,26009],{"class":73},[36,31019,31020],{"class":38,"line":11374},[36,31021,30072],{"class":110},[19,31023,31024],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31026,31027],{},[2992,31028],{"alt":31,"src":31029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31031,31032],{},[2992,31033],{"alt":31,"src":31034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23327,31036,31038],{"id":31037},"_623清除构建缓存","6.2.3.清除构建缓存",[26,31040,31042],{"className":25152,"code":31041,"language":25154,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[33,31043,31044,31049],{"__ignoreMap":31},[36,31045,31046],{"class":38,"line":39},[36,31047,31048],{"class":124},"# 清理BuildKit构建缓存\n",[36,31050,31051,31053,31056,31059],{"class":38,"line":54},[36,31052,27884],{"class":46},[36,31054,31055],{"class":110}," builder",[36,31057,31058],{"class":110}," prune",[36,31060,31061],{"class":73}," -f\n",[19,31063,31064],{},[2992,31065],{"alt":31,"src":31066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[1645,31068,31070],{"id":31069},"_63补充","6.3.补充",[23327,31072,31074],{"id":31073},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31076,31077],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31079,31080],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31082,31083],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,31085,31087],{"className":25152,"code":31086,"language":25154,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[33,31088,31089,31096],{"__ignoreMap":31},[36,31090,31091,31093],{"class":38,"line":39},[36,31092,28701],{"class":46},[36,31094,31095],{"class":110}," nginx\n",[36,31097,31098,31100,31103,31106,31108],{"class":38,"line":54},[36,31099,29886],{"class":46},[36,31101,31102],{"class":110}," echo",[36,31104,31105],{"class":110}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[36,31107,27553],{"class":42},[36,31109,31110],{"class":110}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31112,31113],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31115,31116],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,31118,31120],{"className":25152,"code":31119,"language":25154,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[33,31121,31122],{"__ignoreMap":31},[36,31123,31124,31126,31128,31130,31133],{"class":38,"line":39},[36,31125,27884],{"class":46},[36,31127,30063],{"class":110},[36,31129,30066],{"class":73},[36,31131,31132],{"class":110}," nginx:tuling",[36,31134,30072],{"class":110},[19,31136,31137],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31139,31140],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,31142,31144],{"className":25152,"code":31143,"language":25154,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[33,31145,31146],{"__ignoreMap":31},[36,31147,31148,31150,31152,31155,31157,31160],{"class":38,"line":39},[36,31149,27884],{"class":46},[36,31151,28561],{"class":110},[36,31153,31154],{"class":73}," -d",[36,31156,30547],{"class":73},[36,31158,31159],{"class":110}," 92:80",[36,31161,31162],{"class":110}," nginx:tuling\n",[19,31164,31165,31166],{},"4、访问 ",[1906,31167,31170],{"href":31168,"rel":31169},"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",[25195],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31172,31173],{},[2992,31174],{"alt":31,"src":31175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31177,31178],{},[2992,31179],{"alt":31,"src":31180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23327,31182,31184],{"id":31183},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31186,31187],{},"只需要知道大体流程即可",[19,31189,31190],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31192,31193],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31195,31196],{},"2、在Dockerfile中添加以下内容",[26,31198,31200],{"className":27422,"code":31199,"language":27424,"meta":31,"style":31},"# 基于哪个镜像\nFrom java:8\n# 复制文件到容器\nADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n# 声明需要暴露的端口\nEXPOSE 8877\n# 配置容器启动后执行的命令\nENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[33,31201,31202,31207,31212,31217,31222,31227,31232,31237],{"__ignoreMap":31},[36,31203,31204],{"class":38,"line":39},[36,31205,31206],{},"# 基于哪个镜像\n",[36,31208,31209],{"class":38,"line":54},[36,31210,31211],{},"From java:8\n",[36,31213,31214],{"class":38,"line":61},[36,31215,31216],{},"# 复制文件到容器\n",[36,31218,31219],{"class":38,"line":80},[36,31220,31221],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[36,31223,31224],{"class":38,"line":96},[36,31225,31226],{},"# 声明需要暴露的端口\n",[36,31228,31229],{"class":38,"line":101},[36,31230,31231],{},"EXPOSE 8877\n",[36,31233,31234],{"class":38,"line":128},[36,31235,31236],{},"# 配置容器启动后执行的命令\n",[36,31238,31239],{"class":38,"line":149},[36,31240,31241],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31243,31244],{},"3、使用docker build命令构建镜像",[26,31246,31248],{"className":25152,"code":31247,"language":25154,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[33,31249,31250],{"__ignoreMap":31},[36,31251,31252,31254,31256,31258,31261],{"class":38,"line":39},[36,31253,27884],{"class":46},[36,31255,30063],{"class":110},[36,31257,30066],{"class":73},[36,31259,31260],{"class":110}," tulingmall-member:0.0.5",[36,31262,30072],{"class":110},[19,31264,31265],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31267,31268],{},[2992,31269],{"alt":31,"src":31270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31272,31273],{},"4、启动镜像，加-d可在后台启动",[26,31275,31277],{"className":25152,"code":31276,"language":25154,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[33,31278,31279],{"__ignoreMap":31},[36,31280,31281,31283,31285,31287,31289,31292],{"class":38,"line":39},[36,31282,27884],{"class":46},[36,31284,28561],{"class":110},[36,31286,31154],{"class":73},[36,31288,30547],{"class":73},[36,31290,31291],{"class":110}," 8877:8877",[36,31293,31294],{"class":110}," tulingmall-member:0.0.5\n",[19,31296,31297],{},"加上JVM参数：",[26,31299,31301],{"className":25152,"code":31300,"language":25154,"meta":31,"style":31},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\ndocker run  -d -p 8877:8877 \\\n-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848  \\\n-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'  \\\n--cap-add=SYS_PTRACE  \\\ntulingmall-member:0.0.5\n",[33,31302,31303,31308,31323,31333,31342,31349],{"__ignoreMap":31},[36,31304,31305],{"class":38,"line":39},[36,31306,31307],{"class":124},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[36,31309,31310,31312,31314,31317,31319,31321],{"class":38,"line":54},[36,31311,27884],{"class":46},[36,31313,28561],{"class":110},[36,31315,31316],{"class":73},"  -d",[36,31318,30547],{"class":73},[36,31320,31291],{"class":110},[36,31322,26009],{"class":73},[36,31324,31325,31327,31330],{"class":38,"line":61},[36,31326,29459],{"class":50},[36,31328,31329],{"class":110},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[36,31331,31332],{"class":73},"  \\\n",[36,31334,31335,31337,31340],{"class":38,"line":80},[36,31336,29459],{"class":50},[36,31338,31339],{"class":110},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[36,31341,31332],{"class":73},[36,31343,31344,31347],{"class":38,"line":96},[36,31345,31346],{"class":50},"--cap-add=SYS_PTRACE  ",[36,31348,27506],{"class":73},[36,31350,31351],{"class":38,"line":101},[36,31352,31353],{"class":50},"tulingmall-member:0.0.5\n",[19,31355,31356],{},"5、访问会员服务接口",[19,31358,31359],{},[2992,31360],{"alt":31,"src":31361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23327,31363,31365],{"id":31364},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31367,31368],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31370,31371,31372],{},"阿里云docker镜像仓库：",[1906,31373,31374],{"href":31374,"rel":31375},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25195],[19,31377,31378],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31380,31381],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31383,31384],{},[2992,31385],{"alt":31,"src":31386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31388,31389],{},"要把镜像推送到镜像仓库",[26,31391,31393],{"className":25152,"code":31392,"language":25154,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,31394,31395],{"__ignoreMap":31},[36,31396,31397,31399,31401,31403],{"class":38,"line":39},[36,31398,27884],{"class":46},[36,31400,30228],{"class":110},[36,31402,31260],{"class":110},[36,31404,31405],{"class":110}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31407,31408],{},"最后将镜像推送到远程仓库",[26,31410,31412],{"className":25152,"code":31411,"language":25154,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,31413,31414],{"__ignoreMap":31},[36,31415,31416,31418,31420],{"class":38,"line":39},[36,31417,27884],{"class":46},[36,31419,30347],{"class":110},[36,31421,31405],{"class":110},[1592,31423,31424],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":31426},[31427,31428,31429],{"id":29814,"depth":61,"text":29815},{"id":30043,"depth":61,"text":30044},{"id":31069,"depth":61,"text":31070},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29806,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31436,"title":31437,"body":31438,"description":31,"extension":1603,"meta":31581,"navigation":57,"path":31582,"seo":31583,"stem":31584,"__hash__":31585},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31439,"toc":31579},[31440,31443,31448,31453,31456,31461,31466,31469,31474,31479,31482,31487,31490,31493,31496,31499,31502,31505,31525,31547,31550,31553,31573,31576],[10,31441,31437],{"id":31442},"_7vscode远程开发",[256,31444,31445],{},[259,31446,31447],{},"插件1：微软Docker工具",[19,31449,31450],{},[2992,31451],{"alt":31,"src":31452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31454,31455],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31457,31458],{},[2992,31459],{"alt":31,"src":31460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[256,31462,31463],{"start":54},[259,31464,31465],{},"插件2：微软Docker远程开发工具",[19,31467,31468],{},"下面这是远程开发的插件。",[19,31470,31471],{},[2992,31472],{"alt":31,"src":31473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31475,31476],{},[2992,31477],{"alt":31,"src":31478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31480,31481],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31483,31484],{},[2992,31485],{"alt":31,"src":31486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31488,31489],{},"安装完拓展之后，vscode进行链接：",[19,31491,31492],{},"1.按ctrl+shift+p",[19,31494,31495],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31497,31498],{},"3.选择目前运行的容器",[19,31500,31501],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31503,31504],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,31506,31508],{"className":25152,"code":31507,"language":25154,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[33,31509,31510],{"__ignoreMap":31},[36,31511,31512,31514,31516,31519,31522],{"class":38,"line":39},[36,31513,27884],{"class":46},[36,31515,28561],{"class":110},[36,31517,31518],{"class":73}," -v",[36,31520,31521],{"class":110}," 主机目录:容器目录",[36,31523,31524],{"class":110}," image-name\n",[26,31526,31528],{"className":25152,"code":31527,"language":25154,"meta":31,"style":31},"docker run -it -v \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[33,31529,31530],{"__ignoreMap":31},[36,31531,31532,31534,31536,31539,31541,31544],{"class":38,"line":39},[36,31533,27884],{"class":46},[36,31535,28561],{"class":110},[36,31537,31538],{"class":73}," -it",[36,31540,31518],{"class":73},[36,31542,31543],{"class":110}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[36,31545,31546],{"class":110}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31548,31549],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31551,31552],{},"查看挂载情况：",[26,31554,31556],{"className":25152,"code":31555,"language":25154,"meta":31,"style":31},"mount | grep -i project\n",[33,31557,31558],{"__ignoreMap":31},[36,31559,31560,31563,31565,31568,31570],{"class":38,"line":39},[36,31561,31562],{"class":46},"mount",[36,31564,26440],{"class":42},[36,31566,31567],{"class":46}," grep",[36,31569,27761],{"class":73},[36,31571,31572],{"class":110}," project\n",[19,31574,31575],{},"也可以通过ls来进行查看",[1592,31577,31578],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":31580},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31437,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31587,"title":31588,"body":31589,"description":24706,"extension":1603,"meta":31593,"navigation":57,"path":31595,"seo":31596,"stem":31597,"__hash__":31598},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31590,"toc":31591},[],{"title":31,"searchDepth":54,"depth":54,"links":31592},[],{"category":31594},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31588,"description":24706},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31600,"title":31601,"body":31602,"description":24706,"extension":1603,"meta":31606,"navigation":57,"path":31607,"seo":31608,"stem":31609,"__hash__":31610},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31603,"toc":31604},[],{"title":31,"searchDepth":54,"depth":54,"links":31605},[],{"category":31594},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31601,"description":24706},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31612,"title":31613,"body":31614,"description":24706,"extension":1603,"meta":31907,"navigation":57,"path":31908,"seo":31909,"stem":31910,"__hash__":31911},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31615,"toc":31905},[31616,31619,31627,31642,31647,31698,31701,31707,31894,31899,31902],[10,31617,31613],{"id":31618},"_1验证深度学习环境",[19,31620,31621,31622],{},"关于环境的安装，看",[1906,31623,31626],{"href":31624,"rel":31625},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25195],"Pytorch-->深度学习",[19,31628,31629,31630,31633,31634,31637,31638,31641],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[33,31631,31632],{},"pytorch-cuda=12.4"," 是一个“ ",[887,31635,31636],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[887,31639,31640],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31643,31644],{},[2992,31645],{"alt":31,"src":31646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-001.png",[26,31648,31650],{"className":25152,"code":31649,"language":25154,"meta":31,"style":31},"# CUDA 12.4\nconda install pytorch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 pytorch-cuda=12.4 -c pytorch -c nvidia\n",[33,31651,31652,31657],{"__ignoreMap":31},[36,31653,31654],{"class":38,"line":39},[36,31655,31656],{"class":124},"# CUDA 12.4\n",[36,31658,31659,31662,31664,31667,31670,31673,31676,31679,31681,31684,31687,31690,31693,31695],{"class":38,"line":54},[36,31660,31661],{"class":46},"conda",[36,31663,25164],{"class":110},[36,31665,31666],{"class":110}," pytorch==",[36,31668,31669],{"class":73},"2.5.1",[36,31671,31672],{"class":110}," torchvision==",[36,31674,31675],{"class":73},"0.20.1",[36,31677,31678],{"class":110}," torchaudio==",[36,31680,31669],{"class":73},[36,31682,31683],{"class":110}," pytorch-cuda=",[36,31685,31686],{"class":73},"12.4",[36,31688,31689],{"class":73}," -c",[36,31691,31692],{"class":110}," pytorch",[36,31694,31689],{"class":73},[36,31696,31697],{"class":110}," nvidia\n",[19,31699,31700],{},"）：",[19,31702,31703],{},[1906,31704,31705],{"href":31705,"rel":31706},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25195],[26,31708,31712],{"className":31709,"code":31710,"language":31711,"meta":31,"style":31},"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",[33,31713,31714,31719,31727,31732,31742,31758,31763,31773,31810,31817,31829,31845,31850,31860,31872,31882],{"__ignoreMap":31},[36,31715,31716],{"class":38,"line":39},[36,31717,31718],{"class":124},"# 对深度学习环境进行测试\n",[36,31720,31721,31724],{"class":38,"line":54},[36,31722,31723],{"class":42},"import",[36,31725,31726],{"class":50}," torch\n",[36,31728,31729],{"class":38,"line":61},[36,31730,31731],{"class":124},"# 查看cuda是否被激活\n",[36,31733,31734,31737,31739],{"class":38,"line":80},[36,31735,31736],{"class":50},"flag",[36,31738,70],{"class":42},[36,31740,31741],{"class":50},"torch.cuda.is_available()\n",[36,31743,31744,31747,31749,31752,31755],{"class":38,"line":96},[36,31745,31746],{"class":73},"print",[36,31748,222],{"class":50},[36,31750,31751],{"class":110},"\"cuda:\"",[36,31753,31754],{"class":50},", flag)   ",[36,31756,31757],{"class":124},"#返回true的话说明被激活\n",[36,31759,31760],{"class":38,"line":101},[36,31761,31762],{"class":124},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[36,31764,31765,31768,31770],{"class":38,"line":128},[36,31766,31767],{"class":50},"ngpu",[36,31769,70],{"class":42},[36,31771,31772],{"class":73},"1\n",[36,31774,31775,31778,31780,31783,31786,31788,31791,31794,31797,31799,31801,31803,31805,31808],{"class":38,"line":149},[36,31776,31777],{"class":50},"device",[36,31779,70],{"class":42},[36,31781,31782],{"class":50},"torch.device(",[36,31784,31785],{"class":110},"\"cuda:0\"",[36,31787,3222],{"class":42},[36,31789,31790],{"class":50},"(torch.cuda.is_available() ",[36,31792,31793],{"class":42},"and",[36,31795,31796],{"class":50}," ngpu",[36,31798,2627],{"class":42},[36,31800,1859],{"class":73},[36,31802,15043],{"class":50},[36,31804,3219],{"class":42},[36,31806,31807],{"class":110}," \"cpu\"",[36,31809,1680],{"class":50},[36,31811,31812,31814],{"class":38,"line":154},[36,31813,31746],{"class":73},[36,31815,31816],{"class":50},"(device)\n",[36,31818,31819,31821,31824,31826],{"class":38,"line":167},[36,31820,31746],{"class":73},[36,31822,31823],{"class":50},"(torch.cuda.get_device_name(",[36,31825,1859],{"class":73},[36,31827,31828],{"class":50},"))\n",[36,31830,31831,31833,31836,31838,31840,31842],{"class":38,"line":172},[36,31832,31746],{"class":73},[36,31834,31835],{"class":50},"(torch.rand(",[36,31837,1741],{"class":73},[36,31839,2045],{"class":50},[36,31841,1741],{"class":73},[36,31843,31844],{"class":50},").cuda())\n",[36,31846,31847],{"class":38,"line":192},[36,31848,31849],{"class":124},"# 查看cuda和cudnn的版本\n",[36,31851,31852,31855,31857],{"class":38,"line":211},[36,31853,31854],{"class":50},"cuda_version",[36,31856,70],{"class":42},[36,31858,31859],{"class":50},"torch.version.cuda\n",[36,31861,31862,31864,31866,31869],{"class":38,"line":216},[36,31863,31746],{"class":73},[36,31865,222],{"class":50},[36,31867,31868],{"class":110},"\"cuda version\"",[36,31870,31871],{"class":50},",cuda_version)\n",[36,31873,31874,31877,31879],{"class":38,"line":231},[36,31875,31876],{"class":50},"cudnn_version",[36,31878,70],{"class":42},[36,31880,31881],{"class":50},"torch.backends.cudnn.version()\n",[36,31883,31884,31886,31888,31891],{"class":38,"line":236},[36,31885,31746],{"class":73},[36,31887,222],{"class":50},[36,31889,31890],{"class":110},"\"cudnn version\"",[36,31892,31893],{"class":50},",cudnn_version)\n",[19,31895,31896],{},[2992,31897],{"alt":31,"src":31898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,31900,31901],{},"cuda:0 指的是一块显卡",[1592,31903,31904],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":31906},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31613,"description":24706},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31913,"title":31914,"body":31915,"description":24706,"extension":1603,"meta":51719,"navigation":57,"path":51720,"seo":51721,"stem":51722,"__hash__":51723},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31916,"toc":51713},[31917,31920,31924,31928,31931,31936,31941,31944,31949,31954,31959,31962,31966,31971,31975,31980,31983,31988,31991,31994,31997,32000,32005,32008,32013,32018,32023,32028,32031,32035,32038,32043,32647,32652,32655,32660,32663,32666,33130,33133,33136,33139,33142,35193,35196,35201,35206,36001,36004,36009,36787,36791,38450,38454,39168,39172,39176,39181,39186,39191,39194,39199,39204,39209,39214,39219,39223,39228,40510,40515,40518,40521,40524,40679,40682,40685,41901,41906,42601,42605,42609,42614,42619,42622,42627,42632,42637,42642,42647,42652,42657,42662,42667,42672,42677,42682,42687,42692,42697,42702,42707,42712,42717,42722,42727,42732,42737,42742,42747,42752,42757,42762,42767,42772,42776,42780,42783,44261,44265,45912,45916,46610,46614,46617,46620,47164,47167,47171,47174,48571,48575,48578,49156,50943,50947,50950,51710],[10,31918,31914],{"id":31919},"_2经典神经网络",[1645,31921,31923],{"id":31922},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23327,31925,31927],{"id":31926},"_211原理介绍","2.1.1.原理介绍",[19,31929,31930],{},"LeNet-5",[256,31932,31933],{},[259,31934,31935],{},"原理",[19,31937,31938],{},[2992,31939],{"alt":31,"src":31940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,31942,31943],{},"B是batch批次；C是channel通道",[256,31945,31946],{"start":54},[259,31947,31948],{},"网络参数详细",[19,31950,31951],{},[2992,31952],{"alt":31,"src":31953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,31955,31956],{},[2992,31957],{"alt":31,"src":31958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,31960,31961],{},"AlexNet",[256,31963,31964],{},[259,31965,31935],{},[19,31967,31968],{},[2992,31969],{"alt":31,"src":31970},"\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",[256,31972,31973],{"start":54},[259,31974,31948],{},[19,31976,31977],{},[2992,31978],{"alt":31,"src":31979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31981,31982],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31984,31985],{},[2992,31986],{"alt":31,"src":31987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,31989,31990],{},"数据处理中的图像增强操作:",[19,31992,31993],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31995,31996],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31998,31999],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32001,32002],{},[2992,32003],{"alt":31,"src":32004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,32006,32007],{},"提升网络精确度的方法：LRN正则化",[19,32009,32010],{},[2992,32011],{"alt":31,"src":32012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,32014,32015],{},[2992,32016],{"alt":31,"src":32017},"\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",[256,32019,32020],{"start":61},[259,32021,32022],{},"AlexNet的总结",[19,32024,32025],{},[2992,32026],{"alt":31,"src":32027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,32029,32030],{},"比LeNet模型要深一丢丢",[23327,32032,32034],{"id":32033},"_212代码实现","2.1.2.代码实现",[19,32036,32037],{},"（1）LeNet",[256,32039,32040],{},[259,32041,32042],{},"模型搭建",[26,32044,32046],{"className":31709,"code":32045,"language":31711,"meta":31,"style":31},"# 导入库\nimport torch\n# 导入神经网络层\nfrom torch import nn\n# 导入展示神经网络参数的包\nfrom torchsummary import summary\n\nclass LeNet(nn.Module):\n    # 模型初始化:\n    # 定义一些网络层和激活函数\n    def __init__(self):\n        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n        super(LeNet,self).__init__()\n\n        # 定义网络层\n        self.c1=nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5,padding=2)\n        self.sig=nn.Sigmoid()\n        # 定义池化\n        self.s2=nn.AvgPool2d(kernel_size=2,stride=2)\n        self.c3=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=5)\n        self.s4=nn.AvgPool2d(kernel_size=2,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n        # 定义全连接层\n        self.f5=nn.Linear(400,120)\n        self.f6=nn.Linear(120,84)\n        self.f7=nn.Linear(84,10)\n\n    # 写工具->写前向传播\n    def forward(self,x):\n        x=self.sig(self.c1(x))\n        x=self.s2(x)\n        x=self.sig(self.c3(x))\n        x=self.s4(x)\n        x=self.flatten(x)\n        x=self.sig(self.f5(x))\n        x=self.sig(self.f6(x))\n        x=self.f7(x)\n        return x\n\nif __name__==\"__main__\":\n    # 判断是否有cuda是否激活,有GPU会返回cuda\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 如果就是想指定用cpu用下方代码:\n    # device=\"cpu\"\n    # print(device)\n\n    # 实例化模型\n    # 将模型放到设备中去运行\n    model=LeNet().to(device)\n    print(summary(model,(1,28,28)))\n",[33,32047,32048,32053,32059,32064,32077,32082,32094,32098,32118,32123,32128,32139,32144,32163,32167,32172,32221,32233,32238,32267,32302,32329,32334,32346,32351,32371,32390,32409,32413,32418,32428,32445,32456,32471,32482,32493,32508,32523,32534,32541,32545,32559,32564,32587,32592,32597,32602,32606,32611,32616,32626],{"__ignoreMap":31},[36,32049,32050],{"class":38,"line":39},[36,32051,32052],{"class":124},"# 导入库\n",[36,32054,32055,32057],{"class":38,"line":54},[36,32056,31723],{"class":42},[36,32058,31726],{"class":50},[36,32060,32061],{"class":38,"line":61},[36,32062,32063],{"class":124},"# 导入神经网络层\n",[36,32065,32066,32069,32072,32074],{"class":38,"line":80},[36,32067,32068],{"class":42},"from",[36,32070,32071],{"class":50}," torch ",[36,32073,31723],{"class":42},[36,32075,32076],{"class":50}," nn\n",[36,32078,32079],{"class":38,"line":96},[36,32080,32081],{"class":124},"# 导入展示神经网络参数的包\n",[36,32083,32084,32086,32089,32091],{"class":38,"line":101},[36,32085,32068],{"class":42},[36,32087,32088],{"class":50}," torchsummary ",[36,32090,31723],{"class":42},[36,32092,32093],{"class":50}," summary\n",[36,32095,32096],{"class":38,"line":128},[36,32097,58],{"emptyLinePlaceholder":57},[36,32099,32100,32102,32105,32107,32110,32112,32115],{"class":38,"line":149},[36,32101,16023],{"class":42},[36,32103,32104],{"class":46}," LeNet",[36,32106,222],{"class":50},[36,32108,32109],{"class":46},"nn",[36,32111,2225],{"class":50},[36,32113,32114],{"class":46},"Module",[36,32116,32117],{"class":50},"):\n",[36,32119,32120],{"class":38,"line":154},[36,32121,32122],{"class":124},"    # 模型初始化:\n",[36,32124,32125],{"class":38,"line":167},[36,32126,32127],{"class":124},"    # 定义一些网络层和激活函数\n",[36,32129,32130,32133,32136],{"class":38,"line":172},[36,32131,32132],{"class":42},"    def",[36,32134,32135],{"class":73}," __init__",[36,32137,32138],{"class":50},"(self):\n",[36,32140,32141],{"class":38,"line":192},[36,32142,32143],{"class":124},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[36,32145,32146,32149,32152,32155,32158,32161],{"class":38,"line":211},[36,32147,32148],{"class":73},"        super",[36,32150,32151],{"class":50},"(LeNet,",[36,32153,32154],{"class":73},"self",[36,32156,32157],{"class":50},").",[36,32159,32160],{"class":73},"__init__",[36,32162,3484],{"class":50},[36,32164,32165],{"class":38,"line":216},[36,32166,58],{"emptyLinePlaceholder":57},[36,32168,32169],{"class":38,"line":231},[36,32170,32171],{"class":124},"        # 定义网络层\n",[36,32173,32174,32177,32180,32182,32185,32188,32190,32192,32194,32197,32199,32201,32203,32206,32208,32210,32212,32215,32217,32219],{"class":38,"line":236},[36,32175,32176],{"class":73},"        self",[36,32178,32179],{"class":50},".c1",[36,32181,70],{"class":42},[36,32183,32184],{"class":50},"nn.Conv2d(",[36,32186,32187],{"class":473},"in_channels",[36,32189,70],{"class":42},[36,32191,1885],{"class":73},[36,32193,2045],{"class":50},[36,32195,32196],{"class":473},"out_channels",[36,32198,70],{"class":42},[36,32200,2012],{"class":73},[36,32202,2045],{"class":50},[36,32204,32205],{"class":473},"kernel_size",[36,32207,70],{"class":42},[36,32209,1987],{"class":73},[36,32211,2045],{"class":50},[36,32213,32214],{"class":473},"padding",[36,32216,70],{"class":42},[36,32218,1747],{"class":73},[36,32220,1680],{"class":50},[36,32222,32223,32225,32228,32230],{"class":38,"line":247},[36,32224,32176],{"class":73},[36,32226,32227],{"class":50},".sig",[36,32229,70],{"class":42},[36,32231,32232],{"class":50},"nn.Sigmoid()\n",[36,32234,32235],{"class":38,"line":637},[36,32236,32237],{"class":124},"        # 定义池化\n",[36,32239,32240,32242,32245,32247,32250,32252,32254,32256,32258,32261,32263,32265],{"class":38,"line":646},[36,32241,32176],{"class":73},[36,32243,32244],{"class":50},".s2",[36,32246,70],{"class":42},[36,32248,32249],{"class":50},"nn.AvgPool2d(",[36,32251,32205],{"class":473},[36,32253,70],{"class":42},[36,32255,1747],{"class":73},[36,32257,2045],{"class":50},[36,32259,32260],{"class":473},"stride",[36,32262,70],{"class":42},[36,32264,1747],{"class":73},[36,32266,1680],{"class":50},[36,32268,32269,32271,32274,32276,32278,32280,32282,32284,32286,32288,32290,32292,32294,32296,32298,32300],{"class":38,"line":655},[36,32270,32176],{"class":73},[36,32272,32273],{"class":50},".c3",[36,32275,70],{"class":42},[36,32277,32184],{"class":50},[36,32279,32187],{"class":473},[36,32281,70],{"class":42},[36,32283,2012],{"class":73},[36,32285,2045],{"class":50},[36,32287,32196],{"class":473},[36,32289,70],{"class":42},[36,32291,2268],{"class":73},[36,32293,2045],{"class":50},[36,32295,32205],{"class":473},[36,32297,70],{"class":42},[36,32299,1987],{"class":73},[36,32301,1680],{"class":50},[36,32303,32304,32306,32309,32311,32313,32315,32317,32319,32321,32323,32325,32327],{"class":38,"line":660},[36,32305,32176],{"class":73},[36,32307,32308],{"class":50},".s4",[36,32310,70],{"class":42},[36,32312,32249],{"class":50},[36,32314,32205],{"class":473},[36,32316,70],{"class":42},[36,32318,1747],{"class":73},[36,32320,2045],{"class":50},[36,32322,32260],{"class":473},[36,32324,70],{"class":42},[36,32326,1747],{"class":73},[36,32328,1680],{"class":50},[36,32330,32331],{"class":38,"line":665},[36,32332,32333],{"class":124},"        # 定义平展层\n",[36,32335,32336,32338,32341,32343],{"class":38,"line":674},[36,32337,32176],{"class":73},[36,32339,32340],{"class":50},".flatten",[36,32342,70],{"class":42},[36,32344,32345],{"class":50},"nn.Flatten()\n",[36,32347,32348],{"class":38,"line":679},[36,32349,32350],{"class":124},"        # 定义全连接层\n",[36,32352,32353,32355,32358,32360,32363,32365,32367,32369],{"class":38,"line":692},[36,32354,32176],{"class":73},[36,32356,32357],{"class":50},".f5",[36,32359,70],{"class":42},[36,32361,32362],{"class":50},"nn.Linear(",[36,32364,5478],{"class":73},[36,32366,2045],{"class":50},[36,32368,2484],{"class":73},[36,32370,1680],{"class":50},[36,32372,32373,32375,32378,32380,32382,32384,32386,32388],{"class":38,"line":705},[36,32374,32176],{"class":73},[36,32376,32377],{"class":50},".f6",[36,32379,70],{"class":42},[36,32381,32362],{"class":50},[36,32383,2484],{"class":73},[36,32385,2045],{"class":50},[36,32387,2378],{"class":73},[36,32389,1680],{"class":50},[36,32391,32392,32394,32397,32399,32401,32403,32405,32407],{"class":38,"line":710},[36,32393,32176],{"class":73},[36,32395,32396],{"class":50},".f7",[36,32398,70],{"class":42},[36,32400,32362],{"class":50},[36,32402,2378],{"class":73},[36,32404,2045],{"class":50},[36,32406,2113],{"class":73},[36,32408,1680],{"class":50},[36,32410,32411],{"class":38,"line":722},[36,32412,58],{"emptyLinePlaceholder":57},[36,32414,32415],{"class":38,"line":750},[36,32416,32417],{"class":124},"    # 写工具->写前向传播\n",[36,32419,32420,32422,32425],{"class":38,"line":755},[36,32421,32132],{"class":42},[36,32423,32424],{"class":46}," forward",[36,32426,32427],{"class":50},"(self,x):\n",[36,32429,32430,32433,32435,32437,32440,32442],{"class":38,"line":777},[36,32431,32432],{"class":50},"        x",[36,32434,70],{"class":42},[36,32436,32154],{"class":73},[36,32438,32439],{"class":50},".sig(",[36,32441,32154],{"class":73},[36,32443,32444],{"class":50},".c1(x))\n",[36,32446,32447,32449,32451,32453],{"class":38,"line":802},[36,32448,32432],{"class":50},[36,32450,70],{"class":42},[36,32452,32154],{"class":73},[36,32454,32455],{"class":50},".s2(x)\n",[36,32457,32458,32460,32462,32464,32466,32468],{"class":38,"line":807},[36,32459,32432],{"class":50},[36,32461,70],{"class":42},[36,32463,32154],{"class":73},[36,32465,32439],{"class":50},[36,32467,32154],{"class":73},[36,32469,32470],{"class":50},".c3(x))\n",[36,32472,32473,32475,32477,32479],{"class":38,"line":818},[36,32474,32432],{"class":50},[36,32476,70],{"class":42},[36,32478,32154],{"class":73},[36,32480,32481],{"class":50},".s4(x)\n",[36,32483,32484,32486,32488,32490],{"class":38,"line":843},[36,32485,32432],{"class":50},[36,32487,70],{"class":42},[36,32489,32154],{"class":73},[36,32491,32492],{"class":50},".flatten(x)\n",[36,32494,32495,32497,32499,32501,32503,32505],{"class":38,"line":848},[36,32496,32432],{"class":50},[36,32498,70],{"class":42},[36,32500,32154],{"class":73},[36,32502,32439],{"class":50},[36,32504,32154],{"class":73},[36,32506,32507],{"class":50},".f5(x))\n",[36,32509,32510,32512,32514,32516,32518,32520],{"class":38,"line":859},[36,32511,32432],{"class":50},[36,32513,70],{"class":42},[36,32515,32154],{"class":73},[36,32517,32439],{"class":50},[36,32519,32154],{"class":73},[36,32521,32522],{"class":50},".f6(x))\n",[36,32524,32525,32527,32529,32531],{"class":38,"line":864},[36,32526,32432],{"class":50},[36,32528,70],{"class":42},[36,32530,32154],{"class":73},[36,32532,32533],{"class":50},".f7(x)\n",[36,32535,32536,32538],{"class":38,"line":873},[36,32537,16081],{"class":42},[36,32539,32540],{"class":50}," x\n",[36,32542,32543],{"class":38,"line":9454},[36,32544,58],{"emptyLinePlaceholder":57},[36,32546,32547,32549,32552,32554,32557],{"class":38,"line":9481},[36,32548,3061],{"class":42},[36,32550,32551],{"class":73}," __name__",[36,32553,4441],{"class":42},[36,32555,32556],{"class":110},"\"__main__\"",[36,32558,5230],{"class":50},[36,32560,32561],{"class":38,"line":9486},[36,32562,32563],{"class":124},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[36,32565,32566,32569,32571,32573,32576,32578,32581,32583,32585],{"class":38,"line":9492},[36,32567,32568],{"class":50},"    device",[36,32570,70],{"class":42},[36,32572,31782],{"class":50},[36,32574,32575],{"class":110},"\"cuda\"",[36,32577,3222],{"class":42},[36,32579,32580],{"class":50}," torch.cuda.is_available() ",[36,32582,3219],{"class":42},[36,32584,31807],{"class":110},[36,32586,1680],{"class":50},[36,32588,32589],{"class":38,"line":9504},[36,32590,32591],{"class":124},"    # 如果就是想指定用cpu用下方代码:\n",[36,32593,32594],{"class":38,"line":9516},[36,32595,32596],{"class":124},"    # device=\"cpu\"\n",[36,32598,32599],{"class":38,"line":9528},[36,32600,32601],{"class":124},"    # print(device)\n",[36,32603,32604],{"class":38,"line":11184},[36,32605,58],{"emptyLinePlaceholder":57},[36,32607,32608],{"class":38,"line":11209},[36,32609,32610],{"class":124},"    # 实例化模型\n",[36,32612,32613],{"class":38,"line":11232},[36,32614,32615],{"class":124},"    # 将模型放到设备中去运行\n",[36,32617,32618,32621,32623],{"class":38,"line":11256},[36,32619,32620],{"class":50},"    model",[36,32622,70],{"class":42},[36,32624,32625],{"class":50},"LeNet().to(device)\n",[36,32627,32628,32631,32634,32636,32638,32640,32642,32644],{"class":38,"line":11261},[36,32629,32630],{"class":73},"    print",[36,32632,32633],{"class":50},"(summary(model,(",[36,32635,1885],{"class":73},[36,32637,2045],{"class":50},[36,32639,2568],{"class":73},[36,32641,2045],{"class":50},[36,32643,2568],{"class":73},[36,32645,32646],{"class":50},")))\n",[19,32648,32649],{},[2992,32650],{"alt":31,"src":32651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,32653,32654],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[256,32656,32657],{"start":54},[259,32658,32659],{},"训练",[19,32661,32662],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32664,32665],{},"在训练之前可以将数据展示看一下",[26,32667,32669],{"className":31709,"code":32668,"language":31711,"meta":31,"style":31},"# 建立画图的函数，用于展示数据\n# torchvision中包含很多内置的数据集\nfrom sklearn.externals.array_api_compat.torch import squeeze\nfrom torchvision.datasets import FashionMNIST\nimport numpy as np\n# 引入处理数据集的包\nfrom torchvision import transforms\n# 从torch库中引入数据处理的包\nimport torch.utils.data as Data\n# 导入画图的库\nimport matplotlib.pyplot as plt\n\n\ntrain_data=FashionMNIST(root='.\u002Fdata',\n                        train=True,\n                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n                        transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                        download=True)\n\n# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\ntrain_loader=Data.DataLoader(dataset=train_data,\n                             batch_size=64,\n                             # 数据是否打乱\n                             shuffle=True,\n                             # 规定加载数据的进程\n                             num_workers=0)\n\n# 获得一个batch的数据\nfor step,(b_x,b_y) in enumerate(train_loader):\n    if step > 0:\n        break\n# squeeze()这个函数是去除张量中所有大小为1的维度\nbatch_x=b_x.squeeze().numpy()  #将四维张量移除所有维度为1的维度,并转换成numpy数组\nbatch_y=b_y.numpy()   #将张量转换成功numpy数组\nclass_label=train_data.classes  #训练集标签\n# print(class_label)\n\n# 可视化一个batch的图像\nplt.figure(figsize=(12,5))\nfor ii in np.arange(len(batch_y)):\n    plt.subplot(4,16,ii + 1)\n    plt.imshow(batch_x[ii,:,:],cmap=plt.cm.gray)\n    plt.title(class_label[batch_y[ii]],size=10)\n    plt.axis(\"off\")\n    plt.subplots_adjust(wspace=0.05)\nplt.show()\n",[33,32670,32671,32676,32681,32693,32705,32718,32723,32735,32740,32752,32757,32769,32773,32777,32798,32810,32815,32836,32847,32851,32856,32874,32885,32890,32901,32906,32917,32921,32926,32941,32954,32959,32964,32977,32990,33003,33008,33012,33017,33037,33054,33074,33087,33100,33110,33125],{"__ignoreMap":31},[36,32672,32673],{"class":38,"line":39},[36,32674,32675],{"class":124},"# 建立画图的函数，用于展示数据\n",[36,32677,32678],{"class":38,"line":54},[36,32679,32680],{"class":124},"# torchvision中包含很多内置的数据集\n",[36,32682,32683,32685,32688,32690],{"class":38,"line":61},[36,32684,32068],{"class":42},[36,32686,32687],{"class":50}," sklearn.externals.array_api_compat.torch ",[36,32689,31723],{"class":42},[36,32691,32692],{"class":50}," squeeze\n",[36,32694,32695,32697,32700,32702],{"class":38,"line":80},[36,32696,32068],{"class":42},[36,32698,32699],{"class":50}," torchvision.datasets ",[36,32701,31723],{"class":42},[36,32703,32704],{"class":50}," FashionMNIST\n",[36,32706,32707,32709,32712,32715],{"class":38,"line":96},[36,32708,31723],{"class":42},[36,32710,32711],{"class":50}," numpy ",[36,32713,32714],{"class":42},"as",[36,32716,32717],{"class":50}," np\n",[36,32719,32720],{"class":38,"line":101},[36,32721,32722],{"class":124},"# 引入处理数据集的包\n",[36,32724,32725,32727,32730,32732],{"class":38,"line":128},[36,32726,32068],{"class":42},[36,32728,32729],{"class":50}," torchvision ",[36,32731,31723],{"class":42},[36,32733,32734],{"class":50}," transforms\n",[36,32736,32737],{"class":38,"line":149},[36,32738,32739],{"class":124},"# 从torch库中引入数据处理的包\n",[36,32741,32742,32744,32747,32749],{"class":38,"line":154},[36,32743,31723],{"class":42},[36,32745,32746],{"class":50}," torch.utils.data ",[36,32748,32714],{"class":42},[36,32750,32751],{"class":50}," Data\n",[36,32753,32754],{"class":38,"line":167},[36,32755,32756],{"class":124},"# 导入画图的库\n",[36,32758,32759,32761,32764,32766],{"class":38,"line":172},[36,32760,31723],{"class":42},[36,32762,32763],{"class":50}," matplotlib.pyplot ",[36,32765,32714],{"class":42},[36,32767,32768],{"class":50}," plt\n",[36,32770,32771],{"class":38,"line":192},[36,32772,58],{"emptyLinePlaceholder":57},[36,32774,32775],{"class":38,"line":211},[36,32776,58],{"emptyLinePlaceholder":57},[36,32778,32779,32782,32784,32787,32790,32792,32795],{"class":38,"line":216},[36,32780,32781],{"class":50},"train_data",[36,32783,70],{"class":42},[36,32785,32786],{"class":50},"FashionMNIST(",[36,32788,32789],{"class":473},"root",[36,32791,70],{"class":42},[36,32793,32794],{"class":110},"'.\u002Fdata'",[36,32796,32797],{"class":50},",\n",[36,32799,32800,32803,32805,32808],{"class":38,"line":231},[36,32801,32802],{"class":473},"                        train",[36,32804,70],{"class":42},[36,32806,32807],{"class":73},"True",[36,32809,32797],{"class":50},[36,32811,32812],{"class":38,"line":236},[36,32813,32814],{"class":124},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[36,32816,32817,32820,32822,32825,32828,32830,32833],{"class":38,"line":247},[36,32818,32819],{"class":473},"                        transform",[36,32821,70],{"class":42},[36,32823,32824],{"class":50},"transforms.Compose([transforms.Resize(",[36,32826,32827],{"class":473},"size",[36,32829,70],{"class":42},[36,32831,32832],{"class":73},"224",[36,32834,32835],{"class":50},"),transforms.ToTensor()]),\n",[36,32837,32838,32841,32843,32845],{"class":38,"line":637},[36,32839,32840],{"class":473},"                        download",[36,32842,70],{"class":42},[36,32844,32807],{"class":73},[36,32846,1680],{"class":50},[36,32848,32849],{"class":38,"line":646},[36,32850,58],{"emptyLinePlaceholder":57},[36,32852,32853],{"class":38,"line":655},[36,32854,32855],{"class":124},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[36,32857,32858,32861,32863,32866,32869,32871],{"class":38,"line":660},[36,32859,32860],{"class":50},"train_loader",[36,32862,70],{"class":42},[36,32864,32865],{"class":50},"Data.DataLoader(",[36,32867,32868],{"class":473},"dataset",[36,32870,70],{"class":42},[36,32872,32873],{"class":50},"train_data,\n",[36,32875,32876,32879,32881,32883],{"class":38,"line":665},[36,32877,32878],{"class":473},"                             batch_size",[36,32880,70],{"class":42},[36,32882,1871],{"class":73},[36,32884,32797],{"class":50},[36,32886,32887],{"class":38,"line":674},[36,32888,32889],{"class":124},"                             # 数据是否打乱\n",[36,32891,32892,32895,32897,32899],{"class":38,"line":679},[36,32893,32894],{"class":473},"                             shuffle",[36,32896,70],{"class":42},[36,32898,32807],{"class":73},[36,32900,32797],{"class":50},[36,32902,32903],{"class":38,"line":692},[36,32904,32905],{"class":124},"                             # 规定加载数据的进程\n",[36,32907,32908,32911,32913,32915],{"class":38,"line":705},[36,32909,32910],{"class":473},"                             num_workers",[36,32912,70],{"class":42},[36,32914,1859],{"class":73},[36,32916,1680],{"class":50},[36,32918,32919],{"class":38,"line":710},[36,32920,58],{"emptyLinePlaceholder":57},[36,32922,32923],{"class":38,"line":722},[36,32924,32925],{"class":124},"# 获得一个batch的数据\n",[36,32927,32928,32930,32933,32935,32938],{"class":38,"line":750},[36,32929,4516],{"class":42},[36,32931,32932],{"class":50}," step,(b_x,b_y) ",[36,32934,27374],{"class":42},[36,32936,32937],{"class":73}," enumerate",[36,32939,32940],{"class":50},"(train_loader):\n",[36,32942,32943,32945,32948,32950,32952],{"class":38,"line":755},[36,32944,4592],{"class":42},[36,32946,32947],{"class":50}," step ",[36,32949,2627],{"class":42},[36,32951,242],{"class":73},[36,32953,5230],{"class":50},[36,32955,32956],{"class":38,"line":777},[36,32957,32958],{"class":42},"        break\n",[36,32960,32961],{"class":38,"line":802},[36,32962,32963],{"class":124},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[36,32965,32966,32969,32971,32974],{"class":38,"line":807},[36,32967,32968],{"class":50},"batch_x",[36,32970,70],{"class":42},[36,32972,32973],{"class":50},"b_x.squeeze().numpy()  ",[36,32975,32976],{"class":124},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[36,32978,32979,32982,32984,32987],{"class":38,"line":818},[36,32980,32981],{"class":50},"batch_y",[36,32983,70],{"class":42},[36,32985,32986],{"class":50},"b_y.numpy()   ",[36,32988,32989],{"class":124},"#将张量转换成功numpy数组\n",[36,32991,32992,32995,32997,33000],{"class":38,"line":843},[36,32993,32994],{"class":50},"class_label",[36,32996,70],{"class":42},[36,32998,32999],{"class":50},"train_data.classes  ",[36,33001,33002],{"class":124},"#训练集标签\n",[36,33004,33005],{"class":38,"line":848},[36,33006,33007],{"class":124},"# print(class_label)\n",[36,33009,33010],{"class":38,"line":859},[36,33011,58],{"emptyLinePlaceholder":57},[36,33013,33014],{"class":38,"line":864},[36,33015,33016],{"class":124},"# 可视化一个batch的图像\n",[36,33018,33019,33022,33025,33027,33029,33031,33033,33035],{"class":38,"line":873},[36,33020,33021],{"class":50},"plt.figure(",[36,33023,33024],{"class":473},"figsize",[36,33026,70],{"class":42},[36,33028,222],{"class":50},[36,33030,2165],{"class":73},[36,33032,2045],{"class":50},[36,33034,1987],{"class":73},[36,33036,31828],{"class":50},[36,33038,33039,33041,33044,33046,33049,33051],{"class":38,"line":9454},[36,33040,4516],{"class":42},[36,33042,33043],{"class":50}," ii ",[36,33045,27374],{"class":42},[36,33047,33048],{"class":50}," np.arange(",[36,33050,8832],{"class":73},[36,33052,33053],{"class":50},"(batch_y)):\n",[36,33055,33056,33059,33061,33063,33065,33068,33070,33072],{"class":38,"line":9481},[36,33057,33058],{"class":50},"    plt.subplot(",[36,33060,1961],{"class":73},[36,33062,2045],{"class":50},[36,33064,2268],{"class":73},[36,33066,33067],{"class":50},",ii ",[36,33069,2148],{"class":42},[36,33071,26449],{"class":73},[36,33073,1680],{"class":50},[36,33075,33076,33079,33082,33084],{"class":38,"line":9486},[36,33077,33078],{"class":50},"    plt.imshow(batch_x[ii,:,:],",[36,33080,33081],{"class":473},"cmap",[36,33083,70],{"class":42},[36,33085,33086],{"class":50},"plt.cm.gray)\n",[36,33088,33089,33092,33094,33096,33098],{"class":38,"line":9492},[36,33090,33091],{"class":50},"    plt.title(class_label[batch_y[ii]],",[36,33093,32827],{"class":473},[36,33095,70],{"class":42},[36,33097,2113],{"class":73},[36,33099,1680],{"class":50},[36,33101,33102,33105,33108],{"class":38,"line":9504},[36,33103,33104],{"class":50},"    plt.axis(",[36,33106,33107],{"class":110},"\"off\"",[36,33109,1680],{"class":50},[36,33111,33112,33115,33118,33120,33123],{"class":38,"line":9516},[36,33113,33114],{"class":50},"    plt.subplots_adjust(",[36,33116,33117],{"class":473},"wspace",[36,33119,70],{"class":42},[36,33121,33122],{"class":73},"0.05",[36,33124,1680],{"class":50},[36,33126,33127],{"class":38,"line":9528},[36,33128,33129],{"class":50},"plt.show()\n",[19,33131,33132],{},"用matplotlib进行展示的过程可以后续再补",[19,33134,33135],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33137,33138],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33140,33141],{},"模型训练：",[26,33143,33145],{"className":31709,"code":33144,"language":31711,"meta":31,"style":31},"import copy\nimport time\n\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import LeNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output = model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab = torch.argmax(output, dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss = criterion(output, b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss += val_batch_loss.item() * b_x.size(0)\n                val_corrects += torch.sum(pre_lab == b_y.data)\n                # 当前用于验证的样本数量\n            val_num += b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数\n    # 加载最高准确率下的模型参数\n    # model.load_state_dict(best_model_wts)\n    torch.save(model.state_dict(best_model_wts), '.\u002Fbest_model.pth')\n    # 或者写成\n    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    LeNet=LeNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(LeNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[33,33146,33147,33154,33161,33165,33177,33183,33194,33204,33214,33224,33234,33239,33251,33261,33265,33269,33274,33285,33298,33309,33326,33337,33376,33392,33404,33415,33420,33431,33447,33458,33469,33480,33487,33491,33496,33501,33505,33510,33520,33541,33545,33549,33554,33559,33564,33584,33588,33593,33603,33607,33612,33621,33626,33631,33636,33646,33650,33654,33659,33664,33674,33679,33689,33694,33703,33708,33717,33722,33731,33735,33740,33750,33754,33758,33763,33778,33806,33821,33825,33830,33835,33844,33849,33858,33863,33872,33877,33886,33891,33900,33905,33914,33919,33932,33937,33947,33952,33962,33968,33974,33980,33986,33997,34003,34023,34029,34040,34046,34052,34058,34064,34070,34076,34082,34102,34108,34124,34130,34144,34150,34165,34171,34180,34186,34195,34201,34207,34216,34222,34233,34239,34258,34264,34275,34281,34301,34317,34323,34337,34343,34349,34360,34366,34372,34382,34388,34399,34405,34415,34420,34426,34475,34522,34527,34533,34552,34558,34578,34584,34590,34600,34605,34611,34627,34672,34678,34684,34690,34701,34707,34713,34719,34737,34751,34760,34769,34778,34787,34793,34799,34807,34812,34818,34829,34835,34855,34861,34867,34873,34890,34896,34902,34908,34914,34920,34947,34971,34977,34983,34989,35000,35011,35017,35034,35057,35080,35086,35091,35100,35110,35116,35121,35127,35140,35146,35157,35168,35187],{"__ignoreMap":31},[36,33148,33149,33151],{"class":38,"line":39},[36,33150,31723],{"class":42},[36,33152,33153],{"class":50}," copy\n",[36,33155,33156,33158],{"class":38,"line":54},[36,33157,31723],{"class":42},[36,33159,33160],{"class":50}," time\n",[36,33162,33163],{"class":38,"line":61},[36,33164,58],{"emptyLinePlaceholder":57},[36,33166,33167,33169,33172,33174],{"class":38,"line":80},[36,33168,31723],{"class":42},[36,33170,33171],{"class":50}," pandas ",[36,33173,32714],{"class":42},[36,33175,33176],{"class":50}," pd\n",[36,33178,33179,33181],{"class":38,"line":96},[36,33180,31723],{"class":42},[36,33182,31726],{"class":50},[36,33184,33185,33187,33189,33191],{"class":38,"line":101},[36,33186,32068],{"class":42},[36,33188,32746],{"class":50},[36,33190,31723],{"class":42},[36,33192,33193],{"class":50}," Dataset\n",[36,33195,33196,33198,33200,33202],{"class":38,"line":128},[36,33197,32068],{"class":42},[36,33199,32699],{"class":50},[36,33201,31723],{"class":42},[36,33203,32704],{"class":50},[36,33205,33206,33208,33210,33212],{"class":38,"line":149},[36,33207,32068],{"class":42},[36,33209,32729],{"class":50},[36,33211,31723],{"class":42},[36,33213,32734],{"class":50},[36,33215,33216,33218,33220,33222],{"class":38,"line":154},[36,33217,31723],{"class":42},[36,33219,32746],{"class":50},[36,33221,32714],{"class":42},[36,33223,32751],{"class":50},[36,33225,33226,33228,33230,33232],{"class":38,"line":167},[36,33227,31723],{"class":42},[36,33229,32763],{"class":50},[36,33231,32714],{"class":42},[36,33233,32768],{"class":50},[36,33235,33236],{"class":38,"line":172},[36,33237,33238],{"class":124},"# 导入模型\n",[36,33240,33241,33243,33246,33248],{"class":38,"line":192},[36,33242,32068],{"class":42},[36,33244,33245],{"class":50}," model ",[36,33247,31723],{"class":42},[36,33249,33250],{"class":50}," LeNet\n",[36,33252,33253,33255,33257,33259],{"class":38,"line":211},[36,33254,32068],{"class":42},[36,33256,32071],{"class":50},[36,33258,31723],{"class":42},[36,33260,32076],{"class":50},[36,33262,33263],{"class":38,"line":216},[36,33264,58],{"emptyLinePlaceholder":57},[36,33266,33267],{"class":38,"line":231},[36,33268,58],{"emptyLinePlaceholder":57},[36,33270,33271],{"class":38,"line":236},[36,33272,33273],{"class":124},"# 处理训练集与验证集函数--->划分数据集\n",[36,33275,33276,33279,33282],{"class":38,"line":247},[36,33277,33278],{"class":42},"def",[36,33280,33281],{"class":46}," train_val_data_process",[36,33283,33284],{"class":50},"():\n",[36,33286,33287,33290,33292,33294,33296],{"class":38,"line":637},[36,33288,33289],{"class":50},"    train_data",[36,33291,70],{"class":42},[36,33293,32786],{"class":50},[36,33295,32794],{"class":110},[36,33297,32797],{"class":50},[36,33299,33300,33303,33305,33307],{"class":38,"line":646},[36,33301,33302],{"class":473},"                            train",[36,33304,70],{"class":42},[36,33306,32807],{"class":73},[36,33308,32797],{"class":50},[36,33310,33311,33314,33316,33318,33320,33322,33324],{"class":38,"line":655},[36,33312,33313],{"class":473},"                            transform",[36,33315,70],{"class":42},[36,33317,32824],{"class":50},[36,33319,32827],{"class":473},[36,33321,70],{"class":42},[36,33323,2568],{"class":73},[36,33325,32835],{"class":50},[36,33327,33328,33331,33333,33335],{"class":38,"line":660},[36,33329,33330],{"class":473},"                            download",[36,33332,70],{"class":42},[36,33334,32807],{"class":73},[36,33336,1680],{"class":50},[36,33338,33339,33342,33344,33347,33350,33352,33355,33357,33359,33362,33364,33366,33369,33371,33373],{"class":38,"line":665},[36,33340,33341],{"class":50},"    train_data,val_data",[36,33343,70],{"class":42},[36,33345,33346],{"class":50},"Data.random_split(train_data,[",[36,33348,33349],{"class":73},"round",[36,33351,222],{"class":50},[36,33353,33354],{"class":73},"0.8",[36,33356,2122],{"class":42},[36,33358,8832],{"class":73},[36,33360,33361],{"class":50},"(train_data)),",[36,33363,33349],{"class":73},[36,33365,222],{"class":50},[36,33367,33368],{"class":73},"0.2",[36,33370,2122],{"class":42},[36,33372,8832],{"class":73},[36,33374,33375],{"class":50},"(train_data))])\n",[36,33377,33378,33381,33383,33386,33388,33390],{"class":38,"line":674},[36,33379,33380],{"class":50},"    train_dataloader ",[36,33382,70],{"class":42},[36,33384,33385],{"class":50}," Data.DataLoader(",[36,33387,32868],{"class":473},[36,33389,70],{"class":42},[36,33391,32873],{"class":50},[36,33393,33394,33397,33399,33402],{"class":38,"line":679},[36,33395,33396],{"class":473},"                                       batch_size",[36,33398,70],{"class":42},[36,33400,33401],{"class":73},"128",[36,33403,32797],{"class":50},[36,33405,33406,33409,33411,33413],{"class":38,"line":692},[36,33407,33408],{"class":473},"                                       shuffle",[36,33410,70],{"class":42},[36,33412,32807],{"class":73},[36,33414,32797],{"class":50},[36,33416,33417],{"class":38,"line":705},[36,33418,33419],{"class":124},"                                       # 规定8个进程\n",[36,33421,33422,33425,33427,33429],{"class":38,"line":710},[36,33423,33424],{"class":473},"                                       num_workers",[36,33426,70],{"class":42},[36,33428,2062],{"class":73},[36,33430,1680],{"class":50},[36,33432,33433,33436,33438,33440,33442,33444],{"class":38,"line":722},[36,33434,33435],{"class":50},"    val_dataloader",[36,33437,70],{"class":42},[36,33439,32865],{"class":50},[36,33441,32868],{"class":473},[36,33443,70],{"class":42},[36,33445,33446],{"class":50},"val_data,\n",[36,33448,33449,33452,33454,33456],{"class":38,"line":750},[36,33450,33451],{"class":473},"                                   batch_size",[36,33453,70],{"class":42},[36,33455,33401],{"class":73},[36,33457,32797],{"class":50},[36,33459,33460,33463,33465,33467],{"class":38,"line":755},[36,33461,33462],{"class":473},"                                   shuffle",[36,33464,70],{"class":42},[36,33466,32807],{"class":73},[36,33468,32797],{"class":50},[36,33470,33471,33474,33476,33478],{"class":38,"line":777},[36,33472,33473],{"class":473},"                                   num_workers",[36,33475,70],{"class":42},[36,33477,2062],{"class":73},[36,33479,1680],{"class":50},[36,33481,33482,33484],{"class":38,"line":802},[36,33483,239],{"class":42},[36,33485,33486],{"class":50}," train_dataloader,val_dataloader\n",[36,33488,33489],{"class":38,"line":807},[36,33490,58],{"emptyLinePlaceholder":57},[36,33492,33493],{"class":38,"line":818},[36,33494,33495],{"class":124},"# 验证是否出错\n",[36,33497,33498],{"class":38,"line":843},[36,33499,33500],{"class":124},"# train_val_data_process()\n",[36,33502,33503],{"class":38,"line":848},[36,33504,58],{"emptyLinePlaceholder":57},[36,33506,33507],{"class":38,"line":859},[36,33508,33509],{"class":124},"# 定义模型训练函数\n",[36,33511,33512,33514,33517],{"class":38,"line":864},[36,33513,33278],{"class":42},[36,33515,33516],{"class":46}," train_model_process",[36,33518,33519],{"class":50},"(model,train_dataloader,val_dataloader,num_epochs):\n",[36,33521,33522,33524,33526,33528,33530,33532,33534,33536,33539],{"class":38,"line":873},[36,33523,32568],{"class":50},[36,33525,70],{"class":42},[36,33527,31782],{"class":50},[36,33529,32575],{"class":110},[36,33531,3222],{"class":42},[36,33533,32580],{"class":50},[36,33535,3219],{"class":42},[36,33537,33538],{"class":110}," 'cpu'",[36,33540,1680],{"class":50},[36,33542,33543],{"class":38,"line":9454},[36,33544,58],{"emptyLinePlaceholder":57},[36,33546,33547],{"class":38,"line":9481},[36,33548,58],{"emptyLinePlaceholder":57},[36,33550,33551],{"class":38,"line":9486},[36,33552,33553],{"class":124},"    # 定义优化器\n",[36,33555,33556],{"class":38,"line":9492},[36,33557,33558],{"class":124},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[36,33560,33561],{"class":38,"line":9504},[36,33562,33563],{"class":124},"    # lr为学习率\n",[36,33565,33566,33569,33571,33574,33577,33579,33582],{"class":38,"line":9516},[36,33567,33568],{"class":50},"    optimizer",[36,33570,70],{"class":42},[36,33572,33573],{"class":50},"torch.optim.Adam(model.parameters(),",[36,33575,33576],{"class":473},"lr",[36,33578,70],{"class":42},[36,33580,33581],{"class":73},"0.001",[36,33583,1680],{"class":50},[36,33585,33586],{"class":38,"line":9528},[36,33587,58],{"emptyLinePlaceholder":57},[36,33589,33590],{"class":38,"line":11184},[36,33591,33592],{"class":124},"    # 定义损失函数使用交叉熵损失函数\n",[36,33594,33595,33598,33600],{"class":38,"line":11209},[36,33596,33597],{"class":50},"    criterion",[36,33599,70],{"class":42},[36,33601,33602],{"class":50},"nn.CrossEntropyLoss()\n",[36,33604,33605],{"class":38,"line":11232},[36,33606,58],{"emptyLinePlaceholder":57},[36,33608,33609],{"class":38,"line":11256},[36,33610,33611],{"class":124},"    # 将模型放到GPU中进行训练\n",[36,33613,33614,33616,33618],{"class":38,"line":11261},[36,33615,32620],{"class":50},[36,33617,70],{"class":42},[36,33619,33620],{"class":50},"model.to(device)\n",[36,33622,33623],{"class":38,"line":11266},[36,33624,33625],{"class":124},"    # 复制当前模型的参数\n",[36,33627,33628],{"class":38,"line":11271},[36,33629,33630],{"class":124},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[36,33632,33633],{"class":38,"line":11280},[36,33634,33635],{"class":124},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[36,33637,33638,33641,33643],{"class":38,"line":11285},[36,33639,33640],{"class":50},"    best_model_wts",[36,33642,70],{"class":42},[36,33644,33645],{"class":50},"copy.deepcopy(model.state_dict())\n",[36,33647,33648],{"class":38,"line":11291},[36,33649,58],{"emptyLinePlaceholder":57},[36,33651,33652],{"class":38,"line":11312},[36,33653,58],{"emptyLinePlaceholder":57},[36,33655,33656],{"class":38,"line":11318},[36,33657,33658],{"class":124},"    # 初始化参数\n",[36,33660,33661],{"class":38,"line":11332},[36,33662,33663],{"class":124},"    # 最高准确度\n",[36,33665,33666,33669,33671],{"class":38,"line":11338},[36,33667,33668],{"class":50},"    best_acc",[36,33670,70],{"class":42},[36,33672,33673],{"class":73},"0.0\n",[36,33675,33676],{"class":38,"line":11365},[36,33677,33678],{"class":124},"    # 训练集损失列表\n",[36,33680,33681,33684,33686],{"class":38,"line":11374},[36,33682,33683],{"class":50},"    train_loss_all",[36,33685,70],{"class":42},[36,33687,33688],{"class":50},"[]\n",[36,33690,33691],{"class":38,"line":11380},[36,33692,33693],{"class":124},"    # 验证集函数列表\n",[36,33695,33696,33699,33701],{"class":38,"line":11388},[36,33697,33698],{"class":50},"    val_loss_all",[36,33700,70],{"class":42},[36,33702,33688],{"class":50},[36,33704,33705],{"class":38,"line":11393},[36,33706,33707],{"class":124},"    # 训练集准确度列表\n",[36,33709,33710,33713,33715],{"class":38,"line":17933},[36,33711,33712],{"class":50},"    train_acc_all",[36,33714,70],{"class":42},[36,33716,33688],{"class":50},[36,33718,33719],{"class":38,"line":17939},[36,33720,33721],{"class":124},"    # 验证集准确度列表\n",[36,33723,33724,33727,33729],{"class":38,"line":17962},[36,33725,33726],{"class":50},"    val_acc_all",[36,33728,70],{"class":42},[36,33730,33688],{"class":50},[36,33732,33733],{"class":38,"line":17968},[36,33734,58],{"emptyLinePlaceholder":57},[36,33736,33737],{"class":38,"line":17991},[36,33738,33739],{"class":124},"    # 保存当前时间--->方便看每轮训练的时间\n",[36,33741,33742,33745,33747],{"class":38,"line":18005},[36,33743,33744],{"class":50},"    since",[36,33746,70],{"class":42},[36,33748,33749],{"class":50},"time.time()\n",[36,33751,33752],{"class":38,"line":18025},[36,33753,58],{"emptyLinePlaceholder":57},[36,33755,33756],{"class":38,"line":18031},[36,33757,58],{"emptyLinePlaceholder":57},[36,33759,33760],{"class":38,"line":18042},[36,33761,33762],{"class":124},"    # 准备工作完成--->开始训练模型\n",[36,33764,33765,33767,33770,33772,33775],{"class":38,"line":18065},[36,33766,4692],{"class":42},[36,33768,33769],{"class":50}," epoch ",[36,33771,27374],{"class":42},[36,33773,33774],{"class":73}," range",[36,33776,33777],{"class":50},"(num_epochs):\n",[36,33779,33780,33783,33785,33788,33791,33793,33795,33797,33800,33802,33804],{"class":38,"line":18087},[36,33781,33782],{"class":73},"        print",[36,33784,222],{"class":50},[36,33786,33787],{"class":110},"\"Epoch ",[36,33789,33790],{"class":73},"{}",[36,33792,2251],{"class":110},[36,33794,33790],{"class":73},[36,33796,1919],{"class":110},[36,33798,33799],{"class":50},".format(epoch,num_epochs",[36,33801,2199],{"class":42},[36,33803,1885],{"class":73},[36,33805,31828],{"class":50},[36,33807,33808,33810,33812,33815,33817,33819],{"class":38,"line":18092},[36,33809,33782],{"class":73},[36,33811,222],{"class":50},[36,33813,33814],{"class":110},"\"-\"",[36,33816,2122],{"class":42},[36,33818,2113],{"class":73},[36,33820,1680],{"class":50},[36,33822,33823],{"class":38,"line":18098},[36,33824,58],{"emptyLinePlaceholder":57},[36,33826,33827],{"class":38,"line":18112},[36,33828,33829],{"class":124},"        # 初始化参数\n",[36,33831,33832],{"class":38,"line":18125},[36,33833,33834],{"class":124},"        # 训练集损失函数\n",[36,33836,33837,33840,33842],{"class":38,"line":18130},[36,33838,33839],{"class":50},"        train_loss",[36,33841,70],{"class":42},[36,33843,33673],{"class":73},[36,33845,33846],{"class":38,"line":18144},[36,33847,33848],{"class":124},"        # 训练集准确度\n",[36,33850,33851,33854,33856],{"class":38,"line":18149},[36,33852,33853],{"class":50},"        train_corrects",[36,33855,70],{"class":42},[36,33857,4576],{"class":73},[36,33859,33860],{"class":38,"line":18155},[36,33861,33862],{"class":124},"        # 验证集损失函数\n",[36,33864,33865,33868,33870],{"class":38,"line":18160},[36,33866,33867],{"class":50},"        val_loss",[36,33869,70],{"class":42},[36,33871,33673],{"class":73},[36,33873,33874],{"class":38,"line":18174},[36,33875,33876],{"class":124},"        # 验证集准确度\n",[36,33878,33879,33882,33884],{"class":38,"line":18179},[36,33880,33881],{"class":50},"        val_corrects",[36,33883,70],{"class":42},[36,33885,4576],{"class":73},[36,33887,33888],{"class":38,"line":18184},[36,33889,33890],{"class":124},"        # 训练集样本数量\n",[36,33892,33893,33896,33898],{"class":38,"line":18198},[36,33894,33895],{"class":50},"        train_num",[36,33897,70],{"class":42},[36,33899,4576],{"class":73},[36,33901,33902],{"class":38,"line":18210},[36,33903,33904],{"class":124},"        # 验证集样本数量\n",[36,33906,33907,33910,33912],{"class":38,"line":18215},[36,33908,33909],{"class":50},"        val_num",[36,33911,70],{"class":42},[36,33913,4576],{"class":73},[36,33915,33916],{"class":38,"line":18228},[36,33917,33918],{"class":124},"        # 将数据放到设备,并开始训练\n",[36,33920,33921,33923,33925,33927,33929],{"class":38,"line":18233},[36,33922,4894],{"class":42},[36,33924,32932],{"class":50},[36,33926,27374],{"class":42},[36,33928,32937],{"class":73},[36,33930,33931],{"class":50},"(train_dataloader):\n",[36,33933,33934],{"class":38,"line":18238},[36,33935,33936],{"class":124},"            # 将特征放入到训练设备\n",[36,33938,33939,33942,33944],{"class":38,"line":18243},[36,33940,33941],{"class":50},"            b_x",[36,33943,70],{"class":42},[36,33945,33946],{"class":50},"b_x.to(device)\n",[36,33948,33949],{"class":38,"line":18256},[36,33950,33951],{"class":124},"            # 将标签放入到训练设备当中\n",[36,33953,33954,33957,33959],{"class":38,"line":18261},[36,33955,33956],{"class":50},"            b_y",[36,33958,70],{"class":42},[36,33960,33961],{"class":50},"b_y.to(device)\n",[36,33963,33965],{"class":38,"line":33964},98,[36,33966,33967],{"class":124},"            # 设置模型为训练模式\n",[36,33969,33971],{"class":38,"line":33970},99,[36,33972,33973],{"class":50},"            model.train()\n",[36,33975,33977],{"class":38,"line":33976},100,[36,33978,33979],{"class":124},"            # 将数据放到模型当中,开始前向传播\n",[36,33981,33983],{"class":38,"line":33982},101,[36,33984,33985],{"class":124},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[36,33987,33989,33992,33994],{"class":38,"line":33988},102,[36,33990,33991],{"class":50},"            output",[36,33993,70],{"class":42},[36,33995,33996],{"class":50},"model(b_x)\n",[36,33998,34000],{"class":38,"line":33999},103,[36,34001,34002],{"class":124},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[36,34004,34006,34009,34011,34014,34017,34019,34021],{"class":38,"line":34005},104,[36,34007,34008],{"class":50},"            pre_lab",[36,34010,70],{"class":42},[36,34012,34013],{"class":50},"torch.argmax(output,",[36,34015,34016],{"class":473},"dim",[36,34018,70],{"class":42},[36,34020,1885],{"class":73},[36,34022,1680],{"class":50},[36,34024,34026],{"class":38,"line":34025},105,[36,34027,34028],{"class":124},"            # 计算每一个batch的损失函数\n",[36,34030,34032,34035,34037],{"class":38,"line":34031},106,[36,34033,34034],{"class":50},"            loss",[36,34036,70],{"class":42},[36,34038,34039],{"class":50},"criterion(output,b_y)\n",[36,34041,34043],{"class":38,"line":34042},107,[36,34044,34045],{"class":124},"            # 将梯度初始化为0\n",[36,34047,34049],{"class":38,"line":34048},108,[36,34050,34051],{"class":50},"            optimizer.zero_grad()\n",[36,34053,34055],{"class":38,"line":34054},109,[36,34056,34057],{"class":124},"            # 梯度置为0后再进行反向传播\n",[36,34059,34061],{"class":38,"line":34060},110,[36,34062,34063],{"class":50},"            loss.backward()\n",[36,34065,34067],{"class":38,"line":34066},111,[36,34068,34069],{"class":124},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[36,34071,34073],{"class":38,"line":34072},112,[36,34074,34075],{"class":50},"            optimizer.step()\n",[36,34077,34079],{"class":38,"line":34078},113,[36,34080,34081],{"class":124},"            # loss.item()指的是batch的平均损失\n",[36,34083,34085,34088,34090,34093,34095,34098,34100],{"class":38,"line":34084},114,[36,34086,34087],{"class":50},"            train_loss",[36,34089,10945],{"class":42},[36,34091,34092],{"class":50},"loss.item()",[36,34094,2122],{"class":42},[36,34096,34097],{"class":50},"b_x.size(",[36,34099,1859],{"class":73},[36,34101,1680],{"class":50},[36,34103,34105],{"class":38,"line":34104},115,[36,34106,34107],{"class":124},"            # 计算每个批次中正确预测的数量\n",[36,34109,34111,34114,34116,34119,34121],{"class":38,"line":34110},116,[36,34112,34113],{"class":50},"            train_corrects",[36,34115,10945],{"class":42},[36,34117,34118],{"class":50},"torch.sum(pre_lab",[36,34120,4441],{"class":42},[36,34122,34123],{"class":50},"b_y.data)\n",[36,34125,34127],{"class":38,"line":34126},117,[36,34128,34129],{"class":124},"            # 计算目前为止一共处理了多少样本\n",[36,34131,34133,34136,34138,34140,34142],{"class":38,"line":34132},118,[36,34134,34135],{"class":50},"            train_num",[36,34137,10945],{"class":42},[36,34139,34097],{"class":50},[36,34141,1859],{"class":73},[36,34143,1680],{"class":50},[36,34145,34147],{"class":38,"line":34146},119,[36,34148,34149],{"class":124},"        # 验证数据\n",[36,34151,34153,34155,34158,34160,34162],{"class":38,"line":34152},120,[36,34154,4894],{"class":42},[36,34156,34157],{"class":50}," step ,(b_x,b_y) ",[36,34159,27374],{"class":42},[36,34161,32937],{"class":73},[36,34163,34164],{"class":50},"(val_dataloader):\n",[36,34166,34168],{"class":38,"line":34167},121,[36,34169,34170],{"class":124},"            # 将特征放到验证设备当中\n",[36,34172,34174,34176,34178],{"class":38,"line":34173},122,[36,34175,33941],{"class":50},[36,34177,70],{"class":42},[36,34179,33946],{"class":50},[36,34181,34183],{"class":38,"line":34182},123,[36,34184,34185],{"class":124},"            # 将标签放到放到训练设备当中\n",[36,34187,34189,34191,34193],{"class":38,"line":34188},124,[36,34190,33956],{"class":50},[36,34192,70],{"class":42},[36,34194,33961],{"class":50},[36,34196,34198],{"class":38,"line":34197},125,[36,34199,34200],{"class":124},"            # 开启验证模式，设置模型为评估模式\n",[36,34202,34204],{"class":38,"line":34203},126,[36,34205,34206],{"class":50},"            model.eval()\n",[36,34208,34210,34213],{"class":38,"line":34209},127,[36,34211,34212],{"class":42},"            with",[36,34214,34215],{"class":50}," torch.no_grad():\n",[36,34217,34219],{"class":38,"line":34218},128,[36,34220,34221],{"class":124},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[36,34223,34225,34228,34230],{"class":38,"line":34224},129,[36,34226,34227],{"class":50},"                output ",[36,34229,70],{"class":42},[36,34231,34232],{"class":50}," model(b_x)\n",[36,34234,34236],{"class":38,"line":34235},130,[36,34237,34238],{"class":124},"                # 查找每一行中最大值对应的下标\n",[36,34240,34242,34245,34247,34250,34252,34254,34256],{"class":38,"line":34241},131,[36,34243,34244],{"class":50},"                pre_lab ",[36,34246,70],{"class":42},[36,34248,34249],{"class":50}," torch.argmax(output, ",[36,34251,34016],{"class":473},[36,34253,70],{"class":42},[36,34255,1885],{"class":73},[36,34257,1680],{"class":50},[36,34259,34261],{"class":38,"line":34260},132,[36,34262,34263],{"class":124},"                # 计算验证集上的当前 batch 损失\n",[36,34265,34267,34270,34272],{"class":38,"line":34266},133,[36,34268,34269],{"class":50},"                val_batch_loss ",[36,34271,70],{"class":42},[36,34273,34274],{"class":50}," criterion(output, b_y)\n",[36,34276,34278],{"class":38,"line":34277},134,[36,34279,34280],{"class":124},"                # 对损失函数进行累加（按样本数加权）\n",[36,34282,34284,34287,34289,34292,34294,34297,34299],{"class":38,"line":34283},135,[36,34285,34286],{"class":50},"                val_loss ",[36,34288,10945],{"class":42},[36,34290,34291],{"class":50}," val_batch_loss.item() ",[36,34293,2122],{"class":42},[36,34295,34296],{"class":50}," b_x.size(",[36,34298,1859],{"class":73},[36,34300,1680],{"class":50},[36,34302,34304,34307,34309,34312,34314],{"class":38,"line":34303},136,[36,34305,34306],{"class":50},"                val_corrects ",[36,34308,10945],{"class":42},[36,34310,34311],{"class":50}," torch.sum(pre_lab ",[36,34313,4441],{"class":42},[36,34315,34316],{"class":50}," b_y.data)\n",[36,34318,34320],{"class":38,"line":34319},137,[36,34321,34322],{"class":124},"                # 当前用于验证的样本数量\n",[36,34324,34326,34329,34331,34333,34335],{"class":38,"line":34325},138,[36,34327,34328],{"class":50},"            val_num ",[36,34330,10945],{"class":42},[36,34332,34296],{"class":50},[36,34334,1859],{"class":73},[36,34336,1680],{"class":50},[36,34338,34340],{"class":38,"line":34339},139,[36,34341,34342],{"class":124},"        # 计算并保存每一次迭代的loss值和准确率\n",[36,34344,34346],{"class":38,"line":34345},140,[36,34347,34348],{"class":124},"        # 计算并保存训练集的loss值\n",[36,34350,34352,34355,34357],{"class":38,"line":34351},141,[36,34353,34354],{"class":50},"        train_loss_all.append(train_loss",[36,34356,2251],{"class":42},[36,34358,34359],{"class":50},"train_num)\n",[36,34361,34363],{"class":38,"line":34362},142,[36,34364,34365],{"class":124},"        # 取双精度\n",[36,34367,34369],{"class":38,"line":34368},143,[36,34370,34371],{"class":124},"        # 计算并保存训练集的准确率\n",[36,34373,34375,34378,34380],{"class":38,"line":34374},144,[36,34376,34377],{"class":50},"        train_acc_all.append(train_corrects.double().item()",[36,34379,2251],{"class":42},[36,34381,34359],{"class":50},[36,34383,34385],{"class":38,"line":34384},145,[36,34386,34387],{"class":124},"        # 计算并保存验证集的loss值\n",[36,34389,34391,34394,34396],{"class":38,"line":34390},146,[36,34392,34393],{"class":50},"        val_loss_all.append(val_loss",[36,34395,2251],{"class":42},[36,34397,34398],{"class":50},"val_num)\n",[36,34400,34402],{"class":38,"line":34401},147,[36,34403,34404],{"class":124},"        # 计算并保存验证集的准确率\n",[36,34406,34408,34411,34413],{"class":38,"line":34407},148,[36,34409,34410],{"class":50},"        val_acc_all.append(val_corrects.double().item()",[36,34412,2251],{"class":42},[36,34414,34398],{"class":50},[36,34416,34418],{"class":38,"line":34417},149,[36,34419,58],{"emptyLinePlaceholder":57},[36,34421,34423],{"class":38,"line":34422},150,[36,34424,34425],{"class":124},"        # 打印训练一轮的loss值和准确率\n",[36,34427,34429,34431,34433,34435,34437,34440,34442,34445,34447,34450,34452,34454,34456,34458,34461,34463,34465,34468,34470,34472],{"class":38,"line":34428},151,[36,34430,33782],{"class":73},[36,34432,222],{"class":50},[36,34434,5083],{"class":110},[36,34436,33790],{"class":73},[36,34438,34439],{"class":110},"train loss:",[36,34441,2563],{"class":73},[36,34443,34444],{"class":42},":.4f",[36,34446,2613],{"class":73},[36,34448,34449],{"class":110}," train acc:",[36,34451,2563],{"class":73},[36,34453,34444],{"class":42},[36,34455,2613],{"class":73},[36,34457,5083],{"class":110},[36,34459,34460],{"class":50},".format(epoch,train_loss_all[",[36,34462,2199],{"class":42},[36,34464,1885],{"class":73},[36,34466,34467],{"class":50},"],train_acc_all[",[36,34469,2199],{"class":42},[36,34471,1885],{"class":73},[36,34473,34474],{"class":50},"]))\n",[36,34476,34478,34480,34482,34484,34486,34489,34491,34493,34495,34498,34500,34502,34504,34506,34509,34511,34513,34516,34518,34520],{"class":38,"line":34477},152,[36,34479,33782],{"class":73},[36,34481,222],{"class":50},[36,34483,5083],{"class":110},[36,34485,33790],{"class":73},[36,34487,34488],{"class":110},"val loss:",[36,34490,2563],{"class":73},[36,34492,34444],{"class":42},[36,34494,2613],{"class":73},[36,34496,34497],{"class":110}," val acc:",[36,34499,2563],{"class":73},[36,34501,34444],{"class":42},[36,34503,2613],{"class":73},[36,34505,5083],{"class":110},[36,34507,34508],{"class":50},".format(epoch,val_loss_all[",[36,34510,2199],{"class":42},[36,34512,1885],{"class":73},[36,34514,34515],{"class":50},"],val_acc_all[",[36,34517,2199],{"class":42},[36,34519,1885],{"class":73},[36,34521,34474],{"class":50},[36,34523,34525],{"class":38,"line":34524},153,[36,34526,58],{"emptyLinePlaceholder":57},[36,34528,34530],{"class":38,"line":34529},154,[36,34531,34532],{"class":124},"        # 判断准确度--->保存最优模型\n",[36,34534,34536,34538,34541,34543,34545,34547,34549],{"class":38,"line":34535},155,[36,34537,3999],{"class":42},[36,34539,34540],{"class":50}," val_acc_all[",[36,34542,2199],{"class":42},[36,34544,1885],{"class":73},[36,34546,2607],{"class":50},[36,34548,2627],{"class":42},[36,34550,34551],{"class":50},"best_acc:\n",[36,34553,34555],{"class":38,"line":34554},156,[36,34556,34557],{"class":124},"            # 保存当前模型准确度\n",[36,34559,34561,34564,34566,34568,34571,34573,34575],{"class":38,"line":34560},157,[36,34562,34563],{"class":50},"            best_acc:",[36,34565,1713],{"class":73},[36,34567,70],{"class":42},[36,34569,34570],{"class":50},"val_acc_all[",[36,34572,2199],{"class":42},[36,34574,1885],{"class":73},[36,34576,34577],{"class":50},"]\n",[36,34579,34581],{"class":38,"line":34580},158,[36,34582,34583],{"class":124},"            # 保存当前的准确度\n",[36,34585,34587],{"class":38,"line":34586},159,[36,34588,34589],{"class":124},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[36,34591,34593,34596,34598],{"class":38,"line":34592},160,[36,34594,34595],{"class":50},"            best_model_wts",[36,34597,70],{"class":42},[36,34599,33645],{"class":50},[36,34601,34603],{"class":38,"line":34602},161,[36,34604,58],{"emptyLinePlaceholder":57},[36,34606,34608],{"class":38,"line":34607},162,[36,34609,34610],{"class":124},"        # 计算耗时\n",[36,34612,34614,34617,34619,34622,34624],{"class":38,"line":34613},163,[36,34615,34616],{"class":50},"        time_use",[36,34618,70],{"class":42},[36,34620,34621],{"class":50},"time.time()",[36,34623,2199],{"class":42},[36,34625,34626],{"class":50},"since\n",[36,34628,34630,34632,34634,34637,34639,34642,34644,34646,34648,34650,34652,34655,34658,34661,34663,34666,34668,34670],{"class":38,"line":34629},164,[36,34631,33782],{"class":73},[36,34633,222],{"class":50},[36,34635,34636],{"class":110},"'训练和验证耗费的时间",[36,34638,2563],{"class":73},[36,34640,34641],{"class":42},":.0f",[36,34643,2613],{"class":73},[36,34645,2211],{"class":110},[36,34647,2563],{"class":73},[36,34649,34641],{"class":42},[36,34651,2613],{"class":73},[36,34653,34654],{"class":110},"s'",[36,34656,34657],{"class":50},".format(time_use",[36,34659,34660],{"class":42},"\u002F\u002F",[36,34662,2574],{"class":73},[36,34664,34665],{"class":50},",time_use",[36,34667,1996],{"class":42},[36,34669,2574],{"class":73},[36,34671,31828],{"class":50},[36,34673,34675],{"class":38,"line":34674},165,[36,34676,34677],{"class":124},"    # 选择最优参数\n",[36,34679,34681],{"class":38,"line":34680},166,[36,34682,34683],{"class":124},"    # 加载最高准确率下的模型参数\n",[36,34685,34687],{"class":38,"line":34686},167,[36,34688,34689],{"class":124},"    # model.load_state_dict(best_model_wts)\n",[36,34691,34693,34696,34699],{"class":38,"line":34692},168,[36,34694,34695],{"class":50},"    torch.save(model.state_dict(best_model_wts), ",[36,34697,34698],{"class":110},"'.\u002Fbest_model.pth'",[36,34700,1680],{"class":50},[36,34702,34704],{"class":38,"line":34703},169,[36,34705,34706],{"class":124},"    # 或者写成\n",[36,34708,34710],{"class":38,"line":34709},170,[36,34711,34712],{"class":124},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[36,34714,34716],{"class":38,"line":34715},171,[36,34717,34718],{"class":124},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[36,34720,34722,34725,34727,34730,34733,34735],{"class":38,"line":34721},172,[36,34723,34724],{"class":50},"    train_process",[36,34726,70],{"class":42},[36,34728,34729],{"class":50},"pd.DataFrame(",[36,34731,34732],{"class":473},"data",[36,34734,70],{"class":42},[36,34736,3076],{"class":50},[36,34738,34740,34743,34745,34748],{"class":38,"line":34739},173,[36,34741,34742],{"class":110},"        \"epoch\"",[36,34744,2526],{"class":50},[36,34746,34747],{"class":73},"range",[36,34749,34750],{"class":50},"(num_epochs),\n",[36,34752,34754,34757],{"class":38,"line":34753},174,[36,34755,34756],{"class":110},"        \"train_loss_all\"",[36,34758,34759],{"class":50},":train_loss_all,\n",[36,34761,34763,34766],{"class":38,"line":34762},175,[36,34764,34765],{"class":110},"        \"val_loss_all\"",[36,34767,34768],{"class":50},":val_loss_all,\n",[36,34770,34772,34775],{"class":38,"line":34771},176,[36,34773,34774],{"class":110},"        \"train_acc_all\"",[36,34776,34777],{"class":50},":train_acc_all,\n",[36,34779,34781,34784],{"class":38,"line":34780},177,[36,34782,34783],{"class":110},"        \"val_acc_all\"",[36,34785,34786],{"class":50},":val_acc_all\n",[36,34788,34790],{"class":38,"line":34789},178,[36,34791,34792],{"class":50},"    })\n",[36,34794,34796],{"class":38,"line":34795},179,[36,34797,34798],{"class":124},"    # 返回训练保存的过程\n",[36,34800,34802,34804],{"class":38,"line":34801},180,[36,34803,239],{"class":42},[36,34805,34806],{"class":50}," train_process\n",[36,34808,34810],{"class":38,"line":34809},181,[36,34811,58],{"emptyLinePlaceholder":57},[36,34813,34815],{"class":38,"line":34814},182,[36,34816,34817],{"class":124},"# 将loss值和精度按照图片的形式展示出来\n",[36,34819,34821,34823,34826],{"class":38,"line":34820},183,[36,34822,33278],{"class":42},[36,34824,34825],{"class":46}," matplot_acc_loss",[36,34827,34828],{"class":50},"(train_process):\n",[36,34830,34832],{"class":38,"line":34831},184,[36,34833,34834],{"class":124},"    # 设置图的大小\n",[36,34836,34838,34841,34843,34845,34847,34849,34851,34853],{"class":38,"line":34837},185,[36,34839,34840],{"class":50},"    plt.figure(",[36,34842,33024],{"class":473},[36,34844,70],{"class":42},[36,34846,222],{"class":50},[36,34848,2165],{"class":73},[36,34850,2045],{"class":50},[36,34852,1961],{"class":73},[36,34854,31828],{"class":50},[36,34856,34858],{"class":38,"line":34857},186,[36,34859,34860],{"class":124},"    # 设置图中有几张图\n",[36,34862,34864],{"class":38,"line":34863},187,[36,34865,34866],{"class":124},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[36,34868,34870],{"class":38,"line":34869},188,[36,34871,34872],{"class":124},"    # ①loss图\n",[36,34874,34876,34878,34880,34882,34884,34886,34888],{"class":38,"line":34875},189,[36,34877,33058],{"class":50},[36,34879,1885],{"class":73},[36,34881,2045],{"class":50},[36,34883,1747],{"class":73},[36,34885,2045],{"class":50},[36,34887,1885],{"class":73},[36,34889,1680],{"class":50},[36,34891,34893],{"class":38,"line":34892},190,[36,34894,34895],{"class":124},"    # 补充:\n",[36,34897,34899],{"class":38,"line":34898},191,[36,34900,34901],{"class":124},"    # plt.subplot(nrows, ncols, index)\n",[36,34903,34905],{"class":38,"line":34904},192,[36,34906,34907],{"class":124},"    # nrows：行数\n",[36,34909,34911],{"class":38,"line":34910},193,[36,34912,34913],{"class":124},"    # ncols：列数\n",[36,34915,34917],{"class":38,"line":34916},194,[36,34918,34919],{"class":124},"    # index：目前选中第几个子图（从1开始）\n",[36,34921,34923,34926,34929,34932,34935,34937,34940,34942,34945],{"class":38,"line":34922},195,[36,34924,34925],{"class":50},"    plt.plot(train_process[",[36,34927,34928],{"class":110},"\"epoch\"",[36,34930,34931],{"class":50},"],train_process.train_loss_all,",[36,34933,34934],{"class":110},"'ro-'",[36,34936,2045],{"class":50},[36,34938,34939],{"class":473},"label",[36,34941,70],{"class":42},[36,34943,34944],{"class":110},"'train loss'",[36,34946,1680],{"class":50},[36,34948,34950,34952,34954,34957,34960,34962,34964,34966,34969],{"class":38,"line":34949},196,[36,34951,34925],{"class":50},[36,34953,34928],{"class":110},[36,34955,34956],{"class":50},"],train_process.val_loss_all,",[36,34958,34959],{"class":110},"'bs--'",[36,34961,2045],{"class":50},[36,34963,34939],{"class":473},[36,34965,70],{"class":42},[36,34967,34968],{"class":110},"'val loss'",[36,34970,1680],{"class":50},[36,34972,34974],{"class":38,"line":34973},197,[36,34975,34976],{"class":124},"    # 添加一个图例\n",[36,34978,34980],{"class":38,"line":34979},198,[36,34981,34982],{"class":50},"    plt.legend()\n",[36,34984,34986],{"class":38,"line":34985},199,[36,34987,34988],{"class":124},"    # 给轴添加标签\n",[36,34990,34992,34995,34998],{"class":38,"line":34991},200,[36,34993,34994],{"class":50},"    plt.xlabel(",[36,34996,34997],{"class":110},"'epoch'",[36,34999,1680],{"class":50},[36,35001,35003,35006,35009],{"class":38,"line":35002},201,[36,35004,35005],{"class":50},"    plt.ylabel(",[36,35007,35008],{"class":110},"'loss'",[36,35010,1680],{"class":50},[36,35012,35014],{"class":38,"line":35013},202,[36,35015,35016],{"class":124},"    # ②准确度图\n",[36,35018,35020,35022,35024,35026,35028,35030,35032],{"class":38,"line":35019},203,[36,35021,33058],{"class":50},[36,35023,1885],{"class":73},[36,35025,2045],{"class":50},[36,35027,1747],{"class":73},[36,35029,2045],{"class":50},[36,35031,1747],{"class":73},[36,35033,1680],{"class":50},[36,35035,35037,35039,35041,35044,35046,35048,35050,35052,35055],{"class":38,"line":35036},204,[36,35038,34925],{"class":50},[36,35040,34928],{"class":110},[36,35042,35043],{"class":50},"],train_process.train_acc_all,",[36,35045,34934],{"class":110},[36,35047,2045],{"class":50},[36,35049,34939],{"class":473},[36,35051,70],{"class":42},[36,35053,35054],{"class":110},"'train acc'",[36,35056,1680],{"class":50},[36,35058,35060,35062,35064,35067,35069,35071,35073,35075,35078],{"class":38,"line":35059},205,[36,35061,34925],{"class":50},[36,35063,34928],{"class":110},[36,35065,35066],{"class":50},"],train_process.val_acc_all,",[36,35068,34959],{"class":110},[36,35070,2045],{"class":50},[36,35072,34939],{"class":473},[36,35074,70],{"class":42},[36,35076,35077],{"class":110},"'val acc'",[36,35079,1680],{"class":50},[36,35081,35083],{"class":38,"line":35082},206,[36,35084,35085],{"class":124},"    # 添加图例\n",[36,35087,35089],{"class":38,"line":35088},207,[36,35090,34982],{"class":50},[36,35092,35094,35096,35098],{"class":38,"line":35093},208,[36,35095,34994],{"class":50},[36,35097,34928],{"class":110},[36,35099,1680],{"class":50},[36,35101,35103,35105,35108],{"class":38,"line":35102},209,[36,35104,35005],{"class":50},[36,35106,35107],{"class":110},"\"acc\"",[36,35109,1680],{"class":50},[36,35111,35113],{"class":38,"line":35112},210,[36,35114,35115],{"class":50},"    plt.show()\n",[36,35117,35119],{"class":38,"line":35118},211,[36,35120,58],{"emptyLinePlaceholder":57},[36,35122,35124],{"class":38,"line":35123},212,[36,35125,35126],{"class":124},"# 正式开始训练:\n",[36,35128,35130,35132,35134,35136,35138],{"class":38,"line":35129},213,[36,35131,3061],{"class":42},[36,35133,32551],{"class":73},[36,35135,4441],{"class":42},[36,35137,32556],{"class":110},[36,35139,5230],{"class":50},[36,35141,35143],{"class":38,"line":35142},214,[36,35144,35145],{"class":124},"    # 将模型实例化\n",[36,35147,35149,35152,35154],{"class":38,"line":35148},215,[36,35150,35151],{"class":50},"    LeNet",[36,35153,70],{"class":42},[36,35155,35156],{"class":50},"LeNet()\n",[36,35158,35160,35163,35165],{"class":38,"line":35159},216,[36,35161,35162],{"class":50},"    train_dataloader,val_dataloader",[36,35164,70],{"class":42},[36,35166,35167],{"class":50},"train_val_data_process()\n",[36,35169,35171,35173,35175,35178,35181,35183,35185],{"class":38,"line":35170},217,[36,35172,34724],{"class":50},[36,35174,70],{"class":42},[36,35176,35177],{"class":50},"train_model_process(LeNet,train_dataloader,val_dataloader,",[36,35179,35180],{"class":473},"num_epochs",[36,35182,70],{"class":42},[36,35184,2367],{"class":73},[36,35186,1680],{"class":50},[36,35188,35190],{"class":38,"line":35189},218,[36,35191,35192],{"class":50},"    matplot_acc_loss(train_process)\n",[19,35194,35195],{},"画图的补充点学习：",[19,35197,35198],{},[2992,35199],{"alt":31,"src":35200},"\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",[256,35202,35203],{"start":61},[259,35204,35205],{},"测试",[26,35207,35209],{"className":31709,"code":35208,"language":31711,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import LeNet\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=28),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=LeNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,35210,35211,35217,35227,35239,35249,35254,35264,35274,35278,35283,35292,35309,35321,35338,35349,35365,35370,35381,35392,35403,35410,35414,35419,35429,35434,35451,35459,35463,35468,35477,35486,35490,35495,35500,35505,35512,35517,35529,35539,35549,35554,35558,35563,35572,35577,35593,35598,35603,35608,35622,35627,35641,35645,35650,35665,35670,35682,35686,35691,35703,35708,35716,35721,35726,35736,35741,35750,35755,35760,35764,35769,35774,35790,35798,35803,35808,35867,35873,35878,35889,35897,35905,35909,35914,35918,35923,35931,35936,35952,35957,35967,35977],{"__ignoreMap":31},[36,35212,35213,35215],{"class":38,"line":39},[36,35214,31723],{"class":42},[36,35216,31726],{"class":50},[36,35218,35219,35221,35223,35225],{"class":38,"line":54},[36,35220,31723],{"class":42},[36,35222,32746],{"class":50},[36,35224,32714],{"class":42},[36,35226,32751],{"class":50},[36,35228,35229,35231,35234,35236],{"class":38,"line":61},[36,35230,32068],{"class":42},[36,35232,35233],{"class":50}," jupyter_client.consoleapp ",[36,35235,31723],{"class":42},[36,35237,35238],{"class":50}," classes\n",[36,35240,35241,35243,35245,35247],{"class":38,"line":80},[36,35242,32068],{"class":42},[36,35244,32729],{"class":50},[36,35246,31723],{"class":42},[36,35248,32734],{"class":50},[36,35250,35251],{"class":38,"line":96},[36,35252,35253],{"class":124},"# 导入数据集\n",[36,35255,35256,35258,35260,35262],{"class":38,"line":101},[36,35257,32068],{"class":42},[36,35259,32699],{"class":50},[36,35261,31723],{"class":42},[36,35263,32704],{"class":50},[36,35265,35266,35268,35270,35272],{"class":38,"line":128},[36,35267,32068],{"class":42},[36,35269,33245],{"class":50},[36,35271,31723],{"class":42},[36,35273,33250],{"class":50},[36,35275,35276],{"class":38,"line":149},[36,35277,58],{"emptyLinePlaceholder":57},[36,35279,35280],{"class":38,"line":154},[36,35281,35282],{"class":124},"# 测试数据处理\n",[36,35284,35285,35287,35290],{"class":38,"line":167},[36,35286,33278],{"class":42},[36,35288,35289],{"class":46}," test_data_process",[36,35291,33284],{"class":50},[36,35293,35294,35297,35299,35301,35303,35305,35307],{"class":38,"line":172},[36,35295,35296],{"class":50},"    test_data",[36,35298,70],{"class":42},[36,35300,32786],{"class":50},[36,35302,32789],{"class":473},[36,35304,70],{"class":42},[36,35306,32794],{"class":110},[36,35308,32797],{"class":50},[36,35310,35311,35314,35316,35319],{"class":38,"line":192},[36,35312,35313],{"class":473},"                           train",[36,35315,70],{"class":42},[36,35317,35318],{"class":73},"False",[36,35320,32797],{"class":50},[36,35322,35323,35326,35328,35330,35332,35334,35336],{"class":38,"line":211},[36,35324,35325],{"class":473},"                           transform",[36,35327,70],{"class":42},[36,35329,32824],{"class":50},[36,35331,32827],{"class":473},[36,35333,70],{"class":42},[36,35335,2568],{"class":73},[36,35337,32835],{"class":50},[36,35339,35340,35343,35345,35347],{"class":38,"line":216},[36,35341,35342],{"class":473},"                           download",[36,35344,70],{"class":42},[36,35346,32807],{"class":73},[36,35348,1680],{"class":50},[36,35350,35351,35354,35356,35358,35360,35362],{"class":38,"line":231},[36,35352,35353],{"class":50},"    test_dataloader",[36,35355,70],{"class":42},[36,35357,32865],{"class":50},[36,35359,32868],{"class":473},[36,35361,70],{"class":42},[36,35363,35364],{"class":50},"test_data,\n",[36,35366,35367],{"class":38,"line":236},[36,35368,35369],{"class":124},"                                    # 这里是一张一张进行测试\n",[36,35371,35372,35375,35377,35379],{"class":38,"line":247},[36,35373,35374],{"class":473},"                                    batch_size",[36,35376,70],{"class":42},[36,35378,1885],{"class":73},[36,35380,32797],{"class":50},[36,35382,35383,35386,35388,35390],{"class":38,"line":637},[36,35384,35385],{"class":473},"                                    shuffle",[36,35387,70],{"class":42},[36,35389,32807],{"class":73},[36,35391,32797],{"class":50},[36,35393,35394,35397,35399,35401],{"class":38,"line":646},[36,35395,35396],{"class":473},"                                    num_workers",[36,35398,70],{"class":42},[36,35400,1859],{"class":73},[36,35402,1680],{"class":50},[36,35404,35405,35407],{"class":38,"line":655},[36,35406,239],{"class":42},[36,35408,35409],{"class":50}," test_dataloader\n",[36,35411,35412],{"class":38,"line":660},[36,35413,58],{"emptyLinePlaceholder":57},[36,35415,35416],{"class":38,"line":665},[36,35417,35418],{"class":124},"# 定义模型测试函数\n",[36,35420,35421,35423,35426],{"class":38,"line":674},[36,35422,33278],{"class":42},[36,35424,35425],{"class":46}," test_model_process",[36,35427,35428],{"class":50},"(model,test_dataloader):\n",[36,35430,35431],{"class":38,"line":679},[36,35432,35433],{"class":124},"    # 将模型放到设备当中，先进行判断\n",[36,35435,35436,35438,35440,35442,35444,35446,35448],{"class":38,"line":692},[36,35437,32568],{"class":50},[36,35439,70],{"class":42},[36,35441,32575],{"class":110},[36,35443,3222],{"class":42},[36,35445,32580],{"class":50},[36,35447,3219],{"class":42},[36,35449,35450],{"class":110}," \"cpu\"\n",[36,35452,35453,35455,35457],{"class":38,"line":705},[36,35454,32620],{"class":50},[36,35456,70],{"class":42},[36,35458,33620],{"class":50},[36,35460,35461],{"class":38,"line":710},[36,35462,58],{"emptyLinePlaceholder":57},[36,35464,35465],{"class":38,"line":722},[36,35466,35467],{"class":124},"    # 设置初始化参数\n",[36,35469,35470,35473,35475],{"class":38,"line":750},[36,35471,35472],{"class":50},"    test_corrects",[36,35474,70],{"class":42},[36,35476,33673],{"class":73},[36,35478,35479,35482,35484],{"class":38,"line":755},[36,35480,35481],{"class":50},"    test_num",[36,35483,70],{"class":42},[36,35485,4576],{"class":73},[36,35487,35488],{"class":38,"line":777},[36,35489,58],{"emptyLinePlaceholder":57},[36,35491,35492],{"class":38,"line":802},[36,35493,35494],{"class":124},"    # 进行模型测试\n",[36,35496,35497],{"class":38,"line":807},[36,35498,35499],{"class":124},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[36,35501,35502],{"class":38,"line":818},[36,35503,35504],{"class":124},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[36,35506,35507,35510],{"class":38,"line":843},[36,35508,35509],{"class":42},"    with",[36,35511,34215],{"class":50},[36,35513,35514],{"class":38,"line":848},[36,35515,35516],{"class":124},"        # 从数据中进行\n",[36,35518,35519,35521,35524,35526],{"class":38,"line":859},[36,35520,4894],{"class":42},[36,35522,35523],{"class":50}," test_data_x,test_data_y ",[36,35525,27374],{"class":42},[36,35527,35528],{"class":50}," test_dataloader:\n",[36,35530,35531,35534,35536],{"class":38,"line":864},[36,35532,35533],{"class":50},"            test_data_x",[36,35535,70],{"class":42},[36,35537,35538],{"class":50},"test_data_x.to(device)\n",[36,35540,35541,35544,35546],{"class":38,"line":873},[36,35542,35543],{"class":50},"            test_data_y",[36,35545,70],{"class":42},[36,35547,35548],{"class":50},"test_data_y.to(device)\n",[36,35550,35551],{"class":38,"line":9454},[36,35552,35553],{"class":124},"            # 设置为验证模式\n",[36,35555,35556],{"class":38,"line":9481},[36,35557,34206],{"class":50},[36,35559,35560],{"class":38,"line":9486},[36,35561,35562],{"class":124},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[36,35564,35565,35567,35569],{"class":38,"line":9492},[36,35566,33991],{"class":50},[36,35568,70],{"class":42},[36,35570,35571],{"class":50},"model(test_data_x)\n",[36,35573,35574],{"class":38,"line":9504},[36,35575,35576],{"class":124},"            # 查找每一行中最大值对应的下标\n",[36,35578,35579,35581,35583,35585,35587,35589,35591],{"class":38,"line":9516},[36,35580,34008],{"class":50},[36,35582,70],{"class":42},[36,35584,34013],{"class":50},[36,35586,34016],{"class":473},[36,35588,70],{"class":42},[36,35590,1885],{"class":73},[36,35592,1680],{"class":50},[36,35594,35595],{"class":38,"line":9528},[36,35596,35597],{"class":124},"            # 计算正确率\n",[36,35599,35600],{"class":38,"line":11184},[36,35601,35602],{"class":124},"            # .data表示是一个不带梯度信息的tensor\n",[36,35604,35605],{"class":38,"line":11209},[36,35606,35607],{"class":124},"            # 如果预测正确，则准确度test_corrects加1\n",[36,35609,35610,35613,35615,35617,35619],{"class":38,"line":11232},[36,35611,35612],{"class":50},"            test_corrects",[36,35614,10945],{"class":42},[36,35616,34118],{"class":50},[36,35618,4441],{"class":42},[36,35620,35621],{"class":50},"test_data_y.data)\n",[36,35623,35624],{"class":38,"line":11256},[36,35625,35626],{"class":124},"            # 将所有的测试样本进行累计\n",[36,35628,35629,35632,35634,35637,35639],{"class":38,"line":11261},[36,35630,35631],{"class":50},"            test_num",[36,35633,10945],{"class":42},[36,35635,35636],{"class":50},"test_data_x.size(",[36,35638,1859],{"class":73},[36,35640,1680],{"class":50},[36,35642,35643],{"class":38,"line":11266},[36,35644,58],{"emptyLinePlaceholder":57},[36,35646,35647],{"class":38,"line":11271},[36,35648,35649],{"class":124},"        # 计算准确度\n",[36,35651,35652,35655,35657,35660,35662],{"class":38,"line":11280},[36,35653,35654],{"class":50},"        test_acc",[36,35656,70],{"class":42},[36,35658,35659],{"class":50},"test_corrects.double().item()",[36,35661,2251],{"class":42},[36,35663,35664],{"class":50},"test_num\n",[36,35666,35667],{"class":38,"line":11285},[36,35668,35669],{"class":124},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[36,35671,35672,35674,35676,35679],{"class":38,"line":11291},[36,35673,33782],{"class":73},[36,35675,222],{"class":50},[36,35677,35678],{"class":110},"\"测试的准确率：\"",[36,35680,35681],{"class":50},",test_acc)\n",[36,35683,35684],{"class":38,"line":11312},[36,35685,58],{"emptyLinePlaceholder":57},[36,35687,35688],{"class":38,"line":11318},[36,35689,35690],{"class":124},"# 实现模型的测试功能\n",[36,35692,35693,35695,35697,35699,35701],{"class":38,"line":11332},[36,35694,3061],{"class":42},[36,35696,32551],{"class":73},[36,35698,4441],{"class":42},[36,35700,32556],{"class":110},[36,35702,5230],{"class":50},[36,35704,35705],{"class":38,"line":11338},[36,35706,35707],{"class":124},"    # 加载模型\n",[36,35709,35710,35712,35714],{"class":38,"line":11365},[36,35711,32620],{"class":50},[36,35713,70],{"class":42},[36,35715,35156],{"class":50},[36,35717,35718],{"class":38,"line":11374},[36,35719,35720],{"class":124},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[36,35722,35723],{"class":38,"line":11380},[36,35724,35725],{"class":124},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[36,35727,35728,35731,35734],{"class":38,"line":11388},[36,35729,35730],{"class":50},"    model.load_state_dict(torch.load(",[36,35732,35733],{"class":110},"'best_model.pth'",[36,35735,31828],{"class":50},[36,35737,35738],{"class":38,"line":11393},[36,35739,35740],{"class":124},"    # 数据加载\n",[36,35742,35743,35745,35747],{"class":38,"line":17933},[36,35744,35353],{"class":50},[36,35746,70],{"class":42},[36,35748,35749],{"class":50},"test_data_process()\n",[36,35751,35752],{"class":38,"line":17939},[36,35753,35754],{"class":124},"    # 加载模型测试的函数\n",[36,35756,35757],{"class":38,"line":17962},[36,35758,35759],{"class":50},"    test_model_process(model,test_dataloader)\n",[36,35761,35762],{"class":38,"line":17968},[36,35763,58],{"emptyLinePlaceholder":57},[36,35765,35766],{"class":38,"line":17991},[36,35767,35768],{"class":124},"    # 验证集推理实现：\n",[36,35770,35771],{"class":38,"line":18005},[36,35772,35773],{"class":124},"    # 加载数据加载的更详细一些\n",[36,35775,35776,35778,35780,35782,35784,35786,35788],{"class":38,"line":18025},[36,35777,32568],{"class":50},[36,35779,70],{"class":42},[36,35781,32575],{"class":110},[36,35783,3222],{"class":42},[36,35785,32580],{"class":50},[36,35787,3219],{"class":42},[36,35789,35450],{"class":110},[36,35791,35792,35794,35796],{"class":38,"line":18031},[36,35793,32620],{"class":50},[36,35795,70],{"class":42},[36,35797,33620],{"class":50},[36,35799,35800],{"class":38,"line":18042},[36,35801,35802],{"class":124},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[36,35804,35805],{"class":38,"line":18065},[36,35806,35807],{"class":124},"    # 顺序不可改变\n",[36,35809,35810,35813,35815,35817,35820,35822,35825,35827,35830,35832,35835,35837,35840,35842,35845,35847,35850,35852,35855,35857,35860,35862,35865],{"class":38,"line":18087},[36,35811,35812],{"class":50},"    classes",[36,35814,70],{"class":42},[36,35816,2557],{"class":50},[36,35818,35819],{"class":110},"'T-shirt\u002Ftop'",[36,35821,2045],{"class":50},[36,35823,35824],{"class":110},"'Trouser'",[36,35826,2045],{"class":50},[36,35828,35829],{"class":110},"'Pullover'",[36,35831,2045],{"class":50},[36,35833,35834],{"class":110},"'Dress'",[36,35836,2045],{"class":50},[36,35838,35839],{"class":110},"'Coat'",[36,35841,2045],{"class":50},[36,35843,35844],{"class":110},"'Sandal'",[36,35846,2045],{"class":50},[36,35848,35849],{"class":110},"'Shirt'",[36,35851,2045],{"class":50},[36,35853,35854],{"class":110},"'Sneaker'",[36,35856,2045],{"class":50},[36,35858,35859],{"class":110},"'Bag'",[36,35861,2045],{"class":50},[36,35863,35864],{"class":110},"'Ankle boot'",[36,35866,34577],{"class":50},[36,35868,35869,35871],{"class":38,"line":18092},[36,35870,35509],{"class":42},[36,35872,34215],{"class":50},[36,35874,35875],{"class":38,"line":18098},[36,35876,35877],{"class":124},"        # 将数据和标签都放到设备当中\n",[36,35879,35880,35882,35885,35887],{"class":38,"line":18112},[36,35881,4894],{"class":42},[36,35883,35884],{"class":50}," b_x,b_y ",[36,35886,27374],{"class":42},[36,35888,35528],{"class":50},[36,35890,35891,35893,35895],{"class":38,"line":18125},[36,35892,33941],{"class":50},[36,35894,70],{"class":42},[36,35896,33946],{"class":50},[36,35898,35899,35901,35903],{"class":38,"line":18130},[36,35900,33956],{"class":50},[36,35902,70],{"class":42},[36,35904,33961],{"class":50},[36,35906,35907],{"class":38,"line":18144},[36,35908,58],{"emptyLinePlaceholder":57},[36,35910,35911],{"class":38,"line":18149},[36,35912,35913],{"class":124},"            # 设置模型为验证模式\n",[36,35915,35916],{"class":38,"line":18155},[36,35917,34206],{"class":50},[36,35919,35920],{"class":38,"line":18160},[36,35921,35922],{"class":124},"            # 模型推理结果\n",[36,35924,35925,35927,35929],{"class":38,"line":18174},[36,35926,33991],{"class":50},[36,35928,70],{"class":42},[36,35930,33996],{"class":50},[36,35932,35933],{"class":38,"line":18179},[36,35934,35935],{"class":124},"            # 获取最大下标，最大下标就是类别号\n",[36,35937,35938,35940,35942,35944,35946,35948,35950],{"class":38,"line":18184},[36,35939,34008],{"class":50},[36,35941,70],{"class":42},[36,35943,34013],{"class":50},[36,35945,34016],{"class":473},[36,35947,70],{"class":42},[36,35949,1885],{"class":73},[36,35951,1680],{"class":50},[36,35953,35954],{"class":38,"line":18198},[36,35955,35956],{"class":124},"            # 取出张量中的数值\n",[36,35958,35959,35962,35964],{"class":38,"line":18210},[36,35960,35961],{"class":50},"            result",[36,35963,70],{"class":42},[36,35965,35966],{"class":50},"pre_lab.item()\n",[36,35968,35969,35972,35974],{"class":38,"line":18215},[36,35970,35971],{"class":50},"            label",[36,35973,70],{"class":42},[36,35975,35976],{"class":50},"b_y.item()\n",[36,35978,35979,35982,35984,35987,35990,35993,35995,35998],{"class":38,"line":18228},[36,35980,35981],{"class":73},"            print",[36,35983,222],{"class":50},[36,35985,35986],{"class":110},"\"预测值：\"",[36,35988,35989],{"class":50},",classes[result],",[36,35991,35992],{"class":110},"\"------\"",[36,35994,2045],{"class":50},[36,35996,35997],{"class":110},"\"真实值：\"",[36,35999,36000],{"class":50},",classes[label])\n",[19,36002,36003],{},"（2）AlexNet",[256,36005,36006],{},[259,36007,36008],{},"神经网络构建",[26,36010,36012],{"className":31709,"code":36011,"language":31711,"meta":31,"style":31},"import torch\nfrom torch import nn\nfrom torchsummary import summary\nimport torch.nn.functional as F\n\nclass AlexNet(nn.Module):\n    def __init__(self):\n        super(AlexNet,self).__init__()\n        self.ReLu=nn.ReLU()\n        self.c1=nn.Conv2d(in_channels=1,out_channels=96,kernel_size=11,stride=4)\n        self.s2=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c3=nn.Conv2d(in_channels=96,out_channels=256,kernel_size=5,padding=2)\n        self.s4=nn.MaxPool2d(kernel_size=3,stride=2)\n        self.c5=nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,padding=1)\n        self.c6=nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,padding=1)\n        self.c7=nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1)\n        self.s8=nn.MaxPool2d(kernel_size=3,stride=2)\n        # 定义平展层\n        self.flatten=nn.Flatten()\n       # 定义全连接层\n        self.f1=nn.Linear(6*6*256,4096)\n        self.f2=nn.Linear(4096,4096)\n        self.f3=nn.Linear(4096,10)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.ReLu(self.c1(x))\n        x=self.s2(x)\n        x=self.ReLu(self.c3(x))\n        x=self.s4(x)\n        x=self.ReLu(self.c5(x))\n        x=self.ReLu(self.c6(x))\n        x=self.ReLu(self.c7(x))\n        x=self.s8(x)\n\n        # 展平加线性全连接层\n        x=self.flatten(x)\n        x=self.ReLu(self.f1(x))\n        # 还需要dropout对神经元随机进行失活\n        x=F.dropout(x,0.5)\n        x=self.ReLu(self.f2(x))\n        x=F.dropout(x,0.5)\n        # 直接输出\n        x=self.f3(x)\n        # 前向传播输出\n        return x\n# 定义主函数，用于测试神经网络是否可以正常工作\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    # 模型实例化，然后将实例化的模型放到设备中\n    model=AlexNet().to(device)\n    print(summary(model,(1,227,227)))\n",[33,36013,36014,36020,36030,36040,36052,36056,36073,36081,36096,36108,36150,36177,36220,36246,36290,36333,36376,36403,36407,36417,36422,36450,36469,36488,36492,36497,36505,36520,36530,36544,36554,36569,36584,36599,36610,36614,36619,36629,36644,36649,36663,36678,36690,36695,36706,36711,36717,36722,36734,36754,36759,36768],{"__ignoreMap":31},[36,36015,36016,36018],{"class":38,"line":39},[36,36017,31723],{"class":42},[36,36019,31726],{"class":50},[36,36021,36022,36024,36026,36028],{"class":38,"line":54},[36,36023,32068],{"class":42},[36,36025,32071],{"class":50},[36,36027,31723],{"class":42},[36,36029,32076],{"class":50},[36,36031,36032,36034,36036,36038],{"class":38,"line":61},[36,36033,32068],{"class":42},[36,36035,32088],{"class":50},[36,36037,31723],{"class":42},[36,36039,32093],{"class":50},[36,36041,36042,36044,36047,36049],{"class":38,"line":80},[36,36043,31723],{"class":42},[36,36045,36046],{"class":50}," torch.nn.functional ",[36,36048,32714],{"class":42},[36,36050,36051],{"class":50}," F\n",[36,36053,36054],{"class":38,"line":96},[36,36055,58],{"emptyLinePlaceholder":57},[36,36057,36058,36060,36063,36065,36067,36069,36071],{"class":38,"line":101},[36,36059,16023],{"class":42},[36,36061,36062],{"class":46}," AlexNet",[36,36064,222],{"class":50},[36,36066,32109],{"class":46},[36,36068,2225],{"class":50},[36,36070,32114],{"class":46},[36,36072,32117],{"class":50},[36,36074,36075,36077,36079],{"class":38,"line":128},[36,36076,32132],{"class":42},[36,36078,32135],{"class":73},[36,36080,32138],{"class":50},[36,36082,36083,36085,36088,36090,36092,36094],{"class":38,"line":149},[36,36084,32148],{"class":73},[36,36086,36087],{"class":50},"(AlexNet,",[36,36089,32154],{"class":73},[36,36091,32157],{"class":50},[36,36093,32160],{"class":73},[36,36095,3484],{"class":50},[36,36097,36098,36100,36103,36105],{"class":38,"line":154},[36,36099,32176],{"class":73},[36,36101,36102],{"class":50},".ReLu",[36,36104,70],{"class":42},[36,36106,36107],{"class":50},"nn.ReLU()\n",[36,36109,36110,36112,36114,36116,36118,36120,36122,36124,36126,36128,36130,36132,36134,36136,36138,36140,36142,36144,36146,36148],{"class":38,"line":167},[36,36111,32176],{"class":73},[36,36113,32179],{"class":50},[36,36115,70],{"class":42},[36,36117,32184],{"class":50},[36,36119,32187],{"class":473},[36,36121,70],{"class":42},[36,36123,1885],{"class":73},[36,36125,2045],{"class":50},[36,36127,32196],{"class":473},[36,36129,70],{"class":42},[36,36131,1877],{"class":73},[36,36133,2045],{"class":50},[36,36135,32205],{"class":473},[36,36137,70],{"class":42},[36,36139,2139],{"class":73},[36,36141,2045],{"class":50},[36,36143,32260],{"class":473},[36,36145,70],{"class":42},[36,36147,1961],{"class":73},[36,36149,1680],{"class":50},[36,36151,36152,36154,36156,36158,36161,36163,36165,36167,36169,36171,36173,36175],{"class":38,"line":172},[36,36153,32176],{"class":73},[36,36155,32244],{"class":50},[36,36157,70],{"class":42},[36,36159,36160],{"class":50},"nn.MaxPool2d(",[36,36162,32205],{"class":473},[36,36164,70],{"class":42},[36,36166,1741],{"class":73},[36,36168,2045],{"class":50},[36,36170,32260],{"class":473},[36,36172,70],{"class":42},[36,36174,1747],{"class":73},[36,36176,1680],{"class":50},[36,36178,36179,36181,36183,36185,36187,36189,36191,36193,36195,36197,36199,36202,36204,36206,36208,36210,36212,36214,36216,36218],{"class":38,"line":192},[36,36180,32176],{"class":73},[36,36182,32273],{"class":50},[36,36184,70],{"class":42},[36,36186,32184],{"class":50},[36,36188,32187],{"class":473},[36,36190,70],{"class":42},[36,36192,1877],{"class":73},[36,36194,2045],{"class":50},[36,36196,32196],{"class":473},[36,36198,70],{"class":42},[36,36200,36201],{"class":73},"256",[36,36203,2045],{"class":50},[36,36205,32205],{"class":473},[36,36207,70],{"class":42},[36,36209,1987],{"class":73},[36,36211,2045],{"class":50},[36,36213,32214],{"class":473},[36,36215,70],{"class":42},[36,36217,1747],{"class":73},[36,36219,1680],{"class":50},[36,36221,36222,36224,36226,36228,36230,36232,36234,36236,36238,36240,36242,36244],{"class":38,"line":211},[36,36223,32176],{"class":73},[36,36225,32308],{"class":50},[36,36227,70],{"class":42},[36,36229,36160],{"class":50},[36,36231,32205],{"class":473},[36,36233,70],{"class":42},[36,36235,1741],{"class":73},[36,36237,2045],{"class":50},[36,36239,32260],{"class":473},[36,36241,70],{"class":42},[36,36243,1747],{"class":73},[36,36245,1680],{"class":50},[36,36247,36248,36250,36253,36255,36257,36259,36261,36263,36265,36267,36269,36272,36274,36276,36278,36280,36282,36284,36286,36288],{"class":38,"line":216},[36,36249,32176],{"class":73},[36,36251,36252],{"class":50},".c5",[36,36254,70],{"class":42},[36,36256,32184],{"class":50},[36,36258,32187],{"class":473},[36,36260,70],{"class":42},[36,36262,36201],{"class":73},[36,36264,2045],{"class":50},[36,36266,32196],{"class":473},[36,36268,70],{"class":42},[36,36270,36271],{"class":73},"384",[36,36273,2045],{"class":50},[36,36275,32205],{"class":473},[36,36277,70],{"class":42},[36,36279,1741],{"class":73},[36,36281,2045],{"class":50},[36,36283,32214],{"class":473},[36,36285,70],{"class":42},[36,36287,1885],{"class":73},[36,36289,1680],{"class":50},[36,36291,36292,36294,36297,36299,36301,36303,36305,36307,36309,36311,36313,36315,36317,36319,36321,36323,36325,36327,36329,36331],{"class":38,"line":231},[36,36293,32176],{"class":73},[36,36295,36296],{"class":50},".c6",[36,36298,70],{"class":42},[36,36300,32184],{"class":50},[36,36302,32187],{"class":473},[36,36304,70],{"class":42},[36,36306,36271],{"class":73},[36,36308,2045],{"class":50},[36,36310,32196],{"class":473},[36,36312,70],{"class":42},[36,36314,36271],{"class":73},[36,36316,2045],{"class":50},[36,36318,32205],{"class":473},[36,36320,70],{"class":42},[36,36322,1741],{"class":73},[36,36324,2045],{"class":50},[36,36326,32214],{"class":473},[36,36328,70],{"class":42},[36,36330,1885],{"class":73},[36,36332,1680],{"class":50},[36,36334,36335,36337,36340,36342,36344,36346,36348,36350,36352,36354,36356,36358,36360,36362,36364,36366,36368,36370,36372,36374],{"class":38,"line":236},[36,36336,32176],{"class":73},[36,36338,36339],{"class":50},".c7",[36,36341,70],{"class":42},[36,36343,32184],{"class":50},[36,36345,32187],{"class":473},[36,36347,70],{"class":42},[36,36349,36271],{"class":73},[36,36351,2045],{"class":50},[36,36353,32196],{"class":473},[36,36355,70],{"class":42},[36,36357,36201],{"class":73},[36,36359,2045],{"class":50},[36,36361,32205],{"class":473},[36,36363,70],{"class":42},[36,36365,1741],{"class":73},[36,36367,2045],{"class":50},[36,36369,32214],{"class":473},[36,36371,70],{"class":42},[36,36373,1885],{"class":73},[36,36375,1680],{"class":50},[36,36377,36378,36380,36383,36385,36387,36389,36391,36393,36395,36397,36399,36401],{"class":38,"line":247},[36,36379,32176],{"class":73},[36,36381,36382],{"class":50},".s8",[36,36384,70],{"class":42},[36,36386,36160],{"class":50},[36,36388,32205],{"class":473},[36,36390,70],{"class":42},[36,36392,1741],{"class":73},[36,36394,2045],{"class":50},[36,36396,32260],{"class":473},[36,36398,70],{"class":42},[36,36400,1747],{"class":73},[36,36402,1680],{"class":50},[36,36404,36405],{"class":38,"line":637},[36,36406,32333],{"class":124},[36,36408,36409,36411,36413,36415],{"class":38,"line":646},[36,36410,32176],{"class":73},[36,36412,32340],{"class":50},[36,36414,70],{"class":42},[36,36416,32345],{"class":50},[36,36418,36419],{"class":38,"line":655},[36,36420,36421],{"class":124},"       # 定义全连接层\n",[36,36423,36424,36426,36429,36431,36433,36435,36437,36439,36441,36443,36445,36448],{"class":38,"line":660},[36,36425,32176],{"class":73},[36,36427,36428],{"class":50},".f1",[36,36430,70],{"class":42},[36,36432,32362],{"class":50},[36,36434,2012],{"class":73},[36,36436,2122],{"class":42},[36,36438,2012],{"class":73},[36,36440,2122],{"class":42},[36,36442,36201],{"class":73},[36,36444,2045],{"class":50},[36,36446,36447],{"class":73},"4096",[36,36449,1680],{"class":50},[36,36451,36452,36454,36457,36459,36461,36463,36465,36467],{"class":38,"line":665},[36,36453,32176],{"class":73},[36,36455,36456],{"class":50},".f2",[36,36458,70],{"class":42},[36,36460,32362],{"class":50},[36,36462,36447],{"class":73},[36,36464,2045],{"class":50},[36,36466,36447],{"class":73},[36,36468,1680],{"class":50},[36,36470,36471,36473,36476,36478,36480,36482,36484,36486],{"class":38,"line":674},[36,36472,32176],{"class":73},[36,36474,36475],{"class":50},".f3",[36,36477,70],{"class":42},[36,36479,32362],{"class":50},[36,36481,36447],{"class":73},[36,36483,2045],{"class":50},[36,36485,2113],{"class":73},[36,36487,1680],{"class":50},[36,36489,36490],{"class":38,"line":679},[36,36491,58],{"emptyLinePlaceholder":57},[36,36493,36494],{"class":38,"line":692},[36,36495,36496],{"class":124},"    # 定义前向传播\n",[36,36498,36499,36501,36503],{"class":38,"line":705},[36,36500,32132],{"class":42},[36,36502,32424],{"class":46},[36,36504,32427],{"class":50},[36,36506,36507,36509,36511,36513,36516,36518],{"class":38,"line":710},[36,36508,32432],{"class":50},[36,36510,70],{"class":42},[36,36512,32154],{"class":73},[36,36514,36515],{"class":50},".ReLu(",[36,36517,32154],{"class":73},[36,36519,32444],{"class":50},[36,36521,36522,36524,36526,36528],{"class":38,"line":722},[36,36523,32432],{"class":50},[36,36525,70],{"class":42},[36,36527,32154],{"class":73},[36,36529,32455],{"class":50},[36,36531,36532,36534,36536,36538,36540,36542],{"class":38,"line":750},[36,36533,32432],{"class":50},[36,36535,70],{"class":42},[36,36537,32154],{"class":73},[36,36539,36515],{"class":50},[36,36541,32154],{"class":73},[36,36543,32470],{"class":50},[36,36545,36546,36548,36550,36552],{"class":38,"line":755},[36,36547,32432],{"class":50},[36,36549,70],{"class":42},[36,36551,32154],{"class":73},[36,36553,32481],{"class":50},[36,36555,36556,36558,36560,36562,36564,36566],{"class":38,"line":777},[36,36557,32432],{"class":50},[36,36559,70],{"class":42},[36,36561,32154],{"class":73},[36,36563,36515],{"class":50},[36,36565,32154],{"class":73},[36,36567,36568],{"class":50},".c5(x))\n",[36,36570,36571,36573,36575,36577,36579,36581],{"class":38,"line":802},[36,36572,32432],{"class":50},[36,36574,70],{"class":42},[36,36576,32154],{"class":73},[36,36578,36515],{"class":50},[36,36580,32154],{"class":73},[36,36582,36583],{"class":50},".c6(x))\n",[36,36585,36586,36588,36590,36592,36594,36596],{"class":38,"line":807},[36,36587,32432],{"class":50},[36,36589,70],{"class":42},[36,36591,32154],{"class":73},[36,36593,36515],{"class":50},[36,36595,32154],{"class":73},[36,36597,36598],{"class":50},".c7(x))\n",[36,36600,36601,36603,36605,36607],{"class":38,"line":818},[36,36602,32432],{"class":50},[36,36604,70],{"class":42},[36,36606,32154],{"class":73},[36,36608,36609],{"class":50},".s8(x)\n",[36,36611,36612],{"class":38,"line":843},[36,36613,58],{"emptyLinePlaceholder":57},[36,36615,36616],{"class":38,"line":848},[36,36617,36618],{"class":124},"        # 展平加线性全连接层\n",[36,36620,36621,36623,36625,36627],{"class":38,"line":859},[36,36622,32432],{"class":50},[36,36624,70],{"class":42},[36,36626,32154],{"class":73},[36,36628,32492],{"class":50},[36,36630,36631,36633,36635,36637,36639,36641],{"class":38,"line":864},[36,36632,32432],{"class":50},[36,36634,70],{"class":42},[36,36636,32154],{"class":73},[36,36638,36515],{"class":50},[36,36640,32154],{"class":73},[36,36642,36643],{"class":50},".f1(x))\n",[36,36645,36646],{"class":38,"line":873},[36,36647,36648],{"class":124},"        # 还需要dropout对神经元随机进行失活\n",[36,36650,36651,36653,36655,36658,36661],{"class":38,"line":9454},[36,36652,32432],{"class":50},[36,36654,70],{"class":42},[36,36656,36657],{"class":50},"F.dropout(x,",[36,36659,36660],{"class":73},"0.5",[36,36662,1680],{"class":50},[36,36664,36665,36667,36669,36671,36673,36675],{"class":38,"line":9481},[36,36666,32432],{"class":50},[36,36668,70],{"class":42},[36,36670,32154],{"class":73},[36,36672,36515],{"class":50},[36,36674,32154],{"class":73},[36,36676,36677],{"class":50},".f2(x))\n",[36,36679,36680,36682,36684,36686,36688],{"class":38,"line":9486},[36,36681,32432],{"class":50},[36,36683,70],{"class":42},[36,36685,36657],{"class":50},[36,36687,36660],{"class":73},[36,36689,1680],{"class":50},[36,36691,36692],{"class":38,"line":9492},[36,36693,36694],{"class":124},"        # 直接输出\n",[36,36696,36697,36699,36701,36703],{"class":38,"line":9504},[36,36698,32432],{"class":50},[36,36700,70],{"class":42},[36,36702,32154],{"class":73},[36,36704,36705],{"class":50},".f3(x)\n",[36,36707,36708],{"class":38,"line":9516},[36,36709,36710],{"class":124},"        # 前向传播输出\n",[36,36712,36713,36715],{"class":38,"line":9528},[36,36714,16081],{"class":42},[36,36716,32540],{"class":50},[36,36718,36719],{"class":38,"line":11184},[36,36720,36721],{"class":124},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[36,36723,36724,36726,36728,36730,36732],{"class":38,"line":11209},[36,36725,3061],{"class":42},[36,36727,32551],{"class":73},[36,36729,4441],{"class":42},[36,36731,32556],{"class":110},[36,36733,5230],{"class":50},[36,36735,36736,36738,36740,36742,36744,36746,36748,36750,36752],{"class":38,"line":11232},[36,36737,32568],{"class":50},[36,36739,70],{"class":42},[36,36741,31782],{"class":50},[36,36743,32575],{"class":110},[36,36745,3222],{"class":42},[36,36747,32580],{"class":50},[36,36749,3219],{"class":42},[36,36751,31807],{"class":110},[36,36753,1680],{"class":50},[36,36755,36756],{"class":38,"line":11256},[36,36757,36758],{"class":124},"    # 模型实例化，然后将实例化的模型放到设备中\n",[36,36760,36761,36763,36765],{"class":38,"line":11261},[36,36762,32620],{"class":50},[36,36764,70],{"class":42},[36,36766,36767],{"class":50},"AlexNet().to(device)\n",[36,36769,36770,36772,36774,36776,36778,36781,36783,36785],{"class":38,"line":11266},[36,36771,32630],{"class":73},[36,36773,32633],{"class":50},[36,36775,1885],{"class":73},[36,36777,2045],{"class":50},[36,36779,36780],{"class":73},"227",[36,36782,2045],{"class":50},[36,36784,36780],{"class":73},[36,36786,32646],{"class":50},[256,36788,36789],{"start":54},[259,36790,32659],{},[26,36792,36794],{"className":31709,"code":36793,"language":31711,"meta":31,"style":31},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import AlexNet\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=128,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=128,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    AlexNet=AlexNet()\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(AlexNet,train_dataloader,val_dataloader,num_epochs=20)\n    matplot_acc_loss(train_process)\n",[33,36795,36796,36802,36808,36818,36824,36834,36844,36854,36864,36874,36878,36889,36899,36903,36907,36911,36919,36931,36941,36957,36967,36999,37013,37023,37033,37037,37047,37061,37071,37081,37091,37097,37101,37105,37109,37113,37117,37125,37145,37149,37153,37157,37161,37165,37181,37185,37189,37197,37201,37205,37213,37217,37221,37225,37233,37237,37241,37245,37249,37257,37261,37269,37273,37281,37285,37293,37297,37305,37309,37313,37321,37325,37329,37333,37345,37369,37383,37387,37391,37395,37403,37407,37415,37419,37427,37431,37439,37443,37451,37455,37463,37467,37479,37483,37491,37495,37503,37507,37511,37515,37519,37527,37531,37547,37551,37559,37563,37567,37571,37575,37579,37583,37587,37603,37607,37619,37623,37635,37639,37651,37655,37663,37667,37675,37679,37683,37688,37694,37698,37707,37711,37728,37732,37741,37745,37763,37776,37781,37794,37798,37802,37810,37814,37818,37826,37830,37838,37842,37850,37854,37858,37900,37942,37946,37950,37966,37970,37986,37990,37994,38002,38006,38010,38022,38060,38065,38070,38079,38083,38097,38107,38113,38119,38125,38131,38135,38139,38145,38149,38153,38161,38165,38183,38187,38191,38195,38211,38215,38219,38223,38227,38231,38251,38271,38275,38279,38283,38291,38299,38303,38319,38339,38359,38363,38367,38375,38383,38387,38391,38395,38407,38411,38421,38429,38446],{"__ignoreMap":31},[36,36797,36798,36800],{"class":38,"line":39},[36,36799,31723],{"class":42},[36,36801,33153],{"class":50},[36,36803,36804,36806],{"class":38,"line":54},[36,36805,31723],{"class":42},[36,36807,33160],{"class":50},[36,36809,36810,36812,36814,36816],{"class":38,"line":61},[36,36811,31723],{"class":42},[36,36813,33171],{"class":50},[36,36815,32714],{"class":42},[36,36817,33176],{"class":50},[36,36819,36820,36822],{"class":38,"line":80},[36,36821,31723],{"class":42},[36,36823,31726],{"class":50},[36,36825,36826,36828,36830,36832],{"class":38,"line":96},[36,36827,32068],{"class":42},[36,36829,32746],{"class":50},[36,36831,31723],{"class":42},[36,36833,33193],{"class":50},[36,36835,36836,36838,36840,36842],{"class":38,"line":101},[36,36837,32068],{"class":42},[36,36839,32699],{"class":50},[36,36841,31723],{"class":42},[36,36843,32704],{"class":50},[36,36845,36846,36848,36850,36852],{"class":38,"line":128},[36,36847,32068],{"class":42},[36,36849,32729],{"class":50},[36,36851,31723],{"class":42},[36,36853,32734],{"class":50},[36,36855,36856,36858,36860,36862],{"class":38,"line":149},[36,36857,31723],{"class":42},[36,36859,32746],{"class":50},[36,36861,32714],{"class":42},[36,36863,32751],{"class":50},[36,36865,36866,36868,36870,36872],{"class":38,"line":154},[36,36867,31723],{"class":42},[36,36869,32763],{"class":50},[36,36871,32714],{"class":42},[36,36873,32768],{"class":50},[36,36875,36876],{"class":38,"line":167},[36,36877,33238],{"class":124},[36,36879,36880,36882,36884,36886],{"class":38,"line":172},[36,36881,32068],{"class":42},[36,36883,33245],{"class":50},[36,36885,31723],{"class":42},[36,36887,36888],{"class":50}," AlexNet\n",[36,36890,36891,36893,36895,36897],{"class":38,"line":192},[36,36892,32068],{"class":42},[36,36894,32071],{"class":50},[36,36896,31723],{"class":42},[36,36898,32076],{"class":50},[36,36900,36901],{"class":38,"line":211},[36,36902,58],{"emptyLinePlaceholder":57},[36,36904,36905],{"class":38,"line":216},[36,36906,58],{"emptyLinePlaceholder":57},[36,36908,36909],{"class":38,"line":231},[36,36910,33273],{"class":124},[36,36912,36913,36915,36917],{"class":38,"line":236},[36,36914,33278],{"class":42},[36,36916,33281],{"class":46},[36,36918,33284],{"class":50},[36,36920,36921,36923,36925,36927,36929],{"class":38,"line":247},[36,36922,33289],{"class":50},[36,36924,70],{"class":42},[36,36926,32786],{"class":50},[36,36928,32794],{"class":110},[36,36930,32797],{"class":50},[36,36932,36933,36935,36937,36939],{"class":38,"line":637},[36,36934,33302],{"class":473},[36,36936,70],{"class":42},[36,36938,32807],{"class":73},[36,36940,32797],{"class":50},[36,36942,36943,36945,36947,36949,36951,36953,36955],{"class":38,"line":646},[36,36944,33313],{"class":473},[36,36946,70],{"class":42},[36,36948,32824],{"class":50},[36,36950,32827],{"class":473},[36,36952,70],{"class":42},[36,36954,36780],{"class":73},[36,36956,32835],{"class":50},[36,36958,36959,36961,36963,36965],{"class":38,"line":655},[36,36960,33330],{"class":473},[36,36962,70],{"class":42},[36,36964,32807],{"class":73},[36,36966,1680],{"class":50},[36,36968,36969,36971,36973,36975,36977,36979,36981,36983,36985,36987,36989,36991,36993,36995,36997],{"class":38,"line":660},[36,36970,33341],{"class":50},[36,36972,70],{"class":42},[36,36974,33346],{"class":50},[36,36976,33349],{"class":73},[36,36978,222],{"class":50},[36,36980,33354],{"class":73},[36,36982,2122],{"class":42},[36,36984,8832],{"class":73},[36,36986,33361],{"class":50},[36,36988,33349],{"class":73},[36,36990,222],{"class":50},[36,36992,33368],{"class":73},[36,36994,2122],{"class":42},[36,36996,8832],{"class":73},[36,36998,33375],{"class":50},[36,37000,37001,37003,37005,37007,37009,37011],{"class":38,"line":665},[36,37002,33380],{"class":50},[36,37004,70],{"class":42},[36,37006,33385],{"class":50},[36,37008,32868],{"class":473},[36,37010,70],{"class":42},[36,37012,32873],{"class":50},[36,37014,37015,37017,37019,37021],{"class":38,"line":674},[36,37016,33396],{"class":473},[36,37018,70],{"class":42},[36,37020,33401],{"class":73},[36,37022,32797],{"class":50},[36,37024,37025,37027,37029,37031],{"class":38,"line":679},[36,37026,33408],{"class":473},[36,37028,70],{"class":42},[36,37030,32807],{"class":73},[36,37032,32797],{"class":50},[36,37034,37035],{"class":38,"line":692},[36,37036,33419],{"class":124},[36,37038,37039,37041,37043,37045],{"class":38,"line":705},[36,37040,33424],{"class":473},[36,37042,70],{"class":42},[36,37044,2062],{"class":73},[36,37046,1680],{"class":50},[36,37048,37049,37051,37053,37055,37057,37059],{"class":38,"line":710},[36,37050,33435],{"class":50},[36,37052,70],{"class":42},[36,37054,32865],{"class":50},[36,37056,32868],{"class":473},[36,37058,70],{"class":42},[36,37060,33446],{"class":50},[36,37062,37063,37065,37067,37069],{"class":38,"line":722},[36,37064,33451],{"class":473},[36,37066,70],{"class":42},[36,37068,33401],{"class":73},[36,37070,32797],{"class":50},[36,37072,37073,37075,37077,37079],{"class":38,"line":750},[36,37074,33462],{"class":473},[36,37076,70],{"class":42},[36,37078,32807],{"class":73},[36,37080,32797],{"class":50},[36,37082,37083,37085,37087,37089],{"class":38,"line":755},[36,37084,33473],{"class":473},[36,37086,70],{"class":42},[36,37088,2062],{"class":73},[36,37090,1680],{"class":50},[36,37092,37093,37095],{"class":38,"line":777},[36,37094,239],{"class":42},[36,37096,33486],{"class":50},[36,37098,37099],{"class":38,"line":802},[36,37100,58],{"emptyLinePlaceholder":57},[36,37102,37103],{"class":38,"line":807},[36,37104,33495],{"class":124},[36,37106,37107],{"class":38,"line":818},[36,37108,33500],{"class":124},[36,37110,37111],{"class":38,"line":843},[36,37112,58],{"emptyLinePlaceholder":57},[36,37114,37115],{"class":38,"line":848},[36,37116,33509],{"class":124},[36,37118,37119,37121,37123],{"class":38,"line":859},[36,37120,33278],{"class":42},[36,37122,33516],{"class":46},[36,37124,33519],{"class":50},[36,37126,37127,37129,37131,37133,37135,37137,37139,37141,37143],{"class":38,"line":864},[36,37128,32568],{"class":50},[36,37130,70],{"class":42},[36,37132,31782],{"class":50},[36,37134,32575],{"class":110},[36,37136,3222],{"class":42},[36,37138,32580],{"class":50},[36,37140,3219],{"class":42},[36,37142,33538],{"class":110},[36,37144,1680],{"class":50},[36,37146,37147],{"class":38,"line":873},[36,37148,58],{"emptyLinePlaceholder":57},[36,37150,37151],{"class":38,"line":9454},[36,37152,58],{"emptyLinePlaceholder":57},[36,37154,37155],{"class":38,"line":9481},[36,37156,33553],{"class":124},[36,37158,37159],{"class":38,"line":9486},[36,37160,33558],{"class":124},[36,37162,37163],{"class":38,"line":9492},[36,37164,33563],{"class":124},[36,37166,37167,37169,37171,37173,37175,37177,37179],{"class":38,"line":9504},[36,37168,33568],{"class":50},[36,37170,70],{"class":42},[36,37172,33573],{"class":50},[36,37174,33576],{"class":473},[36,37176,70],{"class":42},[36,37178,33581],{"class":73},[36,37180,1680],{"class":50},[36,37182,37183],{"class":38,"line":9516},[36,37184,58],{"emptyLinePlaceholder":57},[36,37186,37187],{"class":38,"line":9528},[36,37188,33592],{"class":124},[36,37190,37191,37193,37195],{"class":38,"line":11184},[36,37192,33597],{"class":50},[36,37194,70],{"class":42},[36,37196,33602],{"class":50},[36,37198,37199],{"class":38,"line":11209},[36,37200,58],{"emptyLinePlaceholder":57},[36,37202,37203],{"class":38,"line":11232},[36,37204,33611],{"class":124},[36,37206,37207,37209,37211],{"class":38,"line":11256},[36,37208,32620],{"class":50},[36,37210,70],{"class":42},[36,37212,33620],{"class":50},[36,37214,37215],{"class":38,"line":11261},[36,37216,33625],{"class":124},[36,37218,37219],{"class":38,"line":11266},[36,37220,33630],{"class":124},[36,37222,37223],{"class":38,"line":11271},[36,37224,33635],{"class":124},[36,37226,37227,37229,37231],{"class":38,"line":11280},[36,37228,33640],{"class":50},[36,37230,70],{"class":42},[36,37232,33645],{"class":50},[36,37234,37235],{"class":38,"line":11285},[36,37236,58],{"emptyLinePlaceholder":57},[36,37238,37239],{"class":38,"line":11291},[36,37240,58],{"emptyLinePlaceholder":57},[36,37242,37243],{"class":38,"line":11312},[36,37244,33658],{"class":124},[36,37246,37247],{"class":38,"line":11318},[36,37248,33663],{"class":124},[36,37250,37251,37253,37255],{"class":38,"line":11332},[36,37252,33668],{"class":50},[36,37254,70],{"class":42},[36,37256,33673],{"class":73},[36,37258,37259],{"class":38,"line":11338},[36,37260,33678],{"class":124},[36,37262,37263,37265,37267],{"class":38,"line":11365},[36,37264,33683],{"class":50},[36,37266,70],{"class":42},[36,37268,33688],{"class":50},[36,37270,37271],{"class":38,"line":11374},[36,37272,33693],{"class":124},[36,37274,37275,37277,37279],{"class":38,"line":11380},[36,37276,33698],{"class":50},[36,37278,70],{"class":42},[36,37280,33688],{"class":50},[36,37282,37283],{"class":38,"line":11388},[36,37284,33707],{"class":124},[36,37286,37287,37289,37291],{"class":38,"line":11393},[36,37288,33712],{"class":50},[36,37290,70],{"class":42},[36,37292,33688],{"class":50},[36,37294,37295],{"class":38,"line":17933},[36,37296,33721],{"class":124},[36,37298,37299,37301,37303],{"class":38,"line":17939},[36,37300,33726],{"class":50},[36,37302,70],{"class":42},[36,37304,33688],{"class":50},[36,37306,37307],{"class":38,"line":17962},[36,37308,58],{"emptyLinePlaceholder":57},[36,37310,37311],{"class":38,"line":17968},[36,37312,33739],{"class":124},[36,37314,37315,37317,37319],{"class":38,"line":17991},[36,37316,33744],{"class":50},[36,37318,70],{"class":42},[36,37320,33749],{"class":50},[36,37322,37323],{"class":38,"line":18005},[36,37324,58],{"emptyLinePlaceholder":57},[36,37326,37327],{"class":38,"line":18025},[36,37328,58],{"emptyLinePlaceholder":57},[36,37330,37331],{"class":38,"line":18031},[36,37332,33762],{"class":124},[36,37334,37335,37337,37339,37341,37343],{"class":38,"line":18042},[36,37336,4692],{"class":42},[36,37338,33769],{"class":50},[36,37340,27374],{"class":42},[36,37342,33774],{"class":73},[36,37344,33777],{"class":50},[36,37346,37347,37349,37351,37353,37355,37357,37359,37361,37363,37365,37367],{"class":38,"line":18065},[36,37348,33782],{"class":73},[36,37350,222],{"class":50},[36,37352,33787],{"class":110},[36,37354,33790],{"class":73},[36,37356,2251],{"class":110},[36,37358,33790],{"class":73},[36,37360,1919],{"class":110},[36,37362,33799],{"class":50},[36,37364,2199],{"class":42},[36,37366,1885],{"class":73},[36,37368,31828],{"class":50},[36,37370,37371,37373,37375,37377,37379,37381],{"class":38,"line":18087},[36,37372,33782],{"class":73},[36,37374,222],{"class":50},[36,37376,33814],{"class":110},[36,37378,2122],{"class":42},[36,37380,2113],{"class":73},[36,37382,1680],{"class":50},[36,37384,37385],{"class":38,"line":18092},[36,37386,58],{"emptyLinePlaceholder":57},[36,37388,37389],{"class":38,"line":18098},[36,37390,33829],{"class":124},[36,37392,37393],{"class":38,"line":18112},[36,37394,33834],{"class":124},[36,37396,37397,37399,37401],{"class":38,"line":18125},[36,37398,33839],{"class":50},[36,37400,70],{"class":42},[36,37402,33673],{"class":73},[36,37404,37405],{"class":38,"line":18130},[36,37406,33848],{"class":124},[36,37408,37409,37411,37413],{"class":38,"line":18144},[36,37410,33853],{"class":50},[36,37412,70],{"class":42},[36,37414,4576],{"class":73},[36,37416,37417],{"class":38,"line":18149},[36,37418,33862],{"class":124},[36,37420,37421,37423,37425],{"class":38,"line":18155},[36,37422,33867],{"class":50},[36,37424,70],{"class":42},[36,37426,33673],{"class":73},[36,37428,37429],{"class":38,"line":18160},[36,37430,33876],{"class":124},[36,37432,37433,37435,37437],{"class":38,"line":18174},[36,37434,33881],{"class":50},[36,37436,70],{"class":42},[36,37438,4576],{"class":73},[36,37440,37441],{"class":38,"line":18179},[36,37442,33890],{"class":124},[36,37444,37445,37447,37449],{"class":38,"line":18184},[36,37446,33895],{"class":50},[36,37448,70],{"class":42},[36,37450,4576],{"class":73},[36,37452,37453],{"class":38,"line":18198},[36,37454,33904],{"class":124},[36,37456,37457,37459,37461],{"class":38,"line":18210},[36,37458,33909],{"class":50},[36,37460,70],{"class":42},[36,37462,4576],{"class":73},[36,37464,37465],{"class":38,"line":18215},[36,37466,33918],{"class":124},[36,37468,37469,37471,37473,37475,37477],{"class":38,"line":18228},[36,37470,4894],{"class":42},[36,37472,32932],{"class":50},[36,37474,27374],{"class":42},[36,37476,32937],{"class":73},[36,37478,33931],{"class":50},[36,37480,37481],{"class":38,"line":18233},[36,37482,33936],{"class":124},[36,37484,37485,37487,37489],{"class":38,"line":18238},[36,37486,33941],{"class":50},[36,37488,70],{"class":42},[36,37490,33946],{"class":50},[36,37492,37493],{"class":38,"line":18243},[36,37494,33951],{"class":124},[36,37496,37497,37499,37501],{"class":38,"line":18256},[36,37498,33956],{"class":50},[36,37500,70],{"class":42},[36,37502,33961],{"class":50},[36,37504,37505],{"class":38,"line":18261},[36,37506,33967],{"class":124},[36,37508,37509],{"class":38,"line":33964},[36,37510,33973],{"class":50},[36,37512,37513],{"class":38,"line":33970},[36,37514,33979],{"class":124},[36,37516,37517],{"class":38,"line":33976},[36,37518,33985],{"class":124},[36,37520,37521,37523,37525],{"class":38,"line":33982},[36,37522,33991],{"class":50},[36,37524,70],{"class":42},[36,37526,33996],{"class":50},[36,37528,37529],{"class":38,"line":33988},[36,37530,34002],{"class":124},[36,37532,37533,37535,37537,37539,37541,37543,37545],{"class":38,"line":33999},[36,37534,34008],{"class":50},[36,37536,70],{"class":42},[36,37538,34013],{"class":50},[36,37540,34016],{"class":473},[36,37542,70],{"class":42},[36,37544,1885],{"class":73},[36,37546,1680],{"class":50},[36,37548,37549],{"class":38,"line":34005},[36,37550,34028],{"class":124},[36,37552,37553,37555,37557],{"class":38,"line":34025},[36,37554,34034],{"class":50},[36,37556,70],{"class":42},[36,37558,34039],{"class":50},[36,37560,37561],{"class":38,"line":34031},[36,37562,34045],{"class":124},[36,37564,37565],{"class":38,"line":34042},[36,37566,34051],{"class":50},[36,37568,37569],{"class":38,"line":34048},[36,37570,34057],{"class":124},[36,37572,37573],{"class":38,"line":34054},[36,37574,34063],{"class":50},[36,37576,37577],{"class":38,"line":34060},[36,37578,34069],{"class":124},[36,37580,37581],{"class":38,"line":34066},[36,37582,34075],{"class":50},[36,37584,37585],{"class":38,"line":34072},[36,37586,34081],{"class":124},[36,37588,37589,37591,37593,37595,37597,37599,37601],{"class":38,"line":34078},[36,37590,34087],{"class":50},[36,37592,10945],{"class":42},[36,37594,34092],{"class":50},[36,37596,2122],{"class":42},[36,37598,34097],{"class":50},[36,37600,1859],{"class":73},[36,37602,1680],{"class":50},[36,37604,37605],{"class":38,"line":34084},[36,37606,34107],{"class":124},[36,37608,37609,37611,37613,37615,37617],{"class":38,"line":34104},[36,37610,34113],{"class":50},[36,37612,10945],{"class":42},[36,37614,34118],{"class":50},[36,37616,4441],{"class":42},[36,37618,34123],{"class":50},[36,37620,37621],{"class":38,"line":34110},[36,37622,34129],{"class":124},[36,37624,37625,37627,37629,37631,37633],{"class":38,"line":34126},[36,37626,34135],{"class":50},[36,37628,10945],{"class":42},[36,37630,34097],{"class":50},[36,37632,1859],{"class":73},[36,37634,1680],{"class":50},[36,37636,37637],{"class":38,"line":34132},[36,37638,34149],{"class":124},[36,37640,37641,37643,37645,37647,37649],{"class":38,"line":34146},[36,37642,4894],{"class":42},[36,37644,34157],{"class":50},[36,37646,27374],{"class":42},[36,37648,32937],{"class":73},[36,37650,34164],{"class":50},[36,37652,37653],{"class":38,"line":34152},[36,37654,34170],{"class":124},[36,37656,37657,37659,37661],{"class":38,"line":34167},[36,37658,33941],{"class":50},[36,37660,70],{"class":42},[36,37662,33946],{"class":50},[36,37664,37665],{"class":38,"line":34173},[36,37666,34185],{"class":124},[36,37668,37669,37671,37673],{"class":38,"line":34182},[36,37670,33956],{"class":50},[36,37672,70],{"class":42},[36,37674,33961],{"class":50},[36,37676,37677],{"class":38,"line":34188},[36,37678,34200],{"class":124},[36,37680,37681],{"class":38,"line":34197},[36,37682,34206],{"class":50},[36,37684,37685],{"class":38,"line":34203},[36,37686,37687],{"class":124},"            # 验证时不计算梯度以节省内存\u002F计算\n",[36,37689,37690,37692],{"class":38,"line":34209},[36,37691,34212],{"class":42},[36,37693,34215],{"class":50},[36,37695,37696],{"class":38,"line":34218},[36,37697,34221],{"class":124},[36,37699,37700,37703,37705],{"class":38,"line":34224},[36,37701,37702],{"class":50},"                output",[36,37704,70],{"class":42},[36,37706,33996],{"class":50},[36,37708,37709],{"class":38,"line":34235},[36,37710,34238],{"class":124},[36,37712,37713,37716,37718,37720,37722,37724,37726],{"class":38,"line":34241},[36,37714,37715],{"class":50},"                pre_lab",[36,37717,70],{"class":42},[36,37719,34013],{"class":50},[36,37721,34016],{"class":473},[36,37723,70],{"class":42},[36,37725,1885],{"class":73},[36,37727,1680],{"class":50},[36,37729,37730],{"class":38,"line":34260},[36,37731,34263],{"class":124},[36,37733,37734,37737,37739],{"class":38,"line":34266},[36,37735,37736],{"class":50},"                val_batch_loss",[36,37738,70],{"class":42},[36,37740,34039],{"class":50},[36,37742,37743],{"class":38,"line":34277},[36,37744,34280],{"class":124},[36,37746,37747,37750,37752,37755,37757,37759,37761],{"class":38,"line":34283},[36,37748,37749],{"class":50},"                val_loss",[36,37751,10945],{"class":42},[36,37753,37754],{"class":50},"val_batch_loss.item()",[36,37756,2122],{"class":42},[36,37758,34097],{"class":50},[36,37760,1859],{"class":73},[36,37762,1680],{"class":50},[36,37764,37765,37768,37770,37772,37774],{"class":38,"line":34303},[36,37766,37767],{"class":50},"                val_corrects",[36,37769,10945],{"class":42},[36,37771,34118],{"class":50},[36,37773,4441],{"class":42},[36,37775,34123],{"class":50},[36,37777,37778],{"class":38,"line":34319},[36,37779,37780],{"class":124},"            # 当前用于验证的样本数量\n",[36,37782,37783,37786,37788,37790,37792],{"class":38,"line":34325},[36,37784,37785],{"class":50},"            val_num",[36,37787,10945],{"class":42},[36,37789,34097],{"class":50},[36,37791,1859],{"class":73},[36,37793,1680],{"class":50},[36,37795,37796],{"class":38,"line":34339},[36,37797,34342],{"class":124},[36,37799,37800],{"class":38,"line":34345},[36,37801,34348],{"class":124},[36,37803,37804,37806,37808],{"class":38,"line":34351},[36,37805,34354],{"class":50},[36,37807,2251],{"class":42},[36,37809,34359],{"class":50},[36,37811,37812],{"class":38,"line":34362},[36,37813,34365],{"class":124},[36,37815,37816],{"class":38,"line":34368},[36,37817,34371],{"class":124},[36,37819,37820,37822,37824],{"class":38,"line":34374},[36,37821,34377],{"class":50},[36,37823,2251],{"class":42},[36,37825,34359],{"class":50},[36,37827,37828],{"class":38,"line":34384},[36,37829,34387],{"class":124},[36,37831,37832,37834,37836],{"class":38,"line":34390},[36,37833,34393],{"class":50},[36,37835,2251],{"class":42},[36,37837,34398],{"class":50},[36,37839,37840],{"class":38,"line":34401},[36,37841,34404],{"class":124},[36,37843,37844,37846,37848],{"class":38,"line":34407},[36,37845,34410],{"class":50},[36,37847,2251],{"class":42},[36,37849,34398],{"class":50},[36,37851,37852],{"class":38,"line":34417},[36,37853,58],{"emptyLinePlaceholder":57},[36,37855,37856],{"class":38,"line":34422},[36,37857,34425],{"class":124},[36,37859,37860,37862,37864,37866,37868,37870,37872,37874,37876,37878,37880,37882,37884,37886,37888,37890,37892,37894,37896,37898],{"class":38,"line":34428},[36,37861,33782],{"class":73},[36,37863,222],{"class":50},[36,37865,5083],{"class":110},[36,37867,33790],{"class":73},[36,37869,34439],{"class":110},[36,37871,2563],{"class":73},[36,37873,34444],{"class":42},[36,37875,2613],{"class":73},[36,37877,34449],{"class":110},[36,37879,2563],{"class":73},[36,37881,34444],{"class":42},[36,37883,2613],{"class":73},[36,37885,5083],{"class":110},[36,37887,34460],{"class":50},[36,37889,2199],{"class":42},[36,37891,1885],{"class":73},[36,37893,34467],{"class":50},[36,37895,2199],{"class":42},[36,37897,1885],{"class":73},[36,37899,34474],{"class":50},[36,37901,37902,37904,37906,37908,37910,37912,37914,37916,37918,37920,37922,37924,37926,37928,37930,37932,37934,37936,37938,37940],{"class":38,"line":34477},[36,37903,33782],{"class":73},[36,37905,222],{"class":50},[36,37907,5083],{"class":110},[36,37909,33790],{"class":73},[36,37911,34488],{"class":110},[36,37913,2563],{"class":73},[36,37915,34444],{"class":42},[36,37917,2613],{"class":73},[36,37919,34497],{"class":110},[36,37921,2563],{"class":73},[36,37923,34444],{"class":42},[36,37925,2613],{"class":73},[36,37927,5083],{"class":110},[36,37929,34508],{"class":50},[36,37931,2199],{"class":42},[36,37933,1885],{"class":73},[36,37935,34515],{"class":50},[36,37937,2199],{"class":42},[36,37939,1885],{"class":73},[36,37941,34474],{"class":50},[36,37943,37944],{"class":38,"line":34524},[36,37945,58],{"emptyLinePlaceholder":57},[36,37947,37948],{"class":38,"line":34529},[36,37949,34532],{"class":124},[36,37951,37952,37954,37956,37958,37960,37962,37964],{"class":38,"line":34535},[36,37953,3999],{"class":42},[36,37955,34540],{"class":50},[36,37957,2199],{"class":42},[36,37959,1885],{"class":73},[36,37961,2607],{"class":50},[36,37963,2627],{"class":42},[36,37965,34551],{"class":50},[36,37967,37968],{"class":38,"line":34554},[36,37969,34557],{"class":124},[36,37971,37972,37974,37976,37978,37980,37982,37984],{"class":38,"line":34560},[36,37973,34563],{"class":50},[36,37975,1713],{"class":73},[36,37977,70],{"class":42},[36,37979,34570],{"class":50},[36,37981,2199],{"class":42},[36,37983,1885],{"class":73},[36,37985,34577],{"class":50},[36,37987,37988],{"class":38,"line":34580},[36,37989,34583],{"class":124},[36,37991,37992],{"class":38,"line":34586},[36,37993,34589],{"class":124},[36,37995,37996,37998,38000],{"class":38,"line":34592},[36,37997,34595],{"class":50},[36,37999,70],{"class":42},[36,38001,33645],{"class":50},[36,38003,38004],{"class":38,"line":34602},[36,38005,58],{"emptyLinePlaceholder":57},[36,38007,38008],{"class":38,"line":34607},[36,38009,34610],{"class":124},[36,38011,38012,38014,38016,38018,38020],{"class":38,"line":34613},[36,38013,34616],{"class":50},[36,38015,70],{"class":42},[36,38017,34621],{"class":50},[36,38019,2199],{"class":42},[36,38021,34626],{"class":50},[36,38023,38024,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058],{"class":38,"line":34629},[36,38025,33782],{"class":73},[36,38027,222],{"class":50},[36,38029,34636],{"class":110},[36,38031,2563],{"class":73},[36,38033,34641],{"class":42},[36,38035,2613],{"class":73},[36,38037,2211],{"class":110},[36,38039,2563],{"class":73},[36,38041,34641],{"class":42},[36,38043,2613],{"class":73},[36,38045,34654],{"class":110},[36,38047,34657],{"class":50},[36,38049,34660],{"class":42},[36,38051,2574],{"class":73},[36,38053,34665],{"class":50},[36,38055,1996],{"class":42},[36,38057,2574],{"class":73},[36,38059,31828],{"class":50},[36,38061,38062],{"class":38,"line":34674},[36,38063,38064],{"class":124},"    # 选择最优参数并保存\n",[36,38066,38067],{"class":38,"line":34680},[36,38068,38069],{"class":124},"    # 保存最佳模型权重字典\n",[36,38071,38072,38075,38077],{"class":38,"line":34686},[36,38073,38074],{"class":50},"    torch.save(best_model_wts,",[36,38076,34698],{"class":110},[36,38078,1680],{"class":50},[36,38080,38081],{"class":38,"line":34692},[36,38082,34718],{"class":124},[36,38084,38085,38087,38089,38091,38093,38095],{"class":38,"line":34703},[36,38086,34724],{"class":50},[36,38088,70],{"class":42},[36,38090,34729],{"class":50},[36,38092,34732],{"class":473},[36,38094,70],{"class":42},[36,38096,3076],{"class":50},[36,38098,38099,38101,38103,38105],{"class":38,"line":34709},[36,38100,34742],{"class":110},[36,38102,2526],{"class":50},[36,38104,34747],{"class":73},[36,38106,34750],{"class":50},[36,38108,38109,38111],{"class":38,"line":34715},[36,38110,34756],{"class":110},[36,38112,34759],{"class":50},[36,38114,38115,38117],{"class":38,"line":34721},[36,38116,34765],{"class":110},[36,38118,34768],{"class":50},[36,38120,38121,38123],{"class":38,"line":34739},[36,38122,34774],{"class":110},[36,38124,34777],{"class":50},[36,38126,38127,38129],{"class":38,"line":34753},[36,38128,34783],{"class":110},[36,38130,34786],{"class":50},[36,38132,38133],{"class":38,"line":34762},[36,38134,34792],{"class":50},[36,38136,38137],{"class":38,"line":34771},[36,38138,34798],{"class":124},[36,38140,38141,38143],{"class":38,"line":34780},[36,38142,239],{"class":42},[36,38144,34806],{"class":50},[36,38146,38147],{"class":38,"line":34789},[36,38148,58],{"emptyLinePlaceholder":57},[36,38150,38151],{"class":38,"line":34795},[36,38152,34817],{"class":124},[36,38154,38155,38157,38159],{"class":38,"line":34801},[36,38156,33278],{"class":42},[36,38158,34825],{"class":46},[36,38160,34828],{"class":50},[36,38162,38163],{"class":38,"line":34809},[36,38164,34834],{"class":124},[36,38166,38167,38169,38171,38173,38175,38177,38179,38181],{"class":38,"line":34814},[36,38168,34840],{"class":50},[36,38170,33024],{"class":473},[36,38172,70],{"class":42},[36,38174,222],{"class":50},[36,38176,2165],{"class":73},[36,38178,2045],{"class":50},[36,38180,1961],{"class":73},[36,38182,31828],{"class":50},[36,38184,38185],{"class":38,"line":34820},[36,38186,34860],{"class":124},[36,38188,38189],{"class":38,"line":34831},[36,38190,34866],{"class":124},[36,38192,38193],{"class":38,"line":34837},[36,38194,34872],{"class":124},[36,38196,38197,38199,38201,38203,38205,38207,38209],{"class":38,"line":34857},[36,38198,33058],{"class":50},[36,38200,1885],{"class":73},[36,38202,2045],{"class":50},[36,38204,1747],{"class":73},[36,38206,2045],{"class":50},[36,38208,1885],{"class":73},[36,38210,1680],{"class":50},[36,38212,38213],{"class":38,"line":34863},[36,38214,34895],{"class":124},[36,38216,38217],{"class":38,"line":34869},[36,38218,34901],{"class":124},[36,38220,38221],{"class":38,"line":34875},[36,38222,34907],{"class":124},[36,38224,38225],{"class":38,"line":34892},[36,38226,34913],{"class":124},[36,38228,38229],{"class":38,"line":34898},[36,38230,34919],{"class":124},[36,38232,38233,38235,38237,38239,38241,38243,38245,38247,38249],{"class":38,"line":34904},[36,38234,34925],{"class":50},[36,38236,34928],{"class":110},[36,38238,34931],{"class":50},[36,38240,34934],{"class":110},[36,38242,2045],{"class":50},[36,38244,34939],{"class":473},[36,38246,70],{"class":42},[36,38248,34944],{"class":110},[36,38250,1680],{"class":50},[36,38252,38253,38255,38257,38259,38261,38263,38265,38267,38269],{"class":38,"line":34910},[36,38254,34925],{"class":50},[36,38256,34928],{"class":110},[36,38258,34956],{"class":50},[36,38260,34959],{"class":110},[36,38262,2045],{"class":50},[36,38264,34939],{"class":473},[36,38266,70],{"class":42},[36,38268,34968],{"class":110},[36,38270,1680],{"class":50},[36,38272,38273],{"class":38,"line":34916},[36,38274,34976],{"class":124},[36,38276,38277],{"class":38,"line":34922},[36,38278,34982],{"class":50},[36,38280,38281],{"class":38,"line":34949},[36,38282,34988],{"class":124},[36,38284,38285,38287,38289],{"class":38,"line":34973},[36,38286,34994],{"class":50},[36,38288,34997],{"class":110},[36,38290,1680],{"class":50},[36,38292,38293,38295,38297],{"class":38,"line":34979},[36,38294,35005],{"class":50},[36,38296,35008],{"class":110},[36,38298,1680],{"class":50},[36,38300,38301],{"class":38,"line":34985},[36,38302,35016],{"class":124},[36,38304,38305,38307,38309,38311,38313,38315,38317],{"class":38,"line":34991},[36,38306,33058],{"class":50},[36,38308,1885],{"class":73},[36,38310,2045],{"class":50},[36,38312,1747],{"class":73},[36,38314,2045],{"class":50},[36,38316,1747],{"class":73},[36,38318,1680],{"class":50},[36,38320,38321,38323,38325,38327,38329,38331,38333,38335,38337],{"class":38,"line":35002},[36,38322,34925],{"class":50},[36,38324,34928],{"class":110},[36,38326,35043],{"class":50},[36,38328,34934],{"class":110},[36,38330,2045],{"class":50},[36,38332,34939],{"class":473},[36,38334,70],{"class":42},[36,38336,35054],{"class":110},[36,38338,1680],{"class":50},[36,38340,38341,38343,38345,38347,38349,38351,38353,38355,38357],{"class":38,"line":35013},[36,38342,34925],{"class":50},[36,38344,34928],{"class":110},[36,38346,35066],{"class":50},[36,38348,34959],{"class":110},[36,38350,2045],{"class":50},[36,38352,34939],{"class":473},[36,38354,70],{"class":42},[36,38356,35077],{"class":110},[36,38358,1680],{"class":50},[36,38360,38361],{"class":38,"line":35019},[36,38362,35085],{"class":124},[36,38364,38365],{"class":38,"line":35036},[36,38366,34982],{"class":50},[36,38368,38369,38371,38373],{"class":38,"line":35059},[36,38370,34994],{"class":50},[36,38372,34928],{"class":110},[36,38374,1680],{"class":50},[36,38376,38377,38379,38381],{"class":38,"line":35082},[36,38378,35005],{"class":50},[36,38380,35107],{"class":110},[36,38382,1680],{"class":50},[36,38384,38385],{"class":38,"line":35088},[36,38386,35115],{"class":50},[36,38388,38389],{"class":38,"line":35093},[36,38390,58],{"emptyLinePlaceholder":57},[36,38392,38393],{"class":38,"line":35102},[36,38394,35126],{"class":124},[36,38396,38397,38399,38401,38403,38405],{"class":38,"line":35112},[36,38398,3061],{"class":42},[36,38400,32551],{"class":73},[36,38402,4441],{"class":42},[36,38404,32556],{"class":110},[36,38406,5230],{"class":50},[36,38408,38409],{"class":38,"line":35118},[36,38410,35145],{"class":124},[36,38412,38413,38416,38418],{"class":38,"line":35123},[36,38414,38415],{"class":50},"    AlexNet",[36,38417,70],{"class":42},[36,38419,38420],{"class":50},"AlexNet()\n",[36,38422,38423,38425,38427],{"class":38,"line":35129},[36,38424,35162],{"class":50},[36,38426,70],{"class":42},[36,38428,35167],{"class":50},[36,38430,38431,38433,38435,38438,38440,38442,38444],{"class":38,"line":35142},[36,38432,34724],{"class":50},[36,38434,70],{"class":42},[36,38436,38437],{"class":50},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[36,38439,35180],{"class":473},[36,38441,70],{"class":42},[36,38443,2367],{"class":73},[36,38445,1680],{"class":50},[36,38447,38448],{"class":38,"line":35148},[36,38449,35192],{"class":50},[256,38451,38452],{"start":61},[259,38453,35205],{},[26,38455,38457],{"className":31709,"code":38456,"language":31711,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom jupyter_client.consoleapp import classes\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import AlexNet\nfrom 练习.AlexNet.model import AlexNet\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=AlexNet()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,38458,38459,38465,38475,38485,38495,38499,38509,38519,38530,38534,38538,38542,38550,38566,38576,38592,38602,38616,38620,38630,38640,38650,38656,38660,38664,38672,38676,38692,38700,38704,38708,38716,38724,38728,38732,38736,38740,38746,38750,38760,38768,38776,38780,38784,38788,38796,38800,38816,38820,38824,38828,38840,38844,38856,38860,38864,38876,38880,38890,38894,38898,38910,38914,38922,38926,38930,38938,38942,38950,38954,38958,38962,38966,38970,38986,38994,38998,39002,39050,39056,39060,39070,39078,39086,39090,39094,39098,39102,39110,39114,39130,39134,39142,39150],{"__ignoreMap":31},[36,38460,38461,38463],{"class":38,"line":39},[36,38462,31723],{"class":42},[36,38464,31726],{"class":50},[36,38466,38467,38469,38471,38473],{"class":38,"line":54},[36,38468,31723],{"class":42},[36,38470,32746],{"class":50},[36,38472,32714],{"class":42},[36,38474,32751],{"class":50},[36,38476,38477,38479,38481,38483],{"class":38,"line":61},[36,38478,32068],{"class":42},[36,38480,35233],{"class":50},[36,38482,31723],{"class":42},[36,38484,35238],{"class":50},[36,38486,38487,38489,38491,38493],{"class":38,"line":80},[36,38488,32068],{"class":42},[36,38490,32729],{"class":50},[36,38492,31723],{"class":42},[36,38494,32734],{"class":50},[36,38496,38497],{"class":38,"line":96},[36,38498,35253],{"class":124},[36,38500,38501,38503,38505,38507],{"class":38,"line":101},[36,38502,32068],{"class":42},[36,38504,32699],{"class":50},[36,38506,31723],{"class":42},[36,38508,32704],{"class":50},[36,38510,38511,38513,38515,38517],{"class":38,"line":128},[36,38512,32068],{"class":42},[36,38514,33245],{"class":50},[36,38516,31723],{"class":42},[36,38518,36888],{"class":50},[36,38520,38521,38523,38526,38528],{"class":38,"line":149},[36,38522,32068],{"class":42},[36,38524,38525],{"class":50}," 练习.AlexNet.model ",[36,38527,31723],{"class":42},[36,38529,36888],{"class":50},[36,38531,38532],{"class":38,"line":154},[36,38533,58],{"emptyLinePlaceholder":57},[36,38535,38536],{"class":38,"line":167},[36,38537,58],{"emptyLinePlaceholder":57},[36,38539,38540],{"class":38,"line":172},[36,38541,35282],{"class":124},[36,38543,38544,38546,38548],{"class":38,"line":192},[36,38545,33278],{"class":42},[36,38547,35289],{"class":46},[36,38549,33284],{"class":50},[36,38551,38552,38554,38556,38558,38560,38562,38564],{"class":38,"line":211},[36,38553,35296],{"class":50},[36,38555,70],{"class":42},[36,38557,32786],{"class":50},[36,38559,32789],{"class":473},[36,38561,70],{"class":42},[36,38563,32794],{"class":110},[36,38565,32797],{"class":50},[36,38567,38568,38570,38572,38574],{"class":38,"line":216},[36,38569,35313],{"class":473},[36,38571,70],{"class":42},[36,38573,35318],{"class":73},[36,38575,32797],{"class":50},[36,38577,38578,38580,38582,38584,38586,38588,38590],{"class":38,"line":231},[36,38579,35325],{"class":473},[36,38581,70],{"class":42},[36,38583,32824],{"class":50},[36,38585,32827],{"class":473},[36,38587,70],{"class":42},[36,38589,36780],{"class":73},[36,38591,32835],{"class":50},[36,38593,38594,38596,38598,38600],{"class":38,"line":236},[36,38595,35342],{"class":473},[36,38597,70],{"class":42},[36,38599,32807],{"class":73},[36,38601,1680],{"class":50},[36,38603,38604,38606,38608,38610,38612,38614],{"class":38,"line":247},[36,38605,35353],{"class":50},[36,38607,70],{"class":42},[36,38609,32865],{"class":50},[36,38611,32868],{"class":473},[36,38613,70],{"class":42},[36,38615,35364],{"class":50},[36,38617,38618],{"class":38,"line":637},[36,38619,35369],{"class":124},[36,38621,38622,38624,38626,38628],{"class":38,"line":646},[36,38623,35374],{"class":473},[36,38625,70],{"class":42},[36,38627,1885],{"class":73},[36,38629,32797],{"class":50},[36,38631,38632,38634,38636,38638],{"class":38,"line":655},[36,38633,35385],{"class":473},[36,38635,70],{"class":42},[36,38637,32807],{"class":73},[36,38639,32797],{"class":50},[36,38641,38642,38644,38646,38648],{"class":38,"line":660},[36,38643,35396],{"class":473},[36,38645,70],{"class":42},[36,38647,1859],{"class":73},[36,38649,1680],{"class":50},[36,38651,38652,38654],{"class":38,"line":665},[36,38653,239],{"class":42},[36,38655,35409],{"class":50},[36,38657,38658],{"class":38,"line":674},[36,38659,58],{"emptyLinePlaceholder":57},[36,38661,38662],{"class":38,"line":679},[36,38663,35418],{"class":124},[36,38665,38666,38668,38670],{"class":38,"line":692},[36,38667,33278],{"class":42},[36,38669,35425],{"class":46},[36,38671,35428],{"class":50},[36,38673,38674],{"class":38,"line":705},[36,38675,35433],{"class":124},[36,38677,38678,38680,38682,38684,38686,38688,38690],{"class":38,"line":710},[36,38679,32568],{"class":50},[36,38681,70],{"class":42},[36,38683,32575],{"class":110},[36,38685,3222],{"class":42},[36,38687,32580],{"class":50},[36,38689,3219],{"class":42},[36,38691,35450],{"class":110},[36,38693,38694,38696,38698],{"class":38,"line":722},[36,38695,32620],{"class":50},[36,38697,70],{"class":42},[36,38699,33620],{"class":50},[36,38701,38702],{"class":38,"line":750},[36,38703,58],{"emptyLinePlaceholder":57},[36,38705,38706],{"class":38,"line":755},[36,38707,35467],{"class":124},[36,38709,38710,38712,38714],{"class":38,"line":777},[36,38711,35472],{"class":50},[36,38713,70],{"class":42},[36,38715,33673],{"class":73},[36,38717,38718,38720,38722],{"class":38,"line":802},[36,38719,35481],{"class":50},[36,38721,70],{"class":42},[36,38723,4576],{"class":73},[36,38725,38726],{"class":38,"line":807},[36,38727,58],{"emptyLinePlaceholder":57},[36,38729,38730],{"class":38,"line":818},[36,38731,35494],{"class":124},[36,38733,38734],{"class":38,"line":843},[36,38735,35499],{"class":124},[36,38737,38738],{"class":38,"line":848},[36,38739,35504],{"class":124},[36,38741,38742,38744],{"class":38,"line":859},[36,38743,35509],{"class":42},[36,38745,34215],{"class":50},[36,38747,38748],{"class":38,"line":864},[36,38749,35516],{"class":124},[36,38751,38752,38754,38756,38758],{"class":38,"line":873},[36,38753,4894],{"class":42},[36,38755,35523],{"class":50},[36,38757,27374],{"class":42},[36,38759,35528],{"class":50},[36,38761,38762,38764,38766],{"class":38,"line":9454},[36,38763,35533],{"class":50},[36,38765,70],{"class":42},[36,38767,35538],{"class":50},[36,38769,38770,38772,38774],{"class":38,"line":9481},[36,38771,35543],{"class":50},[36,38773,70],{"class":42},[36,38775,35548],{"class":50},[36,38777,38778],{"class":38,"line":9486},[36,38779,35553],{"class":124},[36,38781,38782],{"class":38,"line":9492},[36,38783,34206],{"class":50},[36,38785,38786],{"class":38,"line":9504},[36,38787,35562],{"class":124},[36,38789,38790,38792,38794],{"class":38,"line":9516},[36,38791,33991],{"class":50},[36,38793,70],{"class":42},[36,38795,35571],{"class":50},[36,38797,38798],{"class":38,"line":9528},[36,38799,35576],{"class":124},[36,38801,38802,38804,38806,38808,38810,38812,38814],{"class":38,"line":11184},[36,38803,34008],{"class":50},[36,38805,70],{"class":42},[36,38807,34013],{"class":50},[36,38809,34016],{"class":473},[36,38811,70],{"class":42},[36,38813,1885],{"class":73},[36,38815,1680],{"class":50},[36,38817,38818],{"class":38,"line":11209},[36,38819,35597],{"class":124},[36,38821,38822],{"class":38,"line":11232},[36,38823,35602],{"class":124},[36,38825,38826],{"class":38,"line":11256},[36,38827,35607],{"class":124},[36,38829,38830,38832,38834,38836,38838],{"class":38,"line":11261},[36,38831,35612],{"class":50},[36,38833,10945],{"class":42},[36,38835,34118],{"class":50},[36,38837,4441],{"class":42},[36,38839,35621],{"class":50},[36,38841,38842],{"class":38,"line":11266},[36,38843,35626],{"class":124},[36,38845,38846,38848,38850,38852,38854],{"class":38,"line":11271},[36,38847,35631],{"class":50},[36,38849,10945],{"class":42},[36,38851,35636],{"class":50},[36,38853,1859],{"class":73},[36,38855,1680],{"class":50},[36,38857,38858],{"class":38,"line":11280},[36,38859,58],{"emptyLinePlaceholder":57},[36,38861,38862],{"class":38,"line":11285},[36,38863,35649],{"class":124},[36,38865,38866,38868,38870,38872,38874],{"class":38,"line":11291},[36,38867,35654],{"class":50},[36,38869,70],{"class":42},[36,38871,35659],{"class":50},[36,38873,2251],{"class":42},[36,38875,35664],{"class":50},[36,38877,38878],{"class":38,"line":11312},[36,38879,35669],{"class":124},[36,38881,38882,38884,38886,38888],{"class":38,"line":11318},[36,38883,33782],{"class":73},[36,38885,222],{"class":50},[36,38887,35678],{"class":110},[36,38889,35681],{"class":50},[36,38891,38892],{"class":38,"line":11332},[36,38893,58],{"emptyLinePlaceholder":57},[36,38895,38896],{"class":38,"line":11338},[36,38897,35690],{"class":124},[36,38899,38900,38902,38904,38906,38908],{"class":38,"line":11365},[36,38901,3061],{"class":42},[36,38903,32551],{"class":73},[36,38905,4441],{"class":42},[36,38907,32556],{"class":110},[36,38909,5230],{"class":50},[36,38911,38912],{"class":38,"line":11374},[36,38913,35707],{"class":124},[36,38915,38916,38918,38920],{"class":38,"line":11380},[36,38917,32620],{"class":50},[36,38919,70],{"class":42},[36,38921,38420],{"class":50},[36,38923,38924],{"class":38,"line":11388},[36,38925,35720],{"class":124},[36,38927,38928],{"class":38,"line":11393},[36,38929,35725],{"class":124},[36,38931,38932,38934,38936],{"class":38,"line":17933},[36,38933,35730],{"class":50},[36,38935,35733],{"class":110},[36,38937,31828],{"class":50},[36,38939,38940],{"class":38,"line":17939},[36,38941,35740],{"class":124},[36,38943,38944,38946,38948],{"class":38,"line":17962},[36,38945,35353],{"class":50},[36,38947,70],{"class":42},[36,38949,35749],{"class":50},[36,38951,38952],{"class":38,"line":17968},[36,38953,35754],{"class":124},[36,38955,38956],{"class":38,"line":17991},[36,38957,35759],{"class":50},[36,38959,38960],{"class":38,"line":18005},[36,38961,58],{"emptyLinePlaceholder":57},[36,38963,38964],{"class":38,"line":18025},[36,38965,35768],{"class":124},[36,38967,38968],{"class":38,"line":18031},[36,38969,35773],{"class":124},[36,38971,38972,38974,38976,38978,38980,38982,38984],{"class":38,"line":18042},[36,38973,32568],{"class":50},[36,38975,70],{"class":42},[36,38977,32575],{"class":110},[36,38979,3222],{"class":42},[36,38981,32580],{"class":50},[36,38983,3219],{"class":42},[36,38985,35450],{"class":110},[36,38987,38988,38990,38992],{"class":38,"line":18065},[36,38989,32620],{"class":50},[36,38991,70],{"class":42},[36,38993,33620],{"class":50},[36,38995,38996],{"class":38,"line":18087},[36,38997,35802],{"class":124},[36,38999,39000],{"class":38,"line":18092},[36,39001,35807],{"class":124},[36,39003,39004,39006,39008,39010,39012,39014,39016,39018,39020,39022,39024,39026,39028,39030,39032,39034,39036,39038,39040,39042,39044,39046,39048],{"class":38,"line":18098},[36,39005,35812],{"class":50},[36,39007,70],{"class":42},[36,39009,2557],{"class":50},[36,39011,35819],{"class":110},[36,39013,2045],{"class":50},[36,39015,35824],{"class":110},[36,39017,2045],{"class":50},[36,39019,35829],{"class":110},[36,39021,2045],{"class":50},[36,39023,35834],{"class":110},[36,39025,2045],{"class":50},[36,39027,35839],{"class":110},[36,39029,2045],{"class":50},[36,39031,35844],{"class":110},[36,39033,2045],{"class":50},[36,39035,35849],{"class":110},[36,39037,2045],{"class":50},[36,39039,35854],{"class":110},[36,39041,2045],{"class":50},[36,39043,35859],{"class":110},[36,39045,2045],{"class":50},[36,39047,35864],{"class":110},[36,39049,34577],{"class":50},[36,39051,39052,39054],{"class":38,"line":18112},[36,39053,35509],{"class":42},[36,39055,34215],{"class":50},[36,39057,39058],{"class":38,"line":18125},[36,39059,35877],{"class":124},[36,39061,39062,39064,39066,39068],{"class":38,"line":18130},[36,39063,4894],{"class":42},[36,39065,35884],{"class":50},[36,39067,27374],{"class":42},[36,39069,35528],{"class":50},[36,39071,39072,39074,39076],{"class":38,"line":18144},[36,39073,33941],{"class":50},[36,39075,70],{"class":42},[36,39077,33946],{"class":50},[36,39079,39080,39082,39084],{"class":38,"line":18149},[36,39081,33956],{"class":50},[36,39083,70],{"class":42},[36,39085,33961],{"class":50},[36,39087,39088],{"class":38,"line":18155},[36,39089,58],{"emptyLinePlaceholder":57},[36,39091,39092],{"class":38,"line":18160},[36,39093,35913],{"class":124},[36,39095,39096],{"class":38,"line":18174},[36,39097,34206],{"class":50},[36,39099,39100],{"class":38,"line":18179},[36,39101,35922],{"class":124},[36,39103,39104,39106,39108],{"class":38,"line":18184},[36,39105,33991],{"class":50},[36,39107,70],{"class":42},[36,39109,33996],{"class":50},[36,39111,39112],{"class":38,"line":18198},[36,39113,35935],{"class":124},[36,39115,39116,39118,39120,39122,39124,39126,39128],{"class":38,"line":18210},[36,39117,34008],{"class":50},[36,39119,70],{"class":42},[36,39121,34013],{"class":50},[36,39123,34016],{"class":473},[36,39125,70],{"class":42},[36,39127,1885],{"class":73},[36,39129,1680],{"class":50},[36,39131,39132],{"class":38,"line":18215},[36,39133,35956],{"class":124},[36,39135,39136,39138,39140],{"class":38,"line":18228},[36,39137,35961],{"class":50},[36,39139,70],{"class":42},[36,39141,35966],{"class":50},[36,39143,39144,39146,39148],{"class":38,"line":18233},[36,39145,35971],{"class":50},[36,39147,70],{"class":42},[36,39149,35976],{"class":50},[36,39151,39152,39154,39156,39158,39160,39162,39164,39166],{"class":38,"line":18238},[36,39153,35981],{"class":73},[36,39155,222],{"class":50},[36,39157,35986],{"class":110},[36,39159,35989],{"class":50},[36,39161,35992],{"class":110},[36,39163,2045],{"class":50},[36,39165,35997],{"class":110},[36,39167,36000],{"class":50},[1645,39169,39171],{"id":39170},"_22vgg","2.2.VGG",[23327,39173,39175],{"id":39174},"_221原理","2.2.1.原理",[19,39177,39178],{},[2992,39179],{"alt":31,"src":39180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,39182,39183],{},[2992,39184],{"alt":31,"src":39185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,39187,39188],{},[2992,39189],{"alt":31,"src":39190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,39192,39193],{},"参数详细描述：",[19,39195,39196],{},[2992,39197],{"alt":31,"src":39198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,39200,39201],{},[2992,39202],{"alt":31,"src":39203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,39205,39206],{},[2992,39207],{"alt":31,"src":39208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,39210,39211],{},[2992,39212],{"alt":31,"src":39213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,39215,39216],{},[2992,39217],{"alt":31,"src":39218},"\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",[23327,39220,39222],{"id":39221},"_222代码实现","2.2.2.代码实现",[256,39224,39225],{},[259,39226,39227],{},"网络搭建",[26,39229,39231],{"className":31709,"code":39230,"language":31711,"meta":31,"style":31},"import torch\nfrom sympy.core.sympify import kernS\nfrom torch import nn\nfrom torchsummary import summary\n\nclass VGG16(nn.Module):\n    def __init__(self):\n        super(VGG16, self).__init__()\n        # 按照块来进行搭建神经网络层,按照序列来写\n        # 这里用的是灰度图\n        self.block1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第二层\n        self.block2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=128,out_channels=128,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第三层\n        self.block3=nn.Sequential(\n            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第四层\n        self.block4=nn.Sequential(\n            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 第五层\n        self.block5=nn.Sequential(\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=2,stride=2,padding=0)\n        )\n        # 全连接层\n        self.block6=nn.Sequential(\n            # 平展操作\n            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n            nn.Flatten(),\n            nn.Linear(7*7*512,256),\n            nn.ReLU(),\n            nn.Linear(256,128),\n            nn.ReLU(),\n            nn.Linear(128,10)\n        )\n\n        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n        # 循环遍历模型\n        for m in self.modules():\n            # print(m)\n            if isinstance(m,nn.Conv2d):\n                # 凯明初始化,初始化w,对应的激活函数是relu\n                nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n                # 判断b参数是否存在\n                if m.bias is not None:\n                    # 如果参数不存在的化初始化b=0\n                    nn.init.constant_(m.bias,0)\n            # 全连接层初始化\n            elif isinstance(m,nn.Linear):\n                # 这个初始化方法是利用的是正太分布的方式\n                # 均值为0，方差为0.01\n                nn.init.normal_(m.weight,0,0.01)\n                # 初始化b参数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n\n    # 定义前向传播\n    def forward(self,x):\n        x=self.block1(x)\n        x=self.block2(x)\n        x=self.block3(x)\n        x=self.block4(x)\n        x=self.block5(x)\n        x=self.block6(x)\n        return x\n\n# 验证模型\nif __name__=='__main__':\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    print(device)\n    model=VGG16().to(device)\n    print(summary(model,(1,224,224)))\n",[33,39232,39233,39239,39251,39261,39271,39275,39292,39300,39319,39324,39329,39341,39379,39384,39420,39424,39453,39458,39463,39474,39510,39514,39550,39554,39582,39586,39591,39602,39638,39642,39678,39682,39718,39722,39750,39754,39759,39770,39807,39811,39847,39851,39887,39891,39919,39923,39928,39939,39975,39979,40015,40019,40055,40059,40087,40091,40096,40107,40112,40117,40122,40143,40147,40159,40163,40175,40179,40183,40188,40193,40208,40213,40223,40228,40243,40248,40267,40272,40281,40286,40296,40301,40306,40320,40325,40339,40347,40351,40355,40363,40374,40385,40396,40407,40418,40429,40435,40439,40444,40457,40477,40483,40492],{"__ignoreMap":31},[36,39234,39235,39237],{"class":38,"line":39},[36,39236,31723],{"class":42},[36,39238,31726],{"class":50},[36,39240,39241,39243,39246,39248],{"class":38,"line":54},[36,39242,32068],{"class":42},[36,39244,39245],{"class":50}," sympy.core.sympify ",[36,39247,31723],{"class":42},[36,39249,39250],{"class":50}," kernS\n",[36,39252,39253,39255,39257,39259],{"class":38,"line":61},[36,39254,32068],{"class":42},[36,39256,32071],{"class":50},[36,39258,31723],{"class":42},[36,39260,32076],{"class":50},[36,39262,39263,39265,39267,39269],{"class":38,"line":80},[36,39264,32068],{"class":42},[36,39266,32088],{"class":50},[36,39268,31723],{"class":42},[36,39270,32093],{"class":50},[36,39272,39273],{"class":38,"line":96},[36,39274,58],{"emptyLinePlaceholder":57},[36,39276,39277,39279,39282,39284,39286,39288,39290],{"class":38,"line":101},[36,39278,16023],{"class":42},[36,39280,39281],{"class":46}," VGG16",[36,39283,222],{"class":50},[36,39285,32109],{"class":46},[36,39287,2225],{"class":50},[36,39289,32114],{"class":46},[36,39291,32117],{"class":50},[36,39293,39294,39296,39298],{"class":38,"line":128},[36,39295,32132],{"class":42},[36,39297,32135],{"class":73},[36,39299,32138],{"class":50},[36,39301,39302,39304,39306,39309,39311,39313,39315,39317],{"class":38,"line":149},[36,39303,32148],{"class":73},[36,39305,222],{"class":50},[36,39307,39308],{"class":73},"VGG16",[36,39310,477],{"class":50},[36,39312,32154],{"class":73},[36,39314,32157],{"class":50},[36,39316,32160],{"class":73},[36,39318,3484],{"class":50},[36,39320,39321],{"class":38,"line":154},[36,39322,39323],{"class":124},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[36,39325,39326],{"class":38,"line":167},[36,39327,39328],{"class":124},"        # 这里用的是灰度图\n",[36,39330,39331,39333,39336,39338],{"class":38,"line":172},[36,39332,32176],{"class":73},[36,39334,39335],{"class":50},".block1",[36,39337,70],{"class":42},[36,39339,39340],{"class":50},"nn.Sequential(\n",[36,39342,39343,39346,39348,39350,39352,39354,39356,39358,39360,39362,39364,39366,39368,39370,39372,39374,39376],{"class":38,"line":192},[36,39344,39345],{"class":50},"            nn.Conv2d(",[36,39347,32187],{"class":473},[36,39349,70],{"class":42},[36,39351,1885],{"class":73},[36,39353,2045],{"class":50},[36,39355,32196],{"class":473},[36,39357,70],{"class":42},[36,39359,1871],{"class":73},[36,39361,2045],{"class":50},[36,39363,32205],{"class":473},[36,39365,70],{"class":42},[36,39367,1741],{"class":73},[36,39369,2045],{"class":50},[36,39371,32214],{"class":473},[36,39373,70],{"class":42},[36,39375,1885],{"class":73},[36,39377,39378],{"class":50},"),\n",[36,39380,39381],{"class":38,"line":211},[36,39382,39383],{"class":50},"            nn.ReLU(),\n",[36,39385,39386,39388,39390,39392,39394,39396,39398,39400,39402,39404,39406,39408,39410,39412,39414,39416,39418],{"class":38,"line":216},[36,39387,39345],{"class":50},[36,39389,32187],{"class":473},[36,39391,70],{"class":42},[36,39393,1871],{"class":73},[36,39395,2045],{"class":50},[36,39397,32196],{"class":473},[36,39399,70],{"class":42},[36,39401,1871],{"class":73},[36,39403,2045],{"class":50},[36,39405,32205],{"class":473},[36,39407,70],{"class":42},[36,39409,1741],{"class":73},[36,39411,2045],{"class":50},[36,39413,32214],{"class":473},[36,39415,70],{"class":42},[36,39417,1885],{"class":73},[36,39419,39378],{"class":50},[36,39421,39422],{"class":38,"line":231},[36,39423,39383],{"class":50},[36,39425,39426,39429,39431,39433,39435,39437,39439,39441,39443,39445,39447,39449,39451],{"class":38,"line":236},[36,39427,39428],{"class":50},"            nn.MaxPool2d(",[36,39430,32205],{"class":473},[36,39432,70],{"class":42},[36,39434,1747],{"class":73},[36,39436,2045],{"class":50},[36,39438,32260],{"class":473},[36,39440,70],{"class":42},[36,39442,1747],{"class":73},[36,39444,2045],{"class":50},[36,39446,32214],{"class":473},[36,39448,70],{"class":42},[36,39450,1859],{"class":73},[36,39452,1680],{"class":50},[36,39454,39455],{"class":38,"line":247},[36,39456,39457],{"class":50},"        )\n",[36,39459,39460],{"class":38,"line":637},[36,39461,39462],{"class":124},"        # 第二层\n",[36,39464,39465,39467,39470,39472],{"class":38,"line":646},[36,39466,32176],{"class":73},[36,39468,39469],{"class":50},".block2",[36,39471,70],{"class":42},[36,39473,39340],{"class":50},[36,39475,39476,39478,39480,39482,39484,39486,39488,39490,39492,39494,39496,39498,39500,39502,39504,39506,39508],{"class":38,"line":655},[36,39477,39345],{"class":50},[36,39479,32187],{"class":473},[36,39481,70],{"class":42},[36,39483,1871],{"class":73},[36,39485,2045],{"class":50},[36,39487,32196],{"class":473},[36,39489,70],{"class":42},[36,39491,33401],{"class":73},[36,39493,2045],{"class":50},[36,39495,32205],{"class":473},[36,39497,70],{"class":42},[36,39499,1741],{"class":73},[36,39501,2045],{"class":50},[36,39503,32214],{"class":473},[36,39505,70],{"class":42},[36,39507,1885],{"class":73},[36,39509,39378],{"class":50},[36,39511,39512],{"class":38,"line":660},[36,39513,39383],{"class":50},[36,39515,39516,39518,39520,39522,39524,39526,39528,39530,39532,39534,39536,39538,39540,39542,39544,39546,39548],{"class":38,"line":665},[36,39517,39345],{"class":50},[36,39519,32187],{"class":473},[36,39521,70],{"class":42},[36,39523,33401],{"class":73},[36,39525,2045],{"class":50},[36,39527,32196],{"class":473},[36,39529,70],{"class":42},[36,39531,33401],{"class":73},[36,39533,2045],{"class":50},[36,39535,32205],{"class":473},[36,39537,70],{"class":42},[36,39539,1741],{"class":73},[36,39541,2045],{"class":50},[36,39543,32214],{"class":473},[36,39545,70],{"class":42},[36,39547,1885],{"class":73},[36,39549,39378],{"class":50},[36,39551,39552],{"class":38,"line":674},[36,39553,39383],{"class":50},[36,39555,39556,39558,39560,39562,39564,39566,39568,39570,39572,39574,39576,39578,39580],{"class":38,"line":679},[36,39557,39428],{"class":50},[36,39559,32205],{"class":473},[36,39561,70],{"class":42},[36,39563,1747],{"class":73},[36,39565,2045],{"class":50},[36,39567,32260],{"class":473},[36,39569,70],{"class":42},[36,39571,1747],{"class":73},[36,39573,2045],{"class":50},[36,39575,32214],{"class":473},[36,39577,70],{"class":42},[36,39579,1859],{"class":73},[36,39581,1680],{"class":50},[36,39583,39584],{"class":38,"line":692},[36,39585,39457],{"class":50},[36,39587,39588],{"class":38,"line":705},[36,39589,39590],{"class":124},"        # 第三层\n",[36,39592,39593,39595,39598,39600],{"class":38,"line":710},[36,39594,32176],{"class":73},[36,39596,39597],{"class":50},".block3",[36,39599,70],{"class":42},[36,39601,39340],{"class":50},[36,39603,39604,39606,39608,39610,39612,39614,39616,39618,39620,39622,39624,39626,39628,39630,39632,39634,39636],{"class":38,"line":722},[36,39605,39345],{"class":50},[36,39607,32187],{"class":473},[36,39609,70],{"class":42},[36,39611,33401],{"class":73},[36,39613,2045],{"class":50},[36,39615,32196],{"class":473},[36,39617,70],{"class":42},[36,39619,36201],{"class":73},[36,39621,2045],{"class":50},[36,39623,32205],{"class":473},[36,39625,70],{"class":42},[36,39627,1741],{"class":73},[36,39629,2045],{"class":50},[36,39631,32214],{"class":473},[36,39633,70],{"class":42},[36,39635,1885],{"class":73},[36,39637,39378],{"class":50},[36,39639,39640],{"class":38,"line":750},[36,39641,39383],{"class":50},[36,39643,39644,39646,39648,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676],{"class":38,"line":755},[36,39645,39345],{"class":50},[36,39647,32187],{"class":473},[36,39649,70],{"class":42},[36,39651,36201],{"class":73},[36,39653,2045],{"class":50},[36,39655,32196],{"class":473},[36,39657,70],{"class":42},[36,39659,36201],{"class":73},[36,39661,2045],{"class":50},[36,39663,32205],{"class":473},[36,39665,70],{"class":42},[36,39667,1741],{"class":73},[36,39669,2045],{"class":50},[36,39671,32214],{"class":473},[36,39673,70],{"class":42},[36,39675,1885],{"class":73},[36,39677,39378],{"class":50},[36,39679,39680],{"class":38,"line":777},[36,39681,39383],{"class":50},[36,39683,39684,39686,39688,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716],{"class":38,"line":802},[36,39685,39345],{"class":50},[36,39687,32187],{"class":473},[36,39689,70],{"class":42},[36,39691,36201],{"class":73},[36,39693,2045],{"class":50},[36,39695,32196],{"class":473},[36,39697,70],{"class":42},[36,39699,36201],{"class":73},[36,39701,2045],{"class":50},[36,39703,32205],{"class":473},[36,39705,70],{"class":42},[36,39707,1741],{"class":73},[36,39709,2045],{"class":50},[36,39711,32214],{"class":473},[36,39713,70],{"class":42},[36,39715,1885],{"class":73},[36,39717,39378],{"class":50},[36,39719,39720],{"class":38,"line":807},[36,39721,39383],{"class":50},[36,39723,39724,39726,39728,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748],{"class":38,"line":818},[36,39725,39428],{"class":50},[36,39727,32205],{"class":473},[36,39729,70],{"class":42},[36,39731,1747],{"class":73},[36,39733,2045],{"class":50},[36,39735,32260],{"class":473},[36,39737,70],{"class":42},[36,39739,1747],{"class":73},[36,39741,2045],{"class":50},[36,39743,32214],{"class":473},[36,39745,70],{"class":42},[36,39747,1859],{"class":73},[36,39749,1680],{"class":50},[36,39751,39752],{"class":38,"line":843},[36,39753,39457],{"class":50},[36,39755,39756],{"class":38,"line":848},[36,39757,39758],{"class":124},"        # 第四层\n",[36,39760,39761,39763,39766,39768],{"class":38,"line":859},[36,39762,32176],{"class":73},[36,39764,39765],{"class":50},".block4",[36,39767,70],{"class":42},[36,39769,39340],{"class":50},[36,39771,39772,39774,39776,39778,39780,39782,39784,39786,39789,39791,39793,39795,39797,39799,39801,39803,39805],{"class":38,"line":864},[36,39773,39345],{"class":50},[36,39775,32187],{"class":473},[36,39777,70],{"class":42},[36,39779,36201],{"class":73},[36,39781,2045],{"class":50},[36,39783,32196],{"class":473},[36,39785,70],{"class":42},[36,39787,39788],{"class":73},"512",[36,39790,2045],{"class":50},[36,39792,32205],{"class":473},[36,39794,70],{"class":42},[36,39796,1741],{"class":73},[36,39798,2045],{"class":50},[36,39800,32214],{"class":473},[36,39802,70],{"class":42},[36,39804,1885],{"class":73},[36,39806,39378],{"class":50},[36,39808,39809],{"class":38,"line":873},[36,39810,39383],{"class":50},[36,39812,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845],{"class":38,"line":9454},[36,39814,39345],{"class":50},[36,39816,32187],{"class":473},[36,39818,70],{"class":42},[36,39820,39788],{"class":73},[36,39822,2045],{"class":50},[36,39824,32196],{"class":473},[36,39826,70],{"class":42},[36,39828,39788],{"class":73},[36,39830,2045],{"class":50},[36,39832,32205],{"class":473},[36,39834,70],{"class":42},[36,39836,1741],{"class":73},[36,39838,2045],{"class":50},[36,39840,32214],{"class":473},[36,39842,70],{"class":42},[36,39844,1885],{"class":73},[36,39846,39378],{"class":50},[36,39848,39849],{"class":38,"line":9481},[36,39850,39383],{"class":50},[36,39852,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885],{"class":38,"line":9486},[36,39854,39345],{"class":50},[36,39856,32187],{"class":473},[36,39858,70],{"class":42},[36,39860,39788],{"class":73},[36,39862,2045],{"class":50},[36,39864,32196],{"class":473},[36,39866,70],{"class":42},[36,39868,39788],{"class":73},[36,39870,2045],{"class":50},[36,39872,32205],{"class":473},[36,39874,70],{"class":42},[36,39876,1741],{"class":73},[36,39878,2045],{"class":50},[36,39880,32214],{"class":473},[36,39882,70],{"class":42},[36,39884,1885],{"class":73},[36,39886,39378],{"class":50},[36,39888,39889],{"class":38,"line":9492},[36,39890,39383],{"class":50},[36,39892,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917],{"class":38,"line":9504},[36,39894,39428],{"class":50},[36,39896,32205],{"class":473},[36,39898,70],{"class":42},[36,39900,1747],{"class":73},[36,39902,2045],{"class":50},[36,39904,32260],{"class":473},[36,39906,70],{"class":42},[36,39908,1747],{"class":73},[36,39910,2045],{"class":50},[36,39912,32214],{"class":473},[36,39914,70],{"class":42},[36,39916,1859],{"class":73},[36,39918,1680],{"class":50},[36,39920,39921],{"class":38,"line":9516},[36,39922,39457],{"class":50},[36,39924,39925],{"class":38,"line":9528},[36,39926,39927],{"class":124},"        # 第五层\n",[36,39929,39930,39932,39935,39937],{"class":38,"line":11184},[36,39931,32176],{"class":73},[36,39933,39934],{"class":50},".block5",[36,39936,70],{"class":42},[36,39938,39340],{"class":50},[36,39940,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973],{"class":38,"line":11209},[36,39942,39345],{"class":50},[36,39944,32187],{"class":473},[36,39946,70],{"class":42},[36,39948,39788],{"class":73},[36,39950,2045],{"class":50},[36,39952,32196],{"class":473},[36,39954,70],{"class":42},[36,39956,39788],{"class":73},[36,39958,2045],{"class":50},[36,39960,32205],{"class":473},[36,39962,70],{"class":42},[36,39964,1741],{"class":73},[36,39966,2045],{"class":50},[36,39968,32214],{"class":473},[36,39970,70],{"class":42},[36,39972,1885],{"class":73},[36,39974,39378],{"class":50},[36,39976,39977],{"class":38,"line":11232},[36,39978,39383],{"class":50},[36,39980,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013],{"class":38,"line":11256},[36,39982,39345],{"class":50},[36,39984,32187],{"class":473},[36,39986,70],{"class":42},[36,39988,39788],{"class":73},[36,39990,2045],{"class":50},[36,39992,32196],{"class":473},[36,39994,70],{"class":42},[36,39996,39788],{"class":73},[36,39998,2045],{"class":50},[36,40000,32205],{"class":473},[36,40002,70],{"class":42},[36,40004,1741],{"class":73},[36,40006,2045],{"class":50},[36,40008,32214],{"class":473},[36,40010,70],{"class":42},[36,40012,1885],{"class":73},[36,40014,39378],{"class":50},[36,40016,40017],{"class":38,"line":11261},[36,40018,39383],{"class":50},[36,40020,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053],{"class":38,"line":11266},[36,40022,39345],{"class":50},[36,40024,32187],{"class":473},[36,40026,70],{"class":42},[36,40028,39788],{"class":73},[36,40030,2045],{"class":50},[36,40032,32196],{"class":473},[36,40034,70],{"class":42},[36,40036,39788],{"class":73},[36,40038,2045],{"class":50},[36,40040,32205],{"class":473},[36,40042,70],{"class":42},[36,40044,1741],{"class":73},[36,40046,2045],{"class":50},[36,40048,32214],{"class":473},[36,40050,70],{"class":42},[36,40052,1885],{"class":73},[36,40054,39378],{"class":50},[36,40056,40057],{"class":38,"line":11271},[36,40058,39383],{"class":50},[36,40060,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085],{"class":38,"line":11280},[36,40062,39428],{"class":50},[36,40064,32205],{"class":473},[36,40066,70],{"class":42},[36,40068,1747],{"class":73},[36,40070,2045],{"class":50},[36,40072,32260],{"class":473},[36,40074,70],{"class":42},[36,40076,1747],{"class":73},[36,40078,2045],{"class":50},[36,40080,32214],{"class":473},[36,40082,70],{"class":42},[36,40084,1859],{"class":73},[36,40086,1680],{"class":50},[36,40088,40089],{"class":38,"line":11285},[36,40090,39457],{"class":50},[36,40092,40093],{"class":38,"line":11291},[36,40094,40095],{"class":124},"        # 全连接层\n",[36,40097,40098,40100,40103,40105],{"class":38,"line":11312},[36,40099,32176],{"class":73},[36,40101,40102],{"class":50},".block6",[36,40104,70],{"class":42},[36,40106,39340],{"class":50},[36,40108,40109],{"class":38,"line":11318},[36,40110,40111],{"class":124},"            # 平展操作\n",[36,40113,40114],{"class":38,"line":11332},[36,40115,40116],{"class":124},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[36,40118,40119],{"class":38,"line":11338},[36,40120,40121],{"class":50},"            nn.Flatten(),\n",[36,40123,40124,40127,40129,40131,40133,40135,40137,40139,40141],{"class":38,"line":11365},[36,40125,40126],{"class":50},"            nn.Linear(",[36,40128,2036],{"class":73},[36,40130,2122],{"class":42},[36,40132,2036],{"class":73},[36,40134,2122],{"class":42},[36,40136,39788],{"class":73},[36,40138,2045],{"class":50},[36,40140,36201],{"class":73},[36,40142,39378],{"class":50},[36,40144,40145],{"class":38,"line":11374},[36,40146,39383],{"class":50},[36,40148,40149,40151,40153,40155,40157],{"class":38,"line":11380},[36,40150,40126],{"class":50},[36,40152,36201],{"class":73},[36,40154,2045],{"class":50},[36,40156,33401],{"class":73},[36,40158,39378],{"class":50},[36,40160,40161],{"class":38,"line":11388},[36,40162,39383],{"class":50},[36,40164,40165,40167,40169,40171,40173],{"class":38,"line":11393},[36,40166,40126],{"class":50},[36,40168,33401],{"class":73},[36,40170,2045],{"class":50},[36,40172,2113],{"class":73},[36,40174,1680],{"class":50},[36,40176,40177],{"class":38,"line":17933},[36,40178,39457],{"class":50},[36,40180,40181],{"class":38,"line":17939},[36,40182,58],{"emptyLinePlaceholder":57},[36,40184,40185],{"class":38,"line":17962},[36,40186,40187],{"class":124},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,40189,40190],{"class":38,"line":17968},[36,40191,40192],{"class":124},"        # 循环遍历模型\n",[36,40194,40195,40197,40200,40202,40205],{"class":38,"line":17991},[36,40196,4894],{"class":42},[36,40198,40199],{"class":50}," m ",[36,40201,27374],{"class":42},[36,40203,40204],{"class":73}," self",[36,40206,40207],{"class":50},".modules():\n",[36,40209,40210],{"class":38,"line":18005},[36,40211,40212],{"class":124},"            # print(m)\n",[36,40214,40215,40217,40220],{"class":38,"line":18025},[36,40216,6131],{"class":42},[36,40218,40219],{"class":73}," isinstance",[36,40221,40222],{"class":50},"(m,nn.Conv2d):\n",[36,40224,40225],{"class":38,"line":18031},[36,40226,40227],{"class":124},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,40229,40230,40233,40236,40238,40241],{"class":38,"line":18042},[36,40231,40232],{"class":50},"                nn.init.kaiming_normal_(m.weight,",[36,40234,40235],{"class":473},"nonlinearity",[36,40237,70],{"class":42},[36,40239,40240],{"class":110},"'relu'",[36,40242,1680],{"class":50},[36,40244,40245],{"class":38,"line":18065},[36,40246,40247],{"class":124},"                # 判断b参数是否存在\n",[36,40249,40250,40253,40256,40259,40262,40265],{"class":38,"line":18087},[36,40251,40252],{"class":42},"                if",[36,40254,40255],{"class":50}," m.bias ",[36,40257,40258],{"class":42},"is",[36,40260,40261],{"class":42}," not",[36,40263,40264],{"class":73}," None",[36,40266,5230],{"class":50},[36,40268,40269],{"class":38,"line":18092},[36,40270,40271],{"class":124},"                    # 如果参数不存在的化初始化b=0\n",[36,40273,40274,40277,40279],{"class":38,"line":18098},[36,40275,40276],{"class":50},"                    nn.init.constant_(m.bias,",[36,40278,1859],{"class":73},[36,40280,1680],{"class":50},[36,40282,40283],{"class":38,"line":18112},[36,40284,40285],{"class":124},"            # 全连接层初始化\n",[36,40287,40288,40291,40293],{"class":38,"line":18125},[36,40289,40290],{"class":42},"            elif",[36,40292,40219],{"class":73},[36,40294,40295],{"class":50},"(m,nn.Linear):\n",[36,40297,40298],{"class":38,"line":18130},[36,40299,40300],{"class":124},"                # 这个初始化方法是利用的是正太分布的方式\n",[36,40302,40303],{"class":38,"line":18144},[36,40304,40305],{"class":124},"                # 均值为0，方差为0.01\n",[36,40307,40308,40311,40313,40315,40318],{"class":38,"line":18149},[36,40309,40310],{"class":50},"                nn.init.normal_(m.weight,",[36,40312,1859],{"class":73},[36,40314,2045],{"class":50},[36,40316,40317],{"class":73},"0.01",[36,40319,1680],{"class":50},[36,40321,40322],{"class":38,"line":18155},[36,40323,40324],{"class":124},"                # 初始化b参数\n",[36,40326,40327,40329,40331,40333,40335,40337],{"class":38,"line":18160},[36,40328,40252],{"class":42},[36,40330,40255],{"class":50},[36,40332,40258],{"class":42},[36,40334,40261],{"class":42},[36,40336,40264],{"class":73},[36,40338,5230],{"class":50},[36,40340,40341,40343,40345],{"class":38,"line":18174},[36,40342,40276],{"class":50},[36,40344,1859],{"class":73},[36,40346,1680],{"class":50},[36,40348,40349],{"class":38,"line":18179},[36,40350,58],{"emptyLinePlaceholder":57},[36,40352,40353],{"class":38,"line":18184},[36,40354,36496],{"class":124},[36,40356,40357,40359,40361],{"class":38,"line":18198},[36,40358,32132],{"class":42},[36,40360,32424],{"class":46},[36,40362,32427],{"class":50},[36,40364,40365,40367,40369,40371],{"class":38,"line":18210},[36,40366,32432],{"class":50},[36,40368,70],{"class":42},[36,40370,32154],{"class":73},[36,40372,40373],{"class":50},".block1(x)\n",[36,40375,40376,40378,40380,40382],{"class":38,"line":18215},[36,40377,32432],{"class":50},[36,40379,70],{"class":42},[36,40381,32154],{"class":73},[36,40383,40384],{"class":50},".block2(x)\n",[36,40386,40387,40389,40391,40393],{"class":38,"line":18228},[36,40388,32432],{"class":50},[36,40390,70],{"class":42},[36,40392,32154],{"class":73},[36,40394,40395],{"class":50},".block3(x)\n",[36,40397,40398,40400,40402,40404],{"class":38,"line":18233},[36,40399,32432],{"class":50},[36,40401,70],{"class":42},[36,40403,32154],{"class":73},[36,40405,40406],{"class":50},".block4(x)\n",[36,40408,40409,40411,40413,40415],{"class":38,"line":18238},[36,40410,32432],{"class":50},[36,40412,70],{"class":42},[36,40414,32154],{"class":73},[36,40416,40417],{"class":50},".block5(x)\n",[36,40419,40420,40422,40424,40426],{"class":38,"line":18243},[36,40421,32432],{"class":50},[36,40423,70],{"class":42},[36,40425,32154],{"class":73},[36,40427,40428],{"class":50},".block6(x)\n",[36,40430,40431,40433],{"class":38,"line":18256},[36,40432,16081],{"class":42},[36,40434,32540],{"class":50},[36,40436,40437],{"class":38,"line":18261},[36,40438,58],{"emptyLinePlaceholder":57},[36,40440,40441],{"class":38,"line":33964},[36,40442,40443],{"class":124},"# 验证模型\n",[36,40445,40446,40448,40450,40452,40455],{"class":38,"line":33970},[36,40447,3061],{"class":42},[36,40449,32551],{"class":73},[36,40451,4441],{"class":42},[36,40453,40454],{"class":110},"'__main__'",[36,40456,5230],{"class":50},[36,40458,40459,40461,40463,40465,40467,40469,40471,40473,40475],{"class":38,"line":33976},[36,40460,32568],{"class":50},[36,40462,70],{"class":42},[36,40464,31782],{"class":50},[36,40466,32575],{"class":110},[36,40468,3222],{"class":42},[36,40470,32580],{"class":50},[36,40472,3219],{"class":42},[36,40474,31807],{"class":110},[36,40476,1680],{"class":50},[36,40478,40479,40481],{"class":38,"line":33982},[36,40480,32630],{"class":73},[36,40482,31816],{"class":50},[36,40484,40485,40487,40489],{"class":38,"line":33988},[36,40486,32620],{"class":50},[36,40488,70],{"class":42},[36,40490,40491],{"class":50},"VGG16().to(device)\n",[36,40493,40494,40496,40498,40500,40502,40504,40506,40508],{"class":38,"line":33999},[36,40495,32630],{"class":73},[36,40497,32633],{"class":50},[36,40499,1885],{"class":73},[36,40501,2045],{"class":50},[36,40503,32832],{"class":73},[36,40505,2045],{"class":50},[36,40507,32832],{"class":73},[36,40509,32646],{"class":50},[256,40511,40512],{"start":54},[259,40513,40514],{},"训练代码",[19,40516,40517],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40519,40520],{},"解决方式:",[19,40522,40523],{},"①权重初始化",[26,40525,40527],{"className":31709,"code":40526,"language":31711,"meta":31,"style":31},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n# 循环遍历模型\nfor m in self.modules():\n    # print(m)\n    if isinstance(m,nn.Conv2d):\n        # 凯明初始化,初始化w,对应的激活函数是relu\n        nn.init.kaiming_normal_(m.weight,nonlinearity='relu')\n        # 判断b参数是否存在\n        if m.bias is not None:\n            # 如果参数不存在的化初始化b=0\n            nn.init.constant_(m.bias,0)\n    # 全连接层初始化\n    elif isinstance(m,nn.Linear):\n        # 这个初始化方法是利用的是正太分布的方式\n        # 均值为0，方差为0.01\n        nn.init.normal_(m.weight,0,0.01)\n        # 初始化b参数\n        if m.bias is not None:\n            nn.init.constant_(m.bias,0)\n",[33,40528,40529,40534,40539,40551,40556,40564,40569,40582,40587,40601,40606,40615,40620,40629,40634,40639,40652,40657,40671],{"__ignoreMap":31},[36,40530,40531],{"class":38,"line":39},[36,40532,40533],{"class":124},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,40535,40536],{"class":38,"line":54},[36,40537,40538],{"class":124},"# 循环遍历模型\n",[36,40540,40541,40543,40545,40547,40549],{"class":38,"line":61},[36,40542,4516],{"class":42},[36,40544,40199],{"class":50},[36,40546,27374],{"class":42},[36,40548,40204],{"class":73},[36,40550,40207],{"class":50},[36,40552,40553],{"class":38,"line":80},[36,40554,40555],{"class":124},"    # print(m)\n",[36,40557,40558,40560,40562],{"class":38,"line":96},[36,40559,4592],{"class":42},[36,40561,40219],{"class":73},[36,40563,40222],{"class":50},[36,40565,40566],{"class":38,"line":101},[36,40567,40568],{"class":124},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,40570,40571,40574,40576,40578,40580],{"class":38,"line":128},[36,40572,40573],{"class":50},"        nn.init.kaiming_normal_(m.weight,",[36,40575,40235],{"class":473},[36,40577,70],{"class":42},[36,40579,40240],{"class":110},[36,40581,1680],{"class":50},[36,40583,40584],{"class":38,"line":149},[36,40585,40586],{"class":124},"        # 判断b参数是否存在\n",[36,40588,40589,40591,40593,40595,40597,40599],{"class":38,"line":154},[36,40590,3999],{"class":42},[36,40592,40255],{"class":50},[36,40594,40258],{"class":42},[36,40596,40261],{"class":42},[36,40598,40264],{"class":73},[36,40600,5230],{"class":50},[36,40602,40603],{"class":38,"line":167},[36,40604,40605],{"class":124},"            # 如果参数不存在的化初始化b=0\n",[36,40607,40608,40611,40613],{"class":38,"line":172},[36,40609,40610],{"class":50},"            nn.init.constant_(m.bias,",[36,40612,1859],{"class":73},[36,40614,1680],{"class":50},[36,40616,40617],{"class":38,"line":192},[36,40618,40619],{"class":124},"    # 全连接层初始化\n",[36,40621,40622,40625,40627],{"class":38,"line":211},[36,40623,40624],{"class":42},"    elif",[36,40626,40219],{"class":73},[36,40628,40295],{"class":50},[36,40630,40631],{"class":38,"line":216},[36,40632,40633],{"class":124},"        # 这个初始化方法是利用的是正太分布的方式\n",[36,40635,40636],{"class":38,"line":231},[36,40637,40638],{"class":124},"        # 均值为0，方差为0.01\n",[36,40640,40641,40644,40646,40648,40650],{"class":38,"line":236},[36,40642,40643],{"class":50},"        nn.init.normal_(m.weight,",[36,40645,1859],{"class":73},[36,40647,2045],{"class":50},[36,40649,40317],{"class":73},[36,40651,1680],{"class":50},[36,40653,40654],{"class":38,"line":247},[36,40655,40656],{"class":124},"        # 初始化b参数\n",[36,40658,40659,40661,40663,40665,40667,40669],{"class":38,"line":637},[36,40660,3999],{"class":42},[36,40662,40255],{"class":50},[36,40664,40258],{"class":42},[36,40666,40261],{"class":42},[36,40668,40264],{"class":73},[36,40670,5230],{"class":50},[36,40672,40673,40675,40677],{"class":38,"line":646},[36,40674,40610],{"class":50},[36,40676,1859],{"class":73},[36,40678,1680],{"class":50},[19,40680,40681],{},"②尽可能地增加批次",[19,40683,40684],{},"训练完整代码：",[26,40686,40687],{"className":31709,"code":39230,"language":31711,"meta":31,"style":31},[33,40688,40689,40695,40705,40715,40725,40729,40745,40753,40771,40775,40779,40789,40825,40829,40865,40869,40897,40901,40905,40915,40951,40955,40991,40995,41023,41027,41031,41041,41077,41081,41117,41121,41157,41161,41189,41193,41197,41207,41243,41247,41283,41287,41323,41327,41355,41359,41363,41373,41409,41413,41449,41453,41489,41493,41521,41525,41529,41539,41543,41547,41551,41571,41575,41587,41591,41603,41607,41611,41615,41619,41631,41635,41643,41647,41659,41663,41677,41681,41689,41693,41701,41705,41709,41721,41725,41739,41747,41751,41755,41763,41773,41783,41793,41803,41813,41823,41829,41833,41837,41849,41869,41875,41883],{"__ignoreMap":31},[36,40690,40691,40693],{"class":38,"line":39},[36,40692,31723],{"class":42},[36,40694,31726],{"class":50},[36,40696,40697,40699,40701,40703],{"class":38,"line":54},[36,40698,32068],{"class":42},[36,40700,39245],{"class":50},[36,40702,31723],{"class":42},[36,40704,39250],{"class":50},[36,40706,40707,40709,40711,40713],{"class":38,"line":61},[36,40708,32068],{"class":42},[36,40710,32071],{"class":50},[36,40712,31723],{"class":42},[36,40714,32076],{"class":50},[36,40716,40717,40719,40721,40723],{"class":38,"line":80},[36,40718,32068],{"class":42},[36,40720,32088],{"class":50},[36,40722,31723],{"class":42},[36,40724,32093],{"class":50},[36,40726,40727],{"class":38,"line":96},[36,40728,58],{"emptyLinePlaceholder":57},[36,40730,40731,40733,40735,40737,40739,40741,40743],{"class":38,"line":101},[36,40732,16023],{"class":42},[36,40734,39281],{"class":46},[36,40736,222],{"class":50},[36,40738,32109],{"class":46},[36,40740,2225],{"class":50},[36,40742,32114],{"class":46},[36,40744,32117],{"class":50},[36,40746,40747,40749,40751],{"class":38,"line":128},[36,40748,32132],{"class":42},[36,40750,32135],{"class":73},[36,40752,32138],{"class":50},[36,40754,40755,40757,40759,40761,40763,40765,40767,40769],{"class":38,"line":149},[36,40756,32148],{"class":73},[36,40758,222],{"class":50},[36,40760,39308],{"class":73},[36,40762,477],{"class":50},[36,40764,32154],{"class":73},[36,40766,32157],{"class":50},[36,40768,32160],{"class":73},[36,40770,3484],{"class":50},[36,40772,40773],{"class":38,"line":154},[36,40774,39323],{"class":124},[36,40776,40777],{"class":38,"line":167},[36,40778,39328],{"class":124},[36,40780,40781,40783,40785,40787],{"class":38,"line":172},[36,40782,32176],{"class":73},[36,40784,39335],{"class":50},[36,40786,70],{"class":42},[36,40788,39340],{"class":50},[36,40790,40791,40793,40795,40797,40799,40801,40803,40805,40807,40809,40811,40813,40815,40817,40819,40821,40823],{"class":38,"line":192},[36,40792,39345],{"class":50},[36,40794,32187],{"class":473},[36,40796,70],{"class":42},[36,40798,1885],{"class":73},[36,40800,2045],{"class":50},[36,40802,32196],{"class":473},[36,40804,70],{"class":42},[36,40806,1871],{"class":73},[36,40808,2045],{"class":50},[36,40810,32205],{"class":473},[36,40812,70],{"class":42},[36,40814,1741],{"class":73},[36,40816,2045],{"class":50},[36,40818,32214],{"class":473},[36,40820,70],{"class":42},[36,40822,1885],{"class":73},[36,40824,39378],{"class":50},[36,40826,40827],{"class":38,"line":211},[36,40828,39383],{"class":50},[36,40830,40831,40833,40835,40837,40839,40841,40843,40845,40847,40849,40851,40853,40855,40857,40859,40861,40863],{"class":38,"line":216},[36,40832,39345],{"class":50},[36,40834,32187],{"class":473},[36,40836,70],{"class":42},[36,40838,1871],{"class":73},[36,40840,2045],{"class":50},[36,40842,32196],{"class":473},[36,40844,70],{"class":42},[36,40846,1871],{"class":73},[36,40848,2045],{"class":50},[36,40850,32205],{"class":473},[36,40852,70],{"class":42},[36,40854,1741],{"class":73},[36,40856,2045],{"class":50},[36,40858,32214],{"class":473},[36,40860,70],{"class":42},[36,40862,1885],{"class":73},[36,40864,39378],{"class":50},[36,40866,40867],{"class":38,"line":231},[36,40868,39383],{"class":50},[36,40870,40871,40873,40875,40877,40879,40881,40883,40885,40887,40889,40891,40893,40895],{"class":38,"line":236},[36,40872,39428],{"class":50},[36,40874,32205],{"class":473},[36,40876,70],{"class":42},[36,40878,1747],{"class":73},[36,40880,2045],{"class":50},[36,40882,32260],{"class":473},[36,40884,70],{"class":42},[36,40886,1747],{"class":73},[36,40888,2045],{"class":50},[36,40890,32214],{"class":473},[36,40892,70],{"class":42},[36,40894,1859],{"class":73},[36,40896,1680],{"class":50},[36,40898,40899],{"class":38,"line":247},[36,40900,39457],{"class":50},[36,40902,40903],{"class":38,"line":637},[36,40904,39462],{"class":124},[36,40906,40907,40909,40911,40913],{"class":38,"line":646},[36,40908,32176],{"class":73},[36,40910,39469],{"class":50},[36,40912,70],{"class":42},[36,40914,39340],{"class":50},[36,40916,40917,40919,40921,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943,40945,40947,40949],{"class":38,"line":655},[36,40918,39345],{"class":50},[36,40920,32187],{"class":473},[36,40922,70],{"class":42},[36,40924,1871],{"class":73},[36,40926,2045],{"class":50},[36,40928,32196],{"class":473},[36,40930,70],{"class":42},[36,40932,33401],{"class":73},[36,40934,2045],{"class":50},[36,40936,32205],{"class":473},[36,40938,70],{"class":42},[36,40940,1741],{"class":73},[36,40942,2045],{"class":50},[36,40944,32214],{"class":473},[36,40946,70],{"class":42},[36,40948,1885],{"class":73},[36,40950,39378],{"class":50},[36,40952,40953],{"class":38,"line":660},[36,40954,39383],{"class":50},[36,40956,40957,40959,40961,40963,40965,40967,40969,40971,40973,40975,40977,40979,40981,40983,40985,40987,40989],{"class":38,"line":665},[36,40958,39345],{"class":50},[36,40960,32187],{"class":473},[36,40962,70],{"class":42},[36,40964,33401],{"class":73},[36,40966,2045],{"class":50},[36,40968,32196],{"class":473},[36,40970,70],{"class":42},[36,40972,33401],{"class":73},[36,40974,2045],{"class":50},[36,40976,32205],{"class":473},[36,40978,70],{"class":42},[36,40980,1741],{"class":73},[36,40982,2045],{"class":50},[36,40984,32214],{"class":473},[36,40986,70],{"class":42},[36,40988,1885],{"class":73},[36,40990,39378],{"class":50},[36,40992,40993],{"class":38,"line":674},[36,40994,39383],{"class":50},[36,40996,40997,40999,41001,41003,41005,41007,41009,41011,41013,41015,41017,41019,41021],{"class":38,"line":679},[36,40998,39428],{"class":50},[36,41000,32205],{"class":473},[36,41002,70],{"class":42},[36,41004,1747],{"class":73},[36,41006,2045],{"class":50},[36,41008,32260],{"class":473},[36,41010,70],{"class":42},[36,41012,1747],{"class":73},[36,41014,2045],{"class":50},[36,41016,32214],{"class":473},[36,41018,70],{"class":42},[36,41020,1859],{"class":73},[36,41022,1680],{"class":50},[36,41024,41025],{"class":38,"line":692},[36,41026,39457],{"class":50},[36,41028,41029],{"class":38,"line":705},[36,41030,39590],{"class":124},[36,41032,41033,41035,41037,41039],{"class":38,"line":710},[36,41034,32176],{"class":73},[36,41036,39597],{"class":50},[36,41038,70],{"class":42},[36,41040,39340],{"class":50},[36,41042,41043,41045,41047,41049,41051,41053,41055,41057,41059,41061,41063,41065,41067,41069,41071,41073,41075],{"class":38,"line":722},[36,41044,39345],{"class":50},[36,41046,32187],{"class":473},[36,41048,70],{"class":42},[36,41050,33401],{"class":73},[36,41052,2045],{"class":50},[36,41054,32196],{"class":473},[36,41056,70],{"class":42},[36,41058,36201],{"class":73},[36,41060,2045],{"class":50},[36,41062,32205],{"class":473},[36,41064,70],{"class":42},[36,41066,1741],{"class":73},[36,41068,2045],{"class":50},[36,41070,32214],{"class":473},[36,41072,70],{"class":42},[36,41074,1885],{"class":73},[36,41076,39378],{"class":50},[36,41078,41079],{"class":38,"line":750},[36,41080,39383],{"class":50},[36,41082,41083,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115],{"class":38,"line":755},[36,41084,39345],{"class":50},[36,41086,32187],{"class":473},[36,41088,70],{"class":42},[36,41090,36201],{"class":73},[36,41092,2045],{"class":50},[36,41094,32196],{"class":473},[36,41096,70],{"class":42},[36,41098,36201],{"class":73},[36,41100,2045],{"class":50},[36,41102,32205],{"class":473},[36,41104,70],{"class":42},[36,41106,1741],{"class":73},[36,41108,2045],{"class":50},[36,41110,32214],{"class":473},[36,41112,70],{"class":42},[36,41114,1885],{"class":73},[36,41116,39378],{"class":50},[36,41118,41119],{"class":38,"line":777},[36,41120,39383],{"class":50},[36,41122,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155],{"class":38,"line":802},[36,41124,39345],{"class":50},[36,41126,32187],{"class":473},[36,41128,70],{"class":42},[36,41130,36201],{"class":73},[36,41132,2045],{"class":50},[36,41134,32196],{"class":473},[36,41136,70],{"class":42},[36,41138,36201],{"class":73},[36,41140,2045],{"class":50},[36,41142,32205],{"class":473},[36,41144,70],{"class":42},[36,41146,1741],{"class":73},[36,41148,2045],{"class":50},[36,41150,32214],{"class":473},[36,41152,70],{"class":42},[36,41154,1885],{"class":73},[36,41156,39378],{"class":50},[36,41158,41159],{"class":38,"line":807},[36,41160,39383],{"class":50},[36,41162,41163,41165,41167,41169,41171,41173,41175,41177,41179,41181,41183,41185,41187],{"class":38,"line":818},[36,41164,39428],{"class":50},[36,41166,32205],{"class":473},[36,41168,70],{"class":42},[36,41170,1747],{"class":73},[36,41172,2045],{"class":50},[36,41174,32260],{"class":473},[36,41176,70],{"class":42},[36,41178,1747],{"class":73},[36,41180,2045],{"class":50},[36,41182,32214],{"class":473},[36,41184,70],{"class":42},[36,41186,1859],{"class":73},[36,41188,1680],{"class":50},[36,41190,41191],{"class":38,"line":843},[36,41192,39457],{"class":50},[36,41194,41195],{"class":38,"line":848},[36,41196,39758],{"class":124},[36,41198,41199,41201,41203,41205],{"class":38,"line":859},[36,41200,32176],{"class":73},[36,41202,39765],{"class":50},[36,41204,70],{"class":42},[36,41206,39340],{"class":50},[36,41208,41209,41211,41213,41215,41217,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241],{"class":38,"line":864},[36,41210,39345],{"class":50},[36,41212,32187],{"class":473},[36,41214,70],{"class":42},[36,41216,36201],{"class":73},[36,41218,2045],{"class":50},[36,41220,32196],{"class":473},[36,41222,70],{"class":42},[36,41224,39788],{"class":73},[36,41226,2045],{"class":50},[36,41228,32205],{"class":473},[36,41230,70],{"class":42},[36,41232,1741],{"class":73},[36,41234,2045],{"class":50},[36,41236,32214],{"class":473},[36,41238,70],{"class":42},[36,41240,1885],{"class":73},[36,41242,39378],{"class":50},[36,41244,41245],{"class":38,"line":873},[36,41246,39383],{"class":50},[36,41248,41249,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279,41281],{"class":38,"line":9454},[36,41250,39345],{"class":50},[36,41252,32187],{"class":473},[36,41254,70],{"class":42},[36,41256,39788],{"class":73},[36,41258,2045],{"class":50},[36,41260,32196],{"class":473},[36,41262,70],{"class":42},[36,41264,39788],{"class":73},[36,41266,2045],{"class":50},[36,41268,32205],{"class":473},[36,41270,70],{"class":42},[36,41272,1741],{"class":73},[36,41274,2045],{"class":50},[36,41276,32214],{"class":473},[36,41278,70],{"class":42},[36,41280,1885],{"class":73},[36,41282,39378],{"class":50},[36,41284,41285],{"class":38,"line":9481},[36,41286,39383],{"class":50},[36,41288,41289,41291,41293,41295,41297,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321],{"class":38,"line":9486},[36,41290,39345],{"class":50},[36,41292,32187],{"class":473},[36,41294,70],{"class":42},[36,41296,39788],{"class":73},[36,41298,2045],{"class":50},[36,41300,32196],{"class":473},[36,41302,70],{"class":42},[36,41304,39788],{"class":73},[36,41306,2045],{"class":50},[36,41308,32205],{"class":473},[36,41310,70],{"class":42},[36,41312,1741],{"class":73},[36,41314,2045],{"class":50},[36,41316,32214],{"class":473},[36,41318,70],{"class":42},[36,41320,1885],{"class":73},[36,41322,39378],{"class":50},[36,41324,41325],{"class":38,"line":9492},[36,41326,39383],{"class":50},[36,41328,41329,41331,41333,41335,41337,41339,41341,41343,41345,41347,41349,41351,41353],{"class":38,"line":9504},[36,41330,39428],{"class":50},[36,41332,32205],{"class":473},[36,41334,70],{"class":42},[36,41336,1747],{"class":73},[36,41338,2045],{"class":50},[36,41340,32260],{"class":473},[36,41342,70],{"class":42},[36,41344,1747],{"class":73},[36,41346,2045],{"class":50},[36,41348,32214],{"class":473},[36,41350,70],{"class":42},[36,41352,1859],{"class":73},[36,41354,1680],{"class":50},[36,41356,41357],{"class":38,"line":9516},[36,41358,39457],{"class":50},[36,41360,41361],{"class":38,"line":9528},[36,41362,39927],{"class":124},[36,41364,41365,41367,41369,41371],{"class":38,"line":11184},[36,41366,32176],{"class":73},[36,41368,39934],{"class":50},[36,41370,70],{"class":42},[36,41372,39340],{"class":50},[36,41374,41375,41377,41379,41381,41383,41385,41387,41389,41391,41393,41395,41397,41399,41401,41403,41405,41407],{"class":38,"line":11209},[36,41376,39345],{"class":50},[36,41378,32187],{"class":473},[36,41380,70],{"class":42},[36,41382,39788],{"class":73},[36,41384,2045],{"class":50},[36,41386,32196],{"class":473},[36,41388,70],{"class":42},[36,41390,39788],{"class":73},[36,41392,2045],{"class":50},[36,41394,32205],{"class":473},[36,41396,70],{"class":42},[36,41398,1741],{"class":73},[36,41400,2045],{"class":50},[36,41402,32214],{"class":473},[36,41404,70],{"class":42},[36,41406,1885],{"class":73},[36,41408,39378],{"class":50},[36,41410,41411],{"class":38,"line":11232},[36,41412,39383],{"class":50},[36,41414,41415,41417,41419,41421,41423,41425,41427,41429,41431,41433,41435,41437,41439,41441,41443,41445,41447],{"class":38,"line":11256},[36,41416,39345],{"class":50},[36,41418,32187],{"class":473},[36,41420,70],{"class":42},[36,41422,39788],{"class":73},[36,41424,2045],{"class":50},[36,41426,32196],{"class":473},[36,41428,70],{"class":42},[36,41430,39788],{"class":73},[36,41432,2045],{"class":50},[36,41434,32205],{"class":473},[36,41436,70],{"class":42},[36,41438,1741],{"class":73},[36,41440,2045],{"class":50},[36,41442,32214],{"class":473},[36,41444,70],{"class":42},[36,41446,1885],{"class":73},[36,41448,39378],{"class":50},[36,41450,41451],{"class":38,"line":11261},[36,41452,39383],{"class":50},[36,41454,41455,41457,41459,41461,41463,41465,41467,41469,41471,41473,41475,41477,41479,41481,41483,41485,41487],{"class":38,"line":11266},[36,41456,39345],{"class":50},[36,41458,32187],{"class":473},[36,41460,70],{"class":42},[36,41462,39788],{"class":73},[36,41464,2045],{"class":50},[36,41466,32196],{"class":473},[36,41468,70],{"class":42},[36,41470,39788],{"class":73},[36,41472,2045],{"class":50},[36,41474,32205],{"class":473},[36,41476,70],{"class":42},[36,41478,1741],{"class":73},[36,41480,2045],{"class":50},[36,41482,32214],{"class":473},[36,41484,70],{"class":42},[36,41486,1885],{"class":73},[36,41488,39378],{"class":50},[36,41490,41491],{"class":38,"line":11271},[36,41492,39383],{"class":50},[36,41494,41495,41497,41499,41501,41503,41505,41507,41509,41511,41513,41515,41517,41519],{"class":38,"line":11280},[36,41496,39428],{"class":50},[36,41498,32205],{"class":473},[36,41500,70],{"class":42},[36,41502,1747],{"class":73},[36,41504,2045],{"class":50},[36,41506,32260],{"class":473},[36,41508,70],{"class":42},[36,41510,1747],{"class":73},[36,41512,2045],{"class":50},[36,41514,32214],{"class":473},[36,41516,70],{"class":42},[36,41518,1859],{"class":73},[36,41520,1680],{"class":50},[36,41522,41523],{"class":38,"line":11285},[36,41524,39457],{"class":50},[36,41526,41527],{"class":38,"line":11291},[36,41528,40095],{"class":124},[36,41530,41531,41533,41535,41537],{"class":38,"line":11312},[36,41532,32176],{"class":73},[36,41534,40102],{"class":50},[36,41536,70],{"class":42},[36,41538,39340],{"class":50},[36,41540,41541],{"class":38,"line":11318},[36,41542,40111],{"class":124},[36,41544,41545],{"class":38,"line":11332},[36,41546,40116],{"class":124},[36,41548,41549],{"class":38,"line":11338},[36,41550,40121],{"class":50},[36,41552,41553,41555,41557,41559,41561,41563,41565,41567,41569],{"class":38,"line":11365},[36,41554,40126],{"class":50},[36,41556,2036],{"class":73},[36,41558,2122],{"class":42},[36,41560,2036],{"class":73},[36,41562,2122],{"class":42},[36,41564,39788],{"class":73},[36,41566,2045],{"class":50},[36,41568,36201],{"class":73},[36,41570,39378],{"class":50},[36,41572,41573],{"class":38,"line":11374},[36,41574,39383],{"class":50},[36,41576,41577,41579,41581,41583,41585],{"class":38,"line":11380},[36,41578,40126],{"class":50},[36,41580,36201],{"class":73},[36,41582,2045],{"class":50},[36,41584,33401],{"class":73},[36,41586,39378],{"class":50},[36,41588,41589],{"class":38,"line":11388},[36,41590,39383],{"class":50},[36,41592,41593,41595,41597,41599,41601],{"class":38,"line":11393},[36,41594,40126],{"class":50},[36,41596,33401],{"class":73},[36,41598,2045],{"class":50},[36,41600,2113],{"class":73},[36,41602,1680],{"class":50},[36,41604,41605],{"class":38,"line":17933},[36,41606,39457],{"class":50},[36,41608,41609],{"class":38,"line":17939},[36,41610,58],{"emptyLinePlaceholder":57},[36,41612,41613],{"class":38,"line":17962},[36,41614,40187],{"class":124},[36,41616,41617],{"class":38,"line":17968},[36,41618,40192],{"class":124},[36,41620,41621,41623,41625,41627,41629],{"class":38,"line":17991},[36,41622,4894],{"class":42},[36,41624,40199],{"class":50},[36,41626,27374],{"class":42},[36,41628,40204],{"class":73},[36,41630,40207],{"class":50},[36,41632,41633],{"class":38,"line":18005},[36,41634,40212],{"class":124},[36,41636,41637,41639,41641],{"class":38,"line":18025},[36,41638,6131],{"class":42},[36,41640,40219],{"class":73},[36,41642,40222],{"class":50},[36,41644,41645],{"class":38,"line":18031},[36,41646,40227],{"class":124},[36,41648,41649,41651,41653,41655,41657],{"class":38,"line":18042},[36,41650,40232],{"class":50},[36,41652,40235],{"class":473},[36,41654,70],{"class":42},[36,41656,40240],{"class":110},[36,41658,1680],{"class":50},[36,41660,41661],{"class":38,"line":18065},[36,41662,40247],{"class":124},[36,41664,41665,41667,41669,41671,41673,41675],{"class":38,"line":18087},[36,41666,40252],{"class":42},[36,41668,40255],{"class":50},[36,41670,40258],{"class":42},[36,41672,40261],{"class":42},[36,41674,40264],{"class":73},[36,41676,5230],{"class":50},[36,41678,41679],{"class":38,"line":18092},[36,41680,40271],{"class":124},[36,41682,41683,41685,41687],{"class":38,"line":18098},[36,41684,40276],{"class":50},[36,41686,1859],{"class":73},[36,41688,1680],{"class":50},[36,41690,41691],{"class":38,"line":18112},[36,41692,40285],{"class":124},[36,41694,41695,41697,41699],{"class":38,"line":18125},[36,41696,40290],{"class":42},[36,41698,40219],{"class":73},[36,41700,40295],{"class":50},[36,41702,41703],{"class":38,"line":18130},[36,41704,40300],{"class":124},[36,41706,41707],{"class":38,"line":18144},[36,41708,40305],{"class":124},[36,41710,41711,41713,41715,41717,41719],{"class":38,"line":18149},[36,41712,40310],{"class":50},[36,41714,1859],{"class":73},[36,41716,2045],{"class":50},[36,41718,40317],{"class":73},[36,41720,1680],{"class":50},[36,41722,41723],{"class":38,"line":18155},[36,41724,40324],{"class":124},[36,41726,41727,41729,41731,41733,41735,41737],{"class":38,"line":18160},[36,41728,40252],{"class":42},[36,41730,40255],{"class":50},[36,41732,40258],{"class":42},[36,41734,40261],{"class":42},[36,41736,40264],{"class":73},[36,41738,5230],{"class":50},[36,41740,41741,41743,41745],{"class":38,"line":18174},[36,41742,40276],{"class":50},[36,41744,1859],{"class":73},[36,41746,1680],{"class":50},[36,41748,41749],{"class":38,"line":18179},[36,41750,58],{"emptyLinePlaceholder":57},[36,41752,41753],{"class":38,"line":18184},[36,41754,36496],{"class":124},[36,41756,41757,41759,41761],{"class":38,"line":18198},[36,41758,32132],{"class":42},[36,41760,32424],{"class":46},[36,41762,32427],{"class":50},[36,41764,41765,41767,41769,41771],{"class":38,"line":18210},[36,41766,32432],{"class":50},[36,41768,70],{"class":42},[36,41770,32154],{"class":73},[36,41772,40373],{"class":50},[36,41774,41775,41777,41779,41781],{"class":38,"line":18215},[36,41776,32432],{"class":50},[36,41778,70],{"class":42},[36,41780,32154],{"class":73},[36,41782,40384],{"class":50},[36,41784,41785,41787,41789,41791],{"class":38,"line":18228},[36,41786,32432],{"class":50},[36,41788,70],{"class":42},[36,41790,32154],{"class":73},[36,41792,40395],{"class":50},[36,41794,41795,41797,41799,41801],{"class":38,"line":18233},[36,41796,32432],{"class":50},[36,41798,70],{"class":42},[36,41800,32154],{"class":73},[36,41802,40406],{"class":50},[36,41804,41805,41807,41809,41811],{"class":38,"line":18238},[36,41806,32432],{"class":50},[36,41808,70],{"class":42},[36,41810,32154],{"class":73},[36,41812,40417],{"class":50},[36,41814,41815,41817,41819,41821],{"class":38,"line":18243},[36,41816,32432],{"class":50},[36,41818,70],{"class":42},[36,41820,32154],{"class":73},[36,41822,40428],{"class":50},[36,41824,41825,41827],{"class":38,"line":18256},[36,41826,16081],{"class":42},[36,41828,32540],{"class":50},[36,41830,41831],{"class":38,"line":18261},[36,41832,58],{"emptyLinePlaceholder":57},[36,41834,41835],{"class":38,"line":33964},[36,41836,40443],{"class":124},[36,41838,41839,41841,41843,41845,41847],{"class":38,"line":33970},[36,41840,3061],{"class":42},[36,41842,32551],{"class":73},[36,41844,4441],{"class":42},[36,41846,40454],{"class":110},[36,41848,5230],{"class":50},[36,41850,41851,41853,41855,41857,41859,41861,41863,41865,41867],{"class":38,"line":33976},[36,41852,32568],{"class":50},[36,41854,70],{"class":42},[36,41856,31782],{"class":50},[36,41858,32575],{"class":110},[36,41860,3222],{"class":42},[36,41862,32580],{"class":50},[36,41864,3219],{"class":42},[36,41866,31807],{"class":110},[36,41868,1680],{"class":50},[36,41870,41871,41873],{"class":38,"line":33982},[36,41872,32630],{"class":73},[36,41874,31816],{"class":50},[36,41876,41877,41879,41881],{"class":38,"line":33988},[36,41878,32620],{"class":50},[36,41880,70],{"class":42},[36,41882,40491],{"class":50},[36,41884,41885,41887,41889,41891,41893,41895,41897,41899],{"class":38,"line":33999},[36,41886,32630],{"class":73},[36,41888,32633],{"class":50},[36,41890,1885],{"class":73},[36,41892,2045],{"class":50},[36,41894,32832],{"class":73},[36,41896,2045],{"class":50},[36,41898,32832],{"class":73},[36,41900,32646],{"class":50},[256,41902,41903],{"start":61},[259,41904,41905],{},"测试代码",[26,41907,41909],{"className":31709,"code":41908,"language":31711,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import VGG16\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=224),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=VGG16()\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,41910,41911,41917,41927,41937,41941,41951,41962,41966,41970,41974,41982,41998,42008,42024,42034,42048,42052,42062,42072,42082,42088,42092,42096,42104,42108,42124,42132,42136,42140,42148,42156,42160,42164,42168,42172,42178,42182,42192,42200,42208,42212,42216,42220,42228,42232,42248,42252,42256,42260,42272,42276,42288,42292,42296,42308,42312,42322,42326,42330,42342,42346,42355,42359,42363,42371,42375,42383,42387,42391,42395,42399,42403,42419,42427,42431,42435,42483,42489,42493,42503,42511,42519,42523,42527,42531,42535,42543,42547,42563,42567,42575,42583],{"__ignoreMap":31},[36,41912,41913,41915],{"class":38,"line":39},[36,41914,31723],{"class":42},[36,41916,31726],{"class":50},[36,41918,41919,41921,41923,41925],{"class":38,"line":54},[36,41920,31723],{"class":42},[36,41922,32746],{"class":50},[36,41924,32714],{"class":42},[36,41926,32751],{"class":50},[36,41928,41929,41931,41933,41935],{"class":38,"line":61},[36,41930,32068],{"class":42},[36,41932,32729],{"class":50},[36,41934,31723],{"class":42},[36,41936,32734],{"class":50},[36,41938,41939],{"class":38,"line":80},[36,41940,35253],{"class":124},[36,41942,41943,41945,41947,41949],{"class":38,"line":96},[36,41944,32068],{"class":42},[36,41946,32699],{"class":50},[36,41948,31723],{"class":42},[36,41950,32704],{"class":50},[36,41952,41953,41955,41957,41959],{"class":38,"line":101},[36,41954,32068],{"class":42},[36,41956,33245],{"class":50},[36,41958,31723],{"class":42},[36,41960,41961],{"class":73}," VGG16\n",[36,41963,41964],{"class":38,"line":128},[36,41965,58],{"emptyLinePlaceholder":57},[36,41967,41968],{"class":38,"line":149},[36,41969,58],{"emptyLinePlaceholder":57},[36,41971,41972],{"class":38,"line":154},[36,41973,35282],{"class":124},[36,41975,41976,41978,41980],{"class":38,"line":167},[36,41977,33278],{"class":42},[36,41979,35289],{"class":46},[36,41981,33284],{"class":50},[36,41983,41984,41986,41988,41990,41992,41994,41996],{"class":38,"line":172},[36,41985,35296],{"class":50},[36,41987,70],{"class":42},[36,41989,32786],{"class":50},[36,41991,32789],{"class":473},[36,41993,70],{"class":42},[36,41995,32794],{"class":110},[36,41997,32797],{"class":50},[36,41999,42000,42002,42004,42006],{"class":38,"line":192},[36,42001,35313],{"class":473},[36,42003,70],{"class":42},[36,42005,35318],{"class":73},[36,42007,32797],{"class":50},[36,42009,42010,42012,42014,42016,42018,42020,42022],{"class":38,"line":211},[36,42011,35325],{"class":473},[36,42013,70],{"class":42},[36,42015,32824],{"class":50},[36,42017,32827],{"class":473},[36,42019,70],{"class":42},[36,42021,32832],{"class":73},[36,42023,32835],{"class":50},[36,42025,42026,42028,42030,42032],{"class":38,"line":216},[36,42027,35342],{"class":473},[36,42029,70],{"class":42},[36,42031,32807],{"class":73},[36,42033,1680],{"class":50},[36,42035,42036,42038,42040,42042,42044,42046],{"class":38,"line":231},[36,42037,35353],{"class":50},[36,42039,70],{"class":42},[36,42041,32865],{"class":50},[36,42043,32868],{"class":473},[36,42045,70],{"class":42},[36,42047,35364],{"class":50},[36,42049,42050],{"class":38,"line":236},[36,42051,35369],{"class":124},[36,42053,42054,42056,42058,42060],{"class":38,"line":247},[36,42055,35374],{"class":473},[36,42057,70],{"class":42},[36,42059,1885],{"class":73},[36,42061,32797],{"class":50},[36,42063,42064,42066,42068,42070],{"class":38,"line":637},[36,42065,35385],{"class":473},[36,42067,70],{"class":42},[36,42069,32807],{"class":73},[36,42071,32797],{"class":50},[36,42073,42074,42076,42078,42080],{"class":38,"line":646},[36,42075,35396],{"class":473},[36,42077,70],{"class":42},[36,42079,1859],{"class":73},[36,42081,1680],{"class":50},[36,42083,42084,42086],{"class":38,"line":655},[36,42085,239],{"class":42},[36,42087,35409],{"class":50},[36,42089,42090],{"class":38,"line":660},[36,42091,58],{"emptyLinePlaceholder":57},[36,42093,42094],{"class":38,"line":665},[36,42095,35418],{"class":124},[36,42097,42098,42100,42102],{"class":38,"line":674},[36,42099,33278],{"class":42},[36,42101,35425],{"class":46},[36,42103,35428],{"class":50},[36,42105,42106],{"class":38,"line":679},[36,42107,35433],{"class":124},[36,42109,42110,42112,42114,42116,42118,42120,42122],{"class":38,"line":692},[36,42111,32568],{"class":50},[36,42113,70],{"class":42},[36,42115,32575],{"class":110},[36,42117,3222],{"class":42},[36,42119,32580],{"class":50},[36,42121,3219],{"class":42},[36,42123,35450],{"class":110},[36,42125,42126,42128,42130],{"class":38,"line":705},[36,42127,32620],{"class":50},[36,42129,70],{"class":42},[36,42131,33620],{"class":50},[36,42133,42134],{"class":38,"line":710},[36,42135,58],{"emptyLinePlaceholder":57},[36,42137,42138],{"class":38,"line":722},[36,42139,35467],{"class":124},[36,42141,42142,42144,42146],{"class":38,"line":750},[36,42143,35472],{"class":50},[36,42145,70],{"class":42},[36,42147,33673],{"class":73},[36,42149,42150,42152,42154],{"class":38,"line":755},[36,42151,35481],{"class":50},[36,42153,70],{"class":42},[36,42155,4576],{"class":73},[36,42157,42158],{"class":38,"line":777},[36,42159,58],{"emptyLinePlaceholder":57},[36,42161,42162],{"class":38,"line":802},[36,42163,35494],{"class":124},[36,42165,42166],{"class":38,"line":807},[36,42167,35499],{"class":124},[36,42169,42170],{"class":38,"line":818},[36,42171,35504],{"class":124},[36,42173,42174,42176],{"class":38,"line":843},[36,42175,35509],{"class":42},[36,42177,34215],{"class":50},[36,42179,42180],{"class":38,"line":848},[36,42181,35516],{"class":124},[36,42183,42184,42186,42188,42190],{"class":38,"line":859},[36,42185,4894],{"class":42},[36,42187,35523],{"class":50},[36,42189,27374],{"class":42},[36,42191,35528],{"class":50},[36,42193,42194,42196,42198],{"class":38,"line":864},[36,42195,35533],{"class":50},[36,42197,70],{"class":42},[36,42199,35538],{"class":50},[36,42201,42202,42204,42206],{"class":38,"line":873},[36,42203,35543],{"class":50},[36,42205,70],{"class":42},[36,42207,35548],{"class":50},[36,42209,42210],{"class":38,"line":9454},[36,42211,35553],{"class":124},[36,42213,42214],{"class":38,"line":9481},[36,42215,34206],{"class":50},[36,42217,42218],{"class":38,"line":9486},[36,42219,35562],{"class":124},[36,42221,42222,42224,42226],{"class":38,"line":9492},[36,42223,33991],{"class":50},[36,42225,70],{"class":42},[36,42227,35571],{"class":50},[36,42229,42230],{"class":38,"line":9504},[36,42231,35576],{"class":124},[36,42233,42234,42236,42238,42240,42242,42244,42246],{"class":38,"line":9516},[36,42235,34008],{"class":50},[36,42237,70],{"class":42},[36,42239,34013],{"class":50},[36,42241,34016],{"class":473},[36,42243,70],{"class":42},[36,42245,1885],{"class":73},[36,42247,1680],{"class":50},[36,42249,42250],{"class":38,"line":9528},[36,42251,35597],{"class":124},[36,42253,42254],{"class":38,"line":11184},[36,42255,35602],{"class":124},[36,42257,42258],{"class":38,"line":11209},[36,42259,35607],{"class":124},[36,42261,42262,42264,42266,42268,42270],{"class":38,"line":11232},[36,42263,35612],{"class":50},[36,42265,10945],{"class":42},[36,42267,34118],{"class":50},[36,42269,4441],{"class":42},[36,42271,35621],{"class":50},[36,42273,42274],{"class":38,"line":11256},[36,42275,35626],{"class":124},[36,42277,42278,42280,42282,42284,42286],{"class":38,"line":11261},[36,42279,35631],{"class":50},[36,42281,10945],{"class":42},[36,42283,35636],{"class":50},[36,42285,1859],{"class":73},[36,42287,1680],{"class":50},[36,42289,42290],{"class":38,"line":11266},[36,42291,58],{"emptyLinePlaceholder":57},[36,42293,42294],{"class":38,"line":11271},[36,42295,35649],{"class":124},[36,42297,42298,42300,42302,42304,42306],{"class":38,"line":11280},[36,42299,35654],{"class":50},[36,42301,70],{"class":42},[36,42303,35659],{"class":50},[36,42305,2251],{"class":42},[36,42307,35664],{"class":50},[36,42309,42310],{"class":38,"line":11285},[36,42311,35669],{"class":124},[36,42313,42314,42316,42318,42320],{"class":38,"line":11291},[36,42315,33782],{"class":73},[36,42317,222],{"class":50},[36,42319,35678],{"class":110},[36,42321,35681],{"class":50},[36,42323,42324],{"class":38,"line":11312},[36,42325,58],{"emptyLinePlaceholder":57},[36,42327,42328],{"class":38,"line":11318},[36,42329,35690],{"class":124},[36,42331,42332,42334,42336,42338,42340],{"class":38,"line":11332},[36,42333,3061],{"class":42},[36,42335,32551],{"class":73},[36,42337,4441],{"class":42},[36,42339,32556],{"class":110},[36,42341,5230],{"class":50},[36,42343,42344],{"class":38,"line":11338},[36,42345,35707],{"class":124},[36,42347,42348,42350,42352],{"class":38,"line":11365},[36,42349,32620],{"class":50},[36,42351,70],{"class":42},[36,42353,42354],{"class":50},"VGG16()\n",[36,42356,42357],{"class":38,"line":11374},[36,42358,35720],{"class":124},[36,42360,42361],{"class":38,"line":11380},[36,42362,35725],{"class":124},[36,42364,42365,42367,42369],{"class":38,"line":11388},[36,42366,35730],{"class":50},[36,42368,35733],{"class":110},[36,42370,31828],{"class":50},[36,42372,42373],{"class":38,"line":11393},[36,42374,35740],{"class":124},[36,42376,42377,42379,42381],{"class":38,"line":17933},[36,42378,35353],{"class":50},[36,42380,70],{"class":42},[36,42382,35749],{"class":50},[36,42384,42385],{"class":38,"line":17939},[36,42386,35754],{"class":124},[36,42388,42389],{"class":38,"line":17962},[36,42390,35759],{"class":50},[36,42392,42393],{"class":38,"line":17968},[36,42394,58],{"emptyLinePlaceholder":57},[36,42396,42397],{"class":38,"line":17991},[36,42398,35768],{"class":124},[36,42400,42401],{"class":38,"line":18005},[36,42402,35773],{"class":124},[36,42404,42405,42407,42409,42411,42413,42415,42417],{"class":38,"line":18025},[36,42406,32568],{"class":50},[36,42408,70],{"class":42},[36,42410,32575],{"class":110},[36,42412,3222],{"class":42},[36,42414,32580],{"class":50},[36,42416,3219],{"class":42},[36,42418,35450],{"class":110},[36,42420,42421,42423,42425],{"class":38,"line":18031},[36,42422,32620],{"class":50},[36,42424,70],{"class":42},[36,42426,33620],{"class":50},[36,42428,42429],{"class":38,"line":18042},[36,42430,35802],{"class":124},[36,42432,42433],{"class":38,"line":18065},[36,42434,35807],{"class":124},[36,42436,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481],{"class":38,"line":18087},[36,42438,35812],{"class":50},[36,42440,70],{"class":42},[36,42442,2557],{"class":50},[36,42444,35819],{"class":110},[36,42446,2045],{"class":50},[36,42448,35824],{"class":110},[36,42450,2045],{"class":50},[36,42452,35829],{"class":110},[36,42454,2045],{"class":50},[36,42456,35834],{"class":110},[36,42458,2045],{"class":50},[36,42460,35839],{"class":110},[36,42462,2045],{"class":50},[36,42464,35844],{"class":110},[36,42466,2045],{"class":50},[36,42468,35849],{"class":110},[36,42470,2045],{"class":50},[36,42472,35854],{"class":110},[36,42474,2045],{"class":50},[36,42476,35859],{"class":110},[36,42478,2045],{"class":50},[36,42480,35864],{"class":110},[36,42482,34577],{"class":50},[36,42484,42485,42487],{"class":38,"line":18092},[36,42486,35509],{"class":42},[36,42488,34215],{"class":50},[36,42490,42491],{"class":38,"line":18098},[36,42492,35877],{"class":124},[36,42494,42495,42497,42499,42501],{"class":38,"line":18112},[36,42496,4894],{"class":42},[36,42498,35884],{"class":50},[36,42500,27374],{"class":42},[36,42502,35528],{"class":50},[36,42504,42505,42507,42509],{"class":38,"line":18125},[36,42506,33941],{"class":50},[36,42508,70],{"class":42},[36,42510,33946],{"class":50},[36,42512,42513,42515,42517],{"class":38,"line":18130},[36,42514,33956],{"class":50},[36,42516,70],{"class":42},[36,42518,33961],{"class":50},[36,42520,42521],{"class":38,"line":18144},[36,42522,58],{"emptyLinePlaceholder":57},[36,42524,42525],{"class":38,"line":18149},[36,42526,35913],{"class":124},[36,42528,42529],{"class":38,"line":18155},[36,42530,34206],{"class":50},[36,42532,42533],{"class":38,"line":18160},[36,42534,35922],{"class":124},[36,42536,42537,42539,42541],{"class":38,"line":18174},[36,42538,33991],{"class":50},[36,42540,70],{"class":42},[36,42542,33996],{"class":50},[36,42544,42545],{"class":38,"line":18179},[36,42546,35935],{"class":124},[36,42548,42549,42551,42553,42555,42557,42559,42561],{"class":38,"line":18184},[36,42550,34008],{"class":50},[36,42552,70],{"class":42},[36,42554,34013],{"class":50},[36,42556,34016],{"class":473},[36,42558,70],{"class":42},[36,42560,1885],{"class":73},[36,42562,1680],{"class":50},[36,42564,42565],{"class":38,"line":18198},[36,42566,35956],{"class":124},[36,42568,42569,42571,42573],{"class":38,"line":18210},[36,42570,35961],{"class":50},[36,42572,70],{"class":42},[36,42574,35966],{"class":50},[36,42576,42577,42579,42581],{"class":38,"line":18215},[36,42578,35971],{"class":50},[36,42580,70],{"class":42},[36,42582,35976],{"class":50},[36,42584,42585,42587,42589,42591,42593,42595,42597,42599],{"class":38,"line":18228},[36,42586,35981],{"class":73},[36,42588,222],{"class":50},[36,42590,35986],{"class":110},[36,42592,35989],{"class":50},[36,42594,35992],{"class":110},[36,42596,2045],{"class":50},[36,42598,35997],{"class":110},[36,42600,36000],{"class":50},[1645,42602,42604],{"id":42603},"_23googlenet","2.3.GoogLeNet",[23327,42606,42608],{"id":42607},"_231原理","2.3.1.原理",[256,42610,42611],{},[259,42612,42613],{},"网络结构",[19,42615,42616],{},[2992,42617],{"alt":31,"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-023.png",[19,42620,42621],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42623,42624],{},[2992,42625],{"alt":31,"src":42626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,42628,42629],{},[2992,42630],{"alt":31,"src":42631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,42633,42634],{},[2992,42635],{"alt":31,"src":42636},"\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",[256,42638,42639],{"start":54},[259,42640,42641],{},"1x1卷积的优点",[19,42643,42644],{},[2992,42645],{"alt":31,"src":42646},"\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",[256,42648,42649],{"start":61},[259,42650,42651],{},"全局平均池化层优点",[19,42653,42654],{},[2992,42655],{"alt":31,"src":42656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,42658,42659],{},[2992,42660],{"alt":31,"src":42661},"\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",[256,42663,42664],{"start":80},[259,42665,42666],{},"参数详细描述",[19,42668,42669],{},[2992,42670],{"alt":31,"src":42671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,42673,42674],{},[2992,42675],{"alt":31,"src":42676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,42678,42679],{},[2992,42680],{"alt":31,"src":42681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,42683,42684],{},[2992,42685],{"alt":31,"src":42686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,42688,42689],{},[2992,42690],{"alt":31,"src":42691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,42693,42694],{},[2992,42695],{"alt":31,"src":42696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42698,42699],{},[2992,42700],{"alt":31,"src":42701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,42703,42704],{},[2992,42705],{"alt":31,"src":42706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,42708,42709],{},[2992,42710],{"alt":31,"src":42711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,42713,42714],{},[2992,42715],{"alt":31,"src":42716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,42718,42719],{},[2992,42720],{"alt":31,"src":42721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,42723,42724],{},[2992,42725],{"alt":31,"src":42726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,42728,42729],{},[2992,42730],{"alt":31,"src":42731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,42733,42734],{},[2992,42735],{"alt":31,"src":42736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,42738,42739],{},[2992,42740],{"alt":31,"src":42741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,42743,42744],{},[2992,42745],{"alt":31,"src":42746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,42748,42749],{},[2992,42750],{"alt":31,"src":42751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,42753,42754],{},[2992,42755],{"alt":31,"src":42756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,42758,42759],{},[2992,42760],{"alt":31,"src":42761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,42763,42764],{},[2992,42765],{"alt":31,"src":42766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,42768,42769],{},[2992,42770],{"alt":31,"src":42771},"\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",[23327,42773,42775],{"id":42774},"_232代码实现","2.3.2.代码实现",[256,42777,42778],{},[259,42779,32042],{},[19,42781,42782],{},"根据原理一步一步搭建即可",[26,42784,42786],{"className":31709,"code":42785,"language":31711,"meta":31,"style":31},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=1,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,10)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[33,42787,42788,42794,42804,42814,42818,42835,42844,42859,42869,42874,42907,42912,42949,42996,43001,43037,43084,43089,43094,43129,43161,43165,43173,43189,43213,43238,43259,43264,43279,43283,43287,43292,43309,43314,43323,43338,43349,43393,43397,43425,43429,43440,43468,43472,43509,43513,43541,43545,43556,43592,43624,43652,43656,43667,43701,43733,43765,43798,43832,43860,43864,43875,43908,43940,43954,43958,43971,43975,43980,43992,44000,44022,44027,44032,44037,44042,44047,44052,44066,44074,44083,44096,44111,44120,44124,44132,44143,44154,44165,44176,44187,44193,44197,44202,44214,44234,44243],{"__ignoreMap":31},[36,42789,42790,42792],{"class":38,"line":39},[36,42791,31723],{"class":42},[36,42793,31726],{"class":50},[36,42795,42796,42798,42800,42802],{"class":38,"line":54},[36,42797,32068],{"class":42},[36,42799,32071],{"class":50},[36,42801,31723],{"class":42},[36,42803,32076],{"class":50},[36,42805,42806,42808,42810,42812],{"class":38,"line":61},[36,42807,32068],{"class":42},[36,42809,32088],{"class":50},[36,42811,31723],{"class":42},[36,42813,32093],{"class":50},[36,42815,42816],{"class":38,"line":80},[36,42817,58],{"emptyLinePlaceholder":57},[36,42819,42820,42822,42825,42827,42829,42831,42833],{"class":38,"line":96},[36,42821,16023],{"class":42},[36,42823,42824],{"class":46}," Inception",[36,42826,222],{"class":50},[36,42828,32109],{"class":46},[36,42830,2225],{"class":50},[36,42832,32114],{"class":46},[36,42834,32117],{"class":50},[36,42836,42837,42839,42841],{"class":38,"line":101},[36,42838,32132],{"class":42},[36,42840,32135],{"class":73},[36,42842,42843],{"class":50},"(self,in_channels,c1,c2,c3,c4):\n",[36,42845,42846,42848,42851,42853,42855,42857],{"class":38,"line":128},[36,42847,32148],{"class":73},[36,42849,42850],{"class":50},"(Inception,",[36,42852,32154],{"class":73},[36,42854,32157],{"class":50},[36,42856,32160],{"class":73},[36,42858,3484],{"class":50},[36,42860,42861,42863,42865,42867],{"class":38,"line":149},[36,42862,32176],{"class":73},[36,42864,36102],{"class":50},[36,42866,70],{"class":42},[36,42868,36107],{"class":50},[36,42870,42871],{"class":38,"line":154},[36,42872,42873],{"class":124},"        # 路线1：定义1*1卷积\n",[36,42875,42876,42878,42881,42883,42885,42887,42889,42892,42894,42896,42899,42901,42903,42905],{"class":38,"line":167},[36,42877,32176],{"class":73},[36,42879,42880],{"class":50},".p1_1",[36,42882,70],{"class":42},[36,42884,32184],{"class":50},[36,42886,32187],{"class":473},[36,42888,70],{"class":42},[36,42890,42891],{"class":50},"in_channels,",[36,42893,32196],{"class":473},[36,42895,70],{"class":42},[36,42897,42898],{"class":50},"c1,",[36,42900,32205],{"class":473},[36,42902,70],{"class":42},[36,42904,1885],{"class":73},[36,42906,1680],{"class":50},[36,42908,42909],{"class":38,"line":172},[36,42910,42911],{"class":124},"        # 路线2：定义1*1卷积和3*3\n",[36,42913,42914,42916,42919,42921,42923,42925,42927,42929,42931,42933,42936,42938,42941,42943,42945,42947],{"class":38,"line":192},[36,42915,32176],{"class":73},[36,42917,42918],{"class":50},".p2_1",[36,42920,70],{"class":42},[36,42922,32184],{"class":50},[36,42924,32187],{"class":473},[36,42926,70],{"class":42},[36,42928,42891],{"class":50},[36,42930,32196],{"class":473},[36,42932,70],{"class":42},[36,42934,42935],{"class":50},"c2[",[36,42937,1859],{"class":73},[36,42939,42940],{"class":50},"],",[36,42942,32205],{"class":473},[36,42944,70],{"class":42},[36,42946,1885],{"class":73},[36,42948,1680],{"class":50},[36,42950,42951,42953,42956,42958,42960,42962,42964,42966,42968,42970,42972,42974,42976,42978,42980,42982,42984,42986,42988,42990,42992,42994],{"class":38,"line":211},[36,42952,32176],{"class":73},[36,42954,42955],{"class":50},".p2_2",[36,42957,70],{"class":42},[36,42959,32184],{"class":50},[36,42961,32187],{"class":473},[36,42963,70],{"class":42},[36,42965,42935],{"class":50},[36,42967,1859],{"class":73},[36,42969,42940],{"class":50},[36,42971,32196],{"class":473},[36,42973,70],{"class":42},[36,42975,42935],{"class":50},[36,42977,1885],{"class":73},[36,42979,42940],{"class":50},[36,42981,32205],{"class":473},[36,42983,70],{"class":42},[36,42985,1741],{"class":73},[36,42987,2045],{"class":50},[36,42989,32214],{"class":473},[36,42991,70],{"class":42},[36,42993,1885],{"class":73},[36,42995,1680],{"class":50},[36,42997,42998],{"class":38,"line":216},[36,42999,43000],{"class":124},"        # 路线3：定义1*1卷积和5*5\n",[36,43002,43003,43005,43008,43010,43012,43014,43016,43018,43020,43022,43025,43027,43029,43031,43033,43035],{"class":38,"line":231},[36,43004,32176],{"class":73},[36,43006,43007],{"class":50},".p3_1",[36,43009,70],{"class":42},[36,43011,32184],{"class":50},[36,43013,32187],{"class":473},[36,43015,70],{"class":42},[36,43017,42891],{"class":50},[36,43019,32196],{"class":473},[36,43021,70],{"class":42},[36,43023,43024],{"class":50},"c3[",[36,43026,1859],{"class":73},[36,43028,42940],{"class":50},[36,43030,32205],{"class":473},[36,43032,70],{"class":42},[36,43034,1885],{"class":73},[36,43036,1680],{"class":50},[36,43038,43039,43041,43044,43046,43048,43050,43052,43054,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082],{"class":38,"line":236},[36,43040,32176],{"class":73},[36,43042,43043],{"class":50},".p3_2",[36,43045,70],{"class":42},[36,43047,32184],{"class":50},[36,43049,32187],{"class":473},[36,43051,70],{"class":42},[36,43053,43024],{"class":50},[36,43055,1859],{"class":73},[36,43057,42940],{"class":50},[36,43059,32196],{"class":473},[36,43061,70],{"class":42},[36,43063,43024],{"class":50},[36,43065,1885],{"class":73},[36,43067,42940],{"class":50},[36,43069,32205],{"class":473},[36,43071,70],{"class":42},[36,43073,1987],{"class":73},[36,43075,2045],{"class":50},[36,43077,32214],{"class":473},[36,43079,70],{"class":42},[36,43081,1747],{"class":73},[36,43083,1680],{"class":50},[36,43085,43086],{"class":38,"line":247},[36,43087,43088],{"class":124},"        # 路线4：定义3*3最大池化和1*1卷积\n",[36,43090,43091],{"class":38,"line":637},[36,43092,43093],{"class":124},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[36,43095,43096,43098,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125,43127],{"class":38,"line":646},[36,43097,32176],{"class":73},[36,43099,43100],{"class":50},".p4_1",[36,43102,70],{"class":42},[36,43104,36160],{"class":50},[36,43106,32205],{"class":473},[36,43108,70],{"class":42},[36,43110,1741],{"class":73},[36,43112,2045],{"class":50},[36,43114,32260],{"class":473},[36,43116,70],{"class":42},[36,43118,1885],{"class":73},[36,43120,2045],{"class":50},[36,43122,32214],{"class":473},[36,43124,70],{"class":42},[36,43126,1885],{"class":73},[36,43128,1680],{"class":50},[36,43130,43131,43133,43136,43138,43140,43142,43144,43146,43148,43150,43153,43155,43157,43159],{"class":38,"line":655},[36,43132,32176],{"class":73},[36,43134,43135],{"class":50},".p4_2",[36,43137,70],{"class":42},[36,43139,32184],{"class":50},[36,43141,32187],{"class":473},[36,43143,70],{"class":42},[36,43145,42891],{"class":50},[36,43147,32196],{"class":473},[36,43149,70],{"class":42},[36,43151,43152],{"class":50},"c4,",[36,43154,32205],{"class":473},[36,43156,70],{"class":42},[36,43158,1885],{"class":73},[36,43160,1680],{"class":50},[36,43162,43163],{"class":38,"line":660},[36,43164,58],{"emptyLinePlaceholder":57},[36,43166,43167,43169,43171],{"class":38,"line":665},[36,43168,32132],{"class":42},[36,43170,32424],{"class":46},[36,43172,32427],{"class":50},[36,43174,43175,43178,43180,43182,43184,43186],{"class":38,"line":674},[36,43176,43177],{"class":50},"        p1",[36,43179,70],{"class":42},[36,43181,32154],{"class":73},[36,43183,36515],{"class":50},[36,43185,32154],{"class":73},[36,43187,43188],{"class":50},".p1_1(x))\n",[36,43190,43191,43193,43195,43197,43199,43201,43204,43206,43208,43210],{"class":38,"line":679},[36,43192,8561],{"class":50},[36,43194,70],{"class":42},[36,43196,32154],{"class":73},[36,43198,36515],{"class":50},[36,43200,32154],{"class":73},[36,43202,43203],{"class":50},".p2_2(",[36,43205,32154],{"class":73},[36,43207,36515],{"class":50},[36,43209,32154],{"class":73},[36,43211,43212],{"class":50},".p2_1(x))))\n",[36,43214,43215,43218,43220,43222,43224,43226,43229,43231,43233,43235],{"class":38,"line":692},[36,43216,43217],{"class":50},"        p3",[36,43219,70],{"class":42},[36,43221,32154],{"class":73},[36,43223,36515],{"class":50},[36,43225,32154],{"class":73},[36,43227,43228],{"class":50},".p3_2(",[36,43230,32154],{"class":73},[36,43232,36515],{"class":50},[36,43234,32154],{"class":73},[36,43236,43237],{"class":50},".p3_1(x))))\n",[36,43239,43240,43243,43245,43247,43249,43251,43254,43256],{"class":38,"line":705},[36,43241,43242],{"class":50},"        p4",[36,43244,70],{"class":42},[36,43246,32154],{"class":73},[36,43248,36515],{"class":50},[36,43250,32154],{"class":73},[36,43252,43253],{"class":50},".p4_2(",[36,43255,32154],{"class":73},[36,43257,43258],{"class":50},".p4_1(x)))\n",[36,43260,43261],{"class":38,"line":710},[36,43262,43263],{"class":124},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[36,43265,43266,43268,43271,43273,43275,43277],{"class":38,"line":722},[36,43267,16081],{"class":42},[36,43269,43270],{"class":50}," torch.cat((p1,p2,p3,p4),",[36,43272,34016],{"class":473},[36,43274,70],{"class":42},[36,43276,1885],{"class":73},[36,43278,1680],{"class":50},[36,43280,43281],{"class":38,"line":750},[36,43282,58],{"emptyLinePlaceholder":57},[36,43284,43285],{"class":38,"line":755},[36,43286,58],{"emptyLinePlaceholder":57},[36,43288,43289],{"class":38,"line":777},[36,43290,43291],{"class":124},"# 搭建GoogLeNet网络\n",[36,43293,43294,43296,43299,43301,43303,43305,43307],{"class":38,"line":802},[36,43295,16023],{"class":42},[36,43297,43298],{"class":46}," GoogLeNet",[36,43300,222],{"class":50},[36,43302,32109],{"class":46},[36,43304,2225],{"class":50},[36,43306,32114],{"class":46},[36,43308,32117],{"class":50},[36,43310,43311],{"class":38,"line":807},[36,43312,43313],{"class":124},"    # 必须把Inception导入到里边\n",[36,43315,43316,43318,43320],{"class":38,"line":818},[36,43317,32132],{"class":42},[36,43319,32135],{"class":73},[36,43321,43322],{"class":50},"(self,Inception):\n",[36,43324,43325,43327,43330,43332,43334,43336],{"class":38,"line":843},[36,43326,32148],{"class":73},[36,43328,43329],{"class":50},"(GoogLeNet,",[36,43331,32154],{"class":73},[36,43333,32157],{"class":50},[36,43335,32160],{"class":73},[36,43337,3484],{"class":50},[36,43339,43340,43342,43345,43347],{"class":38,"line":848},[36,43341,32176],{"class":73},[36,43343,43344],{"class":50},".b1",[36,43346,70],{"class":42},[36,43348,39340],{"class":50},[36,43350,43351,43353,43355,43357,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383,43385,43387,43389,43391],{"class":38,"line":859},[36,43352,39345],{"class":50},[36,43354,32187],{"class":473},[36,43356,70],{"class":42},[36,43358,1885],{"class":73},[36,43360,2045],{"class":50},[36,43362,32196],{"class":473},[36,43364,70],{"class":42},[36,43366,1871],{"class":73},[36,43368,2045],{"class":50},[36,43370,32205],{"class":473},[36,43372,70],{"class":42},[36,43374,2036],{"class":73},[36,43376,2045],{"class":50},[36,43378,32260],{"class":473},[36,43380,70],{"class":42},[36,43382,1747],{"class":73},[36,43384,2045],{"class":50},[36,43386,32214],{"class":473},[36,43388,70],{"class":42},[36,43390,1741],{"class":73},[36,43392,39378],{"class":50},[36,43394,43395],{"class":38,"line":864},[36,43396,39383],{"class":50},[36,43398,43399,43401,43403,43405,43407,43409,43411,43413,43415,43417,43419,43421,43423],{"class":38,"line":873},[36,43400,39428],{"class":50},[36,43402,32205],{"class":473},[36,43404,70],{"class":42},[36,43406,1741],{"class":73},[36,43408,2045],{"class":50},[36,43410,32260],{"class":473},[36,43412,70],{"class":42},[36,43414,1747],{"class":73},[36,43416,2045],{"class":50},[36,43418,32214],{"class":473},[36,43420,70],{"class":42},[36,43422,1885],{"class":73},[36,43424,1680],{"class":50},[36,43426,43427],{"class":38,"line":9454},[36,43428,39457],{"class":50},[36,43430,43431,43433,43436,43438],{"class":38,"line":9481},[36,43432,32176],{"class":73},[36,43434,43435],{"class":50},".b2",[36,43437,70],{"class":42},[36,43439,39340],{"class":50},[36,43441,43442,43444,43446,43448,43450,43452,43454,43456,43458,43460,43462,43464,43466],{"class":38,"line":9486},[36,43443,39345],{"class":50},[36,43445,32187],{"class":473},[36,43447,70],{"class":42},[36,43449,1871],{"class":73},[36,43451,2045],{"class":50},[36,43453,32196],{"class":473},[36,43455,70],{"class":42},[36,43457,1871],{"class":73},[36,43459,2045],{"class":50},[36,43461,32205],{"class":473},[36,43463,70],{"class":42},[36,43465,1885],{"class":73},[36,43467,39378],{"class":50},[36,43469,43470],{"class":38,"line":9492},[36,43471,39383],{"class":50},[36,43473,43474,43476,43478,43480,43482,43484,43486,43488,43491,43493,43495,43497,43499,43501,43503,43505,43507],{"class":38,"line":9504},[36,43475,39345],{"class":50},[36,43477,32187],{"class":473},[36,43479,70],{"class":42},[36,43481,1871],{"class":73},[36,43483,2045],{"class":50},[36,43485,32196],{"class":473},[36,43487,70],{"class":42},[36,43489,43490],{"class":73},"192",[36,43492,2045],{"class":50},[36,43494,32205],{"class":473},[36,43496,70],{"class":42},[36,43498,1741],{"class":73},[36,43500,2045],{"class":50},[36,43502,32214],{"class":473},[36,43504,70],{"class":42},[36,43506,1885],{"class":73},[36,43508,39378],{"class":50},[36,43510,43511],{"class":38,"line":9516},[36,43512,39383],{"class":50},[36,43514,43515,43517,43519,43521,43523,43525,43527,43529,43531,43533,43535,43537,43539],{"class":38,"line":9528},[36,43516,39428],{"class":50},[36,43518,32205],{"class":473},[36,43520,70],{"class":42},[36,43522,1741],{"class":73},[36,43524,2045],{"class":50},[36,43526,32260],{"class":473},[36,43528,70],{"class":42},[36,43530,1747],{"class":73},[36,43532,2045],{"class":50},[36,43534,32214],{"class":473},[36,43536,70],{"class":42},[36,43538,1885],{"class":73},[36,43540,1680],{"class":50},[36,43542,43543],{"class":38,"line":11184},[36,43544,39457],{"class":50},[36,43546,43547,43549,43552,43554],{"class":38,"line":11209},[36,43548,32176],{"class":73},[36,43550,43551],{"class":50},".b3",[36,43553,70],{"class":42},[36,43555,39340],{"class":50},[36,43557,43558,43561,43563,43565,43567,43570,43572,43574,43576,43579,43581,43583,43585,43588,43590],{"class":38,"line":11232},[36,43559,43560],{"class":50},"            Inception(",[36,43562,43490],{"class":73},[36,43564,2045],{"class":50},[36,43566,1871],{"class":73},[36,43568,43569],{"class":50},",(",[36,43571,1877],{"class":73},[36,43573,2045],{"class":50},[36,43575,33401],{"class":73},[36,43577,43578],{"class":50},"),(",[36,43580,2268],{"class":73},[36,43582,2045],{"class":50},[36,43584,1865],{"class":73},[36,43586,43587],{"class":50},"),",[36,43589,1865],{"class":73},[36,43591,39378],{"class":50},[36,43593,43594,43596,43598,43600,43602,43604,43606,43608,43610,43612,43614,43616,43618,43620,43622],{"class":38,"line":11256},[36,43595,43560],{"class":50},[36,43597,36201],{"class":73},[36,43599,2045],{"class":50},[36,43601,33401],{"class":73},[36,43603,43569],{"class":50},[36,43605,33401],{"class":73},[36,43607,2045],{"class":50},[36,43609,43490],{"class":73},[36,43611,43578],{"class":50},[36,43613,1865],{"class":73},[36,43615,2045],{"class":50},[36,43617,1877],{"class":73},[36,43619,43587],{"class":50},[36,43621,1871],{"class":73},[36,43623,39378],{"class":50},[36,43625,43626,43628,43630,43632,43634,43636,43638,43640,43642,43644,43646,43648,43650],{"class":38,"line":11261},[36,43627,39428],{"class":50},[36,43629,32205],{"class":473},[36,43631,70],{"class":42},[36,43633,1741],{"class":73},[36,43635,2045],{"class":50},[36,43637,32260],{"class":473},[36,43639,70],{"class":42},[36,43641,1747],{"class":73},[36,43643,2045],{"class":50},[36,43645,32214],{"class":473},[36,43647,70],{"class":42},[36,43649,1885],{"class":73},[36,43651,1680],{"class":50},[36,43653,43654],{"class":38,"line":11266},[36,43655,39457],{"class":50},[36,43657,43658,43660,43663,43665],{"class":38,"line":11271},[36,43659,32176],{"class":73},[36,43661,43662],{"class":50},".b4",[36,43664,70],{"class":42},[36,43666,39340],{"class":50},[36,43668,43669,43671,43674,43676,43678,43680,43682,43684,43687,43689,43691,43693,43695,43697,43699],{"class":38,"line":11280},[36,43670,43560],{"class":50},[36,43672,43673],{"class":73},"480",[36,43675,2045],{"class":50},[36,43677,43490],{"class":73},[36,43679,43569],{"class":50},[36,43681,1877],{"class":73},[36,43683,2045],{"class":50},[36,43685,43686],{"class":73},"208",[36,43688,43578],{"class":50},[36,43690,2268],{"class":73},[36,43692,2045],{"class":50},[36,43694,2274],{"class":73},[36,43696,43587],{"class":50},[36,43698,1871],{"class":73},[36,43700,39378],{"class":50},[36,43702,43703,43705,43707,43709,43711,43713,43715,43717,43719,43721,43723,43725,43727,43729,43731],{"class":38,"line":11285},[36,43704,43560],{"class":50},[36,43706,39788],{"class":73},[36,43708,2045],{"class":50},[36,43710,22377],{"class":73},[36,43712,43569],{"class":50},[36,43714,2285],{"class":73},[36,43716,2045],{"class":50},[36,43718,32832],{"class":73},[36,43720,43578],{"class":50},[36,43722,2467],{"class":73},[36,43724,2045],{"class":50},[36,43726,1871],{"class":73},[36,43728,43587],{"class":50},[36,43730,1871],{"class":73},[36,43732,39378],{"class":50},[36,43734,43735,43737,43739,43741,43743,43745,43747,43749,43751,43753,43755,43757,43759,43761,43763],{"class":38,"line":11291},[36,43736,43560],{"class":50},[36,43738,39788],{"class":73},[36,43740,2045],{"class":50},[36,43742,33401],{"class":73},[36,43744,43569],{"class":50},[36,43746,33401],{"class":73},[36,43748,2045],{"class":50},[36,43750,36201],{"class":73},[36,43752,43578],{"class":50},[36,43754,2467],{"class":73},[36,43756,2045],{"class":50},[36,43758,1871],{"class":73},[36,43760,43587],{"class":50},[36,43762,1871],{"class":73},[36,43764,39378],{"class":50},[36,43766,43767,43769,43771,43773,43775,43777,43779,43781,43784,43786,43788,43790,43792,43794,43796],{"class":38,"line":11312},[36,43768,43560],{"class":50},[36,43770,39788],{"class":73},[36,43772,2045],{"class":50},[36,43774,2285],{"class":73},[36,43776,43569],{"class":50},[36,43778,33401],{"class":73},[36,43780,2045],{"class":50},[36,43782,43783],{"class":73},"288",[36,43785,43578],{"class":50},[36,43787,1865],{"class":73},[36,43789,2045],{"class":50},[36,43791,1871],{"class":73},[36,43793,43587],{"class":50},[36,43795,1871],{"class":73},[36,43797,39378],{"class":50},[36,43799,43800,43802,43805,43807,43809,43811,43813,43815,43818,43820,43822,43824,43826,43828,43830],{"class":38,"line":11318},[36,43801,43560],{"class":50},[36,43803,43804],{"class":73},"528",[36,43806,2045],{"class":50},[36,43808,36201],{"class":73},[36,43810,43569],{"class":50},[36,43812,22377],{"class":73},[36,43814,2045],{"class":50},[36,43816,43817],{"class":73},"320",[36,43819,43578],{"class":50},[36,43821,1865],{"class":73},[36,43823,2045],{"class":50},[36,43825,33401],{"class":73},[36,43827,43587],{"class":50},[36,43829,33401],{"class":73},[36,43831,39378],{"class":50},[36,43833,43834,43836,43838,43840,43842,43844,43846,43848,43850,43852,43854,43856,43858],{"class":38,"line":11332},[36,43835,39428],{"class":50},[36,43837,32205],{"class":473},[36,43839,70],{"class":42},[36,43841,1741],{"class":73},[36,43843,2045],{"class":50},[36,43845,32260],{"class":473},[36,43847,70],{"class":42},[36,43849,1747],{"class":73},[36,43851,2045],{"class":50},[36,43853,32214],{"class":473},[36,43855,70],{"class":42},[36,43857,1885],{"class":73},[36,43859,1680],{"class":50},[36,43861,43862],{"class":38,"line":11338},[36,43863,39457],{"class":50},[36,43865,43866,43868,43871,43873],{"class":38,"line":11365},[36,43867,32176],{"class":73},[36,43869,43870],{"class":50},".b5",[36,43872,70],{"class":42},[36,43874,39340],{"class":50},[36,43876,43877,43879,43882,43884,43886,43888,43890,43892,43894,43896,43898,43900,43902,43904,43906],{"class":38,"line":11374},[36,43878,43560],{"class":50},[36,43880,43881],{"class":73},"832",[36,43883,2045],{"class":50},[36,43885,36201],{"class":73},[36,43887,43569],{"class":50},[36,43889,22377],{"class":73},[36,43891,2045],{"class":50},[36,43893,43817],{"class":73},[36,43895,43578],{"class":50},[36,43897,1865],{"class":73},[36,43899,2045],{"class":50},[36,43901,33401],{"class":73},[36,43903,43587],{"class":50},[36,43905,33401],{"class":73},[36,43907,39378],{"class":50},[36,43909,43910,43912,43914,43916,43918,43920,43922,43924,43926,43928,43930,43932,43934,43936,43938],{"class":38,"line":11380},[36,43911,43560],{"class":50},[36,43913,43881],{"class":73},[36,43915,2045],{"class":50},[36,43917,36271],{"class":73},[36,43919,43569],{"class":50},[36,43921,43490],{"class":73},[36,43923,2045],{"class":50},[36,43925,36271],{"class":73},[36,43927,43578],{"class":50},[36,43929,2274],{"class":73},[36,43931,2045],{"class":50},[36,43933,33401],{"class":73},[36,43935,43587],{"class":50},[36,43937,33401],{"class":73},[36,43939,39378],{"class":50},[36,43941,43942,43945,43947,43949,43951],{"class":38,"line":11388},[36,43943,43944],{"class":50},"            nn.AdaptiveAvgPool2d((",[36,43946,1885],{"class":73},[36,43948,2045],{"class":50},[36,43950,1885],{"class":73},[36,43952,43953],{"class":50},")),\n",[36,43955,43956],{"class":38,"line":11393},[36,43957,40121],{"class":50},[36,43959,43960,43962,43965,43967,43969],{"class":38,"line":17933},[36,43961,40126],{"class":50},[36,43963,43964],{"class":73},"1024",[36,43966,2045],{"class":50},[36,43968,2113],{"class":73},[36,43970,1680],{"class":50},[36,43972,43973],{"class":38,"line":17939},[36,43974,39457],{"class":50},[36,43976,43977],{"class":38,"line":17962},[36,43978,43979],{"class":124},"        # 对模型参数初始化\n",[36,43981,43982,43984,43986,43988,43990],{"class":38,"line":17968},[36,43983,4894],{"class":42},[36,43985,40199],{"class":50},[36,43987,27374],{"class":42},[36,43989,40204],{"class":73},[36,43991,40207],{"class":50},[36,43993,43994,43996,43998],{"class":38,"line":17991},[36,43995,6131],{"class":42},[36,43997,40219],{"class":73},[36,43999,40222],{"class":50},[36,44001,44002,44004,44007,44009,44012,44014,44016,44018,44020],{"class":38,"line":18005},[36,44003,40232],{"class":50},[36,44005,44006],{"class":473},"mode",[36,44008,70],{"class":42},[36,44010,44011],{"class":110},"'fan_out'",[36,44013,2045],{"class":50},[36,44015,40235],{"class":473},[36,44017,70],{"class":42},[36,44019,40240],{"class":110},[36,44021,1680],{"class":50},[36,44023,44024],{"class":38,"line":18025},[36,44025,44026],{"class":124},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[36,44028,44029],{"class":38,"line":18031},[36,44030,44031],{"class":124},"                # ② mode = 'fan_out'决定使用的fan值：\n",[36,44033,44034],{"class":38,"line":18042},[36,44035,44036],{"class":124},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[36,44038,44039],{"class":38,"line":18065},[36,44040,44041],{"class":124},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[36,44043,44044],{"class":38,"line":18087},[36,44045,44046],{"class":124},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[36,44048,44049],{"class":38,"line":18092},[36,44050,44051],{"class":124},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[36,44053,44054,44056,44058,44060,44062,44064],{"class":38,"line":18098},[36,44055,40252],{"class":42},[36,44057,40255],{"class":50},[36,44059,40258],{"class":42},[36,44061,40261],{"class":42},[36,44063,40264],{"class":73},[36,44065,5230],{"class":50},[36,44067,44068,44070,44072],{"class":38,"line":18112},[36,44069,40276],{"class":50},[36,44071,1859],{"class":73},[36,44073,1680],{"class":50},[36,44075,44076,44079,44081],{"class":38,"line":18125},[36,44077,44078],{"class":42},"                elif",[36,44080,40219],{"class":73},[36,44082,40295],{"class":50},[36,44084,44085,44088,44090,44092,44094],{"class":38,"line":18130},[36,44086,44087],{"class":50},"                    nn.init.normal_(m.weight,",[36,44089,1859],{"class":73},[36,44091,2045],{"class":50},[36,44093,40317],{"class":73},[36,44095,1680],{"class":50},[36,44097,44098,44101,44103,44105,44107,44109],{"class":38,"line":18144},[36,44099,44100],{"class":42},"                    if",[36,44102,40255],{"class":50},[36,44104,40258],{"class":42},[36,44106,40261],{"class":42},[36,44108,40264],{"class":73},[36,44110,5230],{"class":50},[36,44112,44113,44116,44118],{"class":38,"line":18149},[36,44114,44115],{"class":50},"                        nn.init.constant_(m.bias,",[36,44117,1859],{"class":73},[36,44119,1680],{"class":50},[36,44121,44122],{"class":38,"line":18155},[36,44123,36496],{"class":124},[36,44125,44126,44128,44130],{"class":38,"line":18160},[36,44127,32132],{"class":42},[36,44129,32424],{"class":46},[36,44131,32427],{"class":50},[36,44133,44134,44136,44138,44140],{"class":38,"line":18174},[36,44135,32432],{"class":50},[36,44137,70],{"class":42},[36,44139,32154],{"class":73},[36,44141,44142],{"class":50},".b1(x)\n",[36,44144,44145,44147,44149,44151],{"class":38,"line":18179},[36,44146,32432],{"class":50},[36,44148,70],{"class":42},[36,44150,32154],{"class":73},[36,44152,44153],{"class":50},".b2(x)\n",[36,44155,44156,44158,44160,44162],{"class":38,"line":18184},[36,44157,32432],{"class":50},[36,44159,70],{"class":42},[36,44161,32154],{"class":73},[36,44163,44164],{"class":50},".b3(x)\n",[36,44166,44167,44169,44171,44173],{"class":38,"line":18198},[36,44168,32432],{"class":50},[36,44170,70],{"class":42},[36,44172,32154],{"class":73},[36,44174,44175],{"class":50},".b4(x)\n",[36,44177,44178,44180,44182,44184],{"class":38,"line":18210},[36,44179,32432],{"class":50},[36,44181,70],{"class":42},[36,44183,32154],{"class":73},[36,44185,44186],{"class":50},".b5(x)\n",[36,44188,44189,44191],{"class":38,"line":18215},[36,44190,16081],{"class":42},[36,44192,32540],{"class":50},[36,44194,44195],{"class":38,"line":18228},[36,44196,58],{"emptyLinePlaceholder":57},[36,44198,44199],{"class":38,"line":18233},[36,44200,44201],{"class":124},"# 模型展示\n",[36,44203,44204,44206,44208,44210,44212],{"class":38,"line":18238},[36,44205,3061],{"class":42},[36,44207,32551],{"class":73},[36,44209,4441],{"class":42},[36,44211,32556],{"class":110},[36,44213,5230],{"class":50},[36,44215,44216,44218,44220,44222,44224,44226,44228,44230,44232],{"class":38,"line":18243},[36,44217,32568],{"class":50},[36,44219,70],{"class":42},[36,44221,31782],{"class":50},[36,44223,32575],{"class":110},[36,44225,3222],{"class":42},[36,44227,32580],{"class":50},[36,44229,3219],{"class":42},[36,44231,31807],{"class":110},[36,44233,1680],{"class":50},[36,44235,44236,44238,44240],{"class":38,"line":18256},[36,44237,32620],{"class":50},[36,44239,70],{"class":42},[36,44241,44242],{"class":50},"GoogLeNet(Inception).to(device)\n",[36,44244,44245,44247,44249,44251,44253,44255,44257,44259],{"class":38,"line":18261},[36,44246,32630],{"class":73},[36,44248,32633],{"class":50},[36,44250,1885],{"class":73},[36,44252,2045],{"class":50},[36,44254,32832],{"class":73},[36,44256,2045],{"class":50},[36,44258,32832],{"class":73},[36,44260,32646],{"class":50},[256,44262,44263],{"start":54},[259,44264,40514],{},[26,44266,44268],{"className":31709,"code":44267,"language":31711,"meta":31,"style":31},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import FashionMNIST\nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    train_data=FashionMNIST('.\u002Fdata',\n                            train=True,\n                            transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                            download=True)\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=30)\n    matplot_acc_loss(train_process)\n",[33,44269,44270,44276,44282,44292,44298,44308,44318,44328,44338,44348,44352,44363,44373,44377,44381,44385,44393,44405,44415,44431,44441,44473,44487,44497,44507,44511,44521,44535,44545,44555,44565,44571,44575,44579,44583,44587,44591,44599,44619,44623,44627,44631,44635,44639,44655,44659,44663,44671,44675,44679,44687,44691,44695,44699,44707,44711,44715,44719,44723,44731,44735,44743,44747,44755,44759,44767,44771,44779,44783,44787,44795,44799,44803,44807,44819,44843,44857,44861,44865,44869,44877,44881,44889,44893,44901,44905,44913,44917,44925,44929,44937,44941,44953,44957,44965,44969,44977,44981,44985,44989,44993,45001,45005,45021,45025,45033,45037,45041,45045,45049,45053,45057,45061,45077,45081,45093,45097,45109,45113,45125,45129,45137,45141,45149,45153,45157,45161,45167,45171,45179,45183,45199,45203,45211,45215,45231,45243,45247,45259,45263,45267,45275,45279,45283,45291,45295,45303,45307,45315,45319,45323,45365,45407,45411,45415,45431,45435,45451,45455,45459,45467,45471,45475,45487,45525,45529,45533,45541,45545,45559,45569,45575,45581,45587,45593,45597,45601,45607,45611,45615,45623,45627,45645,45649,45653,45657,45673,45677,45681,45685,45689,45693,45713,45733,45737,45741,45745,45753,45761,45765,45781,45801,45821,45825,45829,45837,45845,45849,45853,45857,45869,45873,45883,45891,45908],{"__ignoreMap":31},[36,44271,44272,44274],{"class":38,"line":39},[36,44273,31723],{"class":42},[36,44275,33153],{"class":50},[36,44277,44278,44280],{"class":38,"line":54},[36,44279,31723],{"class":42},[36,44281,33160],{"class":50},[36,44283,44284,44286,44288,44290],{"class":38,"line":61},[36,44285,31723],{"class":42},[36,44287,33171],{"class":50},[36,44289,32714],{"class":42},[36,44291,33176],{"class":50},[36,44293,44294,44296],{"class":38,"line":80},[36,44295,31723],{"class":42},[36,44297,31726],{"class":50},[36,44299,44300,44302,44304,44306],{"class":38,"line":96},[36,44301,32068],{"class":42},[36,44303,32746],{"class":50},[36,44305,31723],{"class":42},[36,44307,33193],{"class":50},[36,44309,44310,44312,44314,44316],{"class":38,"line":101},[36,44311,32068],{"class":42},[36,44313,32699],{"class":50},[36,44315,31723],{"class":42},[36,44317,32704],{"class":50},[36,44319,44320,44322,44324,44326],{"class":38,"line":128},[36,44321,32068],{"class":42},[36,44323,32729],{"class":50},[36,44325,31723],{"class":42},[36,44327,32734],{"class":50},[36,44329,44330,44332,44334,44336],{"class":38,"line":149},[36,44331,31723],{"class":42},[36,44333,32746],{"class":50},[36,44335,32714],{"class":42},[36,44337,32751],{"class":50},[36,44339,44340,44342,44344,44346],{"class":38,"line":154},[36,44341,31723],{"class":42},[36,44343,32763],{"class":50},[36,44345,32714],{"class":42},[36,44347,32768],{"class":50},[36,44349,44350],{"class":38,"line":167},[36,44351,33238],{"class":124},[36,44353,44354,44356,44358,44360],{"class":38,"line":172},[36,44355,32068],{"class":42},[36,44357,33245],{"class":50},[36,44359,31723],{"class":42},[36,44361,44362],{"class":50}," GoogLeNet, Inception\n",[36,44364,44365,44367,44369,44371],{"class":38,"line":192},[36,44366,32068],{"class":42},[36,44368,32071],{"class":50},[36,44370,31723],{"class":42},[36,44372,32076],{"class":50},[36,44374,44375],{"class":38,"line":211},[36,44376,58],{"emptyLinePlaceholder":57},[36,44378,44379],{"class":38,"line":216},[36,44380,58],{"emptyLinePlaceholder":57},[36,44382,44383],{"class":38,"line":231},[36,44384,33273],{"class":124},[36,44386,44387,44389,44391],{"class":38,"line":236},[36,44388,33278],{"class":42},[36,44390,33281],{"class":46},[36,44392,33284],{"class":50},[36,44394,44395,44397,44399,44401,44403],{"class":38,"line":247},[36,44396,33289],{"class":50},[36,44398,70],{"class":42},[36,44400,32786],{"class":50},[36,44402,32794],{"class":110},[36,44404,32797],{"class":50},[36,44406,44407,44409,44411,44413],{"class":38,"line":637},[36,44408,33302],{"class":473},[36,44410,70],{"class":42},[36,44412,32807],{"class":73},[36,44414,32797],{"class":50},[36,44416,44417,44419,44421,44423,44425,44427,44429],{"class":38,"line":646},[36,44418,33313],{"class":473},[36,44420,70],{"class":42},[36,44422,32824],{"class":50},[36,44424,32827],{"class":473},[36,44426,70],{"class":42},[36,44428,36780],{"class":73},[36,44430,32835],{"class":50},[36,44432,44433,44435,44437,44439],{"class":38,"line":655},[36,44434,33330],{"class":473},[36,44436,70],{"class":42},[36,44438,32807],{"class":73},[36,44440,1680],{"class":50},[36,44442,44443,44445,44447,44449,44451,44453,44455,44457,44459,44461,44463,44465,44467,44469,44471],{"class":38,"line":660},[36,44444,33341],{"class":50},[36,44446,70],{"class":42},[36,44448,33346],{"class":50},[36,44450,33349],{"class":73},[36,44452,222],{"class":50},[36,44454,33354],{"class":73},[36,44456,2122],{"class":42},[36,44458,8832],{"class":73},[36,44460,33361],{"class":50},[36,44462,33349],{"class":73},[36,44464,222],{"class":50},[36,44466,33368],{"class":73},[36,44468,2122],{"class":42},[36,44470,8832],{"class":73},[36,44472,33375],{"class":50},[36,44474,44475,44477,44479,44481,44483,44485],{"class":38,"line":665},[36,44476,33380],{"class":50},[36,44478,70],{"class":42},[36,44480,33385],{"class":50},[36,44482,32868],{"class":473},[36,44484,70],{"class":42},[36,44486,32873],{"class":50},[36,44488,44489,44491,44493,44495],{"class":38,"line":674},[36,44490,33396],{"class":473},[36,44492,70],{"class":42},[36,44494,1865],{"class":73},[36,44496,32797],{"class":50},[36,44498,44499,44501,44503,44505],{"class":38,"line":679},[36,44500,33408],{"class":473},[36,44502,70],{"class":42},[36,44504,32807],{"class":73},[36,44506,32797],{"class":50},[36,44508,44509],{"class":38,"line":692},[36,44510,33419],{"class":124},[36,44512,44513,44515,44517,44519],{"class":38,"line":705},[36,44514,33424],{"class":473},[36,44516,70],{"class":42},[36,44518,2062],{"class":73},[36,44520,1680],{"class":50},[36,44522,44523,44525,44527,44529,44531,44533],{"class":38,"line":710},[36,44524,33435],{"class":50},[36,44526,70],{"class":42},[36,44528,32865],{"class":50},[36,44530,32868],{"class":473},[36,44532,70],{"class":42},[36,44534,33446],{"class":50},[36,44536,44537,44539,44541,44543],{"class":38,"line":722},[36,44538,33451],{"class":473},[36,44540,70],{"class":42},[36,44542,1865],{"class":73},[36,44544,32797],{"class":50},[36,44546,44547,44549,44551,44553],{"class":38,"line":750},[36,44548,33462],{"class":473},[36,44550,70],{"class":42},[36,44552,32807],{"class":73},[36,44554,32797],{"class":50},[36,44556,44557,44559,44561,44563],{"class":38,"line":755},[36,44558,33473],{"class":473},[36,44560,70],{"class":42},[36,44562,2062],{"class":73},[36,44564,1680],{"class":50},[36,44566,44567,44569],{"class":38,"line":777},[36,44568,239],{"class":42},[36,44570,33486],{"class":50},[36,44572,44573],{"class":38,"line":802},[36,44574,58],{"emptyLinePlaceholder":57},[36,44576,44577],{"class":38,"line":807},[36,44578,33495],{"class":124},[36,44580,44581],{"class":38,"line":818},[36,44582,33500],{"class":124},[36,44584,44585],{"class":38,"line":843},[36,44586,58],{"emptyLinePlaceholder":57},[36,44588,44589],{"class":38,"line":848},[36,44590,33509],{"class":124},[36,44592,44593,44595,44597],{"class":38,"line":859},[36,44594,33278],{"class":42},[36,44596,33516],{"class":46},[36,44598,33519],{"class":50},[36,44600,44601,44603,44605,44607,44609,44611,44613,44615,44617],{"class":38,"line":864},[36,44602,32568],{"class":50},[36,44604,70],{"class":42},[36,44606,31782],{"class":50},[36,44608,32575],{"class":110},[36,44610,3222],{"class":42},[36,44612,32580],{"class":50},[36,44614,3219],{"class":42},[36,44616,33538],{"class":110},[36,44618,1680],{"class":50},[36,44620,44621],{"class":38,"line":873},[36,44622,58],{"emptyLinePlaceholder":57},[36,44624,44625],{"class":38,"line":9454},[36,44626,58],{"emptyLinePlaceholder":57},[36,44628,44629],{"class":38,"line":9481},[36,44630,33553],{"class":124},[36,44632,44633],{"class":38,"line":9486},[36,44634,33558],{"class":124},[36,44636,44637],{"class":38,"line":9492},[36,44638,33563],{"class":124},[36,44640,44641,44643,44645,44647,44649,44651,44653],{"class":38,"line":9504},[36,44642,33568],{"class":50},[36,44644,70],{"class":42},[36,44646,33573],{"class":50},[36,44648,33576],{"class":473},[36,44650,70],{"class":42},[36,44652,33581],{"class":73},[36,44654,1680],{"class":50},[36,44656,44657],{"class":38,"line":9516},[36,44658,58],{"emptyLinePlaceholder":57},[36,44660,44661],{"class":38,"line":9528},[36,44662,33592],{"class":124},[36,44664,44665,44667,44669],{"class":38,"line":11184},[36,44666,33597],{"class":50},[36,44668,70],{"class":42},[36,44670,33602],{"class":50},[36,44672,44673],{"class":38,"line":11209},[36,44674,58],{"emptyLinePlaceholder":57},[36,44676,44677],{"class":38,"line":11232},[36,44678,33611],{"class":124},[36,44680,44681,44683,44685],{"class":38,"line":11256},[36,44682,32620],{"class":50},[36,44684,70],{"class":42},[36,44686,33620],{"class":50},[36,44688,44689],{"class":38,"line":11261},[36,44690,33625],{"class":124},[36,44692,44693],{"class":38,"line":11266},[36,44694,33630],{"class":124},[36,44696,44697],{"class":38,"line":11271},[36,44698,33635],{"class":124},[36,44700,44701,44703,44705],{"class":38,"line":11280},[36,44702,33640],{"class":50},[36,44704,70],{"class":42},[36,44706,33645],{"class":50},[36,44708,44709],{"class":38,"line":11285},[36,44710,58],{"emptyLinePlaceholder":57},[36,44712,44713],{"class":38,"line":11291},[36,44714,58],{"emptyLinePlaceholder":57},[36,44716,44717],{"class":38,"line":11312},[36,44718,33658],{"class":124},[36,44720,44721],{"class":38,"line":11318},[36,44722,33663],{"class":124},[36,44724,44725,44727,44729],{"class":38,"line":11332},[36,44726,33668],{"class":50},[36,44728,70],{"class":42},[36,44730,33673],{"class":73},[36,44732,44733],{"class":38,"line":11338},[36,44734,33678],{"class":124},[36,44736,44737,44739,44741],{"class":38,"line":11365},[36,44738,33683],{"class":50},[36,44740,70],{"class":42},[36,44742,33688],{"class":50},[36,44744,44745],{"class":38,"line":11374},[36,44746,33693],{"class":124},[36,44748,44749,44751,44753],{"class":38,"line":11380},[36,44750,33698],{"class":50},[36,44752,70],{"class":42},[36,44754,33688],{"class":50},[36,44756,44757],{"class":38,"line":11388},[36,44758,33707],{"class":124},[36,44760,44761,44763,44765],{"class":38,"line":11393},[36,44762,33712],{"class":50},[36,44764,70],{"class":42},[36,44766,33688],{"class":50},[36,44768,44769],{"class":38,"line":17933},[36,44770,33721],{"class":124},[36,44772,44773,44775,44777],{"class":38,"line":17939},[36,44774,33726],{"class":50},[36,44776,70],{"class":42},[36,44778,33688],{"class":50},[36,44780,44781],{"class":38,"line":17962},[36,44782,58],{"emptyLinePlaceholder":57},[36,44784,44785],{"class":38,"line":17968},[36,44786,33739],{"class":124},[36,44788,44789,44791,44793],{"class":38,"line":17991},[36,44790,33744],{"class":50},[36,44792,70],{"class":42},[36,44794,33749],{"class":50},[36,44796,44797],{"class":38,"line":18005},[36,44798,58],{"emptyLinePlaceholder":57},[36,44800,44801],{"class":38,"line":18025},[36,44802,58],{"emptyLinePlaceholder":57},[36,44804,44805],{"class":38,"line":18031},[36,44806,33762],{"class":124},[36,44808,44809,44811,44813,44815,44817],{"class":38,"line":18042},[36,44810,4692],{"class":42},[36,44812,33769],{"class":50},[36,44814,27374],{"class":42},[36,44816,33774],{"class":73},[36,44818,33777],{"class":50},[36,44820,44821,44823,44825,44827,44829,44831,44833,44835,44837,44839,44841],{"class":38,"line":18065},[36,44822,33782],{"class":73},[36,44824,222],{"class":50},[36,44826,33787],{"class":110},[36,44828,33790],{"class":73},[36,44830,2251],{"class":110},[36,44832,33790],{"class":73},[36,44834,1919],{"class":110},[36,44836,33799],{"class":50},[36,44838,2199],{"class":42},[36,44840,1885],{"class":73},[36,44842,31828],{"class":50},[36,44844,44845,44847,44849,44851,44853,44855],{"class":38,"line":18087},[36,44846,33782],{"class":73},[36,44848,222],{"class":50},[36,44850,33814],{"class":110},[36,44852,2122],{"class":42},[36,44854,2113],{"class":73},[36,44856,1680],{"class":50},[36,44858,44859],{"class":38,"line":18092},[36,44860,58],{"emptyLinePlaceholder":57},[36,44862,44863],{"class":38,"line":18098},[36,44864,33829],{"class":124},[36,44866,44867],{"class":38,"line":18112},[36,44868,33834],{"class":124},[36,44870,44871,44873,44875],{"class":38,"line":18125},[36,44872,33839],{"class":50},[36,44874,70],{"class":42},[36,44876,33673],{"class":73},[36,44878,44879],{"class":38,"line":18130},[36,44880,33848],{"class":124},[36,44882,44883,44885,44887],{"class":38,"line":18144},[36,44884,33853],{"class":50},[36,44886,70],{"class":42},[36,44888,4576],{"class":73},[36,44890,44891],{"class":38,"line":18149},[36,44892,33862],{"class":124},[36,44894,44895,44897,44899],{"class":38,"line":18155},[36,44896,33867],{"class":50},[36,44898,70],{"class":42},[36,44900,33673],{"class":73},[36,44902,44903],{"class":38,"line":18160},[36,44904,33876],{"class":124},[36,44906,44907,44909,44911],{"class":38,"line":18174},[36,44908,33881],{"class":50},[36,44910,70],{"class":42},[36,44912,4576],{"class":73},[36,44914,44915],{"class":38,"line":18179},[36,44916,33890],{"class":124},[36,44918,44919,44921,44923],{"class":38,"line":18184},[36,44920,33895],{"class":50},[36,44922,70],{"class":42},[36,44924,4576],{"class":73},[36,44926,44927],{"class":38,"line":18198},[36,44928,33904],{"class":124},[36,44930,44931,44933,44935],{"class":38,"line":18210},[36,44932,33909],{"class":50},[36,44934,70],{"class":42},[36,44936,4576],{"class":73},[36,44938,44939],{"class":38,"line":18215},[36,44940,33918],{"class":124},[36,44942,44943,44945,44947,44949,44951],{"class":38,"line":18228},[36,44944,4894],{"class":42},[36,44946,32932],{"class":50},[36,44948,27374],{"class":42},[36,44950,32937],{"class":73},[36,44952,33931],{"class":50},[36,44954,44955],{"class":38,"line":18233},[36,44956,33936],{"class":124},[36,44958,44959,44961,44963],{"class":38,"line":18238},[36,44960,33941],{"class":50},[36,44962,70],{"class":42},[36,44964,33946],{"class":50},[36,44966,44967],{"class":38,"line":18243},[36,44968,33951],{"class":124},[36,44970,44971,44973,44975],{"class":38,"line":18256},[36,44972,33956],{"class":50},[36,44974,70],{"class":42},[36,44976,33961],{"class":50},[36,44978,44979],{"class":38,"line":18261},[36,44980,33967],{"class":124},[36,44982,44983],{"class":38,"line":33964},[36,44984,33973],{"class":50},[36,44986,44987],{"class":38,"line":33970},[36,44988,33979],{"class":124},[36,44990,44991],{"class":38,"line":33976},[36,44992,33985],{"class":124},[36,44994,44995,44997,44999],{"class":38,"line":33982},[36,44996,33991],{"class":50},[36,44998,70],{"class":42},[36,45000,33996],{"class":50},[36,45002,45003],{"class":38,"line":33988},[36,45004,34002],{"class":124},[36,45006,45007,45009,45011,45013,45015,45017,45019],{"class":38,"line":33999},[36,45008,34008],{"class":50},[36,45010,70],{"class":42},[36,45012,34013],{"class":50},[36,45014,34016],{"class":473},[36,45016,70],{"class":42},[36,45018,1885],{"class":73},[36,45020,1680],{"class":50},[36,45022,45023],{"class":38,"line":34005},[36,45024,34028],{"class":124},[36,45026,45027,45029,45031],{"class":38,"line":34025},[36,45028,34034],{"class":50},[36,45030,70],{"class":42},[36,45032,34039],{"class":50},[36,45034,45035],{"class":38,"line":34031},[36,45036,34045],{"class":124},[36,45038,45039],{"class":38,"line":34042},[36,45040,34051],{"class":50},[36,45042,45043],{"class":38,"line":34048},[36,45044,34057],{"class":124},[36,45046,45047],{"class":38,"line":34054},[36,45048,34063],{"class":50},[36,45050,45051],{"class":38,"line":34060},[36,45052,34069],{"class":124},[36,45054,45055],{"class":38,"line":34066},[36,45056,34075],{"class":50},[36,45058,45059],{"class":38,"line":34072},[36,45060,34081],{"class":124},[36,45062,45063,45065,45067,45069,45071,45073,45075],{"class":38,"line":34078},[36,45064,34087],{"class":50},[36,45066,10945],{"class":42},[36,45068,34092],{"class":50},[36,45070,2122],{"class":42},[36,45072,34097],{"class":50},[36,45074,1859],{"class":73},[36,45076,1680],{"class":50},[36,45078,45079],{"class":38,"line":34084},[36,45080,34107],{"class":124},[36,45082,45083,45085,45087,45089,45091],{"class":38,"line":34104},[36,45084,34113],{"class":50},[36,45086,10945],{"class":42},[36,45088,34118],{"class":50},[36,45090,4441],{"class":42},[36,45092,34123],{"class":50},[36,45094,45095],{"class":38,"line":34110},[36,45096,34129],{"class":124},[36,45098,45099,45101,45103,45105,45107],{"class":38,"line":34126},[36,45100,34135],{"class":50},[36,45102,10945],{"class":42},[36,45104,34097],{"class":50},[36,45106,1859],{"class":73},[36,45108,1680],{"class":50},[36,45110,45111],{"class":38,"line":34132},[36,45112,34149],{"class":124},[36,45114,45115,45117,45119,45121,45123],{"class":38,"line":34146},[36,45116,4894],{"class":42},[36,45118,34157],{"class":50},[36,45120,27374],{"class":42},[36,45122,32937],{"class":73},[36,45124,34164],{"class":50},[36,45126,45127],{"class":38,"line":34152},[36,45128,34170],{"class":124},[36,45130,45131,45133,45135],{"class":38,"line":34167},[36,45132,33941],{"class":50},[36,45134,70],{"class":42},[36,45136,33946],{"class":50},[36,45138,45139],{"class":38,"line":34173},[36,45140,34185],{"class":124},[36,45142,45143,45145,45147],{"class":38,"line":34182},[36,45144,33956],{"class":50},[36,45146,70],{"class":42},[36,45148,33961],{"class":50},[36,45150,45151],{"class":38,"line":34188},[36,45152,34200],{"class":124},[36,45154,45155],{"class":38,"line":34197},[36,45156,34206],{"class":50},[36,45158,45159],{"class":38,"line":34203},[36,45160,37687],{"class":124},[36,45162,45163,45165],{"class":38,"line":34209},[36,45164,34212],{"class":42},[36,45166,34215],{"class":50},[36,45168,45169],{"class":38,"line":34218},[36,45170,34221],{"class":124},[36,45172,45173,45175,45177],{"class":38,"line":34224},[36,45174,37702],{"class":50},[36,45176,70],{"class":42},[36,45178,33996],{"class":50},[36,45180,45181],{"class":38,"line":34235},[36,45182,34238],{"class":124},[36,45184,45185,45187,45189,45191,45193,45195,45197],{"class":38,"line":34241},[36,45186,37715],{"class":50},[36,45188,70],{"class":42},[36,45190,34013],{"class":50},[36,45192,34016],{"class":473},[36,45194,70],{"class":42},[36,45196,1885],{"class":73},[36,45198,1680],{"class":50},[36,45200,45201],{"class":38,"line":34260},[36,45202,34263],{"class":124},[36,45204,45205,45207,45209],{"class":38,"line":34266},[36,45206,37736],{"class":50},[36,45208,70],{"class":42},[36,45210,34039],{"class":50},[36,45212,45213],{"class":38,"line":34277},[36,45214,34280],{"class":124},[36,45216,45217,45219,45221,45223,45225,45227,45229],{"class":38,"line":34283},[36,45218,37749],{"class":50},[36,45220,10945],{"class":42},[36,45222,37754],{"class":50},[36,45224,2122],{"class":42},[36,45226,34097],{"class":50},[36,45228,1859],{"class":73},[36,45230,1680],{"class":50},[36,45232,45233,45235,45237,45239,45241],{"class":38,"line":34303},[36,45234,37767],{"class":50},[36,45236,10945],{"class":42},[36,45238,34118],{"class":50},[36,45240,4441],{"class":42},[36,45242,34123],{"class":50},[36,45244,45245],{"class":38,"line":34319},[36,45246,37780],{"class":124},[36,45248,45249,45251,45253,45255,45257],{"class":38,"line":34325},[36,45250,37785],{"class":50},[36,45252,10945],{"class":42},[36,45254,34097],{"class":50},[36,45256,1859],{"class":73},[36,45258,1680],{"class":50},[36,45260,45261],{"class":38,"line":34339},[36,45262,34342],{"class":124},[36,45264,45265],{"class":38,"line":34345},[36,45266,34348],{"class":124},[36,45268,45269,45271,45273],{"class":38,"line":34351},[36,45270,34354],{"class":50},[36,45272,2251],{"class":42},[36,45274,34359],{"class":50},[36,45276,45277],{"class":38,"line":34362},[36,45278,34365],{"class":124},[36,45280,45281],{"class":38,"line":34368},[36,45282,34371],{"class":124},[36,45284,45285,45287,45289],{"class":38,"line":34374},[36,45286,34377],{"class":50},[36,45288,2251],{"class":42},[36,45290,34359],{"class":50},[36,45292,45293],{"class":38,"line":34384},[36,45294,34387],{"class":124},[36,45296,45297,45299,45301],{"class":38,"line":34390},[36,45298,34393],{"class":50},[36,45300,2251],{"class":42},[36,45302,34398],{"class":50},[36,45304,45305],{"class":38,"line":34401},[36,45306,34404],{"class":124},[36,45308,45309,45311,45313],{"class":38,"line":34407},[36,45310,34410],{"class":50},[36,45312,2251],{"class":42},[36,45314,34398],{"class":50},[36,45316,45317],{"class":38,"line":34417},[36,45318,58],{"emptyLinePlaceholder":57},[36,45320,45321],{"class":38,"line":34422},[36,45322,34425],{"class":124},[36,45324,45325,45327,45329,45331,45333,45335,45337,45339,45341,45343,45345,45347,45349,45351,45353,45355,45357,45359,45361,45363],{"class":38,"line":34428},[36,45326,33782],{"class":73},[36,45328,222],{"class":50},[36,45330,5083],{"class":110},[36,45332,33790],{"class":73},[36,45334,34439],{"class":110},[36,45336,2563],{"class":73},[36,45338,34444],{"class":42},[36,45340,2613],{"class":73},[36,45342,34449],{"class":110},[36,45344,2563],{"class":73},[36,45346,34444],{"class":42},[36,45348,2613],{"class":73},[36,45350,5083],{"class":110},[36,45352,34460],{"class":50},[36,45354,2199],{"class":42},[36,45356,1885],{"class":73},[36,45358,34467],{"class":50},[36,45360,2199],{"class":42},[36,45362,1885],{"class":73},[36,45364,34474],{"class":50},[36,45366,45367,45369,45371,45373,45375,45377,45379,45381,45383,45385,45387,45389,45391,45393,45395,45397,45399,45401,45403,45405],{"class":38,"line":34477},[36,45368,33782],{"class":73},[36,45370,222],{"class":50},[36,45372,5083],{"class":110},[36,45374,33790],{"class":73},[36,45376,34488],{"class":110},[36,45378,2563],{"class":73},[36,45380,34444],{"class":42},[36,45382,2613],{"class":73},[36,45384,34497],{"class":110},[36,45386,2563],{"class":73},[36,45388,34444],{"class":42},[36,45390,2613],{"class":73},[36,45392,5083],{"class":110},[36,45394,34508],{"class":50},[36,45396,2199],{"class":42},[36,45398,1885],{"class":73},[36,45400,34515],{"class":50},[36,45402,2199],{"class":42},[36,45404,1885],{"class":73},[36,45406,34474],{"class":50},[36,45408,45409],{"class":38,"line":34524},[36,45410,58],{"emptyLinePlaceholder":57},[36,45412,45413],{"class":38,"line":34529},[36,45414,34532],{"class":124},[36,45416,45417,45419,45421,45423,45425,45427,45429],{"class":38,"line":34535},[36,45418,3999],{"class":42},[36,45420,34540],{"class":50},[36,45422,2199],{"class":42},[36,45424,1885],{"class":73},[36,45426,2607],{"class":50},[36,45428,2627],{"class":42},[36,45430,34551],{"class":50},[36,45432,45433],{"class":38,"line":34554},[36,45434,34557],{"class":124},[36,45436,45437,45439,45441,45443,45445,45447,45449],{"class":38,"line":34560},[36,45438,34563],{"class":50},[36,45440,1713],{"class":73},[36,45442,70],{"class":42},[36,45444,34570],{"class":50},[36,45446,2199],{"class":42},[36,45448,1885],{"class":73},[36,45450,34577],{"class":50},[36,45452,45453],{"class":38,"line":34580},[36,45454,34583],{"class":124},[36,45456,45457],{"class":38,"line":34586},[36,45458,34589],{"class":124},[36,45460,45461,45463,45465],{"class":38,"line":34592},[36,45462,34595],{"class":50},[36,45464,70],{"class":42},[36,45466,33645],{"class":50},[36,45468,45469],{"class":38,"line":34602},[36,45470,58],{"emptyLinePlaceholder":57},[36,45472,45473],{"class":38,"line":34607},[36,45474,34610],{"class":124},[36,45476,45477,45479,45481,45483,45485],{"class":38,"line":34613},[36,45478,34616],{"class":50},[36,45480,70],{"class":42},[36,45482,34621],{"class":50},[36,45484,2199],{"class":42},[36,45486,34626],{"class":50},[36,45488,45489,45491,45493,45495,45497,45499,45501,45503,45505,45507,45509,45511,45513,45515,45517,45519,45521,45523],{"class":38,"line":34629},[36,45490,33782],{"class":73},[36,45492,222],{"class":50},[36,45494,34636],{"class":110},[36,45496,2563],{"class":73},[36,45498,34641],{"class":42},[36,45500,2613],{"class":73},[36,45502,2211],{"class":110},[36,45504,2563],{"class":73},[36,45506,34641],{"class":42},[36,45508,2613],{"class":73},[36,45510,34654],{"class":110},[36,45512,34657],{"class":50},[36,45514,34660],{"class":42},[36,45516,2574],{"class":73},[36,45518,34665],{"class":50},[36,45520,1996],{"class":42},[36,45522,2574],{"class":73},[36,45524,31828],{"class":50},[36,45526,45527],{"class":38,"line":34674},[36,45528,38064],{"class":124},[36,45530,45531],{"class":38,"line":34680},[36,45532,38069],{"class":124},[36,45534,45535,45537,45539],{"class":38,"line":34686},[36,45536,38074],{"class":50},[36,45538,34698],{"class":110},[36,45540,1680],{"class":50},[36,45542,45543],{"class":38,"line":34692},[36,45544,34718],{"class":124},[36,45546,45547,45549,45551,45553,45555,45557],{"class":38,"line":34703},[36,45548,34724],{"class":50},[36,45550,70],{"class":42},[36,45552,34729],{"class":50},[36,45554,34732],{"class":473},[36,45556,70],{"class":42},[36,45558,3076],{"class":50},[36,45560,45561,45563,45565,45567],{"class":38,"line":34709},[36,45562,34742],{"class":110},[36,45564,2526],{"class":50},[36,45566,34747],{"class":73},[36,45568,34750],{"class":50},[36,45570,45571,45573],{"class":38,"line":34715},[36,45572,34756],{"class":110},[36,45574,34759],{"class":50},[36,45576,45577,45579],{"class":38,"line":34721},[36,45578,34765],{"class":110},[36,45580,34768],{"class":50},[36,45582,45583,45585],{"class":38,"line":34739},[36,45584,34774],{"class":110},[36,45586,34777],{"class":50},[36,45588,45589,45591],{"class":38,"line":34753},[36,45590,34783],{"class":110},[36,45592,34786],{"class":50},[36,45594,45595],{"class":38,"line":34762},[36,45596,34792],{"class":50},[36,45598,45599],{"class":38,"line":34771},[36,45600,34798],{"class":124},[36,45602,45603,45605],{"class":38,"line":34780},[36,45604,239],{"class":42},[36,45606,34806],{"class":50},[36,45608,45609],{"class":38,"line":34789},[36,45610,58],{"emptyLinePlaceholder":57},[36,45612,45613],{"class":38,"line":34795},[36,45614,34817],{"class":124},[36,45616,45617,45619,45621],{"class":38,"line":34801},[36,45618,33278],{"class":42},[36,45620,34825],{"class":46},[36,45622,34828],{"class":50},[36,45624,45625],{"class":38,"line":34809},[36,45626,34834],{"class":124},[36,45628,45629,45631,45633,45635,45637,45639,45641,45643],{"class":38,"line":34814},[36,45630,34840],{"class":50},[36,45632,33024],{"class":473},[36,45634,70],{"class":42},[36,45636,222],{"class":50},[36,45638,2165],{"class":73},[36,45640,2045],{"class":50},[36,45642,1961],{"class":73},[36,45644,31828],{"class":50},[36,45646,45647],{"class":38,"line":34820},[36,45648,34860],{"class":124},[36,45650,45651],{"class":38,"line":34831},[36,45652,34866],{"class":124},[36,45654,45655],{"class":38,"line":34837},[36,45656,34872],{"class":124},[36,45658,45659,45661,45663,45665,45667,45669,45671],{"class":38,"line":34857},[36,45660,33058],{"class":50},[36,45662,1885],{"class":73},[36,45664,2045],{"class":50},[36,45666,1747],{"class":73},[36,45668,2045],{"class":50},[36,45670,1885],{"class":73},[36,45672,1680],{"class":50},[36,45674,45675],{"class":38,"line":34863},[36,45676,34895],{"class":124},[36,45678,45679],{"class":38,"line":34869},[36,45680,34901],{"class":124},[36,45682,45683],{"class":38,"line":34875},[36,45684,34907],{"class":124},[36,45686,45687],{"class":38,"line":34892},[36,45688,34913],{"class":124},[36,45690,45691],{"class":38,"line":34898},[36,45692,34919],{"class":124},[36,45694,45695,45697,45699,45701,45703,45705,45707,45709,45711],{"class":38,"line":34904},[36,45696,34925],{"class":50},[36,45698,34928],{"class":110},[36,45700,34931],{"class":50},[36,45702,34934],{"class":110},[36,45704,2045],{"class":50},[36,45706,34939],{"class":473},[36,45708,70],{"class":42},[36,45710,34944],{"class":110},[36,45712,1680],{"class":50},[36,45714,45715,45717,45719,45721,45723,45725,45727,45729,45731],{"class":38,"line":34910},[36,45716,34925],{"class":50},[36,45718,34928],{"class":110},[36,45720,34956],{"class":50},[36,45722,34959],{"class":110},[36,45724,2045],{"class":50},[36,45726,34939],{"class":473},[36,45728,70],{"class":42},[36,45730,34968],{"class":110},[36,45732,1680],{"class":50},[36,45734,45735],{"class":38,"line":34916},[36,45736,34976],{"class":124},[36,45738,45739],{"class":38,"line":34922},[36,45740,34982],{"class":50},[36,45742,45743],{"class":38,"line":34949},[36,45744,34988],{"class":124},[36,45746,45747,45749,45751],{"class":38,"line":34973},[36,45748,34994],{"class":50},[36,45750,34997],{"class":110},[36,45752,1680],{"class":50},[36,45754,45755,45757,45759],{"class":38,"line":34979},[36,45756,35005],{"class":50},[36,45758,35008],{"class":110},[36,45760,1680],{"class":50},[36,45762,45763],{"class":38,"line":34985},[36,45764,35016],{"class":124},[36,45766,45767,45769,45771,45773,45775,45777,45779],{"class":38,"line":34991},[36,45768,33058],{"class":50},[36,45770,1885],{"class":73},[36,45772,2045],{"class":50},[36,45774,1747],{"class":73},[36,45776,2045],{"class":50},[36,45778,1747],{"class":73},[36,45780,1680],{"class":50},[36,45782,45783,45785,45787,45789,45791,45793,45795,45797,45799],{"class":38,"line":35002},[36,45784,34925],{"class":50},[36,45786,34928],{"class":110},[36,45788,35043],{"class":50},[36,45790,34934],{"class":110},[36,45792,2045],{"class":50},[36,45794,34939],{"class":473},[36,45796,70],{"class":42},[36,45798,35054],{"class":110},[36,45800,1680],{"class":50},[36,45802,45803,45805,45807,45809,45811,45813,45815,45817,45819],{"class":38,"line":35013},[36,45804,34925],{"class":50},[36,45806,34928],{"class":110},[36,45808,35066],{"class":50},[36,45810,34959],{"class":110},[36,45812,2045],{"class":50},[36,45814,34939],{"class":473},[36,45816,70],{"class":42},[36,45818,35077],{"class":110},[36,45820,1680],{"class":50},[36,45822,45823],{"class":38,"line":35019},[36,45824,35085],{"class":124},[36,45826,45827],{"class":38,"line":35036},[36,45828,34982],{"class":50},[36,45830,45831,45833,45835],{"class":38,"line":35059},[36,45832,34994],{"class":50},[36,45834,34928],{"class":110},[36,45836,1680],{"class":50},[36,45838,45839,45841,45843],{"class":38,"line":35082},[36,45840,35005],{"class":50},[36,45842,35107],{"class":110},[36,45844,1680],{"class":50},[36,45846,45847],{"class":38,"line":35088},[36,45848,35115],{"class":50},[36,45850,45851],{"class":38,"line":35093},[36,45852,58],{"emptyLinePlaceholder":57},[36,45854,45855],{"class":38,"line":35102},[36,45856,35126],{"class":124},[36,45858,45859,45861,45863,45865,45867],{"class":38,"line":35112},[36,45860,3061],{"class":42},[36,45862,32551],{"class":73},[36,45864,4441],{"class":42},[36,45866,32556],{"class":110},[36,45868,5230],{"class":50},[36,45870,45871],{"class":38,"line":35118},[36,45872,35145],{"class":124},[36,45874,45875,45878,45880],{"class":38,"line":35123},[36,45876,45877],{"class":50},"    GoogLeNet",[36,45879,70],{"class":42},[36,45881,45882],{"class":50},"GoogLeNet(Inception)\n",[36,45884,45885,45887,45889],{"class":38,"line":35129},[36,45886,35162],{"class":50},[36,45888,70],{"class":42},[36,45890,35167],{"class":50},[36,45892,45893,45895,45897,45900,45902,45904,45906],{"class":38,"line":35142},[36,45894,34724],{"class":50},[36,45896,70],{"class":42},[36,45898,45899],{"class":50},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[36,45901,35180],{"class":473},[36,45903,70],{"class":42},[36,45905,2618],{"class":73},[36,45907,1680],{"class":50},[36,45909,45910],{"class":38,"line":35148},[36,45911,35192],{"class":50},[256,45913,45914],{"start":61},[259,45915,41905],{},[26,45917,45919],{"className":31709,"code":45918,"language":31711,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\n# 导入数据集\nfrom torchvision.datasets import FashionMNIST\nfrom model import GoogLeNet,Inception\n\n\n# 测试数据处理\ndef test_data_process():\n    test_data=FashionMNIST(root='.\u002Fdata',\n                           train=False,\n                           transform=transforms.Compose([transforms.Resize(size=227),transforms.ToTensor()]),\n                           download=True)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['T-shirt\u002Ftop','Trouser','Pullover','Dress','Coat','Sandal','Shirt','Sneaker','Bag','Ankle boot']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,45920,45921,45927,45937,45947,45951,45961,45972,45976,45980,45984,45992,46008,46018,46034,46044,46058,46062,46072,46082,46092,46098,46102,46106,46114,46118,46134,46142,46146,46150,46158,46166,46170,46174,46178,46182,46188,46192,46202,46210,46218,46222,46226,46230,46238,46242,46258,46262,46266,46270,46282,46286,46298,46302,46306,46318,46322,46332,46336,46340,46352,46356,46364,46368,46372,46380,46384,46392,46396,46400,46404,46408,46412,46428,46436,46440,46444,46492,46498,46502,46512,46520,46528,46532,46536,46540,46544,46552,46556,46572,46576,46584,46592],{"__ignoreMap":31},[36,45922,45923,45925],{"class":38,"line":39},[36,45924,31723],{"class":42},[36,45926,31726],{"class":50},[36,45928,45929,45931,45933,45935],{"class":38,"line":54},[36,45930,31723],{"class":42},[36,45932,32746],{"class":50},[36,45934,32714],{"class":42},[36,45936,32751],{"class":50},[36,45938,45939,45941,45943,45945],{"class":38,"line":61},[36,45940,32068],{"class":42},[36,45942,32729],{"class":50},[36,45944,31723],{"class":42},[36,45946,32734],{"class":50},[36,45948,45949],{"class":38,"line":80},[36,45950,35253],{"class":124},[36,45952,45953,45955,45957,45959],{"class":38,"line":96},[36,45954,32068],{"class":42},[36,45956,32699],{"class":50},[36,45958,31723],{"class":42},[36,45960,32704],{"class":50},[36,45962,45963,45965,45967,45969],{"class":38,"line":101},[36,45964,32068],{"class":42},[36,45966,33245],{"class":50},[36,45968,31723],{"class":42},[36,45970,45971],{"class":50}," GoogLeNet,Inception\n",[36,45973,45974],{"class":38,"line":128},[36,45975,58],{"emptyLinePlaceholder":57},[36,45977,45978],{"class":38,"line":149},[36,45979,58],{"emptyLinePlaceholder":57},[36,45981,45982],{"class":38,"line":154},[36,45983,35282],{"class":124},[36,45985,45986,45988,45990],{"class":38,"line":167},[36,45987,33278],{"class":42},[36,45989,35289],{"class":46},[36,45991,33284],{"class":50},[36,45993,45994,45996,45998,46000,46002,46004,46006],{"class":38,"line":172},[36,45995,35296],{"class":50},[36,45997,70],{"class":42},[36,45999,32786],{"class":50},[36,46001,32789],{"class":473},[36,46003,70],{"class":42},[36,46005,32794],{"class":110},[36,46007,32797],{"class":50},[36,46009,46010,46012,46014,46016],{"class":38,"line":192},[36,46011,35313],{"class":473},[36,46013,70],{"class":42},[36,46015,35318],{"class":73},[36,46017,32797],{"class":50},[36,46019,46020,46022,46024,46026,46028,46030,46032],{"class":38,"line":211},[36,46021,35325],{"class":473},[36,46023,70],{"class":42},[36,46025,32824],{"class":50},[36,46027,32827],{"class":473},[36,46029,70],{"class":42},[36,46031,36780],{"class":73},[36,46033,32835],{"class":50},[36,46035,46036,46038,46040,46042],{"class":38,"line":216},[36,46037,35342],{"class":473},[36,46039,70],{"class":42},[36,46041,32807],{"class":73},[36,46043,1680],{"class":50},[36,46045,46046,46048,46050,46052,46054,46056],{"class":38,"line":231},[36,46047,35353],{"class":50},[36,46049,70],{"class":42},[36,46051,32865],{"class":50},[36,46053,32868],{"class":473},[36,46055,70],{"class":42},[36,46057,35364],{"class":50},[36,46059,46060],{"class":38,"line":236},[36,46061,35369],{"class":124},[36,46063,46064,46066,46068,46070],{"class":38,"line":247},[36,46065,35374],{"class":473},[36,46067,70],{"class":42},[36,46069,1885],{"class":73},[36,46071,32797],{"class":50},[36,46073,46074,46076,46078,46080],{"class":38,"line":637},[36,46075,35385],{"class":473},[36,46077,70],{"class":42},[36,46079,32807],{"class":73},[36,46081,32797],{"class":50},[36,46083,46084,46086,46088,46090],{"class":38,"line":646},[36,46085,35396],{"class":473},[36,46087,70],{"class":42},[36,46089,1859],{"class":73},[36,46091,1680],{"class":50},[36,46093,46094,46096],{"class":38,"line":655},[36,46095,239],{"class":42},[36,46097,35409],{"class":50},[36,46099,46100],{"class":38,"line":660},[36,46101,58],{"emptyLinePlaceholder":57},[36,46103,46104],{"class":38,"line":665},[36,46105,35418],{"class":124},[36,46107,46108,46110,46112],{"class":38,"line":674},[36,46109,33278],{"class":42},[36,46111,35425],{"class":46},[36,46113,35428],{"class":50},[36,46115,46116],{"class":38,"line":679},[36,46117,35433],{"class":124},[36,46119,46120,46122,46124,46126,46128,46130,46132],{"class":38,"line":692},[36,46121,32568],{"class":50},[36,46123,70],{"class":42},[36,46125,32575],{"class":110},[36,46127,3222],{"class":42},[36,46129,32580],{"class":50},[36,46131,3219],{"class":42},[36,46133,35450],{"class":110},[36,46135,46136,46138,46140],{"class":38,"line":705},[36,46137,32620],{"class":50},[36,46139,70],{"class":42},[36,46141,33620],{"class":50},[36,46143,46144],{"class":38,"line":710},[36,46145,58],{"emptyLinePlaceholder":57},[36,46147,46148],{"class":38,"line":722},[36,46149,35467],{"class":124},[36,46151,46152,46154,46156],{"class":38,"line":750},[36,46153,35472],{"class":50},[36,46155,70],{"class":42},[36,46157,33673],{"class":73},[36,46159,46160,46162,46164],{"class":38,"line":755},[36,46161,35481],{"class":50},[36,46163,70],{"class":42},[36,46165,4576],{"class":73},[36,46167,46168],{"class":38,"line":777},[36,46169,58],{"emptyLinePlaceholder":57},[36,46171,46172],{"class":38,"line":802},[36,46173,35494],{"class":124},[36,46175,46176],{"class":38,"line":807},[36,46177,35499],{"class":124},[36,46179,46180],{"class":38,"line":818},[36,46181,35504],{"class":124},[36,46183,46184,46186],{"class":38,"line":843},[36,46185,35509],{"class":42},[36,46187,34215],{"class":50},[36,46189,46190],{"class":38,"line":848},[36,46191,35516],{"class":124},[36,46193,46194,46196,46198,46200],{"class":38,"line":859},[36,46195,4894],{"class":42},[36,46197,35523],{"class":50},[36,46199,27374],{"class":42},[36,46201,35528],{"class":50},[36,46203,46204,46206,46208],{"class":38,"line":864},[36,46205,35533],{"class":50},[36,46207,70],{"class":42},[36,46209,35538],{"class":50},[36,46211,46212,46214,46216],{"class":38,"line":873},[36,46213,35543],{"class":50},[36,46215,70],{"class":42},[36,46217,35548],{"class":50},[36,46219,46220],{"class":38,"line":9454},[36,46221,35553],{"class":124},[36,46223,46224],{"class":38,"line":9481},[36,46225,34206],{"class":50},[36,46227,46228],{"class":38,"line":9486},[36,46229,35562],{"class":124},[36,46231,46232,46234,46236],{"class":38,"line":9492},[36,46233,33991],{"class":50},[36,46235,70],{"class":42},[36,46237,35571],{"class":50},[36,46239,46240],{"class":38,"line":9504},[36,46241,35576],{"class":124},[36,46243,46244,46246,46248,46250,46252,46254,46256],{"class":38,"line":9516},[36,46245,34008],{"class":50},[36,46247,70],{"class":42},[36,46249,34013],{"class":50},[36,46251,34016],{"class":473},[36,46253,70],{"class":42},[36,46255,1885],{"class":73},[36,46257,1680],{"class":50},[36,46259,46260],{"class":38,"line":9528},[36,46261,35597],{"class":124},[36,46263,46264],{"class":38,"line":11184},[36,46265,35602],{"class":124},[36,46267,46268],{"class":38,"line":11209},[36,46269,35607],{"class":124},[36,46271,46272,46274,46276,46278,46280],{"class":38,"line":11232},[36,46273,35612],{"class":50},[36,46275,10945],{"class":42},[36,46277,34118],{"class":50},[36,46279,4441],{"class":42},[36,46281,35621],{"class":50},[36,46283,46284],{"class":38,"line":11256},[36,46285,35626],{"class":124},[36,46287,46288,46290,46292,46294,46296],{"class":38,"line":11261},[36,46289,35631],{"class":50},[36,46291,10945],{"class":42},[36,46293,35636],{"class":50},[36,46295,1859],{"class":73},[36,46297,1680],{"class":50},[36,46299,46300],{"class":38,"line":11266},[36,46301,58],{"emptyLinePlaceholder":57},[36,46303,46304],{"class":38,"line":11271},[36,46305,35649],{"class":124},[36,46307,46308,46310,46312,46314,46316],{"class":38,"line":11280},[36,46309,35654],{"class":50},[36,46311,70],{"class":42},[36,46313,35659],{"class":50},[36,46315,2251],{"class":42},[36,46317,35664],{"class":50},[36,46319,46320],{"class":38,"line":11285},[36,46321,35669],{"class":124},[36,46323,46324,46326,46328,46330],{"class":38,"line":11291},[36,46325,33782],{"class":73},[36,46327,222],{"class":50},[36,46329,35678],{"class":110},[36,46331,35681],{"class":50},[36,46333,46334],{"class":38,"line":11312},[36,46335,58],{"emptyLinePlaceholder":57},[36,46337,46338],{"class":38,"line":11318},[36,46339,35690],{"class":124},[36,46341,46342,46344,46346,46348,46350],{"class":38,"line":11332},[36,46343,3061],{"class":42},[36,46345,32551],{"class":73},[36,46347,4441],{"class":42},[36,46349,32556],{"class":110},[36,46351,5230],{"class":50},[36,46353,46354],{"class":38,"line":11338},[36,46355,35707],{"class":124},[36,46357,46358,46360,46362],{"class":38,"line":11365},[36,46359,32620],{"class":50},[36,46361,70],{"class":42},[36,46363,45882],{"class":50},[36,46365,46366],{"class":38,"line":11374},[36,46367,35720],{"class":124},[36,46369,46370],{"class":38,"line":11380},[36,46371,35725],{"class":124},[36,46373,46374,46376,46378],{"class":38,"line":11388},[36,46375,35730],{"class":50},[36,46377,35733],{"class":110},[36,46379,31828],{"class":50},[36,46381,46382],{"class":38,"line":11393},[36,46383,35740],{"class":124},[36,46385,46386,46388,46390],{"class":38,"line":17933},[36,46387,35353],{"class":50},[36,46389,70],{"class":42},[36,46391,35749],{"class":50},[36,46393,46394],{"class":38,"line":17939},[36,46395,35754],{"class":124},[36,46397,46398],{"class":38,"line":17962},[36,46399,35759],{"class":50},[36,46401,46402],{"class":38,"line":17968},[36,46403,58],{"emptyLinePlaceholder":57},[36,46405,46406],{"class":38,"line":17991},[36,46407,35768],{"class":124},[36,46409,46410],{"class":38,"line":18005},[36,46411,35773],{"class":124},[36,46413,46414,46416,46418,46420,46422,46424,46426],{"class":38,"line":18025},[36,46415,32568],{"class":50},[36,46417,70],{"class":42},[36,46419,32575],{"class":110},[36,46421,3222],{"class":42},[36,46423,32580],{"class":50},[36,46425,3219],{"class":42},[36,46427,35450],{"class":110},[36,46429,46430,46432,46434],{"class":38,"line":18031},[36,46431,32620],{"class":50},[36,46433,70],{"class":42},[36,46435,33620],{"class":50},[36,46437,46438],{"class":38,"line":18042},[36,46439,35802],{"class":124},[36,46441,46442],{"class":38,"line":18065},[36,46443,35807],{"class":124},[36,46445,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476,46478,46480,46482,46484,46486,46488,46490],{"class":38,"line":18087},[36,46447,35812],{"class":50},[36,46449,70],{"class":42},[36,46451,2557],{"class":50},[36,46453,35819],{"class":110},[36,46455,2045],{"class":50},[36,46457,35824],{"class":110},[36,46459,2045],{"class":50},[36,46461,35829],{"class":110},[36,46463,2045],{"class":50},[36,46465,35834],{"class":110},[36,46467,2045],{"class":50},[36,46469,35839],{"class":110},[36,46471,2045],{"class":50},[36,46473,35844],{"class":110},[36,46475,2045],{"class":50},[36,46477,35849],{"class":110},[36,46479,2045],{"class":50},[36,46481,35854],{"class":110},[36,46483,2045],{"class":50},[36,46485,35859],{"class":110},[36,46487,2045],{"class":50},[36,46489,35864],{"class":110},[36,46491,34577],{"class":50},[36,46493,46494,46496],{"class":38,"line":18092},[36,46495,35509],{"class":42},[36,46497,34215],{"class":50},[36,46499,46500],{"class":38,"line":18098},[36,46501,35877],{"class":124},[36,46503,46504,46506,46508,46510],{"class":38,"line":18112},[36,46505,4894],{"class":42},[36,46507,35884],{"class":50},[36,46509,27374],{"class":42},[36,46511,35528],{"class":50},[36,46513,46514,46516,46518],{"class":38,"line":18125},[36,46515,33941],{"class":50},[36,46517,70],{"class":42},[36,46519,33946],{"class":50},[36,46521,46522,46524,46526],{"class":38,"line":18130},[36,46523,33956],{"class":50},[36,46525,70],{"class":42},[36,46527,33961],{"class":50},[36,46529,46530],{"class":38,"line":18144},[36,46531,58],{"emptyLinePlaceholder":57},[36,46533,46534],{"class":38,"line":18149},[36,46535,35913],{"class":124},[36,46537,46538],{"class":38,"line":18155},[36,46539,34206],{"class":50},[36,46541,46542],{"class":38,"line":18160},[36,46543,35922],{"class":124},[36,46545,46546,46548,46550],{"class":38,"line":18174},[36,46547,33991],{"class":50},[36,46549,70],{"class":42},[36,46551,33996],{"class":50},[36,46553,46554],{"class":38,"line":18179},[36,46555,35935],{"class":124},[36,46557,46558,46560,46562,46564,46566,46568,46570],{"class":38,"line":18184},[36,46559,34008],{"class":50},[36,46561,70],{"class":42},[36,46563,34013],{"class":50},[36,46565,34016],{"class":473},[36,46567,70],{"class":42},[36,46569,1885],{"class":73},[36,46571,1680],{"class":50},[36,46573,46574],{"class":38,"line":18198},[36,46575,35956],{"class":124},[36,46577,46578,46580,46582],{"class":38,"line":18210},[36,46579,35961],{"class":50},[36,46581,70],{"class":42},[36,46583,35966],{"class":50},[36,46585,46586,46588,46590],{"class":38,"line":18215},[36,46587,35971],{"class":50},[36,46589,70],{"class":42},[36,46591,35976],{"class":50},[36,46593,46594,46596,46598,46600,46602,46604,46606,46608],{"class":38,"line":18228},[36,46595,35981],{"class":73},[36,46597,222],{"class":50},[36,46599,35986],{"class":110},[36,46601,35989],{"class":50},[36,46603,35992],{"class":110},[36,46605,2045],{"class":50},[36,46607,35997],{"class":110},[36,46609,36000],{"class":50},[1645,46611,46613],{"id":46612},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46615,46616],{},"猫狗分类任务",[19,46618,46619],{},"划分数据集和验证集",[26,46621,46623],{"className":31709,"code":46622,"language":31711,"meta":31,"style":31},"# 创建脚本，用于划分数据集和验证集\nimport os\n# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\nfrom shutil import copy\nimport random\n\ndef mkfile(file):\n    if not os.path.exists(file):\n        os.makedirs(file)\n\n# 获取data文件夹下所有文件夹名（即需要分类的类名）\nfile_path='data_cat_dog'\nflower_class=[cla for cla in os.listdir(file_path)]\n\n# 创建训练集train文件夹\nmkfile('data\u002Ftrain')\nfor cla in flower_class:\n    mkfile('data\u002Ftrain\u002F'+cla)\n\n# 创建验证集val文件夹\nmkfile('data\u002Ftest')\nfor cla in flower_class:\n    mkfile('data\u002Ftest\u002F'+cla)\n\n# 划分比例，训练集：测试集=9：1\nsplit_rate=0.1\n\n# 遍历所有类别的全部图像并按比例分成训练集和验证集\n# cla_path：当前类别的原始图片路径\n# images：当前类别下所有图片的文件名列表\n# num：该类别图片总数\n# eval_index：从 images 随机抽取 10% 的图片作为验证集\n\nfor cla in flower_class:\n    cla_path = file_path + '\u002F' + cla + '\u002F'  # 某一类别的子目录\n    images = os.listdir(cla_path)  # iamges 列表存储了该目录下所有图像的名称\n    num = len(images)\n    eval_index = random.sample(images, k=int(num * split_rate))  # 从images列表中随机抽取 k 个图像名称\n    # 遍历该类别下的所有图片\n    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n    for index, image in enumerate(images):\n        # eval_index 中保存验证集val的图像名称\n        if image in eval_index:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftest\u002F' + cla\n            copy(image_path, new_path)  # 将选中的图像复制到新路径\n\n        # 其余的图像保存在训练集train中\n        else:\n            image_path = cla_path + image\n            new_path = 'data\u002Ftrain\u002F' + cla\n            copy(image_path, new_path)\n            # 打印进度条信息\n            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n        print(\"\\r[{}] processing [{}\u002F{}]\".format(cla, index + 1, num), end=\"\")  # processing bar\n    print()\n\nprint(\"processing done!\")\n",[33,46624,46625,46630,46637,46642,46653,46660,46664,46674,46688,46697,46701,46706,46716,46736,46740,46745,46755,46766,46779,46783,46788,46797,46807,46818,46822,46827,46837,46841,46846,46851,46856,46861,46866,46870,46880,46907,46920,46932,46959,46964,46969,46983,46988,47000,47015,47030,47038,47042,47047,47053,47065,47078,47083,47088,47093,47143,47149,47153],{"__ignoreMap":31},[36,46626,46627],{"class":38,"line":39},[36,46628,46629],{"class":124},"# 创建脚本，用于划分数据集和验证集\n",[36,46631,46632,46634],{"class":38,"line":54},[36,46633,31723],{"class":42},[36,46635,46636],{"class":50}," os\n",[36,46638,46639],{"class":38,"line":61},[36,46640,46641],{"class":124},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[36,46643,46644,46646,46649,46651],{"class":38,"line":80},[36,46645,32068],{"class":42},[36,46647,46648],{"class":50}," shutil ",[36,46650,31723],{"class":42},[36,46652,33153],{"class":50},[36,46654,46655,46657],{"class":38,"line":96},[36,46656,31723],{"class":42},[36,46658,46659],{"class":50}," random\n",[36,46661,46662],{"class":38,"line":101},[36,46663,58],{"emptyLinePlaceholder":57},[36,46665,46666,46668,46671],{"class":38,"line":128},[36,46667,33278],{"class":42},[36,46669,46670],{"class":46}," mkfile",[36,46672,46673],{"class":50},"(file):\n",[36,46675,46676,46678,46680,46683,46686],{"class":38,"line":149},[36,46677,4592],{"class":42},[36,46679,40261],{"class":42},[36,46681,46682],{"class":50}," os.path.exists(",[36,46684,46685],{"class":473},"file",[36,46687,32117],{"class":50},[36,46689,46690,46693,46695],{"class":38,"line":154},[36,46691,46692],{"class":50},"        os.makedirs(",[36,46694,46685],{"class":473},[36,46696,1680],{"class":50},[36,46698,46699],{"class":38,"line":167},[36,46700,58],{"emptyLinePlaceholder":57},[36,46702,46703],{"class":38,"line":172},[36,46704,46705],{"class":124},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[36,46707,46708,46711,46713],{"class":38,"line":192},[36,46709,46710],{"class":50},"file_path",[36,46712,70],{"class":42},[36,46714,46715],{"class":110},"'data_cat_dog'\n",[36,46717,46718,46721,46723,46726,46728,46731,46733],{"class":38,"line":211},[36,46719,46720],{"class":50},"flower_class",[36,46722,70],{"class":42},[36,46724,46725],{"class":50},"[cla ",[36,46727,4516],{"class":42},[36,46729,46730],{"class":50}," cla ",[36,46732,27374],{"class":42},[36,46734,46735],{"class":50}," os.listdir(file_path)]\n",[36,46737,46738],{"class":38,"line":216},[36,46739,58],{"emptyLinePlaceholder":57},[36,46741,46742],{"class":38,"line":231},[36,46743,46744],{"class":124},"# 创建训练集train文件夹\n",[36,46746,46747,46750,46753],{"class":38,"line":236},[36,46748,46749],{"class":50},"mkfile(",[36,46751,46752],{"class":110},"'data\u002Ftrain'",[36,46754,1680],{"class":50},[36,46756,46757,46759,46761,46763],{"class":38,"line":247},[36,46758,4516],{"class":42},[36,46760,46730],{"class":50},[36,46762,27374],{"class":42},[36,46764,46765],{"class":50}," flower_class:\n",[36,46767,46768,46771,46774,46776],{"class":38,"line":637},[36,46769,46770],{"class":50},"    mkfile(",[36,46772,46773],{"class":110},"'data\u002Ftrain\u002F'",[36,46775,2148],{"class":42},[36,46777,46778],{"class":50},"cla)\n",[36,46780,46781],{"class":38,"line":646},[36,46782,58],{"emptyLinePlaceholder":57},[36,46784,46785],{"class":38,"line":655},[36,46786,46787],{"class":124},"# 创建验证集val文件夹\n",[36,46789,46790,46792,46795],{"class":38,"line":660},[36,46791,46749],{"class":50},[36,46793,46794],{"class":110},"'data\u002Ftest'",[36,46796,1680],{"class":50},[36,46798,46799,46801,46803,46805],{"class":38,"line":665},[36,46800,4516],{"class":42},[36,46802,46730],{"class":50},[36,46804,27374],{"class":42},[36,46806,46765],{"class":50},[36,46808,46809,46811,46814,46816],{"class":38,"line":674},[36,46810,46770],{"class":50},[36,46812,46813],{"class":110},"'data\u002Ftest\u002F'",[36,46815,2148],{"class":42},[36,46817,46778],{"class":50},[36,46819,46820],{"class":38,"line":679},[36,46821,58],{"emptyLinePlaceholder":57},[36,46823,46824],{"class":38,"line":692},[36,46825,46826],{"class":124},"# 划分比例，训练集：测试集=9：1\n",[36,46828,46829,46832,46834],{"class":38,"line":705},[36,46830,46831],{"class":50},"split_rate",[36,46833,70],{"class":42},[36,46835,46836],{"class":73},"0.1\n",[36,46838,46839],{"class":38,"line":710},[36,46840,58],{"emptyLinePlaceholder":57},[36,46842,46843],{"class":38,"line":722},[36,46844,46845],{"class":124},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[36,46847,46848],{"class":38,"line":750},[36,46849,46850],{"class":124},"# cla_path：当前类别的原始图片路径\n",[36,46852,46853],{"class":38,"line":755},[36,46854,46855],{"class":124},"# images：当前类别下所有图片的文件名列表\n",[36,46857,46858],{"class":38,"line":777},[36,46859,46860],{"class":124},"# num：该类别图片总数\n",[36,46862,46863],{"class":38,"line":802},[36,46864,46865],{"class":124},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[36,46867,46868],{"class":38,"line":807},[36,46869,58],{"emptyLinePlaceholder":57},[36,46871,46872,46874,46876,46878],{"class":38,"line":818},[36,46873,4516],{"class":42},[36,46875,46730],{"class":50},[36,46877,27374],{"class":42},[36,46879,46765],{"class":50},[36,46881,46882,46885,46887,46890,46892,46895,46898,46900,46902,46904],{"class":38,"line":843},[36,46883,46884],{"class":50},"    cla_path ",[36,46886,70],{"class":42},[36,46888,46889],{"class":50}," file_path ",[36,46891,2148],{"class":42},[36,46893,46894],{"class":110}," '\u002F'",[36,46896,46897],{"class":42}," +",[36,46899,46730],{"class":50},[36,46901,2148],{"class":42},[36,46903,46894],{"class":110},[36,46905,46906],{"class":124},"  # 某一类别的子目录\n",[36,46908,46909,46912,46914,46917],{"class":38,"line":848},[36,46910,46911],{"class":50},"    images ",[36,46913,70],{"class":42},[36,46915,46916],{"class":50}," os.listdir(cla_path)  ",[36,46918,46919],{"class":124},"# iamges 列表存储了该目录下所有图像的名称\n",[36,46921,46922,46925,46927,46929],{"class":38,"line":859},[36,46923,46924],{"class":50},"    num ",[36,46926,70],{"class":42},[36,46928,8805],{"class":73},[36,46930,46931],{"class":50},"(images)\n",[36,46933,46934,46937,46939,46942,46944,46946,46948,46951,46953,46956],{"class":38,"line":864},[36,46935,46936],{"class":50},"    eval_index ",[36,46938,70],{"class":42},[36,46940,46941],{"class":50}," random.sample(images, ",[36,46943,2160],{"class":473},[36,46945,70],{"class":42},[36,46947,43],{"class":73},[36,46949,46950],{"class":50},"(num ",[36,46952,2122],{"class":42},[36,46954,46955],{"class":50}," split_rate))  ",[36,46957,46958],{"class":124},"# 从images列表中随机抽取 k 个图像名称\n",[36,46960,46961],{"class":38,"line":873},[36,46962,46963],{"class":124},"    # 遍历该类别下的所有图片\n",[36,46965,46966],{"class":38,"line":9454},[36,46967,46968],{"class":124},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[36,46970,46971,46973,46976,46978,46980],{"class":38,"line":9481},[36,46972,4692],{"class":42},[36,46974,46975],{"class":50}," index, image ",[36,46977,27374],{"class":42},[36,46979,32937],{"class":73},[36,46981,46982],{"class":50},"(images):\n",[36,46984,46985],{"class":38,"line":9486},[36,46986,46987],{"class":124},"        # eval_index 中保存验证集val的图像名称\n",[36,46989,46990,46992,46995,46997],{"class":38,"line":9492},[36,46991,3999],{"class":42},[36,46993,46994],{"class":50}," image ",[36,46996,27374],{"class":42},[36,46998,46999],{"class":50}," eval_index:\n",[36,47001,47002,47005,47007,47010,47012],{"class":38,"line":9504},[36,47003,47004],{"class":50},"            image_path ",[36,47006,70],{"class":42},[36,47008,47009],{"class":50}," cla_path ",[36,47011,2148],{"class":42},[36,47013,47014],{"class":50}," image\n",[36,47016,47017,47020,47022,47025,47027],{"class":38,"line":9516},[36,47018,47019],{"class":50},"            new_path ",[36,47021,70],{"class":42},[36,47023,47024],{"class":110}," 'data\u002Ftest\u002F'",[36,47026,46897],{"class":42},[36,47028,47029],{"class":50}," cla\n",[36,47031,47032,47035],{"class":38,"line":9528},[36,47033,47034],{"class":50},"            copy(image_path, new_path)  ",[36,47036,47037],{"class":124},"# 将选中的图像复制到新路径\n",[36,47039,47040],{"class":38,"line":11184},[36,47041,58],{"emptyLinePlaceholder":57},[36,47043,47044],{"class":38,"line":11209},[36,47045,47046],{"class":124},"        # 其余的图像保存在训练集train中\n",[36,47048,47049,47051],{"class":38,"line":11232},[36,47050,4036],{"class":42},[36,47052,5230],{"class":50},[36,47054,47055,47057,47059,47061,47063],{"class":38,"line":11256},[36,47056,47004],{"class":50},[36,47058,70],{"class":42},[36,47060,47009],{"class":50},[36,47062,2148],{"class":42},[36,47064,47014],{"class":50},[36,47066,47067,47069,47071,47074,47076],{"class":38,"line":11261},[36,47068,47019],{"class":50},[36,47070,70],{"class":42},[36,47072,47073],{"class":110}," 'data\u002Ftrain\u002F'",[36,47075,46897],{"class":42},[36,47077,47029],{"class":50},[36,47079,47080],{"class":38,"line":11266},[36,47081,47082],{"class":50},"            copy(image_path, new_path)\n",[36,47084,47085],{"class":38,"line":11271},[36,47086,47087],{"class":124},"            # 打印进度条信息\n",[36,47089,47090],{"class":38,"line":11280},[36,47091,47092],{"class":124},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[36,47094,47095,47097,47099,47101,47104,47106,47108,47111,47113,47115,47117,47120,47123,47125,47127,47130,47133,47135,47137,47140],{"class":38,"line":11285},[36,47096,33782],{"class":73},[36,47098,222],{"class":50},[36,47100,1919],{"class":110},[36,47102,47103],{"class":73},"\\r",[36,47105,2557],{"class":110},[36,47107,33790],{"class":73},[36,47109,47110],{"class":110},"] processing [",[36,47112,33790],{"class":73},[36,47114,2251],{"class":110},[36,47116,33790],{"class":73},[36,47118,47119],{"class":110},"]\"",[36,47121,47122],{"class":50},".format(cla, index ",[36,47124,2148],{"class":42},[36,47126,26449],{"class":73},[36,47128,47129],{"class":50},", num), ",[36,47131,47132],{"class":473},"end",[36,47134,70],{"class":42},[36,47136,9126],{"class":110},[36,47138,47139],{"class":50},")  ",[36,47141,47142],{"class":124},"# processing bar\n",[36,47144,47145,47147],{"class":38,"line":11291},[36,47146,32630],{"class":73},[36,47148,3484],{"class":50},[36,47150,47151],{"class":38,"line":11312},[36,47152,58],{"emptyLinePlaceholder":57},[36,47154,47155,47157,47159,47162],{"class":38,"line":11318},[36,47156,31746],{"class":73},[36,47158,222],{"class":50},[36,47160,47161],{"class":110},"\"processing done!\"",[36,47163,1680],{"class":50},[19,47165,47166],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23327,47168,47170],{"id":47169},"_242模型代码","2.4.2.模型代码",[19,47172,47173],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,47175,47177],{"className":31709,"code":47176,"language":31711,"meta":31,"style":31},"import torch\nfrom torch import nn\nfrom torchsummary import summary\n\nclass Inception(nn.Module):\n    def __init__(self,in_channels,c1,c2,c3,c4):\n        super(Inception,self).__init__()\n        self.ReLu=nn.ReLU()\n        # 路线1：定义1*1卷积\n        self.p1_1=nn.Conv2d(in_channels=in_channels,out_channels=c1,kernel_size=1)\n        # 路线2：定义1*1卷积和3*3\n        self.p2_1=nn.Conv2d(in_channels=in_channels,out_channels=c2[0],kernel_size=1)\n        self.p2_2=nn.Conv2d(in_channels=c2[0],out_channels=c2[1],kernel_size=3,padding=1)\n        # 路线3：定义1*1卷积和5*5\n        self.p3_1=nn.Conv2d(in_channels=in_channels,out_channels=c3[0],kernel_size=1)\n        self.p3_2=nn.Conv2d(in_channels=c3[0],out_channels=c3[1],kernel_size=5,padding=2)\n        # 路线4：定义3*3最大池化和1*1卷积\n        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n        self.p4_1=nn.MaxPool2d(kernel_size=3,stride=1,padding=1)\n        self.p4_2=nn.Conv2d(in_channels=in_channels,out_channels=c4,kernel_size=1)\n\n    def forward(self,x):\n        p1=self.ReLu(self.p1_1(x))\n        p2=self.ReLu(self.p2_2(self.ReLu(self.p2_1(x))))\n        p3=self.ReLu(self.p3_2(self.ReLu(self.p3_1(x))))\n        p4=self.ReLu(self.p4_2(self.p4_1(x)))\n        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n        return torch.cat((p1,p2,p3,p4),dim=1)\n\n# 搭建GoogLeNet网络\nclass GoogLeNet(nn.Module):\n    # 必须把Inception导入到里边\n    def __init__(self,Inception):\n        super(GoogLeNet,self).__init__()\n        self.b1=nn.Sequential(\n            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=7,stride=2,padding=3),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b2=nn.Sequential(\n            nn.Conv2d(in_channels=64,out_channels=64,kernel_size=1),\n            nn.ReLU(),\n            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=3,padding=1),\n            nn.ReLU(),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b3=nn.Sequential(\n            Inception(192,64,(96,128),(16,32),32),\n            Inception(256,128,(128,192),(32,96),64),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b4=nn.Sequential(\n            Inception(480,192,(96,208),(16,48),64),\n            Inception(512,160,(112,224),(24,64),64),\n            Inception(512,128,(128,256),(24,64),64),\n            Inception(512,112,(128,288),(32,64),64),\n            Inception(528,256,(160,320),(32,128),128),\n            nn.MaxPool2d(kernel_size=3,stride=2,padding=1)\n        )\n        self.b5=nn.Sequential(\n            Inception(832,256,(160,320),(32,128),128),\n            Inception(832,384,(192,384),(48,128),128),\n            nn.AdaptiveAvgPool2d((1,1)),\n            nn.Flatten(),\n            nn.Linear(1024,2)\n        )\n        # 对模型参数初始化\n        for m in self.modules():\n            if isinstance(m,nn.Conv2d):\n                nn.init.kaiming_normal_(m.weight,mode='fan_out',nonlinearity='relu')\n                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n                # ② mode = 'fan_out'决定使用的fan值：\n                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n                if m.bias is not None:\n                    nn.init.constant_(m.bias,0)\n                elif isinstance(m,nn.Linear):\n                    nn.init.normal_(m.weight,0,0.01)\n                    if m.bias is not None:\n                        nn.init.constant_(m.bias,0)\n    # 定义前向传播\n    def forward(self,x):\n        x=self.b1(x)\n        x=self.b2(x)\n        x=self.b3(x)\n        x=self.b4(x)\n        x=self.b5(x)\n        return x\n\n# 模型展示\nif __name__==\"__main__\":\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n    model=GoogLeNet(Inception).to(device)\n    print(summary(model,(1,224,224)))\n",[33,47178,47179,47185,47195,47205,47209,47225,47233,47247,47257,47261,47291,47295,47329,47375,47379,47413,47459,47463,47467,47501,47531,47535,47543,47557,47579,47601,47619,47623,47637,47641,47645,47661,47665,47673,47687,47697,47741,47745,47773,47777,47787,47815,47819,47855,47859,47887,47891,47901,47933,47965,47993,47997,48007,48039,48071,48103,48135,48167,48195,48199,48209,48241,48273,48285,48289,48301,48305,48309,48321,48329,48349,48353,48357,48361,48365,48369,48373,48387,48395,48403,48415,48429,48437,48441,48449,48459,48469,48479,48489,48499,48505,48509,48513,48525,48545,48553],{"__ignoreMap":31},[36,47180,47181,47183],{"class":38,"line":39},[36,47182,31723],{"class":42},[36,47184,31726],{"class":50},[36,47186,47187,47189,47191,47193],{"class":38,"line":54},[36,47188,32068],{"class":42},[36,47190,32071],{"class":50},[36,47192,31723],{"class":42},[36,47194,32076],{"class":50},[36,47196,47197,47199,47201,47203],{"class":38,"line":61},[36,47198,32068],{"class":42},[36,47200,32088],{"class":50},[36,47202,31723],{"class":42},[36,47204,32093],{"class":50},[36,47206,47207],{"class":38,"line":80},[36,47208,58],{"emptyLinePlaceholder":57},[36,47210,47211,47213,47215,47217,47219,47221,47223],{"class":38,"line":96},[36,47212,16023],{"class":42},[36,47214,42824],{"class":46},[36,47216,222],{"class":50},[36,47218,32109],{"class":46},[36,47220,2225],{"class":50},[36,47222,32114],{"class":46},[36,47224,32117],{"class":50},[36,47226,47227,47229,47231],{"class":38,"line":101},[36,47228,32132],{"class":42},[36,47230,32135],{"class":73},[36,47232,42843],{"class":50},[36,47234,47235,47237,47239,47241,47243,47245],{"class":38,"line":128},[36,47236,32148],{"class":73},[36,47238,42850],{"class":50},[36,47240,32154],{"class":73},[36,47242,32157],{"class":50},[36,47244,32160],{"class":73},[36,47246,3484],{"class":50},[36,47248,47249,47251,47253,47255],{"class":38,"line":149},[36,47250,32176],{"class":73},[36,47252,36102],{"class":50},[36,47254,70],{"class":42},[36,47256,36107],{"class":50},[36,47258,47259],{"class":38,"line":154},[36,47260,42873],{"class":124},[36,47262,47263,47265,47267,47269,47271,47273,47275,47277,47279,47281,47283,47285,47287,47289],{"class":38,"line":167},[36,47264,32176],{"class":73},[36,47266,42880],{"class":50},[36,47268,70],{"class":42},[36,47270,32184],{"class":50},[36,47272,32187],{"class":473},[36,47274,70],{"class":42},[36,47276,42891],{"class":50},[36,47278,32196],{"class":473},[36,47280,70],{"class":42},[36,47282,42898],{"class":50},[36,47284,32205],{"class":473},[36,47286,70],{"class":42},[36,47288,1885],{"class":73},[36,47290,1680],{"class":50},[36,47292,47293],{"class":38,"line":172},[36,47294,42911],{"class":124},[36,47296,47297,47299,47301,47303,47305,47307,47309,47311,47313,47315,47317,47319,47321,47323,47325,47327],{"class":38,"line":192},[36,47298,32176],{"class":73},[36,47300,42918],{"class":50},[36,47302,70],{"class":42},[36,47304,32184],{"class":50},[36,47306,32187],{"class":473},[36,47308,70],{"class":42},[36,47310,42891],{"class":50},[36,47312,32196],{"class":473},[36,47314,70],{"class":42},[36,47316,42935],{"class":50},[36,47318,1859],{"class":73},[36,47320,42940],{"class":50},[36,47322,32205],{"class":473},[36,47324,70],{"class":42},[36,47326,1885],{"class":73},[36,47328,1680],{"class":50},[36,47330,47331,47333,47335,47337,47339,47341,47343,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373],{"class":38,"line":211},[36,47332,32176],{"class":73},[36,47334,42955],{"class":50},[36,47336,70],{"class":42},[36,47338,32184],{"class":50},[36,47340,32187],{"class":473},[36,47342,70],{"class":42},[36,47344,42935],{"class":50},[36,47346,1859],{"class":73},[36,47348,42940],{"class":50},[36,47350,32196],{"class":473},[36,47352,70],{"class":42},[36,47354,42935],{"class":50},[36,47356,1885],{"class":73},[36,47358,42940],{"class":50},[36,47360,32205],{"class":473},[36,47362,70],{"class":42},[36,47364,1741],{"class":73},[36,47366,2045],{"class":50},[36,47368,32214],{"class":473},[36,47370,70],{"class":42},[36,47372,1885],{"class":73},[36,47374,1680],{"class":50},[36,47376,47377],{"class":38,"line":216},[36,47378,43000],{"class":124},[36,47380,47381,47383,47385,47387,47389,47391,47393,47395,47397,47399,47401,47403,47405,47407,47409,47411],{"class":38,"line":231},[36,47382,32176],{"class":73},[36,47384,43007],{"class":50},[36,47386,70],{"class":42},[36,47388,32184],{"class":50},[36,47390,32187],{"class":473},[36,47392,70],{"class":42},[36,47394,42891],{"class":50},[36,47396,32196],{"class":473},[36,47398,70],{"class":42},[36,47400,43024],{"class":50},[36,47402,1859],{"class":73},[36,47404,42940],{"class":50},[36,47406,32205],{"class":473},[36,47408,70],{"class":42},[36,47410,1885],{"class":73},[36,47412,1680],{"class":50},[36,47414,47415,47417,47419,47421,47423,47425,47427,47429,47431,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451,47453,47455,47457],{"class":38,"line":236},[36,47416,32176],{"class":73},[36,47418,43043],{"class":50},[36,47420,70],{"class":42},[36,47422,32184],{"class":50},[36,47424,32187],{"class":473},[36,47426,70],{"class":42},[36,47428,43024],{"class":50},[36,47430,1859],{"class":73},[36,47432,42940],{"class":50},[36,47434,32196],{"class":473},[36,47436,70],{"class":42},[36,47438,43024],{"class":50},[36,47440,1885],{"class":73},[36,47442,42940],{"class":50},[36,47444,32205],{"class":473},[36,47446,70],{"class":42},[36,47448,1987],{"class":73},[36,47450,2045],{"class":50},[36,47452,32214],{"class":473},[36,47454,70],{"class":42},[36,47456,1747],{"class":73},[36,47458,1680],{"class":50},[36,47460,47461],{"class":38,"line":247},[36,47462,43088],{"class":124},[36,47464,47465],{"class":38,"line":637},[36,47466,43093],{"class":124},[36,47468,47469,47471,47473,47475,47477,47479,47481,47483,47485,47487,47489,47491,47493,47495,47497,47499],{"class":38,"line":646},[36,47470,32176],{"class":73},[36,47472,43100],{"class":50},[36,47474,70],{"class":42},[36,47476,36160],{"class":50},[36,47478,32205],{"class":473},[36,47480,70],{"class":42},[36,47482,1741],{"class":73},[36,47484,2045],{"class":50},[36,47486,32260],{"class":473},[36,47488,70],{"class":42},[36,47490,1885],{"class":73},[36,47492,2045],{"class":50},[36,47494,32214],{"class":473},[36,47496,70],{"class":42},[36,47498,1885],{"class":73},[36,47500,1680],{"class":50},[36,47502,47503,47505,47507,47509,47511,47513,47515,47517,47519,47521,47523,47525,47527,47529],{"class":38,"line":655},[36,47504,32176],{"class":73},[36,47506,43135],{"class":50},[36,47508,70],{"class":42},[36,47510,32184],{"class":50},[36,47512,32187],{"class":473},[36,47514,70],{"class":42},[36,47516,42891],{"class":50},[36,47518,32196],{"class":473},[36,47520,70],{"class":42},[36,47522,43152],{"class":50},[36,47524,32205],{"class":473},[36,47526,70],{"class":42},[36,47528,1885],{"class":73},[36,47530,1680],{"class":50},[36,47532,47533],{"class":38,"line":660},[36,47534,58],{"emptyLinePlaceholder":57},[36,47536,47537,47539,47541],{"class":38,"line":665},[36,47538,32132],{"class":42},[36,47540,32424],{"class":46},[36,47542,32427],{"class":50},[36,47544,47545,47547,47549,47551,47553,47555],{"class":38,"line":674},[36,47546,43177],{"class":50},[36,47548,70],{"class":42},[36,47550,32154],{"class":73},[36,47552,36515],{"class":50},[36,47554,32154],{"class":73},[36,47556,43188],{"class":50},[36,47558,47559,47561,47563,47565,47567,47569,47571,47573,47575,47577],{"class":38,"line":679},[36,47560,8561],{"class":50},[36,47562,70],{"class":42},[36,47564,32154],{"class":73},[36,47566,36515],{"class":50},[36,47568,32154],{"class":73},[36,47570,43203],{"class":50},[36,47572,32154],{"class":73},[36,47574,36515],{"class":50},[36,47576,32154],{"class":73},[36,47578,43212],{"class":50},[36,47580,47581,47583,47585,47587,47589,47591,47593,47595,47597,47599],{"class":38,"line":692},[36,47582,43217],{"class":50},[36,47584,70],{"class":42},[36,47586,32154],{"class":73},[36,47588,36515],{"class":50},[36,47590,32154],{"class":73},[36,47592,43228],{"class":50},[36,47594,32154],{"class":73},[36,47596,36515],{"class":50},[36,47598,32154],{"class":73},[36,47600,43237],{"class":50},[36,47602,47603,47605,47607,47609,47611,47613,47615,47617],{"class":38,"line":705},[36,47604,43242],{"class":50},[36,47606,70],{"class":42},[36,47608,32154],{"class":73},[36,47610,36515],{"class":50},[36,47612,32154],{"class":73},[36,47614,43253],{"class":50},[36,47616,32154],{"class":73},[36,47618,43258],{"class":50},[36,47620,47621],{"class":38,"line":710},[36,47622,43263],{"class":124},[36,47624,47625,47627,47629,47631,47633,47635],{"class":38,"line":722},[36,47626,16081],{"class":42},[36,47628,43270],{"class":50},[36,47630,34016],{"class":473},[36,47632,70],{"class":42},[36,47634,1885],{"class":73},[36,47636,1680],{"class":50},[36,47638,47639],{"class":38,"line":750},[36,47640,58],{"emptyLinePlaceholder":57},[36,47642,47643],{"class":38,"line":755},[36,47644,43291],{"class":124},[36,47646,47647,47649,47651,47653,47655,47657,47659],{"class":38,"line":777},[36,47648,16023],{"class":42},[36,47650,43298],{"class":46},[36,47652,222],{"class":50},[36,47654,32109],{"class":46},[36,47656,2225],{"class":50},[36,47658,32114],{"class":46},[36,47660,32117],{"class":50},[36,47662,47663],{"class":38,"line":802},[36,47664,43313],{"class":124},[36,47666,47667,47669,47671],{"class":38,"line":807},[36,47668,32132],{"class":42},[36,47670,32135],{"class":73},[36,47672,43322],{"class":50},[36,47674,47675,47677,47679,47681,47683,47685],{"class":38,"line":818},[36,47676,32148],{"class":73},[36,47678,43329],{"class":50},[36,47680,32154],{"class":73},[36,47682,32157],{"class":50},[36,47684,32160],{"class":73},[36,47686,3484],{"class":50},[36,47688,47689,47691,47693,47695],{"class":38,"line":843},[36,47690,32176],{"class":73},[36,47692,43344],{"class":50},[36,47694,70],{"class":42},[36,47696,39340],{"class":50},[36,47698,47699,47701,47703,47705,47707,47709,47711,47713,47715,47717,47719,47721,47723,47725,47727,47729,47731,47733,47735,47737,47739],{"class":38,"line":848},[36,47700,39345],{"class":50},[36,47702,32187],{"class":473},[36,47704,70],{"class":42},[36,47706,1741],{"class":73},[36,47708,2045],{"class":50},[36,47710,32196],{"class":473},[36,47712,70],{"class":42},[36,47714,1871],{"class":73},[36,47716,2045],{"class":50},[36,47718,32205],{"class":473},[36,47720,70],{"class":42},[36,47722,2036],{"class":73},[36,47724,2045],{"class":50},[36,47726,32260],{"class":473},[36,47728,70],{"class":42},[36,47730,1747],{"class":73},[36,47732,2045],{"class":50},[36,47734,32214],{"class":473},[36,47736,70],{"class":42},[36,47738,1741],{"class":73},[36,47740,39378],{"class":50},[36,47742,47743],{"class":38,"line":859},[36,47744,39383],{"class":50},[36,47746,47747,47749,47751,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771],{"class":38,"line":864},[36,47748,39428],{"class":50},[36,47750,32205],{"class":473},[36,47752,70],{"class":42},[36,47754,1741],{"class":73},[36,47756,2045],{"class":50},[36,47758,32260],{"class":473},[36,47760,70],{"class":42},[36,47762,1747],{"class":73},[36,47764,2045],{"class":50},[36,47766,32214],{"class":473},[36,47768,70],{"class":42},[36,47770,1885],{"class":73},[36,47772,1680],{"class":50},[36,47774,47775],{"class":38,"line":873},[36,47776,39457],{"class":50},[36,47778,47779,47781,47783,47785],{"class":38,"line":9454},[36,47780,32176],{"class":73},[36,47782,43435],{"class":50},[36,47784,70],{"class":42},[36,47786,39340],{"class":50},[36,47788,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807,47809,47811,47813],{"class":38,"line":9481},[36,47790,39345],{"class":50},[36,47792,32187],{"class":473},[36,47794,70],{"class":42},[36,47796,1871],{"class":73},[36,47798,2045],{"class":50},[36,47800,32196],{"class":473},[36,47802,70],{"class":42},[36,47804,1871],{"class":73},[36,47806,2045],{"class":50},[36,47808,32205],{"class":473},[36,47810,70],{"class":42},[36,47812,1885],{"class":73},[36,47814,39378],{"class":50},[36,47816,47817],{"class":38,"line":9486},[36,47818,39383],{"class":50},[36,47820,47821,47823,47825,47827,47829,47831,47833,47835,47837,47839,47841,47843,47845,47847,47849,47851,47853],{"class":38,"line":9492},[36,47822,39345],{"class":50},[36,47824,32187],{"class":473},[36,47826,70],{"class":42},[36,47828,1871],{"class":73},[36,47830,2045],{"class":50},[36,47832,32196],{"class":473},[36,47834,70],{"class":42},[36,47836,43490],{"class":73},[36,47838,2045],{"class":50},[36,47840,32205],{"class":473},[36,47842,70],{"class":42},[36,47844,1741],{"class":73},[36,47846,2045],{"class":50},[36,47848,32214],{"class":473},[36,47850,70],{"class":42},[36,47852,1885],{"class":73},[36,47854,39378],{"class":50},[36,47856,47857],{"class":38,"line":9504},[36,47858,39383],{"class":50},[36,47860,47861,47863,47865,47867,47869,47871,47873,47875,47877,47879,47881,47883,47885],{"class":38,"line":9516},[36,47862,39428],{"class":50},[36,47864,32205],{"class":473},[36,47866,70],{"class":42},[36,47868,1741],{"class":73},[36,47870,2045],{"class":50},[36,47872,32260],{"class":473},[36,47874,70],{"class":42},[36,47876,1747],{"class":73},[36,47878,2045],{"class":50},[36,47880,32214],{"class":473},[36,47882,70],{"class":42},[36,47884,1885],{"class":73},[36,47886,1680],{"class":50},[36,47888,47889],{"class":38,"line":9528},[36,47890,39457],{"class":50},[36,47892,47893,47895,47897,47899],{"class":38,"line":11184},[36,47894,32176],{"class":73},[36,47896,43551],{"class":50},[36,47898,70],{"class":42},[36,47900,39340],{"class":50},[36,47902,47903,47905,47907,47909,47911,47913,47915,47917,47919,47921,47923,47925,47927,47929,47931],{"class":38,"line":11209},[36,47904,43560],{"class":50},[36,47906,43490],{"class":73},[36,47908,2045],{"class":50},[36,47910,1871],{"class":73},[36,47912,43569],{"class":50},[36,47914,1877],{"class":73},[36,47916,2045],{"class":50},[36,47918,33401],{"class":73},[36,47920,43578],{"class":50},[36,47922,2268],{"class":73},[36,47924,2045],{"class":50},[36,47926,1865],{"class":73},[36,47928,43587],{"class":50},[36,47930,1865],{"class":73},[36,47932,39378],{"class":50},[36,47934,47935,47937,47939,47941,47943,47945,47947,47949,47951,47953,47955,47957,47959,47961,47963],{"class":38,"line":11232},[36,47936,43560],{"class":50},[36,47938,36201],{"class":73},[36,47940,2045],{"class":50},[36,47942,33401],{"class":73},[36,47944,43569],{"class":50},[36,47946,33401],{"class":73},[36,47948,2045],{"class":50},[36,47950,43490],{"class":73},[36,47952,43578],{"class":50},[36,47954,1865],{"class":73},[36,47956,2045],{"class":50},[36,47958,1877],{"class":73},[36,47960,43587],{"class":50},[36,47962,1871],{"class":73},[36,47964,39378],{"class":50},[36,47966,47967,47969,47971,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991],{"class":38,"line":11256},[36,47968,39428],{"class":50},[36,47970,32205],{"class":473},[36,47972,70],{"class":42},[36,47974,1741],{"class":73},[36,47976,2045],{"class":50},[36,47978,32260],{"class":473},[36,47980,70],{"class":42},[36,47982,1747],{"class":73},[36,47984,2045],{"class":50},[36,47986,32214],{"class":473},[36,47988,70],{"class":42},[36,47990,1885],{"class":73},[36,47992,1680],{"class":50},[36,47994,47995],{"class":38,"line":11261},[36,47996,39457],{"class":50},[36,47998,47999,48001,48003,48005],{"class":38,"line":11266},[36,48000,32176],{"class":73},[36,48002,43662],{"class":50},[36,48004,70],{"class":42},[36,48006,39340],{"class":50},[36,48008,48009,48011,48013,48015,48017,48019,48021,48023,48025,48027,48029,48031,48033,48035,48037],{"class":38,"line":11271},[36,48010,43560],{"class":50},[36,48012,43673],{"class":73},[36,48014,2045],{"class":50},[36,48016,43490],{"class":73},[36,48018,43569],{"class":50},[36,48020,1877],{"class":73},[36,48022,2045],{"class":50},[36,48024,43686],{"class":73},[36,48026,43578],{"class":50},[36,48028,2268],{"class":73},[36,48030,2045],{"class":50},[36,48032,2274],{"class":73},[36,48034,43587],{"class":50},[36,48036,1871],{"class":73},[36,48038,39378],{"class":50},[36,48040,48041,48043,48045,48047,48049,48051,48053,48055,48057,48059,48061,48063,48065,48067,48069],{"class":38,"line":11280},[36,48042,43560],{"class":50},[36,48044,39788],{"class":73},[36,48046,2045],{"class":50},[36,48048,22377],{"class":73},[36,48050,43569],{"class":50},[36,48052,2285],{"class":73},[36,48054,2045],{"class":50},[36,48056,32832],{"class":73},[36,48058,43578],{"class":50},[36,48060,2467],{"class":73},[36,48062,2045],{"class":50},[36,48064,1871],{"class":73},[36,48066,43587],{"class":50},[36,48068,1871],{"class":73},[36,48070,39378],{"class":50},[36,48072,48073,48075,48077,48079,48081,48083,48085,48087,48089,48091,48093,48095,48097,48099,48101],{"class":38,"line":11285},[36,48074,43560],{"class":50},[36,48076,39788],{"class":73},[36,48078,2045],{"class":50},[36,48080,33401],{"class":73},[36,48082,43569],{"class":50},[36,48084,33401],{"class":73},[36,48086,2045],{"class":50},[36,48088,36201],{"class":73},[36,48090,43578],{"class":50},[36,48092,2467],{"class":73},[36,48094,2045],{"class":50},[36,48096,1871],{"class":73},[36,48098,43587],{"class":50},[36,48100,1871],{"class":73},[36,48102,39378],{"class":50},[36,48104,48105,48107,48109,48111,48113,48115,48117,48119,48121,48123,48125,48127,48129,48131,48133],{"class":38,"line":11291},[36,48106,43560],{"class":50},[36,48108,39788],{"class":73},[36,48110,2045],{"class":50},[36,48112,2285],{"class":73},[36,48114,43569],{"class":50},[36,48116,33401],{"class":73},[36,48118,2045],{"class":50},[36,48120,43783],{"class":73},[36,48122,43578],{"class":50},[36,48124,1865],{"class":73},[36,48126,2045],{"class":50},[36,48128,1871],{"class":73},[36,48130,43587],{"class":50},[36,48132,1871],{"class":73},[36,48134,39378],{"class":50},[36,48136,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159,48161,48163,48165],{"class":38,"line":11312},[36,48138,43560],{"class":50},[36,48140,43804],{"class":73},[36,48142,2045],{"class":50},[36,48144,36201],{"class":73},[36,48146,43569],{"class":50},[36,48148,22377],{"class":73},[36,48150,2045],{"class":50},[36,48152,43817],{"class":73},[36,48154,43578],{"class":50},[36,48156,1865],{"class":73},[36,48158,2045],{"class":50},[36,48160,33401],{"class":73},[36,48162,43587],{"class":50},[36,48164,33401],{"class":73},[36,48166,39378],{"class":50},[36,48168,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193],{"class":38,"line":11318},[36,48170,39428],{"class":50},[36,48172,32205],{"class":473},[36,48174,70],{"class":42},[36,48176,1741],{"class":73},[36,48178,2045],{"class":50},[36,48180,32260],{"class":473},[36,48182,70],{"class":42},[36,48184,1747],{"class":73},[36,48186,2045],{"class":50},[36,48188,32214],{"class":473},[36,48190,70],{"class":42},[36,48192,1885],{"class":73},[36,48194,1680],{"class":50},[36,48196,48197],{"class":38,"line":11332},[36,48198,39457],{"class":50},[36,48200,48201,48203,48205,48207],{"class":38,"line":11338},[36,48202,32176],{"class":73},[36,48204,43870],{"class":50},[36,48206,70],{"class":42},[36,48208,39340],{"class":50},[36,48210,48211,48213,48215,48217,48219,48221,48223,48225,48227,48229,48231,48233,48235,48237,48239],{"class":38,"line":11365},[36,48212,43560],{"class":50},[36,48214,43881],{"class":73},[36,48216,2045],{"class":50},[36,48218,36201],{"class":73},[36,48220,43569],{"class":50},[36,48222,22377],{"class":73},[36,48224,2045],{"class":50},[36,48226,43817],{"class":73},[36,48228,43578],{"class":50},[36,48230,1865],{"class":73},[36,48232,2045],{"class":50},[36,48234,33401],{"class":73},[36,48236,43587],{"class":50},[36,48238,33401],{"class":73},[36,48240,39378],{"class":50},[36,48242,48243,48245,48247,48249,48251,48253,48255,48257,48259,48261,48263,48265,48267,48269,48271],{"class":38,"line":11374},[36,48244,43560],{"class":50},[36,48246,43881],{"class":73},[36,48248,2045],{"class":50},[36,48250,36271],{"class":73},[36,48252,43569],{"class":50},[36,48254,43490],{"class":73},[36,48256,2045],{"class":50},[36,48258,36271],{"class":73},[36,48260,43578],{"class":50},[36,48262,2274],{"class":73},[36,48264,2045],{"class":50},[36,48266,33401],{"class":73},[36,48268,43587],{"class":50},[36,48270,33401],{"class":73},[36,48272,39378],{"class":50},[36,48274,48275,48277,48279,48281,48283],{"class":38,"line":11380},[36,48276,43944],{"class":50},[36,48278,1885],{"class":73},[36,48280,2045],{"class":50},[36,48282,1885],{"class":73},[36,48284,43953],{"class":50},[36,48286,48287],{"class":38,"line":11388},[36,48288,40121],{"class":50},[36,48290,48291,48293,48295,48297,48299],{"class":38,"line":11393},[36,48292,40126],{"class":50},[36,48294,43964],{"class":73},[36,48296,2045],{"class":50},[36,48298,1747],{"class":73},[36,48300,1680],{"class":50},[36,48302,48303],{"class":38,"line":17933},[36,48304,39457],{"class":50},[36,48306,48307],{"class":38,"line":17939},[36,48308,43979],{"class":124},[36,48310,48311,48313,48315,48317,48319],{"class":38,"line":17962},[36,48312,4894],{"class":42},[36,48314,40199],{"class":50},[36,48316,27374],{"class":42},[36,48318,40204],{"class":73},[36,48320,40207],{"class":50},[36,48322,48323,48325,48327],{"class":38,"line":17968},[36,48324,6131],{"class":42},[36,48326,40219],{"class":73},[36,48328,40222],{"class":50},[36,48330,48331,48333,48335,48337,48339,48341,48343,48345,48347],{"class":38,"line":17991},[36,48332,40232],{"class":50},[36,48334,44006],{"class":473},[36,48336,70],{"class":42},[36,48338,44011],{"class":110},[36,48340,2045],{"class":50},[36,48342,40235],{"class":473},[36,48344,70],{"class":42},[36,48346,40240],{"class":110},[36,48348,1680],{"class":50},[36,48350,48351],{"class":38,"line":18005},[36,48352,44026],{"class":124},[36,48354,48355],{"class":38,"line":18025},[36,48356,44031],{"class":124},[36,48358,48359],{"class":38,"line":18031},[36,48360,44036],{"class":124},[36,48362,48363],{"class":38,"line":18042},[36,48364,44041],{"class":124},[36,48366,48367],{"class":38,"line":18065},[36,48368,44046],{"class":124},[36,48370,48371],{"class":38,"line":18087},[36,48372,44051],{"class":124},[36,48374,48375,48377,48379,48381,48383,48385],{"class":38,"line":18092},[36,48376,40252],{"class":42},[36,48378,40255],{"class":50},[36,48380,40258],{"class":42},[36,48382,40261],{"class":42},[36,48384,40264],{"class":73},[36,48386,5230],{"class":50},[36,48388,48389,48391,48393],{"class":38,"line":18098},[36,48390,40276],{"class":50},[36,48392,1859],{"class":73},[36,48394,1680],{"class":50},[36,48396,48397,48399,48401],{"class":38,"line":18112},[36,48398,44078],{"class":42},[36,48400,40219],{"class":73},[36,48402,40295],{"class":50},[36,48404,48405,48407,48409,48411,48413],{"class":38,"line":18125},[36,48406,44087],{"class":50},[36,48408,1859],{"class":73},[36,48410,2045],{"class":50},[36,48412,40317],{"class":73},[36,48414,1680],{"class":50},[36,48416,48417,48419,48421,48423,48425,48427],{"class":38,"line":18130},[36,48418,44100],{"class":42},[36,48420,40255],{"class":50},[36,48422,40258],{"class":42},[36,48424,40261],{"class":42},[36,48426,40264],{"class":73},[36,48428,5230],{"class":50},[36,48430,48431,48433,48435],{"class":38,"line":18144},[36,48432,44115],{"class":50},[36,48434,1859],{"class":73},[36,48436,1680],{"class":50},[36,48438,48439],{"class":38,"line":18149},[36,48440,36496],{"class":124},[36,48442,48443,48445,48447],{"class":38,"line":18155},[36,48444,32132],{"class":42},[36,48446,32424],{"class":46},[36,48448,32427],{"class":50},[36,48450,48451,48453,48455,48457],{"class":38,"line":18160},[36,48452,32432],{"class":50},[36,48454,70],{"class":42},[36,48456,32154],{"class":73},[36,48458,44142],{"class":50},[36,48460,48461,48463,48465,48467],{"class":38,"line":18174},[36,48462,32432],{"class":50},[36,48464,70],{"class":42},[36,48466,32154],{"class":73},[36,48468,44153],{"class":50},[36,48470,48471,48473,48475,48477],{"class":38,"line":18179},[36,48472,32432],{"class":50},[36,48474,70],{"class":42},[36,48476,32154],{"class":73},[36,48478,44164],{"class":50},[36,48480,48481,48483,48485,48487],{"class":38,"line":18184},[36,48482,32432],{"class":50},[36,48484,70],{"class":42},[36,48486,32154],{"class":73},[36,48488,44175],{"class":50},[36,48490,48491,48493,48495,48497],{"class":38,"line":18198},[36,48492,32432],{"class":50},[36,48494,70],{"class":42},[36,48496,32154],{"class":73},[36,48498,44186],{"class":50},[36,48500,48501,48503],{"class":38,"line":18210},[36,48502,16081],{"class":42},[36,48504,32540],{"class":50},[36,48506,48507],{"class":38,"line":18215},[36,48508,58],{"emptyLinePlaceholder":57},[36,48510,48511],{"class":38,"line":18228},[36,48512,44201],{"class":124},[36,48514,48515,48517,48519,48521,48523],{"class":38,"line":18233},[36,48516,3061],{"class":42},[36,48518,32551],{"class":73},[36,48520,4441],{"class":42},[36,48522,32556],{"class":110},[36,48524,5230],{"class":50},[36,48526,48527,48529,48531,48533,48535,48537,48539,48541,48543],{"class":38,"line":18238},[36,48528,32568],{"class":50},[36,48530,70],{"class":42},[36,48532,31782],{"class":50},[36,48534,32575],{"class":110},[36,48536,3222],{"class":42},[36,48538,32580],{"class":50},[36,48540,3219],{"class":42},[36,48542,31807],{"class":110},[36,48544,1680],{"class":50},[36,48546,48547,48549,48551],{"class":38,"line":18243},[36,48548,32620],{"class":50},[36,48550,70],{"class":42},[36,48552,44242],{"class":50},[36,48554,48555,48557,48559,48561,48563,48565,48567,48569],{"class":38,"line":18256},[36,48556,32630],{"class":73},[36,48558,32633],{"class":50},[36,48560,1885],{"class":73},[36,48562,2045],{"class":50},[36,48564,32832],{"class":73},[36,48566,2045],{"class":50},[36,48568,32832],{"class":73},[36,48570,32646],{"class":50},[23327,48572,48574],{"id":48573},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48576,48577],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,48579,48581],{"className":31709,"code":48580,"language":31711,"meta":31,"style":31},"# PIL（Python Imaging Library）里的 Image 用来读取图片\nfrom PIL import Image\n# os 用来处理文件夹和文件路径\nimport os\n# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\nimport numpy as np\n\n# 文件夹路径，包含所有图片文件\nfolder_path = 'data_cat_dog'\n\n# 初始化累积变量\ntotal_pixels = 0\nsum_normalized_pixel_values = np.zeros(3)  # 如果是RGB图像，需要三个通道的均值和方差\n\n# 遍历文件夹中的图片文件\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):  # 可根据实际情况添加其他格式\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n\n            # print(image_path)\n            # print(normalized_image_array.shape)\n            # 累积归一化后的像素值和像素数量\n            total_pixels += normalized_image_array.size\n            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n            sum_normalized_pixel_values += np.sum(normalized_image_array, axis=(0, 1))\n\n# 用像素总和\u002F像素总数 就得到每个通道的均值\nmean = sum_normalized_pixel_values \u002F total_pixels\n\nsum_squared_diff = np.zeros(3)\n\n# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n# os.path.join(root, filename)：得到每张图片的完整路径\n# Image.open(image_path)：打开图片\n# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\nfor root, dirs, files in os.walk(folder_path):\n    for filename in files:\n        if filename.endswith(('.jpg', '.jpeg', '.png', '.bmp')):\n            image_path = os.path.join(root, filename)\n            image = Image.open(image_path)\n            image_array = np.array(image)\n            # 归一化像素值到0-1之间\n            normalized_image_array = image_array \u002F 255.0\n            # print(normalized_image_array.shape)\n            # print(mean.shape)\n            # print(image_path)\n\n            try:\n                diff = (normalized_image_array - mean) ** 2\n                sum_squared_diff += np.sum(diff, axis=(0, 1))\n            except:\n                print(f\"捕获到自定义异常\")\n            # diff = (normalized_image_array - mean) ** 2\n            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n\nvariance = sum_squared_diff \u002F total_pixels\n\nprint(\"Mean:\", mean)\nprint(\"Variance:\", variance)\n\n",[33,48582,48583,48588,48601,48606,48612,48617,48627,48631,48636,48646,48650,48655,48665,48682,48686,48691,48703,48715,48746,48755,48765,48775,48779,48784,48799,48803,48808,48813,48818,48828,48833,48858,48862,48867,48882,48886,48899,48903,48908,48913,48918,48923,48928,48938,48948,48971,48979,48987,48995,48999,49011,49015,49020,49024,49028,49035,49055,49079,49086,49100,49105,49110,49114,49128,49132,49144],{"__ignoreMap":31},[36,48584,48585],{"class":38,"line":39},[36,48586,48587],{"class":124},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[36,48589,48590,48592,48595,48598],{"class":38,"line":54},[36,48591,32068],{"class":42},[36,48593,48594],{"class":73}," PIL",[36,48596,48597],{"class":42}," import",[36,48599,48600],{"class":50}," Image\n",[36,48602,48603],{"class":38,"line":61},[36,48604,48605],{"class":124},"# os 用来处理文件夹和文件路径\n",[36,48607,48608,48610],{"class":38,"line":80},[36,48609,31723],{"class":42},[36,48611,46636],{"class":50},[36,48613,48614],{"class":38,"line":96},[36,48615,48616],{"class":124},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[36,48618,48619,48621,48623,48625],{"class":38,"line":101},[36,48620,31723],{"class":42},[36,48622,32711],{"class":50},[36,48624,32714],{"class":42},[36,48626,32717],{"class":50},[36,48628,48629],{"class":38,"line":128},[36,48630,58],{"emptyLinePlaceholder":57},[36,48632,48633],{"class":38,"line":149},[36,48634,48635],{"class":124},"# 文件夹路径，包含所有图片文件\n",[36,48637,48638,48641,48643],{"class":38,"line":154},[36,48639,48640],{"class":50},"folder_path ",[36,48642,70],{"class":42},[36,48644,48645],{"class":110}," 'data_cat_dog'\n",[36,48647,48648],{"class":38,"line":167},[36,48649,58],{"emptyLinePlaceholder":57},[36,48651,48652],{"class":38,"line":172},[36,48653,48654],{"class":124},"# 初始化累积变量\n",[36,48656,48657,48660,48662],{"class":38,"line":192},[36,48658,48659],{"class":50},"total_pixels ",[36,48661,70],{"class":42},[36,48663,48664],{"class":73}," 0\n",[36,48666,48667,48670,48672,48675,48677,48679],{"class":38,"line":211},[36,48668,48669],{"class":50},"sum_normalized_pixel_values ",[36,48671,70],{"class":42},[36,48673,48674],{"class":50}," np.zeros(",[36,48676,1741],{"class":73},[36,48678,47139],{"class":50},[36,48680,48681],{"class":124},"# 如果是RGB图像，需要三个通道的均值和方差\n",[36,48683,48684],{"class":38,"line":216},[36,48685,58],{"emptyLinePlaceholder":57},[36,48687,48688],{"class":38,"line":231},[36,48689,48690],{"class":124},"# 遍历文件夹中的图片文件\n",[36,48692,48693,48695,48698,48700],{"class":38,"line":236},[36,48694,4516],{"class":42},[36,48696,48697],{"class":50}," root, dirs, files ",[36,48699,27374],{"class":42},[36,48701,48702],{"class":50}," os.walk(folder_path):\n",[36,48704,48705,48707,48710,48712],{"class":38,"line":247},[36,48706,4692],{"class":42},[36,48708,48709],{"class":50}," filename ",[36,48711,27374],{"class":42},[36,48713,48714],{"class":50}," files:\n",[36,48716,48717,48719,48722,48725,48727,48730,48732,48735,48737,48740,48743],{"class":38,"line":637},[36,48718,3999],{"class":42},[36,48720,48721],{"class":50}," filename.endswith((",[36,48723,48724],{"class":110},"'.jpg'",[36,48726,477],{"class":50},[36,48728,48729],{"class":110},"'.jpeg'",[36,48731,477],{"class":50},[36,48733,48734],{"class":110},"'.png'",[36,48736,477],{"class":50},[36,48738,48739],{"class":110},"'.bmp'",[36,48741,48742],{"class":50},")):  ",[36,48744,48745],{"class":124},"# 可根据实际情况添加其他格式\n",[36,48747,48748,48750,48752],{"class":38,"line":646},[36,48749,47004],{"class":50},[36,48751,70],{"class":42},[36,48753,48754],{"class":50}," os.path.join(root, filename)\n",[36,48756,48757,48760,48762],{"class":38,"line":655},[36,48758,48759],{"class":50},"            image ",[36,48761,70],{"class":42},[36,48763,48764],{"class":50}," Image.open(image_path)\n",[36,48766,48767,48770,48772],{"class":38,"line":660},[36,48768,48769],{"class":50},"            image_array ",[36,48771,70],{"class":42},[36,48773,48774],{"class":50}," np.array(image)\n",[36,48776,48777],{"class":38,"line":665},[36,48778,58],{"emptyLinePlaceholder":57},[36,48780,48781],{"class":38,"line":674},[36,48782,48783],{"class":124},"            # 归一化像素值到0-1之间\n",[36,48785,48786,48789,48791,48794,48796],{"class":38,"line":679},[36,48787,48788],{"class":50},"            normalized_image_array ",[36,48790,70],{"class":42},[36,48792,48793],{"class":50}," image_array ",[36,48795,2251],{"class":42},[36,48797,48798],{"class":73}," 255.0\n",[36,48800,48801],{"class":38,"line":692},[36,48802,58],{"emptyLinePlaceholder":57},[36,48804,48805],{"class":38,"line":705},[36,48806,48807],{"class":124},"            # print(image_path)\n",[36,48809,48810],{"class":38,"line":710},[36,48811,48812],{"class":124},"            # print(normalized_image_array.shape)\n",[36,48814,48815],{"class":38,"line":722},[36,48816,48817],{"class":124},"            # 累积归一化后的像素值和像素数量\n",[36,48819,48820,48823,48825],{"class":38,"line":750},[36,48821,48822],{"class":50},"            total_pixels ",[36,48824,10945],{"class":42},[36,48826,48827],{"class":50}," normalized_image_array.size\n",[36,48829,48830],{"class":38,"line":755},[36,48831,48832],{"class":124},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[36,48834,48835,48838,48840,48843,48846,48848,48850,48852,48854,48856],{"class":38,"line":777},[36,48836,48837],{"class":50},"            sum_normalized_pixel_values ",[36,48839,10945],{"class":42},[36,48841,48842],{"class":50}," np.sum(normalized_image_array, ",[36,48844,48845],{"class":473},"axis",[36,48847,70],{"class":42},[36,48849,222],{"class":50},[36,48851,1859],{"class":73},[36,48853,477],{"class":50},[36,48855,1885],{"class":73},[36,48857,31828],{"class":50},[36,48859,48860],{"class":38,"line":802},[36,48861,58],{"emptyLinePlaceholder":57},[36,48863,48864],{"class":38,"line":807},[36,48865,48866],{"class":124},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[36,48868,48869,48872,48874,48877,48879],{"class":38,"line":818},[36,48870,48871],{"class":50},"mean ",[36,48873,70],{"class":42},[36,48875,48876],{"class":50}," sum_normalized_pixel_values ",[36,48878,2251],{"class":42},[36,48880,48881],{"class":50}," total_pixels\n",[36,48883,48884],{"class":38,"line":843},[36,48885,58],{"emptyLinePlaceholder":57},[36,48887,48888,48891,48893,48895,48897],{"class":38,"line":848},[36,48889,48890],{"class":50},"sum_squared_diff ",[36,48892,70],{"class":42},[36,48894,48674],{"class":50},[36,48896,1741],{"class":73},[36,48898,1680],{"class":50},[36,48900,48901],{"class":38,"line":859},[36,48902,58],{"emptyLinePlaceholder":57},[36,48904,48905],{"class":38,"line":864},[36,48906,48907],{"class":124},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[36,48909,48910],{"class":38,"line":873},[36,48911,48912],{"class":124},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[36,48914,48915],{"class":38,"line":9454},[36,48916,48917],{"class":124},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[36,48919,48920],{"class":38,"line":9481},[36,48921,48922],{"class":124},"# Image.open(image_path)：打开图片\n",[36,48924,48925],{"class":38,"line":9486},[36,48926,48927],{"class":124},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[36,48929,48930,48932,48934,48936],{"class":38,"line":9492},[36,48931,4516],{"class":42},[36,48933,48697],{"class":50},[36,48935,27374],{"class":42},[36,48937,48702],{"class":50},[36,48939,48940,48942,48944,48946],{"class":38,"line":9504},[36,48941,4692],{"class":42},[36,48943,48709],{"class":50},[36,48945,27374],{"class":42},[36,48947,48714],{"class":50},[36,48949,48950,48952,48954,48956,48958,48960,48962,48964,48966,48968],{"class":38,"line":9516},[36,48951,3999],{"class":42},[36,48953,48721],{"class":50},[36,48955,48724],{"class":110},[36,48957,477],{"class":50},[36,48959,48729],{"class":110},[36,48961,477],{"class":50},[36,48963,48734],{"class":110},[36,48965,477],{"class":50},[36,48967,48739],{"class":110},[36,48969,48970],{"class":50},")):\n",[36,48972,48973,48975,48977],{"class":38,"line":9528},[36,48974,47004],{"class":50},[36,48976,70],{"class":42},[36,48978,48754],{"class":50},[36,48980,48981,48983,48985],{"class":38,"line":11184},[36,48982,48759],{"class":50},[36,48984,70],{"class":42},[36,48986,48764],{"class":50},[36,48988,48989,48991,48993],{"class":38,"line":11209},[36,48990,48769],{"class":50},[36,48992,70],{"class":42},[36,48994,48774],{"class":50},[36,48996,48997],{"class":38,"line":11232},[36,48998,48783],{"class":124},[36,49000,49001,49003,49005,49007,49009],{"class":38,"line":11256},[36,49002,48788],{"class":50},[36,49004,70],{"class":42},[36,49006,48793],{"class":50},[36,49008,2251],{"class":42},[36,49010,48798],{"class":73},[36,49012,49013],{"class":38,"line":11261},[36,49014,48812],{"class":124},[36,49016,49017],{"class":38,"line":11266},[36,49018,49019],{"class":124},"            # print(mean.shape)\n",[36,49021,49022],{"class":38,"line":11271},[36,49023,48807],{"class":124},[36,49025,49026],{"class":38,"line":11280},[36,49027,58],{"emptyLinePlaceholder":57},[36,49029,49030,49033],{"class":38,"line":11285},[36,49031,49032],{"class":42},"            try",[36,49034,5230],{"class":50},[36,49036,49037,49040,49042,49045,49047,49050,49052],{"class":38,"line":11291},[36,49038,49039],{"class":50},"                diff ",[36,49041,70],{"class":42},[36,49043,49044],{"class":50}," (normalized_image_array ",[36,49046,2199],{"class":42},[36,49048,49049],{"class":50}," mean) ",[36,49051,12126],{"class":42},[36,49053,49054],{"class":73}," 2\n",[36,49056,49057,49060,49062,49065,49067,49069,49071,49073,49075,49077],{"class":38,"line":11312},[36,49058,49059],{"class":50},"                sum_squared_diff ",[36,49061,10945],{"class":42},[36,49063,49064],{"class":50}," np.sum(diff, ",[36,49066,48845],{"class":473},[36,49068,70],{"class":42},[36,49070,222],{"class":50},[36,49072,1859],{"class":73},[36,49074,477],{"class":50},[36,49076,1885],{"class":73},[36,49078,31828],{"class":50},[36,49080,49081,49084],{"class":38,"line":11318},[36,49082,49083],{"class":42},"            except",[36,49085,5230],{"class":50},[36,49087,49088,49091,49093,49095,49098],{"class":38,"line":11332},[36,49089,49090],{"class":73},"                print",[36,49092,222],{"class":50},[36,49094,1724],{"class":42},[36,49096,49097],{"class":110},"\"捕获到自定义异常\"",[36,49099,1680],{"class":50},[36,49101,49102],{"class":38,"line":11338},[36,49103,49104],{"class":124},"            # diff = (normalized_image_array - mean) ** 2\n",[36,49106,49107],{"class":38,"line":11365},[36,49108,49109],{"class":124},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[36,49111,49112],{"class":38,"line":11374},[36,49113,58],{"emptyLinePlaceholder":57},[36,49115,49116,49119,49121,49124,49126],{"class":38,"line":11380},[36,49117,49118],{"class":50},"variance ",[36,49120,70],{"class":42},[36,49122,49123],{"class":50}," sum_squared_diff ",[36,49125,2251],{"class":42},[36,49127,48881],{"class":50},[36,49129,49130],{"class":38,"line":11388},[36,49131,58],{"emptyLinePlaceholder":57},[36,49133,49134,49136,49138,49141],{"class":38,"line":11393},[36,49135,31746],{"class":73},[36,49137,222],{"class":50},[36,49139,49140],{"class":110},"\"Mean:\"",[36,49142,49143],{"class":50},", mean)\n",[36,49145,49146,49148,49150,49153],{"class":38,"line":17933},[36,49147,31746],{"class":73},[36,49149,222],{"class":50},[36,49151,49152],{"class":110},"\"Variance:\"",[36,49154,49155],{"class":50},", variance)\n",[26,49157,49159],{"className":31709,"code":49158,"language":31711,"meta":31,"style":31},"import copy\nimport time\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset\nfrom torchvision.datasets import ImageFolder # 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \nfrom torchvision import transforms\nimport torch.utils.data as Data\nimport matplotlib.pyplot as plt\n# 导入模型\nfrom model import GoogLeNet, Inception\nfrom torch import nn\n\n# 处理训练集与验证集函数--->划分数据集\ndef train_val_data_process():\n    # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftrain\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    train_data=ImageFolder(ROOT_PATH,transform=train_transform)\n\n    train_data,val_data=Data.random_split(train_data,[round(0.8*len(train_data)),round(0.2*len(train_data))])\n    train_dataloader = Data.DataLoader(dataset=train_data,\n                                       batch_size=32,\n                                       shuffle=True,\n                                       # 规定8个进程\n                                       num_workers=8)\n    val_dataloader=Data.DataLoader(dataset=val_data,\n                                   batch_size=32,\n                                   shuffle=True,\n                                   num_workers=8)\n    return train_dataloader,val_dataloader\n\n# 验证是否出错\n# train_val_data_process()\n\n# 定义模型训练函数\ndef train_model_process(model,train_dataloader,val_dataloader,num_epochs):\n    device=torch.device(\"cuda\" if torch.cuda.is_available() else 'cpu')\n\n    # 定义优化器\n    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n    # lr为学习率\n    optimizer=torch.optim.Adam(model.parameters(),lr=0.001)\n\n    # 定义损失函数使用交叉熵损失函数\n    criterion=nn.CrossEntropyLoss()\n\n    # 将模型放到GPU中进行训练\n    model=model.to(device)\n    # 复制当前模型的参数\n    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n    best_model_wts=copy.deepcopy(model.state_dict())\n\n    # 初始化参数\n    # 最高准确度\n    best_acc=0.0\n    # 训练集损失列表\n    train_loss_all=[]\n    # 验证集函数列表\n    val_loss_all=[]\n    # 训练集准确度列表\n    train_acc_all=[]\n    # 验证集准确度列表\n    val_acc_all=[]\n\n    # 保存当前时间--->方便看每轮训练的时间\n    since=time.time()\n\n    # 准备工作完成--->开始训练模型\n    for epoch in range(num_epochs):\n        print(\"Epoch {}\u002F{}\".format(epoch,num_epochs-1))\n        print(\"-\"*10)\n\n        # 初始化参数\n        # 训练集损失函数\n        train_loss=0.0\n        # 训练集准确度\n        train_corrects=0\n        # 验证集损失函数\n        val_loss=0.0\n        # 验证集准确度\n        val_corrects=0\n        # 训练集样本数量\n        train_num=0\n        # 验证集样本数量\n        val_num=0\n        # 将数据放到设备,并开始训练\n        for step,(b_x,b_y) in enumerate(train_dataloader):\n            # 将特征放入到训练设备\n            b_x=b_x.to(device)\n            # 将标签放入到训练设备当中\n            b_y=b_y.to(device)\n            # 设置模型为训练模式\n            model.train()\n            # 将数据放到模型当中,开始前向传播\n            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n            output=model(b_x)\n            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算每一个batch的损失函数\n            loss=criterion(output,b_y)\n            # 将梯度初始化为0\n            optimizer.zero_grad()\n            # 梯度置为0后再进行反向传播\n            loss.backward()\n            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n            optimizer.step()\n            # loss.item()指的是batch的平均损失\n            train_loss+=loss.item()*b_x.size(0)\n            # 计算每个批次中正确预测的数量\n            train_corrects+=torch.sum(pre_lab==b_y.data)\n            # 计算目前为止一共处理了多少样本\n            train_num+=b_x.size(0)\n        # 验证数据\n        for step ,(b_x,b_y) in enumerate(val_dataloader):\n            # 将特征放到验证设备当中\n            b_x=b_x.to(device)\n            # 将标签放到放到训练设备当中\n            b_y=b_y.to(device)\n            # 开启验证模式，设置模型为评估模式\n            model.eval()\n            # 验证时不计算梯度以节省内存\u002F计算\n            with torch.no_grad():\n                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n                output=model(b_x)\n                # 查找每一行中最大值对应的下标\n                pre_lab=torch.argmax(output,dim=1)\n                # 计算验证集上的当前 batch 损失\n                val_batch_loss=criterion(output,b_y)\n                # 对损失函数进行累加（按样本数加权）\n                val_loss+=val_batch_loss.item()*b_x.size(0)\n                val_corrects+=torch.sum(pre_lab==b_y.data)\n            # 当前用于验证的样本数量\n            val_num+=b_x.size(0)\n        # 计算并保存每一次迭代的loss值和准确率\n        # 计算并保存训练集的loss值\n        train_loss_all.append(train_loss\u002Ftrain_num)\n        # 取双精度\n        # 计算并保存训练集的准确率\n        train_acc_all.append(train_corrects.double().item()\u002Ftrain_num)\n        # 计算并保存验证集的loss值\n        val_loss_all.append(val_loss\u002Fval_num)\n        # 计算并保存验证集的准确率\n        val_acc_all.append(val_corrects.double().item()\u002Fval_num)\n\n        # 打印训练一轮的loss值和准确率\n        print('{}train loss:{:.4f} train acc:{:.4f}'.format(epoch,train_loss_all[-1],train_acc_all[-1]))\n        print('{}val loss:{:.4f} val acc:{:.4f}'.format(epoch,val_loss_all[-1],val_acc_all[-1]))\n\n        # 判断准确度--->保存最优模型\n        if val_acc_all[-1]>best_acc:\n            # 保存当前模型准确度\n            best_acc:float=val_acc_all[-1]\n            # 保存当前的准确度\n            # model.state_dict()是当前模型的所有参数（权重和偏置）\n            best_model_wts=copy.deepcopy(model.state_dict())\n\n        # 计算耗时\n        time_use=time.time()-since\n        print('训练和验证耗费的时间{:.0f}m{:.0f}s'.format(time_use\u002F\u002F60,time_use%60))\n    # 选择最优参数并保存\n    # 保存最佳模型权重字典\n    torch.save(best_model_wts,'.\u002Fbest_model.pth')\n    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n    train_process=pd.DataFrame(data={\n        \"epoch\":range(num_epochs),\n        \"train_loss_all\":train_loss_all,\n        \"val_loss_all\":val_loss_all,\n        \"train_acc_all\":train_acc_all,\n        \"val_acc_all\":val_acc_all\n    })\n    # 返回训练保存的过程\n    return train_process\n\n# 将loss值和精度按照图片的形式展示出来\ndef matplot_acc_loss(train_process):\n    # 设置图的大小\n    plt.figure(figsize=(12,4))\n    # 设置图中有几张图\n    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n    # ①loss图\n    plt.subplot(1,2,1)\n    # 补充:\n    # plt.subplot(nrows, ncols, index)\n    # nrows：行数\n    # ncols：列数\n    # index：目前选中第几个子图（从1开始）\n    plt.plot(train_process[\"epoch\"],train_process.train_loss_all,'ro-',label='train loss')\n    plt.plot(train_process[\"epoch\"],train_process.val_loss_all,'bs--',label='val loss')\n    # 添加一个图例\n    plt.legend()\n    # 给轴添加标签\n    plt.xlabel('epoch')\n    plt.ylabel('loss')\n    # ②准确度图\n    plt.subplot(1,2,2)\n    plt.plot(train_process[\"epoch\"],train_process.train_acc_all,'ro-',label='train acc')\n    plt.plot(train_process[\"epoch\"],train_process.val_acc_all,'bs--',label='val acc')\n    # 添加图例\n    plt.legend()\n    plt.xlabel(\"epoch\")\n    plt.ylabel(\"acc\")\n    plt.show()\n\n# 正式开始训练:\nif __name__==\"__main__\":\n    # 将模型实例化\n    GoogLeNet=GoogLeNet(Inception)\n    train_dataloader,val_dataloader=train_val_data_process()\n    train_process=train_model_process(GoogLeNet,train_dataloader,val_dataloader,num_epochs=60)\n    matplot_acc_loss(train_process)\n",[33,49160,49161,49167,49173,49183,49189,49199,49213,49223,49233,49243,49247,49257,49267,49271,49275,49283,49288,49293,49312,49316,49321,49326,49331,49336,49377,49382,49392,49397,49410,49415,49420,49425,49430,49435,49439,49444,49449,49471,49475,49507,49521,49531,49541,49545,49555,49569,49579,49589,49599,49605,49609,49613,49617,49621,49625,49633,49653,49657,49661,49665,49669,49685,49689,49693,49701,49705,49709,49717,49721,49725,49729,49737,49741,49745,49749,49757,49761,49769,49773,49781,49785,49793,49797,49805,49809,49813,49821,49825,49829,49841,49865,49879,49883,49887,49891,49899,49903,49911,49915,49923,49927,49935,49939,49947,49951,49959,49963,49975,49979,49987,49991,49999,50003,50007,50011,50015,50023,50027,50043,50047,50055,50059,50063,50067,50071,50075,50079,50083,50099,50103,50115,50119,50131,50135,50147,50151,50159,50163,50171,50175,50179,50183,50189,50193,50201,50205,50221,50225,50233,50237,50253,50265,50269,50281,50285,50289,50297,50301,50305,50313,50317,50325,50329,50337,50341,50345,50387,50429,50433,50437,50453,50457,50473,50477,50481,50489,50493,50497,50509,50547,50551,50555,50563,50567,50581,50591,50597,50603,50609,50615,50619,50623,50629,50633,50637,50645,50649,50667,50671,50675,50679,50695,50699,50703,50707,50711,50715,50735,50755,50759,50763,50767,50775,50783,50787,50803,50823,50843,50847,50852,50861,50870,50875,50880,50885,50898,50903,50912,50921,50938],{"__ignoreMap":31},[36,49162,49163,49165],{"class":38,"line":39},[36,49164,31723],{"class":42},[36,49166,33153],{"class":50},[36,49168,49169,49171],{"class":38,"line":54},[36,49170,31723],{"class":42},[36,49172,33160],{"class":50},[36,49174,49175,49177,49179,49181],{"class":38,"line":61},[36,49176,31723],{"class":42},[36,49178,33171],{"class":50},[36,49180,32714],{"class":42},[36,49182,33176],{"class":50},[36,49184,49185,49187],{"class":38,"line":80},[36,49186,31723],{"class":42},[36,49188,31726],{"class":50},[36,49190,49191,49193,49195,49197],{"class":38,"line":96},[36,49192,32068],{"class":42},[36,49194,32746],{"class":50},[36,49196,31723],{"class":42},[36,49198,33193],{"class":50},[36,49200,49201,49203,49205,49207,49210],{"class":38,"line":101},[36,49202,32068],{"class":42},[36,49204,32699],{"class":50},[36,49206,31723],{"class":42},[36,49208,49209],{"class":50}," ImageFolder ",[36,49211,49212],{"class":124},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[36,49214,49215,49217,49219,49221],{"class":38,"line":128},[36,49216,32068],{"class":42},[36,49218,32729],{"class":50},[36,49220,31723],{"class":42},[36,49222,32734],{"class":50},[36,49224,49225,49227,49229,49231],{"class":38,"line":149},[36,49226,31723],{"class":42},[36,49228,32746],{"class":50},[36,49230,32714],{"class":42},[36,49232,32751],{"class":50},[36,49234,49235,49237,49239,49241],{"class":38,"line":154},[36,49236,31723],{"class":42},[36,49238,32763],{"class":50},[36,49240,32714],{"class":42},[36,49242,32768],{"class":50},[36,49244,49245],{"class":38,"line":167},[36,49246,33238],{"class":124},[36,49248,49249,49251,49253,49255],{"class":38,"line":172},[36,49250,32068],{"class":42},[36,49252,33245],{"class":50},[36,49254,31723],{"class":42},[36,49256,44362],{"class":50},[36,49258,49259,49261,49263,49265],{"class":38,"line":192},[36,49260,32068],{"class":42},[36,49262,32071],{"class":50},[36,49264,31723],{"class":42},[36,49266,32076],{"class":50},[36,49268,49269],{"class":38,"line":211},[36,49270,58],{"emptyLinePlaceholder":57},[36,49272,49273],{"class":38,"line":216},[36,49274,33273],{"class":124},[36,49276,49277,49279,49281],{"class":38,"line":231},[36,49278,33278],{"class":42},[36,49280,33281],{"class":46},[36,49282,33284],{"class":50},[36,49284,49285],{"class":38,"line":236},[36,49286,49287],{"class":124},"    # 导入自己的数据集，并进行数据处理\n",[36,49289,49290],{"class":38,"line":247},[36,49291,49292],{"class":124},"    # 定义数据集的路径\n",[36,49294,49295,49298,49300,49302,49304,49306,49310],{"class":38,"line":637},[36,49296,49297],{"class":73},"    ROOT_PATH",[36,49299,70],{"class":42},[36,49301,2337],{"class":42},[36,49303,1919],{"class":110},[36,49305,2225],{"class":73},[36,49307,49309],{"class":49308},"sA_wV","\u002Fdata\u002Ftrain",[36,49311,26464],{"class":110},[36,49313,49314],{"class":38,"line":646},[36,49315,58],{"emptyLinePlaceholder":57},[36,49317,49318],{"class":38,"line":655},[36,49319,49320],{"class":124},"    # 定义归一化方法\n",[36,49322,49323],{"class":38,"line":660},[36,49324,49325],{"class":124},"    # 这里需要先计算一下数据集的均值和方差\n",[36,49327,49328],{"class":38,"line":665},[36,49329,49330],{"class":124},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[36,49332,49333],{"class":38,"line":674},[36,49334,49335],{"class":124},"    # 第一个参数是均值，第二个参数是方差\n",[36,49337,49338,49341,49343,49346,49349,49351,49354,49356,49359,49362,49365,49367,49370,49372,49375],{"class":38,"line":679},[36,49339,49340],{"class":50},"    normalize",[36,49342,70],{"class":42},[36,49344,49345],{"class":50},"transforms.Normalize([",[36,49347,49348],{"class":73},"0.162",[36,49350,2045],{"class":50},[36,49352,49353],{"class":73},"0.151",[36,49355,2045],{"class":50},[36,49357,49358],{"class":73},"0.138",[36,49360,49361],{"class":50},"],[",[36,49363,49364],{"class":73},"0.058",[36,49366,2045],{"class":50},[36,49368,49369],{"class":73},"0.052",[36,49371,2045],{"class":50},[36,49373,49374],{"class":73},"0.048",[36,49376,6146],{"class":50},[36,49378,49379],{"class":38,"line":692},[36,49380,49381],{"class":124},"    # 定义数据集处理方法变量\n",[36,49383,49384,49387,49389],{"class":38,"line":705},[36,49385,49386],{"class":50},"    train_transform",[36,49388,70],{"class":42},[36,49390,49391],{"class":50},"transforms.Compose([\n",[36,49393,49394],{"class":38,"line":710},[36,49395,49396],{"class":124},"        # 调整图像大小为224*224\n",[36,49398,49399,49402,49404,49406,49408],{"class":38,"line":722},[36,49400,49401],{"class":50},"        transforms.Resize((",[36,49403,32832],{"class":73},[36,49405,2045],{"class":50},[36,49407,32832],{"class":73},[36,49409,43953],{"class":50},[36,49411,49412],{"class":38,"line":750},[36,49413,49414],{"class":124},"        # 将图像转换为张量\n",[36,49416,49417],{"class":38,"line":755},[36,49418,49419],{"class":50},"        transforms.ToTensor(),\n",[36,49421,49422],{"class":38,"line":777},[36,49423,49424],{"class":50},"        normalize])\n",[36,49426,49427],{"class":38,"line":802},[36,49428,49429],{"class":124},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[36,49431,49432],{"class":38,"line":807},[36,49433,49434],{"class":124},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[36,49436,49437],{"class":38,"line":818},[36,49438,58],{"emptyLinePlaceholder":57},[36,49440,49441],{"class":38,"line":843},[36,49442,49443],{"class":124},"    # 加载数据集\n",[36,49445,49446],{"class":38,"line":848},[36,49447,49448],{"class":124},"    # 传入数据集路径与处理方法\n",[36,49450,49451,49453,49455,49458,49461,49463,49466,49468],{"class":38,"line":859},[36,49452,33289],{"class":50},[36,49454,70],{"class":42},[36,49456,49457],{"class":50},"ImageFolder(",[36,49459,49460],{"class":73},"ROOT_PATH",[36,49462,2045],{"class":50},[36,49464,49465],{"class":473},"transform",[36,49467,70],{"class":42},[36,49469,49470],{"class":50},"train_transform)\n",[36,49472,49473],{"class":38,"line":864},[36,49474,58],{"emptyLinePlaceholder":57},[36,49476,49477,49479,49481,49483,49485,49487,49489,49491,49493,49495,49497,49499,49501,49503,49505],{"class":38,"line":873},[36,49478,33341],{"class":50},[36,49480,70],{"class":42},[36,49482,33346],{"class":50},[36,49484,33349],{"class":73},[36,49486,222],{"class":50},[36,49488,33354],{"class":73},[36,49490,2122],{"class":42},[36,49492,8832],{"class":73},[36,49494,33361],{"class":50},[36,49496,33349],{"class":73},[36,49498,222],{"class":50},[36,49500,33368],{"class":73},[36,49502,2122],{"class":42},[36,49504,8832],{"class":73},[36,49506,33375],{"class":50},[36,49508,49509,49511,49513,49515,49517,49519],{"class":38,"line":9454},[36,49510,33380],{"class":50},[36,49512,70],{"class":42},[36,49514,33385],{"class":50},[36,49516,32868],{"class":473},[36,49518,70],{"class":42},[36,49520,32873],{"class":50},[36,49522,49523,49525,49527,49529],{"class":38,"line":9481},[36,49524,33396],{"class":473},[36,49526,70],{"class":42},[36,49528,1865],{"class":73},[36,49530,32797],{"class":50},[36,49532,49533,49535,49537,49539],{"class":38,"line":9486},[36,49534,33408],{"class":473},[36,49536,70],{"class":42},[36,49538,32807],{"class":73},[36,49540,32797],{"class":50},[36,49542,49543],{"class":38,"line":9492},[36,49544,33419],{"class":124},[36,49546,49547,49549,49551,49553],{"class":38,"line":9504},[36,49548,33424],{"class":473},[36,49550,70],{"class":42},[36,49552,2062],{"class":73},[36,49554,1680],{"class":50},[36,49556,49557,49559,49561,49563,49565,49567],{"class":38,"line":9516},[36,49558,33435],{"class":50},[36,49560,70],{"class":42},[36,49562,32865],{"class":50},[36,49564,32868],{"class":473},[36,49566,70],{"class":42},[36,49568,33446],{"class":50},[36,49570,49571,49573,49575,49577],{"class":38,"line":9528},[36,49572,33451],{"class":473},[36,49574,70],{"class":42},[36,49576,1865],{"class":73},[36,49578,32797],{"class":50},[36,49580,49581,49583,49585,49587],{"class":38,"line":11184},[36,49582,33462],{"class":473},[36,49584,70],{"class":42},[36,49586,32807],{"class":73},[36,49588,32797],{"class":50},[36,49590,49591,49593,49595,49597],{"class":38,"line":11209},[36,49592,33473],{"class":473},[36,49594,70],{"class":42},[36,49596,2062],{"class":73},[36,49598,1680],{"class":50},[36,49600,49601,49603],{"class":38,"line":11232},[36,49602,239],{"class":42},[36,49604,33486],{"class":50},[36,49606,49607],{"class":38,"line":11256},[36,49608,58],{"emptyLinePlaceholder":57},[36,49610,49611],{"class":38,"line":11261},[36,49612,33495],{"class":124},[36,49614,49615],{"class":38,"line":11266},[36,49616,33500],{"class":124},[36,49618,49619],{"class":38,"line":11271},[36,49620,58],{"emptyLinePlaceholder":57},[36,49622,49623],{"class":38,"line":11280},[36,49624,33509],{"class":124},[36,49626,49627,49629,49631],{"class":38,"line":11285},[36,49628,33278],{"class":42},[36,49630,33516],{"class":46},[36,49632,33519],{"class":50},[36,49634,49635,49637,49639,49641,49643,49645,49647,49649,49651],{"class":38,"line":11291},[36,49636,32568],{"class":50},[36,49638,70],{"class":42},[36,49640,31782],{"class":50},[36,49642,32575],{"class":110},[36,49644,3222],{"class":42},[36,49646,32580],{"class":50},[36,49648,3219],{"class":42},[36,49650,33538],{"class":110},[36,49652,1680],{"class":50},[36,49654,49655],{"class":38,"line":11312},[36,49656,58],{"emptyLinePlaceholder":57},[36,49658,49659],{"class":38,"line":11318},[36,49660,33553],{"class":124},[36,49662,49663],{"class":38,"line":11332},[36,49664,33558],{"class":124},[36,49666,49667],{"class":38,"line":11338},[36,49668,33563],{"class":124},[36,49670,49671,49673,49675,49677,49679,49681,49683],{"class":38,"line":11365},[36,49672,33568],{"class":50},[36,49674,70],{"class":42},[36,49676,33573],{"class":50},[36,49678,33576],{"class":473},[36,49680,70],{"class":42},[36,49682,33581],{"class":73},[36,49684,1680],{"class":50},[36,49686,49687],{"class":38,"line":11374},[36,49688,58],{"emptyLinePlaceholder":57},[36,49690,49691],{"class":38,"line":11380},[36,49692,33592],{"class":124},[36,49694,49695,49697,49699],{"class":38,"line":11388},[36,49696,33597],{"class":50},[36,49698,70],{"class":42},[36,49700,33602],{"class":50},[36,49702,49703],{"class":38,"line":11393},[36,49704,58],{"emptyLinePlaceholder":57},[36,49706,49707],{"class":38,"line":17933},[36,49708,33611],{"class":124},[36,49710,49711,49713,49715],{"class":38,"line":17939},[36,49712,32620],{"class":50},[36,49714,70],{"class":42},[36,49716,33620],{"class":50},[36,49718,49719],{"class":38,"line":17962},[36,49720,33625],{"class":124},[36,49722,49723],{"class":38,"line":17968},[36,49724,33630],{"class":124},[36,49726,49727],{"class":38,"line":17991},[36,49728,33635],{"class":124},[36,49730,49731,49733,49735],{"class":38,"line":18005},[36,49732,33640],{"class":50},[36,49734,70],{"class":42},[36,49736,33645],{"class":50},[36,49738,49739],{"class":38,"line":18025},[36,49740,58],{"emptyLinePlaceholder":57},[36,49742,49743],{"class":38,"line":18031},[36,49744,33658],{"class":124},[36,49746,49747],{"class":38,"line":18042},[36,49748,33663],{"class":124},[36,49750,49751,49753,49755],{"class":38,"line":18065},[36,49752,33668],{"class":50},[36,49754,70],{"class":42},[36,49756,33673],{"class":73},[36,49758,49759],{"class":38,"line":18087},[36,49760,33678],{"class":124},[36,49762,49763,49765,49767],{"class":38,"line":18092},[36,49764,33683],{"class":50},[36,49766,70],{"class":42},[36,49768,33688],{"class":50},[36,49770,49771],{"class":38,"line":18098},[36,49772,33693],{"class":124},[36,49774,49775,49777,49779],{"class":38,"line":18112},[36,49776,33698],{"class":50},[36,49778,70],{"class":42},[36,49780,33688],{"class":50},[36,49782,49783],{"class":38,"line":18125},[36,49784,33707],{"class":124},[36,49786,49787,49789,49791],{"class":38,"line":18130},[36,49788,33712],{"class":50},[36,49790,70],{"class":42},[36,49792,33688],{"class":50},[36,49794,49795],{"class":38,"line":18144},[36,49796,33721],{"class":124},[36,49798,49799,49801,49803],{"class":38,"line":18149},[36,49800,33726],{"class":50},[36,49802,70],{"class":42},[36,49804,33688],{"class":50},[36,49806,49807],{"class":38,"line":18155},[36,49808,58],{"emptyLinePlaceholder":57},[36,49810,49811],{"class":38,"line":18160},[36,49812,33739],{"class":124},[36,49814,49815,49817,49819],{"class":38,"line":18174},[36,49816,33744],{"class":50},[36,49818,70],{"class":42},[36,49820,33749],{"class":50},[36,49822,49823],{"class":38,"line":18179},[36,49824,58],{"emptyLinePlaceholder":57},[36,49826,49827],{"class":38,"line":18184},[36,49828,33762],{"class":124},[36,49830,49831,49833,49835,49837,49839],{"class":38,"line":18198},[36,49832,4692],{"class":42},[36,49834,33769],{"class":50},[36,49836,27374],{"class":42},[36,49838,33774],{"class":73},[36,49840,33777],{"class":50},[36,49842,49843,49845,49847,49849,49851,49853,49855,49857,49859,49861,49863],{"class":38,"line":18210},[36,49844,33782],{"class":73},[36,49846,222],{"class":50},[36,49848,33787],{"class":110},[36,49850,33790],{"class":73},[36,49852,2251],{"class":110},[36,49854,33790],{"class":73},[36,49856,1919],{"class":110},[36,49858,33799],{"class":50},[36,49860,2199],{"class":42},[36,49862,1885],{"class":73},[36,49864,31828],{"class":50},[36,49866,49867,49869,49871,49873,49875,49877],{"class":38,"line":18215},[36,49868,33782],{"class":73},[36,49870,222],{"class":50},[36,49872,33814],{"class":110},[36,49874,2122],{"class":42},[36,49876,2113],{"class":73},[36,49878,1680],{"class":50},[36,49880,49881],{"class":38,"line":18228},[36,49882,58],{"emptyLinePlaceholder":57},[36,49884,49885],{"class":38,"line":18233},[36,49886,33829],{"class":124},[36,49888,49889],{"class":38,"line":18238},[36,49890,33834],{"class":124},[36,49892,49893,49895,49897],{"class":38,"line":18243},[36,49894,33839],{"class":50},[36,49896,70],{"class":42},[36,49898,33673],{"class":73},[36,49900,49901],{"class":38,"line":18256},[36,49902,33848],{"class":124},[36,49904,49905,49907,49909],{"class":38,"line":18261},[36,49906,33853],{"class":50},[36,49908,70],{"class":42},[36,49910,4576],{"class":73},[36,49912,49913],{"class":38,"line":33964},[36,49914,33862],{"class":124},[36,49916,49917,49919,49921],{"class":38,"line":33970},[36,49918,33867],{"class":50},[36,49920,70],{"class":42},[36,49922,33673],{"class":73},[36,49924,49925],{"class":38,"line":33976},[36,49926,33876],{"class":124},[36,49928,49929,49931,49933],{"class":38,"line":33982},[36,49930,33881],{"class":50},[36,49932,70],{"class":42},[36,49934,4576],{"class":73},[36,49936,49937],{"class":38,"line":33988},[36,49938,33890],{"class":124},[36,49940,49941,49943,49945],{"class":38,"line":33999},[36,49942,33895],{"class":50},[36,49944,70],{"class":42},[36,49946,4576],{"class":73},[36,49948,49949],{"class":38,"line":34005},[36,49950,33904],{"class":124},[36,49952,49953,49955,49957],{"class":38,"line":34025},[36,49954,33909],{"class":50},[36,49956,70],{"class":42},[36,49958,4576],{"class":73},[36,49960,49961],{"class":38,"line":34031},[36,49962,33918],{"class":124},[36,49964,49965,49967,49969,49971,49973],{"class":38,"line":34042},[36,49966,4894],{"class":42},[36,49968,32932],{"class":50},[36,49970,27374],{"class":42},[36,49972,32937],{"class":73},[36,49974,33931],{"class":50},[36,49976,49977],{"class":38,"line":34048},[36,49978,33936],{"class":124},[36,49980,49981,49983,49985],{"class":38,"line":34054},[36,49982,33941],{"class":50},[36,49984,70],{"class":42},[36,49986,33946],{"class":50},[36,49988,49989],{"class":38,"line":34060},[36,49990,33951],{"class":124},[36,49992,49993,49995,49997],{"class":38,"line":34066},[36,49994,33956],{"class":50},[36,49996,70],{"class":42},[36,49998,33961],{"class":50},[36,50000,50001],{"class":38,"line":34072},[36,50002,33967],{"class":124},[36,50004,50005],{"class":38,"line":34078},[36,50006,33973],{"class":50},[36,50008,50009],{"class":38,"line":34084},[36,50010,33979],{"class":124},[36,50012,50013],{"class":38,"line":34104},[36,50014,33985],{"class":124},[36,50016,50017,50019,50021],{"class":38,"line":34110},[36,50018,33991],{"class":50},[36,50020,70],{"class":42},[36,50022,33996],{"class":50},[36,50024,50025],{"class":38,"line":34126},[36,50026,34002],{"class":124},[36,50028,50029,50031,50033,50035,50037,50039,50041],{"class":38,"line":34132},[36,50030,34008],{"class":50},[36,50032,70],{"class":42},[36,50034,34013],{"class":50},[36,50036,34016],{"class":473},[36,50038,70],{"class":42},[36,50040,1885],{"class":73},[36,50042,1680],{"class":50},[36,50044,50045],{"class":38,"line":34146},[36,50046,34028],{"class":124},[36,50048,50049,50051,50053],{"class":38,"line":34152},[36,50050,34034],{"class":50},[36,50052,70],{"class":42},[36,50054,34039],{"class":50},[36,50056,50057],{"class":38,"line":34167},[36,50058,34045],{"class":124},[36,50060,50061],{"class":38,"line":34173},[36,50062,34051],{"class":50},[36,50064,50065],{"class":38,"line":34182},[36,50066,34057],{"class":124},[36,50068,50069],{"class":38,"line":34188},[36,50070,34063],{"class":50},[36,50072,50073],{"class":38,"line":34197},[36,50074,34069],{"class":124},[36,50076,50077],{"class":38,"line":34203},[36,50078,34075],{"class":50},[36,50080,50081],{"class":38,"line":34209},[36,50082,34081],{"class":124},[36,50084,50085,50087,50089,50091,50093,50095,50097],{"class":38,"line":34218},[36,50086,34087],{"class":50},[36,50088,10945],{"class":42},[36,50090,34092],{"class":50},[36,50092,2122],{"class":42},[36,50094,34097],{"class":50},[36,50096,1859],{"class":73},[36,50098,1680],{"class":50},[36,50100,50101],{"class":38,"line":34224},[36,50102,34107],{"class":124},[36,50104,50105,50107,50109,50111,50113],{"class":38,"line":34235},[36,50106,34113],{"class":50},[36,50108,10945],{"class":42},[36,50110,34118],{"class":50},[36,50112,4441],{"class":42},[36,50114,34123],{"class":50},[36,50116,50117],{"class":38,"line":34241},[36,50118,34129],{"class":124},[36,50120,50121,50123,50125,50127,50129],{"class":38,"line":34260},[36,50122,34135],{"class":50},[36,50124,10945],{"class":42},[36,50126,34097],{"class":50},[36,50128,1859],{"class":73},[36,50130,1680],{"class":50},[36,50132,50133],{"class":38,"line":34266},[36,50134,34149],{"class":124},[36,50136,50137,50139,50141,50143,50145],{"class":38,"line":34277},[36,50138,4894],{"class":42},[36,50140,34157],{"class":50},[36,50142,27374],{"class":42},[36,50144,32937],{"class":73},[36,50146,34164],{"class":50},[36,50148,50149],{"class":38,"line":34283},[36,50150,34170],{"class":124},[36,50152,50153,50155,50157],{"class":38,"line":34303},[36,50154,33941],{"class":50},[36,50156,70],{"class":42},[36,50158,33946],{"class":50},[36,50160,50161],{"class":38,"line":34319},[36,50162,34185],{"class":124},[36,50164,50165,50167,50169],{"class":38,"line":34325},[36,50166,33956],{"class":50},[36,50168,70],{"class":42},[36,50170,33961],{"class":50},[36,50172,50173],{"class":38,"line":34339},[36,50174,34200],{"class":124},[36,50176,50177],{"class":38,"line":34345},[36,50178,34206],{"class":50},[36,50180,50181],{"class":38,"line":34351},[36,50182,37687],{"class":124},[36,50184,50185,50187],{"class":38,"line":34362},[36,50186,34212],{"class":42},[36,50188,34215],{"class":50},[36,50190,50191],{"class":38,"line":34368},[36,50192,34221],{"class":124},[36,50194,50195,50197,50199],{"class":38,"line":34374},[36,50196,37702],{"class":50},[36,50198,70],{"class":42},[36,50200,33996],{"class":50},[36,50202,50203],{"class":38,"line":34384},[36,50204,34238],{"class":124},[36,50206,50207,50209,50211,50213,50215,50217,50219],{"class":38,"line":34390},[36,50208,37715],{"class":50},[36,50210,70],{"class":42},[36,50212,34013],{"class":50},[36,50214,34016],{"class":473},[36,50216,70],{"class":42},[36,50218,1885],{"class":73},[36,50220,1680],{"class":50},[36,50222,50223],{"class":38,"line":34401},[36,50224,34263],{"class":124},[36,50226,50227,50229,50231],{"class":38,"line":34407},[36,50228,37736],{"class":50},[36,50230,70],{"class":42},[36,50232,34039],{"class":50},[36,50234,50235],{"class":38,"line":34417},[36,50236,34280],{"class":124},[36,50238,50239,50241,50243,50245,50247,50249,50251],{"class":38,"line":34422},[36,50240,37749],{"class":50},[36,50242,10945],{"class":42},[36,50244,37754],{"class":50},[36,50246,2122],{"class":42},[36,50248,34097],{"class":50},[36,50250,1859],{"class":73},[36,50252,1680],{"class":50},[36,50254,50255,50257,50259,50261,50263],{"class":38,"line":34428},[36,50256,37767],{"class":50},[36,50258,10945],{"class":42},[36,50260,34118],{"class":50},[36,50262,4441],{"class":42},[36,50264,34123],{"class":50},[36,50266,50267],{"class":38,"line":34477},[36,50268,37780],{"class":124},[36,50270,50271,50273,50275,50277,50279],{"class":38,"line":34524},[36,50272,37785],{"class":50},[36,50274,10945],{"class":42},[36,50276,34097],{"class":50},[36,50278,1859],{"class":73},[36,50280,1680],{"class":50},[36,50282,50283],{"class":38,"line":34529},[36,50284,34342],{"class":124},[36,50286,50287],{"class":38,"line":34535},[36,50288,34348],{"class":124},[36,50290,50291,50293,50295],{"class":38,"line":34554},[36,50292,34354],{"class":50},[36,50294,2251],{"class":42},[36,50296,34359],{"class":50},[36,50298,50299],{"class":38,"line":34560},[36,50300,34365],{"class":124},[36,50302,50303],{"class":38,"line":34580},[36,50304,34371],{"class":124},[36,50306,50307,50309,50311],{"class":38,"line":34586},[36,50308,34377],{"class":50},[36,50310,2251],{"class":42},[36,50312,34359],{"class":50},[36,50314,50315],{"class":38,"line":34592},[36,50316,34387],{"class":124},[36,50318,50319,50321,50323],{"class":38,"line":34602},[36,50320,34393],{"class":50},[36,50322,2251],{"class":42},[36,50324,34398],{"class":50},[36,50326,50327],{"class":38,"line":34607},[36,50328,34404],{"class":124},[36,50330,50331,50333,50335],{"class":38,"line":34613},[36,50332,34410],{"class":50},[36,50334,2251],{"class":42},[36,50336,34398],{"class":50},[36,50338,50339],{"class":38,"line":34629},[36,50340,58],{"emptyLinePlaceholder":57},[36,50342,50343],{"class":38,"line":34674},[36,50344,34425],{"class":124},[36,50346,50347,50349,50351,50353,50355,50357,50359,50361,50363,50365,50367,50369,50371,50373,50375,50377,50379,50381,50383,50385],{"class":38,"line":34680},[36,50348,33782],{"class":73},[36,50350,222],{"class":50},[36,50352,5083],{"class":110},[36,50354,33790],{"class":73},[36,50356,34439],{"class":110},[36,50358,2563],{"class":73},[36,50360,34444],{"class":42},[36,50362,2613],{"class":73},[36,50364,34449],{"class":110},[36,50366,2563],{"class":73},[36,50368,34444],{"class":42},[36,50370,2613],{"class":73},[36,50372,5083],{"class":110},[36,50374,34460],{"class":50},[36,50376,2199],{"class":42},[36,50378,1885],{"class":73},[36,50380,34467],{"class":50},[36,50382,2199],{"class":42},[36,50384,1885],{"class":73},[36,50386,34474],{"class":50},[36,50388,50389,50391,50393,50395,50397,50399,50401,50403,50405,50407,50409,50411,50413,50415,50417,50419,50421,50423,50425,50427],{"class":38,"line":34686},[36,50390,33782],{"class":73},[36,50392,222],{"class":50},[36,50394,5083],{"class":110},[36,50396,33790],{"class":73},[36,50398,34488],{"class":110},[36,50400,2563],{"class":73},[36,50402,34444],{"class":42},[36,50404,2613],{"class":73},[36,50406,34497],{"class":110},[36,50408,2563],{"class":73},[36,50410,34444],{"class":42},[36,50412,2613],{"class":73},[36,50414,5083],{"class":110},[36,50416,34508],{"class":50},[36,50418,2199],{"class":42},[36,50420,1885],{"class":73},[36,50422,34515],{"class":50},[36,50424,2199],{"class":42},[36,50426,1885],{"class":73},[36,50428,34474],{"class":50},[36,50430,50431],{"class":38,"line":34692},[36,50432,58],{"emptyLinePlaceholder":57},[36,50434,50435],{"class":38,"line":34703},[36,50436,34532],{"class":124},[36,50438,50439,50441,50443,50445,50447,50449,50451],{"class":38,"line":34709},[36,50440,3999],{"class":42},[36,50442,34540],{"class":50},[36,50444,2199],{"class":42},[36,50446,1885],{"class":73},[36,50448,2607],{"class":50},[36,50450,2627],{"class":42},[36,50452,34551],{"class":50},[36,50454,50455],{"class":38,"line":34715},[36,50456,34557],{"class":124},[36,50458,50459,50461,50463,50465,50467,50469,50471],{"class":38,"line":34721},[36,50460,34563],{"class":50},[36,50462,1713],{"class":73},[36,50464,70],{"class":42},[36,50466,34570],{"class":50},[36,50468,2199],{"class":42},[36,50470,1885],{"class":73},[36,50472,34577],{"class":50},[36,50474,50475],{"class":38,"line":34739},[36,50476,34583],{"class":124},[36,50478,50479],{"class":38,"line":34753},[36,50480,34589],{"class":124},[36,50482,50483,50485,50487],{"class":38,"line":34762},[36,50484,34595],{"class":50},[36,50486,70],{"class":42},[36,50488,33645],{"class":50},[36,50490,50491],{"class":38,"line":34771},[36,50492,58],{"emptyLinePlaceholder":57},[36,50494,50495],{"class":38,"line":34780},[36,50496,34610],{"class":124},[36,50498,50499,50501,50503,50505,50507],{"class":38,"line":34789},[36,50500,34616],{"class":50},[36,50502,70],{"class":42},[36,50504,34621],{"class":50},[36,50506,2199],{"class":42},[36,50508,34626],{"class":50},[36,50510,50511,50513,50515,50517,50519,50521,50523,50525,50527,50529,50531,50533,50535,50537,50539,50541,50543,50545],{"class":38,"line":34795},[36,50512,33782],{"class":73},[36,50514,222],{"class":50},[36,50516,34636],{"class":110},[36,50518,2563],{"class":73},[36,50520,34641],{"class":42},[36,50522,2613],{"class":73},[36,50524,2211],{"class":110},[36,50526,2563],{"class":73},[36,50528,34641],{"class":42},[36,50530,2613],{"class":73},[36,50532,34654],{"class":110},[36,50534,34657],{"class":50},[36,50536,34660],{"class":42},[36,50538,2574],{"class":73},[36,50540,34665],{"class":50},[36,50542,1996],{"class":42},[36,50544,2574],{"class":73},[36,50546,31828],{"class":50},[36,50548,50549],{"class":38,"line":34801},[36,50550,38064],{"class":124},[36,50552,50553],{"class":38,"line":34809},[36,50554,38069],{"class":124},[36,50556,50557,50559,50561],{"class":38,"line":34814},[36,50558,38074],{"class":50},[36,50560,34698],{"class":110},[36,50562,1680],{"class":50},[36,50564,50565],{"class":38,"line":34820},[36,50566,34718],{"class":124},[36,50568,50569,50571,50573,50575,50577,50579],{"class":38,"line":34831},[36,50570,34724],{"class":50},[36,50572,70],{"class":42},[36,50574,34729],{"class":50},[36,50576,34732],{"class":473},[36,50578,70],{"class":42},[36,50580,3076],{"class":50},[36,50582,50583,50585,50587,50589],{"class":38,"line":34837},[36,50584,34742],{"class":110},[36,50586,2526],{"class":50},[36,50588,34747],{"class":73},[36,50590,34750],{"class":50},[36,50592,50593,50595],{"class":38,"line":34857},[36,50594,34756],{"class":110},[36,50596,34759],{"class":50},[36,50598,50599,50601],{"class":38,"line":34863},[36,50600,34765],{"class":110},[36,50602,34768],{"class":50},[36,50604,50605,50607],{"class":38,"line":34869},[36,50606,34774],{"class":110},[36,50608,34777],{"class":50},[36,50610,50611,50613],{"class":38,"line":34875},[36,50612,34783],{"class":110},[36,50614,34786],{"class":50},[36,50616,50617],{"class":38,"line":34892},[36,50618,34792],{"class":50},[36,50620,50621],{"class":38,"line":34898},[36,50622,34798],{"class":124},[36,50624,50625,50627],{"class":38,"line":34904},[36,50626,239],{"class":42},[36,50628,34806],{"class":50},[36,50630,50631],{"class":38,"line":34910},[36,50632,58],{"emptyLinePlaceholder":57},[36,50634,50635],{"class":38,"line":34916},[36,50636,34817],{"class":124},[36,50638,50639,50641,50643],{"class":38,"line":34922},[36,50640,33278],{"class":42},[36,50642,34825],{"class":46},[36,50644,34828],{"class":50},[36,50646,50647],{"class":38,"line":34949},[36,50648,34834],{"class":124},[36,50650,50651,50653,50655,50657,50659,50661,50663,50665],{"class":38,"line":34973},[36,50652,34840],{"class":50},[36,50654,33024],{"class":473},[36,50656,70],{"class":42},[36,50658,222],{"class":50},[36,50660,2165],{"class":73},[36,50662,2045],{"class":50},[36,50664,1961],{"class":73},[36,50666,31828],{"class":50},[36,50668,50669],{"class":38,"line":34979},[36,50670,34860],{"class":124},[36,50672,50673],{"class":38,"line":34985},[36,50674,34866],{"class":124},[36,50676,50677],{"class":38,"line":34991},[36,50678,34872],{"class":124},[36,50680,50681,50683,50685,50687,50689,50691,50693],{"class":38,"line":35002},[36,50682,33058],{"class":50},[36,50684,1885],{"class":73},[36,50686,2045],{"class":50},[36,50688,1747],{"class":73},[36,50690,2045],{"class":50},[36,50692,1885],{"class":73},[36,50694,1680],{"class":50},[36,50696,50697],{"class":38,"line":35013},[36,50698,34895],{"class":124},[36,50700,50701],{"class":38,"line":35019},[36,50702,34901],{"class":124},[36,50704,50705],{"class":38,"line":35036},[36,50706,34907],{"class":124},[36,50708,50709],{"class":38,"line":35059},[36,50710,34913],{"class":124},[36,50712,50713],{"class":38,"line":35082},[36,50714,34919],{"class":124},[36,50716,50717,50719,50721,50723,50725,50727,50729,50731,50733],{"class":38,"line":35088},[36,50718,34925],{"class":50},[36,50720,34928],{"class":110},[36,50722,34931],{"class":50},[36,50724,34934],{"class":110},[36,50726,2045],{"class":50},[36,50728,34939],{"class":473},[36,50730,70],{"class":42},[36,50732,34944],{"class":110},[36,50734,1680],{"class":50},[36,50736,50737,50739,50741,50743,50745,50747,50749,50751,50753],{"class":38,"line":35093},[36,50738,34925],{"class":50},[36,50740,34928],{"class":110},[36,50742,34956],{"class":50},[36,50744,34959],{"class":110},[36,50746,2045],{"class":50},[36,50748,34939],{"class":473},[36,50750,70],{"class":42},[36,50752,34968],{"class":110},[36,50754,1680],{"class":50},[36,50756,50757],{"class":38,"line":35102},[36,50758,34976],{"class":124},[36,50760,50761],{"class":38,"line":35112},[36,50762,34982],{"class":50},[36,50764,50765],{"class":38,"line":35118},[36,50766,34988],{"class":124},[36,50768,50769,50771,50773],{"class":38,"line":35123},[36,50770,34994],{"class":50},[36,50772,34997],{"class":110},[36,50774,1680],{"class":50},[36,50776,50777,50779,50781],{"class":38,"line":35129},[36,50778,35005],{"class":50},[36,50780,35008],{"class":110},[36,50782,1680],{"class":50},[36,50784,50785],{"class":38,"line":35142},[36,50786,35016],{"class":124},[36,50788,50789,50791,50793,50795,50797,50799,50801],{"class":38,"line":35148},[36,50790,33058],{"class":50},[36,50792,1885],{"class":73},[36,50794,2045],{"class":50},[36,50796,1747],{"class":73},[36,50798,2045],{"class":50},[36,50800,1747],{"class":73},[36,50802,1680],{"class":50},[36,50804,50805,50807,50809,50811,50813,50815,50817,50819,50821],{"class":38,"line":35159},[36,50806,34925],{"class":50},[36,50808,34928],{"class":110},[36,50810,35043],{"class":50},[36,50812,34934],{"class":110},[36,50814,2045],{"class":50},[36,50816,34939],{"class":473},[36,50818,70],{"class":42},[36,50820,35054],{"class":110},[36,50822,1680],{"class":50},[36,50824,50825,50827,50829,50831,50833,50835,50837,50839,50841],{"class":38,"line":35170},[36,50826,34925],{"class":50},[36,50828,34928],{"class":110},[36,50830,35066],{"class":50},[36,50832,34959],{"class":110},[36,50834,2045],{"class":50},[36,50836,34939],{"class":473},[36,50838,70],{"class":42},[36,50840,35077],{"class":110},[36,50842,1680],{"class":50},[36,50844,50845],{"class":38,"line":35189},[36,50846,35085],{"class":124},[36,50848,50850],{"class":38,"line":50849},219,[36,50851,34982],{"class":50},[36,50853,50855,50857,50859],{"class":38,"line":50854},220,[36,50856,34994],{"class":50},[36,50858,34928],{"class":110},[36,50860,1680],{"class":50},[36,50862,50864,50866,50868],{"class":38,"line":50863},221,[36,50865,35005],{"class":50},[36,50867,35107],{"class":110},[36,50869,1680],{"class":50},[36,50871,50873],{"class":38,"line":50872},222,[36,50874,35115],{"class":50},[36,50876,50878],{"class":38,"line":50877},223,[36,50879,58],{"emptyLinePlaceholder":57},[36,50881,50883],{"class":38,"line":50882},224,[36,50884,35126],{"class":124},[36,50886,50888,50890,50892,50894,50896],{"class":38,"line":50887},225,[36,50889,3061],{"class":42},[36,50891,32551],{"class":73},[36,50893,4441],{"class":42},[36,50895,32556],{"class":110},[36,50897,5230],{"class":50},[36,50899,50901],{"class":38,"line":50900},226,[36,50902,35145],{"class":124},[36,50904,50906,50908,50910],{"class":38,"line":50905},227,[36,50907,45877],{"class":50},[36,50909,70],{"class":42},[36,50911,45882],{"class":50},[36,50913,50915,50917,50919],{"class":38,"line":50914},228,[36,50916,35162],{"class":50},[36,50918,70],{"class":42},[36,50920,35167],{"class":50},[36,50922,50924,50926,50928,50930,50932,50934,50936],{"class":38,"line":50923},229,[36,50925,34724],{"class":50},[36,50927,70],{"class":42},[36,50929,45899],{"class":50},[36,50931,35180],{"class":473},[36,50933,70],{"class":42},[36,50935,2574],{"class":73},[36,50937,1680],{"class":50},[36,50939,50941],{"class":38,"line":50940},230,[36,50942,35192],{"class":50},[23327,50944,50946],{"id":50945},"_242测试代码","2.4.2.测试代码",[19,50948,50949],{},"使用测试集进行测试与推理",[26,50951,50953],{"className":31709,"code":50952,"language":31711,"meta":31,"style":31},"import torch\nimport torch.utils.data as Data\nfrom torchvision import transforms\nfrom torchvision.datasets import ImageFolder\nfrom model import GoogLeNet,Inception\n\n# 测试数据处理\ndef test_data_process():\n   # 导入自己的数据集，并进行数据处理\n    # 定义数据集的路径\n    ROOT_PATH=r\".\u002Fdata\u002Ftest\"\n\n    # 定义归一化方法\n    # 这里需要先计算一下数据集的均值和方差\n    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n    # 第一个参数是均值，第二个参数是方差\n    normalize=transforms.Normalize([0.162,0.151,0.138],[0.058,0.052,0.048])\n    # 定义数据集处理方法变量\n    train_transform=transforms.Compose([\n        # 调整图像大小为224*224\n        transforms.Resize((224,224)),\n        # 将图像转换为张量\n        transforms.ToTensor(),\n        normalize])\n    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n\n    # 加载数据集\n    # 传入数据集路径与处理方法\n    test_data=ImageFolder(ROOT_PATH,transform=train_transform)\n    test_dataloader=Data.DataLoader(dataset=test_data,\n                                    # 这里是一张一张进行测试\n                                    batch_size=1,\n                                    shuffle=True,\n                                    num_workers=0)\n    return test_dataloader\n\n# 定义模型测试函数\ndef test_model_process(model,test_dataloader):\n    # 将模型放到设备当中，先进行判断\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n\n    # 设置初始化参数\n    test_corrects=0.0\n    test_num=0\n\n    # 进行模型测试\n    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n    # 不进行梯度计算，可以节省内存，加快运行速度\n    with torch.no_grad():\n        # 从数据中进行\n        for test_data_x,test_data_y in test_dataloader:\n            test_data_x=test_data_x.to(device)\n            test_data_y=test_data_y.to(device)\n            # 设置为验证模式\n            model.eval()\n            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n            output=model(test_data_x)\n            # 查找每一行中最大值对应的下标\n            pre_lab=torch.argmax(output,dim=1)\n            # 计算正确率\n            # .data表示是一个不带梯度信息的tensor\n            # 如果预测正确，则准确度test_corrects加1\n            test_corrects+=torch.sum(pre_lab==test_data_y.data)\n            # 将所有的测试样本进行累计\n            test_num+=test_data_x.size(0)\n\n        # 计算准确度\n        test_acc=test_corrects.double().item()\u002Ftest_num\n        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n        print(\"测试的准确率：\",test_acc)\n\n# 实现模型的测试功能\nif __name__==\"__main__\":\n    # 加载模型\n    model=GoogLeNet(Inception)\n    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n    model.load_state_dict(torch.load('best_model.pth'))\n    # 数据加载\n    test_dataloader=test_data_process()\n    # 加载模型测试的函数\n    test_model_process(model,test_dataloader)\n\n    # 验证集推理实现：\n    # 加载数据加载的更详细一些\n    device=\"cuda\" if torch.cuda.is_available() else \"cpu\"\n    model=model.to(device)\n    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n    # 顺序不可改变\n    classes=['猫','狗']\n    with torch.no_grad():\n        # 将数据和标签都放到设备当中\n        for b_x,b_y in test_dataloader:\n            b_x=b_x.to(device)\n            b_y=b_y.to(device)\n\n            # 设置模型为验证模式\n            model.eval()\n            # 模型推理结果\n            output=model(b_x)\n            # 获取最大下标，最大下标就是类别号\n            pre_lab=torch.argmax(output,dim=1)\n            # 取出张量中的数值\n            result=pre_lab.item()\n            label=b_y.item()\n            print(\"预测值：\",classes[result],\"------\",\"真实值：\",classes[label])\n",[33,50954,50955,50961,50971,50981,50992,51002,51006,51010,51018,51023,51027,51044,51048,51052,51056,51060,51064,51096,51100,51108,51112,51124,51128,51132,51136,51140,51144,51148,51152,51156,51174,51188,51192,51202,51212,51222,51228,51232,51236,51244,51248,51264,51272,51276,51280,51288,51296,51300,51304,51308,51312,51318,51322,51332,51340,51348,51352,51356,51360,51368,51372,51388,51392,51396,51400,51412,51416,51428,51432,51436,51448,51452,51462,51466,51470,51482,51486,51494,51498,51502,51510,51514,51522,51526,51530,51534,51538,51542,51558,51566,51570,51574,51592,51598,51602,51612,51620,51628,51632,51636,51640,51644,51652,51656,51672,51676,51684,51692],{"__ignoreMap":31},[36,50956,50957,50959],{"class":38,"line":39},[36,50958,31723],{"class":42},[36,50960,31726],{"class":50},[36,50962,50963,50965,50967,50969],{"class":38,"line":54},[36,50964,31723],{"class":42},[36,50966,32746],{"class":50},[36,50968,32714],{"class":42},[36,50970,32751],{"class":50},[36,50972,50973,50975,50977,50979],{"class":38,"line":61},[36,50974,32068],{"class":42},[36,50976,32729],{"class":50},[36,50978,31723],{"class":42},[36,50980,32734],{"class":50},[36,50982,50983,50985,50987,50989],{"class":38,"line":80},[36,50984,32068],{"class":42},[36,50986,32699],{"class":50},[36,50988,31723],{"class":42},[36,50990,50991],{"class":50}," ImageFolder\n",[36,50993,50994,50996,50998,51000],{"class":38,"line":96},[36,50995,32068],{"class":42},[36,50997,33245],{"class":50},[36,50999,31723],{"class":42},[36,51001,45971],{"class":50},[36,51003,51004],{"class":38,"line":101},[36,51005,58],{"emptyLinePlaceholder":57},[36,51007,51008],{"class":38,"line":128},[36,51009,35282],{"class":124},[36,51011,51012,51014,51016],{"class":38,"line":149},[36,51013,33278],{"class":42},[36,51015,35289],{"class":46},[36,51017,33284],{"class":50},[36,51019,51020],{"class":38,"line":154},[36,51021,51022],{"class":124},"   # 导入自己的数据集，并进行数据处理\n",[36,51024,51025],{"class":38,"line":167},[36,51026,49292],{"class":124},[36,51028,51029,51031,51033,51035,51037,51039,51042],{"class":38,"line":172},[36,51030,49297],{"class":73},[36,51032,70],{"class":42},[36,51034,2337],{"class":42},[36,51036,1919],{"class":110},[36,51038,2225],{"class":73},[36,51040,51041],{"class":49308},"\u002Fdata\u002Ftest",[36,51043,26464],{"class":110},[36,51045,51046],{"class":38,"line":192},[36,51047,58],{"emptyLinePlaceholder":57},[36,51049,51050],{"class":38,"line":211},[36,51051,49320],{"class":124},[36,51053,51054],{"class":38,"line":216},[36,51055,49325],{"class":124},[36,51057,51058],{"class":38,"line":231},[36,51059,49330],{"class":124},[36,51061,51062],{"class":38,"line":236},[36,51063,49335],{"class":124},[36,51065,51066,51068,51070,51072,51074,51076,51078,51080,51082,51084,51086,51088,51090,51092,51094],{"class":38,"line":247},[36,51067,49340],{"class":50},[36,51069,70],{"class":42},[36,51071,49345],{"class":50},[36,51073,49348],{"class":73},[36,51075,2045],{"class":50},[36,51077,49353],{"class":73},[36,51079,2045],{"class":50},[36,51081,49358],{"class":73},[36,51083,49361],{"class":50},[36,51085,49364],{"class":73},[36,51087,2045],{"class":50},[36,51089,49369],{"class":73},[36,51091,2045],{"class":50},[36,51093,49374],{"class":73},[36,51095,6146],{"class":50},[36,51097,51098],{"class":38,"line":637},[36,51099,49381],{"class":124},[36,51101,51102,51104,51106],{"class":38,"line":646},[36,51103,49386],{"class":50},[36,51105,70],{"class":42},[36,51107,49391],{"class":50},[36,51109,51110],{"class":38,"line":655},[36,51111,49396],{"class":124},[36,51113,51114,51116,51118,51120,51122],{"class":38,"line":660},[36,51115,49401],{"class":50},[36,51117,32832],{"class":73},[36,51119,2045],{"class":50},[36,51121,32832],{"class":73},[36,51123,43953],{"class":50},[36,51125,51126],{"class":38,"line":665},[36,51127,49414],{"class":124},[36,51129,51130],{"class":38,"line":674},[36,51131,49419],{"class":50},[36,51133,51134],{"class":38,"line":679},[36,51135,49424],{"class":50},[36,51137,51138],{"class":38,"line":692},[36,51139,49429],{"class":124},[36,51141,51142],{"class":38,"line":705},[36,51143,49434],{"class":124},[36,51145,51146],{"class":38,"line":710},[36,51147,58],{"emptyLinePlaceholder":57},[36,51149,51150],{"class":38,"line":722},[36,51151,49443],{"class":124},[36,51153,51154],{"class":38,"line":750},[36,51155,49448],{"class":124},[36,51157,51158,51160,51162,51164,51166,51168,51170,51172],{"class":38,"line":755},[36,51159,35296],{"class":50},[36,51161,70],{"class":42},[36,51163,49457],{"class":50},[36,51165,49460],{"class":73},[36,51167,2045],{"class":50},[36,51169,49465],{"class":473},[36,51171,70],{"class":42},[36,51173,49470],{"class":50},[36,51175,51176,51178,51180,51182,51184,51186],{"class":38,"line":777},[36,51177,35353],{"class":50},[36,51179,70],{"class":42},[36,51181,32865],{"class":50},[36,51183,32868],{"class":473},[36,51185,70],{"class":42},[36,51187,35364],{"class":50},[36,51189,51190],{"class":38,"line":802},[36,51191,35369],{"class":124},[36,51193,51194,51196,51198,51200],{"class":38,"line":807},[36,51195,35374],{"class":473},[36,51197,70],{"class":42},[36,51199,1885],{"class":73},[36,51201,32797],{"class":50},[36,51203,51204,51206,51208,51210],{"class":38,"line":818},[36,51205,35385],{"class":473},[36,51207,70],{"class":42},[36,51209,32807],{"class":73},[36,51211,32797],{"class":50},[36,51213,51214,51216,51218,51220],{"class":38,"line":843},[36,51215,35396],{"class":473},[36,51217,70],{"class":42},[36,51219,1859],{"class":73},[36,51221,1680],{"class":50},[36,51223,51224,51226],{"class":38,"line":848},[36,51225,239],{"class":42},[36,51227,35409],{"class":50},[36,51229,51230],{"class":38,"line":859},[36,51231,58],{"emptyLinePlaceholder":57},[36,51233,51234],{"class":38,"line":864},[36,51235,35418],{"class":124},[36,51237,51238,51240,51242],{"class":38,"line":873},[36,51239,33278],{"class":42},[36,51241,35425],{"class":46},[36,51243,35428],{"class":50},[36,51245,51246],{"class":38,"line":9454},[36,51247,35433],{"class":124},[36,51249,51250,51252,51254,51256,51258,51260,51262],{"class":38,"line":9481},[36,51251,32568],{"class":50},[36,51253,70],{"class":42},[36,51255,32575],{"class":110},[36,51257,3222],{"class":42},[36,51259,32580],{"class":50},[36,51261,3219],{"class":42},[36,51263,35450],{"class":110},[36,51265,51266,51268,51270],{"class":38,"line":9486},[36,51267,32620],{"class":50},[36,51269,70],{"class":42},[36,51271,33620],{"class":50},[36,51273,51274],{"class":38,"line":9492},[36,51275,58],{"emptyLinePlaceholder":57},[36,51277,51278],{"class":38,"line":9504},[36,51279,35467],{"class":124},[36,51281,51282,51284,51286],{"class":38,"line":9516},[36,51283,35472],{"class":50},[36,51285,70],{"class":42},[36,51287,33673],{"class":73},[36,51289,51290,51292,51294],{"class":38,"line":9528},[36,51291,35481],{"class":50},[36,51293,70],{"class":42},[36,51295,4576],{"class":73},[36,51297,51298],{"class":38,"line":11184},[36,51299,58],{"emptyLinePlaceholder":57},[36,51301,51302],{"class":38,"line":11209},[36,51303,35494],{"class":124},[36,51305,51306],{"class":38,"line":11232},[36,51307,35499],{"class":124},[36,51309,51310],{"class":38,"line":11256},[36,51311,35504],{"class":124},[36,51313,51314,51316],{"class":38,"line":11261},[36,51315,35509],{"class":42},[36,51317,34215],{"class":50},[36,51319,51320],{"class":38,"line":11266},[36,51321,35516],{"class":124},[36,51323,51324,51326,51328,51330],{"class":38,"line":11271},[36,51325,4894],{"class":42},[36,51327,35523],{"class":50},[36,51329,27374],{"class":42},[36,51331,35528],{"class":50},[36,51333,51334,51336,51338],{"class":38,"line":11280},[36,51335,35533],{"class":50},[36,51337,70],{"class":42},[36,51339,35538],{"class":50},[36,51341,51342,51344,51346],{"class":38,"line":11285},[36,51343,35543],{"class":50},[36,51345,70],{"class":42},[36,51347,35548],{"class":50},[36,51349,51350],{"class":38,"line":11291},[36,51351,35553],{"class":124},[36,51353,51354],{"class":38,"line":11312},[36,51355,34206],{"class":50},[36,51357,51358],{"class":38,"line":11318},[36,51359,35562],{"class":124},[36,51361,51362,51364,51366],{"class":38,"line":11332},[36,51363,33991],{"class":50},[36,51365,70],{"class":42},[36,51367,35571],{"class":50},[36,51369,51370],{"class":38,"line":11338},[36,51371,35576],{"class":124},[36,51373,51374,51376,51378,51380,51382,51384,51386],{"class":38,"line":11365},[36,51375,34008],{"class":50},[36,51377,70],{"class":42},[36,51379,34013],{"class":50},[36,51381,34016],{"class":473},[36,51383,70],{"class":42},[36,51385,1885],{"class":73},[36,51387,1680],{"class":50},[36,51389,51390],{"class":38,"line":11374},[36,51391,35597],{"class":124},[36,51393,51394],{"class":38,"line":11380},[36,51395,35602],{"class":124},[36,51397,51398],{"class":38,"line":11388},[36,51399,35607],{"class":124},[36,51401,51402,51404,51406,51408,51410],{"class":38,"line":11393},[36,51403,35612],{"class":50},[36,51405,10945],{"class":42},[36,51407,34118],{"class":50},[36,51409,4441],{"class":42},[36,51411,35621],{"class":50},[36,51413,51414],{"class":38,"line":17933},[36,51415,35626],{"class":124},[36,51417,51418,51420,51422,51424,51426],{"class":38,"line":17939},[36,51419,35631],{"class":50},[36,51421,10945],{"class":42},[36,51423,35636],{"class":50},[36,51425,1859],{"class":73},[36,51427,1680],{"class":50},[36,51429,51430],{"class":38,"line":17962},[36,51431,58],{"emptyLinePlaceholder":57},[36,51433,51434],{"class":38,"line":17968},[36,51435,35649],{"class":124},[36,51437,51438,51440,51442,51444,51446],{"class":38,"line":17991},[36,51439,35654],{"class":50},[36,51441,70],{"class":42},[36,51443,35659],{"class":50},[36,51445,2251],{"class":42},[36,51447,35664],{"class":50},[36,51449,51450],{"class":38,"line":18005},[36,51451,35669],{"class":124},[36,51453,51454,51456,51458,51460],{"class":38,"line":18025},[36,51455,33782],{"class":73},[36,51457,222],{"class":50},[36,51459,35678],{"class":110},[36,51461,35681],{"class":50},[36,51463,51464],{"class":38,"line":18031},[36,51465,58],{"emptyLinePlaceholder":57},[36,51467,51468],{"class":38,"line":18042},[36,51469,35690],{"class":124},[36,51471,51472,51474,51476,51478,51480],{"class":38,"line":18065},[36,51473,3061],{"class":42},[36,51475,32551],{"class":73},[36,51477,4441],{"class":42},[36,51479,32556],{"class":110},[36,51481,5230],{"class":50},[36,51483,51484],{"class":38,"line":18087},[36,51485,35707],{"class":124},[36,51487,51488,51490,51492],{"class":38,"line":18092},[36,51489,32620],{"class":50},[36,51491,70],{"class":42},[36,51493,45882],{"class":50},[36,51495,51496],{"class":38,"line":18098},[36,51497,35720],{"class":124},[36,51499,51500],{"class":38,"line":18112},[36,51501,35725],{"class":124},[36,51503,51504,51506,51508],{"class":38,"line":18125},[36,51505,35730],{"class":50},[36,51507,35733],{"class":110},[36,51509,31828],{"class":50},[36,51511,51512],{"class":38,"line":18130},[36,51513,35740],{"class":124},[36,51515,51516,51518,51520],{"class":38,"line":18144},[36,51517,35353],{"class":50},[36,51519,70],{"class":42},[36,51521,35749],{"class":50},[36,51523,51524],{"class":38,"line":18149},[36,51525,35754],{"class":124},[36,51527,51528],{"class":38,"line":18155},[36,51529,35759],{"class":50},[36,51531,51532],{"class":38,"line":18160},[36,51533,58],{"emptyLinePlaceholder":57},[36,51535,51536],{"class":38,"line":18174},[36,51537,35768],{"class":124},[36,51539,51540],{"class":38,"line":18179},[36,51541,35773],{"class":124},[36,51543,51544,51546,51548,51550,51552,51554,51556],{"class":38,"line":18184},[36,51545,32568],{"class":50},[36,51547,70],{"class":42},[36,51549,32575],{"class":110},[36,51551,3222],{"class":42},[36,51553,32580],{"class":50},[36,51555,3219],{"class":42},[36,51557,35450],{"class":110},[36,51559,51560,51562,51564],{"class":38,"line":18198},[36,51561,32620],{"class":50},[36,51563,70],{"class":42},[36,51565,33620],{"class":50},[36,51567,51568],{"class":38,"line":18210},[36,51569,35802],{"class":124},[36,51571,51572],{"class":38,"line":18215},[36,51573,35807],{"class":124},[36,51575,51576,51578,51580,51582,51585,51587,51590],{"class":38,"line":18228},[36,51577,35812],{"class":50},[36,51579,70],{"class":42},[36,51581,2557],{"class":50},[36,51583,51584],{"class":110},"'猫'",[36,51586,2045],{"class":50},[36,51588,51589],{"class":110},"'狗'",[36,51591,34577],{"class":50},[36,51593,51594,51596],{"class":38,"line":18233},[36,51595,35509],{"class":42},[36,51597,34215],{"class":50},[36,51599,51600],{"class":38,"line":18238},[36,51601,35877],{"class":124},[36,51603,51604,51606,51608,51610],{"class":38,"line":18243},[36,51605,4894],{"class":42},[36,51607,35884],{"class":50},[36,51609,27374],{"class":42},[36,51611,35528],{"class":50},[36,51613,51614,51616,51618],{"class":38,"line":18256},[36,51615,33941],{"class":50},[36,51617,70],{"class":42},[36,51619,33946],{"class":50},[36,51621,51622,51624,51626],{"class":38,"line":18261},[36,51623,33956],{"class":50},[36,51625,70],{"class":42},[36,51627,33961],{"class":50},[36,51629,51630],{"class":38,"line":33964},[36,51631,58],{"emptyLinePlaceholder":57},[36,51633,51634],{"class":38,"line":33970},[36,51635,35913],{"class":124},[36,51637,51638],{"class":38,"line":33976},[36,51639,34206],{"class":50},[36,51641,51642],{"class":38,"line":33982},[36,51643,35922],{"class":124},[36,51645,51646,51648,51650],{"class":38,"line":33988},[36,51647,33991],{"class":50},[36,51649,70],{"class":42},[36,51651,33996],{"class":50},[36,51653,51654],{"class":38,"line":33999},[36,51655,35935],{"class":124},[36,51657,51658,51660,51662,51664,51666,51668,51670],{"class":38,"line":34005},[36,51659,34008],{"class":50},[36,51661,70],{"class":42},[36,51663,34013],{"class":50},[36,51665,34016],{"class":473},[36,51667,70],{"class":42},[36,51669,1885],{"class":73},[36,51671,1680],{"class":50},[36,51673,51674],{"class":38,"line":34025},[36,51675,35956],{"class":124},[36,51677,51678,51680,51682],{"class":38,"line":34031},[36,51679,35961],{"class":50},[36,51681,70],{"class":42},[36,51683,35966],{"class":50},[36,51685,51686,51688,51690],{"class":38,"line":34042},[36,51687,35971],{"class":50},[36,51689,70],{"class":42},[36,51691,35976],{"class":50},[36,51693,51694,51696,51698,51700,51702,51704,51706,51708],{"class":38,"line":34048},[36,51695,35981],{"class":73},[36,51697,222],{"class":50},[36,51699,35986],{"class":110},[36,51701,35989],{"class":50},[36,51703,35992],{"class":110},[36,51705,2045],{"class":50},[36,51707,35997],{"class":110},[36,51709,36000],{"class":50},[1592,51711,51712],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":31,"searchDepth":54,"depth":54,"links":51714},[51715,51716,51717,51718],{"id":31922,"depth":61,"text":31923},{"id":39170,"depth":61,"text":39171},{"id":42603,"depth":61,"text":42604},{"id":46612,"depth":61,"text":46613},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31914,"description":24706},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51725,"title":51726,"body":51727,"description":24706,"extension":1603,"meta":51734,"navigation":57,"path":51735,"seo":51736,"stem":51737,"__hash__":51738},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51728,"toc":51732},[51729],[10,51730,51726],{"id":51731},"_3yolo模型学习",{"title":31,"searchDepth":54,"depth":54,"links":51733},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51726,"description":24706},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51740,"title":51741,"body":51742,"description":51749,"extension":1603,"meta":51750,"navigation":57,"path":51752,"seo":51753,"stem":51754,"__hash__":51755},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51743,"toc":51747},[51744],[19,51745,51746],{},"yolo模型还未补充",{"title":31,"searchDepth":54,"depth":54,"links":51748},[],"深度学习学习",{"category":51751},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51741,"description":51749},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51757,"title":51758,"body":51759,"description":24706,"extension":1603,"meta":51784,"navigation":57,"path":51785,"seo":51786,"stem":51787,"__hash__":51788},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51760,"toc":51782},[51761,51764,51767,51772,51779],[10,51762,51758],{"id":51763},"_1工具",[19,51765,51766],{},"提示错误插件：有问题会提前报错",[19,51768,51769],{},[2992,51770],{"alt":31,"src":51771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51773,51774],{},[1906,51775,51778],{"href":51776,"rel":51777},"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",[25195],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51780,51781],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":54,"depth":54,"links":51783},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51758,"description":24706},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51790,"title":51791,"body":51792,"description":24706,"extension":1603,"meta":54656,"navigation":57,"path":54657,"seo":54658,"stem":54659,"__hash__":54660},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51793,"toc":54607},[51794,51797,51801,51805,51810,51813,51818,51822,51829,51834,51841,51846,51853,51858,51862,51867,51870,51874,51879,51883,51888,51891,51894,51897,51900,51903,51906,51909,51912,51917,51922,51927,51931,51934,51937,51941,51946,51949,51957,51962,51979,51987,51992,51997,52002,52007,52012,52015,52020,52025,52029,52038,52043,52048,52052,52057,52060,52064,52069,52077,52082,52087,52090,52095,52100,52105,52108,52111,52114,52119,52124,52127,52132,52135,52140,52143,52146,52149,52154,52157,52160,52175,52180,52185,52190,52193,52196,52199,52213,52216,52221,52226,52229,52232,52235,52238,52241,52244,52247,52251,52255,52260,52264,52267,52272,52277,52280,52285,52288,52292,52297,52300,52303,52306,52309,52312,52315,52318,52321,52324,52328,52333,52338,52343,52346,52349,52353,52358,52361,52365,52368,52371,52376,52379,52382,52386,52390,52393,52398,52403,52406,52435,52440,52445,52450,52455,52459,52464,52468,52473,52476,52480,52484,52489,52493,52498,52503,52507,52512,52515,52517,52520,52525,52529,52534,52538,52542,52547,52552,52557,52562,52566,52571,52576,52581,52584,52587,52592,52595,52600,52605,52610,52615,52619,53426,53430,53773,53778,53781,53784,53787,53790,53793,53796,53799,53802,53804,53807,53809,53812,53816,53821,53824,53827,53830,53834,53839,53844,53864,53867,53871,53876,53881,53898,53902,53931,53935,53957,53959,53998,54006,54012,54016,54019,54022,54027,54032,54035,54038,54041,54046,54051,54054,54057,54060,54063,54066,54069,54072,54075,54078,54081,54084,54086,54089,54092,54095,54098,54101,54104,54107,54110,54114,54119,54122,54127,54130,54133,54136,54139,54142,54145,54148,54150,54153,54156,54159,54162,54165,54168,54172,54175,54184,54187,54192,54195,54200,54203,54206,54209,54212,54215,54218,54221,54225,54229,54232,54235,54240,54245,54250,54254,54259,54264,54267,54270,54273,54276,54279,54284,54287,54292,54294,54299,54302,54306,54311,54314,54317,54322,54326,54329,54334,54337,54340,54369,54374,54377,54380,54383,54386,54389,54393,54396,54482,54486,54489,54494,54499,54506,54509,54512,54515,54518,54521,54526,54531,54534,54537,54540,54543,54546,54549,54552,54555,54558,54560,54563,54567,54572,54577,54582,54585,54590,54595,54598,54601,54604],[10,51795,51791],{"id":51796},"_2基础语法",[14,51798,51800],{"id":51799},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[1645,51802,51804],{"id":51803},"_211-js组成","2.1.1 js组成",[256,51806,51807],{},[259,51808,51809],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51811,51812],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[256,51814,51815],{"start":54},[259,51816,51817],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[1645,51819,51821],{"id":51820},"_212-js书写位置","2.1.2 js书写位置",[256,51823,51824],{},[259,51825,51826],{},[887,51827,51828],{},"内部 JavaScript",[19,51830,51831],{},[2992,51832],{"alt":31,"src":51833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[256,51835,51836],{"start":54},[259,51837,51838],{},[887,51839,51840],{},"外部 JavaScript",[19,51842,51843],{},[2992,51844],{"alt":31,"src":51845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[256,51847,51848],{"start":61},[259,51849,51850],{},[887,51851,51852],{},"内联 JavaScript",[19,51854,51855],{},[2992,51856],{"alt":31,"src":51857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[1645,51859,51861],{"id":51860},"_213-javascript注释","2.1.3 JavaScript注释",[19,51863,51864],{},[2992,51865],{"alt":31,"src":51866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51868,51869],{},"alt+shift+a一定要记住！",[1645,51871,51873],{"id":51872},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51875,51876],{},[2992,51877],{"alt":31,"src":51878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[1645,51880,51882],{"id":51881},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[256,51884,51885],{},[259,51886,51887],{},"输出语法：",[19,51889,51890],{},"①document.write('要出的内容')",[19,51892,51893],{},"向body内输出内容；",[19,51895,51896],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51898,51899],{},"②alert('要出的内容')",[19,51901,51902],{},"页面弹出警告对话框",[19,51904,51905],{},"③console.log('控制台打印')",[19,51907,51908],{},"控制台输出语法，程序员调试使用",[19,51910,51911],{},"输入log就行，自动生成：",[19,51913,51914],{},[2992,51915],{"alt":31,"src":51916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[256,51918,51919],{"start":54},[259,51920,51921],{},"输入语法：",[19,51923,51924],{},[2992,51925],{"alt":31,"src":51926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[1645,51928,51930],{"id":51929},"_2116-字面量","21.1.6 字面量",[19,51932,51933],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51935,51936],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51938,51940],{"id":51939},"_22-变量","2.2 变量",[256,51942,51943],{},[259,51944,51945],{},"变量声明",[19,51947,51948],{},"let 变量名",[2674,51950,51951,51954],{},[259,51952,51953],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[259,51955,51956],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[256,51958,51959],{"start":54},[259,51960,51961],{},"变量赋值",[26,51963,51967],{"className":51964,"code":51965,"language":51966,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[33,51968,51969,51974],{"__ignoreMap":31},[36,51970,51971],{"class":38,"line":39},[36,51972,51973],{"class":50},"let age\n",[36,51975,51976],{"class":38,"line":54},[36,51977,51978],{"class":50},"age=18\n",[256,51980,51981,51984],{"start":61},[259,51982,51983],{},"连这些（变量的初始化）：let age=18",[259,51985,51986],{},"更新变量",[19,51988,51989],{},[2992,51990],{"alt":31,"src":51991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[256,51993,51994],{"start":96},[259,51995,51996],{},"声明多个变量",[19,51998,51999],{},[2992,52000],{"alt":31,"src":52001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[256,52003,52004],{"start":101},[259,52005,52006],{},"变量命名规则与规范",[19,52008,52009],{},[2992,52010],{"alt":31,"src":52011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52013,52014],{},"遵守小驼峰！",[256,52016,52017],{"start":128},[259,52018,52019],{},"变量拓展-let和var的区别",[19,52021,52022],{},[2992,52023],{"alt":31,"src":52024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52026,52028],{"id":52027},"_23-数组","2.3 数组",[26,52030,52032],{"className":51964,"code":52031,"language":51966,"meta":31,"style":31},"let arr = []\n",[33,52033,52034],{"__ignoreMap":31},[36,52035,52036],{"class":38,"line":39},[36,52037,52031],{"class":50},[19,52039,52040],{},[2992,52041],{"alt":31,"src":52042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52044,52045],{},[2992,52046],{"alt":31,"src":52047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52049,52051],{"id":52050},"_24-常量","2.4 常量",[19,52053,52054],{},[2992,52055],{"alt":31,"src":52056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52058,52059],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52061,52063],{"id":52062},"_25-数据类型","2.5 数据类型",[19,52065,52066],{},[2992,52067],{"alt":31,"src":52068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[256,52070,52071,52074],{},[259,52072,52073],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[259,52075,52076],{},"算数运算符：",[19,52078,52079],{},[2992,52080],{"alt":31,"src":52081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[256,52083,52084],{"start":61},[259,52085,52086],{},"数字类型（Number）",[19,52088,52089],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52091,52092],{},[2992,52093],{"alt":31,"src":52094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[256,52096,52097],{"start":80},[259,52098,52099],{},"字符串类型（string）",[19,52101,52102],{},[2992,52103],{"alt":31,"src":52104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52106,52107],{},"反引号也是可以使用的",[19,52109,52110],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52112,52113],{},"例如：document.write(\"我今年\"+age+\"岁\")",[256,52115,52116],{"start":96},[259,52117,52118],{},"模板字符串",[19,52120,52121],{},[2992,52122],{"alt":31,"src":52123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52125,52126],{},"类似于python的字符串格式化",[256,52128,52129],{"start":101},[259,52130,52131],{},"布尔类型",[19,52133,52134],{},"true 和 false",[256,52136,52137],{"start":128},[259,52138,52139],{},"未定义类型（underfined）",[19,52141,52142],{},"表示没有赋值",[19,52144,52145],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52147,52148],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[256,52150,52151],{"start":149},[259,52152,52153],{},"null（空类型）",[19,52155,52156],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52158,52159],{},"赋值了，但是内容为空",[26,52161,52163],{"className":51964,"code":52162,"language":51966,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[33,52164,52165,52170],{"__ignoreMap":31},[36,52166,52167],{"class":38,"line":39},[36,52168,52169],{"class":50},"typeof null\n",[36,52171,52172],{"class":38,"line":54},[36,52173,52174],{"class":50},"输出的是'object'，是一个对象数据类型\n",[256,52176,52177],{"start":154},[259,52178,52179],{},"控制台检测数据类型",[19,52181,52182],{},[2992,52183],{"alt":31,"src":52184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[256,52186,52187],{"start":167},[259,52188,52189],{},"类型转换",[19,52191,52192],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52194,52195],{},"转换方式：隐式转换和显示转换",[19,52197,52198],{},"①隐式转换",[2674,52200,52201,52204,52207,52210],{},[259,52202,52203],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[259,52205,52206],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[259,52208,52209],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[259,52211,52212],{},"任何数据和字符串相加结果都是字符串",[19,52214,52215],{},"②显示转换",[19,52217,52218],{},[2992,52219],{"alt":31,"src":52220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52222,52223],{},[2992,52224],{"alt":31,"src":52225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52227,52228],{},"在输入的时候要用好隐式转换，简单写起来",[19,52230,52231],{},"let num = +prompt(’请输入数字：‘)",[19,52233,52234],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52236,52237],{},"console.log(parseInt('12.333px'))",[19,52239,52240],{},"输出为：12",[19,52242,52243],{},"console.log(parseInt('a'a'a12.333px'))",[19,52245,52246],{},"输出：NaN",[14,52248,52250],{"id":52249},"_26-运算符","2.6 运算符",[1645,52252,52254],{"id":52253},"_261-赋值运算符","2.6.1 赋值运算符",[19,52256,52257],{},[2992,52258],{"alt":31,"src":52259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[1645,52261,52263],{"id":52262},"_262-一元运算符","2.6.2 一元运算符",[19,52265,52266],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52268,52269],{},[2992,52270],{"alt":31,"src":52271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52273,52274],{},[2992,52275],{"alt":31,"src":52276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52278,52279],{},"两者的区别：",[19,52281,52282],{},[2992,52283],{"alt":31,"src":52284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52286,52287],{},"前置先自加；后置后加，代码执行完之后再加",[1645,52289,52291],{"id":52290},"_263-比较运算符","2.6.3 比较运算符",[19,52293,52294],{},[2992,52295],{"alt":31,"src":52296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52298,52299],{},"比较运算符也有隐式转换",[19,52301,52302],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52304,52305],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52307,52308],{},"要使用三等，开发的时候",[19,52310,52311],{},"NaN不等于任何人，包括它自己",[19,52313,52314],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52316,52317],{},"7\u002F10=0.7",[19,52319,52320],{},"最后：0.5+0.2=0.7",[19,52322,52323],{},"字符串比较，比较的是字符对应的ASCII码",[1645,52325,52327],{"id":52326},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52329,52330],{},[2992,52331],{"alt":31,"src":52332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52334,52335],{},[2992,52336],{"alt":31,"src":52337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52339,52340],{},[2992,52341],{"alt":31,"src":52342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52344,52345],{},"上述题目选D",[19,52347,52348],{},"与真2假1；或真1假2",[1645,52350,52352],{"id":52351},"_265-运算符优先级","2.6.5 运算符优先级",[19,52354,52355],{},[2992,52356],{"alt":31,"src":52357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52359,52360],{},"先算逻辑与，后算逻辑或",[14,52362,52364],{"id":52363},"_27-语句","2.7 语句",[19,52366,52367],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52369,52370],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52372,52373],{},[2992,52374],{"alt":31,"src":52375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52377,52378],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52380,52381],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[1645,52383,52385],{"id":52384},"_271-分支语句","2.7.1 分支语句",[23327,52387,52389],{"id":52388},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52391,52392],{},"if语句单行简单的话，可以不写{}，写在一行就行",[256,52394,52395],{},[259,52396,52397],{},"单分支语句",[19,52399,52400],{},[2992,52401],{"alt":31,"src":52402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52404,52405],{},"除了0，所有数字都为真",[26,52407,52409],{"className":51964,"code":52408,"language":51966,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[33,52410,52411,52416,52421,52426,52430],{"__ignoreMap":31},[36,52412,52413],{"class":38,"line":39},[36,52414,52415],{"class":50},"if（0) {\n",[36,52417,52418],{"class":38,"line":54},[36,52419,52420],{"class":50},"    let a=1\n",[36,52422,52423],{"class":38,"line":61},[36,52424,52425],{"class":50},"    alert(typeof a)\n",[36,52427,52428],{"class":38,"line":80},[36,52429,250],{"class":50},[36,52431,52432],{"class":38,"line":96},[36,52433,52434],{"class":50},"不输出，括号为假\n",[256,52436,52437],{"start":54},[259,52438,52439],{},"双分支语句",[19,52441,52442],{},[2992,52443],{"alt":31,"src":52444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[256,52446,52447],{"start":61},[259,52448,52449],{},"多分支语句",[19,52451,52452],{},[2992,52453],{"alt":31,"src":52454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23327,52456,52458],{"id":52457},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52460,52461],{},[2992,52462],{"alt":31,"src":52463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23327,52465,52467],{"id":52466},"_2713-switch语句","2.7.1.3 switch语句",[19,52469,52470],{},[2992,52471],{"alt":31,"src":52472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52474,52475],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[1645,52477,52479],{"id":52478},"_272-循环语句","2.7.2 循环语句",[23327,52481,52483],{"id":52482},"_2721-断点演示","2.7.2.1 断点演示",[19,52485,52486],{},[2992,52487],{"alt":31,"src":52488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23327,52490,52492],{"id":52491},"_2722-while循环","2.7.2.2 while循环",[19,52494,52495],{},[2992,52496],{"alt":31,"src":52497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52499,52500],{},[2992,52501],{"alt":31,"src":52502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23327,52504,52506],{"id":52505},"_2723-for循环","2.7.2.3 for循环",[19,52508,52509],{},[2992,52510],{"alt":31,"src":52511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52513,52514],{},"for(;;) {",[19,52516,2613],{},[19,52518,52519],{},"表示无限循环",[19,52521,52522],{},[2992,52523],{"alt":31,"src":52524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23327,52526,52528],{"id":52527},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52530,52531],{},[2992,52532],{"alt":31,"src":52533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52535,52537],{"id":52536},"_28-数组","2.8 数组",[1645,52539,52541],{"id":52540},"_281-基础认识","2.8.1 基础认识",[19,52543,52544],{},[2992,52545],{"alt":31,"src":52546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52548,52549],{},[2992,52550],{"alt":31,"src":52551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52553,52554],{},[2992,52555],{"alt":31,"src":52556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52558,52559],{},[2992,52560],{"alt":31,"src":52561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[1645,52563,52565],{"id":52564},"_282-操作数组","2.8.2 操作数组",[19,52567,52568],{},[2992,52569],{"alt":31,"src":52570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[256,52572,52573],{},[259,52574,52575],{},"添加元素",[19,52577,52578],{},[2992,52579],{"alt":31,"src":52580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52582,52583],{},"console.log(arr.push('green'))",[19,52585,52586],{},"输出结果：为新数组的长度",[19,52588,52589],{},[2992,52590],{"alt":31,"src":52591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52593,52594],{},"push用的非常多，一定要记住",[256,52596,52597],{},[259,52598,52599],{},"删除元素",[19,52601,52602],{},[2992,52603],{"alt":31,"src":52604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52606,52607],{},[2992,52608],{"alt":31,"src":52609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52611,52612],{},[2992,52613],{"alt":31,"src":52614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[1645,52616,52618],{"id":52617},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,52620,52622],{"className":51964,"code":52621,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n        }\n\n        .box {\n            display: flex;\n            width: 700px;\n            height: 300px;\n            border-left: 1px solid pink;\n            border-bottom: 1px solid pink;\n            margin: 50px auto;\n            justify-content: space-around;\n            align-items: flex-end;\n            text-align: center;\n        }\n\n        .box>div {\n            display: flex;\n            width: 50px;\n            background-color: pink;\n            flex-direction: column;\n            justify-content: space-between;\n        }\n\n        .box div span {\n\n            margin-top: -20px;\n        }\n\n        .box div h4 {\n            margin-bottom: -35px;\n            width: 70px;\n            margin-left: -10px;\n        }\n    \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n\n    \u003Cscript>\n        \u002F\u002F 1. 四次弹框效果\n        \u002F\u002F 声明一个新的数组\n        let arr = []\n        for (let i = 1; i \u003C= 4; i++) {\n            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n            \u002F\u002F arr.push(num)\n            arr.push(prompt(`请输入第${i}季度的数据:`))\n            \u002F\u002F push记得加小括号，不是等号赋值的形式\n        }\n        \u002F\u002F console.log(arr)  ['123','135','345','234']\n        \u002F\u002F 盒子开头\n        document.write(` \u003Cdiv class=\"box\">`)\n\n        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n        for (let i = 0; i \u003C arr.length; i++) {\n            document.write(`\n              \u003Cdiv style=\"height: ${arr[i]}px;\">\n                \u003Cspan>${arr[i]}\u003C\u002Fspan>\n                \u003Ch4>第${i + 1}季度\u003C\u002Fh4>\n              \u003C\u002Fdiv>          \n            `)\n        }\n        \u002F\u002F 盒子结尾\n        document.write(` \u003C\u002Fdiv>`)\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,52623,52624,52639,52655,52659,52668,52686,52710,52732,52746,52754,52761,52773,52784,52788,52792,52799,52811,52826,52839,52858,52875,52890,52902,52914,52926,52930,52934,52945,52955,52967,52979,52991,53002,53006,53010,53022,53026,53040,53044,53048,53059,53073,53085,53099,53103,53112,53121,53125,53134,53138,53147,53152,53157,53170,53198,53203,53208,53233,53238,53242,53247,53252,53267,53271,53276,53306,53318,53334,53350,53364,53369,53376,53380,53385,53398,53406,53414,53418],{"__ignoreMap":31},[36,52625,52626,52629,52633,52636],{"class":38,"line":39},[36,52627,52628],{"class":50},"\u003C!",[36,52630,52632],{"class":52631},"s9eBZ","DOCTYPE",[36,52634,52635],{"class":46}," html",[36,52637,52638],{"class":50},">\n",[36,52640,52641,52643,52645,52648,52650,52653],{"class":38,"line":54},[36,52642,2577],{"class":50},[36,52644,51966],{"class":52631},[36,52646,52647],{"class":46}," lang",[36,52649,70],{"class":50},[36,52651,52652],{"class":110},"\"en\"",[36,52654,52638],{"class":50},[36,52656,52657],{"class":38,"line":61},[36,52658,58],{"emptyLinePlaceholder":57},[36,52660,52661,52663,52666],{"class":38,"line":80},[36,52662,2577],{"class":50},[36,52664,52665],{"class":52631},"head",[36,52667,52638],{"class":50},[36,52669,52670,52673,52676,52679,52681,52684],{"class":38,"line":96},[36,52671,52672],{"class":50},"    \u003C",[36,52674,52675],{"class":52631},"meta",[36,52677,52678],{"class":46}," charset",[36,52680,70],{"class":50},[36,52682,52683],{"class":110},"\"UTF-8\"",[36,52685,52638],{"class":50},[36,52687,52688,52690,52692,52695,52697,52700,52703,52705,52708],{"class":38,"line":101},[36,52689,52672],{"class":50},[36,52691,52675],{"class":52631},[36,52693,52694],{"class":46}," http-equiv",[36,52696,70],{"class":50},[36,52698,52699],{"class":110},"\"X-UA-Compatible\"",[36,52701,52702],{"class":46}," content",[36,52704,70],{"class":50},[36,52706,52707],{"class":110},"\"IE=edge\"",[36,52709,52638],{"class":50},[36,52711,52712,52714,52716,52718,52720,52723,52725,52727,52730],{"class":38,"line":128},[36,52713,52672],{"class":50},[36,52715,52675],{"class":52631},[36,52717,16249],{"class":46},[36,52719,70],{"class":50},[36,52721,52722],{"class":110},"\"viewport\"",[36,52724,52702],{"class":46},[36,52726,70],{"class":50},[36,52728,52729],{"class":110},"\"width=device-width, initial-scale=1.0\"",[36,52731,52638],{"class":50},[36,52733,52734,52736,52739,52742,52744],{"class":38,"line":149},[36,52735,52672],{"class":50},[36,52737,52738],{"class":52631},"title",[36,52740,52741],{"class":50},">Document\u003C\u002F",[36,52743,52738],{"class":52631},[36,52745,52638],{"class":50},[36,52747,52748,52750,52752],{"class":38,"line":154},[36,52749,52672],{"class":50},[36,52751,1592],{"class":52631},[36,52753,52638],{"class":50},[36,52755,52756,52759],{"class":38,"line":167},[36,52757,52758],{"class":52631},"        *",[36,52760,16901],{"class":50},[36,52762,52763,52766,52769,52771],{"class":38,"line":172},[36,52764,52765],{"class":73},"            margin",[36,52767,52768],{"class":50},": ",[36,52770,1859],{"class":73},[36,52772,77],{"class":50},[36,52774,52775,52778,52780,52782],{"class":38,"line":192},[36,52776,52777],{"class":73},"            padding",[36,52779,52768],{"class":50},[36,52781,1859],{"class":73},[36,52783,77],{"class":50},[36,52785,52786],{"class":38,"line":211},[36,52787,4031],{"class":50},[36,52789,52790],{"class":38,"line":216},[36,52791,58],{"emptyLinePlaceholder":57},[36,52793,52794,52797],{"class":38,"line":231},[36,52795,52796],{"class":46},"        .box",[36,52798,16901],{"class":50},[36,52800,52801,52804,52806,52809],{"class":38,"line":236},[36,52802,52803],{"class":73},"            display",[36,52805,52768],{"class":50},[36,52807,52808],{"class":73},"flex",[36,52810,77],{"class":50},[36,52812,52813,52816,52818,52821,52824],{"class":38,"line":247},[36,52814,52815],{"class":73},"            width",[36,52817,52768],{"class":50},[36,52819,52820],{"class":73},"700",[36,52822,52823],{"class":42},"px",[36,52825,77],{"class":50},[36,52827,52828,52831,52833,52835,52837],{"class":38,"line":637},[36,52829,52830],{"class":73},"            height",[36,52832,52768],{"class":50},[36,52834,5464],{"class":73},[36,52836,52823],{"class":42},[36,52838,77],{"class":50},[36,52840,52841,52844,52846,52848,52850,52853,52856],{"class":38,"line":646},[36,52842,52843],{"class":73},"            border-left",[36,52845,52768],{"class":50},[36,52847,1885],{"class":73},[36,52849,52823],{"class":42},[36,52851,52852],{"class":73}," solid",[36,52854,52855],{"class":73}," pink",[36,52857,77],{"class":50},[36,52859,52860,52863,52865,52867,52869,52871,52873],{"class":38,"line":655},[36,52861,52862],{"class":73},"            border-bottom",[36,52864,52768],{"class":50},[36,52866,1885],{"class":73},[36,52868,52823],{"class":42},[36,52870,52852],{"class":73},[36,52872,52855],{"class":73},[36,52874,77],{"class":50},[36,52876,52877,52879,52881,52883,52885,52888],{"class":38,"line":660},[36,52878,52765],{"class":73},[36,52880,52768],{"class":50},[36,52882,2323],{"class":73},[36,52884,52823],{"class":42},[36,52886,52887],{"class":73}," auto",[36,52889,77],{"class":50},[36,52891,52892,52895,52897,52900],{"class":38,"line":665},[36,52893,52894],{"class":73},"            justify-content",[36,52896,52768],{"class":50},[36,52898,52899],{"class":73},"space-around",[36,52901,77],{"class":50},[36,52903,52904,52907,52909,52912],{"class":38,"line":674},[36,52905,52906],{"class":73},"            align-items",[36,52908,52768],{"class":50},[36,52910,52911],{"class":73},"flex-end",[36,52913,77],{"class":50},[36,52915,52916,52919,52921,52924],{"class":38,"line":679},[36,52917,52918],{"class":73},"            text-align",[36,52920,52768],{"class":50},[36,52922,52923],{"class":73},"center",[36,52925,77],{"class":50},[36,52927,52928],{"class":38,"line":692},[36,52929,4031],{"class":50},[36,52931,52932],{"class":38,"line":705},[36,52933,58],{"emptyLinePlaceholder":57},[36,52935,52936,52938,52940,52943],{"class":38,"line":710},[36,52937,52796],{"class":46},[36,52939,2627],{"class":42},[36,52941,52942],{"class":52631},"div",[36,52944,16901],{"class":50},[36,52946,52947,52949,52951,52953],{"class":38,"line":722},[36,52948,52803],{"class":73},[36,52950,52768],{"class":50},[36,52952,52808],{"class":73},[36,52954,77],{"class":50},[36,52956,52957,52959,52961,52963,52965],{"class":38,"line":750},[36,52958,52815],{"class":73},[36,52960,52768],{"class":50},[36,52962,2323],{"class":73},[36,52964,52823],{"class":42},[36,52966,77],{"class":50},[36,52968,52969,52972,52974,52977],{"class":38,"line":755},[36,52970,52971],{"class":73},"            background-color",[36,52973,52768],{"class":50},[36,52975,52976],{"class":73},"pink",[36,52978,77],{"class":50},[36,52980,52981,52984,52986,52989],{"class":38,"line":777},[36,52982,52983],{"class":73},"            flex-direction",[36,52985,52768],{"class":50},[36,52987,52988],{"class":73},"column",[36,52990,77],{"class":50},[36,52992,52993,52995,52997,53000],{"class":38,"line":802},[36,52994,52894],{"class":73},[36,52996,52768],{"class":50},[36,52998,52999],{"class":73},"space-between",[36,53001,77],{"class":50},[36,53003,53004],{"class":38,"line":807},[36,53005,4031],{"class":50},[36,53007,53008],{"class":38,"line":818},[36,53009,58],{"emptyLinePlaceholder":57},[36,53011,53012,53014,53017,53020],{"class":38,"line":843},[36,53013,52796],{"class":46},[36,53015,53016],{"class":52631}," div",[36,53018,53019],{"class":52631}," span",[36,53021,16901],{"class":50},[36,53023,53024],{"class":38,"line":848},[36,53025,58],{"emptyLinePlaceholder":57},[36,53027,53028,53031,53033,53036,53038],{"class":38,"line":859},[36,53029,53030],{"class":73},"            margin-top",[36,53032,52768],{"class":50},[36,53034,53035],{"class":73},"-20",[36,53037,52823],{"class":42},[36,53039,77],{"class":50},[36,53041,53042],{"class":38,"line":864},[36,53043,4031],{"class":50},[36,53045,53046],{"class":38,"line":873},[36,53047,58],{"emptyLinePlaceholder":57},[36,53049,53050,53052,53054,53057],{"class":38,"line":9454},[36,53051,52796],{"class":46},[36,53053,53016],{"class":52631},[36,53055,53056],{"class":52631}," h4",[36,53058,16901],{"class":50},[36,53060,53061,53064,53066,53069,53071],{"class":38,"line":9481},[36,53062,53063],{"class":73},"            margin-bottom",[36,53065,52768],{"class":50},[36,53067,53068],{"class":73},"-35",[36,53070,52823],{"class":42},[36,53072,77],{"class":50},[36,53074,53075,53077,53079,53081,53083],{"class":38,"line":9486},[36,53076,52815],{"class":73},[36,53078,52768],{"class":50},[36,53080,2023],{"class":73},[36,53082,52823],{"class":42},[36,53084,77],{"class":50},[36,53086,53087,53090,53092,53095,53097],{"class":38,"line":9492},[36,53088,53089],{"class":73},"            margin-left",[36,53091,52768],{"class":50},[36,53093,53094],{"class":73},"-10",[36,53096,52823],{"class":42},[36,53098,77],{"class":50},[36,53100,53101],{"class":38,"line":9504},[36,53102,4031],{"class":50},[36,53104,53105,53108,53110],{"class":38,"line":9516},[36,53106,53107],{"class":50},"    \u003C\u002F",[36,53109,1592],{"class":52631},[36,53111,52638],{"class":50},[36,53113,53114,53117,53119],{"class":38,"line":9528},[36,53115,53116],{"class":50},"\u003C\u002F",[36,53118,52665],{"class":52631},[36,53120,52638],{"class":50},[36,53122,53123],{"class":38,"line":11184},[36,53124,58],{"emptyLinePlaceholder":57},[36,53126,53127,53129,53132],{"class":38,"line":11209},[36,53128,2577],{"class":50},[36,53130,53131],{"class":52631},"body",[36,53133,52638],{"class":50},[36,53135,53136],{"class":38,"line":11232},[36,53137,58],{"emptyLinePlaceholder":57},[36,53139,53140,53142,53145],{"class":38,"line":11256},[36,53141,52672],{"class":50},[36,53143,53144],{"class":52631},"script",[36,53146,52638],{"class":50},[36,53148,53149],{"class":38,"line":11261},[36,53150,53151],{"class":124},"        \u002F\u002F 1. 四次弹框效果\n",[36,53153,53154],{"class":38,"line":11266},[36,53155,53156],{"class":124},"        \u002F\u002F 声明一个新的数组\n",[36,53158,53159,53162,53165,53167],{"class":38,"line":11271},[36,53160,53161],{"class":42},"        let",[36,53163,53164],{"class":50}," arr ",[36,53166,70],{"class":42},[36,53168,53169],{"class":50}," []\n",[36,53171,53172,53174,53176,53179,53181,53183,53185,53187,53189,53192,53194,53196],{"class":38,"line":11280},[36,53173,4894],{"class":42},[36,53175,3180],{"class":50},[36,53177,53178],{"class":42},"let",[36,53180,10906],{"class":50},[36,53182,70],{"class":42},[36,53184,26449],{"class":73},[36,53186,10913],{"class":50},[36,53188,3117],{"class":42},[36,53190,53191],{"class":73}," 4",[36,53193,4705],{"class":50},[36,53195,3798],{"class":42},[36,53197,485],{"class":50},[36,53199,53200],{"class":38,"line":11285},[36,53201,53202],{"class":124},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[36,53204,53205],{"class":38,"line":11291},[36,53206,53207],{"class":124},"            \u002F\u002F arr.push(num)\n",[36,53209,53210,53213,53216,53218,53221,53223,53226,53228,53231],{"class":38,"line":11312},[36,53211,53212],{"class":50},"            arr.",[36,53214,53215],{"class":46},"push",[36,53217,222],{"class":50},[36,53219,53220],{"class":46},"prompt",[36,53222,222],{"class":50},[36,53224,53225],{"class":110},"`请输入第${",[36,53227,2108],{"class":50},[36,53229,53230],{"class":110},"}季度的数据:`",[36,53232,31828],{"class":50},[36,53234,53235],{"class":38,"line":11318},[36,53236,53237],{"class":124},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[36,53239,53240],{"class":38,"line":11332},[36,53241,4031],{"class":50},[36,53243,53244],{"class":38,"line":11338},[36,53245,53246],{"class":124},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[36,53248,53249],{"class":38,"line":11365},[36,53250,53251],{"class":124},"        \u002F\u002F 盒子开头\n",[36,53253,53254,53257,53260,53262,53265],{"class":38,"line":11374},[36,53255,53256],{"class":50},"        document.",[36,53258,53259],{"class":46},"write",[36,53261,222],{"class":50},[36,53263,53264],{"class":110},"` \u003Cdiv class=\"box\">`",[36,53266,1680],{"class":50},[36,53268,53269],{"class":38,"line":11380},[36,53270,58],{"emptyLinePlaceholder":57},[36,53272,53273],{"class":38,"line":11388},[36,53274,53275],{"class":124},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[36,53277,53278,53280,53282,53284,53286,53288,53290,53292,53294,53297,53300,53302,53304],{"class":38,"line":11393},[36,53279,4894],{"class":42},[36,53281,3180],{"class":50},[36,53283,53178],{"class":42},[36,53285,10906],{"class":50},[36,53287,70],{"class":42},[36,53289,242],{"class":73},[36,53291,10913],{"class":50},[36,53293,2577],{"class":42},[36,53295,53296],{"class":50}," arr.",[36,53298,53299],{"class":73},"length",[36,53301,4705],{"class":50},[36,53303,3798],{"class":42},[36,53305,485],{"class":50},[36,53307,53308,53311,53313,53315],{"class":38,"line":17933},[36,53309,53310],{"class":50},"            document.",[36,53312,53259],{"class":46},[36,53314,222],{"class":50},[36,53316,53317],{"class":110},"`\n",[36,53319,53320,53323,53325,53327,53329,53331],{"class":38,"line":17939},[36,53321,53322],{"class":110},"              \u003Cdiv style=\"height: ${",[36,53324,5371],{"class":50},[36,53326,2557],{"class":110},[36,53328,2108],{"class":50},[36,53330,2607],{"class":110},[36,53332,53333],{"class":110},"}px;\">\n",[36,53335,53336,53339,53341,53343,53345,53347],{"class":38,"line":17962},[36,53337,53338],{"class":110},"                \u003Cspan>${",[36,53340,5371],{"class":50},[36,53342,2557],{"class":110},[36,53344,2108],{"class":50},[36,53346,2607],{"class":110},[36,53348,53349],{"class":110},"}\u003C\u002Fspan>\n",[36,53351,53352,53355,53357,53359,53361],{"class":38,"line":17968},[36,53353,53354],{"class":110},"                \u003Ch4>第${",[36,53356,2108],{"class":50},[36,53358,46897],{"class":42},[36,53360,26449],{"class":73},[36,53362,53363],{"class":110},"}季度\u003C\u002Fh4>\n",[36,53365,53366],{"class":38,"line":17991},[36,53367,53368],{"class":110},"              \u003C\u002Fdiv>          \n",[36,53370,53371,53374],{"class":38,"line":18005},[36,53372,53373],{"class":110},"            `",[36,53375,1680],{"class":50},[36,53377,53378],{"class":38,"line":18025},[36,53379,4031],{"class":50},[36,53381,53382],{"class":38,"line":18031},[36,53383,53384],{"class":124},"        \u002F\u002F 盒子结尾\n",[36,53386,53387,53389,53391,53393,53396],{"class":38,"line":18042},[36,53388,53256],{"class":50},[36,53390,53259],{"class":46},[36,53392,222],{"class":50},[36,53394,53395],{"class":110},"` \u003C\u002Fdiv>`",[36,53397,1680],{"class":50},[36,53399,53400,53402,53404],{"class":38,"line":18065},[36,53401,53107],{"class":50},[36,53403,53144],{"class":52631},[36,53405,52638],{"class":50},[36,53407,53408,53410,53412],{"class":38,"line":18087},[36,53409,53116],{"class":50},[36,53411,53131],{"class":52631},[36,53413,52638],{"class":50},[36,53415,53416],{"class":38,"line":18092},[36,53417,58],{"emptyLinePlaceholder":57},[36,53419,53420,53422,53424],{"class":38,"line":18098},[36,53421,53116],{"class":50},[36,53423,51966],{"class":52631},[36,53425,52638],{"class":50},[1645,53427,53429],{"id":53428},"_284-冒泡排序","2.8.4 冒泡排序",[26,53431,53433],{"className":51964,"code":53432,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    let arr = [5, 4, 3, 2, 1]\n    for (let i = 0; i \u003C arr.length - 1; i++) {\n      for (let j = 0; j \u003C arr.length - i - 1; j++) {\n        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n        if (arr[j] > arr[j + 1]) {\n          \u002F\u002F 交换两个变量\n          let tmp = arr[j]\n          arr[j] = arr[j + 1]\n          arr[j + 1] = tmp\n        }\n      }\n    }\n    document.write(arr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,53434,53435,53445,53459,53463,53471,53486,53506,53518,53526,53530,53538,53546,53578,53611,53648,53653,53672,53677,53690,53705,53721,53725,53730,53734,53744,53753,53761,53765],{"__ignoreMap":31},[36,53436,53437,53439,53441,53443],{"class":38,"line":39},[36,53438,52628],{"class":50},[36,53440,52632],{"class":52631},[36,53442,52635],{"class":46},[36,53444,52638],{"class":50},[36,53446,53447,53449,53451,53453,53455,53457],{"class":38,"line":54},[36,53448,2577],{"class":50},[36,53450,51966],{"class":52631},[36,53452,52647],{"class":46},[36,53454,70],{"class":50},[36,53456,52652],{"class":110},[36,53458,52638],{"class":50},[36,53460,53461],{"class":38,"line":61},[36,53462,58],{"emptyLinePlaceholder":57},[36,53464,53465,53467,53469],{"class":38,"line":80},[36,53466,2577],{"class":50},[36,53468,52665],{"class":52631},[36,53470,52638],{"class":50},[36,53472,53473,53476,53478,53480,53482,53484],{"class":38,"line":96},[36,53474,53475],{"class":50},"  \u003C",[36,53477,52675],{"class":52631},[36,53479,52678],{"class":46},[36,53481,70],{"class":50},[36,53483,52683],{"class":110},[36,53485,52638],{"class":50},[36,53487,53488,53490,53492,53494,53496,53498,53500,53502,53504],{"class":38,"line":101},[36,53489,53475],{"class":50},[36,53491,52675],{"class":52631},[36,53493,16249],{"class":46},[36,53495,70],{"class":50},[36,53497,52722],{"class":110},[36,53499,52702],{"class":46},[36,53501,70],{"class":50},[36,53503,52729],{"class":110},[36,53505,52638],{"class":50},[36,53507,53508,53510,53512,53514,53516],{"class":38,"line":128},[36,53509,53475],{"class":50},[36,53511,52738],{"class":52631},[36,53513,52741],{"class":50},[36,53515,52738],{"class":52631},[36,53517,52638],{"class":50},[36,53519,53520,53522,53524],{"class":38,"line":149},[36,53521,53116],{"class":50},[36,53523,52665],{"class":52631},[36,53525,52638],{"class":50},[36,53527,53528],{"class":38,"line":154},[36,53529,58],{"emptyLinePlaceholder":57},[36,53531,53532,53534,53536],{"class":38,"line":167},[36,53533,2577],{"class":50},[36,53535,53131],{"class":52631},[36,53537,52638],{"class":50},[36,53539,53540,53542,53544],{"class":38,"line":172},[36,53541,53475],{"class":50},[36,53543,53144],{"class":52631},[36,53545,52638],{"class":50},[36,53547,53548,53551,53553,53555,53558,53560,53562,53564,53566,53568,53570,53572,53574,53576],{"class":38,"line":192},[36,53549,53550],{"class":42},"    let",[36,53552,53164],{"class":50},[36,53554,70],{"class":42},[36,53556,53557],{"class":50}," [",[36,53559,1987],{"class":73},[36,53561,477],{"class":50},[36,53563,1961],{"class":73},[36,53565,477],{"class":50},[36,53567,1741],{"class":73},[36,53569,477],{"class":50},[36,53571,1747],{"class":73},[36,53573,477],{"class":50},[36,53575,1885],{"class":73},[36,53577,34577],{"class":50},[36,53579,53580,53582,53584,53586,53588,53590,53592,53594,53596,53598,53600,53603,53605,53607,53609],{"class":38,"line":211},[36,53581,4692],{"class":42},[36,53583,3180],{"class":50},[36,53585,53178],{"class":42},[36,53587,10906],{"class":50},[36,53589,70],{"class":42},[36,53591,242],{"class":73},[36,53593,10913],{"class":50},[36,53595,2577],{"class":42},[36,53597,53296],{"class":50},[36,53599,53299],{"class":73},[36,53601,53602],{"class":42}," -",[36,53604,26449],{"class":73},[36,53606,4705],{"class":50},[36,53608,3798],{"class":42},[36,53610,485],{"class":50},[36,53612,53613,53616,53618,53620,53622,53624,53626,53628,53630,53632,53634,53636,53638,53640,53642,53644,53646],{"class":38,"line":216},[36,53614,53615],{"class":42},"      for",[36,53617,3180],{"class":50},[36,53619,53178],{"class":42},[36,53621,10968],{"class":50},[36,53623,70],{"class":42},[36,53625,242],{"class":73},[36,53627,10975],{"class":50},[36,53629,2577],{"class":42},[36,53631,53296],{"class":50},[36,53633,53299],{"class":73},[36,53635,53602],{"class":42},[36,53637,10906],{"class":50},[36,53639,2199],{"class":42},[36,53641,26449],{"class":73},[36,53643,10982],{"class":50},[36,53645,3798],{"class":42},[36,53647,485],{"class":50},[36,53649,53650],{"class":38,"line":231},[36,53651,53652],{"class":124},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[36,53654,53655,53657,53660,53662,53665,53667,53669],{"class":38,"line":236},[36,53656,3999],{"class":42},[36,53658,53659],{"class":50}," (arr[j] ",[36,53661,2627],{"class":42},[36,53663,53664],{"class":50}," arr[j ",[36,53666,2148],{"class":42},[36,53668,26449],{"class":73},[36,53670,53671],{"class":50},"]) {\n",[36,53673,53674],{"class":38,"line":247},[36,53675,53676],{"class":124},"          \u002F\u002F 交换两个变量\n",[36,53678,53679,53682,53685,53687],{"class":38,"line":637},[36,53680,53681],{"class":42},"          let",[36,53683,53684],{"class":50}," tmp ",[36,53686,70],{"class":42},[36,53688,53689],{"class":50}," arr[j]\n",[36,53691,53692,53695,53697,53699,53701,53703],{"class":38,"line":646},[36,53693,53694],{"class":50},"          arr[j] ",[36,53696,70],{"class":42},[36,53698,53664],{"class":50},[36,53700,2148],{"class":42},[36,53702,26449],{"class":73},[36,53704,34577],{"class":50},[36,53706,53707,53710,53712,53714,53716,53718],{"class":38,"line":655},[36,53708,53709],{"class":50},"          arr[j ",[36,53711,2148],{"class":42},[36,53713,26449],{"class":73},[36,53715,5932],{"class":50},[36,53717,70],{"class":42},[36,53719,53720],{"class":50}," tmp\n",[36,53722,53723],{"class":38,"line":660},[36,53724,4031],{"class":50},[36,53726,53727],{"class":38,"line":665},[36,53728,53729],{"class":50},"      }\n",[36,53731,53732],{"class":38,"line":674},[36,53733,3693],{"class":50},[36,53735,53736,53739,53741],{"class":38,"line":679},[36,53737,53738],{"class":50},"    document.",[36,53740,53259],{"class":46},[36,53742,53743],{"class":50},"(arr)\n",[36,53745,53746,53749,53751],{"class":38,"line":692},[36,53747,53748],{"class":50},"  \u003C\u002F",[36,53750,53144],{"class":52631},[36,53752,52638],{"class":50},[36,53754,53755,53757,53759],{"class":38,"line":705},[36,53756,53116],{"class":50},[36,53758,53131],{"class":52631},[36,53760,52638],{"class":50},[36,53762,53763],{"class":38,"line":710},[36,53764,58],{"emptyLinePlaceholder":57},[36,53766,53767,53769,53771],{"class":38,"line":722},[36,53768,53116],{"class":50},[36,53770,51966],{"class":52631},[36,53772,52638],{"class":50},[19,53774,53775],{},[2992,53776],{"alt":31,"src":53777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53779,53780],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53782,53783],{},"let arr = [4, 2, 5, 1, 3]",[19,53785,53786],{},"\u002F\u002F 1.升序排列写法",[19,53788,53789],{},"arr.sort(function (a, b) {",[19,53791,53792],{},"return a - b",[19,53794,53795],{},"})",[19,53797,53798],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53800,53801],{},"\u002F\u002F 降序排列写法",[19,53803,53789],{},[19,53805,53806],{},"return b - a",[19,53808,53795],{},[19,53810,53811],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53813,53815],{"id":53814},"_29-函数","2.9 函数",[19,53817,53818],{},[2992,53819],{"alt":31,"src":53820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53822,53823],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53825,53826],{},"函数的声明用function",[19,53828,53829],{},"函数里边可以嵌套函数",[1645,53831,53833],{"id":53832},"_291-函数传参","2.9.1 函数传参",[19,53835,53836],{},[2992,53837],{"alt":31,"src":53838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53840,53841],{},[2992,53842],{"alt":31,"src":53843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2674,53845,53846,53849,53852,53855,53858,53861],{},[259,53847,53848],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[259,53850,53851],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[259,53853,53854],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[259,53856,53857],{},"开发中尽量保持形参和实参个数一致",[259,53859,53860],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[259,53862,53863],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53865,53866],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[1645,53868,53870],{"id":53869},"_292-函数的返回值","2.9.2 函数的返回值",[19,53872,53873],{},[2992,53874],{"alt":31,"src":53875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53877,53878],{},[2992,53879],{"alt":31,"src":53880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2674,53882,53883,53886,53889,53892,53895],{},[259,53884,53885],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[259,53887,53888],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[259,53890,53891],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[259,53893,53894],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[259,53896,53897],{},"断点调试:进入函数内部看执行过程F11",[1645,53899,53901],{"id":53900},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,53903,53905],{"className":51964,"code":53904,"language":51966,"meta":31,"style":31},"    function fn(a, b) {\n      console.log(a + b);\n    }\n    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[33,53906,53907,53912,53917,53921,53926],{"__ignoreMap":31},[36,53908,53909],{"class":38,"line":39},[36,53910,53911],{"class":50},"    function fn(a, b) {\n",[36,53913,53914],{"class":38,"line":54},[36,53915,53916],{"class":50},"      console.log(a + b);\n",[36,53918,53919],{"class":38,"line":61},[36,53920,3693],{"class":50},[36,53922,53923],{"class":38,"line":80},[36,53924,53925],{"class":50},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[36,53927,53928],{"class":38,"line":96},[36,53929,53930],{"class":50},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[1645,53932,53934],{"id":53933},"_294-作用域","2.9.4 作用域",[2674,53936,53937,53943,53948,53951,53954],{},[259,53938,53939,53940],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[887,53941,53942],{},"作用域",[259,53944,53945],{},[887,53946,53947],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[259,53949,53950],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[259,53952,53953],{},"函数内部可以直接所使用全局变量",[259,53955,53956],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53958,15962],{},[26,53960,53962],{"className":51964,"code":53961,"language":51966,"meta":31,"style":31},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[33,53963,53964,53969,53974,53978,53983,53988,53993],{"__ignoreMap":31},[36,53965,53966],{"class":38,"line":39},[36,53967,53968],{"class":50},"    function fun() {\n",[36,53970,53971],{"class":38,"line":54},[36,53972,53973],{"class":50},"      num = 10\n",[36,53975,53976],{"class":38,"line":61},[36,53977,3693],{"class":50},[36,53979,53980],{"class":38,"line":80},[36,53981,53982],{"class":50},"    fun()\n",[36,53984,53985],{"class":38,"line":96},[36,53986,53987],{"class":50},"    console.log(num)\n",[36,53989,53990],{"class":38,"line":101},[36,53991,53992],{"class":50},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[36,53994,53995],{"class":38,"line":128},[36,53996,53997],{"class":50},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2674,53999,54000,54003],{},[259,54001,54002],{},"函数内部的形参可以看做是局部变量",[259,54004,54005],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54007,54008,54009],{},"变量访问原则： ",[887,54010,54011],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[1645,54013,54015],{"id":54014},"_295-匿名函数","2.9.5 匿名函数",[19,54017,54018],{},"函数可以分为具名函数和匿名函数",[19,54020,54021],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[256,54023,54024],{},[259,54025,54026],{},"函数表达式",[19,54028,54029],{},[2992,54030],{"alt":31,"src":54031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54033,54034],{},"里边也可以写参数",[19,54036,54037],{},"具名函数调用位置可以随意调整；",[19,54039,54040],{},"匿名函数函数表达式形式只能在声明后才可以使用",[256,54042,54043],{"start":54},[259,54044,54045],{},"立即执行函数",[19,54047,54048],{},[2992,54049],{"alt":31,"src":54050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54052,54053],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54055,54056],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54058,54059],{},"(function () {})();",[19,54061,54062],{},"不要落下最后的;",[19,54064,54065],{},"立即执行函数必须要加;",[19,54067,54068],{},"分号写前写后都没问题",[19,54070,54071],{},"写前：",[19,54073,54074],{},"(function() {})()",[19,54076,54077],{},";(function () {})();",[19,54079,54080],{},"写后:",[19,54082,54083],{},"(function() {})();",[19,54085,54059],{},[19,54087,54088],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54090,54091],{},"还有一种写法：",[19,54093,54094],{},"(function(){}());",[19,54096,54097],{},"或者:",[19,54099,54100],{},"!function(){}();",[19,54102,54103],{},"立即执行函数有时候也是可以加名字的：",[19,54105,54106],{},"(function flexible(window,document) {}(window,document));",[19,54108,54109],{},"省一些调用方法",[1645,54111,54113],{"id":54112},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54115,54116],{},[2992,54117],{"alt":31,"src":54118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54120,54121],{},"这样就不用非得给x,y初始化了",[19,54123,54124],{},[2992,54125],{"alt":31,"src":54126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54128,54129],{},"代码执行时先看左边",[19,54131,54132],{},"例如：console.log(false && 3+5)",[19,54134,54135],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54137,54138],{},"&&都是真时，就返回最后一个真值",[19,54140,54141],{},"console.log(11 && 22)",[19,54143,54144],{},"输出22",[19,54146,54147],{},"逻辑与：遇真则真",[19,54149,15962],{},[19,54151,54152],{},"let age=1",[19,54154,54155],{},"console.log(11 || age++)",[19,54157,54158],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54160,54161],{},"console.log(11 || 22)",[19,54163,54164],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54166,54167],{},"||如果都是假的话，就取最后一个假的值了",[1645,54169,54171],{"id":54170},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54173,54174],{},"显示转换：",[19,54176,54177,54180,54181],{},[887,54178,54179],{},"记忆","： ",[887,54182,54183],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54185,54186],{},"空字符串为假，其他字符串全为真",[19,54188,54189],{},[2992,54190],{"alt":31,"src":54191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54193,54194],{},"隐式转换：",[19,54196,54197],{},[2992,54198],{"alt":31,"src":54199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54201,54202],{},"隐式转换:",[19,54204,54205],{},"null+3=3",[19,54207,54208],{},"undefined+3=NaN",[19,54210,54211],{},"null==undefined 输出true,他两个都当0看",[19,54213,54214],{},"null===undefined 输出false",[19,54216,54217],{},"undefined做任何操作都是NaN",[19,54219,54220],{},"NaN不等于NaN，NaN表示计算错误",[14,54222,54224],{"id":54223},"_210-对象","2.10 对象",[1645,54226,54228],{"id":54227},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54230,54231],{},"对象也是一种数据类型，里边的数据是无序的",[19,54233,54234],{},"对象由属性和方法组成",[19,54236,54237],{},[2992,54238],{"alt":31,"src":54239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54241,54242],{},[2992,54243],{"alt":31,"src":54244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54246,54247],{},[2992,54248],{"alt":31,"src":54249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[1645,54251,54253],{"id":54252},"_2102-对象属性","2.10.2 对象属性",[19,54255,54256],{},[2992,54257],{"alt":31,"src":54258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[256,54260,54261],{},[259,54262,54263],{},"查询对象",[19,54265,54266],{},"对象名.属性 goods.uname",[19,54268,54269],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54271,54272],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54274,54275],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54277,54278],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[256,54280,54281],{"start":54},[259,54282,54283],{},"重新赋值",[19,54285,54286],{},"对象名.属性=新值",[256,54288,54289],{"start":61},[259,54290,54291],{},"增加新数据",[19,54293,54286],{},[256,54295,54296],{"start":80},[259,54297,54298],{},"删除对象中的属性",[19,54300,54301],{},"delete 对象名.属性",[1645,54303,54305],{"id":54304},"_2103-对象方法","2.10.3 对象方法",[19,54307,54308],{},[2992,54309],{"alt":31,"src":54310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54312,54313],{},"后边跟的是匿名函数",[19,54315,54316],{},"对象外面的叫函数；对象内部的叫方法",[19,54318,54319],{},[2992,54320],{"alt":31,"src":54321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[1645,54323,54325],{"id":54324},"_2104-遍历对象","2.10.4 遍历对象",[19,54327,54328],{},"理解为加括号的python字典遍历",[19,54330,54331],{},[2992,54332],{"alt":31,"src":54333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54335,54336],{},"k是字符串类型",[19,54338,54339],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,54341,54343],{"className":51964,"code":54342,"language":51966,"meta":31,"style":31},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[33,54344,54345,54350,54355,54360,54365],{"__ignoreMap":31},[36,54346,54347],{"class":38,"line":39},[36,54348,54349],{"class":50},"   let arr = [1, 2, 3]\n",[36,54351,54352],{"class":38,"line":54},[36,54353,54354],{"class":50},"    for (let k in arr) {\n",[36,54356,54357],{"class":38,"line":61},[36,54358,54359],{"class":50},"      console.log(k)\n",[36,54361,54362],{"class":38,"line":80},[36,54363,54364],{"class":50},"      console.log(arr[k])\n",[36,54366,54367],{"class":38,"line":96},[36,54368,3693],{"class":50},[19,54370,54371],{},[2992,54372],{"alt":31,"src":54373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54375,54376],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54378,54379],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54381,54382],{},"for in 得到的k是属性名",[53144,54384,54385],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,54387,54388],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[1645,54390,54392],{"id":54391},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54394,54395],{},"数组中放对象信息",[26,54397,54401],{"className":54398,"code":54399,"language":54400,"meta":31,"style":31},"language-xml shiki shiki-themes github-light github-dark","\u003Cscript>\n    let students = [\n      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n    ]\n    for (let i = 0; i \u003C students.length; i++) {\n      for (let k in students[i]) {\n        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n        \u002F\u002F输出每个人的名字：\n        \u002F\u002Fconsole.log(students[i].name)\n      }\n    }\n  \u003C\u002Fscript>\n","xml",[33,54402,54403,54411,54416,54421,54426,54431,54436,54441,54446,54451,54456,54461,54466,54470,54474],{"__ignoreMap":31},[36,54404,54405,54407,54409],{"class":38,"line":39},[36,54406,2577],{"class":50},[36,54408,53144],{"class":52631},[36,54410,52638],{"class":50},[36,54412,54413],{"class":38,"line":54},[36,54414,54415],{"class":50},"    let students = [\n",[36,54417,54418],{"class":38,"line":61},[36,54419,54420],{"class":50},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[36,54422,54423],{"class":38,"line":80},[36,54424,54425],{"class":50},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[36,54427,54428],{"class":38,"line":96},[36,54429,54430],{"class":50},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[36,54432,54433],{"class":38,"line":101},[36,54434,54435],{"class":50},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[36,54437,54438],{"class":38,"line":128},[36,54439,54440],{"class":50},"    ]\n",[36,54442,54443],{"class":38,"line":149},[36,54444,54445],{"class":50},"    for (let i = 0; i \u003C students.length; i++) {\n",[36,54447,54448],{"class":38,"line":154},[36,54449,54450],{"class":50},"      for (let k in students[i]) {\n",[36,54452,54453],{"class":38,"line":167},[36,54454,54455],{"class":50},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[36,54457,54458],{"class":38,"line":172},[36,54459,54460],{"class":50},"        \u002F\u002F输出每个人的名字：\n",[36,54462,54463],{"class":38,"line":192},[36,54464,54465],{"class":50},"        \u002F\u002Fconsole.log(students[i].name)\n",[36,54467,54468],{"class":38,"line":211},[36,54469,53729],{"class":50},[36,54471,54472],{"class":38,"line":216},[36,54473,3693],{"class":50},[36,54475,54476,54478,54480],{"class":38,"line":231},[36,54477,53748],{"class":50},[36,54479,53144],{"class":52631},[36,54481,52638],{"class":50},[1645,54483,54485],{"id":54484},"_2106-内置对象","2.10.6 内置对象",[19,54487,54488],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[256,54490,54491],{},[259,54492,54493],{},"数学对象Math",[19,54495,54496],{},[2992,54497],{"alt":31,"src":54498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54500,54501],{},[1906,54502,54505],{"href":54503,"rel":54504},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25195],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54507,54508],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54510,54511],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54513,54514],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54516,54517],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54519,54520],{},"null属于对象数据类型",[256,54522,54523],{"start":54},[259,54524,54525],{},"生成任意范围随机数",[19,54527,54528],{},[2992,54529],{"alt":31,"src":54530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54532,54533],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54535,54536],{},"乘以几就取不到几",[19,54538,54539],{},"取数组中的随机元素：",[19,54541,54542],{},"let arr = ['red', 'green', 'blue']",[19,54544,54545],{},"let random = Math.floor(Math.random() * arr.length)",[19,54547,54548],{},"console.log(arr[random])",[19,54550,54551],{},"这个函数得到的是全闭区间",[19,54553,54554],{},"function getRandom(N, M) {",[19,54556,54557],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54559,2613],{},[19,54561,54562],{},"console.log(getRandom(4, 8))",[1645,54564,54566],{"id":54565},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54568,54569],{},[2992,54570],{"alt":31,"src":54571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54573,54574],{},[2992,54575],{"alt":31,"src":54576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54578,54579],{},[2992,54580],{"alt":31,"src":54581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54583,54584],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54586,54587],{},[2992,54588],{"alt":31,"src":54589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54591,54592],{},[2992,54593],{"alt":31,"src":54594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54596,54597],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54599,54600],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54602,54603],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1592,54605,54606],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":54608},[54609,54617,54618,54619,54620,54621,54628,54632,54638,54647],{"id":51799,"depth":54,"text":51800,"children":54610},[54611,54612,54613,54614,54615,54616],{"id":51803,"depth":61,"text":51804},{"id":51820,"depth":61,"text":51821},{"id":51860,"depth":61,"text":51861},{"id":51872,"depth":61,"text":51873},{"id":51881,"depth":61,"text":51882},{"id":51929,"depth":61,"text":51930},{"id":51939,"depth":54,"text":51940},{"id":52027,"depth":54,"text":52028},{"id":52050,"depth":54,"text":52051},{"id":52062,"depth":54,"text":52063},{"id":52249,"depth":54,"text":52250,"children":54622},[54623,54624,54625,54626,54627],{"id":52253,"depth":61,"text":52254},{"id":52262,"depth":61,"text":52263},{"id":52290,"depth":61,"text":52291},{"id":52326,"depth":61,"text":52327},{"id":52351,"depth":61,"text":52352},{"id":52363,"depth":54,"text":52364,"children":54629},[54630,54631],{"id":52384,"depth":61,"text":52385},{"id":52478,"depth":61,"text":52479},{"id":52536,"depth":54,"text":52537,"children":54633},[54634,54635,54636,54637],{"id":52540,"depth":61,"text":52541},{"id":52564,"depth":61,"text":52565},{"id":52617,"depth":61,"text":52618},{"id":53428,"depth":61,"text":53429},{"id":53814,"depth":54,"text":53815,"children":54639},[54640,54641,54642,54643,54644,54645,54646],{"id":53832,"depth":61,"text":53833},{"id":53869,"depth":61,"text":53870},{"id":53900,"depth":61,"text":53901},{"id":53933,"depth":61,"text":53934},{"id":54014,"depth":61,"text":54015},{"id":54112,"depth":61,"text":54113},{"id":54170,"depth":61,"text":54171},{"id":54223,"depth":54,"text":54224,"children":54648},[54649,54650,54651,54652,54653,54654,54655],{"id":54227,"depth":61,"text":54228},{"id":54252,"depth":61,"text":54253},{"id":54304,"depth":61,"text":54305},{"id":54324,"depth":61,"text":54325},{"id":54391,"depth":61,"text":54392},{"id":54484,"depth":61,"text":54485},{"id":54565,"depth":61,"text":54566},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51791,"description":24706},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54662,"title":54663,"body":54664,"description":24706,"extension":1603,"meta":78004,"navigation":57,"path":78005,"seo":78006,"stem":78007,"__hash__":78008},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54665,"toc":77944},[54666,54669,54672,54675,54680,54683,54686,54689,54693,54697,54703,54708,54716,54723,54726,54730,54735,54740,54745,54748,54751,54762,54765,54769,54772,54775,54780,54785,54790,54793,54796,54888,54891,54896,54899,54904,54907,54910,54915,54918,54923,54927,54930,54944,54948,54953,54956,54959,54963,54968,54971,54975,54979,54984,54988,54993,54996,54999,55002,55005,55008,55011,55016,55021,55049,55052,55055,55058,55063,55066,55069,55072,55075,55079,55108,55112,55117,55122,55125,55128,55131,55136,55251,55256,55261,55422,55427,55430,55434,55439,55444,55447,55450,55453,55456,55459,55462,55465,55468,55471,55474,55477,55480,55483,55486,55488,55491,55494,55497,55502,55506,55903,55906,55912,55916,55921,57203,57208,57211,57214,57217,57222,58418,58422,58428,58433,58436,58441,58446,58450,58454,58459,58462,58467,58470,58473,58477,59385,59388,59392,59613,59616,59619,59622,59848,59851,60075,60078,60082,60087,60090,60093,60321,60324,60357,60360,60364,60369,60373,60376,60379,60382,60385,60388,60391,60394,60399,61679,61683,61686,62779,62783,62786,62789,62792,62795,62799,62802,62805,62807,62815,64296,64300,64303,64306,64309,64518,64521,64525,64529,64534,64539,64542,64545,64550,64554,64559,64562,64671,64675,64680,64685,64688,64691,64695,64700,64705,64710,64713,64716,64727,64730,64735,64740,64743,64746,64819,64823,64828,64831,64833,64844,64848,64853,66179,66182,66185,66188,66190,66193,66196,66199,66202,66205,66208,66211,66214,66217,66220,66223,66226,66228,66230,66233,66237,67331,67334,67337,67353,67367,67370,67375,67381,67386,67390,67394,67399,67403,67408,67850,67855,67858,67862,67867,67870,67873,67877,67882,67886,67891,67896,67900,67905,67910,67913,67918,67923,67927,67932,67937,68041,68044,68048,68053,68419,68422,68425,68428,68431,68434,68437,68440,68443,69739,69743,69748,69753,69756,69759,69762,69765,69767,69772,69777,69780,69784,69789,69794,69799,69802,69805,69808,69811,69814,69819,69822,69826,69831,69836,69840,69845,69848,69853,69856,69859,69862,69865,69868,69873,69876,69879,69882,69885,69889,69894,69897,69901,69906,69909,69912,69916,69945,69948,69952,69956,69961,69965,69970,69973,69976,69979,69982,69985,69988,69991,69994,69997,70000,70003,70006,70009,70012,70016,70021,70026,70029,70033,70037,70042,70045,70049,70052,70055,70060,70065,70070,70075,70080,70083,70086,70091,70096,70100,70105,70108,70113,70116,70119,70122,70125,70130,70133,70142,70146,70151,70154,70157,70161,70164,70169,70173,70176,70182,70188,70192,70218,70221,71782,71785,72281,72284,72289,72294,72299,72303,72308,72313,72318,72322,72327,72330,72333,72336,72339,72343,72346,72351,72354,72359,72363,72368,72371,72376,72381,72386,72389,72392,72397,72402,72405,72408,72412,72415,72420,72423,72428,72431,72436,72441,72446,72449,72454,72519,72522,72533,72537,72542,72714,72718,72723,72726,72729,72732,72736,72747,72751,72754,72759,72764,72767,72770,72773,72776,72779,72781,72784,72787,72790,72795,72798,72803,72806,72810,72813,72816,72830,72834,72837,72892,72897,72900,72903,72908,72911,72915,72920,73050,73054,73059,73064,73145,73150,73154,73157,73162,73167,73173,73176,73179,73182,73186,73191,73194,73205,73209,73226,76273,76277,76280,76283,76286,76307,76311,76314,76322,76325,76330,76333,76336,76341,76346,76350,76371,76375,76380,76383,76386,76389,76392,76396,76401,76404,76408,76413,76416,76421,76424,76429,76432,76437,77640,77644,77649,77652,77657,77941],[10,54667,54663],{"id":54668},"_3web-apis",[19,54670,54671],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54673,54674],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54676,54677],{},[2992,54678],{"alt":31,"src":54679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54681,54682],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54684,54685],{},"建议数组和对象使用 const 来声明",[19,54687,54688],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54690,54692],{"id":54691},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[1645,54694,54696],{"id":54695},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54698,54699,54702],{},[33,54700,54701],{},"document"," = HTML 文件解析后的对象化表示；",[19,54704,54705,54707],{},[33,54706,54701],{}," ≠ HTML 文件本身",[19,54709,54710,54715],{},[887,54711,54712],{},[33,54713,54714],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54717,54718,54722],{},[887,54719,54720],{},[33,54721,54701],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54724,54725],{},"document实际上为window.document的简写",[1645,54727,54729],{"id":54728},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54731,54732],{},[2992,54733],{"alt":31,"src":54734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54736,54737],{},[2992,54738],{"alt":31,"src":54739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54741,54742],{},[2992,54743],{"alt":31,"src":54744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54746,54747],{},"console.dir()",[19,54749,54750],{},"dir用来打印对象",[2674,54752,54753,54756,54759],{},[259,54754,54755],{},"任何一个标签，都是一个对象",[259,54757,54758],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[259,54760,54761],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54763,54764],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[1645,54766,54768],{"id":54767},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54770,54771],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54773,54774],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54776,54777],{},[887,54778,54779],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[256,54781,54782],{},[259,54783,54784],{},"利用CSS选择器来获取标签元素",[19,54786,54787],{},[2992,54788],{"alt":31,"src":54789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54791,54792],{},"里边的选择器必须必须加引号！！！",[19,54794,54795],{},"只选择第一个元素",[26,54797,54799],{"className":54398,"code":54798,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cdiv class=\"box\">123\u003C\u002Fdiv>\n  \u003Cdiv class=\"box\">456\u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1.获取匹配的第一个元素\n    const box = document.querySelector('div')\n    console.dir(box)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,54800,54801,54809,54830,54849,54857,54862,54867,54872,54880],{"__ignoreMap":31},[36,54802,54803,54805,54807],{"class":38,"line":39},[36,54804,2577],{"class":50},[36,54806,53131],{"class":52631},[36,54808,52638],{"class":50},[36,54810,54811,54813,54815,54818,54820,54823,54826,54828],{"class":38,"line":54},[36,54812,53475],{"class":50},[36,54814,52942],{"class":52631},[36,54816,54817],{"class":46}," class",[36,54819,70],{"class":50},[36,54821,54822],{"class":110},"\"box\"",[36,54824,54825],{"class":50},">123\u003C\u002F",[36,54827,52942],{"class":52631},[36,54829,52638],{"class":50},[36,54831,54832,54834,54836,54838,54840,54842,54845,54847],{"class":38,"line":61},[36,54833,53475],{"class":50},[36,54835,52942],{"class":52631},[36,54837,54817],{"class":46},[36,54839,70],{"class":50},[36,54841,54822],{"class":110},[36,54843,54844],{"class":50},">456\u003C\u002F",[36,54846,52942],{"class":52631},[36,54848,52638],{"class":50},[36,54850,54851,54853,54855],{"class":38,"line":80},[36,54852,53475],{"class":50},[36,54854,53144],{"class":52631},[36,54856,52638],{"class":50},[36,54858,54859],{"class":38,"line":96},[36,54860,54861],{"class":50},"    \u002F\u002F 1.获取匹配的第一个元素\n",[36,54863,54864],{"class":38,"line":101},[36,54865,54866],{"class":50},"    const box = document.querySelector('div')\n",[36,54868,54869],{"class":38,"line":128},[36,54870,54871],{"class":50},"    console.dir(box)\n",[36,54873,54874,54876,54878],{"class":38,"line":149},[36,54875,53748],{"class":50},[36,54877,53144],{"class":52631},[36,54879,52638],{"class":50},[36,54881,54882,54884,54886],{"class":38,"line":154},[36,54883,53116],{"class":50},[36,54885,53131],{"class":52631},[36,54887,52638],{"class":50},[19,54889,54890],{},"只选123，不选456",[19,54892,54893],{},[2992,54894],{"alt":31,"src":54895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54897,54898],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54900,54901],{},[2992,54902],{"alt":31,"src":54903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54905,54906],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54908,54909],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[256,54911,54912],{"start":54},[259,54913,54914],{},"其他方法来获取标签元素",[19,54916,54917],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54919,54920],{},[2992,54921],{"alt":31,"src":54922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[1645,54924,54926],{"id":54925},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54928,54929],{},"设置修改DOM元素内容有两种方式：",[2674,54931,54932,54935,54938,54941],{},[259,54933,54934],{},"元素.innerText=''",[259,54936,54937],{},"元素.innerHTML=''",[259,54939,54940],{},"不写字符串输出数字也是可以的",[259,54942,54943],{},"元素.innerHtml=1",[23327,54945,54947],{"id":54946},"_3131-innertext","3.1.3.1 innerText",[19,54949,54950],{},[2992,54951],{"alt":31,"src":54952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54954,54955],{},"思路：实现了修改盒子中的内容！",[19,54957,54958],{},"它只显示纯文本，不解析标签",[23327,54960,54962],{"id":54961},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54964,54965],{},[2992,54966],{"alt":31,"src":54967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54969,54970],{},"相比于innerText，他的强大之处在于可以解析标签",[1645,54972,54974],{"id":54973},"_314-操作元素属性","3.1.4 操作元素属性",[23327,54976,54978],{"id":54977},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54980,54981],{},[2992,54982],{"alt":31,"src":54983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23327,54985,54987],{"id":54986},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54989,54990],{},[2992,54991],{"alt":31,"src":54992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54994,54995],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54997,54998],{},"div.style.backgroundColor = 'hotpink'",[19,55000,55001],{},"如果按照css的写法，-表示减，就会出错",[19,55003,55004],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55006,55007],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55009,55010],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55012,55013],{},[2992,55014],{"alt":31,"src":55015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55017,55018],{},[2992,55019],{"alt":31,"src":55020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[256,55022,55023,55026,55029,55032,55035,55038],{},[259,55024,55025],{},"className这个方式就是修改很多样式的时候来使用的！",[259,55027,55028],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[259,55030,55031],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[259,55033,55034],{},"className为属性名，如果还用class的话就导致与关键字冲突",[259,55036,55037],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[259,55039,55040,55041,55046],{},"解析标签的时候就变为了",[52942,55042],{"className":55043},[55044,55045],"nav","box",[55047,55048],"br",{},[19,55050,55051],{},"例子：",[52942,55053],{"className":55054},[55044],[53144,55056,55057],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55059,55060],{},[2992,55061],{"alt":31,"src":55062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55064,55065],{},"追加和删除类名用classList",[19,55067,55068],{},"常用于类似于开关的操作",[19,55070,55071],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55073,55074],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23327,55076,55078],{"id":55077},"_3143-牢记点","3.1.4.3 牢记点",[256,55080,55081,55084,55087,55090,55093,55096,55099,55102,55105],{},[259,55082,55083],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[259,55085,55086],{},"使用style属性操作css时不要忘记引号",[259,55088,55089],{},"使用className或者classList时也不要忘记引号",[259,55091,55092],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[259,55094,55095],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[259,55097,55098],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[259,55100,55101],{},"若： let arr=['1','2',3] arr[0]=1",[259,55103,55104],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[259,55106,55107],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[1645,55109,55111],{"id":55110},"_315-操作表单元素","3.1.5 操作表单元素",[256,55113,55114],{},[259,55115,55116],{},"天生的属性",[19,55118,55119],{},[2992,55120],{"alt":31,"src":55121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55123,55124],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55126,55127],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55129,55130],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55132,55133],{},[2992,55134],{"alt":31,"src":55135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,55137,55139],{"className":51964,"code":55138,"language":51966,"meta":31,"style":31},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n\u003Cinput type=\"checkbox\" name=\"\" id=\"\" checked>\n不选的话：\nconst input = document.querySelector('input')\ninput.checked=false\n这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n\n禁用按钮：\n它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n\u003Cbutton disabled>点击\u003C\u002Fbutton>\n\u003Cbutton>点击\u003C\u002Fbutton>\nconst bt = document.querySelector('button')\nbt.disabled = false\n",[33,55140,55141,55146,55178,55183,55188,55193,55198,55202,55207,55212,55229,55241,55246],{"__ignoreMap":31},[36,55142,55143],{"class":38,"line":39},[36,55144,55145],{"class":50},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[36,55147,55148,55150,55153,55156,55158,55161,55163,55165,55167,55169,55171,55173,55176],{"class":38,"line":54},[36,55149,2577],{"class":50},[36,55151,55152],{"class":52631},"input",[36,55154,55155],{"class":46}," type",[36,55157,70],{"class":50},[36,55159,55160],{"class":110},"\"checkbox\"",[36,55162,16249],{"class":46},[36,55164,70],{"class":50},[36,55166,9126],{"class":110},[36,55168,16288],{"class":46},[36,55170,70],{"class":50},[36,55172,9126],{"class":110},[36,55174,55175],{"class":46}," checked",[36,55177,52638],{"class":50},[36,55179,55180],{"class":38,"line":61},[36,55181,55182],{"class":50},"不选的话：\n",[36,55184,55185],{"class":38,"line":80},[36,55186,55187],{"class":50},"const input = document.querySelector('input')\n",[36,55189,55190],{"class":38,"line":96},[36,55191,55192],{"class":50},"input.checked=false\n",[36,55194,55195],{"class":38,"line":101},[36,55196,55197],{"class":50},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[36,55199,55200],{"class":38,"line":128},[36,55201,58],{"emptyLinePlaceholder":57},[36,55203,55204],{"class":38,"line":149},[36,55205,55206],{"class":50},"禁用按钮：\n",[36,55208,55209],{"class":38,"line":154},[36,55210,55211],{"class":50},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[36,55213,55214,55216,55219,55222,55225,55227],{"class":38,"line":167},[36,55215,2577],{"class":50},[36,55217,55218],{"class":52631},"button",[36,55220,55221],{"class":46}," disabled",[36,55223,55224],{"class":50},">点击\u003C\u002F",[36,55226,55218],{"class":52631},[36,55228,52638],{"class":50},[36,55230,55231,55233,55235,55237,55239],{"class":38,"line":172},[36,55232,2577],{"class":50},[36,55234,55218],{"class":52631},[36,55236,55224],{"class":50},[36,55238,55218],{"class":52631},[36,55240,52638],{"class":50},[36,55242,55243],{"class":38,"line":192},[36,55244,55245],{"class":50},"const bt = document.querySelector('button')\n",[36,55247,55248],{"class":38,"line":211},[36,55249,55250],{"class":50},"bt.disabled = false\n",[256,55252,55253],{"start":54},[259,55254,55255],{},"自定义属性",[19,55257,55258],{},[2992,55259],{"alt":31,"src":55260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,55262,55264],{"className":54398,"code":55263,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cdiv data-id=\"1\" data-spm=\"我不知道\">1\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"2\">2\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"3\">3\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"4\">4\u003C\u002Fdiv>\n  \u003Cdiv data-id=\"5\">5\u003C\u002Fdiv>\n  \u003Cscript>\n    const one = document.querySelector('div')\n    console.log(one.dataset)\n    console.log(one.dataset.id)\n    console.log(one.dataset.spm)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,55265,55266,55274,55302,55321,55340,55359,55378,55386,55391,55396,55401,55406,55414],{"__ignoreMap":31},[36,55267,55268,55270,55272],{"class":38,"line":39},[36,55269,2577],{"class":50},[36,55271,53131],{"class":52631},[36,55273,52638],{"class":50},[36,55275,55276,55278,55280,55283,55285,55287,55290,55292,55295,55298,55300],{"class":38,"line":54},[36,55277,53475],{"class":50},[36,55279,52942],{"class":52631},[36,55281,55282],{"class":46}," data-id",[36,55284,70],{"class":50},[36,55286,5169],{"class":110},[36,55288,55289],{"class":46}," data-spm",[36,55291,70],{"class":50},[36,55293,55294],{"class":110},"\"我不知道\"",[36,55296,55297],{"class":50},">1\u003C\u002F",[36,55299,52942],{"class":52631},[36,55301,52638],{"class":50},[36,55303,55304,55306,55308,55310,55312,55314,55317,55319],{"class":38,"line":61},[36,55305,53475],{"class":50},[36,55307,52942],{"class":52631},[36,55309,55282],{"class":46},[36,55311,70],{"class":50},[36,55313,5192],{"class":110},[36,55315,55316],{"class":50},">2\u003C\u002F",[36,55318,52942],{"class":52631},[36,55320,52638],{"class":50},[36,55322,55323,55325,55327,55329,55331,55333,55336,55338],{"class":38,"line":80},[36,55324,53475],{"class":50},[36,55326,52942],{"class":52631},[36,55328,55282],{"class":46},[36,55330,70],{"class":50},[36,55332,5205],{"class":110},[36,55334,55335],{"class":50},">3\u003C\u002F",[36,55337,52942],{"class":52631},[36,55339,52638],{"class":50},[36,55341,55342,55344,55346,55348,55350,55352,55355,55357],{"class":38,"line":96},[36,55343,53475],{"class":50},[36,55345,52942],{"class":52631},[36,55347,55282],{"class":46},[36,55349,70],{"class":50},[36,55351,5218],{"class":110},[36,55353,55354],{"class":50},">4\u003C\u002F",[36,55356,52942],{"class":52631},[36,55358,52638],{"class":50},[36,55360,55361,55363,55365,55367,55369,55371,55374,55376],{"class":38,"line":101},[36,55362,53475],{"class":50},[36,55364,52942],{"class":52631},[36,55366,55282],{"class":46},[36,55368,70],{"class":50},[36,55370,5239],{"class":110},[36,55372,55373],{"class":50},">5\u003C\u002F",[36,55375,52942],{"class":52631},[36,55377,52638],{"class":50},[36,55379,55380,55382,55384],{"class":38,"line":128},[36,55381,53475],{"class":50},[36,55383,53144],{"class":52631},[36,55385,52638],{"class":50},[36,55387,55388],{"class":38,"line":149},[36,55389,55390],{"class":50},"    const one = document.querySelector('div')\n",[36,55392,55393],{"class":38,"line":154},[36,55394,55395],{"class":50},"    console.log(one.dataset)\n",[36,55397,55398],{"class":38,"line":167},[36,55399,55400],{"class":50},"    console.log(one.dataset.id)\n",[36,55402,55403],{"class":38,"line":172},[36,55404,55405],{"class":50},"    console.log(one.dataset.spm)\n",[36,55407,55408,55410,55412],{"class":38,"line":192},[36,55409,53748],{"class":50},[36,55411,53144],{"class":52631},[36,55413,52638],{"class":50},[36,55415,55416,55418,55420],{"class":38,"line":211},[36,55417,53116],{"class":50},[36,55419,53131],{"class":52631},[36,55421,52638],{"class":50},[19,55423,55424],{},[2992,55425],{"alt":31,"src":55426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55428,55429],{},"document.querySelector选择的是第一个对象（元素）",[1645,55431,55433],{"id":55432},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55435,55436],{},[2992,55437],{"alt":31,"src":55438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55440,55441],{},[2992,55442],{"alt":31,"src":55443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55445,55446],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53144,55448,55449],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55451,55452],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53144,55454,55455],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,55457,55458],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55460,55461],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55463,55464],{},"单位为毫秒！！！",[19,55466,55467],{},"可以搭配匿名函数来用！！！",[19,55469,55470],{},"setInterval(function () {",[19,55472,55473],{},"alert('两秒执行一次')",[19,55475,55476],{},"}, 2000)",[19,55478,55479],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55481,55482],{},"function fn() {",[19,55484,55485],{},"document.write(1)",[19,55487,2613],{},[19,55489,55490],{},"setInterval(fn, 1000)",[19,55492,55493],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55495,55496],{},"setInterval('fn()', 1000)",[19,55498,55499],{},[2992,55500],{"alt":31,"src":55501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23327,55503,55505],{"id":55504},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,55507,55509],{"className":51964,"code":55508,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctextarea name=\"\" id=\"\" cols=\"30\" rows=\"10\">\n        用户注册协议\n        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n    \u003C\u002Ftextarea>\n  \u003Cbr>\n  \u003Cbutton class=\"btn\" disabled>我已经阅读用户协议(5)\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1. 获取元素\n    const btn = document.querySelector('.btn')\n    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n    \u002F\u002F 2. 倒计时\n    let i = 5\n    \u002F\u002F 2.1 开启定时器\n    let n = setInterval(function () {\n      i--\n      btn.innerHTML = `我已经阅读用户协议(${i})`\n      if (i === 0) {\n        clearInterval(n)  \u002F\u002F 关闭定时器\n        \u002F\u002F 定时器停了，我就可以开按钮\n        btn.disabled = false\n        btn.innerHTML = '同意'\n      }\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,55510,55511,55521,55535,55539,55547,55561,55581,55593,55601,55605,55613,55650,55655,55660,55665,55673,55681,55703,55711,55716,55738,55743,55748,55759,55764,55784,55792,55807,55822,55833,55838,55848,55858,55862,55871,55875,55883,55891,55895],{"__ignoreMap":31},[36,55512,55513,55515,55517,55519],{"class":38,"line":39},[36,55514,52628],{"class":50},[36,55516,52632],{"class":52631},[36,55518,52635],{"class":46},[36,55520,52638],{"class":50},[36,55522,55523,55525,55527,55529,55531,55533],{"class":38,"line":54},[36,55524,2577],{"class":50},[36,55526,51966],{"class":52631},[36,55528,52647],{"class":46},[36,55530,70],{"class":50},[36,55532,52652],{"class":110},[36,55534,52638],{"class":50},[36,55536,55537],{"class":38,"line":61},[36,55538,58],{"emptyLinePlaceholder":57},[36,55540,55541,55543,55545],{"class":38,"line":80},[36,55542,2577],{"class":50},[36,55544,52665],{"class":52631},[36,55546,52638],{"class":50},[36,55548,55549,55551,55553,55555,55557,55559],{"class":38,"line":96},[36,55550,53475],{"class":50},[36,55552,52675],{"class":52631},[36,55554,52678],{"class":46},[36,55556,70],{"class":50},[36,55558,52683],{"class":110},[36,55560,52638],{"class":50},[36,55562,55563,55565,55567,55569,55571,55573,55575,55577,55579],{"class":38,"line":101},[36,55564,53475],{"class":50},[36,55566,52675],{"class":52631},[36,55568,16249],{"class":46},[36,55570,70],{"class":50},[36,55572,52722],{"class":110},[36,55574,52702],{"class":46},[36,55576,70],{"class":50},[36,55578,52729],{"class":110},[36,55580,52638],{"class":50},[36,55582,55583,55585,55587,55589,55591],{"class":38,"line":128},[36,55584,53475],{"class":50},[36,55586,52738],{"class":52631},[36,55588,52741],{"class":50},[36,55590,52738],{"class":52631},[36,55592,52638],{"class":50},[36,55594,55595,55597,55599],{"class":38,"line":149},[36,55596,53116],{"class":50},[36,55598,52665],{"class":52631},[36,55600,52638],{"class":50},[36,55602,55603],{"class":38,"line":154},[36,55604,58],{"emptyLinePlaceholder":57},[36,55606,55607,55609,55611],{"class":38,"line":167},[36,55608,2577],{"class":50},[36,55610,53131],{"class":52631},[36,55612,52638],{"class":50},[36,55614,55615,55617,55620,55622,55624,55626,55628,55630,55632,55635,55637,55640,55643,55645,55648],{"class":38,"line":172},[36,55616,53475],{"class":50},[36,55618,55619],{"class":52631},"textarea",[36,55621,16249],{"class":46},[36,55623,70],{"class":50},[36,55625,9126],{"class":110},[36,55627,16288],{"class":46},[36,55629,70],{"class":50},[36,55631,9126],{"class":110},[36,55633,55634],{"class":46}," cols",[36,55636,70],{"class":50},[36,55638,55639],{"class":110},"\"30\"",[36,55641,55642],{"class":46}," rows",[36,55644,70],{"class":50},[36,55646,55647],{"class":110},"\"10\"",[36,55649,52638],{"class":50},[36,55651,55652],{"class":38,"line":192},[36,55653,55654],{"class":50},"        用户注册协议\n",[36,55656,55657],{"class":38,"line":211},[36,55658,55659],{"class":50},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[36,55661,55662],{"class":38,"line":216},[36,55663,55664],{"class":50},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[36,55666,55667,55669,55671],{"class":38,"line":231},[36,55668,53107],{"class":50},[36,55670,55619],{"class":52631},[36,55672,52638],{"class":50},[36,55674,55675,55677,55679],{"class":38,"line":236},[36,55676,53475],{"class":50},[36,55678,55047],{"class":52631},[36,55680,52638],{"class":50},[36,55682,55683,55685,55687,55689,55691,55694,55696,55699,55701],{"class":38,"line":247},[36,55684,53475],{"class":50},[36,55686,55218],{"class":52631},[36,55688,54817],{"class":46},[36,55690,70],{"class":50},[36,55692,55693],{"class":110},"\"btn\"",[36,55695,55221],{"class":46},[36,55697,55698],{"class":50},">我已经阅读用户协议(5)\u003C\u002F",[36,55700,55218],{"class":52631},[36,55702,52638],{"class":50},[36,55704,55705,55707,55709],{"class":38,"line":637},[36,55706,53475],{"class":50},[36,55708,53144],{"class":52631},[36,55710,52638],{"class":50},[36,55712,55713],{"class":38,"line":646},[36,55714,55715],{"class":124},"    \u002F\u002F 1. 获取元素\n",[36,55717,55718,55720,55723,55725,55728,55731,55733,55736],{"class":38,"line":655},[36,55719,1498],{"class":42},[36,55721,55722],{"class":73}," btn",[36,55724,14893],{"class":42},[36,55726,55727],{"class":50}," document.",[36,55729,55730],{"class":46},"querySelector",[36,55732,222],{"class":50},[36,55734,55735],{"class":110},"'.btn'",[36,55737,1680],{"class":50},[36,55739,55740],{"class":38,"line":660},[36,55741,55742],{"class":124},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[36,55744,55745],{"class":38,"line":665},[36,55746,55747],{"class":124},"    \u002F\u002F 2. 倒计时\n",[36,55749,55750,55752,55754,55756],{"class":38,"line":674},[36,55751,53550],{"class":42},[36,55753,10906],{"class":50},[36,55755,70],{"class":42},[36,55757,55758],{"class":73}," 5\n",[36,55760,55761],{"class":38,"line":679},[36,55762,55763],{"class":124},"    \u002F\u002F 2.1 开启定时器\n",[36,55765,55766,55768,55771,55773,55776,55778,55781],{"class":38,"line":692},[36,55767,53550],{"class":42},[36,55769,55770],{"class":50}," n ",[36,55772,70],{"class":42},[36,55774,55775],{"class":46}," setInterval",[36,55777,222],{"class":50},[36,55779,55780],{"class":42},"function",[36,55782,55783],{"class":50}," () {\n",[36,55785,55786,55789],{"class":38,"line":705},[36,55787,55788],{"class":50},"      i",[36,55790,55791],{"class":42},"--\n",[36,55793,55794,55797,55799,55802,55804],{"class":38,"line":710},[36,55795,55796],{"class":50},"      btn.innerHTML ",[36,55798,70],{"class":42},[36,55800,55801],{"class":110}," `我已经阅读用户协议(${",[36,55803,2108],{"class":50},[36,55805,55806],{"class":110},"})`\n",[36,55808,55809,55812,55815,55818,55820],{"class":38,"line":722},[36,55810,55811],{"class":42},"      if",[36,55813,55814],{"class":50}," (i ",[36,55816,55817],{"class":42},"===",[36,55819,242],{"class":73},[36,55821,485],{"class":50},[36,55823,55824,55827,55830],{"class":38,"line":750},[36,55825,55826],{"class":46},"        clearInterval",[36,55828,55829],{"class":50},"(n)  ",[36,55831,55832],{"class":124},"\u002F\u002F 关闭定时器\n",[36,55834,55835],{"class":38,"line":755},[36,55836,55837],{"class":124},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[36,55839,55840,55843,55845],{"class":38,"line":777},[36,55841,55842],{"class":50},"        btn.disabled ",[36,55844,70],{"class":42},[36,55846,55847],{"class":73}," false\n",[36,55849,55850,55853,55855],{"class":38,"line":802},[36,55851,55852],{"class":50},"        btn.innerHTML ",[36,55854,70],{"class":42},[36,55856,55857],{"class":110}," '同意'\n",[36,55859,55860],{"class":38,"line":807},[36,55861,53729],{"class":50},[36,55863,55864,55867,55869],{"class":38,"line":818},[36,55865,55866],{"class":50},"    }, ",[36,55868,7889],{"class":73},[36,55870,1680],{"class":50},[36,55872,55873],{"class":38,"line":843},[36,55874,58],{"emptyLinePlaceholder":57},[36,55876,55877,55879,55881],{"class":38,"line":848},[36,55878,53748],{"class":50},[36,55880,53144],{"class":52631},[36,55882,52638],{"class":50},[36,55884,55885,55887,55889],{"class":38,"line":859},[36,55886,53116],{"class":50},[36,55888,53131],{"class":52631},[36,55890,52638],{"class":50},[36,55892,55893],{"class":38,"line":864},[36,55894,58],{"emptyLinePlaceholder":57},[36,55896,55897,55899,55901],{"class":38,"line":873},[36,55898,53116],{"class":50},[36,55900,51966],{"class":52631},[36,55902,52638],{"class":50},[19,55904,55905],{},"不要一直想着用死循环,避免死循环",[19,55907,55908,55911],{},[33,55909,55910],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23327,55913,55915],{"id":55914},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[256,55917,55918],{},[259,55919,55920],{},"法1",[26,55922,55924],{"className":51964,"code":55923,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const arrImage = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const color = document.querySelector('.slider-footer')\n    const lis = document.querySelectorAll('.slider-footer ul li')\n    let i = 1\n    let timer = setInterval(function () {\n      img.src = arrImage[i].url\n      p.innerHTML = arrImage[i].title\n      color.style.backgroundColor = arrImage[i].color\n      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n      \u002F\u002F li.classList.add('activate')\n      \u002F\u002F lis[i + 1].classList.add('activate')\n      \u002F\u002F lis[i].classList.remove('activate')\n      document.querySelector('.activate')?.classList.toggle('activate')\n      lis[i].classList.add('activate')\n\n      i = (i + 1) % arrImage.length\n\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,55925,55926,55936,55950,55954,55962,55976,55996,56008,56016,56022,56033,56044,56048,56052,56059,56071,56075,56079,56086,56098,56112,56125,56139,56143,56147,56154,56165,56176,56187,56199,56211,56223,56227,56231,56239,56249,56262,56274,56287,56291,56295,56302,56312,56324,56336,56347,56358,56368,56380,56392,56396,56400,56409,56421,56433,56461,56474,56478,56482,56489,56500,56504,56512,56520,56524,56532,56546,56561,56585,56593,56608,56621,56629,56650,56662,56674,56686,56698,56710,56722,56734,56743,56751,56759,56767,56779,56802,56821,56840,56859,56878,56897,56916,56936,56940,56960,56979,56999,57020,57031,57048,57058,57068,57078,57083,57088,57093,57098,57123,57136,57140,57163,57167,57175,57183,57191,57195],{"__ignoreMap":31},[36,55927,55928,55930,55932,55934],{"class":38,"line":39},[36,55929,52628],{"class":50},[36,55931,52632],{"class":52631},[36,55933,52635],{"class":46},[36,55935,52638],{"class":50},[36,55937,55938,55940,55942,55944,55946,55948],{"class":38,"line":54},[36,55939,2577],{"class":50},[36,55941,51966],{"class":52631},[36,55943,52647],{"class":46},[36,55945,70],{"class":50},[36,55947,52652],{"class":110},[36,55949,52638],{"class":50},[36,55951,55952],{"class":38,"line":61},[36,55953,58],{"emptyLinePlaceholder":57},[36,55955,55956,55958,55960],{"class":38,"line":80},[36,55957,2577],{"class":50},[36,55959,52665],{"class":52631},[36,55961,52638],{"class":50},[36,55963,55964,55966,55968,55970,55972,55974],{"class":38,"line":96},[36,55965,53475],{"class":50},[36,55967,52675],{"class":52631},[36,55969,52678],{"class":46},[36,55971,70],{"class":50},[36,55973,52683],{"class":110},[36,55975,52638],{"class":50},[36,55977,55978,55980,55982,55984,55986,55988,55990,55992,55994],{"class":38,"line":101},[36,55979,53475],{"class":50},[36,55981,52675],{"class":52631},[36,55983,16249],{"class":46},[36,55985,70],{"class":50},[36,55987,52722],{"class":110},[36,55989,52702],{"class":46},[36,55991,70],{"class":50},[36,55993,52729],{"class":110},[36,55995,52638],{"class":50},[36,55997,55998,56000,56002,56004,56006],{"class":38,"line":128},[36,55999,53475],{"class":50},[36,56001,52738],{"class":52631},[36,56003,52741],{"class":50},[36,56005,52738],{"class":52631},[36,56007,52638],{"class":50},[36,56009,56010,56012,56014],{"class":38,"line":149},[36,56011,53475],{"class":50},[36,56013,1592],{"class":52631},[36,56015,52638],{"class":50},[36,56017,56018,56020],{"class":38,"line":154},[36,56019,569],{"class":52631},[36,56021,16901],{"class":50},[36,56023,56024,56027,56029,56031],{"class":38,"line":167},[36,56025,56026],{"class":73},"      padding",[36,56028,52768],{"class":50},[36,56030,1859],{"class":73},[36,56032,77],{"class":50},[36,56034,56035,56038,56040,56042],{"class":38,"line":172},[36,56036,56037],{"class":73},"      margin",[36,56039,52768],{"class":50},[36,56041,1859],{"class":73},[36,56043,77],{"class":50},[36,56045,56046],{"class":38,"line":192},[36,56047,3693],{"class":50},[36,56049,56050],{"class":38,"line":211},[36,56051,58],{"emptyLinePlaceholder":57},[36,56053,56054,56057],{"class":38,"line":216},[36,56055,56056],{"class":52631},"    li",[36,56058,16901],{"class":50},[36,56060,56061,56064,56066,56069],{"class":38,"line":231},[36,56062,56063],{"class":73},"      list-style",[36,56065,52768],{"class":50},[36,56067,56068],{"class":73},"none",[36,56070,77],{"class":50},[36,56072,56073],{"class":38,"line":236},[36,56074,3693],{"class":50},[36,56076,56077],{"class":38,"line":247},[36,56078,58],{"emptyLinePlaceholder":57},[36,56080,56081,56084],{"class":38,"line":637},[36,56082,56083],{"class":46},"    .box",[36,56085,16901],{"class":50},[36,56087,56088,56091,56093,56096],{"class":38,"line":646},[36,56089,56090],{"class":73},"      position",[36,56092,52768],{"class":50},[36,56094,56095],{"class":73},"relative",[36,56097,77],{"class":50},[36,56099,56100,56103,56105,56108,56110],{"class":38,"line":655},[36,56101,56102],{"class":73},"      width",[36,56104,52768],{"class":50},[36,56106,56107],{"class":73},"976",[36,56109,52823],{"class":42},[36,56111,77],{"class":50},[36,56113,56114,56117,56119,56121,56123],{"class":38,"line":660},[36,56115,56116],{"class":73},"      height",[36,56118,52768],{"class":50},[36,56120,3069],{"class":73},[36,56122,52823],{"class":42},[36,56124,77],{"class":50},[36,56126,56127,56129,56131,56133,56135,56137],{"class":38,"line":665},[36,56128,56037],{"class":73},[36,56130,52768],{"class":50},[36,56132,1979],{"class":73},[36,56134,52823],{"class":42},[36,56136,52887],{"class":73},[36,56138,77],{"class":50},[36,56140,56141],{"class":38,"line":674},[36,56142,3693],{"class":50},[36,56144,56145],{"class":38,"line":679},[36,56146,58],{"emptyLinePlaceholder":57},[36,56148,56149,56152],{"class":38,"line":692},[36,56150,56151],{"class":46},"    .slider-footer",[36,56153,16901],{"class":50},[36,56155,56156,56158,56160,56163],{"class":38,"line":705},[36,56157,56090],{"class":73},[36,56159,52768],{"class":50},[36,56161,56162],{"class":73},"absolute",[36,56164,77],{"class":50},[36,56166,56167,56170,56172,56174],{"class":38,"line":710},[36,56168,56169],{"class":73},"      left",[36,56171,52768],{"class":50},[36,56173,1859],{"class":73},[36,56175,77],{"class":50},[36,56177,56178,56181,56183,56185],{"class":38,"line":722},[36,56179,56180],{"class":73},"      bottom",[36,56182,52768],{"class":50},[36,56184,1859],{"class":73},[36,56186,77],{"class":50},[36,56188,56189,56191,56193,56195,56197],{"class":38,"line":750},[36,56190,56102],{"class":73},[36,56192,52768],{"class":50},[36,56194,1979],{"class":73},[36,56196,1996],{"class":42},[36,56198,77],{"class":50},[36,56200,56201,56203,56205,56207,56209],{"class":38,"line":755},[36,56202,56116],{"class":73},[36,56204,52768],{"class":50},[36,56206,2242],{"class":73},[36,56208,1996],{"class":42},[36,56210,77],{"class":50},[36,56212,56213,56216,56218,56221],{"class":38,"line":777},[36,56214,56215],{"class":73},"      background-color",[36,56217,52768],{"class":50},[36,56219,56220],{"class":73},"skyblue",[36,56222,77],{"class":50},[36,56224,56225],{"class":38,"line":802},[36,56226,3693],{"class":50},[36,56228,56229],{"class":38,"line":807},[36,56230,58],{"emptyLinePlaceholder":57},[36,56232,56233,56235,56237],{"class":38,"line":818},[36,56234,56151],{"class":46},[36,56236,8301],{"class":52631},[36,56238,16901],{"class":50},[36,56240,56241,56243,56245,56247],{"class":38,"line":843},[36,56242,56090],{"class":73},[36,56244,52768],{"class":50},[36,56246,56162],{"class":73},[36,56248,77],{"class":50},[36,56250,56251,56254,56256,56258,56260],{"class":38,"line":848},[36,56252,56253],{"class":73},"      font-size",[36,56255,52768],{"class":50},[36,56257,2568],{"class":73},[36,56259,52823],{"class":42},[36,56261,77],{"class":50},[36,56263,56264,56266,56268,56270,56272],{"class":38,"line":859},[36,56265,56169],{"class":73},[36,56267,52768],{"class":50},[36,56269,2367],{"class":73},[36,56271,52823],{"class":42},[36,56273,77],{"class":50},[36,56275,56276,56279,56281,56283,56285],{"class":38,"line":864},[36,56277,56278],{"class":73},"      top",[36,56280,52768],{"class":50},[36,56282,1987],{"class":73},[36,56284,52823],{"class":42},[36,56286,77],{"class":50},[36,56288,56289],{"class":38,"line":873},[36,56290,3693],{"class":50},[36,56292,56293],{"class":38,"line":9454},[36,56294,58],{"emptyLinePlaceholder":57},[36,56296,56297,56300],{"class":38,"line":9481},[36,56298,56299],{"class":52631},"    ul",[36,56301,16901],{"class":50},[36,56303,56304,56306,56308,56310],{"class":38,"line":9486},[36,56305,56090],{"class":73},[36,56307,52768],{"class":50},[36,56309,56162],{"class":73},[36,56311,77],{"class":50},[36,56313,56314,56316,56318,56320,56322],{"class":38,"line":9492},[36,56315,56278],{"class":73},[36,56317,52768],{"class":50},[36,56319,2448],{"class":73},[36,56321,52823],{"class":42},[36,56323,77],{"class":50},[36,56325,56326,56328,56330,56332,56334],{"class":38,"line":9504},[36,56327,56169],{"class":73},[36,56329,52768],{"class":50},[36,56331,2367],{"class":73},[36,56333,52823],{"class":42},[36,56335,77],{"class":50},[36,56337,56338,56341,56343,56345],{"class":38,"line":9516},[36,56339,56340],{"class":73},"      display",[36,56342,52768],{"class":50},[36,56344,52808],{"class":73},[36,56346,77],{"class":50},[36,56348,56349,56352,56354,56356],{"class":38,"line":9528},[36,56350,56351],{"class":73},"      justify-content",[36,56353,52768],{"class":50},[36,56355,52999],{"class":73},[36,56357,77],{"class":50},[36,56359,56360,56362,56364,56366],{"class":38,"line":11184},[36,56361,56090],{"class":73},[36,56363,52768],{"class":50},[36,56365,56162],{"class":73},[36,56367,77],{"class":50},[36,56369,56370,56372,56374,56376,56378],{"class":38,"line":11209},[36,56371,56102],{"class":73},[36,56373,52768],{"class":50},[36,56375,5483],{"class":73},[36,56377,52823],{"class":42},[36,56379,77],{"class":50},[36,56381,56382,56384,56386,56388,56390],{"class":38,"line":11232},[36,56383,56116],{"class":73},[36,56385,52768],{"class":50},[36,56387,2367],{"class":73},[36,56389,52823],{"class":42},[36,56391,77],{"class":50},[36,56393,56394],{"class":38,"line":11256},[36,56395,3693],{"class":50},[36,56397,56398],{"class":38,"line":11261},[36,56399,58],{"emptyLinePlaceholder":57},[36,56401,56402,56404,56407],{"class":38,"line":11266},[36,56403,56299],{"class":52631},[36,56405,56406],{"class":52631}," li",[36,56408,16901],{"class":50},[36,56410,56411,56413,56415,56417,56419],{"class":38,"line":11271},[36,56412,56102],{"class":73},[36,56414,52768],{"class":50},[36,56416,2367],{"class":73},[36,56418,52823],{"class":42},[36,56420,77],{"class":50},[36,56422,56423,56425,56427,56429,56431],{"class":38,"line":11280},[36,56424,56116],{"class":73},[36,56426,52768],{"class":50},[36,56428,2367],{"class":73},[36,56430,52823],{"class":42},[36,56432,77],{"class":50},[36,56434,56435,56437,56439,56442,56444,56446,56448,56450,56452,56454,56456,56459],{"class":38,"line":11285},[36,56436,56215],{"class":73},[36,56438,52768],{"class":50},[36,56440,56441],{"class":73},"rgba",[36,56443,222],{"class":50},[36,56445,1859],{"class":73},[36,56447,477],{"class":50},[36,56449,1859],{"class":73},[36,56451,477],{"class":50},[36,56453,1859],{"class":73},[36,56455,477],{"class":50},[36,56457,56458],{"class":73},".4",[36,56460,228],{"class":50},[36,56462,56463,56466,56468,56470,56472],{"class":38,"line":11291},[36,56464,56465],{"class":73},"      border-radius",[36,56467,52768],{"class":50},[36,56469,2113],{"class":73},[36,56471,52823],{"class":42},[36,56473,77],{"class":50},[36,56475,56476],{"class":38,"line":11312},[36,56477,3693],{"class":50},[36,56479,56480],{"class":38,"line":11318},[36,56481,58],{"emptyLinePlaceholder":57},[36,56483,56484,56487],{"class":38,"line":11332},[36,56485,56486],{"class":46},"    .activate",[36,56488,16901],{"class":50},[36,56490,56491,56493,56495,56498],{"class":38,"line":11338},[36,56492,56215],{"class":73},[36,56494,52768],{"class":50},[36,56496,56497],{"class":73},"#f7f7f7",[36,56499,77],{"class":50},[36,56501,56502],{"class":38,"line":11365},[36,56503,3693],{"class":50},[36,56505,56506,56508,56510],{"class":38,"line":11374},[36,56507,53748],{"class":50},[36,56509,1592],{"class":52631},[36,56511,52638],{"class":50},[36,56513,56514,56516,56518],{"class":38,"line":11380},[36,56515,53116],{"class":50},[36,56517,52665],{"class":52631},[36,56519,52638],{"class":50},[36,56521,56522],{"class":38,"line":11388},[36,56523,58],{"emptyLinePlaceholder":57},[36,56525,56526,56528,56530],{"class":38,"line":11393},[36,56527,2577],{"class":50},[36,56529,53131],{"class":52631},[36,56531,52638],{"class":50},[36,56533,56534,56536,56538,56540,56542,56544],{"class":38,"line":17933},[36,56535,53475],{"class":50},[36,56537,52942],{"class":52631},[36,56539,54817],{"class":46},[36,56541,70],{"class":50},[36,56543,54822],{"class":110},[36,56545,52638],{"class":50},[36,56547,56548,56550,56552,56554,56556,56559],{"class":38,"line":17939},[36,56549,52672],{"class":50},[36,56551,52942],{"class":52631},[36,56553,54817],{"class":46},[36,56555,70],{"class":50},[36,56557,56558],{"class":110},"\"slider-wrapper\"",[36,56560,52638],{"class":50},[36,56562,56563,56566,56568,56571,56573,56576,56579,56581,56583],{"class":38,"line":17962},[36,56564,56565],{"class":50},"      \u003C",[36,56567,2992],{"class":52631},[36,56569,56570],{"class":46}," src",[36,56572,70],{"class":50},[36,56574,56575],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,56577,56578],{"class":46}," alt",[36,56580,70],{"class":50},[36,56582,9126],{"class":110},[36,56584,52638],{"class":50},[36,56586,56587,56589,56591],{"class":38,"line":17968},[36,56588,53107],{"class":50},[36,56590,52942],{"class":52631},[36,56592,52638],{"class":50},[36,56594,56595,56597,56599,56601,56603,56606],{"class":38,"line":17991},[36,56596,52672],{"class":50},[36,56598,52942],{"class":52631},[36,56600,54817],{"class":46},[36,56602,70],{"class":50},[36,56604,56605],{"class":110},"\"slider-footer\"",[36,56607,52638],{"class":50},[36,56609,56610,56612,56614,56617,56619],{"class":38,"line":18005},[36,56611,56565],{"class":50},[36,56613,19],{"class":52631},[36,56615,56616],{"class":50},">对人类来说会不会太超前了?\u003C\u002F",[36,56618,19],{"class":52631},[36,56620,52638],{"class":50},[36,56622,56623,56625,56627],{"class":38,"line":18025},[36,56624,56565],{"class":50},[36,56626,2674],{"class":52631},[36,56628,52638],{"class":50},[36,56630,56631,56634,56636,56638,56640,56643,56646,56648],{"class":38,"line":18031},[36,56632,56633],{"class":50},"        \u003C",[36,56635,259],{"class":52631},[36,56637,54817],{"class":46},[36,56639,70],{"class":50},[36,56641,56642],{"class":110},"\"activate\"",[36,56644,56645],{"class":50},">\u003C\u002F",[36,56647,259],{"class":52631},[36,56649,52638],{"class":50},[36,56651,56652,56654,56656,56658,56660],{"class":38,"line":18042},[36,56653,56633],{"class":50},[36,56655,259],{"class":52631},[36,56657,56645],{"class":50},[36,56659,259],{"class":52631},[36,56661,52638],{"class":50},[36,56663,56664,56666,56668,56670,56672],{"class":38,"line":18065},[36,56665,56633],{"class":50},[36,56667,259],{"class":52631},[36,56669,56645],{"class":50},[36,56671,259],{"class":52631},[36,56673,52638],{"class":50},[36,56675,56676,56678,56680,56682,56684],{"class":38,"line":18087},[36,56677,56633],{"class":50},[36,56679,259],{"class":52631},[36,56681,56645],{"class":50},[36,56683,259],{"class":52631},[36,56685,52638],{"class":50},[36,56687,56688,56690,56692,56694,56696],{"class":38,"line":18092},[36,56689,56633],{"class":50},[36,56691,259],{"class":52631},[36,56693,56645],{"class":50},[36,56695,259],{"class":52631},[36,56697,52638],{"class":50},[36,56699,56700,56702,56704,56706,56708],{"class":38,"line":18098},[36,56701,56633],{"class":50},[36,56703,259],{"class":52631},[36,56705,56645],{"class":50},[36,56707,259],{"class":52631},[36,56709,52638],{"class":50},[36,56711,56712,56714,56716,56718,56720],{"class":38,"line":18112},[36,56713,56633],{"class":50},[36,56715,259],{"class":52631},[36,56717,56645],{"class":50},[36,56719,259],{"class":52631},[36,56721,52638],{"class":50},[36,56723,56724,56726,56728,56730,56732],{"class":38,"line":18125},[36,56725,56633],{"class":50},[36,56727,259],{"class":52631},[36,56729,56645],{"class":50},[36,56731,259],{"class":52631},[36,56733,52638],{"class":50},[36,56735,56736,56739,56741],{"class":38,"line":18130},[36,56737,56738],{"class":50},"      \u003C\u002F",[36,56740,2674],{"class":52631},[36,56742,52638],{"class":50},[36,56744,56745,56747,56749],{"class":38,"line":18144},[36,56746,53107],{"class":50},[36,56748,52942],{"class":52631},[36,56750,52638],{"class":50},[36,56752,56753,56755,56757],{"class":38,"line":18149},[36,56754,53748],{"class":50},[36,56756,52942],{"class":52631},[36,56758,52638],{"class":50},[36,56760,56761,56763,56765],{"class":38,"line":18155},[36,56762,53475],{"class":50},[36,56764,53144],{"class":52631},[36,56766,52638],{"class":50},[36,56768,56769,56771,56774,56776],{"class":38,"line":18160},[36,56770,1498],{"class":42},[36,56772,56773],{"class":73}," arrImage",[36,56775,14893],{"class":42},[36,56777,56778],{"class":50}," [\n",[36,56780,56781,56784,56787,56790,56793,56796,56799],{"class":38,"line":18174},[36,56782,56783],{"class":50},"      { url: ",[36,56785,56786],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[36,56788,56789],{"class":50},", title: ",[36,56791,56792],{"class":110},"'对人类来说会不会太超前了?'",[36,56794,56795],{"class":50},", color: ",[36,56797,56798],{"class":110},"'rgba(100,67,68)'",[36,56800,56801],{"class":50}," },\n",[36,56803,56804,56806,56809,56811,56814,56816,56819],{"class":38,"line":18179},[36,56805,56783],{"class":50},[36,56807,56808],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[36,56810,56789],{"class":50},[36,56812,56813],{"class":110},"'开启剑与雪的黑暗传说!'",[36,56815,56795],{"class":50},[36,56817,56818],{"class":110},"'rgba(43,35,26)'",[36,56820,56801],{"class":50},[36,56822,56823,56825,56828,56830,56833,56835,56838],{"class":38,"line":18184},[36,56824,56783],{"class":50},[36,56826,56827],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[36,56829,56789],{"class":50},[36,56831,56832],{"class":110},"'真正的jo厨出现了!'",[36,56834,56795],{"class":50},[36,56836,56837],{"class":110},"'rgba(36,31,33)'",[36,56839,56801],{"class":50},[36,56841,56842,56844,56847,56849,56852,56854,56857],{"class":38,"line":18198},[36,56843,56783],{"class":50},[36,56845,56846],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[36,56848,56789],{"class":50},[36,56850,56851],{"class":110},"'李玉刚:让世界通过b站看到东方大国文化'",[36,56853,56795],{"class":50},[36,56855,56856],{"class":110},"'rgba(139,98,66)'",[36,56858,56801],{"class":50},[36,56860,56861,56863,56866,56868,56871,56873,56876],{"class":38,"line":18210},[36,56862,56783],{"class":50},[36,56864,56865],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[36,56867,56789],{"class":50},[36,56869,56870],{"class":110},"'快来分享你的寒假日常吧'",[36,56872,56795],{"class":50},[36,56874,56875],{"class":110},"'rgba(67,90,92)'",[36,56877,56801],{"class":50},[36,56879,56880,56882,56885,56887,56890,56892,56895],{"class":38,"line":18215},[36,56881,56783],{"class":50},[36,56883,56884],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[36,56886,56789],{"class":50},[36,56888,56889],{"class":110},"'哔哩哔哩小年YEAR'",[36,56891,56795],{"class":50},[36,56893,56894],{"class":110},"'rgba(166,131,143)'",[36,56896,56801],{"class":50},[36,56898,56899,56901,56904,56906,56909,56911,56914],{"class":38,"line":18228},[36,56900,56783],{"class":50},[36,56902,56903],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[36,56905,56789],{"class":50},[36,56907,56908],{"class":110},"'一站式解决你的电脑配置问题'",[36,56910,56795],{"class":50},[36,56912,56913],{"class":110},"'rgba(53,29,25)'",[36,56915,56801],{"class":50},[36,56917,56918,56920,56923,56925,56928,56930,56933],{"class":38,"line":18233},[36,56919,56783],{"class":50},[36,56921,56922],{"class":110},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[36,56924,56789],{"class":50},[36,56926,56927],{"class":110},"'谁不想和小猫咪贴贴呢?'",[36,56929,56795],{"class":50},[36,56931,56932],{"class":110},"'rgba(99,72,114)'",[36,56934,56935],{"class":50}," }\n",[36,56937,56938],{"class":38,"line":18238},[36,56939,54440],{"class":50},[36,56941,56942,56944,56947,56949,56951,56953,56955,56958],{"class":38,"line":18243},[36,56943,1498],{"class":42},[36,56945,56946],{"class":73}," img",[36,56948,14893],{"class":42},[36,56950,55727],{"class":50},[36,56952,55730],{"class":46},[36,56954,222],{"class":50},[36,56956,56957],{"class":110},"'.slider-wrapper img'",[36,56959,1680],{"class":50},[36,56961,56962,56964,56966,56968,56970,56972,56974,56977],{"class":38,"line":18256},[36,56963,1498],{"class":42},[36,56965,8301],{"class":73},[36,56967,14893],{"class":42},[36,56969,55727],{"class":50},[36,56971,55730],{"class":46},[36,56973,222],{"class":50},[36,56975,56976],{"class":110},"'.slider-footer p'",[36,56978,1680],{"class":50},[36,56980,56981,56983,56986,56988,56990,56992,56994,56997],{"class":38,"line":18261},[36,56982,1498],{"class":42},[36,56984,56985],{"class":73}," color",[36,56987,14893],{"class":42},[36,56989,55727],{"class":50},[36,56991,55730],{"class":46},[36,56993,222],{"class":50},[36,56995,56996],{"class":110},"'.slider-footer'",[36,56998,1680],{"class":50},[36,57000,57001,57003,57006,57008,57010,57013,57015,57018],{"class":38,"line":33964},[36,57002,1498],{"class":42},[36,57004,57005],{"class":73}," lis",[36,57007,14893],{"class":42},[36,57009,55727],{"class":50},[36,57011,57012],{"class":46},"querySelectorAll",[36,57014,222],{"class":50},[36,57016,57017],{"class":110},"'.slider-footer ul li'",[36,57019,1680],{"class":50},[36,57021,57022,57024,57026,57028],{"class":38,"line":33970},[36,57023,53550],{"class":42},[36,57025,10906],{"class":50},[36,57027,70],{"class":42},[36,57029,57030],{"class":73}," 1\n",[36,57032,57033,57035,57038,57040,57042,57044,57046],{"class":38,"line":33976},[36,57034,53550],{"class":42},[36,57036,57037],{"class":50}," timer ",[36,57039,70],{"class":42},[36,57041,55775],{"class":46},[36,57043,222],{"class":50},[36,57045,55780],{"class":42},[36,57047,55783],{"class":50},[36,57049,57050,57053,57055],{"class":38,"line":33982},[36,57051,57052],{"class":50},"      img.src ",[36,57054,70],{"class":42},[36,57056,57057],{"class":50}," arrImage[i].url\n",[36,57059,57060,57063,57065],{"class":38,"line":33988},[36,57061,57062],{"class":50},"      p.innerHTML ",[36,57064,70],{"class":42},[36,57066,57067],{"class":50}," arrImage[i].title\n",[36,57069,57070,57073,57075],{"class":38,"line":33999},[36,57071,57072],{"class":50},"      color.style.backgroundColor ",[36,57074,70],{"class":42},[36,57076,57077],{"class":50}," arrImage[i].color\n",[36,57079,57080],{"class":38,"line":34005},[36,57081,57082],{"class":124},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[36,57084,57085],{"class":38,"line":34025},[36,57086,57087],{"class":124},"      \u002F\u002F li.classList.add('activate')\n",[36,57089,57090],{"class":38,"line":34031},[36,57091,57092],{"class":124},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[36,57094,57095],{"class":38,"line":34042},[36,57096,57097],{"class":124},"      \u002F\u002F lis[i].classList.remove('activate')\n",[36,57099,57100,57103,57105,57107,57110,57113,57116,57118,57121],{"class":38,"line":34048},[36,57101,57102],{"class":50},"      document.",[36,57104,55730],{"class":46},[36,57106,222],{"class":50},[36,57108,57109],{"class":110},"'.activate'",[36,57111,57112],{"class":50},")?.classList.",[36,57114,57115],{"class":46},"toggle",[36,57117,222],{"class":50},[36,57119,57120],{"class":110},"'activate'",[36,57122,1680],{"class":50},[36,57124,57125,57128,57130,57132,57134],{"class":38,"line":34054},[36,57126,57127],{"class":50},"      lis[i].classList.",[36,57129,6822],{"class":46},[36,57131,222],{"class":50},[36,57133,57120],{"class":110},[36,57135,1680],{"class":50},[36,57137,57138],{"class":38,"line":34060},[36,57139,58],{"emptyLinePlaceholder":57},[36,57141,57142,57145,57147,57149,57151,57153,57155,57157,57160],{"class":38,"line":34066},[36,57143,57144],{"class":50},"      i ",[36,57146,70],{"class":42},[36,57148,55814],{"class":50},[36,57150,2148],{"class":42},[36,57152,26449],{"class":73},[36,57154,15043],{"class":50},[36,57156,1996],{"class":42},[36,57158,57159],{"class":50}," arrImage.",[36,57161,57162],{"class":73},"length\n",[36,57164,57165],{"class":38,"line":34072},[36,57166,58],{"emptyLinePlaceholder":57},[36,57168,57169,57171,57173],{"class":38,"line":34078},[36,57170,55866],{"class":50},[36,57172,7889],{"class":73},[36,57174,1680],{"class":50},[36,57176,57177,57179,57181],{"class":38,"line":34084},[36,57178,53748],{"class":50},[36,57180,53144],{"class":52631},[36,57182,52638],{"class":50},[36,57184,57185,57187,57189],{"class":38,"line":34104},[36,57186,53116],{"class":50},[36,57188,53131],{"class":52631},[36,57190,52638],{"class":50},[36,57192,57193],{"class":38,"line":34110},[36,57194,58],{"emptyLinePlaceholder":57},[36,57196,57197,57199,57201],{"class":38,"line":34126},[36,57198,53116],{"class":50},[36,57200,51966],{"class":52631},[36,57202,52638],{"class":50},[19,57204,57205],{},[2992,57206],{"alt":31,"src":57207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57209,57210],{},"?.就是短路保护,确保输出正常进行",[19,57212,57213],{},"不要忘记取余%,有时候可以用",[19,57215,57216],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[256,57218,57219],{"start":54},[259,57220,57221],{},"法2",[26,57223,57225],{"className":51964,"code":57224,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    li {\n      list-style: none;\n    }\n\n    .box {\n      position: relative;\n      width: 976px;\n      height: 600px;\n      margin: 100px auto;\n    }\n\n    .slider-footer {\n      position: absolute;\n      left: 0;\n      bottom: 0;\n      width: 100%;\n      height: 15%;\n      background-color: skyblue;\n    }\n\n    .slider-footer p {\n      position: absolute;\n      font-size: 28px;\n      left: 20px;\n      top: 5px;\n    }\n\n    ul {\n      position: absolute;\n      top: 55px;\n      left: 20px;\n      display: flex;\n      justify-content: space-between;\n      position: absolute;\n      width: 250px;\n      height: 20px;\n    }\n\n    ul li {\n      width: 20px;\n      height: 20px;\n      background-color: rgba(0, 0, 0, .4);\n      border-radius: 10px;\n    }\n\n    .activate {\n      background-color: #f7f7f7;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\">\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了?\u003C\u002Fp>\n      \u003Cul>\n        \u003Cli class=\"activate\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const sliderData = [\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgba(100,67,68)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgba(43,35,26)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了!', color: 'rgba(36,31,33)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚:让世界通过b站看到东方大国文化', color: 'rgba(139,98,66)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧', color: 'rgba(67,90,92)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAR', color: 'rgba(166,131,143)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题', color: 'rgba(53,29,25)' },\n      { url: '....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢?', color: 'rgba(99,72,114)' }\n    ]\n    \u002F\u002F 1.获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    let i = 0\n    \u002F\u002F 2.开启定时器\n    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n    setInterval(function () {\n      i++\n      if (i >= sliderData.length) {\n        i = 0\n      }\n      \u002F\u002F 更换图片路径\n      img.src = sliderData[i].url\n      \u002F\u002F 把文字写到p里面\n      p.innerHTML = sliderData[i].title\n      \u002F\u002F 小圆点\n      \u002F\u002F 先删除以前的active\n      \u002F\u002F 只让当前li添加active\n      document.querySelector('.slider-footer .activate').classList.remove('activate')\n      document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`).classList.add('activate')\n\n    }, 1000)\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,57226,57227,57237,57251,57255,57263,57277,57297,57309,57317,57323,57333,57343,57347,57351,57357,57367,57371,57375,57381,57391,57403,57415,57429,57433,57437,57443,57453,57463,57473,57485,57497,57507,57511,57515,57523,57533,57545,57557,57569,57573,57577,57583,57593,57605,57617,57627,57637,57647,57659,57671,57675,57679,57687,57699,57711,57737,57749,57753,57757,57763,57773,57777,57785,57793,57797,57805,57819,57833,57853,57861,57875,57887,57895,57913,57925,57937,57949,57961,57973,57985,57997,58005,58013,58021,58029,58040,58056,58072,58088,58104,58120,58136,58152,58168,58172,58177,58195,58213,58223,58228,58233,58244,58250,58265,58274,58278,58283,58292,58297,58306,58311,58316,58321,58344,58374,58378,58386,58390,58398,58406,58410],{"__ignoreMap":31},[36,57228,57229,57231,57233,57235],{"class":38,"line":39},[36,57230,52628],{"class":50},[36,57232,52632],{"class":52631},[36,57234,52635],{"class":46},[36,57236,52638],{"class":50},[36,57238,57239,57241,57243,57245,57247,57249],{"class":38,"line":54},[36,57240,2577],{"class":50},[36,57242,51966],{"class":52631},[36,57244,52647],{"class":46},[36,57246,70],{"class":50},[36,57248,52652],{"class":110},[36,57250,52638],{"class":50},[36,57252,57253],{"class":38,"line":61},[36,57254,58],{"emptyLinePlaceholder":57},[36,57256,57257,57259,57261],{"class":38,"line":80},[36,57258,2577],{"class":50},[36,57260,52665],{"class":52631},[36,57262,52638],{"class":50},[36,57264,57265,57267,57269,57271,57273,57275],{"class":38,"line":96},[36,57266,53475],{"class":50},[36,57268,52675],{"class":52631},[36,57270,52678],{"class":46},[36,57272,70],{"class":50},[36,57274,52683],{"class":110},[36,57276,52638],{"class":50},[36,57278,57279,57281,57283,57285,57287,57289,57291,57293,57295],{"class":38,"line":101},[36,57280,53475],{"class":50},[36,57282,52675],{"class":52631},[36,57284,16249],{"class":46},[36,57286,70],{"class":50},[36,57288,52722],{"class":110},[36,57290,52702],{"class":46},[36,57292,70],{"class":50},[36,57294,52729],{"class":110},[36,57296,52638],{"class":50},[36,57298,57299,57301,57303,57305,57307],{"class":38,"line":128},[36,57300,53475],{"class":50},[36,57302,52738],{"class":52631},[36,57304,52741],{"class":50},[36,57306,52738],{"class":52631},[36,57308,52638],{"class":50},[36,57310,57311,57313,57315],{"class":38,"line":149},[36,57312,53475],{"class":50},[36,57314,1592],{"class":52631},[36,57316,52638],{"class":50},[36,57318,57319,57321],{"class":38,"line":154},[36,57320,569],{"class":52631},[36,57322,16901],{"class":50},[36,57324,57325,57327,57329,57331],{"class":38,"line":167},[36,57326,56026],{"class":73},[36,57328,52768],{"class":50},[36,57330,1859],{"class":73},[36,57332,77],{"class":50},[36,57334,57335,57337,57339,57341],{"class":38,"line":172},[36,57336,56037],{"class":73},[36,57338,52768],{"class":50},[36,57340,1859],{"class":73},[36,57342,77],{"class":50},[36,57344,57345],{"class":38,"line":192},[36,57346,3693],{"class":50},[36,57348,57349],{"class":38,"line":211},[36,57350,58],{"emptyLinePlaceholder":57},[36,57352,57353,57355],{"class":38,"line":216},[36,57354,56056],{"class":52631},[36,57356,16901],{"class":50},[36,57358,57359,57361,57363,57365],{"class":38,"line":231},[36,57360,56063],{"class":73},[36,57362,52768],{"class":50},[36,57364,56068],{"class":73},[36,57366,77],{"class":50},[36,57368,57369],{"class":38,"line":236},[36,57370,3693],{"class":50},[36,57372,57373],{"class":38,"line":247},[36,57374,58],{"emptyLinePlaceholder":57},[36,57376,57377,57379],{"class":38,"line":637},[36,57378,56083],{"class":46},[36,57380,16901],{"class":50},[36,57382,57383,57385,57387,57389],{"class":38,"line":646},[36,57384,56090],{"class":73},[36,57386,52768],{"class":50},[36,57388,56095],{"class":73},[36,57390,77],{"class":50},[36,57392,57393,57395,57397,57399,57401],{"class":38,"line":655},[36,57394,56102],{"class":73},[36,57396,52768],{"class":50},[36,57398,56107],{"class":73},[36,57400,52823],{"class":42},[36,57402,77],{"class":50},[36,57404,57405,57407,57409,57411,57413],{"class":38,"line":660},[36,57406,56116],{"class":73},[36,57408,52768],{"class":50},[36,57410,3069],{"class":73},[36,57412,52823],{"class":42},[36,57414,77],{"class":50},[36,57416,57417,57419,57421,57423,57425,57427],{"class":38,"line":665},[36,57418,56037],{"class":73},[36,57420,52768],{"class":50},[36,57422,1979],{"class":73},[36,57424,52823],{"class":42},[36,57426,52887],{"class":73},[36,57428,77],{"class":50},[36,57430,57431],{"class":38,"line":674},[36,57432,3693],{"class":50},[36,57434,57435],{"class":38,"line":679},[36,57436,58],{"emptyLinePlaceholder":57},[36,57438,57439,57441],{"class":38,"line":692},[36,57440,56151],{"class":46},[36,57442,16901],{"class":50},[36,57444,57445,57447,57449,57451],{"class":38,"line":705},[36,57446,56090],{"class":73},[36,57448,52768],{"class":50},[36,57450,56162],{"class":73},[36,57452,77],{"class":50},[36,57454,57455,57457,57459,57461],{"class":38,"line":710},[36,57456,56169],{"class":73},[36,57458,52768],{"class":50},[36,57460,1859],{"class":73},[36,57462,77],{"class":50},[36,57464,57465,57467,57469,57471],{"class":38,"line":722},[36,57466,56180],{"class":73},[36,57468,52768],{"class":50},[36,57470,1859],{"class":73},[36,57472,77],{"class":50},[36,57474,57475,57477,57479,57481,57483],{"class":38,"line":750},[36,57476,56102],{"class":73},[36,57478,52768],{"class":50},[36,57480,1979],{"class":73},[36,57482,1996],{"class":42},[36,57484,77],{"class":50},[36,57486,57487,57489,57491,57493,57495],{"class":38,"line":755},[36,57488,56116],{"class":73},[36,57490,52768],{"class":50},[36,57492,2242],{"class":73},[36,57494,1996],{"class":42},[36,57496,77],{"class":50},[36,57498,57499,57501,57503,57505],{"class":38,"line":777},[36,57500,56215],{"class":73},[36,57502,52768],{"class":50},[36,57504,56220],{"class":73},[36,57506,77],{"class":50},[36,57508,57509],{"class":38,"line":802},[36,57510,3693],{"class":50},[36,57512,57513],{"class":38,"line":807},[36,57514,58],{"emptyLinePlaceholder":57},[36,57516,57517,57519,57521],{"class":38,"line":818},[36,57518,56151],{"class":46},[36,57520,8301],{"class":52631},[36,57522,16901],{"class":50},[36,57524,57525,57527,57529,57531],{"class":38,"line":843},[36,57526,56090],{"class":73},[36,57528,52768],{"class":50},[36,57530,56162],{"class":73},[36,57532,77],{"class":50},[36,57534,57535,57537,57539,57541,57543],{"class":38,"line":848},[36,57536,56253],{"class":73},[36,57538,52768],{"class":50},[36,57540,2568],{"class":73},[36,57542,52823],{"class":42},[36,57544,77],{"class":50},[36,57546,57547,57549,57551,57553,57555],{"class":38,"line":859},[36,57548,56169],{"class":73},[36,57550,52768],{"class":50},[36,57552,2367],{"class":73},[36,57554,52823],{"class":42},[36,57556,77],{"class":50},[36,57558,57559,57561,57563,57565,57567],{"class":38,"line":864},[36,57560,56278],{"class":73},[36,57562,52768],{"class":50},[36,57564,1987],{"class":73},[36,57566,52823],{"class":42},[36,57568,77],{"class":50},[36,57570,57571],{"class":38,"line":873},[36,57572,3693],{"class":50},[36,57574,57575],{"class":38,"line":9454},[36,57576,58],{"emptyLinePlaceholder":57},[36,57578,57579,57581],{"class":38,"line":9481},[36,57580,56299],{"class":52631},[36,57582,16901],{"class":50},[36,57584,57585,57587,57589,57591],{"class":38,"line":9486},[36,57586,56090],{"class":73},[36,57588,52768],{"class":50},[36,57590,56162],{"class":73},[36,57592,77],{"class":50},[36,57594,57595,57597,57599,57601,57603],{"class":38,"line":9492},[36,57596,56278],{"class":73},[36,57598,52768],{"class":50},[36,57600,2448],{"class":73},[36,57602,52823],{"class":42},[36,57604,77],{"class":50},[36,57606,57607,57609,57611,57613,57615],{"class":38,"line":9504},[36,57608,56169],{"class":73},[36,57610,52768],{"class":50},[36,57612,2367],{"class":73},[36,57614,52823],{"class":42},[36,57616,77],{"class":50},[36,57618,57619,57621,57623,57625],{"class":38,"line":9516},[36,57620,56340],{"class":73},[36,57622,52768],{"class":50},[36,57624,52808],{"class":73},[36,57626,77],{"class":50},[36,57628,57629,57631,57633,57635],{"class":38,"line":9528},[36,57630,56351],{"class":73},[36,57632,52768],{"class":50},[36,57634,52999],{"class":73},[36,57636,77],{"class":50},[36,57638,57639,57641,57643,57645],{"class":38,"line":11184},[36,57640,56090],{"class":73},[36,57642,52768],{"class":50},[36,57644,56162],{"class":73},[36,57646,77],{"class":50},[36,57648,57649,57651,57653,57655,57657],{"class":38,"line":11209},[36,57650,56102],{"class":73},[36,57652,52768],{"class":50},[36,57654,5483],{"class":73},[36,57656,52823],{"class":42},[36,57658,77],{"class":50},[36,57660,57661,57663,57665,57667,57669],{"class":38,"line":11232},[36,57662,56116],{"class":73},[36,57664,52768],{"class":50},[36,57666,2367],{"class":73},[36,57668,52823],{"class":42},[36,57670,77],{"class":50},[36,57672,57673],{"class":38,"line":11256},[36,57674,3693],{"class":50},[36,57676,57677],{"class":38,"line":11261},[36,57678,58],{"emptyLinePlaceholder":57},[36,57680,57681,57683,57685],{"class":38,"line":11266},[36,57682,56299],{"class":52631},[36,57684,56406],{"class":52631},[36,57686,16901],{"class":50},[36,57688,57689,57691,57693,57695,57697],{"class":38,"line":11271},[36,57690,56102],{"class":73},[36,57692,52768],{"class":50},[36,57694,2367],{"class":73},[36,57696,52823],{"class":42},[36,57698,77],{"class":50},[36,57700,57701,57703,57705,57707,57709],{"class":38,"line":11280},[36,57702,56116],{"class":73},[36,57704,52768],{"class":50},[36,57706,2367],{"class":73},[36,57708,52823],{"class":42},[36,57710,77],{"class":50},[36,57712,57713,57715,57717,57719,57721,57723,57725,57727,57729,57731,57733,57735],{"class":38,"line":11285},[36,57714,56215],{"class":73},[36,57716,52768],{"class":50},[36,57718,56441],{"class":73},[36,57720,222],{"class":50},[36,57722,1859],{"class":73},[36,57724,477],{"class":50},[36,57726,1859],{"class":73},[36,57728,477],{"class":50},[36,57730,1859],{"class":73},[36,57732,477],{"class":50},[36,57734,56458],{"class":73},[36,57736,228],{"class":50},[36,57738,57739,57741,57743,57745,57747],{"class":38,"line":11291},[36,57740,56465],{"class":73},[36,57742,52768],{"class":50},[36,57744,2113],{"class":73},[36,57746,52823],{"class":42},[36,57748,77],{"class":50},[36,57750,57751],{"class":38,"line":11312},[36,57752,3693],{"class":50},[36,57754,57755],{"class":38,"line":11318},[36,57756,58],{"emptyLinePlaceholder":57},[36,57758,57759,57761],{"class":38,"line":11332},[36,57760,56486],{"class":46},[36,57762,16901],{"class":50},[36,57764,57765,57767,57769,57771],{"class":38,"line":11338},[36,57766,56215],{"class":73},[36,57768,52768],{"class":50},[36,57770,56497],{"class":73},[36,57772,77],{"class":50},[36,57774,57775],{"class":38,"line":11365},[36,57776,3693],{"class":50},[36,57778,57779,57781,57783],{"class":38,"line":11374},[36,57780,53748],{"class":50},[36,57782,1592],{"class":52631},[36,57784,52638],{"class":50},[36,57786,57787,57789,57791],{"class":38,"line":11380},[36,57788,53116],{"class":50},[36,57790,52665],{"class":52631},[36,57792,52638],{"class":50},[36,57794,57795],{"class":38,"line":11388},[36,57796,58],{"emptyLinePlaceholder":57},[36,57798,57799,57801,57803],{"class":38,"line":11393},[36,57800,2577],{"class":50},[36,57802,53131],{"class":52631},[36,57804,52638],{"class":50},[36,57806,57807,57809,57811,57813,57815,57817],{"class":38,"line":17933},[36,57808,53475],{"class":50},[36,57810,52942],{"class":52631},[36,57812,54817],{"class":46},[36,57814,70],{"class":50},[36,57816,54822],{"class":110},[36,57818,52638],{"class":50},[36,57820,57821,57823,57825,57827,57829,57831],{"class":38,"line":17939},[36,57822,52672],{"class":50},[36,57824,52942],{"class":52631},[36,57826,54817],{"class":46},[36,57828,70],{"class":50},[36,57830,56558],{"class":110},[36,57832,52638],{"class":50},[36,57834,57835,57837,57839,57841,57843,57845,57847,57849,57851],{"class":38,"line":17962},[36,57836,56565],{"class":50},[36,57838,2992],{"class":52631},[36,57840,56570],{"class":46},[36,57842,70],{"class":50},[36,57844,56575],{"class":110},[36,57846,56578],{"class":46},[36,57848,70],{"class":50},[36,57850,9126],{"class":110},[36,57852,52638],{"class":50},[36,57854,57855,57857,57859],{"class":38,"line":17968},[36,57856,53107],{"class":50},[36,57858,52942],{"class":52631},[36,57860,52638],{"class":50},[36,57862,57863,57865,57867,57869,57871,57873],{"class":38,"line":17991},[36,57864,52672],{"class":50},[36,57866,52942],{"class":52631},[36,57868,54817],{"class":46},[36,57870,70],{"class":50},[36,57872,56605],{"class":110},[36,57874,52638],{"class":50},[36,57876,57877,57879,57881,57883,57885],{"class":38,"line":18005},[36,57878,56565],{"class":50},[36,57880,19],{"class":52631},[36,57882,56616],{"class":50},[36,57884,19],{"class":52631},[36,57886,52638],{"class":50},[36,57888,57889,57891,57893],{"class":38,"line":18025},[36,57890,56565],{"class":50},[36,57892,2674],{"class":52631},[36,57894,52638],{"class":50},[36,57896,57897,57899,57901,57903,57905,57907,57909,57911],{"class":38,"line":18031},[36,57898,56633],{"class":50},[36,57900,259],{"class":52631},[36,57902,54817],{"class":46},[36,57904,70],{"class":50},[36,57906,56642],{"class":110},[36,57908,56645],{"class":50},[36,57910,259],{"class":52631},[36,57912,52638],{"class":50},[36,57914,57915,57917,57919,57921,57923],{"class":38,"line":18042},[36,57916,56633],{"class":50},[36,57918,259],{"class":52631},[36,57920,56645],{"class":50},[36,57922,259],{"class":52631},[36,57924,52638],{"class":50},[36,57926,57927,57929,57931,57933,57935],{"class":38,"line":18065},[36,57928,56633],{"class":50},[36,57930,259],{"class":52631},[36,57932,56645],{"class":50},[36,57934,259],{"class":52631},[36,57936,52638],{"class":50},[36,57938,57939,57941,57943,57945,57947],{"class":38,"line":18087},[36,57940,56633],{"class":50},[36,57942,259],{"class":52631},[36,57944,56645],{"class":50},[36,57946,259],{"class":52631},[36,57948,52638],{"class":50},[36,57950,57951,57953,57955,57957,57959],{"class":38,"line":18092},[36,57952,56633],{"class":50},[36,57954,259],{"class":52631},[36,57956,56645],{"class":50},[36,57958,259],{"class":52631},[36,57960,52638],{"class":50},[36,57962,57963,57965,57967,57969,57971],{"class":38,"line":18098},[36,57964,56633],{"class":50},[36,57966,259],{"class":52631},[36,57968,56645],{"class":50},[36,57970,259],{"class":52631},[36,57972,52638],{"class":50},[36,57974,57975,57977,57979,57981,57983],{"class":38,"line":18112},[36,57976,56633],{"class":50},[36,57978,259],{"class":52631},[36,57980,56645],{"class":50},[36,57982,259],{"class":52631},[36,57984,52638],{"class":50},[36,57986,57987,57989,57991,57993,57995],{"class":38,"line":18125},[36,57988,56633],{"class":50},[36,57990,259],{"class":52631},[36,57992,56645],{"class":50},[36,57994,259],{"class":52631},[36,57996,52638],{"class":50},[36,57998,57999,58001,58003],{"class":38,"line":18130},[36,58000,56738],{"class":50},[36,58002,2674],{"class":52631},[36,58004,52638],{"class":50},[36,58006,58007,58009,58011],{"class":38,"line":18144},[36,58008,53107],{"class":50},[36,58010,52942],{"class":52631},[36,58012,52638],{"class":50},[36,58014,58015,58017,58019],{"class":38,"line":18149},[36,58016,53748],{"class":50},[36,58018,52942],{"class":52631},[36,58020,52638],{"class":50},[36,58022,58023,58025,58027],{"class":38,"line":18155},[36,58024,53475],{"class":50},[36,58026,53144],{"class":52631},[36,58028,52638],{"class":50},[36,58030,58031,58033,58036,58038],{"class":38,"line":18160},[36,58032,1498],{"class":42},[36,58034,58035],{"class":73}," sliderData",[36,58037,14893],{"class":42},[36,58039,56778],{"class":50},[36,58041,58042,58044,58046,58048,58050,58052,58054],{"class":38,"line":18174},[36,58043,56783],{"class":50},[36,58045,56786],{"class":110},[36,58047,56789],{"class":50},[36,58049,56792],{"class":110},[36,58051,56795],{"class":50},[36,58053,56798],{"class":110},[36,58055,56801],{"class":50},[36,58057,58058,58060,58062,58064,58066,58068,58070],{"class":38,"line":18179},[36,58059,56783],{"class":50},[36,58061,56808],{"class":110},[36,58063,56789],{"class":50},[36,58065,56813],{"class":110},[36,58067,56795],{"class":50},[36,58069,56818],{"class":110},[36,58071,56801],{"class":50},[36,58073,58074,58076,58078,58080,58082,58084,58086],{"class":38,"line":18184},[36,58075,56783],{"class":50},[36,58077,56827],{"class":110},[36,58079,56789],{"class":50},[36,58081,56832],{"class":110},[36,58083,56795],{"class":50},[36,58085,56837],{"class":110},[36,58087,56801],{"class":50},[36,58089,58090,58092,58094,58096,58098,58100,58102],{"class":38,"line":18198},[36,58091,56783],{"class":50},[36,58093,56846],{"class":110},[36,58095,56789],{"class":50},[36,58097,56851],{"class":110},[36,58099,56795],{"class":50},[36,58101,56856],{"class":110},[36,58103,56801],{"class":50},[36,58105,58106,58108,58110,58112,58114,58116,58118],{"class":38,"line":18210},[36,58107,56783],{"class":50},[36,58109,56865],{"class":110},[36,58111,56789],{"class":50},[36,58113,56870],{"class":110},[36,58115,56795],{"class":50},[36,58117,56875],{"class":110},[36,58119,56801],{"class":50},[36,58121,58122,58124,58126,58128,58130,58132,58134],{"class":38,"line":18215},[36,58123,56783],{"class":50},[36,58125,56884],{"class":110},[36,58127,56789],{"class":50},[36,58129,56889],{"class":110},[36,58131,56795],{"class":50},[36,58133,56894],{"class":110},[36,58135,56801],{"class":50},[36,58137,58138,58140,58142,58144,58146,58148,58150],{"class":38,"line":18228},[36,58139,56783],{"class":50},[36,58141,56903],{"class":110},[36,58143,56789],{"class":50},[36,58145,56908],{"class":110},[36,58147,56795],{"class":50},[36,58149,56913],{"class":110},[36,58151,56801],{"class":50},[36,58153,58154,58156,58158,58160,58162,58164,58166],{"class":38,"line":18233},[36,58155,56783],{"class":50},[36,58157,56922],{"class":110},[36,58159,56789],{"class":50},[36,58161,56927],{"class":110},[36,58163,56795],{"class":50},[36,58165,56932],{"class":110},[36,58167,56935],{"class":50},[36,58169,58170],{"class":38,"line":18238},[36,58171,54440],{"class":50},[36,58173,58174],{"class":38,"line":18243},[36,58175,58176],{"class":124},"    \u002F\u002F 1.获取元素\n",[36,58178,58179,58181,58183,58185,58187,58189,58191,58193],{"class":38,"line":18256},[36,58180,1498],{"class":42},[36,58182,56946],{"class":73},[36,58184,14893],{"class":42},[36,58186,55727],{"class":50},[36,58188,55730],{"class":46},[36,58190,222],{"class":50},[36,58192,56957],{"class":110},[36,58194,1680],{"class":50},[36,58196,58197,58199,58201,58203,58205,58207,58209,58211],{"class":38,"line":18261},[36,58198,1498],{"class":42},[36,58200,8301],{"class":73},[36,58202,14893],{"class":42},[36,58204,55727],{"class":50},[36,58206,55730],{"class":46},[36,58208,222],{"class":50},[36,58210,56976],{"class":110},[36,58212,1680],{"class":50},[36,58214,58215,58217,58219,58221],{"class":38,"line":33964},[36,58216,53550],{"class":42},[36,58218,10906],{"class":50},[36,58220,70],{"class":42},[36,58222,48664],{"class":73},[36,58224,58225],{"class":38,"line":33970},[36,58226,58227],{"class":124},"    \u002F\u002F 2.开启定时器\n",[36,58229,58230],{"class":38,"line":33976},[36,58231,58232],{"class":124},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[36,58234,58235,58238,58240,58242],{"class":38,"line":33982},[36,58236,58237],{"class":46},"    setInterval",[36,58239,222],{"class":50},[36,58241,55780],{"class":42},[36,58243,55783],{"class":50},[36,58245,58246,58248],{"class":38,"line":33988},[36,58247,55788],{"class":50},[36,58249,4197],{"class":42},[36,58251,58252,58254,58256,58258,58261,58263],{"class":38,"line":33999},[36,58253,55811],{"class":42},[36,58255,55814],{"class":50},[36,58257,3228],{"class":42},[36,58259,58260],{"class":50}," sliderData.",[36,58262,53299],{"class":73},[36,58264,485],{"class":50},[36,58266,58267,58270,58272],{"class":38,"line":34005},[36,58268,58269],{"class":50},"        i ",[36,58271,70],{"class":42},[36,58273,48664],{"class":73},[36,58275,58276],{"class":38,"line":34025},[36,58277,53729],{"class":50},[36,58279,58280],{"class":38,"line":34031},[36,58281,58282],{"class":124},"      \u002F\u002F 更换图片路径\n",[36,58284,58285,58287,58289],{"class":38,"line":34042},[36,58286,57052],{"class":50},[36,58288,70],{"class":42},[36,58290,58291],{"class":50}," sliderData[i].url\n",[36,58293,58294],{"class":38,"line":34048},[36,58295,58296],{"class":124},"      \u002F\u002F 把文字写到p里面\n",[36,58298,58299,58301,58303],{"class":38,"line":34054},[36,58300,57062],{"class":50},[36,58302,70],{"class":42},[36,58304,58305],{"class":50}," sliderData[i].title\n",[36,58307,58308],{"class":38,"line":34060},[36,58309,58310],{"class":124},"      \u002F\u002F 小圆点\n",[36,58312,58313],{"class":38,"line":34066},[36,58314,58315],{"class":124},"      \u002F\u002F 先删除以前的active\n",[36,58317,58318],{"class":38,"line":34072},[36,58319,58320],{"class":124},"      \u002F\u002F 只让当前li添加active\n",[36,58322,58323,58325,58327,58329,58332,58335,58338,58340,58342],{"class":38,"line":34078},[36,58324,57102],{"class":50},[36,58326,55730],{"class":46},[36,58328,222],{"class":50},[36,58330,58331],{"class":110},"'.slider-footer .activate'",[36,58333,58334],{"class":50},").classList.",[36,58336,58337],{"class":46},"remove",[36,58339,222],{"class":50},[36,58341,57120],{"class":110},[36,58343,1680],{"class":50},[36,58345,58346,58348,58350,58352,58355,58357,58359,58361,58364,58366,58368,58370,58372],{"class":38,"line":34084},[36,58347,57102],{"class":50},[36,58349,55730],{"class":46},[36,58351,222],{"class":50},[36,58353,58354],{"class":110},"`.slider-footer ul li:nth-child(${",[36,58356,2108],{"class":50},[36,58358,46897],{"class":42},[36,58360,26449],{"class":73},[36,58362,58363],{"class":110},"})`",[36,58365,58334],{"class":50},[36,58367,6822],{"class":46},[36,58369,222],{"class":50},[36,58371,57120],{"class":110},[36,58373,1680],{"class":50},[36,58375,58376],{"class":38,"line":34104},[36,58377,58],{"emptyLinePlaceholder":57},[36,58379,58380,58382,58384],{"class":38,"line":34110},[36,58381,55866],{"class":50},[36,58383,7889],{"class":73},[36,58385,1680],{"class":50},[36,58387,58388],{"class":38,"line":34126},[36,58389,58],{"emptyLinePlaceholder":57},[36,58391,58392,58394,58396],{"class":38,"line":34132},[36,58393,53748],{"class":50},[36,58395,53144],{"class":52631},[36,58397,52638],{"class":50},[36,58399,58400,58402,58404],{"class":38,"line":34146},[36,58401,53116],{"class":50},[36,58403,53131],{"class":52631},[36,58405,52638],{"class":50},[36,58407,58408],{"class":38,"line":34152},[36,58409,58],{"emptyLinePlaceholder":57},[36,58411,58412,58414,58416],{"class":38,"line":34167},[36,58413,53116],{"class":50},[36,58415,51966],{"class":52631},[36,58417,52638],{"class":50},[1645,58419,58421],{"id":58420},"_317-重要知识点","3.1.7 重要知识点",[19,58423,58424,58425],{},"浏览器在渲染文本时， ",[887,58426,58427],{},"没有空格或换行符就没有“断行点”",[19,58429,58430],{},[2992,58431],{"alt":31,"src":58432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58434,58435],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58437,58438],{},[2992,58439],{"alt":31,"src":58440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58442,58443],{},[2992,58444],{"alt":31,"src":58445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58447,58449],{"id":58448},"_32-dom事件基础","3.2 DOM事件基础",[1645,58451,58453],{"id":58452},"_321-事件监听","3.2.1 事件监听",[19,58455,58456],{},[2992,58457],{"alt":31,"src":58458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58460,58461],{},"事件监听有响应的发生",[19,58463,58464],{},[2992,58465],{"alt":31,"src":58466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58468,58469],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58471,58472],{},"对于有名函数,要执行的函数名后边不要加()",[1645,58474,58476],{"id":58475},"_322-随机点名案例","3.2.2 随机点名案例",[26,58478,58480],{"className":51964,"code":58479,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    h2 {\n      text-align: center;\n    }\n\n    .box {\n      width: 600px;\n      margin: 50px auto;\n      display: flex;\n      font-size: 25px;\n      line-height: 40px;\n    }\n\n    .qs {\n\n      width: 450px;\n      height: 40px;\n      color: red;\n\n    }\n\n    .btns {\n      text-align: center;\n    }\n\n    .btns button {\n      width: 120px;\n      height: 35px;\n      margin: 0 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>随机点名\u003C\u002Fh2>\n  \u003Cdiv class=\"box\">\n    \u003Cspan>名字是：\u003C\u002Fspan>\n    \u003Cdiv class=\"qs\">这里显示姓名\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"btns\">\n    \u003Cbutton class=\"start\">开始\u003C\u002Fbutton>\n    \u003Cbutton class=\"end\">结束\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003Cscript>\n    \u002F\u002F 数据数组\n    const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']\n    const qs = document.querySelector('.qs')\n    \u002F\u002F 1.业务1.开始按钮模块\n    const start = document.querySelector('.start')\n    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n    let timerId = 0\n    \u002F\u002F 随机号要全局变量\n    let random = 0\n    \u002F\u002F 1.1 添加点击事件\n    start.addEventListener('click', function () {\n      timerId = setInterval(function () {\n        \u002F\u002F 随机数\n        random = parseInt(Math.random() * arr.length)\n        qs.innerHTML = arr[random]\n      }, 35)\n      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n      if (arr.length === 1) {\n        \u002F\u002F start.disabled = true\n        \u002F\u002F end.disabled = true\n        \u002F\u002F 可以合起来写\n        start.disabled = end.disabled = true\n      }\n    })\n    \u002F\u002F 1.2 关闭按钮模块\n    const end = document.querySelector('.end')\n    end.addEventListener('click', function () {\n      clearInterval(timerId)\n      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n      arr.splice(random, 1)\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,58481,58482,58492,58506,58510,58518,58532,58552,58564,58572,58578,58588,58598,58602,58606,58613,58624,58628,58632,58638,58650,58664,58674,58686,58699,58703,58707,58714,58718,58731,58743,58755,58759,58763,58767,58774,58784,58788,58792,58801,58813,58825,58840,58844,58852,58860,58864,58872,58885,58899,58912,58932,58940,58955,58975,58995,59003,59007,59015,59020,59056,59076,59081,59100,59105,59116,59121,59132,59137,59156,59171,59176,59202,59212,59221,59226,59242,59247,59252,59257,59272,59276,59280,59285,59304,59321,59329,59334,59349,59353,59357,59365,59373,59377],{"__ignoreMap":31},[36,58483,58484,58486,58488,58490],{"class":38,"line":39},[36,58485,52628],{"class":50},[36,58487,52632],{"class":52631},[36,58489,52635],{"class":46},[36,58491,52638],{"class":50},[36,58493,58494,58496,58498,58500,58502,58504],{"class":38,"line":54},[36,58495,2577],{"class":50},[36,58497,51966],{"class":52631},[36,58499,52647],{"class":46},[36,58501,70],{"class":50},[36,58503,52652],{"class":110},[36,58505,52638],{"class":50},[36,58507,58508],{"class":38,"line":61},[36,58509,58],{"emptyLinePlaceholder":57},[36,58511,58512,58514,58516],{"class":38,"line":80},[36,58513,2577],{"class":50},[36,58515,52665],{"class":52631},[36,58517,52638],{"class":50},[36,58519,58520,58522,58524,58526,58528,58530],{"class":38,"line":96},[36,58521,53475],{"class":50},[36,58523,52675],{"class":52631},[36,58525,52678],{"class":46},[36,58527,70],{"class":50},[36,58529,52683],{"class":110},[36,58531,52638],{"class":50},[36,58533,58534,58536,58538,58540,58542,58544,58546,58548,58550],{"class":38,"line":101},[36,58535,53475],{"class":50},[36,58537,52675],{"class":52631},[36,58539,16249],{"class":46},[36,58541,70],{"class":50},[36,58543,52722],{"class":110},[36,58545,52702],{"class":46},[36,58547,70],{"class":50},[36,58549,52729],{"class":110},[36,58551,52638],{"class":50},[36,58553,58554,58556,58558,58560,58562],{"class":38,"line":128},[36,58555,53475],{"class":50},[36,58557,52738],{"class":52631},[36,58559,52741],{"class":50},[36,58561,52738],{"class":52631},[36,58563,52638],{"class":50},[36,58565,58566,58568,58570],{"class":38,"line":149},[36,58567,53475],{"class":50},[36,58569,1592],{"class":52631},[36,58571,52638],{"class":50},[36,58573,58574,58576],{"class":38,"line":154},[36,58575,569],{"class":52631},[36,58577,16901],{"class":50},[36,58579,58580,58582,58584,58586],{"class":38,"line":167},[36,58581,56037],{"class":73},[36,58583,52768],{"class":50},[36,58585,1859],{"class":73},[36,58587,77],{"class":50},[36,58589,58590,58592,58594,58596],{"class":38,"line":172},[36,58591,56026],{"class":73},[36,58593,52768],{"class":50},[36,58595,1859],{"class":73},[36,58597,77],{"class":50},[36,58599,58600],{"class":38,"line":192},[36,58601,3693],{"class":50},[36,58603,58604],{"class":38,"line":211},[36,58605,58],{"emptyLinePlaceholder":57},[36,58607,58608,58611],{"class":38,"line":216},[36,58609,58610],{"class":52631},"    h2",[36,58612,16901],{"class":50},[36,58614,58615,58618,58620,58622],{"class":38,"line":231},[36,58616,58617],{"class":73},"      text-align",[36,58619,52768],{"class":50},[36,58621,52923],{"class":73},[36,58623,77],{"class":50},[36,58625,58626],{"class":38,"line":236},[36,58627,3693],{"class":50},[36,58629,58630],{"class":38,"line":247},[36,58631,58],{"emptyLinePlaceholder":57},[36,58633,58634,58636],{"class":38,"line":637},[36,58635,56083],{"class":46},[36,58637,16901],{"class":50},[36,58639,58640,58642,58644,58646,58648],{"class":38,"line":646},[36,58641,56102],{"class":73},[36,58643,52768],{"class":50},[36,58645,3069],{"class":73},[36,58647,52823],{"class":42},[36,58649,77],{"class":50},[36,58651,58652,58654,58656,58658,58660,58662],{"class":38,"line":655},[36,58653,56037],{"class":73},[36,58655,52768],{"class":50},[36,58657,2323],{"class":73},[36,58659,52823],{"class":42},[36,58661,52887],{"class":73},[36,58663,77],{"class":50},[36,58665,58666,58668,58670,58672],{"class":38,"line":660},[36,58667,56340],{"class":73},[36,58669,52768],{"class":50},[36,58671,52808],{"class":73},[36,58673,77],{"class":50},[36,58675,58676,58678,58680,58682,58684],{"class":38,"line":665},[36,58677,56253],{"class":73},[36,58679,52768],{"class":50},[36,58681,2492],{"class":73},[36,58683,52823],{"class":42},[36,58685,77],{"class":50},[36,58687,58688,58691,58693,58695,58697],{"class":38,"line":674},[36,58689,58690],{"class":73},"      line-height",[36,58692,52768],{"class":50},[36,58694,2068],{"class":73},[36,58696,52823],{"class":42},[36,58698,77],{"class":50},[36,58700,58701],{"class":38,"line":679},[36,58702,3693],{"class":50},[36,58704,58705],{"class":38,"line":692},[36,58706,58],{"emptyLinePlaceholder":57},[36,58708,58709,58712],{"class":38,"line":705},[36,58710,58711],{"class":46},"    .qs",[36,58713,16901],{"class":50},[36,58715,58716],{"class":38,"line":710},[36,58717,58],{"emptyLinePlaceholder":57},[36,58719,58720,58722,58724,58727,58729],{"class":38,"line":722},[36,58721,56102],{"class":73},[36,58723,52768],{"class":50},[36,58725,58726],{"class":73},"450",[36,58728,52823],{"class":42},[36,58730,77],{"class":50},[36,58732,58733,58735,58737,58739,58741],{"class":38,"line":750},[36,58734,56116],{"class":73},[36,58736,52768],{"class":50},[36,58738,2068],{"class":73},[36,58740,52823],{"class":42},[36,58742,77],{"class":50},[36,58744,58745,58748,58750,58753],{"class":38,"line":755},[36,58746,58747],{"class":73},"      color",[36,58749,52768],{"class":50},[36,58751,58752],{"class":73},"red",[36,58754,77],{"class":50},[36,58756,58757],{"class":38,"line":777},[36,58758,58],{"emptyLinePlaceholder":57},[36,58760,58761],{"class":38,"line":802},[36,58762,3693],{"class":50},[36,58764,58765],{"class":38,"line":807},[36,58766,58],{"emptyLinePlaceholder":57},[36,58768,58769,58772],{"class":38,"line":818},[36,58770,58771],{"class":46},"    .btns",[36,58773,16901],{"class":50},[36,58775,58776,58778,58780,58782],{"class":38,"line":843},[36,58777,58617],{"class":73},[36,58779,52768],{"class":50},[36,58781,52923],{"class":73},[36,58783,77],{"class":50},[36,58785,58786],{"class":38,"line":848},[36,58787,3693],{"class":50},[36,58789,58790],{"class":38,"line":859},[36,58791,58],{"emptyLinePlaceholder":57},[36,58793,58794,58796,58799],{"class":38,"line":864},[36,58795,58771],{"class":46},[36,58797,58798],{"class":52631}," button",[36,58800,16901],{"class":50},[36,58802,58803,58805,58807,58809,58811],{"class":38,"line":873},[36,58804,56102],{"class":73},[36,58806,52768],{"class":50},[36,58808,2484],{"class":73},[36,58810,52823],{"class":42},[36,58812,77],{"class":50},[36,58814,58815,58817,58819,58821,58823],{"class":38,"line":9454},[36,58816,56116],{"class":73},[36,58818,52768],{"class":50},[36,58820,1941],{"class":73},[36,58822,52823],{"class":42},[36,58824,77],{"class":50},[36,58826,58827,58829,58831,58833,58836,58838],{"class":38,"line":9481},[36,58828,56037],{"class":73},[36,58830,52768],{"class":50},[36,58832,1859],{"class":73},[36,58834,58835],{"class":73}," 50",[36,58837,52823],{"class":42},[36,58839,77],{"class":50},[36,58841,58842],{"class":38,"line":9486},[36,58843,3693],{"class":50},[36,58845,58846,58848,58850],{"class":38,"line":9492},[36,58847,53748],{"class":50},[36,58849,1592],{"class":52631},[36,58851,52638],{"class":50},[36,58853,58854,58856,58858],{"class":38,"line":9504},[36,58855,53116],{"class":50},[36,58857,52665],{"class":52631},[36,58859,52638],{"class":50},[36,58861,58862],{"class":38,"line":9516},[36,58863,58],{"emptyLinePlaceholder":57},[36,58865,58866,58868,58870],{"class":38,"line":9528},[36,58867,2577],{"class":50},[36,58869,53131],{"class":52631},[36,58871,52638],{"class":50},[36,58873,58874,58876,58878,58881,58883],{"class":38,"line":11184},[36,58875,53475],{"class":50},[36,58877,14],{"class":52631},[36,58879,58880],{"class":50},">随机点名\u003C\u002F",[36,58882,14],{"class":52631},[36,58884,52638],{"class":50},[36,58886,58887,58889,58891,58893,58895,58897],{"class":38,"line":11209},[36,58888,53475],{"class":50},[36,58890,52942],{"class":52631},[36,58892,54817],{"class":46},[36,58894,70],{"class":50},[36,58896,54822],{"class":110},[36,58898,52638],{"class":50},[36,58900,58901,58903,58905,58908,58910],{"class":38,"line":11232},[36,58902,52672],{"class":50},[36,58904,36],{"class":52631},[36,58906,58907],{"class":50},">名字是：\u003C\u002F",[36,58909,36],{"class":52631},[36,58911,52638],{"class":50},[36,58913,58914,58916,58918,58920,58922,58925,58928,58930],{"class":38,"line":11256},[36,58915,52672],{"class":50},[36,58917,52942],{"class":52631},[36,58919,54817],{"class":46},[36,58921,70],{"class":50},[36,58923,58924],{"class":110},"\"qs\"",[36,58926,58927],{"class":50},">这里显示姓名\u003C\u002F",[36,58929,52942],{"class":52631},[36,58931,52638],{"class":50},[36,58933,58934,58936,58938],{"class":38,"line":11261},[36,58935,53748],{"class":50},[36,58937,52942],{"class":52631},[36,58939,52638],{"class":50},[36,58941,58942,58944,58946,58948,58950,58953],{"class":38,"line":11266},[36,58943,53475],{"class":50},[36,58945,52942],{"class":52631},[36,58947,54817],{"class":46},[36,58949,70],{"class":50},[36,58951,58952],{"class":110},"\"btns\"",[36,58954,52638],{"class":50},[36,58956,58957,58959,58961,58963,58965,58968,58971,58973],{"class":38,"line":11271},[36,58958,52672],{"class":50},[36,58960,55218],{"class":52631},[36,58962,54817],{"class":46},[36,58964,70],{"class":50},[36,58966,58967],{"class":110},"\"start\"",[36,58969,58970],{"class":50},">开始\u003C\u002F",[36,58972,55218],{"class":52631},[36,58974,52638],{"class":50},[36,58976,58977,58979,58981,58983,58985,58988,58991,58993],{"class":38,"line":11280},[36,58978,52672],{"class":50},[36,58980,55218],{"class":52631},[36,58982,54817],{"class":46},[36,58984,70],{"class":50},[36,58986,58987],{"class":110},"\"end\"",[36,58989,58990],{"class":50},">结束\u003C\u002F",[36,58992,55218],{"class":52631},[36,58994,52638],{"class":50},[36,58996,58997,58999,59001],{"class":38,"line":11285},[36,58998,53748],{"class":50},[36,59000,52942],{"class":52631},[36,59002,52638],{"class":50},[36,59004,59005],{"class":38,"line":11291},[36,59006,58],{"emptyLinePlaceholder":57},[36,59008,59009,59011,59013],{"class":38,"line":11312},[36,59010,53475],{"class":50},[36,59012,53144],{"class":52631},[36,59014,52638],{"class":50},[36,59016,59017],{"class":38,"line":11318},[36,59018,59019],{"class":124},"    \u002F\u002F 数据数组\n",[36,59021,59022,59024,59027,59029,59031,59034,59036,59039,59041,59044,59046,59049,59051,59054],{"class":38,"line":11332},[36,59023,1498],{"class":42},[36,59025,59026],{"class":73}," arr",[36,59028,14893],{"class":42},[36,59030,53557],{"class":50},[36,59032,59033],{"class":110},"'马超'",[36,59035,477],{"class":50},[36,59037,59038],{"class":110},"'黄忠'",[36,59040,477],{"class":50},[36,59042,59043],{"class":110},"'赵云'",[36,59045,477],{"class":50},[36,59047,59048],{"class":110},"'关羽'",[36,59050,477],{"class":50},[36,59052,59053],{"class":110},"'张飞'",[36,59055,34577],{"class":50},[36,59057,59058,59060,59063,59065,59067,59069,59071,59074],{"class":38,"line":11338},[36,59059,1498],{"class":42},[36,59061,59062],{"class":73}," qs",[36,59064,14893],{"class":42},[36,59066,55727],{"class":50},[36,59068,55730],{"class":46},[36,59070,222],{"class":50},[36,59072,59073],{"class":110},"'.qs'",[36,59075,1680],{"class":50},[36,59077,59078],{"class":38,"line":11365},[36,59079,59080],{"class":124},"    \u002F\u002F 1.业务1.开始按钮模块\n",[36,59082,59083,59085,59087,59089,59091,59093,59095,59098],{"class":38,"line":11374},[36,59084,1498],{"class":42},[36,59086,5673],{"class":73},[36,59088,14893],{"class":42},[36,59090,55727],{"class":50},[36,59092,55730],{"class":46},[36,59094,222],{"class":50},[36,59096,59097],{"class":110},"'.start'",[36,59099,1680],{"class":50},[36,59101,59102],{"class":38,"line":11380},[36,59103,59104],{"class":124},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[36,59106,59107,59109,59112,59114],{"class":38,"line":11388},[36,59108,53550],{"class":42},[36,59110,59111],{"class":50}," timerId ",[36,59113,70],{"class":42},[36,59115,48664],{"class":73},[36,59117,59118],{"class":38,"line":11393},[36,59119,59120],{"class":124},"    \u002F\u002F 随机号要全局变量\n",[36,59122,59123,59125,59128,59130],{"class":38,"line":17933},[36,59124,53550],{"class":42},[36,59126,59127],{"class":50}," random ",[36,59129,70],{"class":42},[36,59131,48664],{"class":73},[36,59133,59134],{"class":38,"line":17939},[36,59135,59136],{"class":124},"    \u002F\u002F 1.1 添加点击事件\n",[36,59138,59139,59142,59145,59147,59150,59152,59154],{"class":38,"line":17962},[36,59140,59141],{"class":50},"    start.",[36,59143,59144],{"class":46},"addEventListener",[36,59146,222],{"class":50},[36,59148,59149],{"class":110},"'click'",[36,59151,477],{"class":50},[36,59153,55780],{"class":42},[36,59155,55783],{"class":50},[36,59157,59158,59161,59163,59165,59167,59169],{"class":38,"line":17968},[36,59159,59160],{"class":50},"      timerId ",[36,59162,70],{"class":42},[36,59164,55775],{"class":46},[36,59166,222],{"class":50},[36,59168,55780],{"class":42},[36,59170,55783],{"class":50},[36,59172,59173],{"class":38,"line":17991},[36,59174,59175],{"class":124},"        \u002F\u002F 随机数\n",[36,59177,59178,59181,59183,59186,59189,59192,59194,59196,59198,59200],{"class":38,"line":18005},[36,59179,59180],{"class":50},"        random ",[36,59182,70],{"class":42},[36,59184,59185],{"class":46}," parseInt",[36,59187,59188],{"class":50},"(Math.",[36,59190,59191],{"class":46},"random",[36,59193,1133],{"class":50},[36,59195,2122],{"class":42},[36,59197,53296],{"class":50},[36,59199,53299],{"class":73},[36,59201,1680],{"class":50},[36,59203,59204,59207,59209],{"class":38,"line":18025},[36,59205,59206],{"class":50},"        qs.innerHTML ",[36,59208,70],{"class":42},[36,59210,59211],{"class":50}," arr[random]\n",[36,59213,59214,59217,59219],{"class":38,"line":18031},[36,59215,59216],{"class":50},"      }, ",[36,59218,1941],{"class":73},[36,59220,1680],{"class":50},[36,59222,59223],{"class":38,"line":18042},[36,59224,59225],{"class":124},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[36,59227,59228,59230,59233,59235,59238,59240],{"class":38,"line":18065},[36,59229,55811],{"class":42},[36,59231,59232],{"class":50}," (arr.",[36,59234,53299],{"class":73},[36,59236,59237],{"class":42}," ===",[36,59239,26449],{"class":73},[36,59241,485],{"class":50},[36,59243,59244],{"class":38,"line":18087},[36,59245,59246],{"class":124},"        \u002F\u002F start.disabled = true\n",[36,59248,59249],{"class":38,"line":18092},[36,59250,59251],{"class":124},"        \u002F\u002F end.disabled = true\n",[36,59253,59254],{"class":38,"line":18098},[36,59255,59256],{"class":124},"        \u002F\u002F 可以合起来写\n",[36,59258,59259,59262,59264,59267,59269],{"class":38,"line":18112},[36,59260,59261],{"class":50},"        start.disabled ",[36,59263,70],{"class":42},[36,59265,59266],{"class":50}," end.disabled ",[36,59268,70],{"class":42},[36,59270,59271],{"class":73}," true\n",[36,59273,59274],{"class":38,"line":18125},[36,59275,53729],{"class":50},[36,59277,59278],{"class":38,"line":18130},[36,59279,34792],{"class":50},[36,59281,59282],{"class":38,"line":18144},[36,59283,59284],{"class":124},"    \u002F\u002F 1.2 关闭按钮模块\n",[36,59286,59287,59289,59291,59293,59295,59297,59299,59302],{"class":38,"line":18149},[36,59288,1498],{"class":42},[36,59290,5689],{"class":73},[36,59292,14893],{"class":42},[36,59294,55727],{"class":50},[36,59296,55730],{"class":46},[36,59298,222],{"class":50},[36,59300,59301],{"class":110},"'.end'",[36,59303,1680],{"class":50},[36,59305,59306,59309,59311,59313,59315,59317,59319],{"class":38,"line":18155},[36,59307,59308],{"class":50},"    end.",[36,59310,59144],{"class":46},[36,59312,222],{"class":50},[36,59314,59149],{"class":110},[36,59316,477],{"class":50},[36,59318,55780],{"class":42},[36,59320,55783],{"class":50},[36,59322,59323,59326],{"class":38,"line":18160},[36,59324,59325],{"class":46},"      clearInterval",[36,59327,59328],{"class":50},"(timerId)\n",[36,59330,59331],{"class":38,"line":18174},[36,59332,59333],{"class":124},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[36,59335,59336,59339,59342,59345,59347],{"class":38,"line":18179},[36,59337,59338],{"class":50},"      arr.",[36,59340,59341],{"class":46},"splice",[36,59343,59344],{"class":50},"(random, ",[36,59346,1885],{"class":73},[36,59348,1680],{"class":50},[36,59350,59351],{"class":38,"line":18184},[36,59352,34792],{"class":50},[36,59354,59355],{"class":38,"line":18198},[36,59356,58],{"emptyLinePlaceholder":57},[36,59358,59359,59361,59363],{"class":38,"line":18210},[36,59360,53748],{"class":50},[36,59362,53144],{"class":52631},[36,59364,52638],{"class":50},[36,59366,59367,59369,59371],{"class":38,"line":18215},[36,59368,53116],{"class":50},[36,59370,53131],{"class":52631},[36,59372,52638],{"class":50},[36,59374,59375],{"class":38,"line":18228},[36,59376,58],{"emptyLinePlaceholder":57},[36,59378,59379,59381,59383],{"class":38,"line":18233},[36,59380,53116],{"class":50},[36,59382,51966],{"class":52631},[36,59384,52638],{"class":50},[19,59386,59387],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[1645,59389,59391],{"id":59390},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,59393,59395],{"className":51964,"code":59394,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,59396,59397,59407,59421,59425,59433,59447,59467,59479,59487,59491,59499,59511,59519,59538,59555,59571,59581,59585,59593,59601,59605],{"__ignoreMap":31},[36,59398,59399,59401,59403,59405],{"class":38,"line":39},[36,59400,52628],{"class":50},[36,59402,52632],{"class":52631},[36,59404,52635],{"class":46},[36,59406,52638],{"class":50},[36,59408,59409,59411,59413,59415,59417,59419],{"class":38,"line":54},[36,59410,2577],{"class":50},[36,59412,51966],{"class":52631},[36,59414,52647],{"class":46},[36,59416,70],{"class":50},[36,59418,52652],{"class":110},[36,59420,52638],{"class":50},[36,59422,59423],{"class":38,"line":61},[36,59424,58],{"emptyLinePlaceholder":57},[36,59426,59427,59429,59431],{"class":38,"line":80},[36,59428,2577],{"class":50},[36,59430,52665],{"class":52631},[36,59432,52638],{"class":50},[36,59434,59435,59437,59439,59441,59443,59445],{"class":38,"line":96},[36,59436,53475],{"class":50},[36,59438,52675],{"class":52631},[36,59440,52678],{"class":46},[36,59442,70],{"class":50},[36,59444,52683],{"class":110},[36,59446,52638],{"class":50},[36,59448,59449,59451,59453,59455,59457,59459,59461,59463,59465],{"class":38,"line":101},[36,59450,53475],{"class":50},[36,59452,52675],{"class":52631},[36,59454,16249],{"class":46},[36,59456,70],{"class":50},[36,59458,52722],{"class":110},[36,59460,52702],{"class":46},[36,59462,70],{"class":50},[36,59464,52729],{"class":110},[36,59466,52638],{"class":50},[36,59468,59469,59471,59473,59475,59477],{"class":38,"line":128},[36,59470,53475],{"class":50},[36,59472,52738],{"class":52631},[36,59474,52741],{"class":50},[36,59476,52738],{"class":52631},[36,59478,52638],{"class":50},[36,59480,59481,59483,59485],{"class":38,"line":149},[36,59482,53116],{"class":50},[36,59484,52665],{"class":52631},[36,59486,52638],{"class":50},[36,59488,59489],{"class":38,"line":154},[36,59490,58],{"emptyLinePlaceholder":57},[36,59492,59493,59495,59497],{"class":38,"line":167},[36,59494,2577],{"class":50},[36,59496,53131],{"class":52631},[36,59498,52638],{"class":50},[36,59500,59501,59503,59505,59507,59509],{"class":38,"line":172},[36,59502,53475],{"class":50},[36,59504,55218],{"class":52631},[36,59506,55224],{"class":50},[36,59508,55218],{"class":52631},[36,59510,52638],{"class":50},[36,59512,59513,59515,59517],{"class":38,"line":192},[36,59514,53475],{"class":50},[36,59516,53144],{"class":52631},[36,59518,52638],{"class":50},[36,59520,59521,59523,59525,59527,59529,59531,59533,59536],{"class":38,"line":211},[36,59522,1498],{"class":42},[36,59524,55722],{"class":73},[36,59526,14893],{"class":42},[36,59528,55727],{"class":50},[36,59530,55730],{"class":46},[36,59532,222],{"class":50},[36,59534,59535],{"class":110},"'button'",[36,59537,1680],{"class":50},[36,59539,59540,59543,59545,59547,59549,59551,59553],{"class":38,"line":216},[36,59541,59542],{"class":50},"    btn.",[36,59544,59144],{"class":46},[36,59546,222],{"class":50},[36,59548,59149],{"class":110},[36,59550,477],{"class":50},[36,59552,55780],{"class":42},[36,59554,55783],{"class":50},[36,59556,59557,59560,59562,59564,59567,59569],{"class":38,"line":231},[36,59558,59559],{"class":42},"      const",[36,59561,3746],{"class":73},[36,59563,14893],{"class":42},[36,59565,59566],{"class":50}," Math.",[36,59568,59191],{"class":46},[36,59570,3484],{"class":50},[36,59572,59573,59576,59579],{"class":38,"line":236},[36,59574,59575],{"class":50},"      console.",[36,59577,59578],{"class":46},"log",[36,59580,1687],{"class":50},[36,59582,59583],{"class":38,"line":247},[36,59584,34792],{"class":50},[36,59586,59587,59589,59591],{"class":38,"line":637},[36,59588,53748],{"class":50},[36,59590,53144],{"class":52631},[36,59592,52638],{"class":50},[36,59594,59595,59597,59599],{"class":38,"line":646},[36,59596,53116],{"class":50},[36,59598,53131],{"class":52631},[36,59600,52638],{"class":50},[36,59602,59603],{"class":38,"line":655},[36,59604,58],{"emptyLinePlaceholder":57},[36,59606,59607,59609,59611],{"class":38,"line":660},[36,59608,53116],{"class":50},[36,59610,51966],{"class":52631},[36,59612,52638],{"class":50},[19,59614,59615],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59617,59618],{},"常量不可以重新赋值",[19,59620,59621],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,59623,59625],{"className":51964,"code":59624,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      const num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,59626,59627,59637,59651,59655,59663,59677,59697,59709,59717,59721,59729,59741,59749,59760,59778,59794,59808,59816,59820,59828,59836,59840],{"__ignoreMap":31},[36,59628,59629,59631,59633,59635],{"class":38,"line":39},[36,59630,52628],{"class":50},[36,59632,52632],{"class":52631},[36,59634,52635],{"class":46},[36,59636,52638],{"class":50},[36,59638,59639,59641,59643,59645,59647,59649],{"class":38,"line":54},[36,59640,2577],{"class":50},[36,59642,51966],{"class":52631},[36,59644,52647],{"class":46},[36,59646,70],{"class":50},[36,59648,52652],{"class":110},[36,59650,52638],{"class":50},[36,59652,59653],{"class":38,"line":61},[36,59654,58],{"emptyLinePlaceholder":57},[36,59656,59657,59659,59661],{"class":38,"line":80},[36,59658,2577],{"class":50},[36,59660,52665],{"class":52631},[36,59662,52638],{"class":50},[36,59664,59665,59667,59669,59671,59673,59675],{"class":38,"line":96},[36,59666,53475],{"class":50},[36,59668,52675],{"class":52631},[36,59670,52678],{"class":46},[36,59672,70],{"class":50},[36,59674,52683],{"class":110},[36,59676,52638],{"class":50},[36,59678,59679,59681,59683,59685,59687,59689,59691,59693,59695],{"class":38,"line":101},[36,59680,53475],{"class":50},[36,59682,52675],{"class":52631},[36,59684,16249],{"class":46},[36,59686,70],{"class":50},[36,59688,52722],{"class":110},[36,59690,52702],{"class":46},[36,59692,70],{"class":50},[36,59694,52729],{"class":110},[36,59696,52638],{"class":50},[36,59698,59699,59701,59703,59705,59707],{"class":38,"line":128},[36,59700,53475],{"class":50},[36,59702,52738],{"class":52631},[36,59704,52741],{"class":50},[36,59706,52738],{"class":52631},[36,59708,52638],{"class":50},[36,59710,59711,59713,59715],{"class":38,"line":149},[36,59712,53116],{"class":50},[36,59714,52665],{"class":52631},[36,59716,52638],{"class":50},[36,59718,59719],{"class":38,"line":154},[36,59720,58],{"emptyLinePlaceholder":57},[36,59722,59723,59725,59727],{"class":38,"line":167},[36,59724,2577],{"class":50},[36,59726,53131],{"class":52631},[36,59728,52638],{"class":50},[36,59730,59731,59733,59735,59737,59739],{"class":38,"line":172},[36,59732,53475],{"class":50},[36,59734,55218],{"class":52631},[36,59736,55224],{"class":50},[36,59738,55218],{"class":52631},[36,59740,52638],{"class":50},[36,59742,59743,59745,59747],{"class":38,"line":192},[36,59744,53475],{"class":50},[36,59746,53144],{"class":52631},[36,59748,52638],{"class":50},[36,59750,59751,59753,59755,59757],{"class":38,"line":211},[36,59752,1498],{"class":42},[36,59754,3746],{"class":73},[36,59756,14893],{"class":42},[36,59758,59759],{"class":73}," 10\n",[36,59761,59762,59764,59766,59768,59770,59772,59774,59776],{"class":38,"line":216},[36,59763,1498],{"class":42},[36,59765,55722],{"class":73},[36,59767,14893],{"class":42},[36,59769,55727],{"class":50},[36,59771,55730],{"class":46},[36,59773,222],{"class":50},[36,59775,59535],{"class":110},[36,59777,1680],{"class":50},[36,59779,59780,59782,59784,59786,59788,59790,59792],{"class":38,"line":231},[36,59781,59542],{"class":50},[36,59783,59144],{"class":46},[36,59785,222],{"class":50},[36,59787,59149],{"class":110},[36,59789,477],{"class":50},[36,59791,55780],{"class":42},[36,59793,55783],{"class":50},[36,59795,59796,59798,59800,59802,59804,59806],{"class":38,"line":236},[36,59797,59559],{"class":42},[36,59799,3746],{"class":73},[36,59801,14893],{"class":42},[36,59803,59566],{"class":50},[36,59805,59191],{"class":46},[36,59807,3484],{"class":50},[36,59809,59810,59812,59814],{"class":38,"line":247},[36,59811,59575],{"class":50},[36,59813,59578],{"class":46},[36,59815,1687],{"class":50},[36,59817,59818],{"class":38,"line":637},[36,59819,34792],{"class":50},[36,59821,59822,59824,59826],{"class":38,"line":646},[36,59823,53748],{"class":50},[36,59825,53144],{"class":52631},[36,59827,52638],{"class":50},[36,59829,59830,59832,59834],{"class":38,"line":655},[36,59831,53116],{"class":50},[36,59833,53131],{"class":52631},[36,59835,52638],{"class":50},[36,59837,59838],{"class":38,"line":660},[36,59839,58],{"emptyLinePlaceholder":57},[36,59841,59842,59844,59846],{"class":38,"line":665},[36,59843,53116],{"class":50},[36,59845,51966],{"class":52631},[36,59847,52638],{"class":50},[19,59849,59850],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,59852,59854],{"className":51964,"code":59853,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const num = 10\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      num = Math.random()\n      console.log(num)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,59855,59856,59866,59880,59884,59892,59906,59926,59938,59946,59950,59958,59970,59978,59988,60006,60022,60035,60043,60047,60055,60063,60067],{"__ignoreMap":31},[36,59857,59858,59860,59862,59864],{"class":38,"line":39},[36,59859,52628],{"class":50},[36,59861,52632],{"class":52631},[36,59863,52635],{"class":46},[36,59865,52638],{"class":50},[36,59867,59868,59870,59872,59874,59876,59878],{"class":38,"line":54},[36,59869,2577],{"class":50},[36,59871,51966],{"class":52631},[36,59873,52647],{"class":46},[36,59875,70],{"class":50},[36,59877,52652],{"class":110},[36,59879,52638],{"class":50},[36,59881,59882],{"class":38,"line":61},[36,59883,58],{"emptyLinePlaceholder":57},[36,59885,59886,59888,59890],{"class":38,"line":80},[36,59887,2577],{"class":50},[36,59889,52665],{"class":52631},[36,59891,52638],{"class":50},[36,59893,59894,59896,59898,59900,59902,59904],{"class":38,"line":96},[36,59895,53475],{"class":50},[36,59897,52675],{"class":52631},[36,59899,52678],{"class":46},[36,59901,70],{"class":50},[36,59903,52683],{"class":110},[36,59905,52638],{"class":50},[36,59907,59908,59910,59912,59914,59916,59918,59920,59922,59924],{"class":38,"line":101},[36,59909,53475],{"class":50},[36,59911,52675],{"class":52631},[36,59913,16249],{"class":46},[36,59915,70],{"class":50},[36,59917,52722],{"class":110},[36,59919,52702],{"class":46},[36,59921,70],{"class":50},[36,59923,52729],{"class":110},[36,59925,52638],{"class":50},[36,59927,59928,59930,59932,59934,59936],{"class":38,"line":128},[36,59929,53475],{"class":50},[36,59931,52738],{"class":52631},[36,59933,52741],{"class":50},[36,59935,52738],{"class":52631},[36,59937,52638],{"class":50},[36,59939,59940,59942,59944],{"class":38,"line":149},[36,59941,53116],{"class":50},[36,59943,52665],{"class":52631},[36,59945,52638],{"class":50},[36,59947,59948],{"class":38,"line":154},[36,59949,58],{"emptyLinePlaceholder":57},[36,59951,59952,59954,59956],{"class":38,"line":167},[36,59953,2577],{"class":50},[36,59955,53131],{"class":52631},[36,59957,52638],{"class":50},[36,59959,59960,59962,59964,59966,59968],{"class":38,"line":172},[36,59961,53475],{"class":50},[36,59963,55218],{"class":52631},[36,59965,55224],{"class":50},[36,59967,55218],{"class":52631},[36,59969,52638],{"class":50},[36,59971,59972,59974,59976],{"class":38,"line":192},[36,59973,53475],{"class":50},[36,59975,53144],{"class":52631},[36,59977,52638],{"class":50},[36,59979,59980,59982,59984,59986],{"class":38,"line":211},[36,59981,1498],{"class":42},[36,59983,3746],{"class":73},[36,59985,14893],{"class":42},[36,59987,59759],{"class":73},[36,59989,59990,59992,59994,59996,59998,60000,60002,60004],{"class":38,"line":216},[36,59991,1498],{"class":42},[36,59993,55722],{"class":73},[36,59995,14893],{"class":42},[36,59997,55727],{"class":50},[36,59999,55730],{"class":46},[36,60001,222],{"class":50},[36,60003,59535],{"class":110},[36,60005,1680],{"class":50},[36,60007,60008,60010,60012,60014,60016,60018,60020],{"class":38,"line":231},[36,60009,59542],{"class":50},[36,60011,59144],{"class":46},[36,60013,222],{"class":50},[36,60015,59149],{"class":110},[36,60017,477],{"class":50},[36,60019,55780],{"class":42},[36,60021,55783],{"class":50},[36,60023,60024,60027,60029,60031,60033],{"class":38,"line":236},[36,60025,60026],{"class":50},"      num ",[36,60028,70],{"class":42},[36,60030,59566],{"class":50},[36,60032,59191],{"class":46},[36,60034,3484],{"class":50},[36,60036,60037,60039,60041],{"class":38,"line":247},[36,60038,59575],{"class":50},[36,60040,59578],{"class":46},[36,60042,1687],{"class":50},[36,60044,60045],{"class":38,"line":637},[36,60046,34792],{"class":50},[36,60048,60049,60051,60053],{"class":38,"line":646},[36,60050,53748],{"class":50},[36,60052,53144],{"class":52631},[36,60054,52638],{"class":50},[36,60056,60057,60059,60061],{"class":38,"line":655},[36,60058,53116],{"class":50},[36,60060,53131],{"class":52631},[36,60062,52638],{"class":50},[36,60064,60065],{"class":38,"line":660},[36,60066,58],{"emptyLinePlaceholder":57},[36,60068,60069,60071,60073],{"class":38,"line":665},[36,60070,53116],{"class":50},[36,60072,51966],{"class":52631},[36,60074,52638],{"class":50},[19,60076,60077],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[1645,60079,60081],{"id":60080},"_324-事件监听版本","3.2.4 事件监听版本",[19,60083,60084],{},[2992,60085],{"alt":31,"src":60086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60088,60089],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60091,60092],{},"这种方式会覆盖前边的事件监听:",[26,60094,60096],{"className":51964,"code":60095,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.onclick = function () {\n      alert(11)\n    }\n    btn.onclick = function () {\n      alert(22)\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,60097,60098,60108,60122,60126,60134,60148,60168,60180,60188,60192,60200,60212,60220,60238,60252,60263,60267,60279,60289,60293,60301,60309,60313],{"__ignoreMap":31},[36,60099,60100,60102,60104,60106],{"class":38,"line":39},[36,60101,52628],{"class":50},[36,60103,52632],{"class":52631},[36,60105,52635],{"class":46},[36,60107,52638],{"class":50},[36,60109,60110,60112,60114,60116,60118,60120],{"class":38,"line":54},[36,60111,2577],{"class":50},[36,60113,51966],{"class":52631},[36,60115,52647],{"class":46},[36,60117,70],{"class":50},[36,60119,52652],{"class":110},[36,60121,52638],{"class":50},[36,60123,60124],{"class":38,"line":61},[36,60125,58],{"emptyLinePlaceholder":57},[36,60127,60128,60130,60132],{"class":38,"line":80},[36,60129,2577],{"class":50},[36,60131,52665],{"class":52631},[36,60133,52638],{"class":50},[36,60135,60136,60138,60140,60142,60144,60146],{"class":38,"line":96},[36,60137,53475],{"class":50},[36,60139,52675],{"class":52631},[36,60141,52678],{"class":46},[36,60143,70],{"class":50},[36,60145,52683],{"class":110},[36,60147,52638],{"class":50},[36,60149,60150,60152,60154,60156,60158,60160,60162,60164,60166],{"class":38,"line":101},[36,60151,53475],{"class":50},[36,60153,52675],{"class":52631},[36,60155,16249],{"class":46},[36,60157,70],{"class":50},[36,60159,52722],{"class":110},[36,60161,52702],{"class":46},[36,60163,70],{"class":50},[36,60165,52729],{"class":110},[36,60167,52638],{"class":50},[36,60169,60170,60172,60174,60176,60178],{"class":38,"line":128},[36,60171,53475],{"class":50},[36,60173,52738],{"class":52631},[36,60175,52741],{"class":50},[36,60177,52738],{"class":52631},[36,60179,52638],{"class":50},[36,60181,60182,60184,60186],{"class":38,"line":149},[36,60183,53116],{"class":50},[36,60185,52665],{"class":52631},[36,60187,52638],{"class":50},[36,60189,60190],{"class":38,"line":154},[36,60191,58],{"emptyLinePlaceholder":57},[36,60193,60194,60196,60198],{"class":38,"line":167},[36,60195,2577],{"class":50},[36,60197,53131],{"class":52631},[36,60199,52638],{"class":50},[36,60201,60202,60204,60206,60208,60210],{"class":38,"line":172},[36,60203,53475],{"class":50},[36,60205,55218],{"class":52631},[36,60207,55224],{"class":50},[36,60209,55218],{"class":52631},[36,60211,52638],{"class":50},[36,60213,60214,60216,60218],{"class":38,"line":192},[36,60215,53475],{"class":50},[36,60217,53144],{"class":52631},[36,60219,52638],{"class":50},[36,60221,60222,60224,60226,60228,60230,60232,60234,60236],{"class":38,"line":211},[36,60223,1498],{"class":42},[36,60225,55722],{"class":73},[36,60227,14893],{"class":42},[36,60229,55727],{"class":50},[36,60231,55730],{"class":46},[36,60233,222],{"class":50},[36,60235,59535],{"class":110},[36,60237,1680],{"class":50},[36,60239,60240,60242,60245,60247,60250],{"class":38,"line":216},[36,60241,59542],{"class":50},[36,60243,60244],{"class":46},"onclick",[36,60246,14893],{"class":42},[36,60248,60249],{"class":42}," function",[36,60251,55783],{"class":50},[36,60253,60254,60257,60259,60261],{"class":38,"line":231},[36,60255,60256],{"class":46},"      alert",[36,60258,222],{"class":50},[36,60260,2139],{"class":73},[36,60262,1680],{"class":50},[36,60264,60265],{"class":38,"line":236},[36,60266,3693],{"class":50},[36,60268,60269,60271,60273,60275,60277],{"class":38,"line":247},[36,60270,59542],{"class":50},[36,60272,60244],{"class":46},[36,60274,14893],{"class":42},[36,60276,60249],{"class":42},[36,60278,55783],{"class":50},[36,60280,60281,60283,60285,60287],{"class":38,"line":637},[36,60282,60256],{"class":46},[36,60284,222],{"class":50},[36,60286,2417],{"class":73},[36,60288,1680],{"class":50},[36,60290,60291],{"class":38,"line":646},[36,60292,3693],{"class":50},[36,60294,60295,60297,60299],{"class":38,"line":655},[36,60296,53748],{"class":50},[36,60298,53144],{"class":52631},[36,60300,52638],{"class":50},[36,60302,60303,60305,60307],{"class":38,"line":660},[36,60304,53116],{"class":50},[36,60306,53131],{"class":52631},[36,60308,52638],{"class":50},[36,60310,60311],{"class":38,"line":665},[36,60312,58],{"emptyLinePlaceholder":57},[36,60314,60315,60317,60319],{"class":38,"line":674},[36,60316,53116],{"class":50},[36,60318,51966],{"class":52631},[36,60320,52638],{"class":50},[19,60322,60323],{},"只要点击就输出结果为22,前边11被覆盖了",[26,60325,60327],{"className":51964,"code":60326,"language":51966,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[33,60328,60329,60334,60339,60343,60348,60353],{"__ignoreMap":31},[36,60330,60331],{"class":38,"line":39},[36,60332,60333],{"class":50},"  btn.addEventListener('click', function () {\n",[36,60335,60336],{"class":38,"line":54},[36,60337,60338],{"class":50},"      alert(11)\n",[36,60340,60341],{"class":38,"line":61},[36,60342,34792],{"class":50},[36,60344,60345],{"class":38,"line":80},[36,60346,60347],{"class":50},"    btn.addEventListener('click', function () {\n",[36,60349,60350],{"class":38,"line":96},[36,60351,60352],{"class":50},"      alert(22)\n",[36,60354,60355],{"class":38,"line":101},[36,60356,34792],{"class":50},[19,60358,60359],{},"点击第一次输出11,第二次点击为22",[1645,60361,60363],{"id":60362},"_325-事件类型","3.2.5 事件类型",[19,60365,60366],{},[2992,60367],{"alt":31,"src":60368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23327,60370,60372],{"id":60371},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60374,60375],{},"补充知识:",[19,60377,60378],{},"轮播图自动播放模块,可以使用",[19,60380,60381],{},"let timerId = setInterval(function () {",[19,60383,60384],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60386,60387],{},"用js方法模拟进行点击事件,click必须加()",[19,60389,60390],{},"next.click()",[19,60392,60393],{},"}, 1000)",[19,60395,60396],{},[2992,60397],{"alt":31,"src":60398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,60400,60402],{"className":54398,"code":60401,"language":54400,"meta":31,"style":31},"\n\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>轮播图点击切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      box-sizing: border-box;\n    }\n\n    .slider {\n      width: 560px;\n      height: 400px;\n      overflow: hidden;\n    }\n\n    .slider-wrapper {\n      width: 100%;\n      height: 320px;\n    }\n\n    .slider-wrapper img {\n      width: 100%;\n      height: 100%;\n      display: block;\n    }\n\n    .slider-footer {\n      height: 80px;\n      background-color: rgb(100, 67, 68);\n      padding: 12px 12px 0 12px;\n      position: relative;\n    }\n\n    .slider-footer .toggle {\n      position: absolute;\n      right: 0;\n      top: 12px;\n      display: flex;\n    }\n\n    .slider-footer .toggle button {\n      margin-right: 12px;\n      width: 28px;\n      height: 28px;\n      appearance: none;\n      border: none;\n      background: rgba(255, 255, 255, 0.1);\n      color: #fff;\n      border-radius: 4px;\n      cursor: pointer;\n    }\n\n    .slider-footer .toggle button:hover {\n      background: rgba(255, 255, 255, 0.2);\n    }\n\n    .slider-footer p {\n      margin: 0;\n      color: #fff;\n      font-size: 18px;\n      margin-bottom: 10px;\n    }\n\n    .slider-indicator {\n      margin: 0;\n      padding: 0;\n      list-style: none;\n      display: flex;\n      align-items: center;\n    }\n\n    .slider-indicator li {\n      width: 8px;\n      height: 8px;\n      margin: 4px;\n      border-radius: 50%;\n      background: #fff;\n      opacity: 0.4;\n      cursor: pointer;\n    }\n\n    .slider-indicator li.active {\n      width: 12px;\n      height: 12px;\n      opacity: 1;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"slider\">\n    \u003Cdiv class=\"slider-wrapper\">\n      \u003Cimg src=\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\" alt=\"\" \u002F>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"slider-footer\">\n      \u003Cp>对人类来说会不会太超前了？\u003C\u002Fp>\n      \u003Cul class=\"slider-indicator\">\n        \u003Cli class=\"active\">\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n        \u003Cli>\u003C\u002Fli>\n      \u003C\u002Ful>\n      \u003Cdiv class=\"toggle\">\n        \u003Cbutton class=\"prev\">&lt;\u003C\u002Fbutton>\n        \u003Cbutton class=\"next\">&gt;\u003C\u002Fbutton>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. 初始数据\n    const data = [\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n    ]\n    \u002F\u002F 获取元素\n    const img = document.querySelector('.slider-wrapper img')\n    const p = document.querySelector('.slider-footer p')\n    const footer = document.querySelector('.slider-footer')\n    \u002F\u002F 1. 右按钮业务\n    \u002F\u002F 1.1 获取右侧按钮 \n    const next = document.querySelector('.next')\n    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n    \u002F\u002F 1.2 注册点击事件\n\n    next.addEventListener('click', function () {\n      \u002F\u002F console.log(11)\n      i++\n      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n      \u002F\u002F if (i >= 8) {\n      \u002F\u002F   i = 0\n      \u002F\u002F }\n      i = i >= data.length ? 0 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 2. 左侧按钮业务\n    \u002F\u002F 2.1 获取左侧按钮 \n    const prev = document.querySelector('.prev')\n    \u002F\u002F 1.2 注册点击事件\n    prev.addEventListener('click', function () {\n      i--\n      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n      \u002F\u002F if (i \u003C 0) {\n      \u002F\u002F   i = 7\n      \u002F\u002F }\n      i = i \u003C 0 ? data.length - 1 : i\n      \u002F\u002F 1.3 得到对应的对象\n      \u002F\u002F console.log(data[i])\n      \u002F\u002F 调用函数\n      toggle()\n    })\n\n    \u002F\u002F 声明一个渲染的函数作为复用\n    function toggle() {\n      \u002F\u002F 1.4 渲染对应的数据\n      img.src = data[i].url\n      p.innerHTML = data[i].title\n      footer.style.backgroundColor = data[i].color\n      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n      document.querySelector('.slider-indicator .active').classList.remove('active')\n      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n    }\n\n    \u002F\u002F 3. 自动播放模块\n    let timerId = setInterval(function () {\n      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n      next.click()\n    }, 1000)\n\n    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n    const slider = document.querySelector('.slider')\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseenter', function () {\n      \u002F\u002F 停止定时器\n      clearInterval(timerId)\n    })\n\n    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n    \u002F\u002F 注册事件\n    slider.addEventListener('mouseleave', function () {\n      \u002F\u002F 停止定时器\n      if (timerId) clearInterval(timerId)\n      \u002F\u002F 开启定时器\n      timerId = setInterval(function () {\n        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n        next.click()\n      }, 1000)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,60403,60404,60408,60418,60432,60436,60444,60459,60479,60499,60512,60520,60525,60530,60534,60538,60543,60548,60553,60558,60562,60566,60571,60576,60581,60585,60589,60594,60598,60603,60608,60612,60616,60621,60626,60631,60636,60641,60645,60649,60654,60659,60664,60669,60674,60678,60682,60687,60692,60697,60702,60707,60712,60717,60722,60727,60732,60736,60740,60745,60750,60754,60758,60763,60768,60772,60777,60782,60786,60790,60795,60799,60804,60809,60813,60818,60822,60826,60831,60836,60841,60846,60851,60856,60861,60865,60869,60873,60878,60883,60888,60893,60897,60905,60913,60917,60925,60940,60954,60975,60983,60997,61010,61025,61044,61056,61068,61080,61092,61104,61116,61128,61136,61151,61175,61199,61207,61215,61223,61231,61236,61241,61246,61251,61256,61261,61266,61271,61276,61281,61285,61290,61295,61300,61305,61310,61315,61320,61325,61330,61334,61339,61344,61349,61354,61359,61364,61369,61374,61379,61384,61389,61394,61398,61402,61407,61412,61417,61421,61426,61431,61436,61441,61446,61450,61455,61459,61463,61467,61471,61475,61479,61484,61489,61494,61499,61504,61509,61514,61519,61524,61528,61532,61537,61542,61547,61552,61557,61561,61566,61571,61576,61581,61586,61591,61595,61599,61604,61608,61613,61617,61622,61627,61632,61637,61642,61647,61651,61659,61667,61671],{"__ignoreMap":31},[36,60405,60406],{"class":38,"line":39},[36,60407,58],{"emptyLinePlaceholder":57},[36,60409,60410,60412,60414,60416],{"class":38,"line":54},[36,60411,52628],{"class":50},[36,60413,52632],{"class":42},[36,60415,52635],{"class":73},[36,60417,52638],{"class":50},[36,60419,60420,60422,60424,60426,60428,60430],{"class":38,"line":61},[36,60421,2577],{"class":50},[36,60423,51966],{"class":52631},[36,60425,52647],{"class":46},[36,60427,70],{"class":50},[36,60429,52652],{"class":110},[36,60431,52638],{"class":50},[36,60433,60434],{"class":38,"line":80},[36,60435,58],{"emptyLinePlaceholder":57},[36,60437,60438,60440,60442],{"class":38,"line":96},[36,60439,2577],{"class":50},[36,60441,52665],{"class":52631},[36,60443,52638],{"class":50},[36,60445,60446,60448,60450,60452,60454,60456],{"class":38,"line":101},[36,60447,53475],{"class":50},[36,60449,52675],{"class":52631},[36,60451,52678],{"class":46},[36,60453,70],{"class":50},[36,60455,52683],{"class":110},[36,60457,60458],{"class":50}," \u002F>\n",[36,60460,60461,60463,60465,60467,60469,60471,60473,60475,60477],{"class":38,"line":128},[36,60462,53475],{"class":50},[36,60464,52675],{"class":52631},[36,60466,52694],{"class":46},[36,60468,70],{"class":50},[36,60470,52699],{"class":110},[36,60472,52702],{"class":46},[36,60474,70],{"class":50},[36,60476,52707],{"class":110},[36,60478,60458],{"class":50},[36,60480,60481,60483,60485,60487,60489,60491,60493,60495,60497],{"class":38,"line":149},[36,60482,53475],{"class":50},[36,60484,52675],{"class":52631},[36,60486,16249],{"class":46},[36,60488,70],{"class":50},[36,60490,52722],{"class":110},[36,60492,52702],{"class":46},[36,60494,70],{"class":50},[36,60496,52729],{"class":110},[36,60498,60458],{"class":50},[36,60500,60501,60503,60505,60508,60510],{"class":38,"line":154},[36,60502,53475],{"class":50},[36,60504,52738],{"class":52631},[36,60506,60507],{"class":50},">轮播图点击切换\u003C\u002F",[36,60509,52738],{"class":52631},[36,60511,52638],{"class":50},[36,60513,60514,60516,60518],{"class":38,"line":167},[36,60515,53475],{"class":50},[36,60517,1592],{"class":52631},[36,60519,52638],{"class":50},[36,60521,60522],{"class":38,"line":172},[36,60523,60524],{"class":50},"    * {\n",[36,60526,60527],{"class":38,"line":192},[36,60528,60529],{"class":50},"      box-sizing: border-box;\n",[36,60531,60532],{"class":38,"line":211},[36,60533,3693],{"class":50},[36,60535,60536],{"class":38,"line":216},[36,60537,58],{"emptyLinePlaceholder":57},[36,60539,60540],{"class":38,"line":231},[36,60541,60542],{"class":50},"    .slider {\n",[36,60544,60545],{"class":38,"line":236},[36,60546,60547],{"class":50},"      width: 560px;\n",[36,60549,60550],{"class":38,"line":247},[36,60551,60552],{"class":50},"      height: 400px;\n",[36,60554,60555],{"class":38,"line":637},[36,60556,60557],{"class":50},"      overflow: hidden;\n",[36,60559,60560],{"class":38,"line":646},[36,60561,3693],{"class":50},[36,60563,60564],{"class":38,"line":655},[36,60565,58],{"emptyLinePlaceholder":57},[36,60567,60568],{"class":38,"line":660},[36,60569,60570],{"class":50},"    .slider-wrapper {\n",[36,60572,60573],{"class":38,"line":665},[36,60574,60575],{"class":50},"      width: 100%;\n",[36,60577,60578],{"class":38,"line":674},[36,60579,60580],{"class":50},"      height: 320px;\n",[36,60582,60583],{"class":38,"line":679},[36,60584,3693],{"class":50},[36,60586,60587],{"class":38,"line":692},[36,60588,58],{"emptyLinePlaceholder":57},[36,60590,60591],{"class":38,"line":705},[36,60592,60593],{"class":50},"    .slider-wrapper img {\n",[36,60595,60596],{"class":38,"line":710},[36,60597,60575],{"class":50},[36,60599,60600],{"class":38,"line":722},[36,60601,60602],{"class":50},"      height: 100%;\n",[36,60604,60605],{"class":38,"line":750},[36,60606,60607],{"class":50},"      display: block;\n",[36,60609,60610],{"class":38,"line":755},[36,60611,3693],{"class":50},[36,60613,60614],{"class":38,"line":777},[36,60615,58],{"emptyLinePlaceholder":57},[36,60617,60618],{"class":38,"line":802},[36,60619,60620],{"class":50},"    .slider-footer {\n",[36,60622,60623],{"class":38,"line":807},[36,60624,60625],{"class":50},"      height: 80px;\n",[36,60627,60628],{"class":38,"line":818},[36,60629,60630],{"class":50},"      background-color: rgb(100, 67, 68);\n",[36,60632,60633],{"class":38,"line":843},[36,60634,60635],{"class":50},"      padding: 12px 12px 0 12px;\n",[36,60637,60638],{"class":38,"line":848},[36,60639,60640],{"class":50},"      position: relative;\n",[36,60642,60643],{"class":38,"line":859},[36,60644,3693],{"class":50},[36,60646,60647],{"class":38,"line":864},[36,60648,58],{"emptyLinePlaceholder":57},[36,60650,60651],{"class":38,"line":873},[36,60652,60653],{"class":50},"    .slider-footer .toggle {\n",[36,60655,60656],{"class":38,"line":9454},[36,60657,60658],{"class":50},"      position: absolute;\n",[36,60660,60661],{"class":38,"line":9481},[36,60662,60663],{"class":50},"      right: 0;\n",[36,60665,60666],{"class":38,"line":9486},[36,60667,60668],{"class":50},"      top: 12px;\n",[36,60670,60671],{"class":38,"line":9492},[36,60672,60673],{"class":50},"      display: flex;\n",[36,60675,60676],{"class":38,"line":9504},[36,60677,3693],{"class":50},[36,60679,60680],{"class":38,"line":9516},[36,60681,58],{"emptyLinePlaceholder":57},[36,60683,60684],{"class":38,"line":9528},[36,60685,60686],{"class":50},"    .slider-footer .toggle button {\n",[36,60688,60689],{"class":38,"line":11184},[36,60690,60691],{"class":50},"      margin-right: 12px;\n",[36,60693,60694],{"class":38,"line":11209},[36,60695,60696],{"class":50},"      width: 28px;\n",[36,60698,60699],{"class":38,"line":11232},[36,60700,60701],{"class":50},"      height: 28px;\n",[36,60703,60704],{"class":38,"line":11256},[36,60705,60706],{"class":50},"      appearance: none;\n",[36,60708,60709],{"class":38,"line":11261},[36,60710,60711],{"class":50},"      border: none;\n",[36,60713,60714],{"class":38,"line":11266},[36,60715,60716],{"class":50},"      background: rgba(255, 255, 255, 0.1);\n",[36,60718,60719],{"class":38,"line":11271},[36,60720,60721],{"class":50},"      color: #fff;\n",[36,60723,60724],{"class":38,"line":11280},[36,60725,60726],{"class":50},"      border-radius: 4px;\n",[36,60728,60729],{"class":38,"line":11285},[36,60730,60731],{"class":50},"      cursor: pointer;\n",[36,60733,60734],{"class":38,"line":11291},[36,60735,3693],{"class":50},[36,60737,60738],{"class":38,"line":11312},[36,60739,58],{"emptyLinePlaceholder":57},[36,60741,60742],{"class":38,"line":11318},[36,60743,60744],{"class":50},"    .slider-footer .toggle button:hover {\n",[36,60746,60747],{"class":38,"line":11332},[36,60748,60749],{"class":50},"      background: rgba(255, 255, 255, 0.2);\n",[36,60751,60752],{"class":38,"line":11338},[36,60753,3693],{"class":50},[36,60755,60756],{"class":38,"line":11365},[36,60757,58],{"emptyLinePlaceholder":57},[36,60759,60760],{"class":38,"line":11374},[36,60761,60762],{"class":50},"    .slider-footer p {\n",[36,60764,60765],{"class":38,"line":11380},[36,60766,60767],{"class":50},"      margin: 0;\n",[36,60769,60770],{"class":38,"line":11388},[36,60771,60721],{"class":50},[36,60773,60774],{"class":38,"line":11393},[36,60775,60776],{"class":50},"      font-size: 18px;\n",[36,60778,60779],{"class":38,"line":17933},[36,60780,60781],{"class":50},"      margin-bottom: 10px;\n",[36,60783,60784],{"class":38,"line":17939},[36,60785,3693],{"class":50},[36,60787,60788],{"class":38,"line":17962},[36,60789,58],{"emptyLinePlaceholder":57},[36,60791,60792],{"class":38,"line":17968},[36,60793,60794],{"class":50},"    .slider-indicator {\n",[36,60796,60797],{"class":38,"line":17991},[36,60798,60767],{"class":50},[36,60800,60801],{"class":38,"line":18005},[36,60802,60803],{"class":50},"      padding: 0;\n",[36,60805,60806],{"class":38,"line":18025},[36,60807,60808],{"class":50},"      list-style: none;\n",[36,60810,60811],{"class":38,"line":18031},[36,60812,60673],{"class":50},[36,60814,60815],{"class":38,"line":18042},[36,60816,60817],{"class":50},"      align-items: center;\n",[36,60819,60820],{"class":38,"line":18065},[36,60821,3693],{"class":50},[36,60823,60824],{"class":38,"line":18087},[36,60825,58],{"emptyLinePlaceholder":57},[36,60827,60828],{"class":38,"line":18092},[36,60829,60830],{"class":50},"    .slider-indicator li {\n",[36,60832,60833],{"class":38,"line":18098},[36,60834,60835],{"class":50},"      width: 8px;\n",[36,60837,60838],{"class":38,"line":18112},[36,60839,60840],{"class":50},"      height: 8px;\n",[36,60842,60843],{"class":38,"line":18125},[36,60844,60845],{"class":50},"      margin: 4px;\n",[36,60847,60848],{"class":38,"line":18130},[36,60849,60850],{"class":50},"      border-radius: 50%;\n",[36,60852,60853],{"class":38,"line":18144},[36,60854,60855],{"class":50},"      background: #fff;\n",[36,60857,60858],{"class":38,"line":18149},[36,60859,60860],{"class":50},"      opacity: 0.4;\n",[36,60862,60863],{"class":38,"line":18155},[36,60864,60731],{"class":50},[36,60866,60867],{"class":38,"line":18160},[36,60868,3693],{"class":50},[36,60870,60871],{"class":38,"line":18174},[36,60872,58],{"emptyLinePlaceholder":57},[36,60874,60875],{"class":38,"line":18179},[36,60876,60877],{"class":50},"    .slider-indicator li.active {\n",[36,60879,60880],{"class":38,"line":18184},[36,60881,60882],{"class":50},"      width: 12px;\n",[36,60884,60885],{"class":38,"line":18198},[36,60886,60887],{"class":50},"      height: 12px;\n",[36,60889,60890],{"class":38,"line":18210},[36,60891,60892],{"class":50},"      opacity: 1;\n",[36,60894,60895],{"class":38,"line":18215},[36,60896,3693],{"class":50},[36,60898,60899,60901,60903],{"class":38,"line":18228},[36,60900,53748],{"class":50},[36,60902,1592],{"class":52631},[36,60904,52638],{"class":50},[36,60906,60907,60909,60911],{"class":38,"line":18233},[36,60908,53116],{"class":50},[36,60910,52665],{"class":52631},[36,60912,52638],{"class":50},[36,60914,60915],{"class":38,"line":18238},[36,60916,58],{"emptyLinePlaceholder":57},[36,60918,60919,60921,60923],{"class":38,"line":18243},[36,60920,2577],{"class":50},[36,60922,53131],{"class":52631},[36,60924,52638],{"class":50},[36,60926,60927,60929,60931,60933,60935,60938],{"class":38,"line":18256},[36,60928,53475],{"class":50},[36,60930,52942],{"class":52631},[36,60932,54817],{"class":46},[36,60934,70],{"class":50},[36,60936,60937],{"class":110},"\"slider\"",[36,60939,52638],{"class":50},[36,60941,60942,60944,60946,60948,60950,60952],{"class":38,"line":18261},[36,60943,52672],{"class":50},[36,60945,52942],{"class":52631},[36,60947,54817],{"class":46},[36,60949,70],{"class":50},[36,60951,56558],{"class":110},[36,60953,52638],{"class":50},[36,60955,60956,60958,60960,60962,60964,60967,60969,60971,60973],{"class":38,"line":33964},[36,60957,56565],{"class":50},[36,60959,2992],{"class":52631},[36,60961,56570],{"class":46},[36,60963,70],{"class":50},[36,60965,60966],{"class":110},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,60968,56578],{"class":46},[36,60970,70],{"class":50},[36,60972,9126],{"class":110},[36,60974,60458],{"class":50},[36,60976,60977,60979,60981],{"class":38,"line":33970},[36,60978,53107],{"class":50},[36,60980,52942],{"class":52631},[36,60982,52638],{"class":50},[36,60984,60985,60987,60989,60991,60993,60995],{"class":38,"line":33976},[36,60986,52672],{"class":50},[36,60988,52942],{"class":52631},[36,60990,54817],{"class":46},[36,60992,70],{"class":50},[36,60994,56605],{"class":110},[36,60996,52638],{"class":50},[36,60998,60999,61001,61003,61006,61008],{"class":38,"line":33982},[36,61000,56565],{"class":50},[36,61002,19],{"class":52631},[36,61004,61005],{"class":50},">对人类来说会不会太超前了？\u003C\u002F",[36,61007,19],{"class":52631},[36,61009,52638],{"class":50},[36,61011,61012,61014,61016,61018,61020,61023],{"class":38,"line":33988},[36,61013,56565],{"class":50},[36,61015,2674],{"class":52631},[36,61017,54817],{"class":46},[36,61019,70],{"class":50},[36,61021,61022],{"class":110},"\"slider-indicator\"",[36,61024,52638],{"class":50},[36,61026,61027,61029,61031,61033,61035,61038,61040,61042],{"class":38,"line":33999},[36,61028,56633],{"class":50},[36,61030,259],{"class":52631},[36,61032,54817],{"class":46},[36,61034,70],{"class":50},[36,61036,61037],{"class":110},"\"active\"",[36,61039,56645],{"class":50},[36,61041,259],{"class":52631},[36,61043,52638],{"class":50},[36,61045,61046,61048,61050,61052,61054],{"class":38,"line":34005},[36,61047,56633],{"class":50},[36,61049,259],{"class":52631},[36,61051,56645],{"class":50},[36,61053,259],{"class":52631},[36,61055,52638],{"class":50},[36,61057,61058,61060,61062,61064,61066],{"class":38,"line":34025},[36,61059,56633],{"class":50},[36,61061,259],{"class":52631},[36,61063,56645],{"class":50},[36,61065,259],{"class":52631},[36,61067,52638],{"class":50},[36,61069,61070,61072,61074,61076,61078],{"class":38,"line":34031},[36,61071,56633],{"class":50},[36,61073,259],{"class":52631},[36,61075,56645],{"class":50},[36,61077,259],{"class":52631},[36,61079,52638],{"class":50},[36,61081,61082,61084,61086,61088,61090],{"class":38,"line":34042},[36,61083,56633],{"class":50},[36,61085,259],{"class":52631},[36,61087,56645],{"class":50},[36,61089,259],{"class":52631},[36,61091,52638],{"class":50},[36,61093,61094,61096,61098,61100,61102],{"class":38,"line":34048},[36,61095,56633],{"class":50},[36,61097,259],{"class":52631},[36,61099,56645],{"class":50},[36,61101,259],{"class":52631},[36,61103,52638],{"class":50},[36,61105,61106,61108,61110,61112,61114],{"class":38,"line":34054},[36,61107,56633],{"class":50},[36,61109,259],{"class":52631},[36,61111,56645],{"class":50},[36,61113,259],{"class":52631},[36,61115,52638],{"class":50},[36,61117,61118,61120,61122,61124,61126],{"class":38,"line":34060},[36,61119,56633],{"class":50},[36,61121,259],{"class":52631},[36,61123,56645],{"class":50},[36,61125,259],{"class":52631},[36,61127,52638],{"class":50},[36,61129,61130,61132,61134],{"class":38,"line":34066},[36,61131,56738],{"class":50},[36,61133,2674],{"class":52631},[36,61135,52638],{"class":50},[36,61137,61138,61140,61142,61144,61146,61149],{"class":38,"line":34072},[36,61139,56565],{"class":50},[36,61141,52942],{"class":52631},[36,61143,54817],{"class":46},[36,61145,70],{"class":50},[36,61147,61148],{"class":110},"\"toggle\"",[36,61150,52638],{"class":50},[36,61152,61153,61155,61157,61159,61161,61164,61166,61169,61171,61173],{"class":38,"line":34078},[36,61154,56633],{"class":50},[36,61156,55218],{"class":52631},[36,61158,54817],{"class":46},[36,61160,70],{"class":50},[36,61162,61163],{"class":110},"\"prev\"",[36,61165,2627],{"class":50},[36,61167,61168],{"class":73},"&lt;",[36,61170,53116],{"class":50},[36,61172,55218],{"class":52631},[36,61174,52638],{"class":50},[36,61176,61177,61179,61181,61183,61185,61188,61190,61193,61195,61197],{"class":38,"line":34084},[36,61178,56633],{"class":50},[36,61180,55218],{"class":52631},[36,61182,54817],{"class":46},[36,61184,70],{"class":50},[36,61186,61187],{"class":110},"\"next\"",[36,61189,2627],{"class":50},[36,61191,61192],{"class":73},"&gt;",[36,61194,53116],{"class":50},[36,61196,55218],{"class":52631},[36,61198,52638],{"class":50},[36,61200,61201,61203,61205],{"class":38,"line":34104},[36,61202,56738],{"class":50},[36,61204,52942],{"class":52631},[36,61206,52638],{"class":50},[36,61208,61209,61211,61213],{"class":38,"line":34110},[36,61210,53107],{"class":50},[36,61212,52942],{"class":52631},[36,61214,52638],{"class":50},[36,61216,61217,61219,61221],{"class":38,"line":34126},[36,61218,53748],{"class":50},[36,61220,52942],{"class":52631},[36,61222,52638],{"class":50},[36,61224,61225,61227,61229],{"class":38,"line":34132},[36,61226,53475],{"class":50},[36,61228,53144],{"class":52631},[36,61230,52638],{"class":50},[36,61232,61233],{"class":38,"line":34146},[36,61234,61235],{"class":50},"    \u002F\u002F 1. 初始数据\n",[36,61237,61238],{"class":38,"line":34152},[36,61239,61240],{"class":50},"    const data = [\n",[36,61242,61243],{"class":38,"line":34167},[36,61244,61245],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[36,61247,61248],{"class":38,"line":34173},[36,61249,61250],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[36,61252,61253],{"class":38,"line":34182},[36,61254,61255],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[36,61257,61258],{"class":38,"line":34188},[36,61259,61260],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[36,61262,61263],{"class":38,"line":34197},[36,61264,61265],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[36,61267,61268],{"class":38,"line":34203},[36,61269,61270],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[36,61272,61273],{"class":38,"line":34209},[36,61274,61275],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[36,61277,61278],{"class":38,"line":34218},[36,61279,61280],{"class":50},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[36,61282,61283],{"class":38,"line":34224},[36,61284,54440],{"class":50},[36,61286,61287],{"class":38,"line":34235},[36,61288,61289],{"class":50},"    \u002F\u002F 获取元素\n",[36,61291,61292],{"class":38,"line":34241},[36,61293,61294],{"class":50},"    const img = document.querySelector('.slider-wrapper img')\n",[36,61296,61297],{"class":38,"line":34260},[36,61298,61299],{"class":50},"    const p = document.querySelector('.slider-footer p')\n",[36,61301,61302],{"class":38,"line":34266},[36,61303,61304],{"class":50},"    const footer = document.querySelector('.slider-footer')\n",[36,61306,61307],{"class":38,"line":34277},[36,61308,61309],{"class":50},"    \u002F\u002F 1. 右按钮业务\n",[36,61311,61312],{"class":38,"line":34283},[36,61313,61314],{"class":50},"    \u002F\u002F 1.1 获取右侧按钮 \n",[36,61316,61317],{"class":38,"line":34303},[36,61318,61319],{"class":50},"    const next = document.querySelector('.next')\n",[36,61321,61322],{"class":38,"line":34319},[36,61323,61324],{"class":50},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[36,61326,61327],{"class":38,"line":34325},[36,61328,61329],{"class":50},"    \u002F\u002F 1.2 注册点击事件\n",[36,61331,61332],{"class":38,"line":34339},[36,61333,58],{"emptyLinePlaceholder":57},[36,61335,61336],{"class":38,"line":34345},[36,61337,61338],{"class":50},"    next.addEventListener('click', function () {\n",[36,61340,61341],{"class":38,"line":34351},[36,61342,61343],{"class":50},"      \u002F\u002F console.log(11)\n",[36,61345,61346],{"class":38,"line":34362},[36,61347,61348],{"class":50},"      i++\n",[36,61350,61351],{"class":38,"line":34368},[36,61352,61353],{"class":50},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[36,61355,61356],{"class":38,"line":34374},[36,61357,61358],{"class":50},"      \u002F\u002F if (i >= 8) {\n",[36,61360,61361],{"class":38,"line":34384},[36,61362,61363],{"class":50},"      \u002F\u002F   i = 0\n",[36,61365,61366],{"class":38,"line":34390},[36,61367,61368],{"class":50},"      \u002F\u002F }\n",[36,61370,61371],{"class":38,"line":34401},[36,61372,61373],{"class":50},"      i = i >= data.length ? 0 : i\n",[36,61375,61376],{"class":38,"line":34407},[36,61377,61378],{"class":50},"      \u002F\u002F 1.3 得到对应的对象\n",[36,61380,61381],{"class":38,"line":34417},[36,61382,61383],{"class":50},"      \u002F\u002F console.log(data[i])\n",[36,61385,61386],{"class":38,"line":34422},[36,61387,61388],{"class":50},"      \u002F\u002F 调用函数\n",[36,61390,61391],{"class":38,"line":34428},[36,61392,61393],{"class":50},"      toggle()\n",[36,61395,61396],{"class":38,"line":34477},[36,61397,34792],{"class":50},[36,61399,61400],{"class":38,"line":34524},[36,61401,58],{"emptyLinePlaceholder":57},[36,61403,61404],{"class":38,"line":34529},[36,61405,61406],{"class":50},"    \u002F\u002F 2. 左侧按钮业务\n",[36,61408,61409],{"class":38,"line":34535},[36,61410,61411],{"class":50},"    \u002F\u002F 2.1 获取左侧按钮 \n",[36,61413,61414],{"class":38,"line":34554},[36,61415,61416],{"class":50},"    const prev = document.querySelector('.prev')\n",[36,61418,61419],{"class":38,"line":34560},[36,61420,61329],{"class":50},[36,61422,61423],{"class":38,"line":34580},[36,61424,61425],{"class":50},"    prev.addEventListener('click', function () {\n",[36,61427,61428],{"class":38,"line":34586},[36,61429,61430],{"class":50},"      i--\n",[36,61432,61433],{"class":38,"line":34592},[36,61434,61435],{"class":50},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[36,61437,61438],{"class":38,"line":34602},[36,61439,61440],{"class":50},"      \u002F\u002F if (i \u003C 0) {\n",[36,61442,61443],{"class":38,"line":34607},[36,61444,61445],{"class":50},"      \u002F\u002F   i = 7\n",[36,61447,61448],{"class":38,"line":34613},[36,61449,61368],{"class":50},[36,61451,61452],{"class":38,"line":34629},[36,61453,61454],{"class":50},"      i = i \u003C 0 ? data.length - 1 : i\n",[36,61456,61457],{"class":38,"line":34674},[36,61458,61378],{"class":50},[36,61460,61461],{"class":38,"line":34680},[36,61462,61383],{"class":50},[36,61464,61465],{"class":38,"line":34686},[36,61466,61388],{"class":50},[36,61468,61469],{"class":38,"line":34692},[36,61470,61393],{"class":50},[36,61472,61473],{"class":38,"line":34703},[36,61474,34792],{"class":50},[36,61476,61477],{"class":38,"line":34709},[36,61478,58],{"emptyLinePlaceholder":57},[36,61480,61481],{"class":38,"line":34715},[36,61482,61483],{"class":50},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[36,61485,61486],{"class":38,"line":34721},[36,61487,61488],{"class":50},"    function toggle() {\n",[36,61490,61491],{"class":38,"line":34739},[36,61492,61493],{"class":50},"      \u002F\u002F 1.4 渲染对应的数据\n",[36,61495,61496],{"class":38,"line":34753},[36,61497,61498],{"class":50},"      img.src = data[i].url\n",[36,61500,61501],{"class":38,"line":34762},[36,61502,61503],{"class":50},"      p.innerHTML = data[i].title\n",[36,61505,61506],{"class":38,"line":34771},[36,61507,61508],{"class":50},"      footer.style.backgroundColor = data[i].color\n",[36,61510,61511],{"class":38,"line":34780},[36,61512,61513],{"class":50},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[36,61515,61516],{"class":38,"line":34789},[36,61517,61518],{"class":50},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[36,61520,61521],{"class":38,"line":34795},[36,61522,61523],{"class":50},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[36,61525,61526],{"class":38,"line":34801},[36,61527,3693],{"class":50},[36,61529,61530],{"class":38,"line":34809},[36,61531,58],{"emptyLinePlaceholder":57},[36,61533,61534],{"class":38,"line":34814},[36,61535,61536],{"class":50},"    \u002F\u002F 3. 自动播放模块\n",[36,61538,61539],{"class":38,"line":34820},[36,61540,61541],{"class":50},"    let timerId = setInterval(function () {\n",[36,61543,61544],{"class":38,"line":34831},[36,61545,61546],{"class":50},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,61548,61549],{"class":38,"line":34837},[36,61550,61551],{"class":50},"      next.click()\n",[36,61553,61554],{"class":38,"line":34857},[36,61555,61556],{"class":50},"    }, 1000)\n",[36,61558,61559],{"class":38,"line":34863},[36,61560,58],{"emptyLinePlaceholder":57},[36,61562,61563],{"class":38,"line":34869},[36,61564,61565],{"class":50},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[36,61567,61568],{"class":38,"line":34875},[36,61569,61570],{"class":50},"    const slider = document.querySelector('.slider')\n",[36,61572,61573],{"class":38,"line":34892},[36,61574,61575],{"class":50},"    \u002F\u002F 注册事件\n",[36,61577,61578],{"class":38,"line":34898},[36,61579,61580],{"class":50},"    slider.addEventListener('mouseenter', function () {\n",[36,61582,61583],{"class":38,"line":34904},[36,61584,61585],{"class":50},"      \u002F\u002F 停止定时器\n",[36,61587,61588],{"class":38,"line":34910},[36,61589,61590],{"class":50},"      clearInterval(timerId)\n",[36,61592,61593],{"class":38,"line":34916},[36,61594,34792],{"class":50},[36,61596,61597],{"class":38,"line":34922},[36,61598,58],{"emptyLinePlaceholder":57},[36,61600,61601],{"class":38,"line":34949},[36,61602,61603],{"class":50},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[36,61605,61606],{"class":38,"line":34973},[36,61607,61575],{"class":50},[36,61609,61610],{"class":38,"line":34979},[36,61611,61612],{"class":50},"    slider.addEventListener('mouseleave', function () {\n",[36,61614,61615],{"class":38,"line":34985},[36,61616,61585],{"class":50},[36,61618,61619],{"class":38,"line":34991},[36,61620,61621],{"class":50},"      if (timerId) clearInterval(timerId)\n",[36,61623,61624],{"class":38,"line":35002},[36,61625,61626],{"class":50},"      \u002F\u002F 开启定时器\n",[36,61628,61629],{"class":38,"line":35013},[36,61630,61631],{"class":50},"      timerId = setInterval(function () {\n",[36,61633,61634],{"class":38,"line":35019},[36,61635,61636],{"class":50},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,61638,61639],{"class":38,"line":35036},[36,61640,61641],{"class":50},"        next.click()\n",[36,61643,61644],{"class":38,"line":35059},[36,61645,61646],{"class":50},"      }, 1000)\n",[36,61648,61649],{"class":38,"line":35082},[36,61650,34792],{"class":50},[36,61652,61653,61655,61657],{"class":38,"line":35088},[36,61654,53748],{"class":50},[36,61656,53144],{"class":52631},[36,61658,52638],{"class":50},[36,61660,61661,61663,61665],{"class":38,"line":35093},[36,61662,53116],{"class":50},[36,61664,53131],{"class":52631},[36,61666,52638],{"class":50},[36,61668,61669],{"class":38,"line":35102},[36,61670,58],{"emptyLinePlaceholder":57},[36,61672,61673,61675,61677],{"class":38,"line":35112},[36,61674,53116],{"class":50},[36,61676,51966],{"class":52631},[36,61678,52638],{"class":50},[23327,61680,61682],{"id":61681},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61684,61685],{},"小米搜索框案例：",[26,61687,61689],{"className":51964,"code":61688,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Document\u003C\u002Ftitle>\n    \u003Cstyle>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        ul {\n\n            list-style: none;\n        }\n\n        .mi {\n            position: relative;\n            width: 223px;\n            margin: 100px auto;\n        }\n\n        .mi input {\n            width: 223px;\n            height: 48px;\n            padding: 0 10px;\n            font-size: 14px;\n            line-height: 48px;\n            border: 1px solid #e0e0e0;\n            outline: none;\n        }\n\n        .mi .search {\n            border: 1px solid #ff6700;\n        }\n\n        .result-list {\n            display: none;\n            position: absolute;\n            left: 0;\n            top: 48px;\n            width: 223px;\n            border: 1px solid #ff6700;\n            border-top: 0;\n            background: #fff;\n        }\n\n        .result-list a {\n            display: block;\n            padding: 6px 15px;\n            font-size: 12px;\n            color: #424242;\n            text-decoration: none;\n        }\n\n        .result-list a:hover {\n            background-color: #eee;\n        }\n    \u003C\u002Fstyle>\n\n\u003C\u002Fhead>\n\n\u003Cbody>\n    \u003Cdiv class=\"mi\">\n        \u003Cinput type=\"search\" placeholder=\"小米笔记本\">\n        \u003Cul class=\"result-list\">\n            \u003Cli>\u003Ca href=\"#\">全部商品\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米11\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米10S\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米笔记本\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">小米手机\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">黑鲨4\u003C\u002Fa>\u003C\u002Fli>\n            \u003Cli>\u003Ca href=\"#\">空调\u003C\u002Fa>\u003C\u002Fli>\n        \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cscript>\n        \u002F\u002F 1. 获取元素\n        const input = document.querySelector('[type=search]')\n        const ul = document.querySelector('.result-list')\n        \u002F\u002F console.log(input)\n        \u002F\u002F 2. 监听事件 获得焦点\n        input.addEventListener('focus', function () {\n            \u002F\u002F ul显示\n            ul.style.display = 'block'\n            \u002F\u002F 添加一个带有颜色边框的类名\n            input.classList.add('search')\n        })\n        \u002F\u002F 3. 监听事件 失去焦点\n        input.addEventListener('blur', function () {\n            ul.style.display = 'none'\n            input.classList.remove('search')\n        })\n    \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,61690,61691,61701,61715,61719,61727,61741,61761,61781,61793,61801,61807,61817,61827,61839,61843,61847,61854,61858,61869,61873,61877,61884,61895,61908,61922,61926,61930,61939,61951,61963,61977,61990,62003,62021,62032,62036,62040,62049,62066,62070,62074,62081,62091,62101,62112,62125,62137,62153,62164,62176,62180,62184,62192,62203,62220,62232,62244,62255,62259,62263,62274,62285,62289,62297,62301,62309,62313,62321,62336,62359,62374,62405,62432,62459,62486,62513,62540,62567,62576,62584,62592,62597,62617,62637,62642,62647,62665,62670,62680,62685,62699,62704,62709,62726,62735,62747,62751,62759,62767,62771],{"__ignoreMap":31},[36,61692,61693,61695,61697,61699],{"class":38,"line":39},[36,61694,52628],{"class":50},[36,61696,52632],{"class":52631},[36,61698,52635],{"class":46},[36,61700,52638],{"class":50},[36,61702,61703,61705,61707,61709,61711,61713],{"class":38,"line":54},[36,61704,2577],{"class":50},[36,61706,51966],{"class":52631},[36,61708,52647],{"class":46},[36,61710,70],{"class":50},[36,61712,52652],{"class":110},[36,61714,52638],{"class":50},[36,61716,61717],{"class":38,"line":61},[36,61718,58],{"emptyLinePlaceholder":57},[36,61720,61721,61723,61725],{"class":38,"line":80},[36,61722,2577],{"class":50},[36,61724,52665],{"class":52631},[36,61726,52638],{"class":50},[36,61728,61729,61731,61733,61735,61737,61739],{"class":38,"line":96},[36,61730,52672],{"class":50},[36,61732,52675],{"class":52631},[36,61734,52678],{"class":46},[36,61736,70],{"class":50},[36,61738,52683],{"class":110},[36,61740,52638],{"class":50},[36,61742,61743,61745,61747,61749,61751,61753,61755,61757,61759],{"class":38,"line":101},[36,61744,52672],{"class":50},[36,61746,52675],{"class":52631},[36,61748,52694],{"class":46},[36,61750,70],{"class":50},[36,61752,52699],{"class":110},[36,61754,52702],{"class":46},[36,61756,70],{"class":50},[36,61758,52707],{"class":110},[36,61760,52638],{"class":50},[36,61762,61763,61765,61767,61769,61771,61773,61775,61777,61779],{"class":38,"line":128},[36,61764,52672],{"class":50},[36,61766,52675],{"class":52631},[36,61768,16249],{"class":46},[36,61770,70],{"class":50},[36,61772,52722],{"class":110},[36,61774,52702],{"class":46},[36,61776,70],{"class":50},[36,61778,52729],{"class":110},[36,61780,52638],{"class":50},[36,61782,61783,61785,61787,61789,61791],{"class":38,"line":149},[36,61784,52672],{"class":50},[36,61786,52738],{"class":52631},[36,61788,52741],{"class":50},[36,61790,52738],{"class":52631},[36,61792,52638],{"class":50},[36,61794,61795,61797,61799],{"class":38,"line":154},[36,61796,52672],{"class":50},[36,61798,1592],{"class":52631},[36,61800,52638],{"class":50},[36,61802,61803,61805],{"class":38,"line":167},[36,61804,52758],{"class":52631},[36,61806,16901],{"class":50},[36,61808,61809,61811,61813,61815],{"class":38,"line":172},[36,61810,52765],{"class":73},[36,61812,52768],{"class":50},[36,61814,1859],{"class":73},[36,61816,77],{"class":50},[36,61818,61819,61821,61823,61825],{"class":38,"line":192},[36,61820,52777],{"class":73},[36,61822,52768],{"class":50},[36,61824,1859],{"class":73},[36,61826,77],{"class":50},[36,61828,61829,61832,61834,61837],{"class":38,"line":211},[36,61830,61831],{"class":73},"            box-sizing",[36,61833,52768],{"class":50},[36,61835,61836],{"class":73},"border-box",[36,61838,77],{"class":50},[36,61840,61841],{"class":38,"line":216},[36,61842,4031],{"class":50},[36,61844,61845],{"class":38,"line":231},[36,61846,58],{"emptyLinePlaceholder":57},[36,61848,61849,61852],{"class":38,"line":236},[36,61850,61851],{"class":52631},"        ul",[36,61853,16901],{"class":50},[36,61855,61856],{"class":38,"line":247},[36,61857,58],{"emptyLinePlaceholder":57},[36,61859,61860,61863,61865,61867],{"class":38,"line":637},[36,61861,61862],{"class":73},"            list-style",[36,61864,52768],{"class":50},[36,61866,56068],{"class":73},[36,61868,77],{"class":50},[36,61870,61871],{"class":38,"line":646},[36,61872,4031],{"class":50},[36,61874,61875],{"class":38,"line":655},[36,61876,58],{"emptyLinePlaceholder":57},[36,61878,61879,61882],{"class":38,"line":660},[36,61880,61881],{"class":46},"        .mi",[36,61883,16901],{"class":50},[36,61885,61886,61889,61891,61893],{"class":38,"line":665},[36,61887,61888],{"class":73},"            position",[36,61890,52768],{"class":50},[36,61892,56095],{"class":73},[36,61894,77],{"class":50},[36,61896,61897,61899,61901,61904,61906],{"class":38,"line":674},[36,61898,52815],{"class":73},[36,61900,52768],{"class":50},[36,61902,61903],{"class":73},"223",[36,61905,52823],{"class":42},[36,61907,77],{"class":50},[36,61909,61910,61912,61914,61916,61918,61920],{"class":38,"line":679},[36,61911,52765],{"class":73},[36,61913,52768],{"class":50},[36,61915,1979],{"class":73},[36,61917,52823],{"class":42},[36,61919,52887],{"class":73},[36,61921,77],{"class":50},[36,61923,61924],{"class":38,"line":692},[36,61925,4031],{"class":50},[36,61927,61928],{"class":38,"line":705},[36,61929,58],{"emptyLinePlaceholder":57},[36,61931,61932,61934,61937],{"class":38,"line":710},[36,61933,61881],{"class":46},[36,61935,61936],{"class":52631}," input",[36,61938,16901],{"class":50},[36,61940,61941,61943,61945,61947,61949],{"class":38,"line":722},[36,61942,52815],{"class":73},[36,61944,52768],{"class":50},[36,61946,61903],{"class":73},[36,61948,52823],{"class":42},[36,61950,77],{"class":50},[36,61952,61953,61955,61957,61959,61961],{"class":38,"line":750},[36,61954,52830],{"class":73},[36,61956,52768],{"class":50},[36,61958,2274],{"class":73},[36,61960,52823],{"class":42},[36,61962,77],{"class":50},[36,61964,61965,61967,61969,61971,61973,61975],{"class":38,"line":755},[36,61966,52777],{"class":73},[36,61968,52768],{"class":50},[36,61970,1859],{"class":73},[36,61972,74],{"class":73},[36,61974,52823],{"class":42},[36,61976,77],{"class":50},[36,61978,61979,61982,61984,61986,61988],{"class":38,"line":777},[36,61980,61981],{"class":73},"            font-size",[36,61983,52768],{"class":50},[36,61985,2216],{"class":73},[36,61987,52823],{"class":42},[36,61989,77],{"class":50},[36,61991,61992,61995,61997,61999,62001],{"class":38,"line":802},[36,61993,61994],{"class":73},"            line-height",[36,61996,52768],{"class":50},[36,61998,2274],{"class":73},[36,62000,52823],{"class":42},[36,62002,77],{"class":50},[36,62004,62005,62008,62010,62012,62014,62016,62019],{"class":38,"line":807},[36,62006,62007],{"class":73},"            border",[36,62009,52768],{"class":50},[36,62011,1885],{"class":73},[36,62013,52823],{"class":42},[36,62015,52852],{"class":73},[36,62017,62018],{"class":73}," #e0e0e0",[36,62020,77],{"class":50},[36,62022,62023,62026,62028,62030],{"class":38,"line":818},[36,62024,62025],{"class":73},"            outline",[36,62027,52768],{"class":50},[36,62029,56068],{"class":73},[36,62031,77],{"class":50},[36,62033,62034],{"class":38,"line":843},[36,62035,4031],{"class":50},[36,62037,62038],{"class":38,"line":848},[36,62039,58],{"emptyLinePlaceholder":57},[36,62041,62042,62044,62047],{"class":38,"line":859},[36,62043,61881],{"class":46},[36,62045,62046],{"class":46}," .search",[36,62048,16901],{"class":50},[36,62050,62051,62053,62055,62057,62059,62061,62064],{"class":38,"line":864},[36,62052,62007],{"class":73},[36,62054,52768],{"class":50},[36,62056,1885],{"class":73},[36,62058,52823],{"class":42},[36,62060,52852],{"class":73},[36,62062,62063],{"class":73}," #ff6700",[36,62065,77],{"class":50},[36,62067,62068],{"class":38,"line":873},[36,62069,4031],{"class":50},[36,62071,62072],{"class":38,"line":9454},[36,62073,58],{"emptyLinePlaceholder":57},[36,62075,62076,62079],{"class":38,"line":9481},[36,62077,62078],{"class":46},"        .result-list",[36,62080,16901],{"class":50},[36,62082,62083,62085,62087,62089],{"class":38,"line":9486},[36,62084,52803],{"class":73},[36,62086,52768],{"class":50},[36,62088,56068],{"class":73},[36,62090,77],{"class":50},[36,62092,62093,62095,62097,62099],{"class":38,"line":9492},[36,62094,61888],{"class":73},[36,62096,52768],{"class":50},[36,62098,56162],{"class":73},[36,62100,77],{"class":50},[36,62102,62103,62106,62108,62110],{"class":38,"line":9504},[36,62104,62105],{"class":73},"            left",[36,62107,52768],{"class":50},[36,62109,1859],{"class":73},[36,62111,77],{"class":50},[36,62113,62114,62117,62119,62121,62123],{"class":38,"line":9516},[36,62115,62116],{"class":73},"            top",[36,62118,52768],{"class":50},[36,62120,2274],{"class":73},[36,62122,52823],{"class":42},[36,62124,77],{"class":50},[36,62126,62127,62129,62131,62133,62135],{"class":38,"line":9528},[36,62128,52815],{"class":73},[36,62130,52768],{"class":50},[36,62132,61903],{"class":73},[36,62134,52823],{"class":42},[36,62136,77],{"class":50},[36,62138,62139,62141,62143,62145,62147,62149,62151],{"class":38,"line":11184},[36,62140,62007],{"class":73},[36,62142,52768],{"class":50},[36,62144,1885],{"class":73},[36,62146,52823],{"class":42},[36,62148,52852],{"class":73},[36,62150,62063],{"class":73},[36,62152,77],{"class":50},[36,62154,62155,62158,62160,62162],{"class":38,"line":11209},[36,62156,62157],{"class":73},"            border-top",[36,62159,52768],{"class":50},[36,62161,1859],{"class":73},[36,62163,77],{"class":50},[36,62165,62166,62169,62171,62174],{"class":38,"line":11232},[36,62167,62168],{"class":73},"            background",[36,62170,52768],{"class":50},[36,62172,62173],{"class":73},"#fff",[36,62175,77],{"class":50},[36,62177,62178],{"class":38,"line":11256},[36,62179,4031],{"class":50},[36,62181,62182],{"class":38,"line":11261},[36,62183,58],{"emptyLinePlaceholder":57},[36,62185,62186,62188,62190],{"class":38,"line":11266},[36,62187,62078],{"class":46},[36,62189,474],{"class":52631},[36,62191,16901],{"class":50},[36,62193,62194,62196,62198,62201],{"class":38,"line":11271},[36,62195,52803],{"class":73},[36,62197,52768],{"class":50},[36,62199,62200],{"class":73},"block",[36,62202,77],{"class":50},[36,62204,62205,62207,62209,62211,62213,62216,62218],{"class":38,"line":11280},[36,62206,52777],{"class":73},[36,62208,52768],{"class":50},[36,62210,2012],{"class":73},[36,62212,52823],{"class":42},[36,62214,62215],{"class":73}," 15",[36,62217,52823],{"class":42},[36,62219,77],{"class":50},[36,62221,62222,62224,62226,62228,62230],{"class":38,"line":11285},[36,62223,61981],{"class":73},[36,62225,52768],{"class":50},[36,62227,2165],{"class":73},[36,62229,52823],{"class":42},[36,62231,77],{"class":50},[36,62233,62234,62237,62239,62242],{"class":38,"line":11291},[36,62235,62236],{"class":73},"            color",[36,62238,52768],{"class":50},[36,62240,62241],{"class":73},"#424242",[36,62243,77],{"class":50},[36,62245,62246,62249,62251,62253],{"class":38,"line":11312},[36,62247,62248],{"class":73},"            text-decoration",[36,62250,52768],{"class":50},[36,62252,56068],{"class":73},[36,62254,77],{"class":50},[36,62256,62257],{"class":38,"line":11318},[36,62258,4031],{"class":50},[36,62260,62261],{"class":38,"line":11332},[36,62262,58],{"emptyLinePlaceholder":57},[36,62264,62265,62267,62269,62272],{"class":38,"line":11338},[36,62266,62078],{"class":46},[36,62268,474],{"class":52631},[36,62270,62271],{"class":46},":hover",[36,62273,16901],{"class":50},[36,62275,62276,62278,62280,62283],{"class":38,"line":11365},[36,62277,52971],{"class":73},[36,62279,52768],{"class":50},[36,62281,62282],{"class":73},"#eee",[36,62284,77],{"class":50},[36,62286,62287],{"class":38,"line":11374},[36,62288,4031],{"class":50},[36,62290,62291,62293,62295],{"class":38,"line":11380},[36,62292,53107],{"class":50},[36,62294,1592],{"class":52631},[36,62296,52638],{"class":50},[36,62298,62299],{"class":38,"line":11388},[36,62300,58],{"emptyLinePlaceholder":57},[36,62302,62303,62305,62307],{"class":38,"line":11393},[36,62304,53116],{"class":50},[36,62306,52665],{"class":52631},[36,62308,52638],{"class":50},[36,62310,62311],{"class":38,"line":17933},[36,62312,58],{"emptyLinePlaceholder":57},[36,62314,62315,62317,62319],{"class":38,"line":17939},[36,62316,2577],{"class":50},[36,62318,53131],{"class":52631},[36,62320,52638],{"class":50},[36,62322,62323,62325,62327,62329,62331,62334],{"class":38,"line":17962},[36,62324,52672],{"class":50},[36,62326,52942],{"class":52631},[36,62328,54817],{"class":46},[36,62330,70],{"class":50},[36,62332,62333],{"class":110},"\"mi\"",[36,62335,52638],{"class":50},[36,62337,62338,62340,62342,62344,62346,62349,62352,62354,62357],{"class":38,"line":17968},[36,62339,56633],{"class":50},[36,62341,55152],{"class":52631},[36,62343,55155],{"class":46},[36,62345,70],{"class":50},[36,62347,62348],{"class":110},"\"search\"",[36,62350,62351],{"class":46}," placeholder",[36,62353,70],{"class":50},[36,62355,62356],{"class":110},"\"小米笔记本\"",[36,62358,52638],{"class":50},[36,62360,62361,62363,62365,62367,62369,62372],{"class":38,"line":17991},[36,62362,56633],{"class":50},[36,62364,2674],{"class":52631},[36,62366,54817],{"class":46},[36,62368,70],{"class":50},[36,62370,62371],{"class":110},"\"result-list\"",[36,62373,52638],{"class":50},[36,62375,62376,62379,62381,62384,62386,62389,62391,62394,62397,62399,62401,62403],{"class":38,"line":18005},[36,62377,62378],{"class":50},"            \u003C",[36,62380,259],{"class":52631},[36,62382,62383],{"class":50},">\u003C",[36,62385,1906],{"class":52631},[36,62387,62388],{"class":46}," href",[36,62390,70],{"class":50},[36,62392,62393],{"class":110},"\"#\"",[36,62395,62396],{"class":50},">全部商品\u003C\u002F",[36,62398,1906],{"class":52631},[36,62400,56645],{"class":50},[36,62402,259],{"class":52631},[36,62404,52638],{"class":50},[36,62406,62407,62409,62411,62413,62415,62417,62419,62421,62424,62426,62428,62430],{"class":38,"line":18025},[36,62408,62378],{"class":50},[36,62410,259],{"class":52631},[36,62412,62383],{"class":50},[36,62414,1906],{"class":52631},[36,62416,62388],{"class":46},[36,62418,70],{"class":50},[36,62420,62393],{"class":110},[36,62422,62423],{"class":50},">小米11\u003C\u002F",[36,62425,1906],{"class":52631},[36,62427,56645],{"class":50},[36,62429,259],{"class":52631},[36,62431,52638],{"class":50},[36,62433,62434,62436,62438,62440,62442,62444,62446,62448,62451,62453,62455,62457],{"class":38,"line":18031},[36,62435,62378],{"class":50},[36,62437,259],{"class":52631},[36,62439,62383],{"class":50},[36,62441,1906],{"class":52631},[36,62443,62388],{"class":46},[36,62445,70],{"class":50},[36,62447,62393],{"class":110},[36,62449,62450],{"class":50},">小米10S\u003C\u002F",[36,62452,1906],{"class":52631},[36,62454,56645],{"class":50},[36,62456,259],{"class":52631},[36,62458,52638],{"class":50},[36,62460,62461,62463,62465,62467,62469,62471,62473,62475,62478,62480,62482,62484],{"class":38,"line":18042},[36,62462,62378],{"class":50},[36,62464,259],{"class":52631},[36,62466,62383],{"class":50},[36,62468,1906],{"class":52631},[36,62470,62388],{"class":46},[36,62472,70],{"class":50},[36,62474,62393],{"class":110},[36,62476,62477],{"class":50},">小米笔记本\u003C\u002F",[36,62479,1906],{"class":52631},[36,62481,56645],{"class":50},[36,62483,259],{"class":52631},[36,62485,52638],{"class":50},[36,62487,62488,62490,62492,62494,62496,62498,62500,62502,62505,62507,62509,62511],{"class":38,"line":18065},[36,62489,62378],{"class":50},[36,62491,259],{"class":52631},[36,62493,62383],{"class":50},[36,62495,1906],{"class":52631},[36,62497,62388],{"class":46},[36,62499,70],{"class":50},[36,62501,62393],{"class":110},[36,62503,62504],{"class":50},">小米手机\u003C\u002F",[36,62506,1906],{"class":52631},[36,62508,56645],{"class":50},[36,62510,259],{"class":52631},[36,62512,52638],{"class":50},[36,62514,62515,62517,62519,62521,62523,62525,62527,62529,62532,62534,62536,62538],{"class":38,"line":18087},[36,62516,62378],{"class":50},[36,62518,259],{"class":52631},[36,62520,62383],{"class":50},[36,62522,1906],{"class":52631},[36,62524,62388],{"class":46},[36,62526,70],{"class":50},[36,62528,62393],{"class":110},[36,62530,62531],{"class":50},">黑鲨4\u003C\u002F",[36,62533,1906],{"class":52631},[36,62535,56645],{"class":50},[36,62537,259],{"class":52631},[36,62539,52638],{"class":50},[36,62541,62542,62544,62546,62548,62550,62552,62554,62556,62559,62561,62563,62565],{"class":38,"line":18092},[36,62543,62378],{"class":50},[36,62545,259],{"class":52631},[36,62547,62383],{"class":50},[36,62549,1906],{"class":52631},[36,62551,62388],{"class":46},[36,62553,70],{"class":50},[36,62555,62393],{"class":110},[36,62557,62558],{"class":50},">空调\u003C\u002F",[36,62560,1906],{"class":52631},[36,62562,56645],{"class":50},[36,62564,259],{"class":52631},[36,62566,52638],{"class":50},[36,62568,62569,62572,62574],{"class":38,"line":18098},[36,62570,62571],{"class":50},"        \u003C\u002F",[36,62573,2674],{"class":52631},[36,62575,52638],{"class":50},[36,62577,62578,62580,62582],{"class":38,"line":18112},[36,62579,53107],{"class":50},[36,62581,52942],{"class":52631},[36,62583,52638],{"class":50},[36,62585,62586,62588,62590],{"class":38,"line":18125},[36,62587,52672],{"class":50},[36,62589,53144],{"class":52631},[36,62591,52638],{"class":50},[36,62593,62594],{"class":38,"line":18130},[36,62595,62596],{"class":124},"        \u002F\u002F 1. 获取元素\n",[36,62598,62599,62602,62604,62606,62608,62610,62612,62615],{"class":38,"line":18144},[36,62600,62601],{"class":42},"        const",[36,62603,61936],{"class":73},[36,62605,14893],{"class":42},[36,62607,55727],{"class":50},[36,62609,55730],{"class":46},[36,62611,222],{"class":50},[36,62613,62614],{"class":110},"'[type=search]'",[36,62616,1680],{"class":50},[36,62618,62619,62621,62624,62626,62628,62630,62632,62635],{"class":38,"line":18149},[36,62620,62601],{"class":42},[36,62622,62623],{"class":73}," ul",[36,62625,14893],{"class":42},[36,62627,55727],{"class":50},[36,62629,55730],{"class":46},[36,62631,222],{"class":50},[36,62633,62634],{"class":110},"'.result-list'",[36,62636,1680],{"class":50},[36,62638,62639],{"class":38,"line":18155},[36,62640,62641],{"class":124},"        \u002F\u002F console.log(input)\n",[36,62643,62644],{"class":38,"line":18160},[36,62645,62646],{"class":124},"        \u002F\u002F 2. 监听事件 获得焦点\n",[36,62648,62649,62652,62654,62656,62659,62661,62663],{"class":38,"line":18174},[36,62650,62651],{"class":50},"        input.",[36,62653,59144],{"class":46},[36,62655,222],{"class":50},[36,62657,62658],{"class":110},"'focus'",[36,62660,477],{"class":50},[36,62662,55780],{"class":42},[36,62664,55783],{"class":50},[36,62666,62667],{"class":38,"line":18179},[36,62668,62669],{"class":124},"            \u002F\u002F ul显示\n",[36,62671,62672,62675,62677],{"class":38,"line":18184},[36,62673,62674],{"class":50},"            ul.style.display ",[36,62676,70],{"class":42},[36,62678,62679],{"class":110}," 'block'\n",[36,62681,62682],{"class":38,"line":18198},[36,62683,62684],{"class":124},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[36,62686,62687,62690,62692,62694,62697],{"class":38,"line":18210},[36,62688,62689],{"class":50},"            input.classList.",[36,62691,6822],{"class":46},[36,62693,222],{"class":50},[36,62695,62696],{"class":110},"'search'",[36,62698,1680],{"class":50},[36,62700,62701],{"class":38,"line":18215},[36,62702,62703],{"class":50},"        })\n",[36,62705,62706],{"class":38,"line":18228},[36,62707,62708],{"class":124},"        \u002F\u002F 3. 监听事件 失去焦点\n",[36,62710,62711,62713,62715,62717,62720,62722,62724],{"class":38,"line":18233},[36,62712,62651],{"class":50},[36,62714,59144],{"class":46},[36,62716,222],{"class":50},[36,62718,62719],{"class":110},"'blur'",[36,62721,477],{"class":50},[36,62723,55780],{"class":42},[36,62725,55783],{"class":50},[36,62727,62728,62730,62732],{"class":38,"line":18238},[36,62729,62674],{"class":50},[36,62731,70],{"class":42},[36,62733,62734],{"class":110}," 'none'\n",[36,62736,62737,62739,62741,62743,62745],{"class":38,"line":18243},[36,62738,62689],{"class":50},[36,62740,58337],{"class":46},[36,62742,222],{"class":50},[36,62744,62696],{"class":110},[36,62746,1680],{"class":50},[36,62748,62749],{"class":38,"line":18256},[36,62750,62703],{"class":50},[36,62752,62753,62755,62757],{"class":38,"line":18261},[36,62754,53107],{"class":50},[36,62756,53144],{"class":52631},[36,62758,52638],{"class":50},[36,62760,62761,62763,62765],{"class":38,"line":33964},[36,62762,53116],{"class":50},[36,62764,53131],{"class":52631},[36,62766,52638],{"class":50},[36,62768,62769],{"class":38,"line":33970},[36,62770,58],{"emptyLinePlaceholder":57},[36,62772,62773,62775,62777],{"class":38,"line":33976},[36,62774,53116],{"class":50},[36,62776,51966],{"class":52631},[36,62778,52638],{"class":50},[23327,62780,62782],{"id":62781},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62784,62785],{},"评论字数统计案例",[19,62787,62788],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62790,62791],{},"牢记focus伪类选择器",[52675,62793],{"charSet":62794},"UTF-8",[52675,62796],{"name":62797,"content":62798},"viewport","width=device-width, initial-scale=1.0",[52738,62800,62801],{},"Document",[1592,62803,62804],{},"\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",[55152,62806],{"type":6676},[2674,62808,62809,62812],{},[259,62810,62811],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[259,62813,62814],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,62816,62818],{"className":51964,"code":62817,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>评论回车发布\u003C\u002Ftitle>\n  \u003Cstyle>\n    .wrapper {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .avatar {\n      width: 48px;\n      height: 48px;\n      border-radius: 50%;\n      overflow: hidden;\n      background: url(...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg) no-repeat center \u002F cover;\n      margin-right: 20px;\n    }\n\n    .wrapper textarea {\n      outline: none;\n      border-color: transparent;\n      resize: none;\n      background: #f5f5f5;\n      border-radius: 4px;\n      flex: 1;\n      padding: 10px;\n      transition: all 0.5s;\n      height: 30px;\n    }\n\n    .wrapper textarea:focus {\n      border-color: #e4e4e4;\n      background: #fff;\n      height: 50px;\n    }\n\n    .wrapper button {\n      background: #00aeec;\n      color: #fff;\n      border: none;\n      border-radius: 4px;\n      margin-left: 10px;\n      width: 70px;\n      cursor: pointer;\n    }\n\n    .wrapper .total {\n      margin-right: 80px;\n      color: #999;\n      margin-top: 5px;\n      opacity: 0;\n      transition: all 0.5s;\n    }\n\n    .list {\n      min-width: 400px;\n      max-width: 800px;\n      display: flex;\n    }\n\n    .list .item {\n      width: 100%;\n      display: flex;\n    }\n\n    .list .item .info {\n      flex: 1;\n      border-bottom: 1px dashed #e4e4e4;\n      padding-bottom: 10px;\n    }\n\n    .list .item p {\n      margin: 0;\n    }\n\n    .list .item .name {\n      color: #FB7299;\n      font-size: 14px;\n      font-weight: bold;\n    }\n\n    .list .item .text {\n      color: #333;\n      padding: 10px 0;\n    }\n\n    .list .item .time {\n      color: #999;\n      font-size: 12px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"wrapper\">\n    \u003Ci class=\"avatar\">\u003C\u002Fi>\n    \u003Ctextarea id=\"tx\" placeholder=\"发一条友善的评论\" rows=\"2\" maxlength=\"200\">\u003C\u002Ftextarea>\n    \u003Cbutton>发布\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"wrapper\">\n    \u003Cspan class=\"total\">0\u002F200字\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003Cdiv class=\"item\" style=\"display: none;\">\n      \u003Ci class=\"avatar\">\u003C\u002Fi>\n      \u003Cdiv class=\"info\">\n        \u003Cp class=\"name\">清风徐来\u003C\u002Fp>\n        \u003Cp class=\"text\">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002Fp>\n        \u003Cp class=\"time\">2022-10-10 20:29:21\u003C\u002Fp>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const tx = document.querySelector('#tx')\n    const total = document.querySelector('.total')\n    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n    tx.addEventListener('focus', function () {\n      total.style.opacity = 1\n    })\n    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n    tx.addEventListener('blur', function () {\n      total.style.opacity = 0\n    })\n    \u002F\u002F 3. 检测用户输入\n    tx.addEventListener('input', function () {\n      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n      total.innerHTML = `${tx.value.length}\u002F200字`\n    })\n\n    \u002F\u002F const str = 'andy'\n    \u002F\u002F console.log(str.length)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,62819,62820,62830,62844,62848,62856,62870,62890,62910,62923,62931,62938,62951,62965,62975,62985,62989,62993,63000,63012,63024,63036,63048,63077,63090,63094,63098,63107,63118,63130,63141,63152,63164,63175,63187,63203,63215,63219,63223,63234,63245,63255,63267,63271,63275,63283,63294,63304,63315,63327,63340,63352,63364,63368,63372,63381,63393,63404,63417,63428,63442,63446,63450,63457,63469,63481,63491,63495,63499,63508,63520,63530,63534,63538,63549,63559,63578,63591,63595,63599,63609,63619,63623,63627,63638,63649,63661,63673,63677,63681,63692,63703,63717,63721,63725,63736,63746,63758,63762,63770,63778,63782,63790,63805,63824,63864,63877,63885,63899,63919,63927,63942,63965,63983,63998,64018,64038,64058,64066,64074,64082,64090,64110,64130,64135,64152,64161,64165,64170,64186,64194,64198,64203,64220,64225,64250,64254,64258,64263,64268,64276,64284,64288],{"__ignoreMap":31},[36,62821,62822,62824,62826,62828],{"class":38,"line":39},[36,62823,52628],{"class":50},[36,62825,52632],{"class":52631},[36,62827,52635],{"class":46},[36,62829,52638],{"class":50},[36,62831,62832,62834,62836,62838,62840,62842],{"class":38,"line":54},[36,62833,2577],{"class":50},[36,62835,51966],{"class":52631},[36,62837,52647],{"class":46},[36,62839,70],{"class":50},[36,62841,52652],{"class":110},[36,62843,52638],{"class":50},[36,62845,62846],{"class":38,"line":61},[36,62847,58],{"emptyLinePlaceholder":57},[36,62849,62850,62852,62854],{"class":38,"line":80},[36,62851,2577],{"class":50},[36,62853,52665],{"class":52631},[36,62855,52638],{"class":50},[36,62857,62858,62860,62862,62864,62866,62868],{"class":38,"line":96},[36,62859,53475],{"class":50},[36,62861,52675],{"class":52631},[36,62863,52678],{"class":46},[36,62865,70],{"class":50},[36,62867,52683],{"class":110},[36,62869,52638],{"class":50},[36,62871,62872,62874,62876,62878,62880,62882,62884,62886,62888],{"class":38,"line":101},[36,62873,53475],{"class":50},[36,62875,52675],{"class":52631},[36,62877,52694],{"class":46},[36,62879,70],{"class":50},[36,62881,52699],{"class":110},[36,62883,52702],{"class":46},[36,62885,70],{"class":50},[36,62887,52707],{"class":110},[36,62889,52638],{"class":50},[36,62891,62892,62894,62896,62898,62900,62902,62904,62906,62908],{"class":38,"line":128},[36,62893,53475],{"class":50},[36,62895,52675],{"class":52631},[36,62897,16249],{"class":46},[36,62899,70],{"class":50},[36,62901,52722],{"class":110},[36,62903,52702],{"class":46},[36,62905,70],{"class":50},[36,62907,52729],{"class":110},[36,62909,52638],{"class":50},[36,62911,62912,62914,62916,62919,62921],{"class":38,"line":149},[36,62913,53475],{"class":50},[36,62915,52738],{"class":52631},[36,62917,62918],{"class":50},">评论回车发布\u003C\u002F",[36,62920,52738],{"class":52631},[36,62922,52638],{"class":50},[36,62924,62925,62927,62929],{"class":38,"line":154},[36,62926,53475],{"class":50},[36,62928,1592],{"class":52631},[36,62930,52638],{"class":50},[36,62932,62933,62936],{"class":38,"line":167},[36,62934,62935],{"class":46},"    .wrapper",[36,62937,16901],{"class":50},[36,62939,62940,62943,62945,62947,62949],{"class":38,"line":172},[36,62941,62942],{"class":73},"      min-width",[36,62944,52768],{"class":50},[36,62946,5478],{"class":73},[36,62948,52823],{"class":42},[36,62950,77],{"class":50},[36,62952,62953,62956,62958,62961,62963],{"class":38,"line":192},[36,62954,62955],{"class":73},"      max-width",[36,62957,52768],{"class":50},[36,62959,62960],{"class":73},"800",[36,62962,52823],{"class":42},[36,62964,77],{"class":50},[36,62966,62967,62969,62971,62973],{"class":38,"line":211},[36,62968,56340],{"class":73},[36,62970,52768],{"class":50},[36,62972,52808],{"class":73},[36,62974,77],{"class":50},[36,62976,62977,62979,62981,62983],{"class":38,"line":216},[36,62978,56351],{"class":73},[36,62980,52768],{"class":50},[36,62982,52911],{"class":73},[36,62984,77],{"class":50},[36,62986,62987],{"class":38,"line":231},[36,62988,3693],{"class":50},[36,62990,62991],{"class":38,"line":236},[36,62992,58],{"emptyLinePlaceholder":57},[36,62994,62995,62998],{"class":38,"line":247},[36,62996,62997],{"class":46},"    .avatar",[36,62999,16901],{"class":50},[36,63001,63002,63004,63006,63008,63010],{"class":38,"line":637},[36,63003,56102],{"class":73},[36,63005,52768],{"class":50},[36,63007,2274],{"class":73},[36,63009,52823],{"class":42},[36,63011,77],{"class":50},[36,63013,63014,63016,63018,63020,63022],{"class":38,"line":646},[36,63015,56116],{"class":73},[36,63017,52768],{"class":50},[36,63019,2274],{"class":73},[36,63021,52823],{"class":42},[36,63023,77],{"class":50},[36,63025,63026,63028,63030,63032,63034],{"class":38,"line":655},[36,63027,56465],{"class":73},[36,63029,52768],{"class":50},[36,63031,2323],{"class":73},[36,63033,1996],{"class":42},[36,63035,77],{"class":50},[36,63037,63038,63041,63043,63046],{"class":38,"line":660},[36,63039,63040],{"class":73},"      overflow",[36,63042,52768],{"class":50},[36,63044,63045],{"class":73},"hidden",[36,63047,77],{"class":50},[36,63049,63050,63053,63055,63058,63060,63063,63065,63068,63070,63072,63075],{"class":38,"line":665},[36,63051,63052],{"class":73},"      background",[36,63054,52768],{"class":50},[36,63056,63057],{"class":73},"url",[36,63059,222],{"class":50},[36,63061,63062],{"class":473},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[36,63064,15043],{"class":50},[36,63066,63067],{"class":73},"no-repeat",[36,63069,18473],{"class":73},[36,63071,26309],{"class":50},[36,63073,63074],{"class":73},"cover",[36,63076,77],{"class":50},[36,63078,63079,63082,63084,63086,63088],{"class":38,"line":674},[36,63080,63081],{"class":73},"      margin-right",[36,63083,52768],{"class":50},[36,63085,2367],{"class":73},[36,63087,52823],{"class":42},[36,63089,77],{"class":50},[36,63091,63092],{"class":38,"line":679},[36,63093,3693],{"class":50},[36,63095,63096],{"class":38,"line":692},[36,63097,58],{"emptyLinePlaceholder":57},[36,63099,63100,63102,63105],{"class":38,"line":705},[36,63101,62935],{"class":46},[36,63103,63104],{"class":52631}," textarea",[36,63106,16901],{"class":50},[36,63108,63109,63112,63114,63116],{"class":38,"line":710},[36,63110,63111],{"class":73},"      outline",[36,63113,52768],{"class":50},[36,63115,56068],{"class":73},[36,63117,77],{"class":50},[36,63119,63120,63123,63125,63128],{"class":38,"line":722},[36,63121,63122],{"class":73},"      border-color",[36,63124,52768],{"class":50},[36,63126,63127],{"class":73},"transparent",[36,63129,77],{"class":50},[36,63131,63132,63135,63137,63139],{"class":38,"line":750},[36,63133,63134],{"class":73},"      resize",[36,63136,52768],{"class":50},[36,63138,56068],{"class":73},[36,63140,77],{"class":50},[36,63142,63143,63145,63147,63150],{"class":38,"line":755},[36,63144,63052],{"class":73},[36,63146,52768],{"class":50},[36,63148,63149],{"class":73},"#f5f5f5",[36,63151,77],{"class":50},[36,63153,63154,63156,63158,63160,63162],{"class":38,"line":777},[36,63155,56465],{"class":73},[36,63157,52768],{"class":50},[36,63159,1961],{"class":73},[36,63161,52823],{"class":42},[36,63163,77],{"class":50},[36,63165,63166,63169,63171,63173],{"class":38,"line":802},[36,63167,63168],{"class":73},"      flex",[36,63170,52768],{"class":50},[36,63172,1885],{"class":73},[36,63174,77],{"class":50},[36,63176,63177,63179,63181,63183,63185],{"class":38,"line":807},[36,63178,56026],{"class":73},[36,63180,52768],{"class":50},[36,63182,2113],{"class":73},[36,63184,52823],{"class":42},[36,63186,77],{"class":50},[36,63188,63189,63192,63194,63196,63199,63201],{"class":38,"line":818},[36,63190,63191],{"class":73},"      transition",[36,63193,52768],{"class":50},[36,63195,29452],{"class":73},[36,63197,63198],{"class":73}," 0.5",[36,63200,2362],{"class":42},[36,63202,77],{"class":50},[36,63204,63205,63207,63209,63211,63213],{"class":38,"line":843},[36,63206,56116],{"class":73},[36,63208,52768],{"class":50},[36,63210,2618],{"class":73},[36,63212,52823],{"class":42},[36,63214,77],{"class":50},[36,63216,63217],{"class":38,"line":848},[36,63218,3693],{"class":50},[36,63220,63221],{"class":38,"line":859},[36,63222,58],{"emptyLinePlaceholder":57},[36,63224,63225,63227,63229,63232],{"class":38,"line":864},[36,63226,62935],{"class":46},[36,63228,63104],{"class":52631},[36,63230,63231],{"class":46},":focus",[36,63233,16901],{"class":50},[36,63235,63236,63238,63240,63243],{"class":38,"line":873},[36,63237,63122],{"class":73},[36,63239,52768],{"class":50},[36,63241,63242],{"class":73},"#e4e4e4",[36,63244,77],{"class":50},[36,63246,63247,63249,63251,63253],{"class":38,"line":9454},[36,63248,63052],{"class":73},[36,63250,52768],{"class":50},[36,63252,62173],{"class":73},[36,63254,77],{"class":50},[36,63256,63257,63259,63261,63263,63265],{"class":38,"line":9481},[36,63258,56116],{"class":73},[36,63260,52768],{"class":50},[36,63262,2323],{"class":73},[36,63264,52823],{"class":42},[36,63266,77],{"class":50},[36,63268,63269],{"class":38,"line":9486},[36,63270,3693],{"class":50},[36,63272,63273],{"class":38,"line":9492},[36,63274,58],{"emptyLinePlaceholder":57},[36,63276,63277,63279,63281],{"class":38,"line":9504},[36,63278,62935],{"class":46},[36,63280,58798],{"class":52631},[36,63282,16901],{"class":50},[36,63284,63285,63287,63289,63292],{"class":38,"line":9516},[36,63286,63052],{"class":73},[36,63288,52768],{"class":50},[36,63290,63291],{"class":73},"#00aeec",[36,63293,77],{"class":50},[36,63295,63296,63298,63300,63302],{"class":38,"line":9528},[36,63297,58747],{"class":73},[36,63299,52768],{"class":50},[36,63301,62173],{"class":73},[36,63303,77],{"class":50},[36,63305,63306,63309,63311,63313],{"class":38,"line":11184},[36,63307,63308],{"class":73},"      border",[36,63310,52768],{"class":50},[36,63312,56068],{"class":73},[36,63314,77],{"class":50},[36,63316,63317,63319,63321,63323,63325],{"class":38,"line":11209},[36,63318,56465],{"class":73},[36,63320,52768],{"class":50},[36,63322,1961],{"class":73},[36,63324,52823],{"class":42},[36,63326,77],{"class":50},[36,63328,63329,63332,63334,63336,63338],{"class":38,"line":11232},[36,63330,63331],{"class":73},"      margin-left",[36,63333,52768],{"class":50},[36,63335,2113],{"class":73},[36,63337,52823],{"class":42},[36,63339,77],{"class":50},[36,63341,63342,63344,63346,63348,63350],{"class":38,"line":11256},[36,63343,56102],{"class":73},[36,63345,52768],{"class":50},[36,63347,2023],{"class":73},[36,63349,52823],{"class":42},[36,63351,77],{"class":50},[36,63353,63354,63357,63359,63362],{"class":38,"line":11261},[36,63355,63356],{"class":73},"      cursor",[36,63358,52768],{"class":50},[36,63360,63361],{"class":73},"pointer",[36,63363,77],{"class":50},[36,63365,63366],{"class":38,"line":11266},[36,63367,3693],{"class":50},[36,63369,63370],{"class":38,"line":11271},[36,63371,58],{"emptyLinePlaceholder":57},[36,63373,63374,63376,63379],{"class":38,"line":11280},[36,63375,62935],{"class":46},[36,63377,63378],{"class":46}," .total",[36,63380,16901],{"class":50},[36,63382,63383,63385,63387,63389,63391],{"class":38,"line":11285},[36,63384,63081],{"class":73},[36,63386,52768],{"class":50},[36,63388,2279],{"class":73},[36,63390,52823],{"class":42},[36,63392,77],{"class":50},[36,63394,63395,63397,63399,63402],{"class":38,"line":11291},[36,63396,58747],{"class":73},[36,63398,52768],{"class":50},[36,63400,63401],{"class":73},"#999",[36,63403,77],{"class":50},[36,63405,63406,63409,63411,63413,63415],{"class":38,"line":11312},[36,63407,63408],{"class":73},"      margin-top",[36,63410,52768],{"class":50},[36,63412,1987],{"class":73},[36,63414,52823],{"class":42},[36,63416,77],{"class":50},[36,63418,63419,63422,63424,63426],{"class":38,"line":11318},[36,63420,63421],{"class":73},"      opacity",[36,63423,52768],{"class":50},[36,63425,1859],{"class":73},[36,63427,77],{"class":50},[36,63429,63430,63432,63434,63436,63438,63440],{"class":38,"line":11332},[36,63431,63191],{"class":73},[36,63433,52768],{"class":50},[36,63435,29452],{"class":73},[36,63437,63198],{"class":73},[36,63439,2362],{"class":42},[36,63441,77],{"class":50},[36,63443,63444],{"class":38,"line":11338},[36,63445,3693],{"class":50},[36,63447,63448],{"class":38,"line":11365},[36,63449,58],{"emptyLinePlaceholder":57},[36,63451,63452,63455],{"class":38,"line":11374},[36,63453,63454],{"class":46},"    .list",[36,63456,16901],{"class":50},[36,63458,63459,63461,63463,63465,63467],{"class":38,"line":11380},[36,63460,62942],{"class":73},[36,63462,52768],{"class":50},[36,63464,5478],{"class":73},[36,63466,52823],{"class":42},[36,63468,77],{"class":50},[36,63470,63471,63473,63475,63477,63479],{"class":38,"line":11388},[36,63472,62955],{"class":73},[36,63474,52768],{"class":50},[36,63476,62960],{"class":73},[36,63478,52823],{"class":42},[36,63480,77],{"class":50},[36,63482,63483,63485,63487,63489],{"class":38,"line":11393},[36,63484,56340],{"class":73},[36,63486,52768],{"class":50},[36,63488,52808],{"class":73},[36,63490,77],{"class":50},[36,63492,63493],{"class":38,"line":17933},[36,63494,3693],{"class":50},[36,63496,63497],{"class":38,"line":17939},[36,63498,58],{"emptyLinePlaceholder":57},[36,63500,63501,63503,63506],{"class":38,"line":17962},[36,63502,63454],{"class":46},[36,63504,63505],{"class":46}," .item",[36,63507,16901],{"class":50},[36,63509,63510,63512,63514,63516,63518],{"class":38,"line":17968},[36,63511,56102],{"class":73},[36,63513,52768],{"class":50},[36,63515,1979],{"class":73},[36,63517,1996],{"class":42},[36,63519,77],{"class":50},[36,63521,63522,63524,63526,63528],{"class":38,"line":17991},[36,63523,56340],{"class":73},[36,63525,52768],{"class":50},[36,63527,52808],{"class":73},[36,63529,77],{"class":50},[36,63531,63532],{"class":38,"line":18005},[36,63533,3693],{"class":50},[36,63535,63536],{"class":38,"line":18025},[36,63537,58],{"emptyLinePlaceholder":57},[36,63539,63540,63542,63544,63547],{"class":38,"line":18031},[36,63541,63454],{"class":46},[36,63543,63505],{"class":46},[36,63545,63546],{"class":46}," .info",[36,63548,16901],{"class":50},[36,63550,63551,63553,63555,63557],{"class":38,"line":18042},[36,63552,63168],{"class":73},[36,63554,52768],{"class":50},[36,63556,1885],{"class":73},[36,63558,77],{"class":50},[36,63560,63561,63564,63566,63568,63570,63573,63576],{"class":38,"line":18065},[36,63562,63563],{"class":73},"      border-bottom",[36,63565,52768],{"class":50},[36,63567,1885],{"class":73},[36,63569,52823],{"class":42},[36,63571,63572],{"class":73}," dashed",[36,63574,63575],{"class":73}," #e4e4e4",[36,63577,77],{"class":50},[36,63579,63580,63583,63585,63587,63589],{"class":38,"line":18087},[36,63581,63582],{"class":73},"      padding-bottom",[36,63584,52768],{"class":50},[36,63586,2113],{"class":73},[36,63588,52823],{"class":42},[36,63590,77],{"class":50},[36,63592,63593],{"class":38,"line":18092},[36,63594,3693],{"class":50},[36,63596,63597],{"class":38,"line":18098},[36,63598,58],{"emptyLinePlaceholder":57},[36,63600,63601,63603,63605,63607],{"class":38,"line":18112},[36,63602,63454],{"class":46},[36,63604,63505],{"class":46},[36,63606,8301],{"class":52631},[36,63608,16901],{"class":50},[36,63610,63611,63613,63615,63617],{"class":38,"line":18125},[36,63612,56037],{"class":73},[36,63614,52768],{"class":50},[36,63616,1859],{"class":73},[36,63618,77],{"class":50},[36,63620,63621],{"class":38,"line":18130},[36,63622,3693],{"class":50},[36,63624,63625],{"class":38,"line":18144},[36,63626,58],{"emptyLinePlaceholder":57},[36,63628,63629,63631,63633,63636],{"class":38,"line":18149},[36,63630,63454],{"class":46},[36,63632,63505],{"class":46},[36,63634,63635],{"class":46}," .name",[36,63637,16901],{"class":50},[36,63639,63640,63642,63644,63647],{"class":38,"line":18155},[36,63641,58747],{"class":73},[36,63643,52768],{"class":50},[36,63645,63646],{"class":73},"#FB7299",[36,63648,77],{"class":50},[36,63650,63651,63653,63655,63657,63659],{"class":38,"line":18160},[36,63652,56253],{"class":73},[36,63654,52768],{"class":50},[36,63656,2216],{"class":73},[36,63658,52823],{"class":42},[36,63660,77],{"class":50},[36,63662,63663,63666,63668,63671],{"class":38,"line":18174},[36,63664,63665],{"class":73},"      font-weight",[36,63667,52768],{"class":50},[36,63669,63670],{"class":73},"bold",[36,63672,77],{"class":50},[36,63674,63675],{"class":38,"line":18179},[36,63676,3693],{"class":50},[36,63678,63679],{"class":38,"line":18184},[36,63680,58],{"emptyLinePlaceholder":57},[36,63682,63683,63685,63687,63690],{"class":38,"line":18198},[36,63684,63454],{"class":46},[36,63686,63505],{"class":46},[36,63688,63689],{"class":46}," .text",[36,63691,16901],{"class":50},[36,63693,63694,63696,63698,63701],{"class":38,"line":18210},[36,63695,58747],{"class":73},[36,63697,52768],{"class":50},[36,63699,63700],{"class":73},"#333",[36,63702,77],{"class":50},[36,63704,63705,63707,63709,63711,63713,63715],{"class":38,"line":18215},[36,63706,56026],{"class":73},[36,63708,52768],{"class":50},[36,63710,2113],{"class":73},[36,63712,52823],{"class":42},[36,63714,242],{"class":73},[36,63716,77],{"class":50},[36,63718,63719],{"class":38,"line":18228},[36,63720,3693],{"class":50},[36,63722,63723],{"class":38,"line":18233},[36,63724,58],{"emptyLinePlaceholder":57},[36,63726,63727,63729,63731,63734],{"class":38,"line":18238},[36,63728,63454],{"class":46},[36,63730,63505],{"class":46},[36,63732,63733],{"class":46}," .time",[36,63735,16901],{"class":50},[36,63737,63738,63740,63742,63744],{"class":38,"line":18243},[36,63739,58747],{"class":73},[36,63741,52768],{"class":50},[36,63743,63401],{"class":73},[36,63745,77],{"class":50},[36,63747,63748,63750,63752,63754,63756],{"class":38,"line":18256},[36,63749,56253],{"class":73},[36,63751,52768],{"class":50},[36,63753,2165],{"class":73},[36,63755,52823],{"class":42},[36,63757,77],{"class":50},[36,63759,63760],{"class":38,"line":18261},[36,63761,3693],{"class":50},[36,63763,63764,63766,63768],{"class":38,"line":33964},[36,63765,53748],{"class":50},[36,63767,1592],{"class":52631},[36,63769,52638],{"class":50},[36,63771,63772,63774,63776],{"class":38,"line":33970},[36,63773,53116],{"class":50},[36,63775,52665],{"class":52631},[36,63777,52638],{"class":50},[36,63779,63780],{"class":38,"line":33976},[36,63781,58],{"emptyLinePlaceholder":57},[36,63783,63784,63786,63788],{"class":38,"line":33982},[36,63785,2577],{"class":50},[36,63787,53131],{"class":52631},[36,63789,52638],{"class":50},[36,63791,63792,63794,63796,63798,63800,63803],{"class":38,"line":33988},[36,63793,53475],{"class":50},[36,63795,52942],{"class":52631},[36,63797,54817],{"class":46},[36,63799,70],{"class":50},[36,63801,63802],{"class":110},"\"wrapper\"",[36,63804,52638],{"class":50},[36,63806,63807,63809,63811,63813,63815,63818,63820,63822],{"class":38,"line":33999},[36,63808,52672],{"class":50},[36,63810,2108],{"class":52631},[36,63812,54817],{"class":46},[36,63814,70],{"class":50},[36,63816,63817],{"class":110},"\"avatar\"",[36,63819,56645],{"class":50},[36,63821,2108],{"class":52631},[36,63823,52638],{"class":50},[36,63825,63826,63828,63830,63832,63834,63837,63839,63841,63844,63846,63848,63850,63853,63855,63858,63860,63862],{"class":38,"line":34005},[36,63827,52672],{"class":50},[36,63829,55619],{"class":52631},[36,63831,16288],{"class":46},[36,63833,70],{"class":50},[36,63835,63836],{"class":110},"\"tx\"",[36,63838,62351],{"class":46},[36,63840,70],{"class":50},[36,63842,63843],{"class":110},"\"发一条友善的评论\"",[36,63845,55642],{"class":46},[36,63847,70],{"class":50},[36,63849,5192],{"class":110},[36,63851,63852],{"class":46}," maxlength",[36,63854,70],{"class":50},[36,63856,63857],{"class":110},"\"200\"",[36,63859,56645],{"class":50},[36,63861,55619],{"class":52631},[36,63863,52638],{"class":50},[36,63865,63866,63868,63870,63873,63875],{"class":38,"line":34025},[36,63867,52672],{"class":50},[36,63869,55218],{"class":52631},[36,63871,63872],{"class":50},">发布\u003C\u002F",[36,63874,55218],{"class":52631},[36,63876,52638],{"class":50},[36,63878,63879,63881,63883],{"class":38,"line":34031},[36,63880,53748],{"class":50},[36,63882,52942],{"class":52631},[36,63884,52638],{"class":50},[36,63886,63887,63889,63891,63893,63895,63897],{"class":38,"line":34042},[36,63888,53475],{"class":50},[36,63890,52942],{"class":52631},[36,63892,54817],{"class":46},[36,63894,70],{"class":50},[36,63896,63802],{"class":110},[36,63898,52638],{"class":50},[36,63900,63901,63903,63905,63907,63909,63912,63915,63917],{"class":38,"line":34048},[36,63902,52672],{"class":50},[36,63904,36],{"class":52631},[36,63906,54817],{"class":46},[36,63908,70],{"class":50},[36,63910,63911],{"class":110},"\"total\"",[36,63913,63914],{"class":50},">0\u002F200字\u003C\u002F",[36,63916,36],{"class":52631},[36,63918,52638],{"class":50},[36,63920,63921,63923,63925],{"class":38,"line":34054},[36,63922,53748],{"class":50},[36,63924,52942],{"class":52631},[36,63926,52638],{"class":50},[36,63928,63929,63931,63933,63935,63937,63940],{"class":38,"line":34060},[36,63930,53475],{"class":50},[36,63932,52942],{"class":52631},[36,63934,54817],{"class":46},[36,63936,70],{"class":50},[36,63938,63939],{"class":110},"\"list\"",[36,63941,52638],{"class":50},[36,63943,63944,63946,63948,63950,63952,63955,63958,63960,63963],{"class":38,"line":34066},[36,63945,52672],{"class":50},[36,63947,52942],{"class":52631},[36,63949,54817],{"class":46},[36,63951,70],{"class":50},[36,63953,63954],{"class":110},"\"item\"",[36,63956,63957],{"class":46}," style",[36,63959,70],{"class":50},[36,63961,63962],{"class":110},"\"display: none;\"",[36,63964,52638],{"class":50},[36,63966,63967,63969,63971,63973,63975,63977,63979,63981],{"class":38,"line":34072},[36,63968,56565],{"class":50},[36,63970,2108],{"class":52631},[36,63972,54817],{"class":46},[36,63974,70],{"class":50},[36,63976,63817],{"class":110},[36,63978,56645],{"class":50},[36,63980,2108],{"class":52631},[36,63982,52638],{"class":50},[36,63984,63985,63987,63989,63991,63993,63996],{"class":38,"line":34078},[36,63986,56565],{"class":50},[36,63988,52942],{"class":52631},[36,63990,54817],{"class":46},[36,63992,70],{"class":50},[36,63994,63995],{"class":110},"\"info\"",[36,63997,52638],{"class":50},[36,63999,64000,64002,64004,64006,64008,64011,64014,64016],{"class":38,"line":34084},[36,64001,56633],{"class":50},[36,64003,19],{"class":52631},[36,64005,54817],{"class":46},[36,64007,70],{"class":50},[36,64009,64010],{"class":110},"\"name\"",[36,64012,64013],{"class":50},">清风徐来\u003C\u002F",[36,64015,19],{"class":52631},[36,64017,52638],{"class":50},[36,64019,64020,64022,64024,64026,64028,64031,64034,64036],{"class":38,"line":34104},[36,64021,56633],{"class":50},[36,64023,19],{"class":52631},[36,64025,54817],{"class":46},[36,64027,70],{"class":50},[36,64029,64030],{"class":110},"\"text\"",[36,64032,64033],{"class":50},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[36,64035,19],{"class":52631},[36,64037,52638],{"class":50},[36,64039,64040,64042,64044,64046,64048,64051,64054,64056],{"class":38,"line":34110},[36,64041,56633],{"class":50},[36,64043,19],{"class":52631},[36,64045,54817],{"class":46},[36,64047,70],{"class":50},[36,64049,64050],{"class":110},"\"time\"",[36,64052,64053],{"class":50},">2022-10-10 20:29:21\u003C\u002F",[36,64055,19],{"class":52631},[36,64057,52638],{"class":50},[36,64059,64060,64062,64064],{"class":38,"line":34126},[36,64061,56738],{"class":50},[36,64063,52942],{"class":52631},[36,64065,52638],{"class":50},[36,64067,64068,64070,64072],{"class":38,"line":34132},[36,64069,53107],{"class":50},[36,64071,52942],{"class":52631},[36,64073,52638],{"class":50},[36,64075,64076,64078,64080],{"class":38,"line":34146},[36,64077,53748],{"class":50},[36,64079,52942],{"class":52631},[36,64081,52638],{"class":50},[36,64083,64084,64086,64088],{"class":38,"line":34152},[36,64085,53475],{"class":50},[36,64087,53144],{"class":52631},[36,64089,52638],{"class":50},[36,64091,64092,64094,64097,64099,64101,64103,64105,64108],{"class":38,"line":34167},[36,64093,1498],{"class":42},[36,64095,64096],{"class":73}," tx",[36,64098,14893],{"class":42},[36,64100,55727],{"class":50},[36,64102,55730],{"class":46},[36,64104,222],{"class":50},[36,64106,64107],{"class":110},"'#tx'",[36,64109,1680],{"class":50},[36,64111,64112,64114,64117,64119,64121,64123,64125,64128],{"class":38,"line":34173},[36,64113,1498],{"class":42},[36,64115,64116],{"class":73}," total",[36,64118,14893],{"class":42},[36,64120,55727],{"class":50},[36,64122,55730],{"class":46},[36,64124,222],{"class":50},[36,64126,64127],{"class":110},"'.total'",[36,64129,1680],{"class":50},[36,64131,64132],{"class":38,"line":34182},[36,64133,64134],{"class":124},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[36,64136,64137,64140,64142,64144,64146,64148,64150],{"class":38,"line":34188},[36,64138,64139],{"class":50},"    tx.",[36,64141,59144],{"class":46},[36,64143,222],{"class":50},[36,64145,62658],{"class":110},[36,64147,477],{"class":50},[36,64149,55780],{"class":42},[36,64151,55783],{"class":50},[36,64153,64154,64157,64159],{"class":38,"line":34197},[36,64155,64156],{"class":50},"      total.style.opacity ",[36,64158,70],{"class":42},[36,64160,57030],{"class":73},[36,64162,64163],{"class":38,"line":34203},[36,64164,34792],{"class":50},[36,64166,64167],{"class":38,"line":34209},[36,64168,64169],{"class":124},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[36,64171,64172,64174,64176,64178,64180,64182,64184],{"class":38,"line":34218},[36,64173,64139],{"class":50},[36,64175,59144],{"class":46},[36,64177,222],{"class":50},[36,64179,62719],{"class":110},[36,64181,477],{"class":50},[36,64183,55780],{"class":42},[36,64185,55783],{"class":50},[36,64187,64188,64190,64192],{"class":38,"line":34224},[36,64189,64156],{"class":50},[36,64191,70],{"class":42},[36,64193,48664],{"class":73},[36,64195,64196],{"class":38,"line":34235},[36,64197,34792],{"class":50},[36,64199,64200],{"class":38,"line":34241},[36,64201,64202],{"class":124},"    \u002F\u002F 3. 检测用户输入\n",[36,64204,64205,64207,64209,64211,64214,64216,64218],{"class":38,"line":34260},[36,64206,64139],{"class":50},[36,64208,59144],{"class":46},[36,64210,222],{"class":50},[36,64212,64213],{"class":110},"'input'",[36,64215,477],{"class":50},[36,64217,55780],{"class":42},[36,64219,55783],{"class":50},[36,64221,64222],{"class":38,"line":34266},[36,64223,64224],{"class":124},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[36,64226,64227,64230,64232,64235,64238,64240,64243,64245,64247],{"class":38,"line":34277},[36,64228,64229],{"class":50},"      total.innerHTML ",[36,64231,70],{"class":42},[36,64233,64234],{"class":110}," `${",[36,64236,64237],{"class":50},"tx",[36,64239,2225],{"class":110},[36,64241,64242],{"class":50},"value",[36,64244,2225],{"class":110},[36,64246,53299],{"class":73},[36,64248,64249],{"class":110},"}\u002F200字`\n",[36,64251,64252],{"class":38,"line":34283},[36,64253,34792],{"class":50},[36,64255,64256],{"class":38,"line":34303},[36,64257,58],{"emptyLinePlaceholder":57},[36,64259,64260],{"class":38,"line":34319},[36,64261,64262],{"class":124},"    \u002F\u002F const str = 'andy'\n",[36,64264,64265],{"class":38,"line":34325},[36,64266,64267],{"class":124},"    \u002F\u002F console.log(str.length)\n",[36,64269,64270,64272,64274],{"class":38,"line":34339},[36,64271,53748],{"class":50},[36,64273,53144],{"class":52631},[36,64275,52638],{"class":50},[36,64277,64278,64280,64282],{"class":38,"line":34345},[36,64279,53116],{"class":50},[36,64281,53131],{"class":52631},[36,64283,52638],{"class":50},[36,64285,64286],{"class":38,"line":34351},[36,64287,58],{"emptyLinePlaceholder":57},[36,64289,64290,64292,64294],{"class":38,"line":34362},[36,64291,53116],{"class":50},[36,64293,51966],{"class":52631},[36,64295,52638],{"class":50},[23327,64297,64299],{"id":64298},"_3254-change事件","3.2.5.4 change事件",[19,64301,64302],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64304,64305],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64307,64308],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,64310,64312],{"className":51964,"code":64311,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    const input = document.querySelector('input')\n    input.addEventListener('change', function () {\n      console.log(111)\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,64313,64314,64324,64338,64342,64350,64364,64384,64396,64404,64408,64416,64430,64438,64456,64474,64486,64490,64498,64506,64510],{"__ignoreMap":31},[36,64315,64316,64318,64320,64322],{"class":38,"line":39},[36,64317,52628],{"class":50},[36,64319,52632],{"class":52631},[36,64321,52635],{"class":46},[36,64323,52638],{"class":50},[36,64325,64326,64328,64330,64332,64334,64336],{"class":38,"line":54},[36,64327,2577],{"class":50},[36,64329,51966],{"class":52631},[36,64331,52647],{"class":46},[36,64333,70],{"class":50},[36,64335,52652],{"class":110},[36,64337,52638],{"class":50},[36,64339,64340],{"class":38,"line":61},[36,64341,58],{"emptyLinePlaceholder":57},[36,64343,64344,64346,64348],{"class":38,"line":80},[36,64345,2577],{"class":50},[36,64347,52665],{"class":52631},[36,64349,52638],{"class":50},[36,64351,64352,64354,64356,64358,64360,64362],{"class":38,"line":96},[36,64353,53475],{"class":50},[36,64355,52675],{"class":52631},[36,64357,52678],{"class":46},[36,64359,70],{"class":50},[36,64361,52683],{"class":110},[36,64363,52638],{"class":50},[36,64365,64366,64368,64370,64372,64374,64376,64378,64380,64382],{"class":38,"line":101},[36,64367,53475],{"class":50},[36,64369,52675],{"class":52631},[36,64371,16249],{"class":46},[36,64373,70],{"class":50},[36,64375,52722],{"class":110},[36,64377,52702],{"class":46},[36,64379,70],{"class":50},[36,64381,52729],{"class":110},[36,64383,52638],{"class":50},[36,64385,64386,64388,64390,64392,64394],{"class":38,"line":128},[36,64387,53475],{"class":50},[36,64389,52738],{"class":52631},[36,64391,52741],{"class":50},[36,64393,52738],{"class":52631},[36,64395,52638],{"class":50},[36,64397,64398,64400,64402],{"class":38,"line":149},[36,64399,53116],{"class":50},[36,64401,52665],{"class":52631},[36,64403,52638],{"class":50},[36,64405,64406],{"class":38,"line":154},[36,64407,58],{"emptyLinePlaceholder":57},[36,64409,64410,64412,64414],{"class":38,"line":167},[36,64411,2577],{"class":50},[36,64413,53131],{"class":52631},[36,64415,52638],{"class":50},[36,64417,64418,64420,64422,64424,64426,64428],{"class":38,"line":172},[36,64419,53475],{"class":50},[36,64421,55152],{"class":52631},[36,64423,55155],{"class":46},[36,64425,70],{"class":50},[36,64427,64030],{"class":110},[36,64429,52638],{"class":50},[36,64431,64432,64434,64436],{"class":38,"line":192},[36,64433,53475],{"class":50},[36,64435,53144],{"class":52631},[36,64437,52638],{"class":50},[36,64439,64440,64442,64444,64446,64448,64450,64452,64454],{"class":38,"line":211},[36,64441,1498],{"class":42},[36,64443,61936],{"class":73},[36,64445,14893],{"class":42},[36,64447,55727],{"class":50},[36,64449,55730],{"class":46},[36,64451,222],{"class":50},[36,64453,64213],{"class":110},[36,64455,1680],{"class":50},[36,64457,64458,64461,64463,64465,64468,64470,64472],{"class":38,"line":216},[36,64459,64460],{"class":50},"    input.",[36,64462,59144],{"class":46},[36,64464,222],{"class":50},[36,64466,64467],{"class":110},"'change'",[36,64469,477],{"class":50},[36,64471,55780],{"class":42},[36,64473,55783],{"class":50},[36,64475,64476,64478,64480,64482,64484],{"class":38,"line":231},[36,64477,59575],{"class":50},[36,64479,59578],{"class":46},[36,64481,222],{"class":50},[36,64483,2260],{"class":73},[36,64485,1680],{"class":50},[36,64487,64488],{"class":38,"line":236},[36,64489,34792],{"class":50},[36,64491,64492,64494,64496],{"class":38,"line":247},[36,64493,53748],{"class":50},[36,64495,53144],{"class":52631},[36,64497,52638],{"class":50},[36,64499,64500,64502,64504],{"class":38,"line":637},[36,64501,53116],{"class":50},[36,64503,53131],{"class":52631},[36,64505,52638],{"class":50},[36,64507,64508],{"class":38,"line":646},[36,64509,58],{"emptyLinePlaceholder":57},[36,64511,64512,64514,64516],{"class":38,"line":655},[36,64513,53116],{"class":50},[36,64515,51966],{"class":52631},[36,64517,52638],{"class":50},[19,64519,64520],{},"总结：内容发生改变才回去触发",[1645,64522,64524],{"id":64523},"_326-事件对象","3.2.6 事件对象",[23327,64526,64528],{"id":64527},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64530,64531],{},[2992,64532],{"alt":31,"src":64533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64535,64536],{},[2992,64537],{"alt":31,"src":64538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64540,64541],{},"点击一次，就输出了事件对象，它是个对象",[19,64543,64544],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64546,64547],{},[2992,64548],{"alt":31,"src":64549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23327,64551,64553],{"id":64552},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64555,64556],{},[2992,64557],{"alt":31,"src":64558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64560,64561],{},"实现按特殊字符才是实现打印输出效果：",[26,64563,64565],{"className":54398,"code":64564,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n  \u003Cinput type=\"text\">\n  \u003Cscript>\n    \u002F\u002F const btn = document.querySelector('button')\n    \u002F\u002F btn.addEventListener('click', function (e) {\n    \u002F\u002F   console.log(e);\n    \u002F\u002F })\n    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n    const input = document.querySelector('input')\n    input.addEventListener('keyup', function (e) {\n      if (e.key === 'Enter') {\n        console.log('我按下了回车键')\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,64566,64567,64575,64580,64594,64602,64607,64612,64617,64622,64627,64632,64637,64642,64647,64651,64655,64663],{"__ignoreMap":31},[36,64568,64569,64571,64573],{"class":38,"line":39},[36,64570,2577],{"class":50},[36,64572,53131],{"class":52631},[36,64574,52638],{"class":50},[36,64576,64577],{"class":38,"line":54},[36,64578,64579],{"class":124},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[36,64581,64582,64584,64586,64588,64590,64592],{"class":38,"line":61},[36,64583,53475],{"class":50},[36,64585,55152],{"class":52631},[36,64587,55155],{"class":46},[36,64589,70],{"class":50},[36,64591,64030],{"class":110},[36,64593,52638],{"class":50},[36,64595,64596,64598,64600],{"class":38,"line":80},[36,64597,53475],{"class":50},[36,64599,53144],{"class":52631},[36,64601,52638],{"class":50},[36,64603,64604],{"class":38,"line":96},[36,64605,64606],{"class":50},"    \u002F\u002F const btn = document.querySelector('button')\n",[36,64608,64609],{"class":38,"line":101},[36,64610,64611],{"class":50},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[36,64613,64614],{"class":38,"line":128},[36,64615,64616],{"class":50},"    \u002F\u002F   console.log(e);\n",[36,64618,64619],{"class":38,"line":149},[36,64620,64621],{"class":50},"    \u002F\u002F })\n",[36,64623,64624],{"class":38,"line":154},[36,64625,64626],{"class":50},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[36,64628,64629],{"class":38,"line":167},[36,64630,64631],{"class":50},"    const input = document.querySelector('input')\n",[36,64633,64634],{"class":38,"line":172},[36,64635,64636],{"class":50},"    input.addEventListener('keyup', function (e) {\n",[36,64638,64639],{"class":38,"line":192},[36,64640,64641],{"class":50},"      if (e.key === 'Enter') {\n",[36,64643,64644],{"class":38,"line":211},[36,64645,64646],{"class":50},"        console.log('我按下了回车键')\n",[36,64648,64649],{"class":38,"line":216},[36,64650,53729],{"class":50},[36,64652,64653],{"class":38,"line":231},[36,64654,34792],{"class":50},[36,64656,64657,64659,64661],{"class":38,"line":236},[36,64658,53748],{"class":50},[36,64660,53144],{"class":52631},[36,64662,52638],{"class":50},[36,64664,64665,64667,64669],{"class":38,"line":247},[36,64666,53116],{"class":50},[36,64668,53131],{"class":52631},[36,64670,52638],{"class":50},[23327,64672,64674],{"id":64673},"_3263-trim方法","3.2.6.3 trim方法",[19,64676,64677],{},[2992,64678],{"alt":31,"src":64679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64681,64682],{},[2992,64683],{"alt":31,"src":64684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64686,64687],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64689,64690],{},"str.trim()",[1645,64692,64694],{"id":64693},"_327-环境对象","3.2.7 环境对象",[19,64696,64697],{},[2992,64698],{"alt":31,"src":64699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64701,64702],{},[2992,64703],{"alt":31,"src":64704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64706,64707],{},[2992,64708],{"alt":31,"src":64709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64711,64712],{},"实际函数调用是window.fn()",[19,64714,64715],{},"普通函数里面this指向的是window",[2674,64717,64718,64721,64724],{},[259,64719,64720],{},"在普通函数下，this指向的是window",[259,64722,64723],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[259,64725,64726],{},"箭头函数没有this",[19,64728,64729],{},"粗略记法就是：谁调用，this就指向谁",[19,64731,64732],{},[2992,64733],{"alt":31,"src":64734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64736,64737],{},[2992,64738],{"alt":31,"src":64739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64741,64742],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64744,64745],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,64747,64749],{"className":54398,"code":64748,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cbutton>点击\u003C\u002Fbutton>\n  \u003Cscript>\n    const button = document.querySelector('button')\n    button.addEventListener('click', function () {\n      \u002F\u002F console.log(this);\n      this.style.color = 'pink'\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,64750,64751,64759,64771,64779,64784,64789,64794,64799,64803,64811],{"__ignoreMap":31},[36,64752,64753,64755,64757],{"class":38,"line":39},[36,64754,2577],{"class":50},[36,64756,53131],{"class":52631},[36,64758,52638],{"class":50},[36,64760,64761,64763,64765,64767,64769],{"class":38,"line":54},[36,64762,53475],{"class":50},[36,64764,55218],{"class":52631},[36,64766,55224],{"class":50},[36,64768,55218],{"class":52631},[36,64770,52638],{"class":50},[36,64772,64773,64775,64777],{"class":38,"line":61},[36,64774,53475],{"class":50},[36,64776,53144],{"class":52631},[36,64778,52638],{"class":50},[36,64780,64781],{"class":38,"line":80},[36,64782,64783],{"class":50},"    const button = document.querySelector('button')\n",[36,64785,64786],{"class":38,"line":96},[36,64787,64788],{"class":50},"    button.addEventListener('click', function () {\n",[36,64790,64791],{"class":38,"line":101},[36,64792,64793],{"class":50},"      \u002F\u002F console.log(this);\n",[36,64795,64796],{"class":38,"line":128},[36,64797,64798],{"class":50},"      this.style.color = 'pink'\n",[36,64800,64801],{"class":38,"line":149},[36,64802,34792],{"class":50},[36,64804,64805,64807,64809],{"class":38,"line":154},[36,64806,53748],{"class":50},[36,64808,53144],{"class":52631},[36,64810,52638],{"class":50},[36,64812,64813,64815,64817],{"class":38,"line":167},[36,64814,53116],{"class":50},[36,64816,53131],{"class":52631},[36,64818,52638],{"class":50},[1645,64820,64822],{"id":64821},"_328-回调函数","3.2.8 回调函数",[19,64824,64825],{},[2992,64826],{"alt":31,"src":64827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64829,64830],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64832,1388],{},[2674,64834,64835,64838,64841],{},[259,64836,64837],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[259,64839,64840],{},"回调函数本质还是函数，只不过把它当成参数使用",[259,64842,64843],{},"使用匿名函数做为回调函数比较常见",[1645,64845,64847],{"id":64846},"_329-tab栏切换","3.2.9 tab栏切换",[19,64849,64850],{},[2992,64851],{"alt":31,"src":64852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,64854,64856],{"className":51964,"code":64855,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .item.active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n    \u002F\u002F 1.1 获取 a 元素 \n    const as = document.querySelectorAll('.tab-nav a')\n    \u002F\u002F console.log(as) \n    for (let i = 0; i \u003C as.length; i++) {\n      \u002F\u002F console.log(as[i])\n      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n      as[i].addEventListener('mouseenter', function () {\n        \u002F\u002F console.log('鼠标经过')\n        \u002F\u002F 排他思想  \n        \u002F\u002F 干掉别人 移除类active\n        document.querySelector('.tab-nav .active').classList.remove('active')\n        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n        this.classList.add('active')\n\n        \u002F\u002F 下面5个大盒子 一一对应  .item \n        \u002F\u002F 干掉别人\n        document.querySelector('.tab-content .active').classList.remove('active')\n        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,64857,64858,64868,64882,64886,64894,64908,64928,64948,64961,64969,64975,64985,64995,64999,65003,65010,65023,65036,65048,65064,65068,65072,65079,65091,65103,65115,65125,65135,65139,65143,65152,65164,65175,65187,65191,65195,65203,65213,65223,65233,65237,65241,65251,65265,65277,65281,65285,65297,65308,65325,65335,65339,65343,65358,65369,65379,65383,65387,65394,65409,65413,65417,65425,65435,65439,65443,65452,65462,65466,65474,65482,65486,65494,65509,65524,65537,65545,65579,65606,65633,65660,65687,65695,65703,65718,65755,65790,65825,65860,65895,65903,65911,65919,65924,65929,65949,65954,65983,65988,65993,66011,66016,66021,66026,66048,66053,66069,66073,66078,66083,66104,66109,66138,66142,66147,66151,66159,66167,66171],{"__ignoreMap":31},[36,64859,64860,64862,64864,64866],{"class":38,"line":39},[36,64861,52628],{"class":50},[36,64863,52632],{"class":52631},[36,64865,52635],{"class":46},[36,64867,52638],{"class":50},[36,64869,64870,64872,64874,64876,64878,64880],{"class":38,"line":54},[36,64871,2577],{"class":50},[36,64873,51966],{"class":52631},[36,64875,52647],{"class":46},[36,64877,70],{"class":50},[36,64879,52652],{"class":110},[36,64881,52638],{"class":50},[36,64883,64884],{"class":38,"line":61},[36,64885,58],{"emptyLinePlaceholder":57},[36,64887,64888,64890,64892],{"class":38,"line":80},[36,64889,2577],{"class":50},[36,64891,52665],{"class":52631},[36,64893,52638],{"class":50},[36,64895,64896,64898,64900,64902,64904,64906],{"class":38,"line":96},[36,64897,53475],{"class":50},[36,64899,52675],{"class":52631},[36,64901,52678],{"class":46},[36,64903,70],{"class":50},[36,64905,52683],{"class":110},[36,64907,60458],{"class":50},[36,64909,64910,64912,64914,64916,64918,64920,64922,64924,64926],{"class":38,"line":101},[36,64911,53475],{"class":50},[36,64913,52675],{"class":52631},[36,64915,52694],{"class":46},[36,64917,70],{"class":50},[36,64919,52699],{"class":110},[36,64921,52702],{"class":46},[36,64923,70],{"class":50},[36,64925,52707],{"class":110},[36,64927,60458],{"class":50},[36,64929,64930,64932,64934,64936,64938,64940,64942,64944,64946],{"class":38,"line":128},[36,64931,53475],{"class":50},[36,64933,52675],{"class":52631},[36,64935,16249],{"class":46},[36,64937,70],{"class":50},[36,64939,52722],{"class":110},[36,64941,52702],{"class":46},[36,64943,70],{"class":50},[36,64945,52729],{"class":110},[36,64947,60458],{"class":50},[36,64949,64950,64952,64954,64957,64959],{"class":38,"line":149},[36,64951,53475],{"class":50},[36,64953,52738],{"class":52631},[36,64955,64956],{"class":50},">tab栏切换\u003C\u002F",[36,64958,52738],{"class":52631},[36,64960,52638],{"class":50},[36,64962,64963,64965,64967],{"class":38,"line":154},[36,64964,53475],{"class":50},[36,64966,1592],{"class":52631},[36,64968,52638],{"class":50},[36,64970,64971,64973],{"class":38,"line":167},[36,64972,569],{"class":52631},[36,64974,16901],{"class":50},[36,64976,64977,64979,64981,64983],{"class":38,"line":172},[36,64978,56037],{"class":73},[36,64980,52768],{"class":50},[36,64982,1859],{"class":73},[36,64984,77],{"class":50},[36,64986,64987,64989,64991,64993],{"class":38,"line":192},[36,64988,56026],{"class":73},[36,64990,52768],{"class":50},[36,64992,1859],{"class":73},[36,64994,77],{"class":50},[36,64996,64997],{"class":38,"line":211},[36,64998,3693],{"class":50},[36,65000,65001],{"class":38,"line":216},[36,65002,58],{"emptyLinePlaceholder":57},[36,65004,65005,65008],{"class":38,"line":231},[36,65006,65007],{"class":46},"    .tab",[36,65009,16901],{"class":50},[36,65011,65012,65014,65016,65019,65021],{"class":38,"line":236},[36,65013,56102],{"class":73},[36,65015,52768],{"class":50},[36,65017,65018],{"class":73},"590",[36,65020,52823],{"class":42},[36,65022,77],{"class":50},[36,65024,65025,65027,65029,65032,65034],{"class":38,"line":247},[36,65026,56116],{"class":73},[36,65028,52768],{"class":50},[36,65030,65031],{"class":73},"340",[36,65033,52823],{"class":42},[36,65035,77],{"class":50},[36,65037,65038,65040,65042,65044,65046],{"class":38,"line":637},[36,65039,56037],{"class":73},[36,65041,52768],{"class":50},[36,65043,2367],{"class":73},[36,65045,52823],{"class":42},[36,65047,77],{"class":50},[36,65049,65050,65052,65054,65056,65058,65060,65062],{"class":38,"line":646},[36,65051,63308],{"class":73},[36,65053,52768],{"class":50},[36,65055,1885],{"class":73},[36,65057,52823],{"class":42},[36,65059,52852],{"class":73},[36,65061,63575],{"class":73},[36,65063,77],{"class":50},[36,65065,65066],{"class":38,"line":655},[36,65067,3693],{"class":50},[36,65069,65070],{"class":38,"line":660},[36,65071,58],{"emptyLinePlaceholder":57},[36,65073,65074,65077],{"class":38,"line":665},[36,65075,65076],{"class":46},"    .tab-nav",[36,65078,16901],{"class":50},[36,65080,65081,65083,65085,65087,65089],{"class":38,"line":674},[36,65082,56102],{"class":73},[36,65084,52768],{"class":50},[36,65086,1979],{"class":73},[36,65088,1996],{"class":42},[36,65090,77],{"class":50},[36,65092,65093,65095,65097,65099,65101],{"class":38,"line":679},[36,65094,56116],{"class":73},[36,65096,52768],{"class":50},[36,65098,2574],{"class":73},[36,65100,52823],{"class":42},[36,65102,77],{"class":50},[36,65104,65105,65107,65109,65111,65113],{"class":38,"line":692},[36,65106,58690],{"class":73},[36,65108,52768],{"class":50},[36,65110,2574],{"class":73},[36,65112,52823],{"class":42},[36,65114,77],{"class":50},[36,65116,65117,65119,65121,65123],{"class":38,"line":705},[36,65118,56340],{"class":73},[36,65120,52768],{"class":50},[36,65122,52808],{"class":73},[36,65124,77],{"class":50},[36,65126,65127,65129,65131,65133],{"class":38,"line":710},[36,65128,56351],{"class":73},[36,65130,52768],{"class":50},[36,65132,52999],{"class":73},[36,65134,77],{"class":50},[36,65136,65137],{"class":38,"line":722},[36,65138,3693],{"class":50},[36,65140,65141],{"class":38,"line":750},[36,65142,58],{"emptyLinePlaceholder":57},[36,65144,65145,65147,65150],{"class":38,"line":755},[36,65146,65076],{"class":46},[36,65148,65149],{"class":52631}," h3",[36,65151,16901],{"class":50},[36,65153,65154,65156,65158,65160,65162],{"class":38,"line":777},[36,65155,56253],{"class":73},[36,65157,52768],{"class":50},[36,65159,2467],{"class":73},[36,65161,52823],{"class":42},[36,65163,77],{"class":50},[36,65165,65166,65168,65170,65173],{"class":38,"line":802},[36,65167,63665],{"class":73},[36,65169,52768],{"class":50},[36,65171,65172],{"class":73},"normal",[36,65174,77],{"class":50},[36,65176,65177,65179,65181,65183,65185],{"class":38,"line":807},[36,65178,63331],{"class":73},[36,65180,52768],{"class":50},[36,65182,2367],{"class":73},[36,65184,52823],{"class":42},[36,65186,77],{"class":50},[36,65188,65189],{"class":38,"line":818},[36,65190,3693],{"class":50},[36,65192,65193],{"class":38,"line":843},[36,65194,58],{"emptyLinePlaceholder":57},[36,65196,65197,65199,65201],{"class":38,"line":848},[36,65198,65076],{"class":46},[36,65200,62623],{"class":52631},[36,65202,16901],{"class":50},[36,65204,65205,65207,65209,65211],{"class":38,"line":859},[36,65206,56063],{"class":73},[36,65208,52768],{"class":50},[36,65210,56068],{"class":73},[36,65212,77],{"class":50},[36,65214,65215,65217,65219,65221],{"class":38,"line":864},[36,65216,56340],{"class":73},[36,65218,52768],{"class":50},[36,65220,52808],{"class":73},[36,65222,77],{"class":50},[36,65224,65225,65227,65229,65231],{"class":38,"line":873},[36,65226,56351],{"class":73},[36,65228,52768],{"class":50},[36,65230,52911],{"class":73},[36,65232,77],{"class":50},[36,65234,65235],{"class":38,"line":9454},[36,65236,3693],{"class":50},[36,65238,65239],{"class":38,"line":9481},[36,65240,58],{"emptyLinePlaceholder":57},[36,65242,65243,65245,65247,65249],{"class":38,"line":9486},[36,65244,65076],{"class":46},[36,65246,62623],{"class":52631},[36,65248,56406],{"class":52631},[36,65250,16901],{"class":50},[36,65252,65253,65255,65257,65259,65261,65263],{"class":38,"line":9492},[36,65254,56037],{"class":73},[36,65256,52768],{"class":50},[36,65258,1859],{"class":73},[36,65260,319],{"class":73},[36,65262,52823],{"class":42},[36,65264,77],{"class":50},[36,65266,65267,65269,65271,65273,65275],{"class":38,"line":9504},[36,65268,56253],{"class":73},[36,65270,52768],{"class":50},[36,65272,2216],{"class":73},[36,65274,52823],{"class":42},[36,65276,77],{"class":50},[36,65278,65279],{"class":38,"line":9516},[36,65280,3693],{"class":50},[36,65282,65283],{"class":38,"line":9528},[36,65284,58],{"emptyLinePlaceholder":57},[36,65286,65287,65289,65291,65293,65295],{"class":38,"line":11184},[36,65288,65076],{"class":46},[36,65290,62623],{"class":52631},[36,65292,56406],{"class":52631},[36,65294,474],{"class":52631},[36,65296,16901],{"class":50},[36,65298,65299,65302,65304,65306],{"class":38,"line":11209},[36,65300,65301],{"class":73},"      text-decoration",[36,65303,52768],{"class":50},[36,65305,56068],{"class":73},[36,65307,77],{"class":50},[36,65309,65310,65312,65314,65316,65318,65320,65323],{"class":38,"line":11232},[36,65311,63563],{"class":73},[36,65313,52768],{"class":50},[36,65315,1747],{"class":73},[36,65317,52823],{"class":42},[36,65319,52852],{"class":73},[36,65321,65322],{"class":73}," transparent",[36,65324,77],{"class":50},[36,65326,65327,65329,65331,65333],{"class":38,"line":11256},[36,65328,58747],{"class":73},[36,65330,52768],{"class":50},[36,65332,63700],{"class":73},[36,65334,77],{"class":50},[36,65336,65337],{"class":38,"line":11261},[36,65338,3693],{"class":50},[36,65340,65341],{"class":38,"line":11266},[36,65342,58],{"emptyLinePlaceholder":57},[36,65344,65345,65347,65349,65351,65353,65356],{"class":38,"line":11271},[36,65346,65076],{"class":46},[36,65348,62623],{"class":52631},[36,65350,56406],{"class":52631},[36,65352,474],{"class":52631},[36,65354,65355],{"class":46},".active",[36,65357,16901],{"class":50},[36,65359,65360,65362,65364,65367],{"class":38,"line":11280},[36,65361,63122],{"class":73},[36,65363,52768],{"class":50},[36,65365,65366],{"class":73},"#e1251b",[36,65368,77],{"class":50},[36,65370,65371,65373,65375,65377],{"class":38,"line":11285},[36,65372,58747],{"class":73},[36,65374,52768],{"class":50},[36,65376,65366],{"class":73},[36,65378,77],{"class":50},[36,65380,65381],{"class":38,"line":11291},[36,65382,3693],{"class":50},[36,65384,65385],{"class":38,"line":11312},[36,65386,58],{"emptyLinePlaceholder":57},[36,65388,65389,65392],{"class":38,"line":11318},[36,65390,65391],{"class":46},"    .tab-content",[36,65393,16901],{"class":50},[36,65395,65396,65398,65400,65402,65405,65407],{"class":38,"line":11332},[36,65397,56026],{"class":73},[36,65399,52768],{"class":50},[36,65401,1859],{"class":73},[36,65403,65404],{"class":73}," 16",[36,65406,52823],{"class":42},[36,65408,77],{"class":50},[36,65410,65411],{"class":38,"line":11338},[36,65412,3693],{"class":50},[36,65414,65415],{"class":38,"line":11365},[36,65416,58],{"emptyLinePlaceholder":57},[36,65418,65419,65421,65423],{"class":38,"line":11374},[36,65420,65391],{"class":46},[36,65422,63505],{"class":46},[36,65424,16901],{"class":50},[36,65426,65427,65429,65431,65433],{"class":38,"line":11380},[36,65428,56340],{"class":73},[36,65430,52768],{"class":50},[36,65432,56068],{"class":73},[36,65434,77],{"class":50},[36,65436,65437],{"class":38,"line":11388},[36,65438,3693],{"class":50},[36,65440,65441],{"class":38,"line":11393},[36,65442,58],{"emptyLinePlaceholder":57},[36,65444,65445,65447,65450],{"class":38,"line":17933},[36,65446,65391],{"class":46},[36,65448,65449],{"class":46}," .item.active",[36,65451,16901],{"class":50},[36,65453,65454,65456,65458,65460],{"class":38,"line":17939},[36,65455,56340],{"class":73},[36,65457,52768],{"class":50},[36,65459,62200],{"class":73},[36,65461,77],{"class":50},[36,65463,65464],{"class":38,"line":17962},[36,65465,3693],{"class":50},[36,65467,65468,65470,65472],{"class":38,"line":17968},[36,65469,53748],{"class":50},[36,65471,1592],{"class":52631},[36,65473,52638],{"class":50},[36,65475,65476,65478,65480],{"class":38,"line":17991},[36,65477,53116],{"class":50},[36,65479,52665],{"class":52631},[36,65481,52638],{"class":50},[36,65483,65484],{"class":38,"line":18005},[36,65485,58],{"emptyLinePlaceholder":57},[36,65487,65488,65490,65492],{"class":38,"line":18025},[36,65489,2577],{"class":50},[36,65491,53131],{"class":52631},[36,65493,52638],{"class":50},[36,65495,65496,65498,65500,65502,65504,65507],{"class":38,"line":18031},[36,65497,53475],{"class":50},[36,65499,52942],{"class":52631},[36,65501,54817],{"class":46},[36,65503,70],{"class":50},[36,65505,65506],{"class":110},"\"tab\"",[36,65508,52638],{"class":50},[36,65510,65511,65513,65515,65517,65519,65522],{"class":38,"line":18042},[36,65512,52672],{"class":50},[36,65514,52942],{"class":52631},[36,65516,54817],{"class":46},[36,65518,70],{"class":50},[36,65520,65521],{"class":110},"\"tab-nav\"",[36,65523,52638],{"class":50},[36,65525,65526,65528,65530,65533,65535],{"class":38,"line":18065},[36,65527,56565],{"class":50},[36,65529,1645],{"class":52631},[36,65531,65532],{"class":50},">每日特价\u003C\u002F",[36,65534,1645],{"class":52631},[36,65536,52638],{"class":50},[36,65538,65539,65541,65543],{"class":38,"line":18087},[36,65540,56565],{"class":50},[36,65542,2674],{"class":52631},[36,65544,52638],{"class":50},[36,65546,65547,65549,65551,65553,65555,65557,65559,65561,65563,65565,65568,65571,65573,65575,65577],{"class":38,"line":18092},[36,65548,56633],{"class":50},[36,65550,259],{"class":52631},[36,65552,62383],{"class":50},[36,65554,1906],{"class":52631},[36,65556,54817],{"class":46},[36,65558,70],{"class":50},[36,65560,61037],{"class":110},[36,65562,62388],{"class":46},[36,65564,70],{"class":50},[36,65566,65567],{"class":110},"\"javascript:;\"",[36,65569,65570],{"class":50},">精选\u003C\u002F",[36,65572,1906],{"class":52631},[36,65574,56645],{"class":50},[36,65576,259],{"class":52631},[36,65578,52638],{"class":50},[36,65580,65581,65583,65585,65587,65589,65591,65593,65595,65598,65600,65602,65604],{"class":38,"line":18098},[36,65582,56633],{"class":50},[36,65584,259],{"class":52631},[36,65586,62383],{"class":50},[36,65588,1906],{"class":52631},[36,65590,62388],{"class":46},[36,65592,70],{"class":50},[36,65594,65567],{"class":110},[36,65596,65597],{"class":50},">美食\u003C\u002F",[36,65599,1906],{"class":52631},[36,65601,56645],{"class":50},[36,65603,259],{"class":52631},[36,65605,52638],{"class":50},[36,65607,65608,65610,65612,65614,65616,65618,65620,65622,65625,65627,65629,65631],{"class":38,"line":18112},[36,65609,56633],{"class":50},[36,65611,259],{"class":52631},[36,65613,62383],{"class":50},[36,65615,1906],{"class":52631},[36,65617,62388],{"class":46},[36,65619,70],{"class":50},[36,65621,65567],{"class":110},[36,65623,65624],{"class":50},">百货\u003C\u002F",[36,65626,1906],{"class":52631},[36,65628,56645],{"class":50},[36,65630,259],{"class":52631},[36,65632,52638],{"class":50},[36,65634,65635,65637,65639,65641,65643,65645,65647,65649,65652,65654,65656,65658],{"class":38,"line":18125},[36,65636,56633],{"class":50},[36,65638,259],{"class":52631},[36,65640,62383],{"class":50},[36,65642,1906],{"class":52631},[36,65644,62388],{"class":46},[36,65646,70],{"class":50},[36,65648,65567],{"class":110},[36,65650,65651],{"class":50},">个护\u003C\u002F",[36,65653,1906],{"class":52631},[36,65655,56645],{"class":50},[36,65657,259],{"class":52631},[36,65659,52638],{"class":50},[36,65661,65662,65664,65666,65668,65670,65672,65674,65676,65679,65681,65683,65685],{"class":38,"line":18130},[36,65663,56633],{"class":50},[36,65665,259],{"class":52631},[36,65667,62383],{"class":50},[36,65669,1906],{"class":52631},[36,65671,62388],{"class":46},[36,65673,70],{"class":50},[36,65675,65567],{"class":110},[36,65677,65678],{"class":50},">预告\u003C\u002F",[36,65680,1906],{"class":52631},[36,65682,56645],{"class":50},[36,65684,259],{"class":52631},[36,65686,52638],{"class":50},[36,65688,65689,65691,65693],{"class":38,"line":18144},[36,65690,56738],{"class":50},[36,65692,2674],{"class":52631},[36,65694,52638],{"class":50},[36,65696,65697,65699,65701],{"class":38,"line":18149},[36,65698,53107],{"class":50},[36,65700,52942],{"class":52631},[36,65702,52638],{"class":50},[36,65704,65705,65707,65709,65711,65713,65716],{"class":38,"line":18155},[36,65706,52672],{"class":50},[36,65708,52942],{"class":52631},[36,65710,54817],{"class":46},[36,65712,70],{"class":50},[36,65714,65715],{"class":110},"\"tab-content\"",[36,65717,52638],{"class":50},[36,65719,65720,65722,65724,65726,65728,65731,65733,65735,65737,65739,65742,65744,65746,65748,65751,65753],{"class":38,"line":18160},[36,65721,56565],{"class":50},[36,65723,52942],{"class":52631},[36,65725,54817],{"class":46},[36,65727,70],{"class":50},[36,65729,65730],{"class":110},"\"item active\"",[36,65732,62383],{"class":50},[36,65734,2992],{"class":52631},[36,65736,56570],{"class":46},[36,65738,70],{"class":50},[36,65740,65741],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[36,65743,56578],{"class":46},[36,65745,70],{"class":50},[36,65747,9126],{"class":110},[36,65749,65750],{"class":50}," \u002F>\u003C\u002F",[36,65752,52942],{"class":52631},[36,65754,52638],{"class":50},[36,65756,65757,65759,65761,65763,65765,65767,65769,65771,65773,65775,65778,65780,65782,65784,65786,65788],{"class":38,"line":18174},[36,65758,56565],{"class":50},[36,65760,52942],{"class":52631},[36,65762,54817],{"class":46},[36,65764,70],{"class":50},[36,65766,63954],{"class":110},[36,65768,62383],{"class":50},[36,65770,2992],{"class":52631},[36,65772,56570],{"class":46},[36,65774,70],{"class":50},[36,65776,65777],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[36,65779,56578],{"class":46},[36,65781,70],{"class":50},[36,65783,9126],{"class":110},[36,65785,65750],{"class":50},[36,65787,52942],{"class":52631},[36,65789,52638],{"class":50},[36,65791,65792,65794,65796,65798,65800,65802,65804,65806,65808,65810,65813,65815,65817,65819,65821,65823],{"class":38,"line":18179},[36,65793,56565],{"class":50},[36,65795,52942],{"class":52631},[36,65797,54817],{"class":46},[36,65799,70],{"class":50},[36,65801,63954],{"class":110},[36,65803,62383],{"class":50},[36,65805,2992],{"class":52631},[36,65807,56570],{"class":46},[36,65809,70],{"class":50},[36,65811,65812],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[36,65814,56578],{"class":46},[36,65816,70],{"class":50},[36,65818,9126],{"class":110},[36,65820,65750],{"class":50},[36,65822,52942],{"class":52631},[36,65824,52638],{"class":50},[36,65826,65827,65829,65831,65833,65835,65837,65839,65841,65843,65845,65848,65850,65852,65854,65856,65858],{"class":38,"line":18184},[36,65828,56565],{"class":50},[36,65830,52942],{"class":52631},[36,65832,54817],{"class":46},[36,65834,70],{"class":50},[36,65836,63954],{"class":110},[36,65838,62383],{"class":50},[36,65840,2992],{"class":52631},[36,65842,56570],{"class":46},[36,65844,70],{"class":50},[36,65846,65847],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[36,65849,56578],{"class":46},[36,65851,70],{"class":50},[36,65853,9126],{"class":110},[36,65855,65750],{"class":50},[36,65857,52942],{"class":52631},[36,65859,52638],{"class":50},[36,65861,65862,65864,65866,65868,65870,65872,65874,65876,65878,65880,65883,65885,65887,65889,65891,65893],{"class":38,"line":18198},[36,65863,56565],{"class":50},[36,65865,52942],{"class":52631},[36,65867,54817],{"class":46},[36,65869,70],{"class":50},[36,65871,63954],{"class":110},[36,65873,62383],{"class":50},[36,65875,2992],{"class":52631},[36,65877,56570],{"class":46},[36,65879,70],{"class":50},[36,65881,65882],{"class":110},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[36,65884,56578],{"class":46},[36,65886,70],{"class":50},[36,65888,9126],{"class":110},[36,65890,65750],{"class":50},[36,65892,52942],{"class":52631},[36,65894,52638],{"class":50},[36,65896,65897,65899,65901],{"class":38,"line":18210},[36,65898,53107],{"class":50},[36,65900,52942],{"class":52631},[36,65902,52638],{"class":50},[36,65904,65905,65907,65909],{"class":38,"line":18215},[36,65906,53748],{"class":50},[36,65908,52942],{"class":52631},[36,65910,52638],{"class":50},[36,65912,65913,65915,65917],{"class":38,"line":18228},[36,65914,53475],{"class":50},[36,65916,53144],{"class":52631},[36,65918,52638],{"class":50},[36,65920,65921],{"class":38,"line":18233},[36,65922,65923],{"class":124},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[36,65925,65926],{"class":38,"line":18238},[36,65927,65928],{"class":124},"    \u002F\u002F 1.1 获取 a 元素 \n",[36,65930,65931,65933,65936,65938,65940,65942,65944,65947],{"class":38,"line":18243},[36,65932,1498],{"class":42},[36,65934,65935],{"class":73}," as",[36,65937,14893],{"class":42},[36,65939,55727],{"class":50},[36,65941,57012],{"class":46},[36,65943,222],{"class":50},[36,65945,65946],{"class":110},"'.tab-nav a'",[36,65948,1680],{"class":50},[36,65950,65951],{"class":38,"line":18256},[36,65952,65953],{"class":124},"    \u002F\u002F console.log(as) \n",[36,65955,65956,65958,65960,65962,65964,65966,65968,65970,65972,65975,65977,65979,65981],{"class":38,"line":18261},[36,65957,4692],{"class":42},[36,65959,3180],{"class":50},[36,65961,53178],{"class":42},[36,65963,10906],{"class":50},[36,65965,70],{"class":42},[36,65967,242],{"class":73},[36,65969,10913],{"class":50},[36,65971,2577],{"class":42},[36,65973,65974],{"class":50}," as.",[36,65976,53299],{"class":73},[36,65978,4705],{"class":50},[36,65980,3798],{"class":42},[36,65982,485],{"class":50},[36,65984,65985],{"class":38,"line":33964},[36,65986,65987],{"class":124},"      \u002F\u002F console.log(as[i])\n",[36,65989,65990],{"class":38,"line":33970},[36,65991,65992],{"class":124},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[36,65994,65995,65998,66000,66002,66005,66007,66009],{"class":38,"line":33976},[36,65996,65997],{"class":50},"      as[i].",[36,65999,59144],{"class":46},[36,66001,222],{"class":50},[36,66003,66004],{"class":110},"'mouseenter'",[36,66006,477],{"class":50},[36,66008,55780],{"class":42},[36,66010,55783],{"class":50},[36,66012,66013],{"class":38,"line":33982},[36,66014,66015],{"class":124},"        \u002F\u002F console.log('鼠标经过')\n",[36,66017,66018],{"class":38,"line":33988},[36,66019,66020],{"class":124},"        \u002F\u002F 排他思想  \n",[36,66022,66023],{"class":38,"line":33999},[36,66024,66025],{"class":124},"        \u002F\u002F 干掉别人 移除类active\n",[36,66027,66028,66030,66032,66034,66037,66039,66041,66043,66046],{"class":38,"line":34005},[36,66029,53256],{"class":50},[36,66031,55730],{"class":46},[36,66033,222],{"class":50},[36,66035,66036],{"class":110},"'.tab-nav .active'",[36,66038,58334],{"class":50},[36,66040,58337],{"class":46},[36,66042,222],{"class":50},[36,66044,66045],{"class":110},"'active'",[36,66047,1680],{"class":50},[36,66049,66050],{"class":38,"line":34025},[36,66051,66052],{"class":124},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[36,66054,66055,66058,66061,66063,66065,66067],{"class":38,"line":34031},[36,66056,66057],{"class":73},"        this",[36,66059,66060],{"class":50},".classList.",[36,66062,6822],{"class":46},[36,66064,222],{"class":50},[36,66066,66045],{"class":110},[36,66068,1680],{"class":50},[36,66070,66071],{"class":38,"line":34042},[36,66072,58],{"emptyLinePlaceholder":57},[36,66074,66075],{"class":38,"line":34048},[36,66076,66077],{"class":124},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[36,66079,66080],{"class":38,"line":34054},[36,66081,66082],{"class":124},"        \u002F\u002F 干掉别人\n",[36,66084,66085,66087,66089,66091,66094,66096,66098,66100,66102],{"class":38,"line":34060},[36,66086,53256],{"class":50},[36,66088,55730],{"class":46},[36,66090,222],{"class":50},[36,66092,66093],{"class":110},"'.tab-content .active'",[36,66095,58334],{"class":50},[36,66097,58337],{"class":46},[36,66099,222],{"class":50},[36,66101,66045],{"class":110},[36,66103,1680],{"class":50},[36,66105,66106],{"class":38,"line":34066},[36,66107,66108],{"class":124},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[36,66110,66111,66113,66115,66117,66120,66122,66124,66126,66128,66130,66132,66134,66136],{"class":38,"line":34072},[36,66112,53256],{"class":50},[36,66114,55730],{"class":46},[36,66116,222],{"class":50},[36,66118,66119],{"class":110},"`.tab-content .item:nth-child(${",[36,66121,2108],{"class":50},[36,66123,46897],{"class":42},[36,66125,26449],{"class":73},[36,66127,58363],{"class":110},[36,66129,58334],{"class":50},[36,66131,6822],{"class":46},[36,66133,222],{"class":50},[36,66135,66045],{"class":110},[36,66137,1680],{"class":50},[36,66139,66140],{"class":38,"line":34078},[36,66141,58],{"emptyLinePlaceholder":57},[36,66143,66144],{"class":38,"line":34084},[36,66145,66146],{"class":50},"      })\n",[36,66148,66149],{"class":38,"line":34104},[36,66150,3693],{"class":50},[36,66152,66153,66155,66157],{"class":38,"line":34110},[36,66154,53748],{"class":50},[36,66156,53144],{"class":52631},[36,66158,52638],{"class":50},[36,66160,66161,66163,66165],{"class":38,"line":34126},[36,66162,53116],{"class":50},[36,66164,53131],{"class":52631},[36,66166,52638],{"class":50},[36,66168,66169],{"class":38,"line":34132},[36,66170,58],{"emptyLinePlaceholder":57},[36,66172,66173,66175,66177],{"class":38,"line":34146},[36,66174,53116],{"class":50},[36,66176,51966],{"class":52631},[36,66178,52638],{"class":50},[19,66180,66181],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66183,66184],{},"在监听事件中，this指向的就是他的调用者",[19,66186,66187],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66189,55051],{},[19,66191,66192],{},"(function () {",[19,66194,66195],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66197,66198],{},"list.addEventListener('click', function (e) {",[19,66200,66201],{},"if (e.target.tagName === 'A') {",[19,66203,66204],{},"\u002F\u002F 排他思想",[19,66206,66207],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66209,66210],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66212,66213],{},"\u002F\u002F console.log(old);",[19,66215,66216],{},"\u002F\u002F 判断",[19,66218,66219],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66221,66222],{},"if (old) old.classList.remove('active')",[19,66224,66225],{},"e.target.classList.add('active')",[19,66227,2613],{},[19,66229,53795],{},[19,66231,66232],{},"})();",[1645,66234,66236],{"id":66235},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,66238,66240],{"className":51964,"code":66239,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\n\u003Chtml>\n\n\u003Chead lang=\"en\">\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Ctitle>\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    table {\n      border-collapse: collapse;\n      border-spacing: 0;\n      border: 1px solid #c0c0c0;\n      width: 500px;\n      margin: 100px auto;\n      text-align: center;\n    }\n\n    th {\n      background-color: #09c;\n      font: bold 16px \"微软雅黑\";\n      color: #fff;\n      height: 24px;\n    }\n\n    td {\n      border: 1px solid #d0d0d0;\n      color: #404060;\n      padding: 10px;\n    }\n\n    .allCheck {\n      width: 80px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ctable>\n    \u003Ctr>\n      \u003Cth class=\"allCheck\">\n        \u003Cinput type=\"checkbox\" name=\"\" id=\"checkAll\"> \u003Cspan class=\"all\">全选\u003C\u002Fspan>\n      \u003C\u002Fth>\n      \u003Cth>商品\u003C\u002Fth>\n      \u003Cth>商家\u003C\u002Fth>\n      \u003Cth>价格\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米手机\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥1999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米净水器\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥4999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>\n        \u003Cinput type=\"checkbox\" name=\"check\" class=\"ck\">\n      \u003C\u002Ftd>\n      \u003Ctd>小米电视\u003C\u002Ftd>\n      \u003Ctd>小米\u003C\u002Ftd>\n      \u003Ctd>￥5999\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 1. 获取大复选框\n    const checkAll = document.querySelector('#checkAll')\n    \u002F\u002F 2. 获取所有的小复选框\n    const cks = document.querySelectorAll('.ck')\n    \u002F\u002F 3. 点击大复选框  注册事件\n    checkAll.addEventListener('click', function () {\n      \u002F\u002F 得到当前大复选框的选中状态\n      \u002F\u002F console.log(checkAll.checked)  \u002F\u002F 得到 是 true 或者是 false\n      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n      for (let i = 0; i \u003C cks.length; i++) {\n        cks[i].checked = this.checked\n      }\n    })\n    \u002F\u002F 5. 小复选框控制大复选框\n\n    for (let i = 0; i \u003C cks.length; i++) {\n      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n      cks[i].addEventListener('click', function () {\n        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n        checkAll.checked = document.querySelectorAll('.ck:checked').length === cks.length\n      })\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,66241,66242,66252,66256,66264,66268,66282,66296,66308,66316,66322,66332,66342,66346,66350,66357,66369,66380,66397,66410,66424,66434,66438,66442,66449,66460,66478,66488,66500,66504,66508,66515,66532,66543,66555,66559,66563,66570,66582,66586,66594,66602,66606,66614,66622,66630,66645,66689,66697,66710,66723,66736,66744,66752,66760,66788,66796,66808,66821,66834,66842,66850,66858,66884,66892,66905,66917,66930,66938,66946,66954,66980,66988,67001,67013,67026,67034,67042,67050,67055,67075,67080,67100,67105,67122,67127,67135,67140,67169,67182,67186,67190,67195,67199,67227,67232,67249,67254,67259,67264,67269,67295,67299,67303,67311,67319,67323],{"__ignoreMap":31},[36,66243,66244,66246,66248,66250],{"class":38,"line":39},[36,66245,52628],{"class":50},[36,66247,52632],{"class":52631},[36,66249,52635],{"class":46},[36,66251,52638],{"class":50},[36,66253,66254],{"class":38,"line":54},[36,66255,58],{"emptyLinePlaceholder":57},[36,66257,66258,66260,66262],{"class":38,"line":61},[36,66259,2577],{"class":50},[36,66261,51966],{"class":52631},[36,66263,52638],{"class":50},[36,66265,66266],{"class":38,"line":80},[36,66267,58],{"emptyLinePlaceholder":57},[36,66269,66270,66272,66274,66276,66278,66280],{"class":38,"line":96},[36,66271,2577],{"class":50},[36,66273,52665],{"class":52631},[36,66275,52647],{"class":46},[36,66277,70],{"class":50},[36,66279,52652],{"class":110},[36,66281,52638],{"class":50},[36,66283,66284,66286,66288,66290,66292,66294],{"class":38,"line":101},[36,66285,53475],{"class":50},[36,66287,52675],{"class":52631},[36,66289,52678],{"class":46},[36,66291,70],{"class":50},[36,66293,52683],{"class":110},[36,66295,52638],{"class":50},[36,66297,66298,66300,66302,66304,66306],{"class":38,"line":128},[36,66299,53475],{"class":50},[36,66301,52738],{"class":52631},[36,66303,56645],{"class":50},[36,66305,52738],{"class":52631},[36,66307,52638],{"class":50},[36,66309,66310,66312,66314],{"class":38,"line":149},[36,66311,53475],{"class":50},[36,66313,1592],{"class":52631},[36,66315,52638],{"class":50},[36,66317,66318,66320],{"class":38,"line":154},[36,66319,569],{"class":52631},[36,66321,16901],{"class":50},[36,66323,66324,66326,66328,66330],{"class":38,"line":167},[36,66325,56037],{"class":73},[36,66327,52768],{"class":50},[36,66329,1859],{"class":73},[36,66331,77],{"class":50},[36,66333,66334,66336,66338,66340],{"class":38,"line":172},[36,66335,56026],{"class":73},[36,66337,52768],{"class":50},[36,66339,1859],{"class":73},[36,66341,77],{"class":50},[36,66343,66344],{"class":38,"line":192},[36,66345,3693],{"class":50},[36,66347,66348],{"class":38,"line":211},[36,66349,58],{"emptyLinePlaceholder":57},[36,66351,66352,66355],{"class":38,"line":216},[36,66353,66354],{"class":52631},"    table",[36,66356,16901],{"class":50},[36,66358,66359,66362,66364,66367],{"class":38,"line":231},[36,66360,66361],{"class":73},"      border-collapse",[36,66363,52768],{"class":50},[36,66365,66366],{"class":73},"collapse",[36,66368,77],{"class":50},[36,66370,66371,66374,66376,66378],{"class":38,"line":236},[36,66372,66373],{"class":73},"      border-spacing",[36,66375,52768],{"class":50},[36,66377,1859],{"class":73},[36,66379,77],{"class":50},[36,66381,66382,66384,66386,66388,66390,66392,66395],{"class":38,"line":247},[36,66383,63308],{"class":73},[36,66385,52768],{"class":50},[36,66387,1885],{"class":73},[36,66389,52823],{"class":42},[36,66391,52852],{"class":73},[36,66393,66394],{"class":73}," #c0c0c0",[36,66396,77],{"class":50},[36,66398,66399,66401,66403,66406,66408],{"class":38,"line":637},[36,66400,56102],{"class":73},[36,66402,52768],{"class":50},[36,66404,66405],{"class":73},"500",[36,66407,52823],{"class":42},[36,66409,77],{"class":50},[36,66411,66412,66414,66416,66418,66420,66422],{"class":38,"line":646},[36,66413,56037],{"class":73},[36,66415,52768],{"class":50},[36,66417,1979],{"class":73},[36,66419,52823],{"class":42},[36,66421,52887],{"class":73},[36,66423,77],{"class":50},[36,66425,66426,66428,66430,66432],{"class":38,"line":655},[36,66427,58617],{"class":73},[36,66429,52768],{"class":50},[36,66431,52923],{"class":73},[36,66433,77],{"class":50},[36,66435,66436],{"class":38,"line":660},[36,66437,3693],{"class":50},[36,66439,66440],{"class":38,"line":665},[36,66441,58],{"emptyLinePlaceholder":57},[36,66443,66444,66447],{"class":38,"line":674},[36,66445,66446],{"class":52631},"    th",[36,66448,16901],{"class":50},[36,66450,66451,66453,66455,66458],{"class":38,"line":679},[36,66452,56215],{"class":73},[36,66454,52768],{"class":50},[36,66456,66457],{"class":73},"#09c",[36,66459,77],{"class":50},[36,66461,66462,66465,66467,66469,66471,66473,66476],{"class":38,"line":692},[36,66463,66464],{"class":73},"      font",[36,66466,52768],{"class":50},[36,66468,63670],{"class":73},[36,66470,65404],{"class":73},[36,66472,52823],{"class":42},[36,66474,66475],{"class":110}," \"微软雅黑\"",[36,66477,77],{"class":50},[36,66479,66480,66482,66484,66486],{"class":38,"line":705},[36,66481,58747],{"class":73},[36,66483,52768],{"class":50},[36,66485,62173],{"class":73},[36,66487,77],{"class":50},[36,66489,66490,66492,66494,66496,66498],{"class":38,"line":710},[36,66491,56116],{"class":73},[36,66493,52768],{"class":50},[36,66495,2467],{"class":73},[36,66497,52823],{"class":42},[36,66499,77],{"class":50},[36,66501,66502],{"class":38,"line":722},[36,66503,3693],{"class":50},[36,66505,66506],{"class":38,"line":750},[36,66507,58],{"emptyLinePlaceholder":57},[36,66509,66510,66513],{"class":38,"line":755},[36,66511,66512],{"class":52631},"    td",[36,66514,16901],{"class":50},[36,66516,66517,66519,66521,66523,66525,66527,66530],{"class":38,"line":777},[36,66518,63308],{"class":73},[36,66520,52768],{"class":50},[36,66522,1885],{"class":73},[36,66524,52823],{"class":42},[36,66526,52852],{"class":73},[36,66528,66529],{"class":73}," #d0d0d0",[36,66531,77],{"class":50},[36,66533,66534,66536,66538,66541],{"class":38,"line":802},[36,66535,58747],{"class":73},[36,66537,52768],{"class":50},[36,66539,66540],{"class":73},"#404060",[36,66542,77],{"class":50},[36,66544,66545,66547,66549,66551,66553],{"class":38,"line":807},[36,66546,56026],{"class":73},[36,66548,52768],{"class":50},[36,66550,2113],{"class":73},[36,66552,52823],{"class":42},[36,66554,77],{"class":50},[36,66556,66557],{"class":38,"line":818},[36,66558,3693],{"class":50},[36,66560,66561],{"class":38,"line":843},[36,66562,58],{"emptyLinePlaceholder":57},[36,66564,66565,66568],{"class":38,"line":848},[36,66566,66567],{"class":46},"    .allCheck",[36,66569,16901],{"class":50},[36,66571,66572,66574,66576,66578,66580],{"class":38,"line":859},[36,66573,56102],{"class":73},[36,66575,52768],{"class":50},[36,66577,2279],{"class":73},[36,66579,52823],{"class":42},[36,66581,77],{"class":50},[36,66583,66584],{"class":38,"line":864},[36,66585,3693],{"class":50},[36,66587,66588,66590,66592],{"class":38,"line":873},[36,66589,53748],{"class":50},[36,66591,1592],{"class":52631},[36,66593,52638],{"class":50},[36,66595,66596,66598,66600],{"class":38,"line":9454},[36,66597,53116],{"class":50},[36,66599,52665],{"class":52631},[36,66601,52638],{"class":50},[36,66603,66604],{"class":38,"line":9481},[36,66605,58],{"emptyLinePlaceholder":57},[36,66607,66608,66610,66612],{"class":38,"line":9486},[36,66609,2577],{"class":50},[36,66611,53131],{"class":52631},[36,66613,52638],{"class":50},[36,66615,66616,66618,66620],{"class":38,"line":9492},[36,66617,53475],{"class":50},[36,66619,1806],{"class":52631},[36,66621,52638],{"class":50},[36,66623,66624,66626,66628],{"class":38,"line":9504},[36,66625,52672],{"class":50},[36,66627,1812],{"class":52631},[36,66629,52638],{"class":50},[36,66631,66632,66634,66636,66638,66640,66643],{"class":38,"line":9516},[36,66633,56565],{"class":50},[36,66635,1815],{"class":52631},[36,66637,54817],{"class":46},[36,66639,70],{"class":50},[36,66641,66642],{"class":110},"\"allCheck\"",[36,66644,52638],{"class":50},[36,66646,66647,66649,66651,66653,66655,66657,66659,66661,66663,66665,66667,66670,66673,66675,66677,66679,66682,66685,66687],{"class":38,"line":9528},[36,66648,56633],{"class":50},[36,66650,55152],{"class":52631},[36,66652,55155],{"class":46},[36,66654,70],{"class":50},[36,66656,55160],{"class":110},[36,66658,16249],{"class":46},[36,66660,70],{"class":50},[36,66662,9126],{"class":110},[36,66664,16288],{"class":46},[36,66666,70],{"class":50},[36,66668,66669],{"class":110},"\"checkAll\"",[36,66671,66672],{"class":50},"> \u003C",[36,66674,36],{"class":52631},[36,66676,54817],{"class":46},[36,66678,70],{"class":50},[36,66680,66681],{"class":110},"\"all\"",[36,66683,66684],{"class":50},">全选\u003C\u002F",[36,66686,36],{"class":52631},[36,66688,52638],{"class":50},[36,66690,66691,66693,66695],{"class":38,"line":11184},[36,66692,56738],{"class":50},[36,66694,1815],{"class":52631},[36,66696,52638],{"class":50},[36,66698,66699,66701,66703,66706,66708],{"class":38,"line":11209},[36,66700,56565],{"class":50},[36,66702,1815],{"class":52631},[36,66704,66705],{"class":50},">商品\u003C\u002F",[36,66707,1815],{"class":52631},[36,66709,52638],{"class":50},[36,66711,66712,66714,66716,66719,66721],{"class":38,"line":11232},[36,66713,56565],{"class":50},[36,66715,1815],{"class":52631},[36,66717,66718],{"class":50},">商家\u003C\u002F",[36,66720,1815],{"class":52631},[36,66722,52638],{"class":50},[36,66724,66725,66727,66729,66732,66734],{"class":38,"line":11256},[36,66726,56565],{"class":50},[36,66728,1815],{"class":52631},[36,66730,66731],{"class":50},">价格\u003C\u002F",[36,66733,1815],{"class":52631},[36,66735,52638],{"class":50},[36,66737,66738,66740,66742],{"class":38,"line":11261},[36,66739,53107],{"class":50},[36,66741,1812],{"class":52631},[36,66743,52638],{"class":50},[36,66745,66746,66748,66750],{"class":38,"line":11266},[36,66747,52672],{"class":50},[36,66749,1812],{"class":52631},[36,66751,52638],{"class":50},[36,66753,66754,66756,66758],{"class":38,"line":11271},[36,66755,56565],{"class":50},[36,66757,1857],{"class":52631},[36,66759,52638],{"class":50},[36,66761,66762,66764,66766,66768,66770,66772,66774,66776,66779,66781,66783,66786],{"class":38,"line":11280},[36,66763,56633],{"class":50},[36,66765,55152],{"class":52631},[36,66767,55155],{"class":46},[36,66769,70],{"class":50},[36,66771,55160],{"class":110},[36,66773,16249],{"class":46},[36,66775,70],{"class":50},[36,66777,66778],{"class":110},"\"check\"",[36,66780,54817],{"class":46},[36,66782,70],{"class":50},[36,66784,66785],{"class":110},"\"ck\"",[36,66787,52638],{"class":50},[36,66789,66790,66792,66794],{"class":38,"line":11285},[36,66791,56738],{"class":50},[36,66793,1857],{"class":52631},[36,66795,52638],{"class":50},[36,66797,66798,66800,66802,66804,66806],{"class":38,"line":11291},[36,66799,56565],{"class":50},[36,66801,1857],{"class":52631},[36,66803,62504],{"class":50},[36,66805,1857],{"class":52631},[36,66807,52638],{"class":50},[36,66809,66810,66812,66814,66817,66819],{"class":38,"line":11312},[36,66811,56565],{"class":50},[36,66813,1857],{"class":52631},[36,66815,66816],{"class":50},">小米\u003C\u002F",[36,66818,1857],{"class":52631},[36,66820,52638],{"class":50},[36,66822,66823,66825,66827,66830,66832],{"class":38,"line":11318},[36,66824,56565],{"class":50},[36,66826,1857],{"class":52631},[36,66828,66829],{"class":50},">￥1999\u003C\u002F",[36,66831,1857],{"class":52631},[36,66833,52638],{"class":50},[36,66835,66836,66838,66840],{"class":38,"line":11332},[36,66837,53107],{"class":50},[36,66839,1812],{"class":52631},[36,66841,52638],{"class":50},[36,66843,66844,66846,66848],{"class":38,"line":11338},[36,66845,52672],{"class":50},[36,66847,1812],{"class":52631},[36,66849,52638],{"class":50},[36,66851,66852,66854,66856],{"class":38,"line":11365},[36,66853,56565],{"class":50},[36,66855,1857],{"class":52631},[36,66857,52638],{"class":50},[36,66859,66860,66862,66864,66866,66868,66870,66872,66874,66876,66878,66880,66882],{"class":38,"line":11374},[36,66861,56633],{"class":50},[36,66863,55152],{"class":52631},[36,66865,55155],{"class":46},[36,66867,70],{"class":50},[36,66869,55160],{"class":110},[36,66871,16249],{"class":46},[36,66873,70],{"class":50},[36,66875,66778],{"class":110},[36,66877,54817],{"class":46},[36,66879,70],{"class":50},[36,66881,66785],{"class":110},[36,66883,52638],{"class":50},[36,66885,66886,66888,66890],{"class":38,"line":11380},[36,66887,56738],{"class":50},[36,66889,1857],{"class":52631},[36,66891,52638],{"class":50},[36,66893,66894,66896,66898,66901,66903],{"class":38,"line":11388},[36,66895,56565],{"class":50},[36,66897,1857],{"class":52631},[36,66899,66900],{"class":50},">小米净水器\u003C\u002F",[36,66902,1857],{"class":52631},[36,66904,52638],{"class":50},[36,66906,66907,66909,66911,66913,66915],{"class":38,"line":11393},[36,66908,56565],{"class":50},[36,66910,1857],{"class":52631},[36,66912,66816],{"class":50},[36,66914,1857],{"class":52631},[36,66916,52638],{"class":50},[36,66918,66919,66921,66923,66926,66928],{"class":38,"line":17933},[36,66920,56565],{"class":50},[36,66922,1857],{"class":52631},[36,66924,66925],{"class":50},">￥4999\u003C\u002F",[36,66927,1857],{"class":52631},[36,66929,52638],{"class":50},[36,66931,66932,66934,66936],{"class":38,"line":17939},[36,66933,53107],{"class":50},[36,66935,1812],{"class":52631},[36,66937,52638],{"class":50},[36,66939,66940,66942,66944],{"class":38,"line":17962},[36,66941,52672],{"class":50},[36,66943,1812],{"class":52631},[36,66945,52638],{"class":50},[36,66947,66948,66950,66952],{"class":38,"line":17968},[36,66949,56565],{"class":50},[36,66951,1857],{"class":52631},[36,66953,52638],{"class":50},[36,66955,66956,66958,66960,66962,66964,66966,66968,66970,66972,66974,66976,66978],{"class":38,"line":17991},[36,66957,56633],{"class":50},[36,66959,55152],{"class":52631},[36,66961,55155],{"class":46},[36,66963,70],{"class":50},[36,66965,55160],{"class":110},[36,66967,16249],{"class":46},[36,66969,70],{"class":50},[36,66971,66778],{"class":110},[36,66973,54817],{"class":46},[36,66975,70],{"class":50},[36,66977,66785],{"class":110},[36,66979,52638],{"class":50},[36,66981,66982,66984,66986],{"class":38,"line":18005},[36,66983,56738],{"class":50},[36,66985,1857],{"class":52631},[36,66987,52638],{"class":50},[36,66989,66990,66992,66994,66997,66999],{"class":38,"line":18025},[36,66991,56565],{"class":50},[36,66993,1857],{"class":52631},[36,66995,66996],{"class":50},">小米电视\u003C\u002F",[36,66998,1857],{"class":52631},[36,67000,52638],{"class":50},[36,67002,67003,67005,67007,67009,67011],{"class":38,"line":18031},[36,67004,56565],{"class":50},[36,67006,1857],{"class":52631},[36,67008,66816],{"class":50},[36,67010,1857],{"class":52631},[36,67012,52638],{"class":50},[36,67014,67015,67017,67019,67022,67024],{"class":38,"line":18042},[36,67016,56565],{"class":50},[36,67018,1857],{"class":52631},[36,67020,67021],{"class":50},">￥5999\u003C\u002F",[36,67023,1857],{"class":52631},[36,67025,52638],{"class":50},[36,67027,67028,67030,67032],{"class":38,"line":18065},[36,67029,53107],{"class":50},[36,67031,1812],{"class":52631},[36,67033,52638],{"class":50},[36,67035,67036,67038,67040],{"class":38,"line":18087},[36,67037,53748],{"class":50},[36,67039,1806],{"class":52631},[36,67041,52638],{"class":50},[36,67043,67044,67046,67048],{"class":38,"line":18092},[36,67045,53475],{"class":50},[36,67047,53144],{"class":52631},[36,67049,52638],{"class":50},[36,67051,67052],{"class":38,"line":18098},[36,67053,67054],{"class":124},"    \u002F\u002F 1. 获取大复选框\n",[36,67056,67057,67059,67062,67064,67066,67068,67070,67073],{"class":38,"line":18112},[36,67058,1498],{"class":42},[36,67060,67061],{"class":73}," checkAll",[36,67063,14893],{"class":42},[36,67065,55727],{"class":50},[36,67067,55730],{"class":46},[36,67069,222],{"class":50},[36,67071,67072],{"class":110},"'#checkAll'",[36,67074,1680],{"class":50},[36,67076,67077],{"class":38,"line":18125},[36,67078,67079],{"class":124},"    \u002F\u002F 2. 获取所有的小复选框\n",[36,67081,67082,67084,67087,67089,67091,67093,67095,67098],{"class":38,"line":18130},[36,67083,1498],{"class":42},[36,67085,67086],{"class":73}," cks",[36,67088,14893],{"class":42},[36,67090,55727],{"class":50},[36,67092,57012],{"class":46},[36,67094,222],{"class":50},[36,67096,67097],{"class":110},"'.ck'",[36,67099,1680],{"class":50},[36,67101,67102],{"class":38,"line":18144},[36,67103,67104],{"class":124},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[36,67106,67107,67110,67112,67114,67116,67118,67120],{"class":38,"line":18149},[36,67108,67109],{"class":50},"    checkAll.",[36,67111,59144],{"class":46},[36,67113,222],{"class":50},[36,67115,59149],{"class":110},[36,67117,477],{"class":50},[36,67119,55780],{"class":42},[36,67121,55783],{"class":50},[36,67123,67124],{"class":38,"line":18155},[36,67125,67126],{"class":124},"      \u002F\u002F 得到当前大复选框的选中状态\n",[36,67128,67129,67132],{"class":38,"line":18160},[36,67130,67131],{"class":124},"      \u002F\u002F console.log(checkAll.checked)",[36,67133,67134],{"class":124},"  \u002F\u002F 得到 是 true 或者是 false\n",[36,67136,67137],{"class":38,"line":18174},[36,67138,67139],{"class":124},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[36,67141,67142,67144,67146,67148,67150,67152,67154,67156,67158,67161,67163,67165,67167],{"class":38,"line":18179},[36,67143,53615],{"class":42},[36,67145,3180],{"class":50},[36,67147,53178],{"class":42},[36,67149,10906],{"class":50},[36,67151,70],{"class":42},[36,67153,242],{"class":73},[36,67155,10913],{"class":50},[36,67157,2577],{"class":42},[36,67159,67160],{"class":50}," cks.",[36,67162,53299],{"class":73},[36,67164,4705],{"class":50},[36,67166,3798],{"class":42},[36,67168,485],{"class":50},[36,67170,67171,67174,67176,67179],{"class":38,"line":18184},[36,67172,67173],{"class":50},"        cks[i].checked ",[36,67175,70],{"class":42},[36,67177,67178],{"class":73}," this",[36,67180,67181],{"class":50},".checked\n",[36,67183,67184],{"class":38,"line":18198},[36,67185,53729],{"class":50},[36,67187,67188],{"class":38,"line":18210},[36,67189,34792],{"class":50},[36,67191,67192],{"class":38,"line":18215},[36,67193,67194],{"class":124},"    \u002F\u002F 5. 小复选框控制大复选框\n",[36,67196,67197],{"class":38,"line":18228},[36,67198,58],{"emptyLinePlaceholder":57},[36,67200,67201,67203,67205,67207,67209,67211,67213,67215,67217,67219,67221,67223,67225],{"class":38,"line":18233},[36,67202,4692],{"class":42},[36,67204,3180],{"class":50},[36,67206,53178],{"class":42},[36,67208,10906],{"class":50},[36,67210,70],{"class":42},[36,67212,242],{"class":73},[36,67214,10913],{"class":50},[36,67216,2577],{"class":42},[36,67218,67160],{"class":50},[36,67220,53299],{"class":73},[36,67222,4705],{"class":50},[36,67224,3798],{"class":42},[36,67226,485],{"class":50},[36,67228,67229],{"class":38,"line":18238},[36,67230,67231],{"class":124},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[36,67233,67234,67237,67239,67241,67243,67245,67247],{"class":38,"line":18243},[36,67235,67236],{"class":50},"      cks[i].",[36,67238,59144],{"class":46},[36,67240,222],{"class":50},[36,67242,59149],{"class":110},[36,67244,477],{"class":50},[36,67246,55780],{"class":42},[36,67248,55783],{"class":50},[36,67250,67251],{"class":38,"line":18256},[36,67252,67253],{"class":124},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[36,67255,67256],{"class":38,"line":18261},[36,67257,67258],{"class":124},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[36,67260,67261],{"class":38,"line":33964},[36,67262,67263],{"class":124},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[36,67265,67266],{"class":38,"line":33970},[36,67267,67268],{"class":124},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[36,67270,67271,67274,67276,67278,67280,67282,67285,67287,67289,67291,67293],{"class":38,"line":33976},[36,67272,67273],{"class":50},"        checkAll.checked ",[36,67275,70],{"class":42},[36,67277,55727],{"class":50},[36,67279,57012],{"class":46},[36,67281,222],{"class":50},[36,67283,67284],{"class":110},"'.ck:checked'",[36,67286,32157],{"class":50},[36,67288,53299],{"class":73},[36,67290,59237],{"class":42},[36,67292,67160],{"class":50},[36,67294,57162],{"class":73},[36,67296,67297],{"class":38,"line":33982},[36,67298,66146],{"class":50},[36,67300,67301],{"class":38,"line":33988},[36,67302,3693],{"class":50},[36,67304,67305,67307,67309],{"class":38,"line":33999},[36,67306,53748],{"class":50},[36,67308,53144],{"class":52631},[36,67310,52638],{"class":50},[36,67312,67313,67315,67317],{"class":38,"line":34005},[36,67314,53116],{"class":50},[36,67316,53131],{"class":52631},[36,67318,52638],{"class":50},[36,67320,67321],{"class":38,"line":34025},[36,67322,58],{"emptyLinePlaceholder":57},[36,67324,67325,67327,67329],{"class":38,"line":34031},[36,67326,53116],{"class":50},[36,67328,51966],{"class":52631},[36,67330,52638],{"class":50},[19,67332,67333],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67335,67336],{},"用好之间比较得到的布尔值！！！",[19,67338,67339,67340,67343,67344,3180,67347,2251,67349,67352],{},"在 JS 里访问的时候，",[33,67341,67342],{},"checkbox.checked"," 是一个 ",[887,67345,67346],{},"布尔值",[33,67348,2895],{},[33,67350,67351],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67354,67355,67356,67359,67360],{},"HTML 的 ",[33,67357,67358],{},"checked=\"checked\""," 只是 ",[887,67361,67362,67363,67366],{},"初始值；JS 的 ",[33,67364,67365],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67368,67369],{},"：checked是一个伪类选择器",[19,67371,67372],{},[2992,67373],{"alt":31,"src":67374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67376,67377,67380],{},[67378,67379],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67382,67383],{},[2992,67384],{"alt":31,"src":67385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67387,67389],{"id":67388},"_33-dom事件进阶","3.3 DOM事件进阶",[1645,67391,67393],{"id":67392},"_331-事件流","3.3.1 事件流",[19,67395,67396],{},[2992,67397],{"alt":31,"src":67398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23327,67400,67402],{"id":67401},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67404,67405],{},[2992,67406],{"alt":31,"src":67407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,67409,67411],{"className":51964,"code":67410,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .father {\n      width: 500px;\n      height: 500px;\n      background-color: pink;\n    }\n\n    .son {\n      width: 200px;\n      height: 200px;\n      background-color: skyblue;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"father\">\n    \u003Cdiv class=\"son\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const fa = document.querySelector('.father')\n    const son = document.querySelector('.son')\n    document.addEventListener('click', function () {\n      alert('woshiu1')\n    }, true)\n    fa.addEventListener('click', function () {\n      alert('1')\n    }, true)\n    son.addEventListener('click', function () {\n      alert('2')\n    }, true)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,67412,67413,67423,67437,67441,67449,67463,67483,67495,67503,67510,67522,67534,67544,67548,67552,67559,67571,67583,67593,67597,67605,67613,67617,67625,67640,67659,67667,67675,67695,67715,67731,67742,67750,67767,67778,67786,67803,67814,67822,67830,67838,67842],{"__ignoreMap":31},[36,67414,67415,67417,67419,67421],{"class":38,"line":39},[36,67416,52628],{"class":50},[36,67418,52632],{"class":52631},[36,67420,52635],{"class":46},[36,67422,52638],{"class":50},[36,67424,67425,67427,67429,67431,67433,67435],{"class":38,"line":54},[36,67426,2577],{"class":50},[36,67428,51966],{"class":52631},[36,67430,52647],{"class":46},[36,67432,70],{"class":50},[36,67434,52652],{"class":110},[36,67436,52638],{"class":50},[36,67438,67439],{"class":38,"line":61},[36,67440,58],{"emptyLinePlaceholder":57},[36,67442,67443,67445,67447],{"class":38,"line":80},[36,67444,2577],{"class":50},[36,67446,52665],{"class":52631},[36,67448,52638],{"class":50},[36,67450,67451,67453,67455,67457,67459,67461],{"class":38,"line":96},[36,67452,53475],{"class":50},[36,67454,52675],{"class":52631},[36,67456,52678],{"class":46},[36,67458,70],{"class":50},[36,67460,52683],{"class":110},[36,67462,52638],{"class":50},[36,67464,67465,67467,67469,67471,67473,67475,67477,67479,67481],{"class":38,"line":101},[36,67466,53475],{"class":50},[36,67468,52675],{"class":52631},[36,67470,16249],{"class":46},[36,67472,70],{"class":50},[36,67474,52722],{"class":110},[36,67476,52702],{"class":46},[36,67478,70],{"class":50},[36,67480,52729],{"class":110},[36,67482,52638],{"class":50},[36,67484,67485,67487,67489,67491,67493],{"class":38,"line":128},[36,67486,53475],{"class":50},[36,67488,52738],{"class":52631},[36,67490,52741],{"class":50},[36,67492,52738],{"class":52631},[36,67494,52638],{"class":50},[36,67496,67497,67499,67501],{"class":38,"line":149},[36,67498,53475],{"class":50},[36,67500,1592],{"class":52631},[36,67502,52638],{"class":50},[36,67504,67505,67508],{"class":38,"line":154},[36,67506,67507],{"class":46},"    .father",[36,67509,16901],{"class":50},[36,67511,67512,67514,67516,67518,67520],{"class":38,"line":167},[36,67513,56102],{"class":73},[36,67515,52768],{"class":50},[36,67517,66405],{"class":73},[36,67519,52823],{"class":42},[36,67521,77],{"class":50},[36,67523,67524,67526,67528,67530,67532],{"class":38,"line":172},[36,67525,56116],{"class":73},[36,67527,52768],{"class":50},[36,67529,66405],{"class":73},[36,67531,52823],{"class":42},[36,67533,77],{"class":50},[36,67535,67536,67538,67540,67542],{"class":38,"line":192},[36,67537,56215],{"class":73},[36,67539,52768],{"class":50},[36,67541,52976],{"class":73},[36,67543,77],{"class":50},[36,67545,67546],{"class":38,"line":211},[36,67547,3693],{"class":50},[36,67549,67550],{"class":38,"line":216},[36,67551,58],{"emptyLinePlaceholder":57},[36,67553,67554,67557],{"class":38,"line":231},[36,67555,67556],{"class":46},"    .son",[36,67558,16901],{"class":50},[36,67560,67561,67563,67565,67567,67569],{"class":38,"line":236},[36,67562,56102],{"class":73},[36,67564,52768],{"class":50},[36,67566,3240],{"class":73},[36,67568,52823],{"class":42},[36,67570,77],{"class":50},[36,67572,67573,67575,67577,67579,67581],{"class":38,"line":247},[36,67574,56116],{"class":73},[36,67576,52768],{"class":50},[36,67578,3240],{"class":73},[36,67580,52823],{"class":42},[36,67582,77],{"class":50},[36,67584,67585,67587,67589,67591],{"class":38,"line":637},[36,67586,56215],{"class":73},[36,67588,52768],{"class":50},[36,67590,56220],{"class":73},[36,67592,77],{"class":50},[36,67594,67595],{"class":38,"line":646},[36,67596,3693],{"class":50},[36,67598,67599,67601,67603],{"class":38,"line":655},[36,67600,53748],{"class":50},[36,67602,1592],{"class":52631},[36,67604,52638],{"class":50},[36,67606,67607,67609,67611],{"class":38,"line":660},[36,67608,53116],{"class":50},[36,67610,52665],{"class":52631},[36,67612,52638],{"class":50},[36,67614,67615],{"class":38,"line":665},[36,67616,58],{"emptyLinePlaceholder":57},[36,67618,67619,67621,67623],{"class":38,"line":674},[36,67620,2577],{"class":50},[36,67622,53131],{"class":52631},[36,67624,52638],{"class":50},[36,67626,67627,67629,67631,67633,67635,67638],{"class":38,"line":679},[36,67628,53475],{"class":50},[36,67630,52942],{"class":52631},[36,67632,54817],{"class":46},[36,67634,70],{"class":50},[36,67636,67637],{"class":110},"\"father\"",[36,67639,52638],{"class":50},[36,67641,67642,67644,67646,67648,67650,67653,67655,67657],{"class":38,"line":692},[36,67643,52672],{"class":50},[36,67645,52942],{"class":52631},[36,67647,54817],{"class":46},[36,67649,70],{"class":50},[36,67651,67652],{"class":110},"\"son\"",[36,67654,56645],{"class":50},[36,67656,52942],{"class":52631},[36,67658,52638],{"class":50},[36,67660,67661,67663,67665],{"class":38,"line":705},[36,67662,53748],{"class":50},[36,67664,52942],{"class":52631},[36,67666,52638],{"class":50},[36,67668,67669,67671,67673],{"class":38,"line":710},[36,67670,53475],{"class":50},[36,67672,53144],{"class":52631},[36,67674,52638],{"class":50},[36,67676,67677,67679,67682,67684,67686,67688,67690,67693],{"class":38,"line":722},[36,67678,1498],{"class":42},[36,67680,67681],{"class":73}," fa",[36,67683,14893],{"class":42},[36,67685,55727],{"class":50},[36,67687,55730],{"class":46},[36,67689,222],{"class":50},[36,67691,67692],{"class":110},"'.father'",[36,67694,1680],{"class":50},[36,67696,67697,67699,67702,67704,67706,67708,67710,67713],{"class":38,"line":750},[36,67698,1498],{"class":42},[36,67700,67701],{"class":73}," son",[36,67703,14893],{"class":42},[36,67705,55727],{"class":50},[36,67707,55730],{"class":46},[36,67709,222],{"class":50},[36,67711,67712],{"class":110},"'.son'",[36,67714,1680],{"class":50},[36,67716,67717,67719,67721,67723,67725,67727,67729],{"class":38,"line":755},[36,67718,53738],{"class":50},[36,67720,59144],{"class":46},[36,67722,222],{"class":50},[36,67724,59149],{"class":110},[36,67726,477],{"class":50},[36,67728,55780],{"class":42},[36,67730,55783],{"class":50},[36,67732,67733,67735,67737,67740],{"class":38,"line":777},[36,67734,60256],{"class":46},[36,67736,222],{"class":50},[36,67738,67739],{"class":110},"'woshiu1'",[36,67741,1680],{"class":50},[36,67743,67744,67746,67748],{"class":38,"line":802},[36,67745,55866],{"class":50},[36,67747,2895],{"class":73},[36,67749,1680],{"class":50},[36,67751,67752,67755,67757,67759,67761,67763,67765],{"class":38,"line":807},[36,67753,67754],{"class":50},"    fa.",[36,67756,59144],{"class":46},[36,67758,222],{"class":50},[36,67760,59149],{"class":110},[36,67762,477],{"class":50},[36,67764,55780],{"class":42},[36,67766,55783],{"class":50},[36,67768,67769,67771,67773,67776],{"class":38,"line":818},[36,67770,60256],{"class":46},[36,67772,222],{"class":50},[36,67774,67775],{"class":110},"'1'",[36,67777,1680],{"class":50},[36,67779,67780,67782,67784],{"class":38,"line":843},[36,67781,55866],{"class":50},[36,67783,2895],{"class":73},[36,67785,1680],{"class":50},[36,67787,67788,67791,67793,67795,67797,67799,67801],{"class":38,"line":848},[36,67789,67790],{"class":50},"    son.",[36,67792,59144],{"class":46},[36,67794,222],{"class":50},[36,67796,59149],{"class":110},[36,67798,477],{"class":50},[36,67800,55780],{"class":42},[36,67802,55783],{"class":50},[36,67804,67805,67807,67809,67812],{"class":38,"line":859},[36,67806,60256],{"class":46},[36,67808,222],{"class":50},[36,67810,67811],{"class":110},"'2'",[36,67813,1680],{"class":50},[36,67815,67816,67818,67820],{"class":38,"line":864},[36,67817,55866],{"class":50},[36,67819,2895],{"class":73},[36,67821,1680],{"class":50},[36,67823,67824,67826,67828],{"class":38,"line":873},[36,67825,53748],{"class":50},[36,67827,53144],{"class":52631},[36,67829,52638],{"class":50},[36,67831,67832,67834,67836],{"class":38,"line":9454},[36,67833,53116],{"class":50},[36,67835,53131],{"class":52631},[36,67837,52638],{"class":50},[36,67839,67840],{"class":38,"line":9481},[36,67841,58],{"emptyLinePlaceholder":57},[36,67843,67844,67846,67848],{"class":38,"line":9486},[36,67845,53116],{"class":50},[36,67847,51966],{"class":52631},[36,67849,52638],{"class":50},[19,67851,67852],{},[2992,67853],{"alt":31,"src":67854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67856,67857],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23327,67859,67861],{"id":67860},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67863,67864],{},[2992,67865],{"alt":31,"src":67866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67868,67869],{},"反着来",[19,67871,67872],{},"注意是同名事件，比如都是‘click’",[23327,67874,67876],{"id":67875},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67878,67879],{},[2992,67880],{"alt":31,"src":67881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23327,67883,67885],{"id":67884},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67887,67888],{},[2992,67889],{"alt":31,"src":67890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67892,67893],{},[2992,67894],{"alt":31,"src":67895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23327,67897,67899],{"id":67898},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[256,67901,67902],{},[259,67903,67904],{},"事件类型的区别",[19,67906,67907],{},[2992,67908],{"alt":31,"src":67909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67911,67912],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[256,67914,67915],{"start":54},[259,67916,67917],{},"注册事件的区别",[19,67919,67920],{},[2992,67921],{"alt":31,"src":67922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23327,67924,67926],{"id":67925},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67928,67929],{},[2992,67930],{"alt":31,"src":67931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67933,67934],{},[2992,67935],{"alt":31,"src":67936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,67938,67940],{"className":54398,"code":67939,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cform action=\"http:\u002F\u002Fwww.itcast.cn\">\n    \u003Cinput type=\"submit\" value=\"免费注册\">\n    \u003Cscript>\n      const form = document.querySelector('form')\n      form.addEventListener('submit', function (e) {\n        e.preventDefault()\n      })\n    \u003C\u002Fscript>\n  \u003C\u002Fform>\n\u003C\u002Fbody>\n",[33,67941,67942,67950,67967,67990,67998,68003,68008,68013,68017,68025,68033],{"__ignoreMap":31},[36,67943,67944,67946,67948],{"class":38,"line":39},[36,67945,2577],{"class":50},[36,67947,53131],{"class":52631},[36,67949,52638],{"class":50},[36,67951,67952,67954,67957,67960,67962,67965],{"class":38,"line":54},[36,67953,53475],{"class":50},[36,67955,67956],{"class":52631},"form",[36,67958,67959],{"class":46}," action",[36,67961,70],{"class":50},[36,67963,67964],{"class":110},"\"http:\u002F\u002Fwww.itcast.cn\"",[36,67966,52638],{"class":50},[36,67968,67969,67971,67973,67975,67977,67980,67983,67985,67988],{"class":38,"line":61},[36,67970,52672],{"class":50},[36,67972,55152],{"class":52631},[36,67974,55155],{"class":46},[36,67976,70],{"class":50},[36,67978,67979],{"class":110},"\"submit\"",[36,67981,67982],{"class":46}," value",[36,67984,70],{"class":50},[36,67986,67987],{"class":110},"\"免费注册\"",[36,67989,52638],{"class":50},[36,67991,67992,67994,67996],{"class":38,"line":80},[36,67993,52672],{"class":50},[36,67995,53144],{"class":52631},[36,67997,52638],{"class":50},[36,67999,68000],{"class":38,"line":96},[36,68001,68002],{"class":50},"      const form = document.querySelector('form')\n",[36,68004,68005],{"class":38,"line":101},[36,68006,68007],{"class":50},"      form.addEventListener('submit', function (e) {\n",[36,68009,68010],{"class":38,"line":128},[36,68011,68012],{"class":50},"        e.preventDefault()\n",[36,68014,68015],{"class":38,"line":149},[36,68016,66146],{"class":50},[36,68018,68019,68021,68023],{"class":38,"line":154},[36,68020,53107],{"class":50},[36,68022,53144],{"class":52631},[36,68024,52638],{"class":50},[36,68026,68027,68029,68031],{"class":38,"line":167},[36,68028,53748],{"class":50},[36,68030,67956],{"class":52631},[36,68032,52638],{"class":50},[36,68034,68035,68037,68039],{"class":38,"line":172},[36,68036,53116],{"class":50},[36,68038,53131],{"class":52631},[36,68040,52638],{"class":50},[19,68042,68043],{},"点击不在跳转！！！",[1645,68045,68047],{"id":68046},"_332-事件委托","3.3.2 事件委托",[19,68049,68050],{},[2992,68051],{"alt":31,"src":68052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,68054,68056],{"className":51964,"code":68055,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cul>\n    \u003Cli>1\u003C\u002Fli>\n    \u003Cli>2\u003C\u002Fli>\n    \u003Cli>3\u003C\u002Fli>\n    \u003Cli>4\u003C\u002Fli>\n    \u003Cli>5\u003C\u002Fli>\n    \u003Cp>我不需要变色\u003C\u002Fp>\n  \u003C\u002Ful>\n  \u003Cscript>\n    \u002F\u002F 点击每个li，当前文字变为红色\n    const ul = document.querySelector('ul')\n    ul.addEventListener('click', function (e) {\n      \u002F\u002F alert(1)\n      \u002F\u002F e.target就是我们点击的对象\n      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n      \u002F\u002F e.target.style.color = 'red'\n      console.log(e)\n\n      console.dir(e.target)\n\n      \u002F\u002F 我们需求，我们只有点击li才会变色\n      \u002F\u002F 通过tagName来进行判断\n      if (e.target.tagName === 'LI') {\n        e.target.style.color = 'red'\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,68057,68058,68068,68082,68086,68094,68108,68128,68140,68148,68152,68160,68168,68180,68192,68204,68216,68228,68241,68249,68257,68262,68281,68302,68307,68312,68317,68322,68331,68335,68345,68349,68354,68359,68373,68383,68387,68391,68399,68407,68411],{"__ignoreMap":31},[36,68059,68060,68062,68064,68066],{"class":38,"line":39},[36,68061,52628],{"class":50},[36,68063,52632],{"class":52631},[36,68065,52635],{"class":46},[36,68067,52638],{"class":50},[36,68069,68070,68072,68074,68076,68078,68080],{"class":38,"line":54},[36,68071,2577],{"class":50},[36,68073,51966],{"class":52631},[36,68075,52647],{"class":46},[36,68077,70],{"class":50},[36,68079,52652],{"class":110},[36,68081,52638],{"class":50},[36,68083,68084],{"class":38,"line":61},[36,68085,58],{"emptyLinePlaceholder":57},[36,68087,68088,68090,68092],{"class":38,"line":80},[36,68089,2577],{"class":50},[36,68091,52665],{"class":52631},[36,68093,52638],{"class":50},[36,68095,68096,68098,68100,68102,68104,68106],{"class":38,"line":96},[36,68097,53475],{"class":50},[36,68099,52675],{"class":52631},[36,68101,52678],{"class":46},[36,68103,70],{"class":50},[36,68105,52683],{"class":110},[36,68107,52638],{"class":50},[36,68109,68110,68112,68114,68116,68118,68120,68122,68124,68126],{"class":38,"line":101},[36,68111,53475],{"class":50},[36,68113,52675],{"class":52631},[36,68115,16249],{"class":46},[36,68117,70],{"class":50},[36,68119,52722],{"class":110},[36,68121,52702],{"class":46},[36,68123,70],{"class":50},[36,68125,52729],{"class":110},[36,68127,52638],{"class":50},[36,68129,68130,68132,68134,68136,68138],{"class":38,"line":128},[36,68131,53475],{"class":50},[36,68133,52738],{"class":52631},[36,68135,52741],{"class":50},[36,68137,52738],{"class":52631},[36,68139,52638],{"class":50},[36,68141,68142,68144,68146],{"class":38,"line":149},[36,68143,53116],{"class":50},[36,68145,52665],{"class":52631},[36,68147,52638],{"class":50},[36,68149,68150],{"class":38,"line":154},[36,68151,58],{"emptyLinePlaceholder":57},[36,68153,68154,68156,68158],{"class":38,"line":167},[36,68155,2577],{"class":50},[36,68157,53131],{"class":52631},[36,68159,52638],{"class":50},[36,68161,68162,68164,68166],{"class":38,"line":172},[36,68163,53475],{"class":50},[36,68165,2674],{"class":52631},[36,68167,52638],{"class":50},[36,68169,68170,68172,68174,68176,68178],{"class":38,"line":192},[36,68171,52672],{"class":50},[36,68173,259],{"class":52631},[36,68175,55297],{"class":50},[36,68177,259],{"class":52631},[36,68179,52638],{"class":50},[36,68181,68182,68184,68186,68188,68190],{"class":38,"line":211},[36,68183,52672],{"class":50},[36,68185,259],{"class":52631},[36,68187,55316],{"class":50},[36,68189,259],{"class":52631},[36,68191,52638],{"class":50},[36,68193,68194,68196,68198,68200,68202],{"class":38,"line":216},[36,68195,52672],{"class":50},[36,68197,259],{"class":52631},[36,68199,55335],{"class":50},[36,68201,259],{"class":52631},[36,68203,52638],{"class":50},[36,68205,68206,68208,68210,68212,68214],{"class":38,"line":231},[36,68207,52672],{"class":50},[36,68209,259],{"class":52631},[36,68211,55354],{"class":50},[36,68213,259],{"class":52631},[36,68215,52638],{"class":50},[36,68217,68218,68220,68222,68224,68226],{"class":38,"line":236},[36,68219,52672],{"class":50},[36,68221,259],{"class":52631},[36,68223,55373],{"class":50},[36,68225,259],{"class":52631},[36,68227,52638],{"class":50},[36,68229,68230,68232,68234,68237,68239],{"class":38,"line":247},[36,68231,52672],{"class":50},[36,68233,19],{"class":52631},[36,68235,68236],{"class":50},">我不需要变色\u003C\u002F",[36,68238,19],{"class":52631},[36,68240,52638],{"class":50},[36,68242,68243,68245,68247],{"class":38,"line":637},[36,68244,53748],{"class":50},[36,68246,2674],{"class":52631},[36,68248,52638],{"class":50},[36,68250,68251,68253,68255],{"class":38,"line":646},[36,68252,53475],{"class":50},[36,68254,53144],{"class":52631},[36,68256,52638],{"class":50},[36,68258,68259],{"class":38,"line":655},[36,68260,68261],{"class":124},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[36,68263,68264,68266,68268,68270,68272,68274,68276,68279],{"class":38,"line":660},[36,68265,1498],{"class":42},[36,68267,62623],{"class":73},[36,68269,14893],{"class":42},[36,68271,55727],{"class":50},[36,68273,55730],{"class":46},[36,68275,222],{"class":50},[36,68277,68278],{"class":110},"'ul'",[36,68280,1680],{"class":50},[36,68282,68283,68286,68288,68290,68292,68294,68296,68298,68300],{"class":38,"line":665},[36,68284,68285],{"class":50},"    ul.",[36,68287,59144],{"class":46},[36,68289,222],{"class":50},[36,68291,59149],{"class":110},[36,68293,477],{"class":50},[36,68295,55780],{"class":42},[36,68297,3180],{"class":50},[36,68299,1744],{"class":473},[36,68301,485],{"class":50},[36,68303,68304],{"class":38,"line":674},[36,68305,68306],{"class":124},"      \u002F\u002F alert(1)\n",[36,68308,68309],{"class":38,"line":679},[36,68310,68311],{"class":124},"      \u002F\u002F e.target就是我们点击的对象\n",[36,68313,68314],{"class":38,"line":692},[36,68315,68316],{"class":124},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[36,68318,68319],{"class":38,"line":705},[36,68320,68321],{"class":124},"      \u002F\u002F e.target.style.color = 'red'\n",[36,68323,68324,68326,68328],{"class":38,"line":710},[36,68325,59575],{"class":50},[36,68327,59578],{"class":46},[36,68329,68330],{"class":50},"(e)\n",[36,68332,68333],{"class":38,"line":722},[36,68334,58],{"emptyLinePlaceholder":57},[36,68336,68337,68339,68342],{"class":38,"line":750},[36,68338,59575],{"class":50},[36,68340,68341],{"class":46},"dir",[36,68343,68344],{"class":50},"(e.target)\n",[36,68346,68347],{"class":38,"line":755},[36,68348,58],{"emptyLinePlaceholder":57},[36,68350,68351],{"class":38,"line":777},[36,68352,68353],{"class":124},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[36,68355,68356],{"class":38,"line":802},[36,68357,68358],{"class":124},"      \u002F\u002F 通过tagName来进行判断\n",[36,68360,68361,68363,68366,68368,68371],{"class":38,"line":807},[36,68362,55811],{"class":42},[36,68364,68365],{"class":50}," (e.target.tagName ",[36,68367,55817],{"class":42},[36,68369,68370],{"class":110}," 'LI'",[36,68372,485],{"class":50},[36,68374,68375,68378,68380],{"class":38,"line":818},[36,68376,68377],{"class":50},"        e.target.style.color ",[36,68379,70],{"class":42},[36,68381,68382],{"class":110}," 'red'\n",[36,68384,68385],{"class":38,"line":843},[36,68386,53729],{"class":50},[36,68388,68389],{"class":38,"line":848},[36,68390,34792],{"class":50},[36,68392,68393,68395,68397],{"class":38,"line":859},[36,68394,53748],{"class":50},[36,68396,53144],{"class":52631},[36,68398,52638],{"class":50},[36,68400,68401,68403,68405],{"class":38,"line":864},[36,68402,53116],{"class":50},[36,68404,53131],{"class":52631},[36,68406,52638],{"class":50},[36,68408,68409],{"class":38,"line":873},[36,68410,58],{"emptyLinePlaceholder":57},[36,68412,68413,68415,68417],{"class":38,"line":9454},[36,68414,53116],{"class":50},[36,68416,51966],{"class":52631},[36,68418,52638],{"class":50},[19,68420,68421],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68423,68424],{},"if(e.target.ragName==='P') {}",[19,68426,68427],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68429,68430],{},"通过事件委托的方式实现tab栏切换改造：",[19,68432,68433],{},"一定要记住自定义属性！！！！！！",[19,68435,68436],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68438,68439],{},"id是自定义的属性名",[19,68441,68442],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,68444,68446],{"className":51964,"code":68445,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Ctitle>tab栏切换\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      margin: 0;\n      padding: 0;\n    }\n\n    .tab {\n      width: 590px;\n      height: 340px;\n      margin: 20px;\n      border: 1px solid #e4e4e4;\n    }\n\n    .tab-nav {\n      width: 100%;\n      height: 60px;\n      line-height: 60px;\n      display: flex;\n      justify-content: space-between;\n    }\n\n    .tab-nav h3 {\n      font-size: 24px;\n      font-weight: normal;\n      margin-left: 20px;\n    }\n\n    .tab-nav ul {\n      list-style: none;\n      display: flex;\n      justify-content: flex-end;\n    }\n\n    .tab-nav ul li {\n      margin: 0 20px;\n      font-size: 14px;\n    }\n\n    .tab-nav ul li a {\n      text-decoration: none;\n      border-bottom: 2px solid transparent;\n      color: #333;\n    }\n\n    .tab-nav ul li a.active {\n      border-color: #e1251b;\n      color: #e1251b;\n    }\n\n    .tab-content {\n      padding: 0 16px;\n    }\n\n    .tab-content .item {\n      display: none;\n    }\n\n    .tab-content .active {\n      display: block;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"tab\">\n    \u003Cdiv class=\"tab-nav\">\n      \u003Ch3>每日特价\u003C\u002Fh3>\n      \u003Cul>\n        \u003Cli>\u003Ca class=\"active\" href=\"javascript:;\" data-id=\"0\">精选\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"1\">美食\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"2\">百货\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"3\">个护\u003C\u002Fa>\u003C\u002Fli>\n        \u003Cli>\u003Ca href=\"javascript:;\" data-id=\"4\">预告\u003C\u002Fa>\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tab-content\">\n      \u003Cdiv class=\"item active\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n      \u003Cdiv class=\"item\">\u003Cimg src=\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\" alt=\"\" \u002F>\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 采取事件委托的形式，tab栏切换\n    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n    const ul = document.querySelector('.tab-nav ul')\n    \u002F\u002F 2.添加事件\n    ul.addEventListener('click', function (e) {\n      console.dir(e.target)\n      \u002F\u002Fe.targer是我们点击的对象\n      if (e.target.tagName === 'A') {\n        document.querySelector('.active').classList.remove('active')\n        e.target.classList.add('active')\n\n        \u002F\u002F 下面大盒子模块\n        \u002F\u002F console.log(e.target.dataset.id)\n        const i = +e.target.dataset.id\n        document.querySelector('.tab-content .active').classList.remove('active')\n        document.querySelector(`.tab-content .item:nth-child(${i + 1})`).classList.add('active')\n\n      }\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,68447,68448,68458,68472,68476,68484,68498,68518,68538,68550,68558,68564,68574,68584,68588,68592,68598,68610,68622,68634,68650,68654,68658,68664,68676,68688,68700,68710,68720,68724,68728,68736,68748,68758,68770,68774,68778,68786,68796,68806,68816,68820,68824,68834,68848,68860,68864,68868,68880,68890,68906,68916,68920,68924,68938,68948,68958,68962,68966,68972,68986,68990,68994,69002,69012,69016,69020,69029,69039,69043,69051,69059,69063,69071,69085,69099,69111,69119,69158,69190,69222,69254,69286,69294,69302,69316,69350,69384,69418,69452,69486,69494,69502,69510,69515,69520,69539,69544,69564,69572,69577,69590,69611,69624,69628,69633,69638,69651,69671,69699,69703,69707,69711,69719,69727,69731],{"__ignoreMap":31},[36,68449,68450,68452,68454,68456],{"class":38,"line":39},[36,68451,52628],{"class":50},[36,68453,52632],{"class":52631},[36,68455,52635],{"class":46},[36,68457,52638],{"class":50},[36,68459,68460,68462,68464,68466,68468,68470],{"class":38,"line":54},[36,68461,2577],{"class":50},[36,68463,51966],{"class":52631},[36,68465,52647],{"class":46},[36,68467,70],{"class":50},[36,68469,52652],{"class":110},[36,68471,52638],{"class":50},[36,68473,68474],{"class":38,"line":61},[36,68475,58],{"emptyLinePlaceholder":57},[36,68477,68478,68480,68482],{"class":38,"line":80},[36,68479,2577],{"class":50},[36,68481,52665],{"class":52631},[36,68483,52638],{"class":50},[36,68485,68486,68488,68490,68492,68494,68496],{"class":38,"line":96},[36,68487,53475],{"class":50},[36,68489,52675],{"class":52631},[36,68491,52678],{"class":46},[36,68493,70],{"class":50},[36,68495,52683],{"class":110},[36,68497,60458],{"class":50},[36,68499,68500,68502,68504,68506,68508,68510,68512,68514,68516],{"class":38,"line":101},[36,68501,53475],{"class":50},[36,68503,52675],{"class":52631},[36,68505,52694],{"class":46},[36,68507,70],{"class":50},[36,68509,52699],{"class":110},[36,68511,52702],{"class":46},[36,68513,70],{"class":50},[36,68515,52707],{"class":110},[36,68517,60458],{"class":50},[36,68519,68520,68522,68524,68526,68528,68530,68532,68534,68536],{"class":38,"line":128},[36,68521,53475],{"class":50},[36,68523,52675],{"class":52631},[36,68525,16249],{"class":46},[36,68527,70],{"class":50},[36,68529,52722],{"class":110},[36,68531,52702],{"class":46},[36,68533,70],{"class":50},[36,68535,52729],{"class":110},[36,68537,60458],{"class":50},[36,68539,68540,68542,68544,68546,68548],{"class":38,"line":149},[36,68541,53475],{"class":50},[36,68543,52738],{"class":52631},[36,68545,64956],{"class":50},[36,68547,52738],{"class":52631},[36,68549,52638],{"class":50},[36,68551,68552,68554,68556],{"class":38,"line":154},[36,68553,53475],{"class":50},[36,68555,1592],{"class":52631},[36,68557,52638],{"class":50},[36,68559,68560,68562],{"class":38,"line":167},[36,68561,569],{"class":52631},[36,68563,16901],{"class":50},[36,68565,68566,68568,68570,68572],{"class":38,"line":172},[36,68567,56037],{"class":73},[36,68569,52768],{"class":50},[36,68571,1859],{"class":73},[36,68573,77],{"class":50},[36,68575,68576,68578,68580,68582],{"class":38,"line":192},[36,68577,56026],{"class":73},[36,68579,52768],{"class":50},[36,68581,1859],{"class":73},[36,68583,77],{"class":50},[36,68585,68586],{"class":38,"line":211},[36,68587,3693],{"class":50},[36,68589,68590],{"class":38,"line":216},[36,68591,58],{"emptyLinePlaceholder":57},[36,68593,68594,68596],{"class":38,"line":231},[36,68595,65007],{"class":46},[36,68597,16901],{"class":50},[36,68599,68600,68602,68604,68606,68608],{"class":38,"line":236},[36,68601,56102],{"class":73},[36,68603,52768],{"class":50},[36,68605,65018],{"class":73},[36,68607,52823],{"class":42},[36,68609,77],{"class":50},[36,68611,68612,68614,68616,68618,68620],{"class":38,"line":247},[36,68613,56116],{"class":73},[36,68615,52768],{"class":50},[36,68617,65031],{"class":73},[36,68619,52823],{"class":42},[36,68621,77],{"class":50},[36,68623,68624,68626,68628,68630,68632],{"class":38,"line":637},[36,68625,56037],{"class":73},[36,68627,52768],{"class":50},[36,68629,2367],{"class":73},[36,68631,52823],{"class":42},[36,68633,77],{"class":50},[36,68635,68636,68638,68640,68642,68644,68646,68648],{"class":38,"line":646},[36,68637,63308],{"class":73},[36,68639,52768],{"class":50},[36,68641,1885],{"class":73},[36,68643,52823],{"class":42},[36,68645,52852],{"class":73},[36,68647,63575],{"class":73},[36,68649,77],{"class":50},[36,68651,68652],{"class":38,"line":655},[36,68653,3693],{"class":50},[36,68655,68656],{"class":38,"line":660},[36,68657,58],{"emptyLinePlaceholder":57},[36,68659,68660,68662],{"class":38,"line":665},[36,68661,65076],{"class":46},[36,68663,16901],{"class":50},[36,68665,68666,68668,68670,68672,68674],{"class":38,"line":674},[36,68667,56102],{"class":73},[36,68669,52768],{"class":50},[36,68671,1979],{"class":73},[36,68673,1996],{"class":42},[36,68675,77],{"class":50},[36,68677,68678,68680,68682,68684,68686],{"class":38,"line":679},[36,68679,56116],{"class":73},[36,68681,52768],{"class":50},[36,68683,2574],{"class":73},[36,68685,52823],{"class":42},[36,68687,77],{"class":50},[36,68689,68690,68692,68694,68696,68698],{"class":38,"line":692},[36,68691,58690],{"class":73},[36,68693,52768],{"class":50},[36,68695,2574],{"class":73},[36,68697,52823],{"class":42},[36,68699,77],{"class":50},[36,68701,68702,68704,68706,68708],{"class":38,"line":705},[36,68703,56340],{"class":73},[36,68705,52768],{"class":50},[36,68707,52808],{"class":73},[36,68709,77],{"class":50},[36,68711,68712,68714,68716,68718],{"class":38,"line":710},[36,68713,56351],{"class":73},[36,68715,52768],{"class":50},[36,68717,52999],{"class":73},[36,68719,77],{"class":50},[36,68721,68722],{"class":38,"line":722},[36,68723,3693],{"class":50},[36,68725,68726],{"class":38,"line":750},[36,68727,58],{"emptyLinePlaceholder":57},[36,68729,68730,68732,68734],{"class":38,"line":755},[36,68731,65076],{"class":46},[36,68733,65149],{"class":52631},[36,68735,16901],{"class":50},[36,68737,68738,68740,68742,68744,68746],{"class":38,"line":777},[36,68739,56253],{"class":73},[36,68741,52768],{"class":50},[36,68743,2467],{"class":73},[36,68745,52823],{"class":42},[36,68747,77],{"class":50},[36,68749,68750,68752,68754,68756],{"class":38,"line":802},[36,68751,63665],{"class":73},[36,68753,52768],{"class":50},[36,68755,65172],{"class":73},[36,68757,77],{"class":50},[36,68759,68760,68762,68764,68766,68768],{"class":38,"line":807},[36,68761,63331],{"class":73},[36,68763,52768],{"class":50},[36,68765,2367],{"class":73},[36,68767,52823],{"class":42},[36,68769,77],{"class":50},[36,68771,68772],{"class":38,"line":818},[36,68773,3693],{"class":50},[36,68775,68776],{"class":38,"line":843},[36,68777,58],{"emptyLinePlaceholder":57},[36,68779,68780,68782,68784],{"class":38,"line":848},[36,68781,65076],{"class":46},[36,68783,62623],{"class":52631},[36,68785,16901],{"class":50},[36,68787,68788,68790,68792,68794],{"class":38,"line":859},[36,68789,56063],{"class":73},[36,68791,52768],{"class":50},[36,68793,56068],{"class":73},[36,68795,77],{"class":50},[36,68797,68798,68800,68802,68804],{"class":38,"line":864},[36,68799,56340],{"class":73},[36,68801,52768],{"class":50},[36,68803,52808],{"class":73},[36,68805,77],{"class":50},[36,68807,68808,68810,68812,68814],{"class":38,"line":873},[36,68809,56351],{"class":73},[36,68811,52768],{"class":50},[36,68813,52911],{"class":73},[36,68815,77],{"class":50},[36,68817,68818],{"class":38,"line":9454},[36,68819,3693],{"class":50},[36,68821,68822],{"class":38,"line":9481},[36,68823,58],{"emptyLinePlaceholder":57},[36,68825,68826,68828,68830,68832],{"class":38,"line":9486},[36,68827,65076],{"class":46},[36,68829,62623],{"class":52631},[36,68831,56406],{"class":52631},[36,68833,16901],{"class":50},[36,68835,68836,68838,68840,68842,68844,68846],{"class":38,"line":9492},[36,68837,56037],{"class":73},[36,68839,52768],{"class":50},[36,68841,1859],{"class":73},[36,68843,319],{"class":73},[36,68845,52823],{"class":42},[36,68847,77],{"class":50},[36,68849,68850,68852,68854,68856,68858],{"class":38,"line":9504},[36,68851,56253],{"class":73},[36,68853,52768],{"class":50},[36,68855,2216],{"class":73},[36,68857,52823],{"class":42},[36,68859,77],{"class":50},[36,68861,68862],{"class":38,"line":9516},[36,68863,3693],{"class":50},[36,68865,68866],{"class":38,"line":9528},[36,68867,58],{"emptyLinePlaceholder":57},[36,68869,68870,68872,68874,68876,68878],{"class":38,"line":11184},[36,68871,65076],{"class":46},[36,68873,62623],{"class":52631},[36,68875,56406],{"class":52631},[36,68877,474],{"class":52631},[36,68879,16901],{"class":50},[36,68881,68882,68884,68886,68888],{"class":38,"line":11209},[36,68883,65301],{"class":73},[36,68885,52768],{"class":50},[36,68887,56068],{"class":73},[36,68889,77],{"class":50},[36,68891,68892,68894,68896,68898,68900,68902,68904],{"class":38,"line":11232},[36,68893,63563],{"class":73},[36,68895,52768],{"class":50},[36,68897,1747],{"class":73},[36,68899,52823],{"class":42},[36,68901,52852],{"class":73},[36,68903,65322],{"class":73},[36,68905,77],{"class":50},[36,68907,68908,68910,68912,68914],{"class":38,"line":11256},[36,68909,58747],{"class":73},[36,68911,52768],{"class":50},[36,68913,63700],{"class":73},[36,68915,77],{"class":50},[36,68917,68918],{"class":38,"line":11261},[36,68919,3693],{"class":50},[36,68921,68922],{"class":38,"line":11266},[36,68923,58],{"emptyLinePlaceholder":57},[36,68925,68926,68928,68930,68932,68934,68936],{"class":38,"line":11271},[36,68927,65076],{"class":46},[36,68929,62623],{"class":52631},[36,68931,56406],{"class":52631},[36,68933,474],{"class":52631},[36,68935,65355],{"class":46},[36,68937,16901],{"class":50},[36,68939,68940,68942,68944,68946],{"class":38,"line":11280},[36,68941,63122],{"class":73},[36,68943,52768],{"class":50},[36,68945,65366],{"class":73},[36,68947,77],{"class":50},[36,68949,68950,68952,68954,68956],{"class":38,"line":11285},[36,68951,58747],{"class":73},[36,68953,52768],{"class":50},[36,68955,65366],{"class":73},[36,68957,77],{"class":50},[36,68959,68960],{"class":38,"line":11291},[36,68961,3693],{"class":50},[36,68963,68964],{"class":38,"line":11312},[36,68965,58],{"emptyLinePlaceholder":57},[36,68967,68968,68970],{"class":38,"line":11318},[36,68969,65391],{"class":46},[36,68971,16901],{"class":50},[36,68973,68974,68976,68978,68980,68982,68984],{"class":38,"line":11332},[36,68975,56026],{"class":73},[36,68977,52768],{"class":50},[36,68979,1859],{"class":73},[36,68981,65404],{"class":73},[36,68983,52823],{"class":42},[36,68985,77],{"class":50},[36,68987,68988],{"class":38,"line":11338},[36,68989,3693],{"class":50},[36,68991,68992],{"class":38,"line":11365},[36,68993,58],{"emptyLinePlaceholder":57},[36,68995,68996,68998,69000],{"class":38,"line":11374},[36,68997,65391],{"class":46},[36,68999,63505],{"class":46},[36,69001,16901],{"class":50},[36,69003,69004,69006,69008,69010],{"class":38,"line":11380},[36,69005,56340],{"class":73},[36,69007,52768],{"class":50},[36,69009,56068],{"class":73},[36,69011,77],{"class":50},[36,69013,69014],{"class":38,"line":11388},[36,69015,3693],{"class":50},[36,69017,69018],{"class":38,"line":11393},[36,69019,58],{"emptyLinePlaceholder":57},[36,69021,69022,69024,69027],{"class":38,"line":17933},[36,69023,65391],{"class":46},[36,69025,69026],{"class":46}," .active",[36,69028,16901],{"class":50},[36,69030,69031,69033,69035,69037],{"class":38,"line":17939},[36,69032,56340],{"class":73},[36,69034,52768],{"class":50},[36,69036,62200],{"class":73},[36,69038,77],{"class":50},[36,69040,69041],{"class":38,"line":17962},[36,69042,3693],{"class":50},[36,69044,69045,69047,69049],{"class":38,"line":17968},[36,69046,53748],{"class":50},[36,69048,1592],{"class":52631},[36,69050,52638],{"class":50},[36,69052,69053,69055,69057],{"class":38,"line":17991},[36,69054,53116],{"class":50},[36,69056,52665],{"class":52631},[36,69058,52638],{"class":50},[36,69060,69061],{"class":38,"line":18005},[36,69062,58],{"emptyLinePlaceholder":57},[36,69064,69065,69067,69069],{"class":38,"line":18025},[36,69066,2577],{"class":50},[36,69068,53131],{"class":52631},[36,69070,52638],{"class":50},[36,69072,69073,69075,69077,69079,69081,69083],{"class":38,"line":18031},[36,69074,53475],{"class":50},[36,69076,52942],{"class":52631},[36,69078,54817],{"class":46},[36,69080,70],{"class":50},[36,69082,65506],{"class":110},[36,69084,52638],{"class":50},[36,69086,69087,69089,69091,69093,69095,69097],{"class":38,"line":18042},[36,69088,52672],{"class":50},[36,69090,52942],{"class":52631},[36,69092,54817],{"class":46},[36,69094,70],{"class":50},[36,69096,65521],{"class":110},[36,69098,52638],{"class":50},[36,69100,69101,69103,69105,69107,69109],{"class":38,"line":18065},[36,69102,56565],{"class":50},[36,69104,1645],{"class":52631},[36,69106,65532],{"class":50},[36,69108,1645],{"class":52631},[36,69110,52638],{"class":50},[36,69112,69113,69115,69117],{"class":38,"line":18087},[36,69114,56565],{"class":50},[36,69116,2674],{"class":52631},[36,69118,52638],{"class":50},[36,69120,69121,69123,69125,69127,69129,69131,69133,69135,69137,69139,69141,69143,69145,69148,69150,69152,69154,69156],{"class":38,"line":18092},[36,69122,56633],{"class":50},[36,69124,259],{"class":52631},[36,69126,62383],{"class":50},[36,69128,1906],{"class":52631},[36,69130,54817],{"class":46},[36,69132,70],{"class":50},[36,69134,61037],{"class":110},[36,69136,62388],{"class":46},[36,69138,70],{"class":50},[36,69140,65567],{"class":110},[36,69142,55282],{"class":46},[36,69144,70],{"class":50},[36,69146,69147],{"class":110},"\"0\"",[36,69149,65570],{"class":50},[36,69151,1906],{"class":52631},[36,69153,56645],{"class":50},[36,69155,259],{"class":52631},[36,69157,52638],{"class":50},[36,69159,69160,69162,69164,69166,69168,69170,69172,69174,69176,69178,69180,69182,69184,69186,69188],{"class":38,"line":18098},[36,69161,56633],{"class":50},[36,69163,259],{"class":52631},[36,69165,62383],{"class":50},[36,69167,1906],{"class":52631},[36,69169,62388],{"class":46},[36,69171,70],{"class":50},[36,69173,65567],{"class":110},[36,69175,55282],{"class":46},[36,69177,70],{"class":50},[36,69179,5169],{"class":110},[36,69181,65597],{"class":50},[36,69183,1906],{"class":52631},[36,69185,56645],{"class":50},[36,69187,259],{"class":52631},[36,69189,52638],{"class":50},[36,69191,69192,69194,69196,69198,69200,69202,69204,69206,69208,69210,69212,69214,69216,69218,69220],{"class":38,"line":18112},[36,69193,56633],{"class":50},[36,69195,259],{"class":52631},[36,69197,62383],{"class":50},[36,69199,1906],{"class":52631},[36,69201,62388],{"class":46},[36,69203,70],{"class":50},[36,69205,65567],{"class":110},[36,69207,55282],{"class":46},[36,69209,70],{"class":50},[36,69211,5192],{"class":110},[36,69213,65624],{"class":50},[36,69215,1906],{"class":52631},[36,69217,56645],{"class":50},[36,69219,259],{"class":52631},[36,69221,52638],{"class":50},[36,69223,69224,69226,69228,69230,69232,69234,69236,69238,69240,69242,69244,69246,69248,69250,69252],{"class":38,"line":18125},[36,69225,56633],{"class":50},[36,69227,259],{"class":52631},[36,69229,62383],{"class":50},[36,69231,1906],{"class":52631},[36,69233,62388],{"class":46},[36,69235,70],{"class":50},[36,69237,65567],{"class":110},[36,69239,55282],{"class":46},[36,69241,70],{"class":50},[36,69243,5205],{"class":110},[36,69245,65651],{"class":50},[36,69247,1906],{"class":52631},[36,69249,56645],{"class":50},[36,69251,259],{"class":52631},[36,69253,52638],{"class":50},[36,69255,69256,69258,69260,69262,69264,69266,69268,69270,69272,69274,69276,69278,69280,69282,69284],{"class":38,"line":18130},[36,69257,56633],{"class":50},[36,69259,259],{"class":52631},[36,69261,62383],{"class":50},[36,69263,1906],{"class":52631},[36,69265,62388],{"class":46},[36,69267,70],{"class":50},[36,69269,65567],{"class":110},[36,69271,55282],{"class":46},[36,69273,70],{"class":50},[36,69275,5218],{"class":110},[36,69277,65678],{"class":50},[36,69279,1906],{"class":52631},[36,69281,56645],{"class":50},[36,69283,259],{"class":52631},[36,69285,52638],{"class":50},[36,69287,69288,69290,69292],{"class":38,"line":18144},[36,69289,56738],{"class":50},[36,69291,2674],{"class":52631},[36,69293,52638],{"class":50},[36,69295,69296,69298,69300],{"class":38,"line":18149},[36,69297,53107],{"class":50},[36,69299,52942],{"class":52631},[36,69301,52638],{"class":50},[36,69303,69304,69306,69308,69310,69312,69314],{"class":38,"line":18155},[36,69305,52672],{"class":50},[36,69307,52942],{"class":52631},[36,69309,54817],{"class":46},[36,69311,70],{"class":50},[36,69313,65715],{"class":110},[36,69315,52638],{"class":50},[36,69317,69318,69320,69322,69324,69326,69328,69330,69332,69334,69336,69338,69340,69342,69344,69346,69348],{"class":38,"line":18160},[36,69319,56565],{"class":50},[36,69321,52942],{"class":52631},[36,69323,54817],{"class":46},[36,69325,70],{"class":50},[36,69327,65730],{"class":110},[36,69329,62383],{"class":50},[36,69331,2992],{"class":52631},[36,69333,56570],{"class":46},[36,69335,70],{"class":50},[36,69337,65741],{"class":110},[36,69339,56578],{"class":46},[36,69341,70],{"class":50},[36,69343,9126],{"class":110},[36,69345,65750],{"class":50},[36,69347,52942],{"class":52631},[36,69349,52638],{"class":50},[36,69351,69352,69354,69356,69358,69360,69362,69364,69366,69368,69370,69372,69374,69376,69378,69380,69382],{"class":38,"line":18174},[36,69353,56565],{"class":50},[36,69355,52942],{"class":52631},[36,69357,54817],{"class":46},[36,69359,70],{"class":50},[36,69361,63954],{"class":110},[36,69363,62383],{"class":50},[36,69365,2992],{"class":52631},[36,69367,56570],{"class":46},[36,69369,70],{"class":50},[36,69371,65777],{"class":110},[36,69373,56578],{"class":46},[36,69375,70],{"class":50},[36,69377,9126],{"class":110},[36,69379,65750],{"class":50},[36,69381,52942],{"class":52631},[36,69383,52638],{"class":50},[36,69385,69386,69388,69390,69392,69394,69396,69398,69400,69402,69404,69406,69408,69410,69412,69414,69416],{"class":38,"line":18179},[36,69387,56565],{"class":50},[36,69389,52942],{"class":52631},[36,69391,54817],{"class":46},[36,69393,70],{"class":50},[36,69395,63954],{"class":110},[36,69397,62383],{"class":50},[36,69399,2992],{"class":52631},[36,69401,56570],{"class":46},[36,69403,70],{"class":50},[36,69405,65812],{"class":110},[36,69407,56578],{"class":46},[36,69409,70],{"class":50},[36,69411,9126],{"class":110},[36,69413,65750],{"class":50},[36,69415,52942],{"class":52631},[36,69417,52638],{"class":50},[36,69419,69420,69422,69424,69426,69428,69430,69432,69434,69436,69438,69440,69442,69444,69446,69448,69450],{"class":38,"line":18184},[36,69421,56565],{"class":50},[36,69423,52942],{"class":52631},[36,69425,54817],{"class":46},[36,69427,70],{"class":50},[36,69429,63954],{"class":110},[36,69431,62383],{"class":50},[36,69433,2992],{"class":52631},[36,69435,56570],{"class":46},[36,69437,70],{"class":50},[36,69439,65847],{"class":110},[36,69441,56578],{"class":46},[36,69443,70],{"class":50},[36,69445,9126],{"class":110},[36,69447,65750],{"class":50},[36,69449,52942],{"class":52631},[36,69451,52638],{"class":50},[36,69453,69454,69456,69458,69460,69462,69464,69466,69468,69470,69472,69474,69476,69478,69480,69482,69484],{"class":38,"line":18198},[36,69455,56565],{"class":50},[36,69457,52942],{"class":52631},[36,69459,54817],{"class":46},[36,69461,70],{"class":50},[36,69463,63954],{"class":110},[36,69465,62383],{"class":50},[36,69467,2992],{"class":52631},[36,69469,56570],{"class":46},[36,69471,70],{"class":50},[36,69473,65882],{"class":110},[36,69475,56578],{"class":46},[36,69477,70],{"class":50},[36,69479,9126],{"class":110},[36,69481,65750],{"class":50},[36,69483,52942],{"class":52631},[36,69485,52638],{"class":50},[36,69487,69488,69490,69492],{"class":38,"line":18210},[36,69489,53107],{"class":50},[36,69491,52942],{"class":52631},[36,69493,52638],{"class":50},[36,69495,69496,69498,69500],{"class":38,"line":18215},[36,69497,53748],{"class":50},[36,69499,52942],{"class":52631},[36,69501,52638],{"class":50},[36,69503,69504,69506,69508],{"class":38,"line":18228},[36,69505,53475],{"class":50},[36,69507,53144],{"class":52631},[36,69509,52638],{"class":50},[36,69511,69512],{"class":38,"line":18233},[36,69513,69514],{"class":124},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[36,69516,69517],{"class":38,"line":18238},[36,69518,69519],{"class":124},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[36,69521,69522,69524,69526,69528,69530,69532,69534,69537],{"class":38,"line":18243},[36,69523,1498],{"class":42},[36,69525,62623],{"class":73},[36,69527,14893],{"class":42},[36,69529,55727],{"class":50},[36,69531,55730],{"class":46},[36,69533,222],{"class":50},[36,69535,69536],{"class":110},"'.tab-nav ul'",[36,69538,1680],{"class":50},[36,69540,69541],{"class":38,"line":18256},[36,69542,69543],{"class":124},"    \u002F\u002F 2.添加事件\n",[36,69545,69546,69548,69550,69552,69554,69556,69558,69560,69562],{"class":38,"line":18261},[36,69547,68285],{"class":50},[36,69549,59144],{"class":46},[36,69551,222],{"class":50},[36,69553,59149],{"class":110},[36,69555,477],{"class":50},[36,69557,55780],{"class":42},[36,69559,3180],{"class":50},[36,69561,1744],{"class":473},[36,69563,485],{"class":50},[36,69565,69566,69568,69570],{"class":38,"line":33964},[36,69567,59575],{"class":50},[36,69569,68341],{"class":46},[36,69571,68344],{"class":50},[36,69573,69574],{"class":38,"line":33970},[36,69575,69576],{"class":124},"      \u002F\u002Fe.targer是我们点击的对象\n",[36,69578,69579,69581,69583,69585,69588],{"class":38,"line":33976},[36,69580,55811],{"class":42},[36,69582,68365],{"class":50},[36,69584,55817],{"class":42},[36,69586,69587],{"class":110}," 'A'",[36,69589,485],{"class":50},[36,69591,69592,69594,69596,69598,69601,69603,69605,69607,69609],{"class":38,"line":33982},[36,69593,53256],{"class":50},[36,69595,55730],{"class":46},[36,69597,222],{"class":50},[36,69599,69600],{"class":110},"'.active'",[36,69602,58334],{"class":50},[36,69604,58337],{"class":46},[36,69606,222],{"class":50},[36,69608,66045],{"class":110},[36,69610,1680],{"class":50},[36,69612,69613,69616,69618,69620,69622],{"class":38,"line":33988},[36,69614,69615],{"class":50},"        e.target.classList.",[36,69617,6822],{"class":46},[36,69619,222],{"class":50},[36,69621,66045],{"class":110},[36,69623,1680],{"class":50},[36,69625,69626],{"class":38,"line":33999},[36,69627,58],{"emptyLinePlaceholder":57},[36,69629,69630],{"class":38,"line":34005},[36,69631,69632],{"class":124},"        \u002F\u002F 下面大盒子模块\n",[36,69634,69635],{"class":38,"line":34025},[36,69636,69637],{"class":124},"        \u002F\u002F console.log(e.target.dataset.id)\n",[36,69639,69640,69642,69644,69646,69648],{"class":38,"line":34031},[36,69641,62601],{"class":42},[36,69643,4523],{"class":73},[36,69645,14893],{"class":42},[36,69647,46897],{"class":42},[36,69649,69650],{"class":50},"e.target.dataset.id\n",[36,69652,69653,69655,69657,69659,69661,69663,69665,69667,69669],{"class":38,"line":34042},[36,69654,53256],{"class":50},[36,69656,55730],{"class":46},[36,69658,222],{"class":50},[36,69660,66093],{"class":110},[36,69662,58334],{"class":50},[36,69664,58337],{"class":46},[36,69666,222],{"class":50},[36,69668,66045],{"class":110},[36,69670,1680],{"class":50},[36,69672,69673,69675,69677,69679,69681,69683,69685,69687,69689,69691,69693,69695,69697],{"class":38,"line":34048},[36,69674,53256],{"class":50},[36,69676,55730],{"class":46},[36,69678,222],{"class":50},[36,69680,66119],{"class":110},[36,69682,2108],{"class":50},[36,69684,46897],{"class":42},[36,69686,26449],{"class":73},[36,69688,58363],{"class":110},[36,69690,58334],{"class":50},[36,69692,6822],{"class":46},[36,69694,222],{"class":50},[36,69696,66045],{"class":110},[36,69698,1680],{"class":50},[36,69700,69701],{"class":38,"line":34054},[36,69702,58],{"emptyLinePlaceholder":57},[36,69704,69705],{"class":38,"line":34060},[36,69706,53729],{"class":50},[36,69708,69709],{"class":38,"line":34066},[36,69710,34792],{"class":50},[36,69712,69713,69715,69717],{"class":38,"line":34072},[36,69714,53748],{"class":50},[36,69716,53144],{"class":52631},[36,69718,52638],{"class":50},[36,69720,69721,69723,69725],{"class":38,"line":34078},[36,69722,53116],{"class":50},[36,69724,53131],{"class":52631},[36,69726,52638],{"class":50},[36,69728,69729],{"class":38,"line":34084},[36,69730,58],{"emptyLinePlaceholder":57},[36,69732,69733,69735,69737],{"class":38,"line":34104},[36,69734,53116],{"class":50},[36,69736,51966],{"class":52631},[36,69738,52638],{"class":50},[1645,69740,69742],{"id":69741},"_333-页面加载事件","3.3.3 页面加载事件",[256,69744,69745],{},[259,69746,69747],{},"load",[19,69749,69750],{},[2992,69751],{"alt":31,"src":69752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69754,69755],{},"window代表整个窗口，比document还要大",[19,69757,69758],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69760,69761],{},"img.addEventListener('load', function () {",[19,69763,69764],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69766,53795],{},[256,69768,69769],{"start":54},[259,69770,69771],{},"DOMContentLoaded",[19,69773,69774],{},[2992,69775],{"alt":31,"src":69776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69778,69779],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[1645,69781,69783],{"id":69782},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69785,69786],{},[2992,69787],{"alt":31,"src":69788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69790,69791],{},[2992,69792],{"alt":31,"src":69793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69795,69796],{},[2992,69797],{"alt":31,"src":69798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69800,69801],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69803,69804],{},"获得的是数字型数据，不带单位",[19,69806,69807],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69809,69810],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69812,69813],{},"它是通过document.documentElement来获取",[19,69815,69816],{},[2992,69817],{"alt":31,"src":69818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69820,69821],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[1645,69823,69825],{"id":69824},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69827,69828],{},[2992,69829],{"alt":31,"src":69830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69832,69833],{},[2992,69834],{"alt":31,"src":69835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[1645,69837,69839],{"id":69838},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69841,69842],{},[2992,69843],{"alt":31,"src":69844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69846,69847],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69849,69850],{},[2992,69851],{"alt":31,"src":69852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69854,69855],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69857,69858],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69860,69861],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69863,69864],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69866,69867],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69869,69870],{},[2992,69871],{"alt":31,"src":69872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69874,69875],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69877,69878],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69880,69881],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69883,69884],{},"e.pageX-box.getBoundingClientRect()",[1645,69886,69888],{"id":69887},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69890,69891],{},[2992,69892],{"alt":31,"src":69893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69895,69896],{},"这个是相对于视口来说的，它是个方法，不是属性值",[1645,69898,69900],{"id":69899},"_338-总结","3.3.8 总结",[19,69902,69903],{},[2992,69904],{"alt":31,"src":69905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69907,69908],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69910,69911],{},"修改盒子的宽高只能通过width和height来实现",[1645,69913,69915],{"id":69914},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,69917,69919],{"className":51964,"code":69918,"language":51966,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[33,69920,69921,69926,69931,69936,69941],{"__ignoreMap":31},[36,69922,69923],{"class":38,"line":39},[36,69924,69925],{"class":50},"\u002F* 页面滑动 *\u002F\n",[36,69927,69928],{"class":38,"line":54},[36,69929,69930],{"class":50},"html {\n",[36,69932,69933],{"class":38,"line":61},[36,69934,69935],{"class":50},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[36,69937,69938],{"class":38,"line":80},[36,69939,69940],{"class":50},"  scroll-behavior: smooth;\n",[36,69942,69943],{"class":38,"line":96},[36,69944,250],{"class":50},[19,69946,69947],{},"默认是auto",[1645,69949,69951],{"id":69950},"_3310-日期对象","3.3.10 日期对象",[23327,69953,69955],{"id":69954},"_33101-实例化","3.3.10.1 实例化",[19,69957,69958],{},[2992,69959],{"alt":31,"src":69960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23327,69962,69964],{"id":69963},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69966,69967],{},[2992,69968],{"alt":31,"src":69969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69971,69972],{},"月份+1",[19,69974,69975],{},"老外认为第一天为0，星期天",[19,69977,69978],{},"方法使用的时候必须要跟括号",[19,69980,69981],{},"快速获得日期",[19,69983,69984],{},"\u002F\u002F 得到年月日",[19,69986,69987],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69989,69990],{},"\u002F\u002F 得到当地日期",[19,69992,69993],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69995,69996],{},"\u002F\u002F 得到当地时间",[19,69998,69999],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70001,70002],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70004,70005],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53144,70007,70008],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,70010,70011],{},"学会去封装函数！",[23327,70013,70015],{"id":70014},"_33103-时间戳","3.3.10.3 时间戳",[19,70017,70018],{},[2992,70019],{"alt":31,"src":70020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70022,70023],{},[2992,70024],{"alt":31,"src":70025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70027,70028],{},"三种方法记住一个就可以",[1645,70030,70032],{"id":70031},"_3311-节点操作","3.3.11 节点操作",[23327,70034,70036],{"id":70035},"_33111-dom节点","3.3.11.1 DOM节点",[19,70038,70039],{},[2992,70040],{"alt":31,"src":70041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70043,70044],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23327,70046,70048],{"id":70047},"_33112-查找节点","3.3.11.2 查找节点",[19,70050,70051],{},"前边的document.querySelector()是获取的元素",[19,70053,70054],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70056,70057],{},[2992,70058],{"alt":31,"src":70059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[256,70061,70062],{},[259,70063,70064],{},"父节点",[19,70066,70067],{},[2992,70068],{"alt":31,"src":70069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[256,70071,70072],{"start":54},[259,70073,70074],{},"子节点",[19,70076,70077],{},[2992,70078],{"alt":31,"src":70079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70081,70082],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70084,70085],{},"children获得的是伪数组，是亲儿子",[256,70087,70088],{"start":61},[259,70089,70090],{},"兄弟节点",[19,70092,70093],{},[2992,70094],{"alt":31,"src":70095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23327,70097,70099],{"id":70098},"_33113-增加节点","3.3.11.3 增加节点",[19,70101,70102],{},[2992,70103],{"alt":31,"src":70104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70106,70107],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70109,70110],{},[2992,70111],{"alt":31,"src":70112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70114,70115],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70117,70118],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70120,70121],{},"例：",[53144,70123,70124],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,70126,70127],{},[2992,70128],{"alt":31,"src":70129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70131,70132],{},"false只克隆标签，里边的内容不会克隆过来",[26,70134,70136],{"className":51964,"code":70135,"language":51966,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[33,70137,70138],{"__ignoreMap":31},[36,70139,70140],{"class":38,"line":39},[36,70141,70135],{"class":50},[23327,70143,70145],{"id":70144},"_33114-删除节点","3.3.11.4 删除节点",[19,70147,70148],{},[2992,70149],{"alt":31,"src":70150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70152,70153],{},"父亲删儿子",[19,70155,70156],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[1645,70158,70160],{"id":70159},"_3312-m端事件","3.3.12 M端事件",[19,70162,70163],{},"M端就是移动端",[19,70165,70166],{},[2992,70167],{"alt":31,"src":70168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[1645,70170,70172],{"id":70171},"_3313-插件","3.3.13 插件",[19,70174,70175],{},"要熟悉官网！！！",[19,70177,70178],{},[1906,70179,70180],{"href":70180,"rel":70181},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25195],[19,70183,70184],{},[1906,70185,70186],{"href":70186,"rel":70187},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25195],[1645,70189,70191],{"id":70190},"_3314-学生信息表","3.3.14 学生信息表",[256,70193,70194,70197,70200,70203,70206,70209,70212,70215],{},[259,70195,70196],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[259,70198,70199],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[259,70201,70202],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[259,70204,70205],{},"用好表单元素自带的属性，value,name等",[259,70207,70208],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[259,70210,70211],{},"不要忘记事件对象",[259,70213,70214],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[259,70216,70217],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70219,70220],{},"结构：",[26,70222,70224],{"className":51964,"code":70223,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\" \u002F>\n  \u003Ctitle>学生信息管理\u003C\u002Ftitle>\n  \u003Clink rel=\"stylesheet\" href=\"css\u002Findex.css\" \u002F>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch1>新增学员\u003C\u002Fh1>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    姓名：\u003Cinput type=\"text\" class=\"uname\" name=\"uname\" \u002F>\n    年龄：\u003Cinput type=\"text\" class=\"age\" name=\"age\" \u002F>\n    性别:\n    \u003Cselect name=\"gender\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    薪资：\u003Cinput type=\"text\" class=\"salary\" name=\"salary\" \u002F>\n    就业城市：\u003Cselect name=\"city\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton class=\"add\">录入\u003C\u002Fbutton>\n  \u003C\u002Fform>\n\n  \u003Ch1>就业榜\u003C\u002Fh1>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>序号\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \n        \u003Ctr>\n          \u003Ctd>1001\u003C\u002Ftd>\n          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n          \u003Ctd>19\u003C\u002Ftd>\n          \u003Ctd>男\u003C\u002Ftd>\n          \u003Ctd>15000\u003C\u002Ftd>\n          \u003Ctd>上海\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n          \u003C\u002Ftd>\n        \u003C\u002Ftr> \n        -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F 获取元素\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const gender = document.querySelector('.gender')\n    const salary = document.querySelector('.salary')\n    const city = document.querySelector('.city')\n    const tbody = document.querySelector('tbody')\n\n    \u002F\u002F 获取所有带有name属性的元素\n    const items = document.querySelectorAll('[name]')\n    \u002F\u002F 声明一个空的数组\n    const arr = []\n    \u002F\u002F 1.录入模块\n    \u002F\u002F 1.1这是一个表单提交事件\n    const info = document.querySelector('.info')\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n      e.preventDefault()\n      \u002F\u002F console.log(11)\n\n      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n      \u002F\u002F 先遍历循环\n      for (let i = 0; i \u003C items.length; i++) {\n        if (items[i].value === '') {\n          return alert('输入内容不能为空')\n        }\n      }\n\n      \u002F\u002F 创建新的对象\n      const obj = {\n        stuID: arr.length + 1,\n        uname: uname.value,\n        age: age.value,\n        gender: gender.value,\n        salary: salary.value,\n        city: city.value\n      }\n      \u002F\u002F console.log(obj);\n      \u002F\u002F 追加到数组里面\n      arr.push(obj)\n      \u002F\u002F console.log(arr);\n      \u002F\u002F 清空表单  reset重置表单\n      this.reset()\n      \u002F\u002F 调用渲染函数\n      render()\n    })\n    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n    function render() {\n      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n      tbody.innerHTML = ''\n      \u002F\u002F 遍历数组\n      for (let i = 0; i \u003C arr.length; i++) {\n        const tr = document.createElement('tr')\n        tr.innerHTML = `\n        \u003Ctd>${arr[i].stuID}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].uname}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].age}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].gender}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].salary}\u003C\u002Ftd>\n          \u003Ctd>${arr[i].city}\u003C\u002Ftd>\n          \u003Ctd>\n            \u003Ca href=\"javascript:\" data-id=${i}>删除\u003C\u002Fa>\n          \u003C\u002Ftd> \n          `\n        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n        tbody.appendChild(tr)\n      }\n    }\n\n    \u002F\u002F 3.删除委托\n    \u002F\u002F 3.1 事件委托 tbody\n    tbody.addEventListener('click', function (e) {\n      if (e.target.tagName === 'A') {\n        \u002F\u002F 得到当前元素的自定义属性 data-id\n        \u002F\u002F console.log(e.target.dataset.id);\n        \u002F\u002F 删除arr 数组里面对应的数据\n        arr.splice(e.target.dataset.id, 1)\n        \u002F\u002F 重新渲染一次\n        render()\n      }\n    })\n  \u003C\u002Fscript>\n\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,70225,70226,70236,70250,70254,70262,70276,70296,70317,70330,70354,70362,70366,70374,70387,70408,70436,70464,70469,70491,70511,70530,70538,70566,70588,70608,70628,70648,70668,70688,70696,70716,70724,70728,70741,70749,70757,70765,70778,70791,70804,70817,70830,70843,70856,70864,70872,70880,70885,70890,70895,70900,70905,70910,70915,70920,70925,70930,70935,70940,70945,70953,70961,70969,70973,70993,71012,71032,71052,71072,71092,71096,71101,71121,71126,71136,71141,71146,71166,71188,71193,71203,71207,71211,71216,71221,71250,71264,71279,71283,71287,71291,71296,71307,71320,71325,71330,71335,71340,71345,71349,71354,71359,71368,71373,71378,71390,71395,71402,71406,71411,71421,71426,71436,71441,71469,71490,71500,71520,71538,71555,71572,71589,71606,71610,71620,71625,71630,71635,71646,71650,71654,71658,71663,71668,71689,71701,71706,71711,71716,71730,71735,71742,71746,71750,71758,71762,71770,71774],{"__ignoreMap":31},[36,70227,70228,70230,70232,70234],{"class":38,"line":39},[36,70229,52628],{"class":50},[36,70231,52632],{"class":52631},[36,70233,52635],{"class":46},[36,70235,52638],{"class":50},[36,70237,70238,70240,70242,70244,70246,70248],{"class":38,"line":54},[36,70239,2577],{"class":50},[36,70241,51966],{"class":52631},[36,70243,52647],{"class":46},[36,70245,70],{"class":50},[36,70247,52652],{"class":110},[36,70249,52638],{"class":50},[36,70251,70252],{"class":38,"line":61},[36,70253,58],{"emptyLinePlaceholder":57},[36,70255,70256,70258,70260],{"class":38,"line":80},[36,70257,2577],{"class":50},[36,70259,52665],{"class":52631},[36,70261,52638],{"class":50},[36,70263,70264,70266,70268,70270,70272,70274],{"class":38,"line":96},[36,70265,53475],{"class":50},[36,70267,52675],{"class":52631},[36,70269,52678],{"class":46},[36,70271,70],{"class":50},[36,70273,52683],{"class":110},[36,70275,60458],{"class":50},[36,70277,70278,70280,70282,70284,70286,70288,70290,70292,70294],{"class":38,"line":101},[36,70279,53475],{"class":50},[36,70281,52675],{"class":52631},[36,70283,16249],{"class":46},[36,70285,70],{"class":50},[36,70287,52722],{"class":110},[36,70289,52702],{"class":46},[36,70291,70],{"class":50},[36,70293,52729],{"class":110},[36,70295,60458],{"class":50},[36,70297,70298,70300,70302,70304,70306,70308,70310,70312,70315],{"class":38,"line":128},[36,70299,53475],{"class":50},[36,70301,52675],{"class":52631},[36,70303,52694],{"class":46},[36,70305,70],{"class":50},[36,70307,52699],{"class":110},[36,70309,52702],{"class":46},[36,70311,70],{"class":50},[36,70313,70314],{"class":110},"\"ie=edge\"",[36,70316,60458],{"class":50},[36,70318,70319,70321,70323,70326,70328],{"class":38,"line":149},[36,70320,53475],{"class":50},[36,70322,52738],{"class":52631},[36,70324,70325],{"class":50},">学生信息管理\u003C\u002F",[36,70327,52738],{"class":52631},[36,70329,52638],{"class":50},[36,70331,70332,70334,70337,70340,70342,70345,70347,70349,70352],{"class":38,"line":154},[36,70333,53475],{"class":50},[36,70335,70336],{"class":52631},"link",[36,70338,70339],{"class":46}," rel",[36,70341,70],{"class":50},[36,70343,70344],{"class":110},"\"stylesheet\"",[36,70346,62388],{"class":46},[36,70348,70],{"class":50},[36,70350,70351],{"class":110},"\"css\u002Findex.css\"",[36,70353,60458],{"class":50},[36,70355,70356,70358,70360],{"class":38,"line":167},[36,70357,53116],{"class":50},[36,70359,52665],{"class":52631},[36,70361,52638],{"class":50},[36,70363,70364],{"class":38,"line":172},[36,70365,58],{"emptyLinePlaceholder":57},[36,70367,70368,70370,70372],{"class":38,"line":192},[36,70369,2577],{"class":50},[36,70371,53131],{"class":52631},[36,70373,52638],{"class":50},[36,70375,70376,70378,70380,70383,70385],{"class":38,"line":211},[36,70377,53475],{"class":50},[36,70379,10],{"class":52631},[36,70381,70382],{"class":50},">新增学员\u003C\u002F",[36,70384,10],{"class":52631},[36,70386,52638],{"class":50},[36,70388,70389,70391,70393,70395,70397,70399,70402,70404,70406],{"class":38,"line":216},[36,70390,53475],{"class":50},[36,70392,67956],{"class":52631},[36,70394,54817],{"class":46},[36,70396,70],{"class":50},[36,70398,63995],{"class":110},[36,70400,70401],{"class":46}," autocomplete",[36,70403,70],{"class":50},[36,70405,33107],{"class":110},[36,70407,52638],{"class":50},[36,70409,70410,70413,70415,70417,70419,70421,70423,70425,70428,70430,70432,70434],{"class":38,"line":231},[36,70411,70412],{"class":50},"    姓名：\u003C",[36,70414,55152],{"class":52631},[36,70416,55155],{"class":46},[36,70418,70],{"class":50},[36,70420,64030],{"class":110},[36,70422,54817],{"class":46},[36,70424,70],{"class":50},[36,70426,70427],{"class":110},"\"uname\"",[36,70429,16249],{"class":46},[36,70431,70],{"class":50},[36,70433,70427],{"class":110},[36,70435,60458],{"class":50},[36,70437,70438,70441,70443,70445,70447,70449,70451,70453,70456,70458,70460,70462],{"class":38,"line":236},[36,70439,70440],{"class":50},"    年龄：\u003C",[36,70442,55152],{"class":52631},[36,70444,55155],{"class":46},[36,70446,70],{"class":50},[36,70448,64030],{"class":110},[36,70450,54817],{"class":46},[36,70452,70],{"class":50},[36,70454,70455],{"class":110},"\"age\"",[36,70457,16249],{"class":46},[36,70459,70],{"class":50},[36,70461,70455],{"class":110},[36,70463,60458],{"class":50},[36,70465,70466],{"class":38,"line":247},[36,70467,70468],{"class":50},"    性别:\n",[36,70470,70471,70473,70476,70478,70480,70483,70485,70487,70489],{"class":38,"line":637},[36,70472,52672],{"class":50},[36,70474,70475],{"class":52631},"select",[36,70477,16249],{"class":46},[36,70479,70],{"class":50},[36,70481,70482],{"class":110},"\"gender\"",[36,70484,54817],{"class":46},[36,70486,70],{"class":50},[36,70488,70482],{"class":110},[36,70490,52638],{"class":50},[36,70492,70493,70495,70498,70500,70502,70504,70507,70509],{"class":38,"line":646},[36,70494,56565],{"class":50},[36,70496,70497],{"class":52631},"option",[36,70499,67982],{"class":46},[36,70501,70],{"class":50},[36,70503,11427],{"class":110},[36,70505,70506],{"class":50},">男\u003C\u002F",[36,70508,70497],{"class":52631},[36,70510,52638],{"class":50},[36,70512,70513,70515,70517,70519,70521,70523,70526,70528],{"class":38,"line":655},[36,70514,56565],{"class":50},[36,70516,70497],{"class":52631},[36,70518,67982],{"class":46},[36,70520,70],{"class":50},[36,70522,11496],{"class":110},[36,70524,70525],{"class":50},">女\u003C\u002F",[36,70527,70497],{"class":52631},[36,70529,52638],{"class":50},[36,70531,70532,70534,70536],{"class":38,"line":660},[36,70533,53107],{"class":50},[36,70535,70475],{"class":52631},[36,70537,52638],{"class":50},[36,70539,70540,70543,70545,70547,70549,70551,70553,70555,70558,70560,70562,70564],{"class":38,"line":665},[36,70541,70542],{"class":50},"    薪资：\u003C",[36,70544,55152],{"class":52631},[36,70546,55155],{"class":46},[36,70548,70],{"class":50},[36,70550,64030],{"class":110},[36,70552,54817],{"class":46},[36,70554,70],{"class":50},[36,70556,70557],{"class":110},"\"salary\"",[36,70559,16249],{"class":46},[36,70561,70],{"class":50},[36,70563,70557],{"class":110},[36,70565,60458],{"class":50},[36,70567,70568,70571,70573,70575,70577,70580,70582,70584,70586],{"class":38,"line":674},[36,70569,70570],{"class":50},"    就业城市：\u003C",[36,70572,70475],{"class":52631},[36,70574,16249],{"class":46},[36,70576,70],{"class":50},[36,70578,70579],{"class":110},"\"city\"",[36,70581,54817],{"class":46},[36,70583,70],{"class":50},[36,70585,70579],{"class":110},[36,70587,52638],{"class":50},[36,70589,70590,70592,70594,70596,70598,70601,70604,70606],{"class":38,"line":679},[36,70591,56565],{"class":50},[36,70593,70497],{"class":52631},[36,70595,67982],{"class":46},[36,70597,70],{"class":50},[36,70599,70600],{"class":110},"\"北京\"",[36,70602,70603],{"class":50},">北京\u003C\u002F",[36,70605,70497],{"class":52631},[36,70607,52638],{"class":50},[36,70609,70610,70612,70614,70616,70618,70621,70624,70626],{"class":38,"line":692},[36,70611,56565],{"class":50},[36,70613,70497],{"class":52631},[36,70615,67982],{"class":46},[36,70617,70],{"class":50},[36,70619,70620],{"class":110},"\"上海\"",[36,70622,70623],{"class":50},">上海\u003C\u002F",[36,70625,70497],{"class":52631},[36,70627,52638],{"class":50},[36,70629,70630,70632,70634,70636,70638,70641,70644,70646],{"class":38,"line":705},[36,70631,56565],{"class":50},[36,70633,70497],{"class":52631},[36,70635,67982],{"class":46},[36,70637,70],{"class":50},[36,70639,70640],{"class":110},"\"广州\"",[36,70642,70643],{"class":50},">广州\u003C\u002F",[36,70645,70497],{"class":52631},[36,70647,52638],{"class":50},[36,70649,70650,70652,70654,70656,70658,70661,70664,70666],{"class":38,"line":710},[36,70651,56565],{"class":50},[36,70653,70497],{"class":52631},[36,70655,67982],{"class":46},[36,70657,70],{"class":50},[36,70659,70660],{"class":110},"\"深圳\"",[36,70662,70663],{"class":50},">深圳\u003C\u002F",[36,70665,70497],{"class":52631},[36,70667,52638],{"class":50},[36,70669,70670,70672,70674,70676,70678,70681,70684,70686],{"class":38,"line":722},[36,70671,56565],{"class":50},[36,70673,70497],{"class":52631},[36,70675,67982],{"class":46},[36,70677,70],{"class":50},[36,70679,70680],{"class":110},"\"曹县\"",[36,70682,70683],{"class":50},">曹县\u003C\u002F",[36,70685,70497],{"class":52631},[36,70687,52638],{"class":50},[36,70689,70690,70692,70694],{"class":38,"line":750},[36,70691,53107],{"class":50},[36,70693,70475],{"class":52631},[36,70695,52638],{"class":50},[36,70697,70698,70700,70702,70704,70706,70709,70712,70714],{"class":38,"line":755},[36,70699,52672],{"class":50},[36,70701,55218],{"class":52631},[36,70703,54817],{"class":46},[36,70705,70],{"class":50},[36,70707,70708],{"class":110},"\"add\"",[36,70710,70711],{"class":50},">录入\u003C\u002F",[36,70713,55218],{"class":52631},[36,70715,52638],{"class":50},[36,70717,70718,70720,70722],{"class":38,"line":777},[36,70719,53748],{"class":50},[36,70721,67956],{"class":52631},[36,70723,52638],{"class":50},[36,70725,70726],{"class":38,"line":802},[36,70727,58],{"emptyLinePlaceholder":57},[36,70729,70730,70732,70734,70737,70739],{"class":38,"line":807},[36,70731,53475],{"class":50},[36,70733,10],{"class":52631},[36,70735,70736],{"class":50},">就业榜\u003C\u002F",[36,70738,10],{"class":52631},[36,70740,52638],{"class":50},[36,70742,70743,70745,70747],{"class":38,"line":818},[36,70744,53475],{"class":50},[36,70746,1806],{"class":52631},[36,70748,52638],{"class":50},[36,70750,70751,70753,70755],{"class":38,"line":843},[36,70752,52672],{"class":50},[36,70754,1809],{"class":52631},[36,70756,52638],{"class":50},[36,70758,70759,70761,70763],{"class":38,"line":848},[36,70760,56565],{"class":50},[36,70762,1812],{"class":52631},[36,70764,52638],{"class":50},[36,70766,70767,70769,70771,70774,70776],{"class":38,"line":859},[36,70768,56633],{"class":50},[36,70770,1815],{"class":52631},[36,70772,70773],{"class":50},">序号\u003C\u002F",[36,70775,1815],{"class":52631},[36,70777,52638],{"class":50},[36,70779,70780,70782,70784,70787,70789],{"class":38,"line":864},[36,70781,56633],{"class":50},[36,70783,1815],{"class":52631},[36,70785,70786],{"class":50},">姓名\u003C\u002F",[36,70788,1815],{"class":52631},[36,70790,52638],{"class":50},[36,70792,70793,70795,70797,70800,70802],{"class":38,"line":873},[36,70794,56633],{"class":50},[36,70796,1815],{"class":52631},[36,70798,70799],{"class":50},">年龄\u003C\u002F",[36,70801,1815],{"class":52631},[36,70803,52638],{"class":50},[36,70805,70806,70808,70810,70813,70815],{"class":38,"line":9454},[36,70807,56633],{"class":50},[36,70809,1815],{"class":52631},[36,70811,70812],{"class":50},">性别\u003C\u002F",[36,70814,1815],{"class":52631},[36,70816,52638],{"class":50},[36,70818,70819,70821,70823,70826,70828],{"class":38,"line":9481},[36,70820,56633],{"class":50},[36,70822,1815],{"class":52631},[36,70824,70825],{"class":50},">薪资\u003C\u002F",[36,70827,1815],{"class":52631},[36,70829,52638],{"class":50},[36,70831,70832,70834,70836,70839,70841],{"class":38,"line":9486},[36,70833,56633],{"class":50},[36,70835,1815],{"class":52631},[36,70837,70838],{"class":50},">就业城市\u003C\u002F",[36,70840,1815],{"class":52631},[36,70842,52638],{"class":50},[36,70844,70845,70847,70849,70852,70854],{"class":38,"line":9492},[36,70846,56633],{"class":50},[36,70848,1815],{"class":52631},[36,70850,70851],{"class":50},">操作\u003C\u002F",[36,70853,1815],{"class":52631},[36,70855,52638],{"class":50},[36,70857,70858,70860,70862],{"class":38,"line":9504},[36,70859,56738],{"class":50},[36,70861,1812],{"class":52631},[36,70863,52638],{"class":50},[36,70865,70866,70868,70870],{"class":38,"line":9516},[36,70867,53107],{"class":50},[36,70869,1809],{"class":52631},[36,70871,52638],{"class":50},[36,70873,70874,70876,70878],{"class":38,"line":9528},[36,70875,52672],{"class":50},[36,70877,1852],{"class":52631},[36,70879,52638],{"class":50},[36,70881,70882],{"class":38,"line":11184},[36,70883,70884],{"class":124},"      \u003C!-- \n",[36,70886,70887],{"class":38,"line":11209},[36,70888,70889],{"class":124},"        \u003Ctr>\n",[36,70891,70892],{"class":38,"line":11232},[36,70893,70894],{"class":124},"          \u003Ctd>1001\u003C\u002Ftd>\n",[36,70896,70897],{"class":38,"line":11256},[36,70898,70899],{"class":124},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[36,70901,70902],{"class":38,"line":11261},[36,70903,70904],{"class":124},"          \u003Ctd>19\u003C\u002Ftd>\n",[36,70906,70907],{"class":38,"line":11266},[36,70908,70909],{"class":124},"          \u003Ctd>男\u003C\u002Ftd>\n",[36,70911,70912],{"class":38,"line":11271},[36,70913,70914],{"class":124},"          \u003Ctd>15000\u003C\u002Ftd>\n",[36,70916,70917],{"class":38,"line":11280},[36,70918,70919],{"class":124},"          \u003Ctd>上海\u003C\u002Ftd>\n",[36,70921,70922],{"class":38,"line":11285},[36,70923,70924],{"class":124},"          \u003Ctd>\n",[36,70926,70927],{"class":38,"line":11291},[36,70928,70929],{"class":124},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[36,70931,70932],{"class":38,"line":11312},[36,70933,70934],{"class":124},"          \u003C\u002Ftd>\n",[36,70936,70937],{"class":38,"line":11318},[36,70938,70939],{"class":124},"        \u003C\u002Ftr> \n",[36,70941,70942],{"class":38,"line":11332},[36,70943,70944],{"class":124},"        -->\n",[36,70946,70947,70949,70951],{"class":38,"line":11338},[36,70948,53107],{"class":50},[36,70950,1852],{"class":52631},[36,70952,52638],{"class":50},[36,70954,70955,70957,70959],{"class":38,"line":11365},[36,70956,53748],{"class":50},[36,70958,1806],{"class":52631},[36,70960,52638],{"class":50},[36,70962,70963,70965,70967],{"class":38,"line":11374},[36,70964,53475],{"class":50},[36,70966,53144],{"class":52631},[36,70968,52638],{"class":50},[36,70970,70971],{"class":38,"line":11380},[36,70972,61289],{"class":124},[36,70974,70975,70977,70980,70982,70984,70986,70988,70991],{"class":38,"line":11388},[36,70976,1498],{"class":42},[36,70978,70979],{"class":73}," uname",[36,70981,14893],{"class":42},[36,70983,55727],{"class":50},[36,70985,55730],{"class":46},[36,70987,222],{"class":50},[36,70989,70990],{"class":110},"'.uname'",[36,70992,1680],{"class":50},[36,70994,70995,70997,70999,71001,71003,71005,71007,71010],{"class":38,"line":11393},[36,70996,1498],{"class":42},[36,70998,17018],{"class":73},[36,71000,14893],{"class":42},[36,71002,55727],{"class":50},[36,71004,55730],{"class":46},[36,71006,222],{"class":50},[36,71008,71009],{"class":110},"'.age'",[36,71011,1680],{"class":50},[36,71013,71014,71016,71019,71021,71023,71025,71027,71030],{"class":38,"line":17933},[36,71015,1498],{"class":42},[36,71017,71018],{"class":73}," gender",[36,71020,14893],{"class":42},[36,71022,55727],{"class":50},[36,71024,55730],{"class":46},[36,71026,222],{"class":50},[36,71028,71029],{"class":110},"'.gender'",[36,71031,1680],{"class":50},[36,71033,71034,71036,71039,71041,71043,71045,71047,71050],{"class":38,"line":17939},[36,71035,1498],{"class":42},[36,71037,71038],{"class":73}," salary",[36,71040,14893],{"class":42},[36,71042,55727],{"class":50},[36,71044,55730],{"class":46},[36,71046,222],{"class":50},[36,71048,71049],{"class":110},"'.salary'",[36,71051,1680],{"class":50},[36,71053,71054,71056,71059,71061,71063,71065,71067,71070],{"class":38,"line":17962},[36,71055,1498],{"class":42},[36,71057,71058],{"class":73}," city",[36,71060,14893],{"class":42},[36,71062,55727],{"class":50},[36,71064,55730],{"class":46},[36,71066,222],{"class":50},[36,71068,71069],{"class":110},"'.city'",[36,71071,1680],{"class":50},[36,71073,71074,71076,71079,71081,71083,71085,71087,71090],{"class":38,"line":17968},[36,71075,1498],{"class":42},[36,71077,71078],{"class":73}," tbody",[36,71080,14893],{"class":42},[36,71082,55727],{"class":50},[36,71084,55730],{"class":46},[36,71086,222],{"class":50},[36,71088,71089],{"class":110},"'tbody'",[36,71091,1680],{"class":50},[36,71093,71094],{"class":38,"line":17991},[36,71095,58],{"emptyLinePlaceholder":57},[36,71097,71098],{"class":38,"line":18005},[36,71099,71100],{"class":124},"    \u002F\u002F 获取所有带有name属性的元素\n",[36,71102,71103,71105,71108,71110,71112,71114,71116,71119],{"class":38,"line":18025},[36,71104,1498],{"class":42},[36,71106,71107],{"class":73}," items",[36,71109,14893],{"class":42},[36,71111,55727],{"class":50},[36,71113,57012],{"class":46},[36,71115,222],{"class":50},[36,71117,71118],{"class":110},"'[name]'",[36,71120,1680],{"class":50},[36,71122,71123],{"class":38,"line":18031},[36,71124,71125],{"class":124},"    \u002F\u002F 声明一个空的数组\n",[36,71127,71128,71130,71132,71134],{"class":38,"line":18042},[36,71129,1498],{"class":42},[36,71131,59026],{"class":73},[36,71133,14893],{"class":42},[36,71135,53169],{"class":50},[36,71137,71138],{"class":38,"line":18065},[36,71139,71140],{"class":124},"    \u002F\u002F 1.录入模块\n",[36,71142,71143],{"class":38,"line":18087},[36,71144,71145],{"class":124},"    \u002F\u002F 1.1这是一个表单提交事件\n",[36,71147,71148,71150,71153,71155,71157,71159,71161,71164],{"class":38,"line":18092},[36,71149,1498],{"class":42},[36,71151,71152],{"class":73}," info",[36,71154,14893],{"class":42},[36,71156,55727],{"class":50},[36,71158,55730],{"class":46},[36,71160,222],{"class":50},[36,71162,71163],{"class":110},"'.info'",[36,71165,1680],{"class":50},[36,71167,71168,71171,71173,71175,71178,71180,71182,71184,71186],{"class":38,"line":18098},[36,71169,71170],{"class":50},"    info.",[36,71172,59144],{"class":46},[36,71174,222],{"class":50},[36,71176,71177],{"class":110},"'submit'",[36,71179,477],{"class":50},[36,71181,55780],{"class":42},[36,71183,3180],{"class":50},[36,71185,1744],{"class":473},[36,71187,485],{"class":50},[36,71189,71190],{"class":38,"line":18112},[36,71191,71192],{"class":124},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[36,71194,71195,71198,71201],{"class":38,"line":18125},[36,71196,71197],{"class":50},"      e.",[36,71199,71200],{"class":46},"preventDefault",[36,71202,3484],{"class":50},[36,71204,71205],{"class":38,"line":18130},[36,71206,61343],{"class":124},[36,71208,71209],{"class":38,"line":18144},[36,71210,58],{"emptyLinePlaceholder":57},[36,71212,71213],{"class":38,"line":18149},[36,71214,71215],{"class":124},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[36,71217,71218],{"class":38,"line":18155},[36,71219,71220],{"class":124},"      \u002F\u002F 先遍历循环\n",[36,71222,71223,71225,71227,71229,71231,71233,71235,71237,71239,71242,71244,71246,71248],{"class":38,"line":18160},[36,71224,53615],{"class":42},[36,71226,3180],{"class":50},[36,71228,53178],{"class":42},[36,71230,10906],{"class":50},[36,71232,70],{"class":42},[36,71234,242],{"class":73},[36,71236,10913],{"class":50},[36,71238,2577],{"class":42},[36,71240,71241],{"class":50}," items.",[36,71243,53299],{"class":73},[36,71245,4705],{"class":50},[36,71247,3798],{"class":42},[36,71249,485],{"class":50},[36,71251,71252,71254,71257,71259,71262],{"class":38,"line":18174},[36,71253,3999],{"class":42},[36,71255,71256],{"class":50}," (items[i].value ",[36,71258,55817],{"class":42},[36,71260,71261],{"class":110}," ''",[36,71263,485],{"class":50},[36,71265,71266,71269,71272,71274,71277],{"class":38,"line":18179},[36,71267,71268],{"class":42},"          return",[36,71270,71271],{"class":46}," alert",[36,71273,222],{"class":50},[36,71275,71276],{"class":110},"'输入内容不能为空'",[36,71278,1680],{"class":50},[36,71280,71281],{"class":38,"line":18184},[36,71282,4031],{"class":50},[36,71284,71285],{"class":38,"line":18198},[36,71286,53729],{"class":50},[36,71288,71289],{"class":38,"line":18210},[36,71290,58],{"emptyLinePlaceholder":57},[36,71292,71293],{"class":38,"line":18215},[36,71294,71295],{"class":124},"      \u002F\u002F 创建新的对象\n",[36,71297,71298,71300,71303,71305],{"class":38,"line":18228},[36,71299,59559],{"class":42},[36,71301,71302],{"class":73}," obj",[36,71304,14893],{"class":42},[36,71306,16901],{"class":50},[36,71308,71309,71312,71314,71316,71318],{"class":38,"line":18233},[36,71310,71311],{"class":50},"        stuID: arr.",[36,71313,53299],{"class":73},[36,71315,46897],{"class":42},[36,71317,26449],{"class":73},[36,71319,32797],{"class":50},[36,71321,71322],{"class":38,"line":18238},[36,71323,71324],{"class":50},"        uname: uname.value,\n",[36,71326,71327],{"class":38,"line":18243},[36,71328,71329],{"class":50},"        age: age.value,\n",[36,71331,71332],{"class":38,"line":18256},[36,71333,71334],{"class":50},"        gender: gender.value,\n",[36,71336,71337],{"class":38,"line":18261},[36,71338,71339],{"class":50},"        salary: salary.value,\n",[36,71341,71342],{"class":38,"line":33964},[36,71343,71344],{"class":50},"        city: city.value\n",[36,71346,71347],{"class":38,"line":33970},[36,71348,53729],{"class":50},[36,71350,71351],{"class":38,"line":33976},[36,71352,71353],{"class":124},"      \u002F\u002F console.log(obj);\n",[36,71355,71356],{"class":38,"line":33982},[36,71357,71358],{"class":124},"      \u002F\u002F 追加到数组里面\n",[36,71360,71361,71363,71365],{"class":38,"line":33988},[36,71362,59338],{"class":50},[36,71364,53215],{"class":46},[36,71366,71367],{"class":50},"(obj)\n",[36,71369,71370],{"class":38,"line":33999},[36,71371,71372],{"class":124},"      \u002F\u002F console.log(arr);\n",[36,71374,71375],{"class":38,"line":34005},[36,71376,71377],{"class":124},"      \u002F\u002F 清空表单  reset重置表单\n",[36,71379,71380,71383,71385,71388],{"class":38,"line":34025},[36,71381,71382],{"class":73},"      this",[36,71384,2225],{"class":50},[36,71386,71387],{"class":46},"reset",[36,71389,3484],{"class":50},[36,71391,71392],{"class":38,"line":34031},[36,71393,71394],{"class":124},"      \u002F\u002F 调用渲染函数\n",[36,71396,71397,71400],{"class":38,"line":34042},[36,71398,71399],{"class":46},"      render",[36,71401,3484],{"class":50},[36,71403,71404],{"class":38,"line":34048},[36,71405,34792],{"class":50},[36,71407,71408],{"class":38,"line":34054},[36,71409,71410],{"class":124},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[36,71412,71413,71416,71419],{"class":38,"line":34060},[36,71414,71415],{"class":42},"    function",[36,71417,71418],{"class":46}," render",[36,71420,51],{"class":50},[36,71422,71423],{"class":38,"line":34066},[36,71424,71425],{"class":124},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[36,71427,71428,71431,71433],{"class":38,"line":34072},[36,71429,71430],{"class":50},"      tbody.innerHTML ",[36,71432,70],{"class":42},[36,71434,71435],{"class":110}," ''\n",[36,71437,71438],{"class":38,"line":34078},[36,71439,71440],{"class":124},"      \u002F\u002F 遍历数组\n",[36,71442,71443,71445,71447,71449,71451,71453,71455,71457,71459,71461,71463,71465,71467],{"class":38,"line":34084},[36,71444,53615],{"class":42},[36,71446,3180],{"class":50},[36,71448,53178],{"class":42},[36,71450,10906],{"class":50},[36,71452,70],{"class":42},[36,71454,242],{"class":73},[36,71456,10913],{"class":50},[36,71458,2577],{"class":42},[36,71460,53296],{"class":50},[36,71462,53299],{"class":73},[36,71464,4705],{"class":50},[36,71466,3798],{"class":42},[36,71468,485],{"class":50},[36,71470,71471,71473,71476,71478,71480,71483,71485,71488],{"class":38,"line":34104},[36,71472,62601],{"class":42},[36,71474,71475],{"class":73}," tr",[36,71477,14893],{"class":42},[36,71479,55727],{"class":50},[36,71481,71482],{"class":46},"createElement",[36,71484,222],{"class":50},[36,71486,71487],{"class":110},"'tr'",[36,71489,1680],{"class":50},[36,71491,71492,71495,71497],{"class":38,"line":34110},[36,71493,71494],{"class":50},"        tr.innerHTML ",[36,71496,70],{"class":42},[36,71498,71499],{"class":110}," `\n",[36,71501,71502,71505,71507,71509,71511,71514,71517],{"class":38,"line":34126},[36,71503,71504],{"class":110},"        \u003Ctd>${",[36,71506,5371],{"class":50},[36,71508,2557],{"class":110},[36,71510,2108],{"class":50},[36,71512,71513],{"class":110},"].",[36,71515,71516],{"class":50},"stuID",[36,71518,71519],{"class":110},"}\u003C\u002Ftd>\n",[36,71521,71522,71525,71527,71529,71531,71533,71536],{"class":38,"line":34132},[36,71523,71524],{"class":110},"          \u003Ctd>${",[36,71526,5371],{"class":50},[36,71528,2557],{"class":110},[36,71530,2108],{"class":50},[36,71532,71513],{"class":110},[36,71534,71535],{"class":50},"uname",[36,71537,71519],{"class":110},[36,71539,71540,71542,71544,71546,71548,71550,71553],{"class":38,"line":34146},[36,71541,71524],{"class":110},[36,71543,5371],{"class":50},[36,71545,2557],{"class":110},[36,71547,2108],{"class":50},[36,71549,71513],{"class":110},[36,71551,71552],{"class":50},"age",[36,71554,71519],{"class":110},[36,71556,71557,71559,71561,71563,71565,71567,71570],{"class":38,"line":34152},[36,71558,71524],{"class":110},[36,71560,5371],{"class":50},[36,71562,2557],{"class":110},[36,71564,2108],{"class":50},[36,71566,71513],{"class":110},[36,71568,71569],{"class":50},"gender",[36,71571,71519],{"class":110},[36,71573,71574,71576,71578,71580,71582,71584,71587],{"class":38,"line":34167},[36,71575,71524],{"class":110},[36,71577,5371],{"class":50},[36,71579,2557],{"class":110},[36,71581,2108],{"class":50},[36,71583,71513],{"class":110},[36,71585,71586],{"class":50},"salary",[36,71588,71519],{"class":110},[36,71590,71591,71593,71595,71597,71599,71601,71604],{"class":38,"line":34173},[36,71592,71524],{"class":110},[36,71594,5371],{"class":50},[36,71596,2557],{"class":110},[36,71598,2108],{"class":50},[36,71600,71513],{"class":110},[36,71602,71603],{"class":50},"city",[36,71605,71519],{"class":110},[36,71607,71608],{"class":38,"line":34182},[36,71609,70924],{"class":110},[36,71611,71612,71615,71617],{"class":38,"line":34188},[36,71613,71614],{"class":110},"            \u003Ca href=\"javascript:\" data-id=${",[36,71616,2108],{"class":50},[36,71618,71619],{"class":110},"}>删除\u003C\u002Fa>\n",[36,71621,71622],{"class":38,"line":34197},[36,71623,71624],{"class":110},"          \u003C\u002Ftd> \n",[36,71626,71627],{"class":38,"line":34203},[36,71628,71629],{"class":110},"          `\n",[36,71631,71632],{"class":38,"line":34209},[36,71633,71634],{"class":124},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[36,71636,71637,71640,71643],{"class":38,"line":34218},[36,71638,71639],{"class":50},"        tbody.",[36,71641,71642],{"class":46},"appendChild",[36,71644,71645],{"class":50},"(tr)\n",[36,71647,71648],{"class":38,"line":34224},[36,71649,53729],{"class":50},[36,71651,71652],{"class":38,"line":34235},[36,71653,3693],{"class":50},[36,71655,71656],{"class":38,"line":34241},[36,71657,58],{"emptyLinePlaceholder":57},[36,71659,71660],{"class":38,"line":34260},[36,71661,71662],{"class":124},"    \u002F\u002F 3.删除委托\n",[36,71664,71665],{"class":38,"line":34266},[36,71666,71667],{"class":124},"    \u002F\u002F 3.1 事件委托 tbody\n",[36,71669,71670,71673,71675,71677,71679,71681,71683,71685,71687],{"class":38,"line":34277},[36,71671,71672],{"class":50},"    tbody.",[36,71674,59144],{"class":46},[36,71676,222],{"class":50},[36,71678,59149],{"class":110},[36,71680,477],{"class":50},[36,71682,55780],{"class":42},[36,71684,3180],{"class":50},[36,71686,1744],{"class":473},[36,71688,485],{"class":50},[36,71690,71691,71693,71695,71697,71699],{"class":38,"line":34283},[36,71692,55811],{"class":42},[36,71694,68365],{"class":50},[36,71696,55817],{"class":42},[36,71698,69587],{"class":110},[36,71700,485],{"class":50},[36,71702,71703],{"class":38,"line":34303},[36,71704,71705],{"class":124},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[36,71707,71708],{"class":38,"line":34319},[36,71709,71710],{"class":124},"        \u002F\u002F console.log(e.target.dataset.id);\n",[36,71712,71713],{"class":38,"line":34325},[36,71714,71715],{"class":124},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[36,71717,71718,71721,71723,71726,71728],{"class":38,"line":34339},[36,71719,71720],{"class":50},"        arr.",[36,71722,59341],{"class":46},[36,71724,71725],{"class":50},"(e.target.dataset.id, ",[36,71727,1885],{"class":73},[36,71729,1680],{"class":50},[36,71731,71732],{"class":38,"line":34345},[36,71733,71734],{"class":124},"        \u002F\u002F 重新渲染一次\n",[36,71736,71737,71740],{"class":38,"line":34351},[36,71738,71739],{"class":46},"        render",[36,71741,3484],{"class":50},[36,71743,71744],{"class":38,"line":34362},[36,71745,53729],{"class":50},[36,71747,71748],{"class":38,"line":34368},[36,71749,34792],{"class":50},[36,71751,71752,71754,71756],{"class":38,"line":34374},[36,71753,53748],{"class":50},[36,71755,53144],{"class":52631},[36,71757,52638],{"class":50},[36,71759,71760],{"class":38,"line":34384},[36,71761,58],{"emptyLinePlaceholder":57},[36,71763,71764,71766,71768],{"class":38,"line":34390},[36,71765,53116],{"class":50},[36,71767,53131],{"class":52631},[36,71769,52638],{"class":50},[36,71771,71772],{"class":38,"line":34401},[36,71773,58],{"emptyLinePlaceholder":57},[36,71775,71776,71778,71780],{"class":38,"line":34407},[36,71777,53116],{"class":50},[36,71779,51966],{"class":52631},[36,71781,52638],{"class":50},[19,71783,71784],{},"样式：",[26,71786,71790],{"className":71787,"code":71788,"language":71789,"meta":31,"style":31},"language-yaml shiki shiki-themes github-light github-dark","* {\n  margin: 0;\n  padding: 0;\n}\n\na {\n  text-decoration: none;\n  color:#721c24;\n}\nh1 {\n  text-align: center;\n  color:#333;\n  margin: 20px 0;\n \n}\ntable {\n  margin:0 auto;\n  width: 800px;\n  border-collapse: collapse;\n  color:#004085;\n}\nth {\n  padding: 10px;\n  background: #cfe5ff;\n  \n  font-size: 20px;\n  font-weight: 400;\n}\ntd,th {\n  border:1px solid #b8daff;\n}\ntd {\n  padding:10px;\n  color:#666;\n  text-align: center;\n  font-size: 16px;\n}\ntbody tr {\n  background: #fff;\n}\ntbody tr:hover {\n  background: #e1ecf8;\n}\n.info {\n  width: 900px;\n  margin: 50px auto;\n  text-align: center;\n}\n.info  input, .info select {\n  width: 80px;\n  height: 27px;\n  outline: none;\n  border-radius: 5px;\n  border:1px solid #b8daff;\n  padding-left: 5px;\n  box-sizing: border-box;\n  margin-right: 15px;\n}\n.info button {\n  width: 60px;\n  height: 27px;\n  background-color: #004085;\n  outline: none;\n  border: 0;\n  color: #fff;\n  cursor: pointer;\n  border-radius: 5px;\n}\n.info .age {\n  width: 50px;\n}\n","yaml",[33,71791,71792,71797,71807,71816,71820,71824,71829,71839,71844,71848,71853,71863,71868,71877,71881,71885,71890,71895,71905,71915,71920,71924,71929,71938,71948,71953,71963,71973,71977,71982,71990,71994,71999,72004,72009,72017,72026,72030,72035,72044,72048,72053,72062,72066,72071,72080,72089,72097,72101,72106,72115,72125,72134,72144,72150,72159,72169,72179,72183,72188,72197,72205,72215,72223,72232,72241,72251,72259,72263,72268,72277],{"__ignoreMap":31},[36,71793,71794],{"class":38,"line":39},[36,71795,71796],{"class":50},"* {\n",[36,71798,71799,71802,71804],{"class":38,"line":54},[36,71800,71801],{"class":52631},"  margin",[36,71803,52768],{"class":50},[36,71805,71806],{"class":110},"0;\n",[36,71808,71809,71812,71814],{"class":38,"line":61},[36,71810,71811],{"class":110},"  padding",[36,71813,52768],{"class":50},[36,71815,71806],{"class":110},[36,71817,71818],{"class":38,"line":80},[36,71819,250],{"class":50},[36,71821,71822],{"class":38,"line":96},[36,71823,58],{"emptyLinePlaceholder":57},[36,71825,71826],{"class":38,"line":101},[36,71827,71828],{"class":110},"a {\n",[36,71830,71831,71834,71836],{"class":38,"line":128},[36,71832,71833],{"class":52631},"  text-decoration",[36,71835,52768],{"class":50},[36,71837,71838],{"class":110},"none;\n",[36,71840,71841],{"class":38,"line":149},[36,71842,71843],{"class":110},"  color:#721c24;\n",[36,71845,71846],{"class":38,"line":154},[36,71847,250],{"class":50},[36,71849,71850],{"class":38,"line":167},[36,71851,71852],{"class":110},"h1 {\n",[36,71854,71855,71858,71860],{"class":38,"line":172},[36,71856,71857],{"class":52631},"  text-align",[36,71859,52768],{"class":50},[36,71861,71862],{"class":110},"center;\n",[36,71864,71865],{"class":38,"line":192},[36,71866,71867],{"class":110},"  color:#333;\n",[36,71869,71870,71872,71874],{"class":38,"line":211},[36,71871,71801],{"class":52631},[36,71873,52768],{"class":50},[36,71875,71876],{"class":110},"20px 0;\n",[36,71878,71879],{"class":38,"line":216},[36,71880,4169],{"class":50},[36,71882,71883],{"class":38,"line":231},[36,71884,250],{"class":50},[36,71886,71887],{"class":38,"line":236},[36,71888,71889],{"class":110},"table {\n",[36,71891,71892],{"class":38,"line":247},[36,71893,71894],{"class":110},"  margin:0 auto;\n",[36,71896,71897,71900,71902],{"class":38,"line":637},[36,71898,71899],{"class":52631},"  width",[36,71901,52768],{"class":50},[36,71903,71904],{"class":110},"800px;\n",[36,71906,71907,71910,71912],{"class":38,"line":646},[36,71908,71909],{"class":52631},"  border-collapse",[36,71911,52768],{"class":50},[36,71913,71914],{"class":110},"collapse;\n",[36,71916,71917],{"class":38,"line":655},[36,71918,71919],{"class":110},"  color:#004085;\n",[36,71921,71922],{"class":38,"line":660},[36,71923,250],{"class":50},[36,71925,71926],{"class":38,"line":665},[36,71927,71928],{"class":110},"th {\n",[36,71930,71931,71933,71935],{"class":38,"line":674},[36,71932,71811],{"class":52631},[36,71934,52768],{"class":50},[36,71936,71937],{"class":110},"10px;\n",[36,71939,71940,71943,71945],{"class":38,"line":679},[36,71941,71942],{"class":52631},"  background",[36,71944,52768],{"class":50},[36,71946,71947],{"class":124},"#cfe5ff;\n",[36,71949,71950],{"class":38,"line":692},[36,71951,71952],{"class":50},"  \n",[36,71954,71955,71958,71960],{"class":38,"line":705},[36,71956,71957],{"class":52631},"  font-size",[36,71959,52768],{"class":50},[36,71961,71962],{"class":110},"20px;\n",[36,71964,71965,71968,71970],{"class":38,"line":710},[36,71966,71967],{"class":52631},"  font-weight",[36,71969,52768],{"class":50},[36,71971,71972],{"class":110},"400;\n",[36,71974,71975],{"class":38,"line":722},[36,71976,250],{"class":50},[36,71978,71979],{"class":38,"line":750},[36,71980,71981],{"class":110},"td,th {\n",[36,71983,71984,71987],{"class":38,"line":755},[36,71985,71986],{"class":110},"  border:1px solid",[36,71988,71989],{"class":124}," #b8daff;\n",[36,71991,71992],{"class":38,"line":777},[36,71993,250],{"class":50},[36,71995,71996],{"class":38,"line":802},[36,71997,71998],{"class":110},"td {\n",[36,72000,72001],{"class":38,"line":807},[36,72002,72003],{"class":110},"  padding:10px;\n",[36,72005,72006],{"class":38,"line":818},[36,72007,72008],{"class":110},"  color:#666;\n",[36,72010,72011,72013,72015],{"class":38,"line":843},[36,72012,71857],{"class":52631},[36,72014,52768],{"class":50},[36,72016,71862],{"class":110},[36,72018,72019,72021,72023],{"class":38,"line":848},[36,72020,71957],{"class":52631},[36,72022,52768],{"class":50},[36,72024,72025],{"class":110},"16px;\n",[36,72027,72028],{"class":38,"line":859},[36,72029,250],{"class":50},[36,72031,72032],{"class":38,"line":864},[36,72033,72034],{"class":110},"tbody tr {\n",[36,72036,72037,72039,72041],{"class":38,"line":873},[36,72038,71942],{"class":52631},[36,72040,52768],{"class":50},[36,72042,72043],{"class":124},"#fff;\n",[36,72045,72046],{"class":38,"line":9454},[36,72047,250],{"class":50},[36,72049,72050],{"class":38,"line":9481},[36,72051,72052],{"class":110},"tbody tr:hover {\n",[36,72054,72055,72057,72059],{"class":38,"line":9486},[36,72056,71942],{"class":52631},[36,72058,52768],{"class":50},[36,72060,72061],{"class":124},"#e1ecf8;\n",[36,72063,72064],{"class":38,"line":9492},[36,72065,250],{"class":50},[36,72067,72068],{"class":38,"line":9504},[36,72069,72070],{"class":110},".info {\n",[36,72072,72073,72075,72077],{"class":38,"line":9516},[36,72074,71899],{"class":52631},[36,72076,52768],{"class":50},[36,72078,72079],{"class":110},"900px;\n",[36,72081,72082,72084,72086],{"class":38,"line":9528},[36,72083,71801],{"class":52631},[36,72085,52768],{"class":50},[36,72087,72088],{"class":110},"50px auto;\n",[36,72090,72091,72093,72095],{"class":38,"line":11184},[36,72092,71857],{"class":52631},[36,72094,52768],{"class":50},[36,72096,71862],{"class":110},[36,72098,72099],{"class":38,"line":11209},[36,72100,250],{"class":50},[36,72102,72103],{"class":38,"line":11232},[36,72104,72105],{"class":110},".info  input, .info select {\n",[36,72107,72108,72110,72112],{"class":38,"line":11256},[36,72109,71899],{"class":52631},[36,72111,52768],{"class":50},[36,72113,72114],{"class":110},"80px;\n",[36,72116,72117,72120,72122],{"class":38,"line":11261},[36,72118,72119],{"class":52631},"  height",[36,72121,52768],{"class":50},[36,72123,72124],{"class":110},"27px;\n",[36,72126,72127,72130,72132],{"class":38,"line":11266},[36,72128,72129],{"class":52631},"  outline",[36,72131,52768],{"class":50},[36,72133,71838],{"class":110},[36,72135,72136,72139,72141],{"class":38,"line":11271},[36,72137,72138],{"class":52631},"  border-radius",[36,72140,52768],{"class":50},[36,72142,72143],{"class":110},"5px;\n",[36,72145,72146,72148],{"class":38,"line":11280},[36,72147,71986],{"class":110},[36,72149,71989],{"class":124},[36,72151,72152,72155,72157],{"class":38,"line":11285},[36,72153,72154],{"class":52631},"  padding-left",[36,72156,52768],{"class":50},[36,72158,72143],{"class":110},[36,72160,72161,72164,72166],{"class":38,"line":11291},[36,72162,72163],{"class":52631},"  box-sizing",[36,72165,52768],{"class":50},[36,72167,72168],{"class":110},"border-box;\n",[36,72170,72171,72174,72176],{"class":38,"line":11312},[36,72172,72173],{"class":52631},"  margin-right",[36,72175,52768],{"class":50},[36,72177,72178],{"class":110},"15px;\n",[36,72180,72181],{"class":38,"line":11318},[36,72182,250],{"class":50},[36,72184,72185],{"class":38,"line":11332},[36,72186,72187],{"class":110},".info button {\n",[36,72189,72190,72192,72194],{"class":38,"line":11338},[36,72191,71899],{"class":52631},[36,72193,52768],{"class":50},[36,72195,72196],{"class":110},"60px;\n",[36,72198,72199,72201,72203],{"class":38,"line":11365},[36,72200,72119],{"class":52631},[36,72202,52768],{"class":50},[36,72204,72124],{"class":110},[36,72206,72207,72210,72212],{"class":38,"line":11374},[36,72208,72209],{"class":52631},"  background-color",[36,72211,52768],{"class":50},[36,72213,72214],{"class":124},"#004085;\n",[36,72216,72217,72219,72221],{"class":38,"line":11380},[36,72218,72129],{"class":52631},[36,72220,52768],{"class":50},[36,72222,71838],{"class":110},[36,72224,72225,72228,72230],{"class":38,"line":11388},[36,72226,72227],{"class":52631},"  border",[36,72229,52768],{"class":50},[36,72231,71806],{"class":110},[36,72233,72234,72237,72239],{"class":38,"line":11393},[36,72235,72236],{"class":52631},"  color",[36,72238,52768],{"class":50},[36,72240,72043],{"class":124},[36,72242,72243,72246,72248],{"class":38,"line":17933},[36,72244,72245],{"class":52631},"  cursor",[36,72247,52768],{"class":50},[36,72249,72250],{"class":110},"pointer;\n",[36,72252,72253,72255,72257],{"class":38,"line":17939},[36,72254,72138],{"class":52631},[36,72256,52768],{"class":50},[36,72258,72143],{"class":110},[36,72260,72261],{"class":38,"line":17962},[36,72262,250],{"class":50},[36,72264,72265],{"class":38,"line":17968},[36,72266,72267],{"class":110},".info .age {\n",[36,72269,72270,72272,72274],{"class":38,"line":17991},[36,72271,71899],{"class":52631},[36,72273,52768],{"class":50},[36,72275,72276],{"class":110},"50px;\n",[36,72278,72279],{"class":38,"line":18005},[36,72280,250],{"class":50},[19,72282,72283],{},"思路：",[19,72285,72286],{},[2992,72287],{"alt":31,"src":72288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72290,72291],{},[2992,72292],{"alt":31,"src":72293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72295,72296],{},[2992,72297],{"alt":31,"src":72298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[1645,72300,72302],{"id":72301},"_3315-重绘回流","3.3.15 重绘回流",[19,72304,72305],{},[2992,72306],{"alt":31,"src":72307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72309,72310],{},[2992,72311],{"alt":31,"src":72312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72314,72315],{},[2992,72316],{"alt":31,"src":72317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72319,72321],{"id":72320},"_34-bom","3.4 BOM",[19,72323,72324],{},[2992,72325],{"alt":31,"src":72326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72328,72329],{},"平时写的document省略了window而已，实际上是window.document",[19,72331,72332],{},"函数也是这样，调用的时候实际为window.fn()",[19,72334,72335],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72337,72338],{},"window大部分情况下可以省略",[1645,72340,72342],{"id":72341},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72344,72345],{},"只执行一次",[19,72347,72348],{},[2992,72349],{"alt":31,"src":72350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72352,72353],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72355,72356],{},[2992,72357],{"alt":31,"src":72358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[1645,72360,72362],{"id":72361},"_342-js执行机制","3.4.2 JS执行机制",[19,72364,72365],{},[2992,72366],{"alt":31,"src":72367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72369,72370],{},"两个的结果都是1111 3333 2222",[19,72372,72373],{},[2992,72374],{"alt":31,"src":72375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72377,72378],{},[2992,72379],{"alt":31,"src":72380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72382,72383],{},[2992,72384],{"alt":31,"src":72385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72387,72388],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72390,72391],{},"工作流程：",[19,72393,72394],{},[2992,72395],{"alt":31,"src":72396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72398,72399],{},[2992,72400],{"alt":31,"src":72401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72403,72404],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72406,72407],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[1645,72409,72411],{"id":72410},"_343-location对象","3.4.3 location对象",[19,72413,72414],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72416,72417],{},[2992,72418],{"alt":31,"src":72419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72421,72422],{},"href可以跳转页面",[256,72424,72425],{},[259,72426,72427],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72429,72430],{},"search得到提交信息之后网站后边的地址",[19,72432,72433],{},[2992,72434],{"alt":31,"src":72435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72437,72438],{},[2992,72439],{"alt":31,"src":72440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[256,72442,72443],{"start":54},[259,72444,72445],{},"hash:这个获取单页面应用#后边的地址",[19,72447,72448],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72450,72451],{},[2992,72452],{"alt":31,"src":72453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,72455,72457],{"className":54398,"code":72456,"language":54400,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[33,72458,72459,72479,72499],{"__ignoreMap":31},[36,72460,72461,72463,72465,72467,72469,72472,72475,72477],{"class":38,"line":39},[36,72462,53475],{"class":50},[36,72464,1906],{"class":52631},[36,72466,62388],{"class":46},[36,72468,70],{"class":50},[36,72470,72471],{"class":110},"\"#\u002Fmy\"",[36,72473,72474],{"class":50},">我的\u003C\u002F",[36,72476,1906],{"class":52631},[36,72478,52638],{"class":50},[36,72480,72481,72483,72485,72487,72489,72492,72495,72497],{"class":38,"line":54},[36,72482,53475],{"class":50},[36,72484,1906],{"class":52631},[36,72486,62388],{"class":46},[36,72488,70],{"class":50},[36,72490,72491],{"class":110},"\"#\u002Ffriend\"",[36,72493,72494],{"class":50},">关注\u003C\u002F",[36,72496,1906],{"class":52631},[36,72498,52638],{"class":50},[36,72500,72501,72503,72505,72507,72509,72512,72515,72517],{"class":38,"line":61},[36,72502,53475],{"class":50},[36,72504,1906],{"class":52631},[36,72506,62388],{"class":46},[36,72508,70],{"class":50},[36,72510,72511],{"class":110},"\"#\u002Fdownload\"",[36,72513,72514],{"class":50},">下载\u003C\u002F",[36,72516,1906],{"class":52631},[36,72518,52638],{"class":50},[19,72520,72521],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[256,72523,72524],{"start":61},[259,72525,72526,72527,72529,72530,72532],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55047,72528],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55047,72531],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[1645,72534,72536],{"id":72535},"_345-navigator对象","3.4.5 navigator对象",[19,72538,72539],{},[2992,72540],{"alt":31,"src":72541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,72543,72547],{"className":72544,"code":72545,"language":72546,"meta":31,"style":31},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F 检测 userAgent（浏览器信息） \n!(function () { \nconst userAgent = navigator.userAgent \n\u002F\u002F 验证是否为Android或iPhone \nconst android = userAgent.match(\u002F(Android);?[\\s\\\u002F]+([\\d.]+)?\u002F) \nconst iphone = userAgent.match(\u002F(iPhone\\sOS)\\s([\\d_]+)\u002F) \n\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \nif (android || iphone) { \nlocation.href = 'http:\u002F\u002Fm.itcast.cn' \n} \n})()\n","javascript",[33,72548,72549,72554,72565,72577,72582,72633,72674,72679,72692,72704,72709],{"__ignoreMap":31},[36,72550,72551],{"class":38,"line":39},[36,72552,72553],{"class":124},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[36,72555,72556,72558,72560,72562],{"class":38,"line":54},[36,72557,1894],{"class":42},[36,72559,222],{"class":50},[36,72561,55780],{"class":42},[36,72563,72564],{"class":50}," () { \n",[36,72566,72567,72569,72572,72574],{"class":38,"line":61},[36,72568,1437],{"class":42},[36,72570,72571],{"class":73}," userAgent",[36,72573,14893],{"class":42},[36,72575,72576],{"class":50}," navigator.userAgent \n",[36,72578,72579],{"class":38,"line":80},[36,72580,72581],{"class":124},"\u002F\u002F 验证是否为Android或iPhone \n",[36,72583,72584,72586,72589,72591,72594,72597,72599,72601,72604,72606,72609,72613,72615,72617,72619,72622,72624,72626,72628,72630],{"class":38,"line":96},[36,72585,1437],{"class":42},[36,72587,72588],{"class":73}," android",[36,72590,14893],{"class":42},[36,72592,72593],{"class":50}," userAgent.",[36,72595,72596],{"class":46},"match",[36,72598,222],{"class":50},[36,72600,2251],{"class":110},[36,72602,72603],{"class":49308},"(Android);",[36,72605,2653],{"class":42},[36,72607,72608],{"class":73},"[\\s",[36,72610,72612],{"class":72611},"snhLl","\\\u002F",[36,72614,2607],{"class":73},[36,72616,2148],{"class":42},[36,72618,222],{"class":49308},[36,72620,72621],{"class":73},"[\\d.]",[36,72623,2148],{"class":42},[36,72625,2096],{"class":49308},[36,72627,2653],{"class":42},[36,72629,2251],{"class":110},[36,72631,72632],{"class":50},") \n",[36,72634,72635,72637,72640,72642,72644,72646,72648,72650,72653,72656,72659,72661,72663,72666,72668,72670,72672],{"class":38,"line":101},[36,72636,1437],{"class":42},[36,72638,72639],{"class":73}," iphone",[36,72641,14893],{"class":42},[36,72643,72593],{"class":50},[36,72645,72596],{"class":46},[36,72647,222],{"class":50},[36,72649,2251],{"class":110},[36,72651,72652],{"class":49308},"(iPhone",[36,72654,72655],{"class":73},"\\s",[36,72657,72658],{"class":49308},"OS)",[36,72660,72655],{"class":73},[36,72662,222],{"class":49308},[36,72664,72665],{"class":73},"[\\d_]",[36,72667,2148],{"class":42},[36,72669,2096],{"class":49308},[36,72671,2251],{"class":110},[36,72673,72632],{"class":50},[36,72675,72676],{"class":38,"line":128},[36,72677,72678],{"class":124},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[36,72680,72681,72683,72686,72689],{"class":38,"line":149},[36,72682,3061],{"class":42},[36,72684,72685],{"class":50}," (android ",[36,72687,72688],{"class":42},"||",[36,72690,72691],{"class":50}," iphone) { \n",[36,72693,72694,72697,72699,72702],{"class":38,"line":154},[36,72695,72696],{"class":50},"location.href ",[36,72698,70],{"class":42},[36,72700,72701],{"class":110}," 'http:\u002F\u002Fm.itcast.cn'",[36,72703,4169],{"class":50},[36,72705,72706],{"class":38,"line":167},[36,72707,72708],{"class":50},"} \n",[36,72710,72711],{"class":38,"line":172},[36,72712,72713],{"class":50},"})()\n",[1645,72715,72717],{"id":72716},"_346-histroy对象","3.4.6 histroy对象",[19,72719,72720],{},[2992,72721],{"alt":31,"src":72722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72724,72725],{},"浏览器地址的前进与后退!!!",[19,72727,72728],{},"history.back() 等效于 history.go(-1)",[19,72730,72731],{},"history.forward() 等效于 history.go(1)",[14,72733,72735],{"id":72734},"_35-本地存储","3.5 本地存储",[256,72737,72738,72741,72744],{},[259,72739,72740],{},"数据存储在用户浏览器中",[259,72742,72743],{},"设置、读取方便、甚至页面刷新不丢失数据",[259,72745,72746],{},"容量较大，sessionStorage和localStorage约 5M 左右",[1645,72748,72750],{"id":72749},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72752,72753],{},"只能存储字符串",[19,72755,72756],{},[2992,72757],{"alt":31,"src":72758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72760,72761],{},[2992,72762],{"alt":31,"src":72763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72765,72766],{},"键值对要加引号,不然就会当变量来看了",[19,72768,72769],{},"localStorage.setItem('uname', 'pink')",[19,72771,72772],{},"刷新之后信息不再丢失",[19,72774,72775],{},"操作key,value会跟着变",[19,72777,72778],{},"删除只删除键就可以,即名字",[19,72780,72769],{},[19,72782,72783],{},"改:",[19,72785,72786],{},"localStorage.setItem('uname','red')",[19,72788,72789],{},"有这个键就是改,没有这个键就是改",[19,72791,72792],{},[2992,72793],{"alt":31,"src":72794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72796,72797],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72799,72800],{},[2992,72801],{"alt":31,"src":72802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72804,72805],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[1645,72807,72809],{"id":72808},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72811,72812],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72814,72815],{},"特性:",[256,72817,72818,72821,72824,72827],{},[259,72819,72820],{},"生命周期为关闭浏览器窗口",[259,72822,72823],{},"在同一个窗口(页面)下数据可以共享",[259,72825,72826],{},"以键值对的形式存储使用",[259,72828,72829],{},"用法跟localStorage 基本相同",[1645,72831,72833],{"id":72832},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72835,72836],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,72838,72840],{"className":54398,"code":72839,"language":54400,"meta":31,"style":31},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n    localStorage.setItem('obj', obj)\n  \u003C\u002Fscript>\n",[33,72841,72842,72850,72855,72860,72865,72870,72874,72879,72884],{"__ignoreMap":31},[36,72843,72844,72846,72848],{"class":38,"line":39},[36,72845,2577],{"class":50},[36,72847,53144],{"class":52631},[36,72849,52638],{"class":50},[36,72851,72852],{"class":38,"line":54},[36,72853,72854],{"class":50},"    const obj = {\n",[36,72856,72857],{"class":38,"line":61},[36,72858,72859],{"class":50},"      uname: 'pink老师',\n",[36,72861,72862],{"class":38,"line":80},[36,72863,72864],{"class":50},"      age: 18,\n",[36,72866,72867],{"class":38,"line":96},[36,72868,72869],{"class":50},"      gender: '女'\n",[36,72871,72872],{"class":38,"line":101},[36,72873,3693],{"class":50},[36,72875,72876],{"class":38,"line":128},[36,72877,72878],{"class":50},"    \u002F\u002F 存储复杂数据类型\n",[36,72880,72881],{"class":38,"line":149},[36,72882,72883],{"class":50},"    localStorage.setItem('obj', obj)\n",[36,72885,72886,72888,72890],{"class":38,"line":154},[36,72887,53748],{"class":50},[36,72889,53144],{"class":52631},[36,72891,52638],{"class":50},[19,72893,72894],{},[2992,72895],{"alt":31,"src":72896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72898,72899],{},"如果获取一下数据:",[19,72901,72902],{},"log(localStorage.getItem('obj'))",[19,72904,72905],{},[2992,72906],{"alt":31,"src":72907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72909,72910],{},"发现直接存对象是使用不了的!!!",[23327,72912,72914],{"id":72913},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72916,72917],{},[2992,72918],{"alt":31,"src":72919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,72921,72923],{"className":51964,"code":72922,"language":51966,"meta":31,"style":31},"\u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 存储复杂数据类型\n  localStorage.setItem('obj', JSON.stringify(obj))\n  console.log(localStorage.getItem('obj'))\n  \u003C\u002Fscript>\n  \n  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n  类型是字符串的\n  JSON对象 属性和值有引号,而且引号统一是双引号\n",[33,72924,72925,72933,72943,72953,72962,72970,72974,72978,73004,73023,73031,73035,73040,73045],{"__ignoreMap":31},[36,72926,72927,72929,72931],{"class":38,"line":39},[36,72928,2577],{"class":50},[36,72930,53144],{"class":52631},[36,72932,52638],{"class":50},[36,72934,72935,72937,72939,72941],{"class":38,"line":54},[36,72936,1498],{"class":42},[36,72938,71302],{"class":73},[36,72940,14893],{"class":42},[36,72942,16901],{"class":50},[36,72944,72945,72948,72951],{"class":38,"line":61},[36,72946,72947],{"class":50},"      uname: ",[36,72949,72950],{"class":110},"'pink老师'",[36,72952,32797],{"class":50},[36,72954,72955,72958,72960],{"class":38,"line":80},[36,72956,72957],{"class":50},"      age: ",[36,72959,2317],{"class":73},[36,72961,32797],{"class":50},[36,72963,72964,72967],{"class":38,"line":96},[36,72965,72966],{"class":50},"      gender: ",[36,72968,72969],{"class":110},"'女'\n",[36,72971,72972],{"class":38,"line":101},[36,72973,3693],{"class":50},[36,72975,72976],{"class":38,"line":128},[36,72977,72878],{"class":124},[36,72979,72980,72983,72986,72988,72991,72993,72996,72998,73001],{"class":38,"line":149},[36,72981,72982],{"class":50},"  localStorage.",[36,72984,72985],{"class":46},"setItem",[36,72987,222],{"class":50},[36,72989,72990],{"class":110},"'obj'",[36,72992,477],{"class":50},[36,72994,72995],{"class":73},"JSON",[36,72997,2225],{"class":50},[36,72999,73000],{"class":46},"stringify",[36,73002,73003],{"class":50},"(obj))\n",[36,73005,73006,73009,73011,73014,73017,73019,73021],{"class":38,"line":154},[36,73007,73008],{"class":50},"  console.",[36,73010,59578],{"class":46},[36,73012,73013],{"class":50},"(localStorage.",[36,73015,73016],{"class":46},"getItem",[36,73018,222],{"class":50},[36,73020,72990],{"class":110},[36,73022,31828],{"class":50},[36,73024,73025,73027,73029],{"class":38,"line":167},[36,73026,53748],{"class":50},[36,73028,53144],{"class":52631},[36,73030,52638],{"class":50},[36,73032,73033],{"class":38,"line":172},[36,73034,71952],{"class":50},[36,73036,73037],{"class":38,"line":192},[36,73038,73039],{"class":50},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[36,73041,73042],{"class":38,"line":211},[36,73043,73044],{"class":50},"  类型是字符串的\n",[36,73046,73047],{"class":38,"line":216},[36,73048,73049],{"class":50},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23327,73051,73053],{"id":73052},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73055,73056],{},[2992,73057],{"alt":31,"src":73058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73060,73061],{},[2992,73062],{"alt":31,"src":73063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,73065,73067],{"className":54398,"code":73066,"language":54400,"meta":31,"style":31},"  \u003Cscript>\n    const obj = {\n      uname: 'pink老师',\n      age: 18,\n      gender: '女'\n    }\n    \u002F\u002F 1.存储复杂数据类型\n    \u002F\u002F localStorage.setItem('obj', obj)\n    \u002F\u002F console.log(localStorage.getItem('obj'))\n    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n    localStorage.setItem('obj', JSON.stringify(obj))\n    \u002F\u002F 取\n    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n    console.log(JSON.parse(localStorage.getItem('obj')))\n  \u003C\u002Fscript>\n",[33,73068,73069,73077,73081,73085,73089,73093,73097,73102,73107,73112,73117,73122,73127,73132,73137],{"__ignoreMap":31},[36,73070,73071,73073,73075],{"class":38,"line":39},[36,73072,53475],{"class":50},[36,73074,53144],{"class":52631},[36,73076,52638],{"class":50},[36,73078,73079],{"class":38,"line":54},[36,73080,72854],{"class":50},[36,73082,73083],{"class":38,"line":61},[36,73084,72859],{"class":50},[36,73086,73087],{"class":38,"line":80},[36,73088,72864],{"class":50},[36,73090,73091],{"class":38,"line":96},[36,73092,72869],{"class":50},[36,73094,73095],{"class":38,"line":101},[36,73096,3693],{"class":50},[36,73098,73099],{"class":38,"line":128},[36,73100,73101],{"class":50},"    \u002F\u002F 1.存储复杂数据类型\n",[36,73103,73104],{"class":38,"line":149},[36,73105,73106],{"class":50},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[36,73108,73109],{"class":38,"line":154},[36,73110,73111],{"class":50},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[36,73113,73114],{"class":38,"line":167},[36,73115,73116],{"class":50},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[36,73118,73119],{"class":38,"line":172},[36,73120,73121],{"class":50},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[36,73123,73124],{"class":38,"line":192},[36,73125,73126],{"class":50},"    \u002F\u002F 取\n",[36,73128,73129],{"class":38,"line":211},[36,73130,73131],{"class":50},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[36,73133,73134],{"class":38,"line":216},[36,73135,73136],{"class":50},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[36,73138,73139,73141,73143],{"class":38,"line":231},[36,73140,53748],{"class":50},[36,73142,53144],{"class":52631},[36,73144,52638],{"class":50},[19,73146,73147],{},[2992,73148],{"alt":31,"src":73149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[1645,73151,73153],{"id":73152},"_356-数组map方法","3.5.6 数组map方法",[19,73155,73156],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73158,73159],{},[2992,73160],{"alt":31,"src":73161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73163,73164],{},[2992,73165],{"alt":31,"src":73166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73168,73169,73172],{},[887,73170,73171],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73174,73175],{},"map有返回值，但是forEach没有返回值",[19,73177,73178],{},"map是个方法。用的时候要加 ()",[19,73180,73181],{},"map返回的是一个数组",[1645,73183,73185],{"id":73184},"_357-数组中join方法","3.5.7 数组中join方法",[19,73187,73188],{},[2992,73189],{"alt":31,"src":73190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73192,73193],{},"类似于python中拼接字符串一样！",[256,73195,73196,73199,73202],{},[259,73197,73198],{},"小括号为空则逗号分开",[259,73200,73201],{},"小括号为空字符串 ''，则元素之间没有分隔符",[259,73203,73204],{},"小括号用啥符号就用进行分割",[1645,73206,73208],{"id":73207},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[256,73210,73211,73214,73217,73220,73223],{},[259,73212,73213],{},"记住本地时间获取快速方式：new Date().toDateString()",[259,73215,73216],{},"尽量减少DOM操作，用好map+join的渲染方式",[259,73218,73219],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[259,73221,73222],{},"return可以实现函数的结束",[259,73224,73225],{},"禁止跳转是 preventDefault() 不要忘记",[26,73227,73229],{"className":51964,"code":73228,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n    }\n\n    h2 {\n      text-align: center;\n      margin-top: 20px;\n    }\n\n    .info {\n      width: 700px;\n      margin: 10px auto;\n      text-align: center;\n    }\n\n    .uname,\n    .age,\n    .salary {\n      width: 100px;\n      height: 20px;\n      outline: none;\n      margin-right: 15px;\n    }\n\n    .gender,\n    .city {\n      width: 100px;\n      height: 25px;\n      outline: none;\n      margin-right: 15px;\n      border: 1px solid rgb(200, 197, 197);\n    }\n\n    button {\n      height: 25px;\n      width: 75px;\n      background-color: rgb(126, 187, 36);\n      color: #fff;\n      border: 0;\n    }\n\n    button span {\n      display: inline-block;\n      width: 10px;\n      height: 10px;\n      line-height: 11px;\n      border: 1px solid #fff;\n      border-radius: 5px;\n      margin-right: 1px;\n    }\n\n    .total {\n      width: 800px;\n      height: 40px;\n      line-height: 40px;\n      text-align: right;\n      margin: 40px auto 10px;\n      padding-right: 10px;\n      font-size: 13px;\n      background-color: rgb(237, 235, 235);\n      box-sizing: border-box;\n    }\n\n    .total span {\n      color: red;\n    }\n\n    table {\n      width: 800px;\n      margin: auto;\n      border-collapse: collapse;\n    }\n\n    th {\n      background-color: rgb(237, 235, 235);\n    }\n\n    th,\n    td {\n      height: 35px;\n      text-align: left;\n      font-size: 14px;\n      border: 1px solid rgb(228, 225, 225);\n      padding-left: 5px;\n      transition: all linear 0.5s;\n    }\n\n    tbody tr:hover {\n      background-color: rgb(237, 235, 235);\n      cursor: pointer;\n    }\n\n    tbody tr td a {\n      display: block;\n      width: 60px;\n      height: 25px;\n      line-height: 25px;\n      margin-top: 2px;\n      color: #fff;\n      text-align: center;\n      text-decoration: none;\n      background-color: orange;\n      border-radius: 12.5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Ch2>学生就业统计表\u003C\u002Fh2>\n  \u003Cform class=\"info\" autocomplete=\"off\">\n    \u003Cinput type=\"text\" name=\"uname\" placeholder=\"姓名\" class=\"uname\">\n    \u003Cinput type=\"text\" name=\"age\" placeholder=\"年龄\" class=\"age\">\n    \u003Cinput type=\"text\" name=\"salary\" placeholder=\"薪资\" class=\"salary\">\n    \u003Cselect name=\"gender\" id=\"\" class=\"gender\">\n      \u003Coption value=\"男\">男\u003C\u002Foption>\n      \u003Coption value=\"女\">女\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cselect name=\"city\" id=\"\" class=\"city\">\n      \u003Coption value=\"北京\">北京\u003C\u002Foption>\n      \u003Coption value=\"上海\">上海\u003C\u002Foption>\n      \u003Coption value=\"广州\">广州\u003C\u002Foption>\n      \u003Coption value=\"深圳\">深圳\u003C\u002Foption>\n      \u003Coption value=\"曹县\">曹县\u003C\u002Foption>\n    \u003C\u002Fselect>\n    \u003Cbutton>\n      \u003Cspan>+\u003C\u002Fspan>添加\u003C\u002Fbutton>\n  \u003C\u002Fform>\n  \u003Cdiv class=\"total\">共有数据 \u003Cspan>0\u003C\u002Fspan> 条\u003C\u002Fdiv>\n  \u003Ctable>\n    \u003Cthead>\n      \u003Ctr>\n        \u003Cth>ID\u003C\u002Fth>\n        \u003Cth>姓名\u003C\u002Fth>\n        \u003Cth>年龄\u003C\u002Fth>\n        \u003Cth>性别\u003C\u002Fth>\n        \u003Cth>薪资\u003C\u002Fth>\n        \u003Cth>就业城市\u003C\u002Fth>\n        \u003Cth>录入时间\u003C\u002Fth>\n        \u003Cth>操作\u003C\u002Fth>\n      \u003C\u002Ftr>\n    \u003C\u002Fthead>\n    \u003Ctbody>\n      \u003C!-- \u003Ctr>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>1\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr> -->\n    \u003C\u002Ftbody>\n  \u003C\u002Ftable>\n  \u003Cscript>\n    \u002F\u002F const initData = [{\n    \u002F\u002F   unameId: 1,\n    \u002F\u002F   uname: '华晨宇',\n    \u002F\u002F   age: 22,\n    \u002F\u002F   salary: 12000,\n    \u002F\u002F   gender: '男',\n    \u002F\u002F   city: '北京',\n    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n    \u002F\u002F }]\n    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n    \u002F\u002F 1.渲染业务\n    \u002F\u002F 1.1 先读取本地存储的数据\n    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n\n    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n    const arr = []\n    console.log(arr)\n\n    \u002F\u002F 时间函数\n    function getTime() {\n      const date = new Date()\n      const h = date.getHours() \u003C 10 ? '0' + date.getHours() : date.getHours()\n      const m = date.getMinutes() \u003C 10 ? '0' + date.getMinutes() : date.getMinutes()\n      const s = date.getSeconds() \u003C 10 ? '0' + date.getSeconds() : date.getSeconds()\n      const str = `${date.getFullYear()}\u002F${date.getMonth() + 1}\u002F${date.getDate()} ${h}:${m}:${s}`\n      return str\n    }\n    \u002F\u002F 渲染函数\n    const tbody = document.querySelector('tbody')\n    function render() {\n      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n      const trArr = arr.map(function (ele, index) {\n        return `\n      \u003Ctr>\n        \u003Ctd>${ele.unameId}\u003C\u002Ftd>\n        \u003Ctd>${ele.uname}\u003C\u002Ftd>\n        \u003Ctd>${ele.age}\u003C\u002Ftd>\n        \u003Ctd>${ele.gender}\u003C\u002Ftd>\n        \u003Ctd>${ele.salary}\u003C\u002Ftd>\n        \u003Ctd>${ele.city}\u003C\u002Ftd>\n        \u003Ctd>${ele.time}\u003C\u002Ftd>\n        \u003Ctd>\n          \u003Ca href=\"#\" data-id=\"${index}\">删除\u003C\u002Fa>\n        \u003C\u002Ftd>\n      \u003C\u002Ftr>\n  `\n      })\n      console.log(trArr)\n\n      \u002F\u002F (2) 把数组转换为字符串join\n      \u002F\u002F (3) 把生成的字符串追加给tobody\n      tbody.innerHTML = trArr.join('')\n      \u002F\u002F 显示共有几条\n      document.querySelector('.total span').innerHTML = arr.length\n    }\n    \u002F\u002F render()\n\n    \u002F\u002F 获取DOM对象\n    const info = document.querySelector('.info')\n    const uname = document.querySelector('.uname')\n    const age = document.querySelector('.age')\n    const salary = document.querySelector('.salary')\n    const gender = document.querySelector('.gender')\n    const city = document.querySelector('.city')\n\n    \u002F\u002F form表单注册提交事件，阻止默认行为\n    info.addEventListener('submit', function (e) {\n      \u002F\u002F 禁止浏览器跳转\n      e.preventDefault()\n      \u002F\u002F 非空判断\n      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n      if (!uname.value || !age.value || !salary.value) {\n        return alert('输入内容不能为空')\n      }\n      arr.push({\n        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n        \u002F\u002F 对象的序号应为数组长度+1\n        \u002F\u002F unameId: arr.length + 1,\n\n        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n        \u002F\u002F 0当假看\n        unameId: arr.length ? arr[arr.length - 1].unameId + 1 : 1,\n        uname: uname.value,\n        age: age.value,\n        salary: salary.value,\n        gender: gender.value,\n        city: city.value,\n        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n        \u002F\u002F time: new Date().toDateString()\n        time: getTime()\n      })\n      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n      render()\n      this.reset() \u002F\u002F重置表单\n      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n      localStorage.setItem('data', JSON.stringify(arr))\n    })\n\n    \u002F\u002F 3.删除业务\n    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n    tbody.addEventListener('click', function (e) {\n      \u002F\u002F 判断是否点击的是删除按钮\n      if (e.target.tagName === 'A') {\n        \u002F\u002F alert(1)\n        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n        \u002F\u002F console.log(e.target)\n        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n\n        \u002F\u002F 确认框，确然是否真的要删除\n        \u002F\u002F confirm()为确认框\n        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n        if (confirm('您确定要删除这条数据吗？')) {\n          arr.splice(e.target.dataset.id, 1)\n          \u002F\u002F 3.4 重新渲染页面\n          render()\n          \u002F\u002F 3.5 把最新arr数组存到本地存储\n          localStorage.setItem('data', JSON.stringify(arr))\n        }\n      }\n\n    })\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,73230,73231,73241,73255,73259,73267,73281,73301,73313,73321,73327,73337,73347,73351,73355,73361,73371,73383,73387,73391,73398,73410,73424,73434,73438,73442,73449,73456,73463,73475,73487,73497,73509,73513,73517,73524,73531,73543,73555,73565,73577,73607,73611,73615,73622,73634,73646,73670,73680,73690,73694,73698,73706,73717,73729,73741,73753,73770,73782,73794,73798,73802,73809,73821,73833,73845,73856,73874,73887,73899,73923,73934,73938,73942,73950,73960,73964,73968,73974,73986,73997,74007,74011,74015,74021,74043,74047,74051,74057,74063,74075,74085,74097,74127,74140,74157,74161,74165,74176,74198,74208,74212,74216,74229,74239,74251,74263,74275,74287,74297,74307,74317,74328,74341,74345,74353,74361,74365,74373,74386,74406,74439,74472,74505,74531,74549,74567,74575,74601,74619,74637,74655,74673,74691,74699,74707,74725,74733,74762,74770,74778,74786,74799,74811,74823,74835,74847,74859,74872,74884,74892,74900,74908,74913,74918,74922,74926,74930,74934,74938,74942,74947,74952,74957,74962,74970,74978,74986,74991,74996,75001,75006,75011,75016,75021,75026,75031,75036,75041,75046,75051,75056,75060,75065,75070,75080,75089,75093,75098,75107,75123,75165,75205,75244,75309,75317,75321,75326,75344,75352,75357,75362,75392,75398,75403,75416,75428,75440,75452,75464,75476,75488,75492,75502,75506,75511,75516,75520,75529,75533,75538,75543,75562,75567,75587,75591,75596,75600,75605,75623,75641,75659,75678,75697,75716,75721,75727,75748,75754,75763,75769,75775,75781,75808,75821,75826,75836,75842,75848,75854,75860,75865,75871,75877,75883,75889,75922,75927,75932,75937,75942,75948,75954,75960,75971,75976,75982,75989,76003,76009,76033,76038,76043,76049,76055,76076,76082,76095,76101,76107,76113,76119,76124,76130,76136,76142,76160,76174,76180,76188,76194,76216,76221,76226,76231,76236,76241,76250,76259,76264],{"__ignoreMap":31},[36,73232,73233,73235,73237,73239],{"class":38,"line":39},[36,73234,52628],{"class":50},[36,73236,52632],{"class":52631},[36,73238,52635],{"class":46},[36,73240,52638],{"class":50},[36,73242,73243,73245,73247,73249,73251,73253],{"class":38,"line":54},[36,73244,2577],{"class":50},[36,73246,51966],{"class":52631},[36,73248,52647],{"class":46},[36,73250,70],{"class":50},[36,73252,52652],{"class":110},[36,73254,52638],{"class":50},[36,73256,73257],{"class":38,"line":61},[36,73258,58],{"emptyLinePlaceholder":57},[36,73260,73261,73263,73265],{"class":38,"line":80},[36,73262,2577],{"class":50},[36,73264,52665],{"class":52631},[36,73266,52638],{"class":50},[36,73268,73269,73271,73273,73275,73277,73279],{"class":38,"line":96},[36,73270,53475],{"class":50},[36,73272,52675],{"class":52631},[36,73274,52678],{"class":46},[36,73276,70],{"class":50},[36,73278,52683],{"class":110},[36,73280,52638],{"class":50},[36,73282,73283,73285,73287,73289,73291,73293,73295,73297,73299],{"class":38,"line":101},[36,73284,53475],{"class":50},[36,73286,52675],{"class":52631},[36,73288,16249],{"class":46},[36,73290,70],{"class":50},[36,73292,52722],{"class":110},[36,73294,52702],{"class":46},[36,73296,70],{"class":50},[36,73298,52729],{"class":110},[36,73300,52638],{"class":50},[36,73302,73303,73305,73307,73309,73311],{"class":38,"line":128},[36,73304,53475],{"class":50},[36,73306,52738],{"class":52631},[36,73308,52741],{"class":50},[36,73310,52738],{"class":52631},[36,73312,52638],{"class":50},[36,73314,73315,73317,73319],{"class":38,"line":149},[36,73316,53475],{"class":50},[36,73318,1592],{"class":52631},[36,73320,52638],{"class":50},[36,73322,73323,73325],{"class":38,"line":154},[36,73324,569],{"class":52631},[36,73326,16901],{"class":50},[36,73328,73329,73331,73333,73335],{"class":38,"line":167},[36,73330,56026],{"class":73},[36,73332,52768],{"class":50},[36,73334,1859],{"class":73},[36,73336,77],{"class":50},[36,73338,73339,73341,73343,73345],{"class":38,"line":172},[36,73340,56037],{"class":73},[36,73342,52768],{"class":50},[36,73344,1859],{"class":73},[36,73346,77],{"class":50},[36,73348,73349],{"class":38,"line":192},[36,73350,3693],{"class":50},[36,73352,73353],{"class":38,"line":211},[36,73354,58],{"emptyLinePlaceholder":57},[36,73356,73357,73359],{"class":38,"line":216},[36,73358,58610],{"class":52631},[36,73360,16901],{"class":50},[36,73362,73363,73365,73367,73369],{"class":38,"line":231},[36,73364,58617],{"class":73},[36,73366,52768],{"class":50},[36,73368,52923],{"class":73},[36,73370,77],{"class":50},[36,73372,73373,73375,73377,73379,73381],{"class":38,"line":236},[36,73374,63408],{"class":73},[36,73376,52768],{"class":50},[36,73378,2367],{"class":73},[36,73380,52823],{"class":42},[36,73382,77],{"class":50},[36,73384,73385],{"class":38,"line":247},[36,73386,3693],{"class":50},[36,73388,73389],{"class":38,"line":637},[36,73390,58],{"emptyLinePlaceholder":57},[36,73392,73393,73396],{"class":38,"line":646},[36,73394,73395],{"class":46},"    .info",[36,73397,16901],{"class":50},[36,73399,73400,73402,73404,73406,73408],{"class":38,"line":655},[36,73401,56102],{"class":73},[36,73403,52768],{"class":50},[36,73405,52820],{"class":73},[36,73407,52823],{"class":42},[36,73409,77],{"class":50},[36,73411,73412,73414,73416,73418,73420,73422],{"class":38,"line":660},[36,73413,56037],{"class":73},[36,73415,52768],{"class":50},[36,73417,2113],{"class":73},[36,73419,52823],{"class":42},[36,73421,52887],{"class":73},[36,73423,77],{"class":50},[36,73425,73426,73428,73430,73432],{"class":38,"line":665},[36,73427,58617],{"class":73},[36,73429,52768],{"class":50},[36,73431,52923],{"class":73},[36,73433,77],{"class":50},[36,73435,73436],{"class":38,"line":674},[36,73437,3693],{"class":50},[36,73439,73440],{"class":38,"line":679},[36,73441,58],{"emptyLinePlaceholder":57},[36,73443,73444,73447],{"class":38,"line":692},[36,73445,73446],{"class":46},"    .uname",[36,73448,32797],{"class":50},[36,73450,73451,73454],{"class":38,"line":705},[36,73452,73453],{"class":46},"    .age",[36,73455,32797],{"class":50},[36,73457,73458,73461],{"class":38,"line":710},[36,73459,73460],{"class":46},"    .salary",[36,73462,16901],{"class":50},[36,73464,73465,73467,73469,73471,73473],{"class":38,"line":722},[36,73466,56102],{"class":73},[36,73468,52768],{"class":50},[36,73470,1979],{"class":73},[36,73472,52823],{"class":42},[36,73474,77],{"class":50},[36,73476,73477,73479,73481,73483,73485],{"class":38,"line":750},[36,73478,56116],{"class":73},[36,73480,52768],{"class":50},[36,73482,2367],{"class":73},[36,73484,52823],{"class":42},[36,73486,77],{"class":50},[36,73488,73489,73491,73493,73495],{"class":38,"line":755},[36,73490,63111],{"class":73},[36,73492,52768],{"class":50},[36,73494,56068],{"class":73},[36,73496,77],{"class":50},[36,73498,73499,73501,73503,73505,73507],{"class":38,"line":777},[36,73500,63081],{"class":73},[36,73502,52768],{"class":50},[36,73504,2242],{"class":73},[36,73506,52823],{"class":42},[36,73508,77],{"class":50},[36,73510,73511],{"class":38,"line":802},[36,73512,3693],{"class":50},[36,73514,73515],{"class":38,"line":807},[36,73516,58],{"emptyLinePlaceholder":57},[36,73518,73519,73522],{"class":38,"line":818},[36,73520,73521],{"class":46},"    .gender",[36,73523,32797],{"class":50},[36,73525,73526,73529],{"class":38,"line":843},[36,73527,73528],{"class":46},"    .city",[36,73530,16901],{"class":50},[36,73532,73533,73535,73537,73539,73541],{"class":38,"line":848},[36,73534,56102],{"class":73},[36,73536,52768],{"class":50},[36,73538,1979],{"class":73},[36,73540,52823],{"class":42},[36,73542,77],{"class":50},[36,73544,73545,73547,73549,73551,73553],{"class":38,"line":859},[36,73546,56116],{"class":73},[36,73548,52768],{"class":50},[36,73550,2492],{"class":73},[36,73552,52823],{"class":42},[36,73554,77],{"class":50},[36,73556,73557,73559,73561,73563],{"class":38,"line":864},[36,73558,63111],{"class":73},[36,73560,52768],{"class":50},[36,73562,56068],{"class":73},[36,73564,77],{"class":50},[36,73566,73567,73569,73571,73573,73575],{"class":38,"line":873},[36,73568,63081],{"class":73},[36,73570,52768],{"class":50},[36,73572,2242],{"class":73},[36,73574,52823],{"class":42},[36,73576,77],{"class":50},[36,73578,73579,73581,73583,73585,73587,73589,73592,73594,73596,73598,73601,73603,73605],{"class":38,"line":9454},[36,73580,63308],{"class":73},[36,73582,52768],{"class":50},[36,73584,1885],{"class":73},[36,73586,52823],{"class":42},[36,73588,52852],{"class":73},[36,73590,73591],{"class":73}," rgb",[36,73593,222],{"class":50},[36,73595,3240],{"class":73},[36,73597,477],{"class":50},[36,73599,73600],{"class":73},"197",[36,73602,477],{"class":50},[36,73604,73600],{"class":73},[36,73606,228],{"class":50},[36,73608,73609],{"class":38,"line":9481},[36,73610,3693],{"class":50},[36,73612,73613],{"class":38,"line":9486},[36,73614,58],{"emptyLinePlaceholder":57},[36,73616,73617,73620],{"class":38,"line":9492},[36,73618,73619],{"class":52631},"    button",[36,73621,16901],{"class":50},[36,73623,73624,73626,73628,73630,73632],{"class":38,"line":9504},[36,73625,56116],{"class":73},[36,73627,52768],{"class":50},[36,73629,2492],{"class":73},[36,73631,52823],{"class":42},[36,73633,77],{"class":50},[36,73635,73636,73638,73640,73642,73644],{"class":38,"line":9516},[36,73637,56102],{"class":73},[36,73639,52768],{"class":50},[36,73641,2151],{"class":73},[36,73643,52823],{"class":42},[36,73645,77],{"class":50},[36,73647,73648,73650,73652,73655,73657,73659,73661,73664,73666,73668],{"class":38,"line":9528},[36,73649,56215],{"class":73},[36,73651,52768],{"class":50},[36,73653,73654],{"class":73},"rgb",[36,73656,222],{"class":50},[36,73658,2636],{"class":73},[36,73660,477],{"class":50},[36,73662,73663],{"class":73},"187",[36,73665,477],{"class":50},[36,73667,1967],{"class":73},[36,73669,228],{"class":50},[36,73671,73672,73674,73676,73678],{"class":38,"line":11184},[36,73673,58747],{"class":73},[36,73675,52768],{"class":50},[36,73677,62173],{"class":73},[36,73679,77],{"class":50},[36,73681,73682,73684,73686,73688],{"class":38,"line":11209},[36,73683,63308],{"class":73},[36,73685,52768],{"class":50},[36,73687,1859],{"class":73},[36,73689,77],{"class":50},[36,73691,73692],{"class":38,"line":11232},[36,73693,3693],{"class":50},[36,73695,73696],{"class":38,"line":11256},[36,73697,58],{"emptyLinePlaceholder":57},[36,73699,73700,73702,73704],{"class":38,"line":11261},[36,73701,73619],{"class":52631},[36,73703,53019],{"class":52631},[36,73705,16901],{"class":50},[36,73707,73708,73710,73712,73715],{"class":38,"line":11266},[36,73709,56340],{"class":73},[36,73711,52768],{"class":50},[36,73713,73714],{"class":73},"inline-block",[36,73716,77],{"class":50},[36,73718,73719,73721,73723,73725,73727],{"class":38,"line":11271},[36,73720,56102],{"class":73},[36,73722,52768],{"class":50},[36,73724,2113],{"class":73},[36,73726,52823],{"class":42},[36,73728,77],{"class":50},[36,73730,73731,73733,73735,73737,73739],{"class":38,"line":11280},[36,73732,56116],{"class":73},[36,73734,52768],{"class":50},[36,73736,2113],{"class":73},[36,73738,52823],{"class":42},[36,73740,77],{"class":50},[36,73742,73743,73745,73747,73749,73751],{"class":38,"line":11285},[36,73744,58690],{"class":73},[36,73746,52768],{"class":50},[36,73748,2139],{"class":73},[36,73750,52823],{"class":42},[36,73752,77],{"class":50},[36,73754,73755,73757,73759,73761,73763,73765,73768],{"class":38,"line":11291},[36,73756,63308],{"class":73},[36,73758,52768],{"class":50},[36,73760,1885],{"class":73},[36,73762,52823],{"class":42},[36,73764,52852],{"class":73},[36,73766,73767],{"class":73}," #fff",[36,73769,77],{"class":50},[36,73771,73772,73774,73776,73778,73780],{"class":38,"line":11312},[36,73773,56465],{"class":73},[36,73775,52768],{"class":50},[36,73777,1987],{"class":73},[36,73779,52823],{"class":42},[36,73781,77],{"class":50},[36,73783,73784,73786,73788,73790,73792],{"class":38,"line":11318},[36,73785,63081],{"class":73},[36,73787,52768],{"class":50},[36,73789,1885],{"class":73},[36,73791,52823],{"class":42},[36,73793,77],{"class":50},[36,73795,73796],{"class":38,"line":11332},[36,73797,3693],{"class":50},[36,73799,73800],{"class":38,"line":11338},[36,73801,58],{"emptyLinePlaceholder":57},[36,73803,73804,73807],{"class":38,"line":11365},[36,73805,73806],{"class":46},"    .total",[36,73808,16901],{"class":50},[36,73810,73811,73813,73815,73817,73819],{"class":38,"line":11374},[36,73812,56102],{"class":73},[36,73814,52768],{"class":50},[36,73816,62960],{"class":73},[36,73818,52823],{"class":42},[36,73820,77],{"class":50},[36,73822,73823,73825,73827,73829,73831],{"class":38,"line":11380},[36,73824,56116],{"class":73},[36,73826,52768],{"class":50},[36,73828,2068],{"class":73},[36,73830,52823],{"class":42},[36,73832,77],{"class":50},[36,73834,73835,73837,73839,73841,73843],{"class":38,"line":11388},[36,73836,58690],{"class":73},[36,73838,52768],{"class":50},[36,73840,2068],{"class":73},[36,73842,52823],{"class":42},[36,73844,77],{"class":50},[36,73846,73847,73849,73851,73854],{"class":38,"line":11393},[36,73848,58617],{"class":73},[36,73850,52768],{"class":50},[36,73852,73853],{"class":73},"right",[36,73855,77],{"class":50},[36,73857,73858,73860,73862,73864,73866,73868,73870,73872],{"class":38,"line":17933},[36,73859,56037],{"class":73},[36,73861,52768],{"class":50},[36,73863,2068],{"class":73},[36,73865,52823],{"class":42},[36,73867,52887],{"class":73},[36,73869,74],{"class":73},[36,73871,52823],{"class":42},[36,73873,77],{"class":50},[36,73875,73876,73879,73881,73883,73885],{"class":38,"line":17939},[36,73877,73878],{"class":73},"      padding-right",[36,73880,52768],{"class":50},[36,73882,2113],{"class":73},[36,73884,52823],{"class":42},[36,73886,77],{"class":50},[36,73888,73889,73891,73893,73895,73897],{"class":38,"line":17962},[36,73890,56253],{"class":73},[36,73892,52768],{"class":50},[36,73894,2190],{"class":73},[36,73896,52823],{"class":42},[36,73898,77],{"class":50},[36,73900,73901,73903,73905,73907,73909,73912,73914,73917,73919,73921],{"class":38,"line":17968},[36,73902,56215],{"class":73},[36,73904,52768],{"class":50},[36,73906,73654],{"class":73},[36,73908,222],{"class":50},[36,73910,73911],{"class":73},"237",[36,73913,477],{"class":50},[36,73915,73916],{"class":73},"235",[36,73918,477],{"class":50},[36,73920,73916],{"class":73},[36,73922,228],{"class":50},[36,73924,73925,73928,73930,73932],{"class":38,"line":17991},[36,73926,73927],{"class":73},"      box-sizing",[36,73929,52768],{"class":50},[36,73931,61836],{"class":73},[36,73933,77],{"class":50},[36,73935,73936],{"class":38,"line":18005},[36,73937,3693],{"class":50},[36,73939,73940],{"class":38,"line":18025},[36,73941,58],{"emptyLinePlaceholder":57},[36,73943,73944,73946,73948],{"class":38,"line":18031},[36,73945,73806],{"class":46},[36,73947,53019],{"class":52631},[36,73949,16901],{"class":50},[36,73951,73952,73954,73956,73958],{"class":38,"line":18042},[36,73953,58747],{"class":73},[36,73955,52768],{"class":50},[36,73957,58752],{"class":73},[36,73959,77],{"class":50},[36,73961,73962],{"class":38,"line":18065},[36,73963,3693],{"class":50},[36,73965,73966],{"class":38,"line":18087},[36,73967,58],{"emptyLinePlaceholder":57},[36,73969,73970,73972],{"class":38,"line":18092},[36,73971,66354],{"class":52631},[36,73973,16901],{"class":50},[36,73975,73976,73978,73980,73982,73984],{"class":38,"line":18098},[36,73977,56102],{"class":73},[36,73979,52768],{"class":50},[36,73981,62960],{"class":73},[36,73983,52823],{"class":42},[36,73985,77],{"class":50},[36,73987,73988,73990,73992,73995],{"class":38,"line":18112},[36,73989,56037],{"class":73},[36,73991,52768],{"class":50},[36,73993,73994],{"class":73},"auto",[36,73996,77],{"class":50},[36,73998,73999,74001,74003,74005],{"class":38,"line":18125},[36,74000,66361],{"class":73},[36,74002,52768],{"class":50},[36,74004,66366],{"class":73},[36,74006,77],{"class":50},[36,74008,74009],{"class":38,"line":18130},[36,74010,3693],{"class":50},[36,74012,74013],{"class":38,"line":18144},[36,74014,58],{"emptyLinePlaceholder":57},[36,74016,74017,74019],{"class":38,"line":18149},[36,74018,66446],{"class":52631},[36,74020,16901],{"class":50},[36,74022,74023,74025,74027,74029,74031,74033,74035,74037,74039,74041],{"class":38,"line":18155},[36,74024,56215],{"class":73},[36,74026,52768],{"class":50},[36,74028,73654],{"class":73},[36,74030,222],{"class":50},[36,74032,73911],{"class":73},[36,74034,477],{"class":50},[36,74036,73916],{"class":73},[36,74038,477],{"class":50},[36,74040,73916],{"class":73},[36,74042,228],{"class":50},[36,74044,74045],{"class":38,"line":18160},[36,74046,3693],{"class":50},[36,74048,74049],{"class":38,"line":18174},[36,74050,58],{"emptyLinePlaceholder":57},[36,74052,74053,74055],{"class":38,"line":18179},[36,74054,66446],{"class":52631},[36,74056,32797],{"class":50},[36,74058,74059,74061],{"class":38,"line":18184},[36,74060,66512],{"class":52631},[36,74062,16901],{"class":50},[36,74064,74065,74067,74069,74071,74073],{"class":38,"line":18198},[36,74066,56116],{"class":73},[36,74068,52768],{"class":50},[36,74070,1941],{"class":73},[36,74072,52823],{"class":42},[36,74074,77],{"class":50},[36,74076,74077,74079,74081,74083],{"class":38,"line":18210},[36,74078,58617],{"class":73},[36,74080,52768],{"class":50},[36,74082,25066],{"class":73},[36,74084,77],{"class":50},[36,74086,74087,74089,74091,74093,74095],{"class":38,"line":18215},[36,74088,56253],{"class":73},[36,74090,52768],{"class":50},[36,74092,2216],{"class":73},[36,74094,52823],{"class":42},[36,74096,77],{"class":50},[36,74098,74099,74101,74103,74105,74107,74109,74111,74113,74116,74118,74121,74123,74125],{"class":38,"line":18228},[36,74100,63308],{"class":73},[36,74102,52768],{"class":50},[36,74104,1885],{"class":73},[36,74106,52823],{"class":42},[36,74108,52852],{"class":73},[36,74110,73591],{"class":73},[36,74112,222],{"class":50},[36,74114,74115],{"class":73},"228",[36,74117,477],{"class":50},[36,74119,74120],{"class":73},"225",[36,74122,477],{"class":50},[36,74124,74120],{"class":73},[36,74126,228],{"class":50},[36,74128,74129,74132,74134,74136,74138],{"class":38,"line":18233},[36,74130,74131],{"class":73},"      padding-left",[36,74133,52768],{"class":50},[36,74135,1987],{"class":73},[36,74137,52823],{"class":42},[36,74139,77],{"class":50},[36,74141,74142,74144,74146,74148,74151,74153,74155],{"class":38,"line":18238},[36,74143,63191],{"class":73},[36,74145,52768],{"class":50},[36,74147,29452],{"class":73},[36,74149,74150],{"class":73}," linear",[36,74152,63198],{"class":73},[36,74154,2362],{"class":42},[36,74156,77],{"class":50},[36,74158,74159],{"class":38,"line":18243},[36,74160,3693],{"class":50},[36,74162,74163],{"class":38,"line":18256},[36,74164,58],{"emptyLinePlaceholder":57},[36,74166,74167,74170,74172,74174],{"class":38,"line":18261},[36,74168,74169],{"class":52631},"    tbody",[36,74171,71475],{"class":52631},[36,74173,62271],{"class":46},[36,74175,16901],{"class":50},[36,74177,74178,74180,74182,74184,74186,74188,74190,74192,74194,74196],{"class":38,"line":33964},[36,74179,56215],{"class":73},[36,74181,52768],{"class":50},[36,74183,73654],{"class":73},[36,74185,222],{"class":50},[36,74187,73911],{"class":73},[36,74189,477],{"class":50},[36,74191,73916],{"class":73},[36,74193,477],{"class":50},[36,74195,73916],{"class":73},[36,74197,228],{"class":50},[36,74199,74200,74202,74204,74206],{"class":38,"line":33970},[36,74201,63356],{"class":73},[36,74203,52768],{"class":50},[36,74205,63361],{"class":73},[36,74207,77],{"class":50},[36,74209,74210],{"class":38,"line":33976},[36,74211,3693],{"class":50},[36,74213,74214],{"class":38,"line":33982},[36,74215,58],{"emptyLinePlaceholder":57},[36,74217,74218,74220,74222,74225,74227],{"class":38,"line":33988},[36,74219,74169],{"class":52631},[36,74221,71475],{"class":52631},[36,74223,74224],{"class":52631}," td",[36,74226,474],{"class":52631},[36,74228,16901],{"class":50},[36,74230,74231,74233,74235,74237],{"class":38,"line":33999},[36,74232,56340],{"class":73},[36,74234,52768],{"class":50},[36,74236,62200],{"class":73},[36,74238,77],{"class":50},[36,74240,74241,74243,74245,74247,74249],{"class":38,"line":34005},[36,74242,56102],{"class":73},[36,74244,52768],{"class":50},[36,74246,2574],{"class":73},[36,74248,52823],{"class":42},[36,74250,77],{"class":50},[36,74252,74253,74255,74257,74259,74261],{"class":38,"line":34025},[36,74254,56116],{"class":73},[36,74256,52768],{"class":50},[36,74258,2492],{"class":73},[36,74260,52823],{"class":42},[36,74262,77],{"class":50},[36,74264,74265,74267,74269,74271,74273],{"class":38,"line":34031},[36,74266,58690],{"class":73},[36,74268,52768],{"class":50},[36,74270,2492],{"class":73},[36,74272,52823],{"class":42},[36,74274,77],{"class":50},[36,74276,74277,74279,74281,74283,74285],{"class":38,"line":34042},[36,74278,63408],{"class":73},[36,74280,52768],{"class":50},[36,74282,1747],{"class":73},[36,74284,52823],{"class":42},[36,74286,77],{"class":50},[36,74288,74289,74291,74293,74295],{"class":38,"line":34048},[36,74290,58747],{"class":73},[36,74292,52768],{"class":50},[36,74294,62173],{"class":73},[36,74296,77],{"class":50},[36,74298,74299,74301,74303,74305],{"class":38,"line":34054},[36,74300,58617],{"class":73},[36,74302,52768],{"class":50},[36,74304,52923],{"class":73},[36,74306,77],{"class":50},[36,74308,74309,74311,74313,74315],{"class":38,"line":34060},[36,74310,65301],{"class":73},[36,74312,52768],{"class":50},[36,74314,56068],{"class":73},[36,74316,77],{"class":50},[36,74318,74319,74321,74323,74326],{"class":38,"line":34066},[36,74320,56215],{"class":73},[36,74322,52768],{"class":50},[36,74324,74325],{"class":73},"orange",[36,74327,77],{"class":50},[36,74329,74330,74332,74334,74337,74339],{"class":38,"line":34072},[36,74331,56465],{"class":73},[36,74333,52768],{"class":50},[36,74335,74336],{"class":73},"12.5",[36,74338,52823],{"class":42},[36,74340,77],{"class":50},[36,74342,74343],{"class":38,"line":34078},[36,74344,3693],{"class":50},[36,74346,74347,74349,74351],{"class":38,"line":34084},[36,74348,53748],{"class":50},[36,74350,1592],{"class":52631},[36,74352,52638],{"class":50},[36,74354,74355,74357,74359],{"class":38,"line":34104},[36,74356,53116],{"class":50},[36,74358,52665],{"class":52631},[36,74360,52638],{"class":50},[36,74362,74363],{"class":38,"line":34110},[36,74364,58],{"emptyLinePlaceholder":57},[36,74366,74367,74369,74371],{"class":38,"line":34126},[36,74368,2577],{"class":50},[36,74370,53131],{"class":52631},[36,74372,52638],{"class":50},[36,74374,74375,74377,74379,74382,74384],{"class":38,"line":34132},[36,74376,53475],{"class":50},[36,74378,14],{"class":52631},[36,74380,74381],{"class":50},">学生就业统计表\u003C\u002F",[36,74383,14],{"class":52631},[36,74385,52638],{"class":50},[36,74387,74388,74390,74392,74394,74396,74398,74400,74402,74404],{"class":38,"line":34146},[36,74389,53475],{"class":50},[36,74391,67956],{"class":52631},[36,74393,54817],{"class":46},[36,74395,70],{"class":50},[36,74397,63995],{"class":110},[36,74399,70401],{"class":46},[36,74401,70],{"class":50},[36,74403,33107],{"class":110},[36,74405,52638],{"class":50},[36,74407,74408,74410,74412,74414,74416,74418,74420,74422,74424,74426,74428,74431,74433,74435,74437],{"class":38,"line":34152},[36,74409,52672],{"class":50},[36,74411,55152],{"class":52631},[36,74413,55155],{"class":46},[36,74415,70],{"class":50},[36,74417,64030],{"class":110},[36,74419,16249],{"class":46},[36,74421,70],{"class":50},[36,74423,70427],{"class":110},[36,74425,62351],{"class":46},[36,74427,70],{"class":50},[36,74429,74430],{"class":110},"\"姓名\"",[36,74432,54817],{"class":46},[36,74434,70],{"class":50},[36,74436,70427],{"class":110},[36,74438,52638],{"class":50},[36,74440,74441,74443,74445,74447,74449,74451,74453,74455,74457,74459,74461,74464,74466,74468,74470],{"class":38,"line":34167},[36,74442,52672],{"class":50},[36,74444,55152],{"class":52631},[36,74446,55155],{"class":46},[36,74448,70],{"class":50},[36,74450,64030],{"class":110},[36,74452,16249],{"class":46},[36,74454,70],{"class":50},[36,74456,70455],{"class":110},[36,74458,62351],{"class":46},[36,74460,70],{"class":50},[36,74462,74463],{"class":110},"\"年龄\"",[36,74465,54817],{"class":46},[36,74467,70],{"class":50},[36,74469,70455],{"class":110},[36,74471,52638],{"class":50},[36,74473,74474,74476,74478,74480,74482,74484,74486,74488,74490,74492,74494,74497,74499,74501,74503],{"class":38,"line":34173},[36,74475,52672],{"class":50},[36,74477,55152],{"class":52631},[36,74479,55155],{"class":46},[36,74481,70],{"class":50},[36,74483,64030],{"class":110},[36,74485,16249],{"class":46},[36,74487,70],{"class":50},[36,74489,70557],{"class":110},[36,74491,62351],{"class":46},[36,74493,70],{"class":50},[36,74495,74496],{"class":110},"\"薪资\"",[36,74498,54817],{"class":46},[36,74500,70],{"class":50},[36,74502,70557],{"class":110},[36,74504,52638],{"class":50},[36,74506,74507,74509,74511,74513,74515,74517,74519,74521,74523,74525,74527,74529],{"class":38,"line":34182},[36,74508,52672],{"class":50},[36,74510,70475],{"class":52631},[36,74512,16249],{"class":46},[36,74514,70],{"class":50},[36,74516,70482],{"class":110},[36,74518,16288],{"class":46},[36,74520,70],{"class":50},[36,74522,9126],{"class":110},[36,74524,54817],{"class":46},[36,74526,70],{"class":50},[36,74528,70482],{"class":110},[36,74530,52638],{"class":50},[36,74532,74533,74535,74537,74539,74541,74543,74545,74547],{"class":38,"line":34188},[36,74534,56565],{"class":50},[36,74536,70497],{"class":52631},[36,74538,67982],{"class":46},[36,74540,70],{"class":50},[36,74542,11427],{"class":110},[36,74544,70506],{"class":50},[36,74546,70497],{"class":52631},[36,74548,52638],{"class":50},[36,74550,74551,74553,74555,74557,74559,74561,74563,74565],{"class":38,"line":34197},[36,74552,56565],{"class":50},[36,74554,70497],{"class":52631},[36,74556,67982],{"class":46},[36,74558,70],{"class":50},[36,74560,11496],{"class":110},[36,74562,70525],{"class":50},[36,74564,70497],{"class":52631},[36,74566,52638],{"class":50},[36,74568,74569,74571,74573],{"class":38,"line":34203},[36,74570,53107],{"class":50},[36,74572,70475],{"class":52631},[36,74574,52638],{"class":50},[36,74576,74577,74579,74581,74583,74585,74587,74589,74591,74593,74595,74597,74599],{"class":38,"line":34209},[36,74578,52672],{"class":50},[36,74580,70475],{"class":52631},[36,74582,16249],{"class":46},[36,74584,70],{"class":50},[36,74586,70579],{"class":110},[36,74588,16288],{"class":46},[36,74590,70],{"class":50},[36,74592,9126],{"class":110},[36,74594,54817],{"class":46},[36,74596,70],{"class":50},[36,74598,70579],{"class":110},[36,74600,52638],{"class":50},[36,74602,74603,74605,74607,74609,74611,74613,74615,74617],{"class":38,"line":34218},[36,74604,56565],{"class":50},[36,74606,70497],{"class":52631},[36,74608,67982],{"class":46},[36,74610,70],{"class":50},[36,74612,70600],{"class":110},[36,74614,70603],{"class":50},[36,74616,70497],{"class":52631},[36,74618,52638],{"class":50},[36,74620,74621,74623,74625,74627,74629,74631,74633,74635],{"class":38,"line":34224},[36,74622,56565],{"class":50},[36,74624,70497],{"class":52631},[36,74626,67982],{"class":46},[36,74628,70],{"class":50},[36,74630,70620],{"class":110},[36,74632,70623],{"class":50},[36,74634,70497],{"class":52631},[36,74636,52638],{"class":50},[36,74638,74639,74641,74643,74645,74647,74649,74651,74653],{"class":38,"line":34235},[36,74640,56565],{"class":50},[36,74642,70497],{"class":52631},[36,74644,67982],{"class":46},[36,74646,70],{"class":50},[36,74648,70640],{"class":110},[36,74650,70643],{"class":50},[36,74652,70497],{"class":52631},[36,74654,52638],{"class":50},[36,74656,74657,74659,74661,74663,74665,74667,74669,74671],{"class":38,"line":34241},[36,74658,56565],{"class":50},[36,74660,70497],{"class":52631},[36,74662,67982],{"class":46},[36,74664,70],{"class":50},[36,74666,70660],{"class":110},[36,74668,70663],{"class":50},[36,74670,70497],{"class":52631},[36,74672,52638],{"class":50},[36,74674,74675,74677,74679,74681,74683,74685,74687,74689],{"class":38,"line":34260},[36,74676,56565],{"class":50},[36,74678,70497],{"class":52631},[36,74680,67982],{"class":46},[36,74682,70],{"class":50},[36,74684,70680],{"class":110},[36,74686,70683],{"class":50},[36,74688,70497],{"class":52631},[36,74690,52638],{"class":50},[36,74692,74693,74695,74697],{"class":38,"line":34266},[36,74694,53107],{"class":50},[36,74696,70475],{"class":52631},[36,74698,52638],{"class":50},[36,74700,74701,74703,74705],{"class":38,"line":34277},[36,74702,52672],{"class":50},[36,74704,55218],{"class":52631},[36,74706,52638],{"class":50},[36,74708,74709,74711,74713,74716,74718,74721,74723],{"class":38,"line":34283},[36,74710,56565],{"class":50},[36,74712,36],{"class":52631},[36,74714,74715],{"class":50},">+\u003C\u002F",[36,74717,36],{"class":52631},[36,74719,74720],{"class":50},">添加\u003C\u002F",[36,74722,55218],{"class":52631},[36,74724,52638],{"class":50},[36,74726,74727,74729,74731],{"class":38,"line":34303},[36,74728,53748],{"class":50},[36,74730,67956],{"class":52631},[36,74732,52638],{"class":50},[36,74734,74735,74737,74739,74741,74743,74745,74748,74750,74753,74755,74758,74760],{"class":38,"line":34319},[36,74736,53475],{"class":50},[36,74738,52942],{"class":52631},[36,74740,54817],{"class":46},[36,74742,70],{"class":50},[36,74744,63911],{"class":110},[36,74746,74747],{"class":50},">共有数据 \u003C",[36,74749,36],{"class":52631},[36,74751,74752],{"class":50},">0\u003C\u002F",[36,74754,36],{"class":52631},[36,74756,74757],{"class":50},"> 条\u003C\u002F",[36,74759,52942],{"class":52631},[36,74761,52638],{"class":50},[36,74763,74764,74766,74768],{"class":38,"line":34325},[36,74765,53475],{"class":50},[36,74767,1806],{"class":52631},[36,74769,52638],{"class":50},[36,74771,74772,74774,74776],{"class":38,"line":34339},[36,74773,52672],{"class":50},[36,74775,1809],{"class":52631},[36,74777,52638],{"class":50},[36,74779,74780,74782,74784],{"class":38,"line":34345},[36,74781,56565],{"class":50},[36,74783,1812],{"class":52631},[36,74785,52638],{"class":50},[36,74787,74788,74790,74792,74795,74797],{"class":38,"line":34351},[36,74789,56633],{"class":50},[36,74791,1815],{"class":52631},[36,74793,74794],{"class":50},">ID\u003C\u002F",[36,74796,1815],{"class":52631},[36,74798,52638],{"class":50},[36,74800,74801,74803,74805,74807,74809],{"class":38,"line":34362},[36,74802,56633],{"class":50},[36,74804,1815],{"class":52631},[36,74806,70786],{"class":50},[36,74808,1815],{"class":52631},[36,74810,52638],{"class":50},[36,74812,74813,74815,74817,74819,74821],{"class":38,"line":34368},[36,74814,56633],{"class":50},[36,74816,1815],{"class":52631},[36,74818,70799],{"class":50},[36,74820,1815],{"class":52631},[36,74822,52638],{"class":50},[36,74824,74825,74827,74829,74831,74833],{"class":38,"line":34374},[36,74826,56633],{"class":50},[36,74828,1815],{"class":52631},[36,74830,70812],{"class":50},[36,74832,1815],{"class":52631},[36,74834,52638],{"class":50},[36,74836,74837,74839,74841,74843,74845],{"class":38,"line":34384},[36,74838,56633],{"class":50},[36,74840,1815],{"class":52631},[36,74842,70825],{"class":50},[36,74844,1815],{"class":52631},[36,74846,52638],{"class":50},[36,74848,74849,74851,74853,74855,74857],{"class":38,"line":34390},[36,74850,56633],{"class":50},[36,74852,1815],{"class":52631},[36,74854,70838],{"class":50},[36,74856,1815],{"class":52631},[36,74858,52638],{"class":50},[36,74860,74861,74863,74865,74868,74870],{"class":38,"line":34401},[36,74862,56633],{"class":50},[36,74864,1815],{"class":52631},[36,74866,74867],{"class":50},">录入时间\u003C\u002F",[36,74869,1815],{"class":52631},[36,74871,52638],{"class":50},[36,74873,74874,74876,74878,74880,74882],{"class":38,"line":34407},[36,74875,56633],{"class":50},[36,74877,1815],{"class":52631},[36,74879,70851],{"class":50},[36,74881,1815],{"class":52631},[36,74883,52638],{"class":50},[36,74885,74886,74888,74890],{"class":38,"line":34417},[36,74887,56738],{"class":50},[36,74889,1812],{"class":52631},[36,74891,52638],{"class":50},[36,74893,74894,74896,74898],{"class":38,"line":34422},[36,74895,53107],{"class":50},[36,74897,1809],{"class":52631},[36,74899,52638],{"class":50},[36,74901,74902,74904,74906],{"class":38,"line":34428},[36,74903,52672],{"class":50},[36,74905,1852],{"class":52631},[36,74907,52638],{"class":50},[36,74909,74910],{"class":38,"line":34477},[36,74911,74912],{"class":124},"      \u003C!-- \u003Ctr>\n",[36,74914,74915],{"class":38,"line":34524},[36,74916,74917],{"class":124},"        \u003Ctd>1\u003C\u002Ftd>\n",[36,74919,74920],{"class":38,"line":34529},[36,74921,74917],{"class":124},[36,74923,74924],{"class":38,"line":34535},[36,74925,74917],{"class":124},[36,74927,74928],{"class":38,"line":34554},[36,74929,74917],{"class":124},[36,74931,74932],{"class":38,"line":34560},[36,74933,74917],{"class":124},[36,74935,74936],{"class":38,"line":34580},[36,74937,74917],{"class":124},[36,74939,74940],{"class":38,"line":34586},[36,74941,74917],{"class":124},[36,74943,74944],{"class":38,"line":34592},[36,74945,74946],{"class":124},"        \u003Ctd>\n",[36,74948,74949],{"class":38,"line":34602},[36,74950,74951],{"class":124},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[36,74953,74954],{"class":38,"line":34607},[36,74955,74956],{"class":124},"        \u003C\u002Ftd>\n",[36,74958,74959],{"class":38,"line":34613},[36,74960,74961],{"class":124},"      \u003C\u002Ftr> -->\n",[36,74963,74964,74966,74968],{"class":38,"line":34629},[36,74965,53107],{"class":50},[36,74967,1852],{"class":52631},[36,74969,52638],{"class":50},[36,74971,74972,74974,74976],{"class":38,"line":34674},[36,74973,53748],{"class":50},[36,74975,1806],{"class":52631},[36,74977,52638],{"class":50},[36,74979,74980,74982,74984],{"class":38,"line":34680},[36,74981,53475],{"class":50},[36,74983,53144],{"class":52631},[36,74985,52638],{"class":50},[36,74987,74988],{"class":38,"line":34686},[36,74989,74990],{"class":124},"    \u002F\u002F const initData = [{\n",[36,74992,74993],{"class":38,"line":34692},[36,74994,74995],{"class":124},"    \u002F\u002F   unameId: 1,\n",[36,74997,74998],{"class":38,"line":34703},[36,74999,75000],{"class":124},"    \u002F\u002F   uname: '华晨宇',\n",[36,75002,75003],{"class":38,"line":34709},[36,75004,75005],{"class":124},"    \u002F\u002F   age: 22,\n",[36,75007,75008],{"class":38,"line":34715},[36,75009,75010],{"class":124},"    \u002F\u002F   salary: 12000,\n",[36,75012,75013],{"class":38,"line":34721},[36,75014,75015],{"class":124},"    \u002F\u002F   gender: '男',\n",[36,75017,75018],{"class":38,"line":34739},[36,75019,75020],{"class":124},"    \u002F\u002F   city: '北京',\n",[36,75022,75023],{"class":38,"line":34753},[36,75024,75025],{"class":124},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[36,75027,75028],{"class":38,"line":34762},[36,75029,75030],{"class":124},"    \u002F\u002F }]\n",[36,75032,75033],{"class":38,"line":34771},[36,75034,75035],{"class":124},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[36,75037,75038],{"class":38,"line":34780},[36,75039,75040],{"class":124},"    \u002F\u002F 1.渲染业务\n",[36,75042,75043],{"class":38,"line":34789},[36,75044,75045],{"class":124},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[36,75047,75048],{"class":38,"line":34795},[36,75049,75050],{"class":124},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[36,75052,75053],{"class":38,"line":34801},[36,75054,75055],{"class":124},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[36,75057,75058],{"class":38,"line":34809},[36,75059,58],{"emptyLinePlaceholder":57},[36,75061,75062],{"class":38,"line":34814},[36,75063,75064],{"class":124},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[36,75066,75067],{"class":38,"line":34820},[36,75068,75069],{"class":124},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[36,75071,75072,75074,75076,75078],{"class":38,"line":34831},[36,75073,1498],{"class":42},[36,75075,59026],{"class":73},[36,75077,14893],{"class":42},[36,75079,53169],{"class":50},[36,75081,75082,75085,75087],{"class":38,"line":34837},[36,75083,75084],{"class":50},"    console.",[36,75086,59578],{"class":46},[36,75088,53743],{"class":50},[36,75090,75091],{"class":38,"line":34857},[36,75092,58],{"emptyLinePlaceholder":57},[36,75094,75095],{"class":38,"line":34863},[36,75096,75097],{"class":124},"    \u002F\u002F 时间函数\n",[36,75099,75100,75102,75105],{"class":38,"line":34869},[36,75101,71415],{"class":42},[36,75103,75104],{"class":46}," getTime",[36,75106,51],{"class":50},[36,75108,75109,75111,75114,75116,75118,75121],{"class":38,"line":34875},[36,75110,59559],{"class":42},[36,75112,75113],{"class":73}," date",[36,75115,14893],{"class":42},[36,75117,13033],{"class":42},[36,75119,75120],{"class":46}," Date",[36,75122,3484],{"class":50},[36,75124,75125,75127,75129,75131,75134,75137,75139,75141,75143,75146,75149,75151,75153,75155,75157,75159,75161,75163],{"class":38,"line":34892},[36,75126,59559],{"class":42},[36,75128,17420],{"class":73},[36,75130,14893],{"class":42},[36,75132,75133],{"class":50}," date.",[36,75135,75136],{"class":46},"getHours",[36,75138,1133],{"class":50},[36,75140,2577],{"class":42},[36,75142,74],{"class":73},[36,75144,75145],{"class":42}," ?",[36,75147,75148],{"class":110}," '0'",[36,75150,46897],{"class":42},[36,75152,75133],{"class":50},[36,75154,75136],{"class":46},[36,75156,1133],{"class":50},[36,75158,2526],{"class":42},[36,75160,75133],{"class":50},[36,75162,75136],{"class":46},[36,75164,3484],{"class":50},[36,75166,75167,75169,75172,75174,75176,75179,75181,75183,75185,75187,75189,75191,75193,75195,75197,75199,75201,75203],{"class":38,"line":34898},[36,75168,59559],{"class":42},[36,75170,75171],{"class":73}," m",[36,75173,14893],{"class":42},[36,75175,75133],{"class":50},[36,75177,75178],{"class":46},"getMinutes",[36,75180,1133],{"class":50},[36,75182,2577],{"class":42},[36,75184,74],{"class":73},[36,75186,75145],{"class":42},[36,75188,75148],{"class":110},[36,75190,46897],{"class":42},[36,75192,75133],{"class":50},[36,75194,75178],{"class":46},[36,75196,1133],{"class":50},[36,75198,2526],{"class":42},[36,75200,75133],{"class":50},[36,75202,75178],{"class":46},[36,75204,3484],{"class":50},[36,75206,75207,75209,75211,75213,75215,75218,75220,75222,75224,75226,75228,75230,75232,75234,75236,75238,75240,75242],{"class":38,"line":34904},[36,75208,59559],{"class":42},[36,75210,9899],{"class":73},[36,75212,14893],{"class":42},[36,75214,75133],{"class":50},[36,75216,75217],{"class":46},"getSeconds",[36,75219,1133],{"class":50},[36,75221,2577],{"class":42},[36,75223,74],{"class":73},[36,75225,75145],{"class":42},[36,75227,75148],{"class":110},[36,75229,46897],{"class":42},[36,75231,75133],{"class":50},[36,75233,75217],{"class":46},[36,75235,1133],{"class":50},[36,75237,2526],{"class":42},[36,75239,75133],{"class":50},[36,75241,75217],{"class":46},[36,75243,3484],{"class":50},[36,75245,75246,75248,75251,75253,75255,75258,75260,75263,75265,75268,75270,75272,75275,75277,75279,75281,75283,75285,75287,75290,75292,75295,75297,75300,75302,75304,75306],{"class":38,"line":34910},[36,75247,59559],{"class":42},[36,75249,75250],{"class":73}," str",[36,75252,14893],{"class":42},[36,75254,64234],{"class":110},[36,75256,75257],{"class":50},"date",[36,75259,2225],{"class":110},[36,75261,75262],{"class":46},"getFullYear",[36,75264,3929],{"class":110},[36,75266,75267],{"class":110},"}\u002F${",[36,75269,75257],{"class":50},[36,75271,2225],{"class":110},[36,75273,75274],{"class":46},"getMonth",[36,75276,1133],{"class":110},[36,75278,2148],{"class":42},[36,75280,26449],{"class":73},[36,75282,75267],{"class":110},[36,75284,75257],{"class":50},[36,75286,2225],{"class":110},[36,75288,75289],{"class":46},"getDate",[36,75291,3929],{"class":110},[36,75293,75294],{"class":110},"} ${",[36,75296,2082],{"class":50},[36,75298,75299],{"class":110},"}:${",[36,75301,2211],{"class":50},[36,75303,75299],{"class":110},[36,75305,2362],{"class":50},[36,75307,75308],{"class":110},"}`\n",[36,75310,75311,75314],{"class":38,"line":34916},[36,75312,75313],{"class":42},"      return",[36,75315,75316],{"class":50}," str\n",[36,75318,75319],{"class":38,"line":34922},[36,75320,3693],{"class":50},[36,75322,75323],{"class":38,"line":34949},[36,75324,75325],{"class":124},"    \u002F\u002F 渲染函数\n",[36,75327,75328,75330,75332,75334,75336,75338,75340,75342],{"class":38,"line":34973},[36,75329,1498],{"class":42},[36,75331,71078],{"class":73},[36,75333,14893],{"class":42},[36,75335,55727],{"class":50},[36,75337,55730],{"class":46},[36,75339,222],{"class":50},[36,75341,71089],{"class":110},[36,75343,1680],{"class":50},[36,75345,75346,75348,75350],{"class":38,"line":34979},[36,75347,71415],{"class":42},[36,75349,71418],{"class":46},[36,75351,51],{"class":50},[36,75353,75354],{"class":38,"line":34985},[36,75355,75356],{"class":124},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[36,75358,75359],{"class":38,"line":34991},[36,75360,75361],{"class":124},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[36,75363,75364,75366,75369,75371,75373,75376,75378,75380,75382,75385,75387,75390],{"class":38,"line":35002},[36,75365,59559],{"class":42},[36,75367,75368],{"class":73}," trArr",[36,75370,14893],{"class":42},[36,75372,53296],{"class":50},[36,75374,75375],{"class":46},"map",[36,75377,222],{"class":50},[36,75379,55780],{"class":42},[36,75381,3180],{"class":50},[36,75383,75384],{"class":473},"ele",[36,75386,477],{"class":50},[36,75388,75389],{"class":473},"index",[36,75391,485],{"class":50},[36,75393,75394,75396],{"class":38,"line":35013},[36,75395,16081],{"class":42},[36,75397,71499],{"class":110},[36,75399,75400],{"class":38,"line":35019},[36,75401,75402],{"class":110},"      \u003Ctr>\n",[36,75404,75405,75407,75409,75411,75414],{"class":38,"line":35036},[36,75406,71504],{"class":110},[36,75408,75384],{"class":50},[36,75410,2225],{"class":110},[36,75412,75413],{"class":50},"unameId",[36,75415,71519],{"class":110},[36,75417,75418,75420,75422,75424,75426],{"class":38,"line":35059},[36,75419,71504],{"class":110},[36,75421,75384],{"class":50},[36,75423,2225],{"class":110},[36,75425,71535],{"class":50},[36,75427,71519],{"class":110},[36,75429,75430,75432,75434,75436,75438],{"class":38,"line":35082},[36,75431,71504],{"class":110},[36,75433,75384],{"class":50},[36,75435,2225],{"class":110},[36,75437,71552],{"class":50},[36,75439,71519],{"class":110},[36,75441,75442,75444,75446,75448,75450],{"class":38,"line":35088},[36,75443,71504],{"class":110},[36,75445,75384],{"class":50},[36,75447,2225],{"class":110},[36,75449,71569],{"class":50},[36,75451,71519],{"class":110},[36,75453,75454,75456,75458,75460,75462],{"class":38,"line":35093},[36,75455,71504],{"class":110},[36,75457,75384],{"class":50},[36,75459,2225],{"class":110},[36,75461,71586],{"class":50},[36,75463,71519],{"class":110},[36,75465,75466,75468,75470,75472,75474],{"class":38,"line":35102},[36,75467,71504],{"class":110},[36,75469,75384],{"class":50},[36,75471,2225],{"class":110},[36,75473,71603],{"class":50},[36,75475,71519],{"class":110},[36,75477,75478,75480,75482,75484,75486],{"class":38,"line":35112},[36,75479,71504],{"class":110},[36,75481,75384],{"class":50},[36,75483,2225],{"class":110},[36,75485,3890],{"class":50},[36,75487,71519],{"class":110},[36,75489,75490],{"class":38,"line":35118},[36,75491,74946],{"class":110},[36,75493,75494,75497,75499],{"class":38,"line":35123},[36,75495,75496],{"class":110},"          \u003Ca href=\"#\" data-id=\"${",[36,75498,75389],{"class":50},[36,75500,75501],{"class":110},"}\">删除\u003C\u002Fa>\n",[36,75503,75504],{"class":38,"line":35129},[36,75505,74956],{"class":110},[36,75507,75508],{"class":38,"line":35142},[36,75509,75510],{"class":110},"      \u003C\u002Ftr>\n",[36,75512,75513],{"class":38,"line":35148},[36,75514,75515],{"class":110},"  `\n",[36,75517,75518],{"class":38,"line":35159},[36,75519,66146],{"class":50},[36,75521,75522,75524,75526],{"class":38,"line":35170},[36,75523,59575],{"class":50},[36,75525,59578],{"class":46},[36,75527,75528],{"class":50},"(trArr)\n",[36,75530,75531],{"class":38,"line":35189},[36,75532,58],{"emptyLinePlaceholder":57},[36,75534,75535],{"class":38,"line":50849},[36,75536,75537],{"class":124},"      \u002F\u002F (2) 把数组转换为字符串join\n",[36,75539,75540],{"class":38,"line":50854},[36,75541,75542],{"class":124},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[36,75544,75545,75547,75549,75552,75555,75557,75560],{"class":38,"line":50863},[36,75546,71430],{"class":50},[36,75548,70],{"class":42},[36,75550,75551],{"class":50}," trArr.",[36,75553,75554],{"class":46},"join",[36,75556,222],{"class":50},[36,75558,75559],{"class":110},"''",[36,75561,1680],{"class":50},[36,75563,75564],{"class":38,"line":50872},[36,75565,75566],{"class":124},"      \u002F\u002F 显示共有几条\n",[36,75568,75569,75571,75573,75575,75578,75581,75583,75585],{"class":38,"line":50877},[36,75570,57102],{"class":50},[36,75572,55730],{"class":46},[36,75574,222],{"class":50},[36,75576,75577],{"class":110},"'.total span'",[36,75579,75580],{"class":50},").innerHTML ",[36,75582,70],{"class":42},[36,75584,53296],{"class":50},[36,75586,57162],{"class":73},[36,75588,75589],{"class":38,"line":50882},[36,75590,3693],{"class":50},[36,75592,75593],{"class":38,"line":50887},[36,75594,75595],{"class":124},"    \u002F\u002F render()\n",[36,75597,75598],{"class":38,"line":50900},[36,75599,58],{"emptyLinePlaceholder":57},[36,75601,75602],{"class":38,"line":50905},[36,75603,75604],{"class":124},"    \u002F\u002F 获取DOM对象\n",[36,75606,75607,75609,75611,75613,75615,75617,75619,75621],{"class":38,"line":50914},[36,75608,1498],{"class":42},[36,75610,71152],{"class":73},[36,75612,14893],{"class":42},[36,75614,55727],{"class":50},[36,75616,55730],{"class":46},[36,75618,222],{"class":50},[36,75620,71163],{"class":110},[36,75622,1680],{"class":50},[36,75624,75625,75627,75629,75631,75633,75635,75637,75639],{"class":38,"line":50923},[36,75626,1498],{"class":42},[36,75628,70979],{"class":73},[36,75630,14893],{"class":42},[36,75632,55727],{"class":50},[36,75634,55730],{"class":46},[36,75636,222],{"class":50},[36,75638,70990],{"class":110},[36,75640,1680],{"class":50},[36,75642,75643,75645,75647,75649,75651,75653,75655,75657],{"class":38,"line":50940},[36,75644,1498],{"class":42},[36,75646,17018],{"class":73},[36,75648,14893],{"class":42},[36,75650,55727],{"class":50},[36,75652,55730],{"class":46},[36,75654,222],{"class":50},[36,75656,71009],{"class":110},[36,75658,1680],{"class":50},[36,75660,75662,75664,75666,75668,75670,75672,75674,75676],{"class":38,"line":75661},231,[36,75663,1498],{"class":42},[36,75665,71038],{"class":73},[36,75667,14893],{"class":42},[36,75669,55727],{"class":50},[36,75671,55730],{"class":46},[36,75673,222],{"class":50},[36,75675,71049],{"class":110},[36,75677,1680],{"class":50},[36,75679,75681,75683,75685,75687,75689,75691,75693,75695],{"class":38,"line":75680},232,[36,75682,1498],{"class":42},[36,75684,71018],{"class":73},[36,75686,14893],{"class":42},[36,75688,55727],{"class":50},[36,75690,55730],{"class":46},[36,75692,222],{"class":50},[36,75694,71029],{"class":110},[36,75696,1680],{"class":50},[36,75698,75700,75702,75704,75706,75708,75710,75712,75714],{"class":38,"line":75699},233,[36,75701,1498],{"class":42},[36,75703,71058],{"class":73},[36,75705,14893],{"class":42},[36,75707,55727],{"class":50},[36,75709,55730],{"class":46},[36,75711,222],{"class":50},[36,75713,71069],{"class":110},[36,75715,1680],{"class":50},[36,75717,75719],{"class":38,"line":75718},234,[36,75720,58],{"emptyLinePlaceholder":57},[36,75722,75724],{"class":38,"line":75723},235,[36,75725,75726],{"class":124},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[36,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746],{"class":38,"line":75729},236,[36,75731,71170],{"class":50},[36,75733,59144],{"class":46},[36,75735,222],{"class":50},[36,75737,71177],{"class":110},[36,75739,477],{"class":50},[36,75741,55780],{"class":42},[36,75743,3180],{"class":50},[36,75745,1744],{"class":473},[36,75747,485],{"class":50},[36,75749,75751],{"class":38,"line":75750},237,[36,75752,75753],{"class":124},"      \u002F\u002F 禁止浏览器跳转\n",[36,75755,75757,75759,75761],{"class":38,"line":75756},238,[36,75758,71197],{"class":50},[36,75760,71200],{"class":46},[36,75762,3484],{"class":50},[36,75764,75766],{"class":38,"line":75765},239,[36,75767,75768],{"class":124},"      \u002F\u002F 非空判断\n",[36,75770,75772],{"class":38,"line":75771},240,[36,75773,75774],{"class":124},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[36,75776,75778],{"class":38,"line":75777},241,[36,75779,75780],{"class":124},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[36,75782,75784,75786,75788,75790,75793,75795,75798,75801,75803,75805],{"class":38,"line":75783},242,[36,75785,55811],{"class":42},[36,75787,3180],{"class":50},[36,75789,1894],{"class":42},[36,75791,75792],{"class":50},"uname.value ",[36,75794,72688],{"class":42},[36,75796,75797],{"class":42}," !",[36,75799,75800],{"class":50},"age.value ",[36,75802,72688],{"class":42},[36,75804,75797],{"class":42},[36,75806,75807],{"class":50},"salary.value) {\n",[36,75809,75811,75813,75815,75817,75819],{"class":38,"line":75810},243,[36,75812,16081],{"class":42},[36,75814,71271],{"class":46},[36,75816,222],{"class":50},[36,75818,71276],{"class":110},[36,75820,1680],{"class":50},[36,75822,75824],{"class":38,"line":75823},244,[36,75825,53729],{"class":50},[36,75827,75829,75831,75833],{"class":38,"line":75828},245,[36,75830,59338],{"class":50},[36,75832,53215],{"class":46},[36,75834,75835],{"class":50},"({\n",[36,75837,75839],{"class":38,"line":75838},246,[36,75840,75841],{"class":124},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[36,75843,75845],{"class":38,"line":75844},247,[36,75846,75847],{"class":124},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[36,75849,75851],{"class":38,"line":75850},248,[36,75852,75853],{"class":124},"        \u002F\u002F 对象的序号应为数组长度+1\n",[36,75855,75857],{"class":38,"line":75856},249,[36,75858,75859],{"class":124},"        \u002F\u002F unameId: arr.length + 1,\n",[36,75861,75863],{"class":38,"line":75862},250,[36,75864,58],{"emptyLinePlaceholder":57},[36,75866,75868],{"class":38,"line":75867},251,[36,75869,75870],{"class":124},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[36,75872,75874],{"class":38,"line":75873},252,[36,75875,75876],{"class":124},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[36,75878,75880],{"class":38,"line":75879},253,[36,75881,75882],{"class":124},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[36,75884,75886],{"class":38,"line":75885},254,[36,75887,75888],{"class":124},"        \u002F\u002F 0当假看\n",[36,75890,75892,75895,75897,75899,75902,75904,75906,75908,75911,75913,75915,75918,75920],{"class":38,"line":75891},255,[36,75893,75894],{"class":50},"        unameId: arr.",[36,75896,53299],{"class":73},[36,75898,75145],{"class":42},[36,75900,75901],{"class":50}," arr[arr.",[36,75903,53299],{"class":73},[36,75905,53602],{"class":42},[36,75907,26449],{"class":73},[36,75909,75910],{"class":50},"].unameId ",[36,75912,2148],{"class":42},[36,75914,26449],{"class":73},[36,75916,75917],{"class":42}," :",[36,75919,26449],{"class":73},[36,75921,32797],{"class":50},[36,75923,75925],{"class":38,"line":75924},256,[36,75926,71324],{"class":50},[36,75928,75930],{"class":38,"line":75929},257,[36,75931,71329],{"class":50},[36,75933,75935],{"class":38,"line":75934},258,[36,75936,71339],{"class":50},[36,75938,75940],{"class":38,"line":75939},259,[36,75941,71334],{"class":50},[36,75943,75945],{"class":38,"line":75944},260,[36,75946,75947],{"class":50},"        city: city.value,\n",[36,75949,75951],{"class":38,"line":75950},261,[36,75952,75953],{"class":124},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[36,75955,75957],{"class":38,"line":75956},262,[36,75958,75959],{"class":124},"        \u002F\u002F time: new Date().toDateString()\n",[36,75961,75963,75966,75969],{"class":38,"line":75962},263,[36,75964,75965],{"class":50},"        time: ",[36,75967,75968],{"class":46},"getTime",[36,75970,3484],{"class":50},[36,75972,75974],{"class":38,"line":75973},264,[36,75975,66146],{"class":50},[36,75977,75979],{"class":38,"line":75978},265,[36,75980,75981],{"class":124},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[36,75983,75985,75987],{"class":38,"line":75984},266,[36,75986,71399],{"class":46},[36,75988,3484],{"class":50},[36,75990,75992,75994,75996,75998,76000],{"class":38,"line":75991},267,[36,75993,71382],{"class":73},[36,75995,2225],{"class":50},[36,75997,71387],{"class":46},[36,75999,1133],{"class":50},[36,76001,76002],{"class":124},"\u002F\u002F重置表单\n",[36,76004,76006],{"class":38,"line":76005},268,[36,76007,76008],{"class":124},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[36,76010,76012,76015,76017,76019,76022,76024,76026,76028,76030],{"class":38,"line":76011},269,[36,76013,76014],{"class":50},"      localStorage.",[36,76016,72985],{"class":46},[36,76018,222],{"class":50},[36,76020,76021],{"class":110},"'data'",[36,76023,477],{"class":50},[36,76025,72995],{"class":73},[36,76027,2225],{"class":50},[36,76029,73000],{"class":46},[36,76031,76032],{"class":50},"(arr))\n",[36,76034,76036],{"class":38,"line":76035},270,[36,76037,34792],{"class":50},[36,76039,76041],{"class":38,"line":76040},271,[36,76042,58],{"emptyLinePlaceholder":57},[36,76044,76046],{"class":38,"line":76045},272,[36,76047,76048],{"class":124},"    \u002F\u002F 3.删除业务\n",[36,76050,76052],{"class":38,"line":76051},273,[36,76053,76054],{"class":124},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[36,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074],{"class":38,"line":76057},274,[36,76059,71672],{"class":50},[36,76061,59144],{"class":46},[36,76063,222],{"class":50},[36,76065,59149],{"class":110},[36,76067,477],{"class":50},[36,76069,55780],{"class":42},[36,76071,3180],{"class":50},[36,76073,1744],{"class":473},[36,76075,485],{"class":50},[36,76077,76079],{"class":38,"line":76078},275,[36,76080,76081],{"class":124},"      \u002F\u002F 判断是否点击的是删除按钮\n",[36,76083,76085,76087,76089,76091,76093],{"class":38,"line":76084},276,[36,76086,55811],{"class":42},[36,76088,68365],{"class":50},[36,76090,55817],{"class":42},[36,76092,69587],{"class":110},[36,76094,485],{"class":50},[36,76096,76098],{"class":38,"line":76097},277,[36,76099,76100],{"class":124},"        \u002F\u002F alert(1)\n",[36,76102,76104],{"class":38,"line":76103},278,[36,76105,76106],{"class":124},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[36,76108,76110],{"class":38,"line":76109},279,[36,76111,76112],{"class":124},"        \u002F\u002F console.log(e.target)\n",[36,76114,76116],{"class":38,"line":76115},280,[36,76117,76118],{"class":124},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[36,76120,76122],{"class":38,"line":76121},281,[36,76123,58],{"emptyLinePlaceholder":57},[36,76125,76127],{"class":38,"line":76126},282,[36,76128,76129],{"class":124},"        \u002F\u002F 确认框，确然是否真的要删除\n",[36,76131,76133],{"class":38,"line":76132},283,[36,76134,76135],{"class":124},"        \u002F\u002F confirm()为确认框\n",[36,76137,76139],{"class":38,"line":76138},284,[36,76140,76141],{"class":124},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[36,76143,76145,76147,76149,76152,76154,76157],{"class":38,"line":76144},285,[36,76146,3999],{"class":42},[36,76148,3180],{"class":50},[36,76150,76151],{"class":46},"confirm",[36,76153,222],{"class":50},[36,76155,76156],{"class":110},"'您确定要删除这条数据吗？'",[36,76158,76159],{"class":50},")) {\n",[36,76161,76163,76166,76168,76170,76172],{"class":38,"line":76162},286,[36,76164,76165],{"class":50},"          arr.",[36,76167,59341],{"class":46},[36,76169,71725],{"class":50},[36,76171,1885],{"class":73},[36,76173,1680],{"class":50},[36,76175,76177],{"class":38,"line":76176},287,[36,76178,76179],{"class":124},"          \u002F\u002F 3.4 重新渲染页面\n",[36,76181,76183,76186],{"class":38,"line":76182},288,[36,76184,76185],{"class":46},"          render",[36,76187,3484],{"class":50},[36,76189,76191],{"class":38,"line":76190},289,[36,76192,76193],{"class":124},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[36,76195,76197,76200,76202,76204,76206,76208,76210,76212,76214],{"class":38,"line":76196},290,[36,76198,76199],{"class":50},"          localStorage.",[36,76201,72985],{"class":46},[36,76203,222],{"class":50},[36,76205,76021],{"class":110},[36,76207,477],{"class":50},[36,76209,72995],{"class":73},[36,76211,2225],{"class":50},[36,76213,73000],{"class":46},[36,76215,76032],{"class":50},[36,76217,76219],{"class":38,"line":76218},291,[36,76220,4031],{"class":50},[36,76222,76224],{"class":38,"line":76223},292,[36,76225,53729],{"class":50},[36,76227,76229],{"class":38,"line":76228},293,[36,76230,58],{"emptyLinePlaceholder":57},[36,76232,76234],{"class":38,"line":76233},294,[36,76235,34792],{"class":50},[36,76237,76239],{"class":38,"line":76238},295,[36,76240,58],{"emptyLinePlaceholder":57},[36,76242,76244,76246,76248],{"class":38,"line":76243},296,[36,76245,53748],{"class":50},[36,76247,53144],{"class":52631},[36,76249,52638],{"class":50},[36,76251,76253,76255,76257],{"class":38,"line":76252},297,[36,76254,53116],{"class":50},[36,76256,53131],{"class":52631},[36,76258,52638],{"class":50},[36,76260,76262],{"class":38,"line":76261},298,[36,76263,58],{"emptyLinePlaceholder":57},[36,76265,76267,76269,76271],{"class":38,"line":76266},299,[36,76268,53116],{"class":50},[36,76270,51966],{"class":52631},[36,76272,52638],{"class":50},[14,76274,76276],{"id":76275},"_36-正则表达式","3.6 正则表达式",[19,76278,76279],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76281,76282],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76284,76285],{},"正则表达式的作用：",[2674,76287,76288,76295,76301],{},[259,76289,76290,76291,76294],{},"表单验证（ ",[887,76292,76293],{},"匹配"," ）",[259,76296,76297,76298,76294],{},"过滤敏感词（ ",[887,76299,76300],{},"替换",[259,76302,76303,76304,76294],{},"字符串中提取我们想要的部分（ ",[887,76305,76306],{},"提取",[1645,76308,76310],{"id":76309},"_361-语法","3.6.1 语法",[19,76312,76313],{},"正则表达式使用步骤：",[256,76315,76316,76319],{},[259,76317,76318],{},"定义规则",[259,76320,76321],{},"查找是否匹配",[19,76323,76324],{},"正则表达式里边不需要写引号",[19,76326,76327],{},[2992,76328],{"alt":31,"src":76329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76331,76332],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76334,76335],{},"reg.test(str)",[19,76337,76338],{},[2992,76339],{"alt":31,"src":76340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76342,76343],{},[2992,76344],{"alt":31,"src":76345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[1645,76347,76349],{"id":76348},"_362-元字符","3.6.2 元字符",[256,76351,76352,76355,76358,76361,76368],{},[259,76353,76354],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[259,76356,76357],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[259,76359,76360],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[259,76362,76363,76364],{},"正则验证工具：",[1906,76365,76366],{"href":76366,"rel":76367},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25195],[259,76369,76370],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23327,76372,76374],{"id":76373},"_3621-边界符","3.6.2.1 边界符",[19,76376,76377],{},[2992,76378],{"alt":31,"src":76379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76381,76382],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76384,76385],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76387,76388],{},"只匹配一次",[19,76390,76391],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23327,76393,76395],{"id":76394},"_3622-量词","3.6.2.2 量词",[19,76397,76398],{},[2992,76399],{"alt":31,"src":76400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76402,76403],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23327,76405,76407],{"id":76406},"_3623-元字符","3.6.2.3 元字符",[19,76409,76410],{},[2992,76411],{"alt":31,"src":76412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76414,76415],{},"匹配的是a或b或c []只选一个",[19,76417,76418],{},[2992,76419],{"alt":31,"src":76420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76422,76423],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76425,76426],{},[2992,76427],{"alt":31,"src":76428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76430,76431],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76433,76434],{},[2992,76435],{"alt":31,"src":76436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,76438,76440],{"className":51964,"code":76439,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 元字符中\n    console.log(\u002F哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F哈\u002F.test('二哈'))   \u002F\u002Ftrue\n\n    \u002F\u002F 1.边界符\n    console.log(\u002F^哈\u002F.test('哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    \u002F\u002F 2.量词\n    \u002F\u002F 量词 * 类似于 >= 0\n    console.log(\u002F^哈*$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈*$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈*$\u002F.test('哈好哈'))   \u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n\n    \u002F\u002F +类似于>=1\n    console.log(\u002F^哈+$\u002F.test('哈哈'))  \u002F\u002Ftrue\n    console.log(\u002F^哈+$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈+$\u002F.test('哈好哈'))   \u002F\u002Ffalse\n\n    \u002F\u002F ?类似于0次或一次\n    console.log(\u002F^哈？$\u002F.test(''))   \u002F\u002Ftrue\n    console.log(\u002F^哈?$\u002F.test('哈哈'))  \u002F\u002Ffalse\n    console.log(\u002F^哈?$\u002F.test('二哈好傻'))  \u002F\u002Ffalse 必须以哈开头或结尾\n    console.log(\u002F^哈?$\u002F.test('哈好哈'))  \u002F\u002Ffalse\n\n    \u002F\u002F {n}写几，就必须出现几次\n    console.log(\u002F^哈{4}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F {n,}大于等于n次\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n\n    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈')) \u002F\u002Ftrue\n    console.log(\u002F^哈{4,6}$\u002F.test('哈哈哈哈哈哈哈')) \u002F\u002Ffalse\n\n    \u002F\u002F 3.字符类 [abc] 只选一个字符\n    console.log(\u002F^[abc]$\u002F.test('a'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('b'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('c'))  \u002F\u002Ftrue\n    console.log(\u002F[abc]\u002F.test('ab'))  \u002F\u002Ftrue\n    console.log(\u002F^[abc]$\u002F.test('ab'))  \u002F\u002Ffalse     不加精确匹配，就是true\n    console.log(\u002F^[abc]{2}$\u002F.test('ab'))  \u002F\u002Ftrue   可以选两个\n    console.log(\u002F^[a-z]$\u002F.test('p'))   \u002F\u002Ftrue   依然只能选一个\n    console.log(\u002F^[A-Z]$\u002F.test('p'))   \u002F\u002Ffalse\n    console.log(\u002F^[A-Z]$\u002F.test('P'))   \u002F\u002Ftrue\n    console.log(\u002F^[0-9]$\u002F.test('0'))   \u002F\u002Ftrue\n    console.log(\u002F^[a-zA-Z0-9]$\u002F.test('p'))  \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,76441,76442,76452,76466,76470,76478,76492,76512,76524,76532,76536,76544,76552,76557,76588,76615,76643,76647,76652,76680,76711,76716,76721,76752,76784,76816,76820,76825,76856,76886,76916,76920,76925,76956,76987,77017,77047,77051,77056,77089,77093,77098,77129,77160,77164,77169,77200,77230,77261,77265,77270,77302,77333,77364,77391,77422,77454,77487,77518,77549,77581,77612,77620,77628,77632],{"__ignoreMap":31},[36,76443,76444,76446,76448,76450],{"class":38,"line":39},[36,76445,52628],{"class":50},[36,76447,52632],{"class":52631},[36,76449,52635],{"class":46},[36,76451,52638],{"class":50},[36,76453,76454,76456,76458,76460,76462,76464],{"class":38,"line":54},[36,76455,2577],{"class":50},[36,76457,51966],{"class":52631},[36,76459,52647],{"class":46},[36,76461,70],{"class":50},[36,76463,52652],{"class":110},[36,76465,52638],{"class":50},[36,76467,76468],{"class":38,"line":61},[36,76469,58],{"emptyLinePlaceholder":57},[36,76471,76472,76474,76476],{"class":38,"line":80},[36,76473,2577],{"class":50},[36,76475,52665],{"class":52631},[36,76477,52638],{"class":50},[36,76479,76480,76482,76484,76486,76488,76490],{"class":38,"line":96},[36,76481,53475],{"class":50},[36,76483,52675],{"class":52631},[36,76485,52678],{"class":46},[36,76487,70],{"class":50},[36,76489,52683],{"class":110},[36,76491,52638],{"class":50},[36,76493,76494,76496,76498,76500,76502,76504,76506,76508,76510],{"class":38,"line":101},[36,76495,53475],{"class":50},[36,76497,52675],{"class":52631},[36,76499,16249],{"class":46},[36,76501,70],{"class":50},[36,76503,52722],{"class":110},[36,76505,52702],{"class":46},[36,76507,70],{"class":50},[36,76509,52729],{"class":110},[36,76511,52638],{"class":50},[36,76513,76514,76516,76518,76520,76522],{"class":38,"line":128},[36,76515,53475],{"class":50},[36,76517,52738],{"class":52631},[36,76519,52741],{"class":50},[36,76521,52738],{"class":52631},[36,76523,52638],{"class":50},[36,76525,76526,76528,76530],{"class":38,"line":149},[36,76527,53116],{"class":50},[36,76529,52665],{"class":52631},[36,76531,52638],{"class":50},[36,76533,76534],{"class":38,"line":154},[36,76535,58],{"emptyLinePlaceholder":57},[36,76537,76538,76540,76542],{"class":38,"line":167},[36,76539,2577],{"class":50},[36,76541,53131],{"class":52631},[36,76543,52638],{"class":50},[36,76545,76546,76548,76550],{"class":38,"line":172},[36,76547,53475],{"class":50},[36,76549,53144],{"class":52631},[36,76551,52638],{"class":50},[36,76553,76554],{"class":38,"line":192},[36,76555,76556],{"class":124},"    \u002F\u002F 元字符中\n",[36,76558,76559,76561,76563,76565,76567,76570,76572,76574,76577,76579,76582,76585],{"class":38,"line":211},[36,76560,75084],{"class":50},[36,76562,59578],{"class":46},[36,76564,222],{"class":50},[36,76566,2251],{"class":110},[36,76568,76569],{"class":49308},"哈",[36,76571,2251],{"class":110},[36,76573,2225],{"class":50},[36,76575,76576],{"class":46},"test",[36,76578,222],{"class":50},[36,76580,76581],{"class":110},"'哈'",[36,76583,76584],{"class":50},"))  ",[36,76586,76587],{"class":124},"\u002F\u002Ftrue\n",[36,76589,76590,76592,76594,76596,76598,76600,76602,76604,76606,76608,76611,76613],{"class":38,"line":216},[36,76591,75084],{"class":50},[36,76593,59578],{"class":46},[36,76595,222],{"class":50},[36,76597,2251],{"class":110},[36,76599,76569],{"class":49308},[36,76601,2251],{"class":110},[36,76603,2225],{"class":50},[36,76605,76576],{"class":46},[36,76607,222],{"class":50},[36,76609,76610],{"class":110},"'哈哈'",[36,76612,76584],{"class":50},[36,76614,76587],{"class":124},[36,76616,76617,76619,76621,76623,76625,76627,76629,76631,76633,76635,76638,76641],{"class":38,"line":231},[36,76618,75084],{"class":50},[36,76620,59578],{"class":46},[36,76622,222],{"class":50},[36,76624,2251],{"class":110},[36,76626,76569],{"class":49308},[36,76628,2251],{"class":110},[36,76630,2225],{"class":50},[36,76632,76576],{"class":46},[36,76634,222],{"class":50},[36,76636,76637],{"class":110},"'二哈'",[36,76639,76640],{"class":50},"))   ",[36,76642,76587],{"class":124},[36,76644,76645],{"class":38,"line":236},[36,76646,58],{"emptyLinePlaceholder":57},[36,76648,76649],{"class":38,"line":247},[36,76650,76651],{"class":124},"    \u002F\u002F 1.边界符\n",[36,76653,76654,76656,76658,76660,76662,76664,76666,76668,76670,76672,76674,76676,76678],{"class":38,"line":637},[36,76655,75084],{"class":50},[36,76657,59578],{"class":46},[36,76659,222],{"class":50},[36,76661,2251],{"class":110},[36,76663,2633],{"class":42},[36,76665,76569],{"class":49308},[36,76667,2251],{"class":110},[36,76669,2225],{"class":50},[36,76671,76576],{"class":46},[36,76673,222],{"class":50},[36,76675,76581],{"class":110},[36,76677,76584],{"class":50},[36,76679,76587],{"class":124},[36,76681,76682,76684,76686,76688,76690,76692,76694,76696,76698,76700,76702,76704,76706,76708],{"class":38,"line":646},[36,76683,75084],{"class":50},[36,76685,59578],{"class":46},[36,76687,222],{"class":50},[36,76689,2251],{"class":110},[36,76691,2633],{"class":42},[36,76693,76569],{"class":49308},[36,76695,1970],{"class":42},[36,76697,2251],{"class":110},[36,76699,2225],{"class":50},[36,76701,76576],{"class":46},[36,76703,222],{"class":50},[36,76705,76610],{"class":110},[36,76707,76584],{"class":50},[36,76709,76710],{"class":124},"\u002F\u002Ffalse\n",[36,76712,76713],{"class":38,"line":655},[36,76714,76715],{"class":124},"    \u002F\u002F 2.量词\n",[36,76717,76718],{"class":38,"line":660},[36,76719,76720],{"class":124},"    \u002F\u002F 量词 * 类似于 >= 0\n",[36,76722,76723,76725,76727,76729,76731,76733,76735,76738,76740,76742,76744,76746,76748,76750],{"class":38,"line":665},[36,76724,75084],{"class":50},[36,76726,59578],{"class":46},[36,76728,222],{"class":50},[36,76730,2251],{"class":110},[36,76732,2633],{"class":42},[36,76734,76569],{"class":49308},[36,76736,76737],{"class":42},"*$",[36,76739,2251],{"class":110},[36,76741,2225],{"class":50},[36,76743,76576],{"class":46},[36,76745,222],{"class":50},[36,76747,76610],{"class":110},[36,76749,76584],{"class":50},[36,76751,76587],{"class":124},[36,76753,76754,76756,76758,76760,76762,76764,76766,76768,76770,76772,76774,76776,76779,76781],{"class":38,"line":674},[36,76755,75084],{"class":50},[36,76757,59578],{"class":46},[36,76759,222],{"class":50},[36,76761,2251],{"class":110},[36,76763,2633],{"class":42},[36,76765,76569],{"class":49308},[36,76767,76737],{"class":42},[36,76769,2251],{"class":110},[36,76771,2225],{"class":50},[36,76773,76576],{"class":46},[36,76775,222],{"class":50},[36,76777,76778],{"class":110},"'二哈好傻'",[36,76780,76584],{"class":50},[36,76782,76783],{"class":124},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[36,76785,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804,76806,76808,76811,76813],{"class":38,"line":679},[36,76787,75084],{"class":50},[36,76789,59578],{"class":46},[36,76791,222],{"class":50},[36,76793,2251],{"class":110},[36,76795,2633],{"class":42},[36,76797,76569],{"class":49308},[36,76799,76737],{"class":42},[36,76801,2251],{"class":110},[36,76803,2225],{"class":50},[36,76805,76576],{"class":46},[36,76807,222],{"class":50},[36,76809,76810],{"class":110},"'哈好哈'",[36,76812,76640],{"class":50},[36,76814,76815],{"class":124},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[36,76817,76818],{"class":38,"line":692},[36,76819,58],{"emptyLinePlaceholder":57},[36,76821,76822],{"class":38,"line":705},[36,76823,76824],{"class":124},"    \u002F\u002F +类似于>=1\n",[36,76826,76827,76829,76831,76833,76835,76837,76839,76842,76844,76846,76848,76850,76852,76854],{"class":38,"line":710},[36,76828,75084],{"class":50},[36,76830,59578],{"class":46},[36,76832,222],{"class":50},[36,76834,2251],{"class":110},[36,76836,2633],{"class":42},[36,76838,76569],{"class":49308},[36,76840,76841],{"class":42},"+$",[36,76843,2251],{"class":110},[36,76845,2225],{"class":50},[36,76847,76576],{"class":46},[36,76849,222],{"class":50},[36,76851,76610],{"class":110},[36,76853,76584],{"class":50},[36,76855,76587],{"class":124},[36,76857,76858,76860,76862,76864,76866,76868,76870,76872,76874,76876,76878,76880,76882,76884],{"class":38,"line":722},[36,76859,75084],{"class":50},[36,76861,59578],{"class":46},[36,76863,222],{"class":50},[36,76865,2251],{"class":110},[36,76867,2633],{"class":42},[36,76869,76569],{"class":49308},[36,76871,76841],{"class":42},[36,76873,2251],{"class":110},[36,76875,2225],{"class":50},[36,76877,76576],{"class":46},[36,76879,222],{"class":50},[36,76881,76778],{"class":110},[36,76883,76584],{"class":50},[36,76885,76783],{"class":124},[36,76887,76888,76890,76892,76894,76896,76898,76900,76902,76904,76906,76908,76910,76912,76914],{"class":38,"line":750},[36,76889,75084],{"class":50},[36,76891,59578],{"class":46},[36,76893,222],{"class":50},[36,76895,2251],{"class":110},[36,76897,2633],{"class":42},[36,76899,76569],{"class":49308},[36,76901,76841],{"class":42},[36,76903,2251],{"class":110},[36,76905,2225],{"class":50},[36,76907,76576],{"class":46},[36,76909,222],{"class":50},[36,76911,76810],{"class":110},[36,76913,76640],{"class":50},[36,76915,76710],{"class":124},[36,76917,76918],{"class":38,"line":755},[36,76919,58],{"emptyLinePlaceholder":57},[36,76921,76922],{"class":38,"line":777},[36,76923,76924],{"class":124},"    \u002F\u002F ?类似于0次或一次\n",[36,76926,76927,76929,76931,76933,76935,76937,76940,76942,76944,76946,76948,76950,76952,76954],{"class":38,"line":802},[36,76928,75084],{"class":50},[36,76930,59578],{"class":46},[36,76932,222],{"class":50},[36,76934,2251],{"class":110},[36,76936,2633],{"class":42},[36,76938,76939],{"class":49308},"哈？",[36,76941,1970],{"class":42},[36,76943,2251],{"class":110},[36,76945,2225],{"class":50},[36,76947,76576],{"class":46},[36,76949,222],{"class":50},[36,76951,75559],{"class":110},[36,76953,76640],{"class":50},[36,76955,76587],{"class":124},[36,76957,76958,76960,76962,76964,76966,76968,76970,76973,76975,76977,76979,76981,76983,76985],{"class":38,"line":807},[36,76959,75084],{"class":50},[36,76961,59578],{"class":46},[36,76963,222],{"class":50},[36,76965,2251],{"class":110},[36,76967,2633],{"class":42},[36,76969,76569],{"class":49308},[36,76971,76972],{"class":42},"?$",[36,76974,2251],{"class":110},[36,76976,2225],{"class":50},[36,76978,76576],{"class":46},[36,76980,222],{"class":50},[36,76982,76610],{"class":110},[36,76984,76584],{"class":50},[36,76986,76710],{"class":124},[36,76988,76989,76991,76993,76995,76997,76999,77001,77003,77005,77007,77009,77011,77013,77015],{"class":38,"line":818},[36,76990,75084],{"class":50},[36,76992,59578],{"class":46},[36,76994,222],{"class":50},[36,76996,2251],{"class":110},[36,76998,2633],{"class":42},[36,77000,76569],{"class":49308},[36,77002,76972],{"class":42},[36,77004,2251],{"class":110},[36,77006,2225],{"class":50},[36,77008,76576],{"class":46},[36,77010,222],{"class":50},[36,77012,76778],{"class":110},[36,77014,76584],{"class":50},[36,77016,76783],{"class":124},[36,77018,77019,77021,77023,77025,77027,77029,77031,77033,77035,77037,77039,77041,77043,77045],{"class":38,"line":843},[36,77020,75084],{"class":50},[36,77022,59578],{"class":46},[36,77024,222],{"class":50},[36,77026,2251],{"class":110},[36,77028,2633],{"class":42},[36,77030,76569],{"class":49308},[36,77032,76972],{"class":42},[36,77034,2251],{"class":110},[36,77036,2225],{"class":50},[36,77038,76576],{"class":46},[36,77040,222],{"class":50},[36,77042,76810],{"class":110},[36,77044,76584],{"class":50},[36,77046,76710],{"class":124},[36,77048,77049],{"class":38,"line":848},[36,77050,58],{"emptyLinePlaceholder":57},[36,77052,77053],{"class":38,"line":859},[36,77054,77055],{"class":124},"    \u002F\u002F {n}写几，就必须出现几次\n",[36,77057,77058,77060,77062,77064,77066,77068,77070,77073,77075,77077,77079,77081,77084,77087],{"class":38,"line":864},[36,77059,75084],{"class":50},[36,77061,59578],{"class":46},[36,77063,222],{"class":50},[36,77065,2251],{"class":110},[36,77067,2633],{"class":42},[36,77069,76569],{"class":49308},[36,77071,77072],{"class":42},"{4}$",[36,77074,2251],{"class":110},[36,77076,2225],{"class":50},[36,77078,76576],{"class":46},[36,77080,222],{"class":50},[36,77082,77083],{"class":110},"'哈哈哈哈'",[36,77085,77086],{"class":50},")) ",[36,77088,76587],{"class":124},[36,77090,77091],{"class":38,"line":873},[36,77092,58],{"emptyLinePlaceholder":57},[36,77094,77095],{"class":38,"line":9454},[36,77096,77097],{"class":124},"    \u002F\u002F {n,}大于等于n次\n",[36,77099,77100,77102,77104,77106,77108,77110,77112,77115,77117,77119,77121,77123,77125,77127],{"class":38,"line":9481},[36,77101,75084],{"class":50},[36,77103,59578],{"class":46},[36,77105,222],{"class":50},[36,77107,2251],{"class":110},[36,77109,2633],{"class":42},[36,77111,76569],{"class":49308},[36,77113,77114],{"class":42},"{4,}$",[36,77116,2251],{"class":110},[36,77118,2225],{"class":50},[36,77120,76576],{"class":46},[36,77122,222],{"class":50},[36,77124,77083],{"class":110},[36,77126,77086],{"class":50},[36,77128,76587],{"class":124},[36,77130,77131,77133,77135,77137,77139,77141,77143,77145,77147,77149,77151,77153,77156,77158],{"class":38,"line":9486},[36,77132,75084],{"class":50},[36,77134,59578],{"class":46},[36,77136,222],{"class":50},[36,77138,2251],{"class":110},[36,77140,2633],{"class":42},[36,77142,76569],{"class":49308},[36,77144,77114],{"class":42},[36,77146,2251],{"class":110},[36,77148,2225],{"class":50},[36,77150,76576],{"class":46},[36,77152,222],{"class":50},[36,77154,77155],{"class":110},"'哈哈哈哈哈'",[36,77157,77086],{"class":50},[36,77159,76587],{"class":124},[36,77161,77162],{"class":38,"line":9492},[36,77163,58],{"emptyLinePlaceholder":57},[36,77165,77166],{"class":38,"line":9504},[36,77167,77168],{"class":124},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[36,77170,77171,77173,77175,77177,77179,77181,77183,77186,77188,77190,77192,77194,77196,77198],{"class":38,"line":9516},[36,77172,75084],{"class":50},[36,77174,59578],{"class":46},[36,77176,222],{"class":50},[36,77178,2251],{"class":110},[36,77180,2633],{"class":42},[36,77182,76569],{"class":49308},[36,77184,77185],{"class":42},"{4,6}$",[36,77187,2251],{"class":110},[36,77189,2225],{"class":50},[36,77191,76576],{"class":46},[36,77193,222],{"class":50},[36,77195,77083],{"class":110},[36,77197,77086],{"class":50},[36,77199,76587],{"class":124},[36,77201,77202,77204,77206,77208,77210,77212,77214,77216,77218,77220,77222,77224,77226,77228],{"class":38,"line":9528},[36,77203,75084],{"class":50},[36,77205,59578],{"class":46},[36,77207,222],{"class":50},[36,77209,2251],{"class":110},[36,77211,2633],{"class":42},[36,77213,76569],{"class":49308},[36,77215,77185],{"class":42},[36,77217,2251],{"class":110},[36,77219,2225],{"class":50},[36,77221,76576],{"class":46},[36,77223,222],{"class":50},[36,77225,77155],{"class":110},[36,77227,77086],{"class":50},[36,77229,76587],{"class":124},[36,77231,77232,77234,77236,77238,77240,77242,77244,77246,77248,77250,77252,77254,77257,77259],{"class":38,"line":11184},[36,77233,75084],{"class":50},[36,77235,59578],{"class":46},[36,77237,222],{"class":50},[36,77239,2251],{"class":110},[36,77241,2633],{"class":42},[36,77243,76569],{"class":49308},[36,77245,77185],{"class":42},[36,77247,2251],{"class":110},[36,77249,2225],{"class":50},[36,77251,76576],{"class":46},[36,77253,222],{"class":50},[36,77255,77256],{"class":110},"'哈哈哈哈哈哈哈'",[36,77258,77086],{"class":50},[36,77260,76710],{"class":124},[36,77262,77263],{"class":38,"line":11209},[36,77264,58],{"emptyLinePlaceholder":57},[36,77266,77267],{"class":38,"line":11232},[36,77268,77269],{"class":124},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[36,77271,77272,77274,77276,77278,77280,77282,77285,77287,77289,77291,77293,77295,77298,77300],{"class":38,"line":11256},[36,77273,75084],{"class":50},[36,77275,59578],{"class":46},[36,77277,222],{"class":50},[36,77279,2251],{"class":110},[36,77281,2633],{"class":42},[36,77283,77284],{"class":73},"[abc]",[36,77286,1970],{"class":42},[36,77288,2251],{"class":110},[36,77290,2225],{"class":50},[36,77292,76576],{"class":46},[36,77294,222],{"class":50},[36,77296,77297],{"class":110},"'a'",[36,77299,76584],{"class":50},[36,77301,76587],{"class":124},[36,77303,77304,77306,77308,77310,77312,77314,77316,77318,77320,77322,77324,77326,77329,77331],{"class":38,"line":11261},[36,77305,75084],{"class":50},[36,77307,59578],{"class":46},[36,77309,222],{"class":50},[36,77311,2251],{"class":110},[36,77313,2633],{"class":42},[36,77315,77284],{"class":73},[36,77317,1970],{"class":42},[36,77319,2251],{"class":110},[36,77321,2225],{"class":50},[36,77323,76576],{"class":46},[36,77325,222],{"class":50},[36,77327,77328],{"class":110},"'b'",[36,77330,76584],{"class":50},[36,77332,76587],{"class":124},[36,77334,77335,77337,77339,77341,77343,77345,77347,77349,77351,77353,77355,77357,77360,77362],{"class":38,"line":11266},[36,77336,75084],{"class":50},[36,77338,59578],{"class":46},[36,77340,222],{"class":50},[36,77342,2251],{"class":110},[36,77344,2633],{"class":42},[36,77346,77284],{"class":73},[36,77348,1970],{"class":42},[36,77350,2251],{"class":110},[36,77352,2225],{"class":50},[36,77354,76576],{"class":46},[36,77356,222],{"class":50},[36,77358,77359],{"class":110},"'c'",[36,77361,76584],{"class":50},[36,77363,76587],{"class":124},[36,77365,77366,77368,77370,77372,77374,77376,77378,77380,77382,77384,77387,77389],{"class":38,"line":11271},[36,77367,75084],{"class":50},[36,77369,59578],{"class":46},[36,77371,222],{"class":50},[36,77373,2251],{"class":110},[36,77375,77284],{"class":73},[36,77377,2251],{"class":110},[36,77379,2225],{"class":50},[36,77381,76576],{"class":46},[36,77383,222],{"class":50},[36,77385,77386],{"class":110},"'ab'",[36,77388,76584],{"class":50},[36,77390,76587],{"class":124},[36,77392,77393,77395,77397,77399,77401,77403,77405,77407,77409,77411,77413,77415,77417,77419],{"class":38,"line":11280},[36,77394,75084],{"class":50},[36,77396,59578],{"class":46},[36,77398,222],{"class":50},[36,77400,2251],{"class":110},[36,77402,2633],{"class":42},[36,77404,77284],{"class":73},[36,77406,1970],{"class":42},[36,77408,2251],{"class":110},[36,77410,2225],{"class":50},[36,77412,76576],{"class":46},[36,77414,222],{"class":50},[36,77416,77386],{"class":110},[36,77418,76584],{"class":50},[36,77420,77421],{"class":124},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[36,77423,77424,77426,77428,77430,77432,77434,77436,77439,77441,77443,77445,77447,77449,77451],{"class":38,"line":11285},[36,77425,75084],{"class":50},[36,77427,59578],{"class":46},[36,77429,222],{"class":50},[36,77431,2251],{"class":110},[36,77433,2633],{"class":42},[36,77435,77284],{"class":73},[36,77437,77438],{"class":42},"{2}$",[36,77440,2251],{"class":110},[36,77442,2225],{"class":50},[36,77444,76576],{"class":46},[36,77446,222],{"class":50},[36,77448,77386],{"class":110},[36,77450,76584],{"class":50},[36,77452,77453],{"class":124},"\u002F\u002Ftrue   可以选两个\n",[36,77455,77456,77458,77460,77462,77464,77466,77469,77471,77473,77475,77477,77479,77482,77484],{"class":38,"line":11291},[36,77457,75084],{"class":50},[36,77459,59578],{"class":46},[36,77461,222],{"class":50},[36,77463,2251],{"class":110},[36,77465,2633],{"class":42},[36,77467,77468],{"class":73},"[a-z]",[36,77470,1970],{"class":42},[36,77472,2251],{"class":110},[36,77474,2225],{"class":50},[36,77476,76576],{"class":46},[36,77478,222],{"class":50},[36,77480,77481],{"class":110},"'p'",[36,77483,76640],{"class":50},[36,77485,77486],{"class":124},"\u002F\u002Ftrue   依然只能选一个\n",[36,77488,77489,77491,77493,77495,77497,77499,77502,77504,77506,77508,77510,77512,77514,77516],{"class":38,"line":11312},[36,77490,75084],{"class":50},[36,77492,59578],{"class":46},[36,77494,222],{"class":50},[36,77496,2251],{"class":110},[36,77498,2633],{"class":42},[36,77500,77501],{"class":73},"[A-Z]",[36,77503,1970],{"class":42},[36,77505,2251],{"class":110},[36,77507,2225],{"class":50},[36,77509,76576],{"class":46},[36,77511,222],{"class":50},[36,77513,77481],{"class":110},[36,77515,76640],{"class":50},[36,77517,76710],{"class":124},[36,77519,77520,77522,77524,77526,77528,77530,77532,77534,77536,77538,77540,77542,77545,77547],{"class":38,"line":11318},[36,77521,75084],{"class":50},[36,77523,59578],{"class":46},[36,77525,222],{"class":50},[36,77527,2251],{"class":110},[36,77529,2633],{"class":42},[36,77531,77501],{"class":73},[36,77533,1970],{"class":42},[36,77535,2251],{"class":110},[36,77537,2225],{"class":50},[36,77539,76576],{"class":46},[36,77541,222],{"class":50},[36,77543,77544],{"class":110},"'P'",[36,77546,76640],{"class":50},[36,77548,76587],{"class":124},[36,77550,77551,77553,77555,77557,77559,77561,77564,77566,77568,77570,77572,77574,77577,77579],{"class":38,"line":11332},[36,77552,75084],{"class":50},[36,77554,59578],{"class":46},[36,77556,222],{"class":50},[36,77558,2251],{"class":110},[36,77560,2633],{"class":42},[36,77562,77563],{"class":73},"[0-9]",[36,77565,1970],{"class":42},[36,77567,2251],{"class":110},[36,77569,2225],{"class":50},[36,77571,76576],{"class":46},[36,77573,222],{"class":50},[36,77575,77576],{"class":110},"'0'",[36,77578,76640],{"class":50},[36,77580,76587],{"class":124},[36,77582,77583,77585,77587,77589,77591,77593,77596,77598,77600,77602,77604,77606,77608,77610],{"class":38,"line":11338},[36,77584,75084],{"class":50},[36,77586,59578],{"class":46},[36,77588,222],{"class":50},[36,77590,2251],{"class":110},[36,77592,2633],{"class":42},[36,77594,77595],{"class":73},"[a-zA-Z0-9]",[36,77597,1970],{"class":42},[36,77599,2251],{"class":110},[36,77601,2225],{"class":50},[36,77603,76576],{"class":46},[36,77605,222],{"class":50},[36,77607,77481],{"class":110},[36,77609,76584],{"class":50},[36,77611,76587],{"class":124},[36,77613,77614,77616,77618],{"class":38,"line":11365},[36,77615,53748],{"class":50},[36,77617,53144],{"class":52631},[36,77619,52638],{"class":50},[36,77621,77622,77624,77626],{"class":38,"line":11374},[36,77623,53116],{"class":50},[36,77625,53131],{"class":52631},[36,77627,52638],{"class":50},[36,77629,77630],{"class":38,"line":11380},[36,77631,58],{"emptyLinePlaceholder":57},[36,77633,77634,77636,77638],{"class":38,"line":11388},[36,77635,53116],{"class":50},[36,77637,51966],{"class":52631},[36,77639,52638],{"class":50},[23327,77641,77643],{"id":77642},"_3624-修饰符","3.6.2.4 修饰符",[19,77645,77646],{},[2992,77647],{"alt":31,"src":77648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77650,77651],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77653,77654],{},[2992,77655],{"alt":31,"src":77656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,77658,77660],{"className":51964,"code":77659,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n  \u003Cscript>\n    console.log(\u002F^java$\u002F.test('java')) \u002F\u002Ftrue\n    console.log(\u002F^java$\u002F.test('Java')) \u002F\u002Ffalse\n    \u002F\u002F 不区分大小写、\n    console.log(\u002F^java$\u002Fi.test('Java')) \u002F\u002Ftrue\n    const str = 'java是一门编程语言，学完java工资很高'\n    const result = str.replace(\u002Fjava\u002Fig, '前端')\n    console.log(result)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[33,77661,77662,77672,77686,77694,77708,77728,77740,77748,77756,77764,77796,77827,77832,77864,77875,77908,77917,77925,77933],{"__ignoreMap":31},[36,77663,77664,77666,77668,77670],{"class":38,"line":39},[36,77665,52628],{"class":50},[36,77667,52632],{"class":52631},[36,77669,52635],{"class":46},[36,77671,52638],{"class":50},[36,77673,77674,77676,77678,77680,77682,77684],{"class":38,"line":54},[36,77675,2577],{"class":50},[36,77677,51966],{"class":52631},[36,77679,52647],{"class":46},[36,77681,70],{"class":50},[36,77683,52652],{"class":110},[36,77685,52638],{"class":50},[36,77687,77688,77690,77692],{"class":38,"line":61},[36,77689,2577],{"class":50},[36,77691,52665],{"class":52631},[36,77693,52638],{"class":50},[36,77695,77696,77698,77700,77702,77704,77706],{"class":38,"line":80},[36,77697,53475],{"class":50},[36,77699,52675],{"class":52631},[36,77701,52678],{"class":46},[36,77703,70],{"class":50},[36,77705,52683],{"class":110},[36,77707,52638],{"class":50},[36,77709,77710,77712,77714,77716,77718,77720,77722,77724,77726],{"class":38,"line":96},[36,77711,53475],{"class":50},[36,77713,52675],{"class":52631},[36,77715,16249],{"class":46},[36,77717,70],{"class":50},[36,77719,52722],{"class":110},[36,77721,52702],{"class":46},[36,77723,70],{"class":50},[36,77725,52729],{"class":110},[36,77727,52638],{"class":50},[36,77729,77730,77732,77734,77736,77738],{"class":38,"line":101},[36,77731,53475],{"class":50},[36,77733,52738],{"class":52631},[36,77735,52741],{"class":50},[36,77737,52738],{"class":52631},[36,77739,52638],{"class":50},[36,77741,77742,77744,77746],{"class":38,"line":128},[36,77743,53116],{"class":50},[36,77745,52665],{"class":52631},[36,77747,52638],{"class":50},[36,77749,77750,77752,77754],{"class":38,"line":149},[36,77751,2577],{"class":50},[36,77753,53131],{"class":52631},[36,77755,52638],{"class":50},[36,77757,77758,77760,77762],{"class":38,"line":154},[36,77759,53475],{"class":50},[36,77761,53144],{"class":52631},[36,77763,52638],{"class":50},[36,77765,77766,77768,77770,77772,77774,77776,77779,77781,77783,77785,77787,77789,77792,77794],{"class":38,"line":167},[36,77767,75084],{"class":50},[36,77769,59578],{"class":46},[36,77771,222],{"class":50},[36,77773,2251],{"class":110},[36,77775,2633],{"class":42},[36,77777,77778],{"class":49308},"java",[36,77780,1970],{"class":42},[36,77782,2251],{"class":110},[36,77784,2225],{"class":50},[36,77786,76576],{"class":46},[36,77788,222],{"class":50},[36,77790,77791],{"class":110},"'java'",[36,77793,77086],{"class":50},[36,77795,76587],{"class":124},[36,77797,77798,77800,77802,77804,77806,77808,77810,77812,77814,77816,77818,77820,77823,77825],{"class":38,"line":172},[36,77799,75084],{"class":50},[36,77801,59578],{"class":46},[36,77803,222],{"class":50},[36,77805,2251],{"class":110},[36,77807,2633],{"class":42},[36,77809,77778],{"class":49308},[36,77811,1970],{"class":42},[36,77813,2251],{"class":110},[36,77815,2225],{"class":50},[36,77817,76576],{"class":46},[36,77819,222],{"class":50},[36,77821,77822],{"class":110},"'Java'",[36,77824,77086],{"class":50},[36,77826,76710],{"class":124},[36,77828,77829],{"class":38,"line":192},[36,77830,77831],{"class":124},"    \u002F\u002F 不区分大小写、\n",[36,77833,77834,77836,77838,77840,77842,77844,77846,77848,77850,77852,77854,77856,77858,77860,77862],{"class":38,"line":211},[36,77835,75084],{"class":50},[36,77837,59578],{"class":46},[36,77839,222],{"class":50},[36,77841,2251],{"class":110},[36,77843,2633],{"class":42},[36,77845,77778],{"class":49308},[36,77847,1970],{"class":42},[36,77849,2251],{"class":110},[36,77851,2108],{"class":42},[36,77853,2225],{"class":50},[36,77855,76576],{"class":46},[36,77857,222],{"class":50},[36,77859,77822],{"class":110},[36,77861,77086],{"class":50},[36,77863,76587],{"class":124},[36,77865,77866,77868,77870,77872],{"class":38,"line":216},[36,77867,1498],{"class":42},[36,77869,75250],{"class":73},[36,77871,14893],{"class":42},[36,77873,77874],{"class":110}," 'java是一门编程语言，学完java工资很高'\n",[36,77876,77877,77879,77882,77884,77887,77890,77892,77894,77896,77898,77901,77903,77906],{"class":38,"line":231},[36,77878,1498],{"class":42},[36,77880,77881],{"class":73}," result",[36,77883,14893],{"class":42},[36,77885,77886],{"class":50}," str.",[36,77888,77889],{"class":46},"replace",[36,77891,222],{"class":50},[36,77893,2251],{"class":110},[36,77895,77778],{"class":49308},[36,77897,2251],{"class":110},[36,77899,77900],{"class":42},"ig",[36,77902,477],{"class":50},[36,77904,77905],{"class":110},"'前端'",[36,77907,1680],{"class":50},[36,77909,77910,77912,77914],{"class":38,"line":236},[36,77911,75084],{"class":50},[36,77913,59578],{"class":46},[36,77915,77916],{"class":50},"(result)\n",[36,77918,77919,77921,77923],{"class":38,"line":247},[36,77920,53748],{"class":50},[36,77922,53144],{"class":52631},[36,77924,52638],{"class":50},[36,77926,77927,77929,77931],{"class":38,"line":637},[36,77928,53116],{"class":50},[36,77930,53131],{"class":52631},[36,77932,52638],{"class":50},[36,77934,77935,77937,77939],{"class":38,"line":646},[36,77936,53116],{"class":50},[36,77938,51966],{"class":52631},[36,77940,52638],{"class":50},[1592,77942,77943],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":31,"searchDepth":54,"depth":54,"links":77945},[77946,77956,77968,77985,77992,78000],{"id":54691,"depth":54,"text":54692,"children":77947},[77948,77949,77950,77951,77952,77953,77954,77955],{"id":54695,"depth":61,"text":54696},{"id":54728,"depth":61,"text":54729},{"id":54767,"depth":61,"text":54768},{"id":54925,"depth":61,"text":54926},{"id":54973,"depth":61,"text":54974},{"id":55110,"depth":61,"text":55111},{"id":55432,"depth":61,"text":55433},{"id":58420,"depth":61,"text":58421},{"id":58448,"depth":54,"text":58449,"children":77957},[77958,77959,77960,77961,77962,77963,77964,77965,77966,77967],{"id":58452,"depth":61,"text":58453},{"id":58475,"depth":61,"text":58476},{"id":59390,"depth":61,"text":59391},{"id":60080,"depth":61,"text":60081},{"id":60362,"depth":61,"text":60363},{"id":64523,"depth":61,"text":64524},{"id":64693,"depth":61,"text":64694},{"id":64821,"depth":61,"text":64822},{"id":64846,"depth":61,"text":64847},{"id":66235,"depth":61,"text":66236},{"id":67388,"depth":54,"text":67389,"children":77969},[77970,77971,77972,77973,77974,77975,77976,77977,77978,77979,77980,77981,77982,77983,77984],{"id":67392,"depth":61,"text":67393},{"id":68046,"depth":61,"text":68047},{"id":69741,"depth":61,"text":69742},{"id":69782,"depth":61,"text":69783},{"id":69824,"depth":61,"text":69825},{"id":69838,"depth":61,"text":69839},{"id":69887,"depth":61,"text":69888},{"id":69899,"depth":61,"text":69900},{"id":69914,"depth":61,"text":69915},{"id":69950,"depth":61,"text":69951},{"id":70031,"depth":61,"text":70032},{"id":70159,"depth":61,"text":70160},{"id":70171,"depth":61,"text":70172},{"id":70190,"depth":61,"text":70191},{"id":72301,"depth":61,"text":72302},{"id":72320,"depth":54,"text":72321,"children":77986},[77987,77988,77989,77990,77991],{"id":72341,"depth":61,"text":72342},{"id":72361,"depth":61,"text":72362},{"id":72410,"depth":61,"text":72411},{"id":72535,"depth":61,"text":72536},{"id":72716,"depth":61,"text":72717},{"id":72734,"depth":54,"text":72735,"children":77993},[77994,77995,77996,77997,77998,77999],{"id":72749,"depth":61,"text":72750},{"id":72808,"depth":61,"text":72809},{"id":72832,"depth":61,"text":72833},{"id":73152,"depth":61,"text":73153},{"id":73184,"depth":61,"text":73185},{"id":73207,"depth":61,"text":73208},{"id":76275,"depth":54,"text":76276,"children":78001},[78002,78003],{"id":76309,"depth":61,"text":76310},{"id":76348,"depth":61,"text":76349},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54663,"description":24706},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78010,"title":78011,"body":78012,"description":24706,"extension":1603,"meta":94149,"navigation":57,"path":94150,"seo":94151,"stem":94152,"__hash__":94153},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78013,"toc":94085},[78014,78017,78020,78024,78028,78033,78038,78049,78053,78058,78061,78065,78068,78073,78077,78081,78084,78089,78092,78096,78099,78107,78110,78114,78119,78124,78127,78131,78136,78141,78144,78148,78153,78156,78161,78164,78169,78172,78177,78182,78185,78188,78192,78197,78202,78205,78209,78213,78216,78219,78222,78226,78230,78235,78240,78243,78247,78252,78257,78260,78263,78266,78269,78272,78275,78278,78281,78284,78289,78293,78298,78303,78306,78309,78312,78315,78318,78321,78324,78327,78331,78335,78338,78341,78344,78349,78351,78354,78357,78360,78363,78366,78369,78372,78375,78378,78381,78384,78387,78390,78395,78400,78405,78408,78412,78415,78420,78424,78426,78437,78442,78543,78546,78549,78552,78555,78558,78561,78564,78567,78569,78572,78575,78578,78581,78584,78586,78589,78592,78595,78598,78601,78604,78606,78609,78611,78613,78616,78620,78624,78627,78630,78633,78636,78639,78642,78645,78648,78651,78656,78776,78779,78782,78787,78790,78793,78796,78799,78804,78807,78810,78813,78816,78821,78824,78924,78989,79063,79067,79070,79073,79077,79080,79094,79123,79126,79129,79132,79135,79138,79141,79144,79146,79149,79152,79155,79158,79162,79167,79171,79176,79251,79254,79437,79440,79443,79446,79449,79452,79454,79457,79460,79463,79466,79469,79472,79474,79478,79481,79486,79489,79492,79495,79498,79500,79505,79508,79511,79514,79517,79519,79524,79527,79530,79532,79534,79537,79541,79544,79547,79552,79555,79558,79561,79611,79616,79620,79625,79628,79697,79700,79709,79713,79718,79721,79724,79732,79735,79752,81554,81558,81562,81567,81570,81574,81580,81586,81738,81743,81748,81751,81754,81757,81760,81763,81766,81769,81772,81775,81778,81781,81784,81789,81793,81796,81807,81811,81816,81819,81822,81825,81828,81831,81833,81836,81839,81842,81845,81847,81864,81867,81871,81874,81879,81884,81887,81890,81894,81897,81900,81909,81912,81916,81919,81924,81929,81996,82000,82003,82006,82011,82016,82102,82107,82111,82114,82117,82132,82135,82140,82144,82149,82258,82261,82272,82422,82426,82431,82540,82544,82549,82554,82559,82562,82569,82589,82625,82789,82794,82797,82802,82809,82812,82815,82818,82877,82933,82989,82993,82998,83313,83316,83320,83323,83328,83437,83442,83446,83451,83455,83526,83530,83532,83535,83538,83576,83852,83856,83873,83939,83973,83977,83980,83985,84014,84021,84030,84035,84050,84055,84064,84067,84204,84208,84270,84274,84279,84524,84528,84533,84536,84539,84542,84545,84549,84554,86135,86139,86143,86149,86152,86157,86161,86164,86169,86172,86183,86187,86192,86196,86201,86206,86209,86214,86218,86222,86225,86230,86235,86238,86241,86244,86366,86371,86473,86476,86479,86483,86488,86660,86665,86669,86672,86677,86743,86748,86751,86882,86885,86890,86893,86896,86987,86992,86995,86998,87001,87004,87009,87014,87017,87022,87027,87032,87036,87039,87042,87047,87052,87057,87062,87116,87119,87122,87127,87130,87133,87138,87143,87148,87152,87157,87171,87176,87179,87184,87188,87193,87198,87203,87208,87213,87218,87223,87228,87231,87235,87240,87243,87246,87249,87254,87259,87262,87265,87269,87272,87275,87280,87285,87290,87295,87298,87303,87308,87369,87374,87377,87382,88623,88628,88632,88636,88641,88644,88649,88654,88657,88662,88664,88669,88673,88676,88679,88690,88694,88699,88704,88759,88764,88769,88774,88985,88990,88994,88999,89002,89004,89007,89010,89457,89462,89469,89475,89478,89481,89745,89750,89754,90019,90024,90028,90033,90038,90043,90048,90379,90382,90387,90392,90395,90399,90403,90408,90413,90418,90423,90428,90433,90437,90440,90445,90450,90453,90527,90532,90537,90542,90544,90547,90917,90922,90927,90932,90935,90938,91040,91045,91050,91153,91157,91162,91166,91170,91175,91180,91183,91188,91191,91194,91587,91592,91595,91598,91601,91604,92124,92128,92133,92138,92143,92146,92151,92154,92157,92539,92544,92546,92548,92551,92554,93066,93070,93131,93134,93137,93140,93144,93147,93152,93157,94082],[10,78015,78011],{"id":78016},"_4js进阶",[19,78018,78019],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78021,78023],{"id":78022},"_41-作用域","4.1 作用域",[1645,78025,78027],{"id":78026},"_411-局部作用域","4.1.1 局部作用域",[19,78029,78030],{},[2992,78031],{"alt":31,"src":78032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78034,78035],{},[2992,78036],{"alt":31,"src":78037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2674,78039,78040,78043,78046],{},[259,78041,78042],{},"函数作用域在函数内部",[259,78044,78045],{},"块级作用域在{}",[259,78047,78048],{},"对象的那个{}不是作用域，不是块作用域",[1645,78050,78052],{"id":78051},"_412-全局作用域","4.1.2 全局作用域",[19,78054,78055],{},[2992,78056],{"alt":31,"src":78057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78059,78060],{},"window.a=10不要这样写",[1645,78062,78064],{"id":78063},"_413-作用域链","4.1.3 作用域链",[19,78066,78067],{},"变量查找机制",[19,78069,78070],{},[2992,78071],{"alt":31,"src":78072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78074,78076],{"id":78075},"_42-垃圾回收机制","4.2 垃圾回收机制",[1645,78078,78080],{"id":78079},"_421-大体介绍","4.2.1 大体介绍",[19,78082,78083],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78085,78086],{},[2992,78087],{"alt":31,"src":78088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78090,78091],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[1645,78093,78095],{"id":78094},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78097,78098],{},"堆栈空间分配区别：",[256,78100,78101,78104],{},[259,78102,78103],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[259,78105,78106],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78108,78109],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23327,78111,78113],{"id":78112},"_4221-引用计数","4.2.2.1 引用计数",[19,78115,78116],{},[2992,78117],{"alt":31,"src":78118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78120,78121],{},[2992,78122],{"alt":31,"src":78123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78125,78126],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23327,78128,78130],{"id":78129},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78132,78133],{},[2992,78134],{"alt":31,"src":78135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78137,78138],{},[2992,78139],{"alt":31,"src":78140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78142,78143],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78145,78147],{"id":78146},"_43-闭包","4.3 闭包",[19,78149,78150],{},[2992,78151],{"alt":31,"src":78152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78154,78155],{},"闭包：内层函数+外层函数的变量",[19,78157,78158],{},[2992,78159],{"alt":31,"src":78160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78162,78163],{},"closure就是闭包",[19,78165,78166],{},[2992,78167],{"alt":31,"src":78168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78170,78171],{},"内层函数必须包含外层函数的变量才是闭包",[19,78173,78174],{},[2992,78175],{"alt":31,"src":78176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78178,78179],{},[2992,78180],{"alt":31,"src":78181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78183,78184],{},"闭包可能会引起内存泄漏",[19,78186,78187],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78189,78191],{"id":78190},"_44-变量提升","4.4 变量提升",[19,78193,78194],{},[2992,78195],{"alt":31,"src":78196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78198,78199],{},[2992,78200],{"alt":31,"src":78201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78203,78204],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78206,78208],{"id":78207},"_45-函数进阶","4.5 函数进阶",[1645,78210,78212],{"id":78211},"_451-函数提升","4.5.1 函数提升",[19,78214,78215],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78217,78218],{},"只提升函数声明，不提升函数调用",[53144,78220,78221],{},"\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",[1645,78223,78225],{"id":78224},"_452-函数参数","4.5.2 函数参数",[23327,78227,78229],{"id":78228},"_4521-动态参数","4.5.2.1 动态参数",[19,78231,78232],{},[2992,78233],{"alt":31,"src":78234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78236,78237],{},[2992,78238],{"alt":31,"src":78239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78241,78242],{},"箭头函数里边没有arguments",[23327,78244,78246],{"id":78245},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78248,78249],{},[2992,78250],{"alt":31,"src":78251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78253,78254],{},[2992,78255],{"alt":31,"src":78256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78258,78259],{},"剩余参数使用的时候不需要写...",[19,78261,78262],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78264,78265],{},"  function getSum(a,b,...arr) {",[19,78267,78268],{},"  console.log(11)",[19,78270,78271],{},"  }",[19,78273,78274],{},"  getSum(1,2,3,4)",[19,78276,78277],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78279,78280],{},"  getSum(1,2)",[19,78282,78283],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78285,78286],{},[2992,78287],{"alt":31,"src":78288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23327,78290,78292],{"id":78291},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78294,78295],{},[2992,78296],{"alt":31,"src":78297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78299,78300],{},[2992,78301],{"alt":31,"src":78302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78304,78305],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78307,78308],{},"展开运算符可以用于数组之间的合并：",[19,78310,78311],{},"const arr1 = [1, 2, 3]",[19,78313,78314],{},"const arr2 = [3, 4, 5]",[19,78316,78317],{},"const arr = [...arr1, ...arr2]",[19,78319,78320],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78322,78323],{},"剩余参数：函数参数使用，得到真数组",[19,78325,78326],{},"展开运算符：数组中使用，数组展开",[1645,78328,78330],{"id":78329},"_453-箭头函数","4.5.3 箭头函数",[23327,78332,78334],{"id":78333},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78336,78337],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78339,78340],{},"它不是万能的！！！",[19,78342,78343],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78345,78346],{},[2992,78347],{"alt":31,"src":78348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78350,1703],{},[19,78352,78353],{},"① 只有一个形参的时候，可以省略小括号：",[19,78355,78356],{},"const fn=x=>{console.log(x)}",[19,78358,78359],{},"② 只有一行代码时可以省略大括号：",[19,78361,78362],{},"const fn=x=>console.log(11)",[19,78364,78365],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78367,78368],{},"const fn=x=>x+x",[19,78370,78371],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78373,78374],{},"⑤ 阻止表单默认提交：",[19,78376,78377],{},"const form = document.querySelector('form')",[19,78379,78380],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78382,78383],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78385,78386],{},"const fn=uname=>({uname:uname})",[19,78388,78389],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78391,78392],{},[2992,78393],{"alt":31,"src":78394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78396,78397],{},[2992,78398],{"alt":31,"src":78399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78401,78402],{},[2992,78403],{"alt":31,"src":78404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78406,78407],{},"一定不要忘记用()，有()就理解为自带return",[23327,78409,78411],{"id":78410},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78413,78414],{},"箭头函数是没有动态参数的arguments",[19,78416,78417],{},[2992,78418],{"alt":31,"src":78419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23327,78421,78423],{"id":78422},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78425,1388],{},[256,78427,78428,78431,78434],{},[259,78429,78430],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[259,78432,78433],{},"事件回调函数使用箭头函数时，this 为全局的 window",[259,78435,78436],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78438,78439],{},[2992,78440],{"alt":31,"src":78441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,78443,78445],{"className":54398,"code":78444,"language":54400,"meta":31,"style":31},"  \u003Cscript>\n    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n    console.log(this) \u002F\u002F指向window\n    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n    function fn() {\n      console.log(this)  \u002F\u002F指向window\n    }\n    window.fn()\u002F\u002F实际写法，调用时可以省略window\n\n    const obj = {\n      name: 'andy',\n      sayHai: function () {\n        console.log(this)\n      }\n    }\n    obj.sayHai() \u002F\u002Fthis指向obj\n    \u002F\u002F 2.箭头函数的this\n    const fn = () => console.log(this)\n  \u003C\u002Fscript>\n",[33,78446,78447,78455,78460,78465,78470,78475,78480,78484,78489,78493,78497,78502,78507,78512,78516,78520,78525,78530,78535],{"__ignoreMap":31},[36,78448,78449,78451,78453],{"class":38,"line":39},[36,78450,53475],{"class":50},[36,78452,53144],{"class":52631},[36,78454,52638],{"class":50},[36,78456,78457],{"class":38,"line":54},[36,78458,78459],{"class":50},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[36,78461,78462],{"class":38,"line":61},[36,78463,78464],{"class":50},"    console.log(this) \u002F\u002F指向window\n",[36,78466,78467],{"class":38,"line":80},[36,78468,78469],{"class":50},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[36,78471,78472],{"class":38,"line":96},[36,78473,78474],{"class":50},"    function fn() {\n",[36,78476,78477],{"class":38,"line":101},[36,78478,78479],{"class":50},"      console.log(this)  \u002F\u002F指向window\n",[36,78481,78482],{"class":38,"line":128},[36,78483,3693],{"class":50},[36,78485,78486],{"class":38,"line":149},[36,78487,78488],{"class":50},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[36,78490,78491],{"class":38,"line":154},[36,78492,58],{"emptyLinePlaceholder":57},[36,78494,78495],{"class":38,"line":167},[36,78496,72854],{"class":50},[36,78498,78499],{"class":38,"line":172},[36,78500,78501],{"class":50},"      name: 'andy',\n",[36,78503,78504],{"class":38,"line":192},[36,78505,78506],{"class":50},"      sayHai: function () {\n",[36,78508,78509],{"class":38,"line":211},[36,78510,78511],{"class":50},"        console.log(this)\n",[36,78513,78514],{"class":38,"line":216},[36,78515,53729],{"class":50},[36,78517,78518],{"class":38,"line":231},[36,78519,3693],{"class":50},[36,78521,78522],{"class":38,"line":236},[36,78523,78524],{"class":50},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[36,78526,78527],{"class":38,"line":247},[36,78528,78529],{"class":50},"    \u002F\u002F 2.箭头函数的this\n",[36,78531,78532],{"class":38,"line":637},[36,78533,78534],{"class":50},"    const fn = () => console.log(this)\n",[36,78536,78537,78539,78541],{"class":38,"line":646},[36,78538,53748],{"class":50},[36,78540,53144],{"class":52631},[36,78542,52638],{"class":50},[19,78544,78545],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78547,78548],{},"const fn = () => console.log(this)",[19,78550,78551],{},"fn() \u002F\u002F指向window",[19,78553,78554],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78556,78557],{},"①",[19,78559,78560],{},"const obj = {",[19,78562,78563],{},"uname: 'pink老师',",[19,78565,78566],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78568,2613],{},[19,78570,78571],{},"调用对象里边的函数",[19,78573,78574],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78576,78577],{},"obj.sayHai()",[19,78579,78580],{},"②",[19,78582,78583],{},"const obj1 = {",[19,78585,78563],{},[19,78587,78588],{},"sayHai: function () {",[19,78590,78591],{},"let i = 10",[19,78593,78594],{},"const count = () => {",[19,78596,78597],{},"console.log(this)",[19,78599,78600],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78602,78603],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78605,2613],{},[19,78607,78608],{},"count()",[19,78610,2613],{},[19,78612,2613],{},[19,78614,78615],{},"obj1.sayHai()",[14,78617,78619],{"id":78618},"_46-解构赋值","4.6 解构赋值",[1645,78621,78623],{"id":78622},"_461-数组解构","4.6.1 数组解构",[19,78625,78626],{},"以前要是使用数组中的值的话：",[19,78628,78629],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78631,78632],{},"const arr=[100,60,80]",[19,78634,78635],{},"const max=arr[0]",[19,78637,78638],{},"const min=arr[1]",[19,78640,78641],{},"const avg=arr[2]",[19,78643,78644],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78646,78647],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78649,78650],{},"这个写法就类似于上边的那种用很多const的方法",[19,78652,78653],{},[2992,78654],{"alt":31,"src":78655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,78657,78659],{"className":51964,"code":78658,"language":51966,"meta":31,"style":31},"①变量之间交换值:\nlet a=1\nlet b=2;\n必须加这行代码，不然就会报错\n[b,a]=[a,b]\n\n\n可以写成下面的方式：\nlet a=1\nlet b=2\n;[b,a]=[a,b]\n\n②排序\nconst arr1 = [2, 6, 4, 3, 5, 1]\nfor (let i = 0; i \u003C arr1.length; i++) {\n   for (let j = 0; j \u003C arr1.length - 1; j++) {\n      if (arr1[j] > arr1[j + 1]) {\n         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n       }\n   }\n}\nconsole.log(arr1)\n",[33,78660,78661,78666,78671,78676,78681,78686,78690,78694,78699,78703,78708,78713,78717,78722,78727,78738,78748,78753,78758,78763,78767,78771],{"__ignoreMap":31},[36,78662,78663],{"class":38,"line":39},[36,78664,78665],{"class":50},"①变量之间交换值:\n",[36,78667,78668],{"class":38,"line":54},[36,78669,78670],{"class":50},"let a=1\n",[36,78672,78673],{"class":38,"line":61},[36,78674,78675],{"class":50},"let b=2;\n",[36,78677,78678],{"class":38,"line":80},[36,78679,78680],{"class":50},"必须加这行代码，不然就会报错\n",[36,78682,78683],{"class":38,"line":96},[36,78684,78685],{"class":50},"[b,a]=[a,b]\n",[36,78687,78688],{"class":38,"line":101},[36,78689,58],{"emptyLinePlaceholder":57},[36,78691,78692],{"class":38,"line":128},[36,78693,58],{"emptyLinePlaceholder":57},[36,78695,78696],{"class":38,"line":149},[36,78697,78698],{"class":50},"可以写成下面的方式：\n",[36,78700,78701],{"class":38,"line":154},[36,78702,78670],{"class":50},[36,78704,78705],{"class":38,"line":167},[36,78706,78707],{"class":50},"let b=2\n",[36,78709,78710],{"class":38,"line":172},[36,78711,78712],{"class":50},";[b,a]=[a,b]\n",[36,78714,78715],{"class":38,"line":192},[36,78716,58],{"emptyLinePlaceholder":57},[36,78718,78719],{"class":38,"line":211},[36,78720,78721],{"class":50},"②排序\n",[36,78723,78724],{"class":38,"line":216},[36,78725,78726],{"class":50},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[36,78728,78729,78732,78735],{"class":38,"line":231},[36,78730,78731],{"class":50},"for (let i = 0; i ",[36,78733,2577],{"class":78734},"s7hpK",[36,78736,78737],{"class":50}," arr1.length; i++) {\n",[36,78739,78740,78743,78745],{"class":38,"line":236},[36,78741,78742],{"class":50},"   for (let j = 0; j ",[36,78744,2577],{"class":78734},[36,78746,78747],{"class":50}," arr1.length - 1; j++) {\n",[36,78749,78750],{"class":38,"line":247},[36,78751,78752],{"class":50},"      if (arr1[j] > arr1[j + 1]) {\n",[36,78754,78755],{"class":38,"line":637},[36,78756,78757],{"class":50},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[36,78759,78760],{"class":38,"line":646},[36,78761,78762],{"class":50},"       }\n",[36,78764,78765],{"class":38,"line":655},[36,78766,5798],{"class":50},[36,78768,78769],{"class":38,"line":660},[36,78770,250],{"class":50},[36,78772,78773],{"class":38,"line":665},[36,78774,78775],{"class":50},"console.log(arr1)\n",[19,78777,78778],{},"数组解构的细节：",[19,78780,78781],{},"①变量多，单元值少",[19,78783,78784],{},[2992,78785],{"alt":31,"src":78786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78788,78789],{},"防止出现undefined的方法：",[19,78791,78792],{},"const [a=0,b=0] =[1]",[19,78794,78795],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78797,78798],{},"②变量少，单元值多",[19,78800,78801],{},[2992,78802],{"alt":31,"src":78803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78805,78806],{},"此时可以使用剩余参数来接收多余的值",[19,78808,78809],{},"const [a,b,...c]=[1,2,3,4]",[19,78811,78812],{},"console.log(c) 输出[3,4]",[19,78814,78815],{},"③可以按需导入，忽略某些返回值",[19,78817,78818],{},[2992,78819],{"alt":31,"src":78820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78822,78823],{},"④支持多维数组的结构",[26,78825,78829],{"className":78826,"code":78827,"language":78828,"meta":31,"style":31},"language-cpp shiki shiki-themes github-light github-dark","const arr = [1, 2, [3, 4]]\nconsole.log(arr[0])  \u002F\u002F1\nconsole.log(arr[1])  \u002F\u002F2\nconsole.log(arr[2])  \u002F\u002F[3,4]\nconsole.log(arr[2][0])  \u002F\u002F3\n","cpp",[33,78830,78831,78859,78875,78890,78905],{"__ignoreMap":31},[36,78832,78833,78835,78837,78839,78841,78843,78845,78847,78850,78852,78854,78856],{"class":38,"line":39},[36,78834,1437],{"class":42},[36,78836,53164],{"class":50},[36,78838,70],{"class":42},[36,78840,53557],{"class":50},[36,78842,1885],{"class":73},[36,78844,477],{"class":50},[36,78846,1747],{"class":73},[36,78848,78849],{"class":50},", [",[36,78851,1741],{"class":73},[36,78853,477],{"class":50},[36,78855,1961],{"class":73},[36,78857,78858],{"class":50},"]]\n",[36,78860,78861,78864,78866,78868,78870,78872],{"class":38,"line":54},[36,78862,78863],{"class":50},"console.",[36,78865,59578],{"class":46},[36,78867,5342],{"class":50},[36,78869,1859],{"class":73},[36,78871,5705],{"class":50},[36,78873,78874],{"class":124},"  \u002F\u002F1\n",[36,78876,78877,78879,78881,78883,78885,78887],{"class":38,"line":61},[36,78878,78863],{"class":50},[36,78880,59578],{"class":46},[36,78882,5342],{"class":50},[36,78884,1885],{"class":73},[36,78886,5705],{"class":50},[36,78888,78889],{"class":124},"  \u002F\u002F2\n",[36,78891,78892,78894,78896,78898,78900,78902],{"class":38,"line":80},[36,78893,78863],{"class":50},[36,78895,59578],{"class":46},[36,78897,5342],{"class":50},[36,78899,1747],{"class":73},[36,78901,5705],{"class":50},[36,78903,78904],{"class":124},"  \u002F\u002F[3,4]\n",[36,78906,78907,78909,78911,78913,78915,78917,78919,78921],{"class":38,"line":96},[36,78908,78863],{"class":50},[36,78910,59578],{"class":46},[36,78912,5342],{"class":50},[36,78914,1747],{"class":73},[36,78916,6390],{"class":50},[36,78918,1859],{"class":73},[36,78920,5705],{"class":50},[36,78922,78923],{"class":124},"  \u002F\u002F3\n",[26,78925,78927],{"className":78826,"code":78926,"language":78828,"meta":31,"style":31},"const [a, b, c] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F[3,4]\n",[33,78928,78929,78956,78967,78978],{"__ignoreMap":31},[36,78930,78931,78933,78936,78938,78940,78942,78944,78946,78948,78950,78952,78954],{"class":38,"line":39},[36,78932,1437],{"class":42},[36,78934,78935],{"class":50}," [a, b, c] ",[36,78937,70],{"class":42},[36,78939,53557],{"class":50},[36,78941,1885],{"class":73},[36,78943,477],{"class":50},[36,78945,1747],{"class":73},[36,78947,78849],{"class":50},[36,78949,1741],{"class":73},[36,78951,477],{"class":50},[36,78953,1961],{"class":73},[36,78955,78858],{"class":50},[36,78957,78958,78960,78962,78965],{"class":38,"line":54},[36,78959,78863],{"class":50},[36,78961,59578],{"class":46},[36,78963,78964],{"class":50},"(a)",[36,78966,78874],{"class":124},[36,78968,78969,78971,78973,78976],{"class":38,"line":61},[36,78970,78863],{"class":50},[36,78972,59578],{"class":46},[36,78974,78975],{"class":50},"(b)",[36,78977,78889],{"class":124},[36,78979,78980,78982,78984,78987],{"class":38,"line":80},[36,78981,78863],{"class":50},[36,78983,59578],{"class":46},[36,78985,78986],{"class":50},"(c)",[36,78988,78904],{"class":124},[26,78990,78992],{"className":78826,"code":78991,"language":78828,"meta":31,"style":31},"const [a, b, [c, d]] = [1, 2, [3, 4]]\nconsole.log(a)  \u002F\u002F1\nconsole.log(b)  \u002F\u002F2\nconsole.log(c)  \u002F\u002F3\nconsole.log(d)  \u002F\u002F4\n",[33,78993,78994,79021,79031,79041,79051],{"__ignoreMap":31},[36,78995,78996,78998,79001,79003,79005,79007,79009,79011,79013,79015,79017,79019],{"class":38,"line":39},[36,78997,1437],{"class":42},[36,78999,79000],{"class":50}," [a, b, [c, d]] ",[36,79002,70],{"class":42},[36,79004,53557],{"class":50},[36,79006,1885],{"class":73},[36,79008,477],{"class":50},[36,79010,1747],{"class":73},[36,79012,78849],{"class":50},[36,79014,1741],{"class":73},[36,79016,477],{"class":50},[36,79018,1961],{"class":73},[36,79020,78858],{"class":50},[36,79022,79023,79025,79027,79029],{"class":38,"line":54},[36,79024,78863],{"class":50},[36,79026,59578],{"class":46},[36,79028,78964],{"class":50},[36,79030,78874],{"class":124},[36,79032,79033,79035,79037,79039],{"class":38,"line":61},[36,79034,78863],{"class":50},[36,79036,59578],{"class":46},[36,79038,78975],{"class":50},[36,79040,78889],{"class":124},[36,79042,79043,79045,79047,79049],{"class":38,"line":80},[36,79044,78863],{"class":50},[36,79046,59578],{"class":46},[36,79048,78986],{"class":50},[36,79050,78923],{"class":124},[36,79052,79053,79055,79057,79060],{"class":38,"line":96},[36,79054,78863],{"class":50},[36,79056,59578],{"class":46},[36,79058,79059],{"class":50},"(d)",[36,79061,79062],{"class":124},"  \u002F\u002F4\n",[1645,79064,79066],{"id":79065},"_462-对象解构","4.6.2 对象解构",[19,79068,79069],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79071,79072],{},"用的非常非常多！！！！！！",[23327,79074,79076],{"id":79075},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79078,79079],{},"基本语法：",[256,79081,79082,79085,79088,79091],{},[259,79083,79084],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[259,79086,79087],{},"对象属性的值将被赋值给与属性名相同的变量",[259,79089,79090],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[259,79092,79093],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,79095,79097],{"className":51964,"code":79096,"language":51966,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[33,79098,79099,79104,79109,79114,79118],{"__ignoreMap":31},[36,79100,79101],{"class":38,"line":39},[36,79102,79103],{"class":50},"const obj = {\n",[36,79105,79106],{"class":38,"line":54},[36,79107,79108],{"class":50},"   uname: 'pink老师',\n",[36,79110,79111],{"class":38,"line":61},[36,79112,79113],{"class":50},"   age: 18,\n",[36,79115,79116],{"class":38,"line":80},[36,79117,250],{"class":50},[36,79119,79120],{"class":38,"line":96},[36,79121,79122],{"class":50},"const { uname, age } = obj\n",[19,79124,79125],{},"上方代码这样写等价于：",[19,79127,79128],{},"const uname等价于obj.uname",[19,79130,79131],{},"变量名可以重新改名：",[19,79133,79134],{},"const uname='red老师'",[19,79136,79137],{},"const user={",[19,79139,79140],{},"  uname:'pink老师',",[19,79142,79143],{},"  age:18",[19,79145,2613],{},[19,79147,79148],{},"const {uname,age}=user",[19,79150,79151],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79153,79154],{},"const {旧变量名：新变量名}=对象",[19,79156,79157],{},"const {uname:username,age}=user",[23327,79159,79161],{"id":79160},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79163,79164],{},[2992,79165],{"alt":31,"src":79166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23327,79168,79170],{"id":79169},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79172,79173],{},[2992,79174],{"alt":31,"src":79175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,79177,79179],{"className":54398,"code":79178,"language":54400,"meta":31,"style":31},"  \u003Cscript>\n    const pig = {\n      name: '佩奇',\n      family: {\n        mother: '猪妈妈',\n        father: '猪爸爸',\n        sister: '乔治'\n      },\n      age: 6\n    }\n    \u002F\u002F 多级对象解构\n    const { name, family: { mother, father, sister }, age } = pig\n  \u003C\u002Fscript>\n",[33,79180,79181,79189,79194,79199,79204,79209,79214,79219,79224,79229,79233,79238,79243],{"__ignoreMap":31},[36,79182,79183,79185,79187],{"class":38,"line":39},[36,79184,53475],{"class":50},[36,79186,53144],{"class":52631},[36,79188,52638],{"class":50},[36,79190,79191],{"class":38,"line":54},[36,79192,79193],{"class":50},"    const pig = {\n",[36,79195,79196],{"class":38,"line":61},[36,79197,79198],{"class":50},"      name: '佩奇',\n",[36,79200,79201],{"class":38,"line":80},[36,79202,79203],{"class":50},"      family: {\n",[36,79205,79206],{"class":38,"line":96},[36,79207,79208],{"class":50},"        mother: '猪妈妈',\n",[36,79210,79211],{"class":38,"line":101},[36,79212,79213],{"class":50},"        father: '猪爸爸',\n",[36,79215,79216],{"class":38,"line":128},[36,79217,79218],{"class":50},"        sister: '乔治'\n",[36,79220,79221],{"class":38,"line":149},[36,79222,79223],{"class":50},"      },\n",[36,79225,79226],{"class":38,"line":154},[36,79227,79228],{"class":50},"      age: 6\n",[36,79230,79231],{"class":38,"line":167},[36,79232,3693],{"class":50},[36,79234,79235],{"class":38,"line":172},[36,79236,79237],{"class":50},"    \u002F\u002F 多级对象解构\n",[36,79239,79240],{"class":38,"line":192},[36,79241,79242],{"class":50},"    const { name, family: { mother, father, sister }, age } = pig\n",[36,79244,79245,79247,79249],{"class":38,"line":211},[36,79246,53748],{"class":50},[36,79248,53144],{"class":52631},[36,79250,52638],{"class":50},[19,79252,79253],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,79255,79258],{"className":79256,"code":79257,"language":77778,"meta":31,"style":31},"language-java shiki shiki-themes github-light github-dark","    \u002F\u002F 这是后台传递过来的数据\n    const msg = {\n      \"code\": 200,\n      \"msg\": \"获取新闻列表成功\",\n      \"data\": [\n        {\n          \"id\": 1,\n          \"title\": \"5G商用自己，三大运用商收入下降\",\n          \"count\": 58\n        },\n        {\n          \"id\": 2,\n          \"title\": \"国际媒体头条速览\",\n          \"count\": 56\n        },\n        {\n          \"id\": 3,\n          \"title\": \"乌克兰和俄罗斯持续冲突\",\n          \"count\": 1669\n        },\n      ]\n    }\n",[33,79259,79260,79265,79276,79288,79300,79309,79313,79324,79336,79346,79351,79355,79365,79376,79385,79389,79393,79404,79415,79424,79428,79433],{"__ignoreMap":31},[36,79261,79262],{"class":38,"line":39},[36,79263,79264],{"class":124},"    \u002F\u002F 这是后台传递过来的数据\n",[36,79266,79267,79269,79272,79274],{"class":38,"line":54},[36,79268,1498],{"class":42},[36,79270,79271],{"class":50}," msg ",[36,79273,70],{"class":42},[36,79275,16901],{"class":50},[36,79277,79278,79281,79283,79286],{"class":38,"line":61},[36,79279,79280],{"class":110},"      \"code\"",[36,79282,2526],{"class":42},[36,79284,79285],{"class":73}," 200",[36,79287,32797],{"class":50},[36,79289,79290,79293,79295,79298],{"class":38,"line":80},[36,79291,79292],{"class":110},"      \"msg\"",[36,79294,2526],{"class":42},[36,79296,79297],{"class":110}," \"获取新闻列表成功\"",[36,79299,32797],{"class":50},[36,79301,79302,79305,79307],{"class":38,"line":96},[36,79303,79304],{"class":110},"      \"data\"",[36,79306,2526],{"class":42},[36,79308,56778],{"class":50},[36,79310,79311],{"class":38,"line":101},[36,79312,4012],{"class":50},[36,79314,79315,79318,79320,79322],{"class":38,"line":128},[36,79316,79317],{"class":110},"          \"id\"",[36,79319,2526],{"class":42},[36,79321,26449],{"class":73},[36,79323,32797],{"class":50},[36,79325,79326,79329,79331,79334],{"class":38,"line":149},[36,79327,79328],{"class":110},"          \"title\"",[36,79330,2526],{"class":42},[36,79332,79333],{"class":110}," \"5G商用自己，三大运用商收入下降\"",[36,79335,32797],{"class":50},[36,79337,79338,79341,79343],{"class":38,"line":154},[36,79339,79340],{"class":110},"          \"count\"",[36,79342,2526],{"class":42},[36,79344,79345],{"class":73}," 58\n",[36,79347,79348],{"class":38,"line":167},[36,79349,79350],{"class":50},"        },\n",[36,79352,79353],{"class":38,"line":172},[36,79354,4012],{"class":50},[36,79356,79357,79359,79361,79363],{"class":38,"line":192},[36,79358,79317],{"class":110},[36,79360,2526],{"class":42},[36,79362,16084],{"class":73},[36,79364,32797],{"class":50},[36,79366,79367,79369,79371,79374],{"class":38,"line":211},[36,79368,79328],{"class":110},[36,79370,2526],{"class":42},[36,79372,79373],{"class":110}," \"国际媒体头条速览\"",[36,79375,32797],{"class":50},[36,79377,79378,79380,79382],{"class":38,"line":216},[36,79379,79340],{"class":110},[36,79381,2526],{"class":42},[36,79383,79384],{"class":73}," 56\n",[36,79386,79387],{"class":38,"line":231},[36,79388,79350],{"class":50},[36,79390,79391],{"class":38,"line":236},[36,79392,4012],{"class":50},[36,79394,79395,79397,79399,79402],{"class":38,"line":247},[36,79396,79317],{"class":110},[36,79398,2526],{"class":42},[36,79400,79401],{"class":73}," 3",[36,79403,32797],{"class":50},[36,79405,79406,79408,79410,79413],{"class":38,"line":637},[36,79407,79328],{"class":110},[36,79409,2526],{"class":42},[36,79411,79412],{"class":110}," \"乌克兰和俄罗斯持续冲突\"",[36,79414,32797],{"class":50},[36,79416,79417,79419,79421],{"class":38,"line":646},[36,79418,79340],{"class":110},[36,79420,2526],{"class":42},[36,79422,79423],{"class":73}," 1669\n",[36,79425,79426],{"class":38,"line":655},[36,79427,79350],{"class":50},[36,79429,79430],{"class":38,"line":660},[36,79431,79432],{"class":50},"      ]\n",[36,79434,79435],{"class":38,"line":665},[36,79436,3693],{"class":50},[19,79438,79439],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79441,79442],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79444,79445],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,79447,79448],{},"function({data}) {",[19,79450,79451],{},"console.log(data)",[19,79453,2613],{},[19,79455,79456],{},"render(msg)",[19,79458,79459],{},"实参传递给形参的时候解构了",[19,79461,79462],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79464,79465],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79467,79468],{},"function render({data:mydata}) {",[19,79470,79471],{},"  console.log(data)",[19,79473,2613],{},[1645,79475,79477],{"id":79476},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79479,79480],{},"有两种情况：一个是数组结构，一个是立即执行函数",[256,79482,79483],{},[259,79484,79485],{},"如果对一个数组进行遍历，有两种方式：",[19,79487,79488],{},"①法1",[19,79490,79491],{},"const arr=[1,2,3]",[19,79493,79494],{},"arr.map(function(item,index) {",[19,79496,79497],{},"  console.log(item)",[19,79499,53795],{},[19,79501,79502],{},[2992,79503],{"alt":31,"src":79504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79506,79507],{},"②法2",[19,79509,79510],{},"const str='pink'",[19,79512,79513],{},"[1,2,3].map(function(item,index) {",[19,79515,79516],{},"console.log(item)",[19,79518,53795],{},[19,79520,79521],{},[2992,79522],{"alt":31,"src":79523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79525,79526],{},"此时会报错",[19,79528,79529],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79531,79516],{},[19,79533,53795],{},[19,79535,79536],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79538,79540],{"id":79539},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79542,79543],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79545,79546],{},"可以理解为加强版的for循环",[19,79548,79549],{},[2992,79550],{"alt":31,"src":79551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79553,79554],{},"里边不写return，不返回数组，只遍历不返回",[19,79556,79557],{},"map是返回数组",[19,79559,79560],{},"forEach主要用于遍历数组对象",[26,79562,79564],{"className":54398,"code":79563,"language":54400,"meta":31,"style":31},"  \u003Cscript>\n    const arr = ['red', 'green', 'pink']\n    const result = arr.forEach(function (item, index) {\n      console.log(item)\n      console.log(index)\n    })\n    console.log(result)\n  \u003C\u002Fscript>\n",[33,79565,79566,79574,79579,79584,79589,79594,79598,79603],{"__ignoreMap":31},[36,79567,79568,79570,79572],{"class":38,"line":39},[36,79569,53475],{"class":50},[36,79571,53144],{"class":52631},[36,79573,52638],{"class":50},[36,79575,79576],{"class":38,"line":54},[36,79577,79578],{"class":50},"    const arr = ['red', 'green', 'pink']\n",[36,79580,79581],{"class":38,"line":61},[36,79582,79583],{"class":50},"    const result = arr.forEach(function (item, index) {\n",[36,79585,79586],{"class":38,"line":80},[36,79587,79588],{"class":50},"      console.log(item)\n",[36,79590,79591],{"class":38,"line":96},[36,79592,79593],{"class":50},"      console.log(index)\n",[36,79595,79596],{"class":38,"line":101},[36,79597,34792],{"class":50},[36,79599,79600],{"class":38,"line":128},[36,79601,79602],{"class":50},"    console.log(result)\n",[36,79604,79605,79607,79609],{"class":38,"line":149},[36,79606,53748],{"class":50},[36,79608,53144],{"class":52631},[36,79610,52638],{"class":50},[19,79612,79613],{},[2992,79614],{"alt":31,"src":79615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79617,79619],{"id":79618},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79621,79622],{},[2992,79623],{"alt":31,"src":79624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79626,79627],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,79629,79631],{"className":54398,"code":79630,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [10, 20, 30]\n    const newArr = arr.filter(function (item, index) {\n      console.log(item)\n      console.log(index)\n      return item >= 20\n    })\n    console.log(newArr)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,79632,79633,79641,79649,79654,79659,79663,79667,79672,79676,79681,79689],{"__ignoreMap":31},[36,79634,79635,79637,79639],{"class":38,"line":39},[36,79636,2577],{"class":50},[36,79638,53131],{"class":52631},[36,79640,52638],{"class":50},[36,79642,79643,79645,79647],{"class":38,"line":54},[36,79644,53475],{"class":50},[36,79646,53144],{"class":52631},[36,79648,52638],{"class":50},[36,79650,79651],{"class":38,"line":61},[36,79652,79653],{"class":50},"    const arr = [10, 20, 30]\n",[36,79655,79656],{"class":38,"line":80},[36,79657,79658],{"class":50},"    const newArr = arr.filter(function (item, index) {\n",[36,79660,79661],{"class":38,"line":96},[36,79662,79588],{"class":50},[36,79664,79665],{"class":38,"line":101},[36,79666,79593],{"class":50},[36,79668,79669],{"class":38,"line":128},[36,79670,79671],{"class":50},"      return item >= 20\n",[36,79673,79674],{"class":38,"line":149},[36,79675,34792],{"class":50},[36,79677,79678],{"class":38,"line":154},[36,79679,79680],{"class":50},"    console.log(newArr)\n",[36,79682,79683,79685,79687],{"class":38,"line":167},[36,79684,53748],{"class":50},[36,79686,53144],{"class":52631},[36,79688,52638],{"class":50},[36,79690,79691,79693,79695],{"class":38,"line":172},[36,79692,53116],{"class":50},[36,79694,53131],{"class":52631},[36,79696,52638],{"class":50},[19,79698,79699],{},"这个也可以写成箭头函数：",[26,79701,79703],{"className":51964,"code":79702,"language":51966,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[33,79704,79705],{"__ignoreMap":31},[36,79706,79707],{"class":38,"line":39},[36,79708,79702],{"class":50},[14,79710,79712],{"id":79711},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79714,79715],{},[2992,79716],{"alt":31,"src":79717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79719,79720],{},"步骤：",[19,79722,79723],{},"①：渲染页面模块",[2674,79725,79726,79729],{},[259,79727,79728],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[259,79730,79731],{},"用forEach+字符串的形式",[19,79733,79734],{},"②：点击不同需求，显示不同页面内容",[2674,79736,79737,79740,79743,79746,79749],{},[259,79738,79739],{},"点击采取事件委托方式 .filter",[259,79741,79742],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[259,79744,79745],{},"筛选条件是根据点击的 data-index 来判断",[259,79747,79748],{},"可以使用对象解构，把事件对象解构",[259,79750,79751],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,79753,79755],{"className":51964,"code":79754,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      flex-wrap: wrap;\n    }\n\n    .item {\n      width: 240px;\n      margin-left: 10px;\n      padding: 20px 30px;\n      transition: all ease .5s;\n      margin-bottom: 20px;\n    }\n\n    .item:nth-child(4n) {\n      margin-left: 0;\n    }\n\n    .item:hover {\n      box-shadow: 0px 0px 5px rgba(0, 0, 0, .2);\n      transform: translate3d(0, -4px, 0);\n      cursor: pointer;\n    }\n\n    .item img {\n      width: 100%;\n    }\n\n    .item .name {\n      font-size: 18px;\n      margin-bottom: 10px;\n      color: #666;\n    }\n\n    .item .price {\n      font-size: 22px;\n      color: firebrick;\n    }\n\n    .item .price::before {\n      content: '￥';\n      font-size: 14px;\n    }\n\n    .filter {\n      display: flex;\n      width: 990px;\n      margin: 0 auto;\n      padding: 50px 30px\n    }\n\n    .filter a {\n      padding: 10px 20px;\n      background: #f5f5f5;\n      color: #666;\n      text-decoration: none;\n      margin-right: 20px;\n    }\n\n    .filter a:focus {\n      background-color: #05943c;\n      color: #fff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"filter\">\n    \u003Ca href=\"#\" data-index=\"1\">0-100元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"2\">100-300元\u003C\u002Fa>\n    \u003Ca href=\"#\" data-index=\"3\">300元以上\u003C\u002Fa>\n    \u003Ca href=\"#\">全部区间\u003C\u002Fa>\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"list\">\n    \u003C!-- \u003Cdiv class=\"item\">\n      \u003Cimg src=\"\" alt=\"\">\n      \u003Cp class=\"name\">\u003C\u002Fp>\n      \u003Cp class=\"price\">\u003C\u002Fp>\n    \u003C\u002Fdiv> -->\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    \u002F\u002F 2. 初始化数据\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: '289.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n      },\n      {\n        id: '4001594',\n        name: '日式黑陶功夫茶组双侧把茶具礼盒装',\n        price: '288.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg',\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: '109.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: '488.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n      },\n      {\n        id: '3997185',\n        name: '与众不同的口感汝瓷白酒杯套组1壶4杯',\n        price: '108.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg',\n      },\n      {\n        id: '3997403',\n        name: '手工吹制更厚实白酒杯壶套装6壶6杯',\n        price: '100.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg',\n      },\n      {\n        id: '3998274',\n        name: '德国百年工艺高端水晶玻璃红酒杯2支装',\n        price: '139.00',\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg',\n      },\n    ]\n\n    \u002F\u002F 1.渲染函数\n    function render(arr) {\n      \u002F\u002F 声明空字符串\n      let str = ''\n      \u002F\u002F 遍历数组\n      arr.forEach(item => {\n        const { name, price, picture } = item\n        str += `\n          \u003Cdiv class=\"item\">\n            \u003Cimg src=\"${picture}\" alt=\"\">\n            \u003Cp class=\"name\">${name}\u003C\u002Fp>\n            \u003Cp class=\"price\">${price}\u003C\u002Fp>\n          \u003C\u002Fdiv>\n        `\n      })\n      \u002F\u002F 追加给List\n      document.querySelector('.list').innerHTML = str\n    }\n    \u002F\u002F 页面一打开就需要渲染\n    render(goodsList)\n    \u002F\u002F 2.过滤筛选\n    document.querySelector('.filter').addEventListener('click', e => {\n      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n      const { tagName, dataset } = e.target\n      \u002F\u002F 判断\n      if (e.target.tagName === 'A') {\n        \u002F\u002F console.log(11)\n        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n        let arr = goodsList\n        if (dataset.index === '1') {\n          arr = goodsList.filter(item => item.price >= 0 && item.price \u003C= 100)\n        } else if (dataset.index === '2') {\n          arr = goodsList.filter(item => item.price >= 100 && item.price \u003C= 300)\n        } else if (dataset.index === '3') {\n          arr = goodsList.filter(item => item.price >= 300)\n        }\n        \u002F\u002F 渲染函数\n        render(arr)\n      }\n\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,79756,79757,79767,79781,79785,79793,79807,79827,79839,79847,79853,79863,79873,79883,79887,79891,79897,79910,79922,79932,79944,79948,79952,79959,79972,79984,80001,80019,80032,80036,80040,80052,80062,80066,80070,80077,80118,80145,80155,80159,80163,80171,80183,80187,80191,80199,80211,80223,80234,80238,80242,80251,80263,80274,80278,80282,80291,80303,80315,80319,80323,80330,80340,80352,80364,80379,80383,80387,80395,80411,80421,80431,80441,80453,80457,80461,80471,80482,80492,80496,80504,80512,80516,80524,80539,80565,80590,80615,80634,80642,80656,80661,80666,80671,80676,80681,80689,80697,80702,80713,80718,80728,80738,80748,80758,80762,80766,80775,80784,80793,80802,80806,80810,80819,80828,80837,80846,80850,80854,80863,80872,80881,80890,80894,80898,80907,80916,80925,80934,80938,80942,80951,80960,80969,80978,80982,80986,80995,81004,81013,81022,81026,81030,81039,81048,81056,81065,81069,81073,81077,81082,81094,81099,81111,81115,81132,81160,81169,81174,81184,81194,81203,81208,81213,81217,81222,81239,81243,81248,81256,81261,81288,81293,81313,81318,81330,81335,81340,81345,81356,81370,81407,81425,81458,81475,81499,81503,81508,81514,81518,81522,81526,81534,81542,81546],{"__ignoreMap":31},[36,79758,79759,79761,79763,79765],{"class":38,"line":39},[36,79760,52628],{"class":50},[36,79762,52632],{"class":52631},[36,79764,52635],{"class":46},[36,79766,52638],{"class":50},[36,79768,79769,79771,79773,79775,79777,79779],{"class":38,"line":54},[36,79770,2577],{"class":50},[36,79772,51966],{"class":52631},[36,79774,52647],{"class":46},[36,79776,70],{"class":50},[36,79778,52652],{"class":110},[36,79780,52638],{"class":50},[36,79782,79783],{"class":38,"line":61},[36,79784,58],{"emptyLinePlaceholder":57},[36,79786,79787,79789,79791],{"class":38,"line":80},[36,79788,2577],{"class":50},[36,79790,52665],{"class":52631},[36,79792,52638],{"class":50},[36,79794,79795,79797,79799,79801,79803,79805],{"class":38,"line":96},[36,79796,53475],{"class":50},[36,79798,52675],{"class":52631},[36,79800,52678],{"class":46},[36,79802,70],{"class":50},[36,79804,52683],{"class":110},[36,79806,52638],{"class":50},[36,79808,79809,79811,79813,79815,79817,79819,79821,79823,79825],{"class":38,"line":101},[36,79810,53475],{"class":50},[36,79812,52675],{"class":52631},[36,79814,16249],{"class":46},[36,79816,70],{"class":50},[36,79818,52722],{"class":110},[36,79820,52702],{"class":46},[36,79822,70],{"class":50},[36,79824,52729],{"class":110},[36,79826,52638],{"class":50},[36,79828,79829,79831,79833,79835,79837],{"class":38,"line":128},[36,79830,53475],{"class":50},[36,79832,52738],{"class":52631},[36,79834,52741],{"class":50},[36,79836,52738],{"class":52631},[36,79838,52638],{"class":50},[36,79840,79841,79843,79845],{"class":38,"line":149},[36,79842,53475],{"class":50},[36,79844,1592],{"class":52631},[36,79846,52638],{"class":50},[36,79848,79849,79851],{"class":38,"line":154},[36,79850,569],{"class":52631},[36,79852,16901],{"class":50},[36,79854,79855,79857,79859,79861],{"class":38,"line":167},[36,79856,56026],{"class":73},[36,79858,52768],{"class":50},[36,79860,1859],{"class":73},[36,79862,77],{"class":50},[36,79864,79865,79867,79869,79871],{"class":38,"line":172},[36,79866,56037],{"class":73},[36,79868,52768],{"class":50},[36,79870,1859],{"class":73},[36,79872,77],{"class":50},[36,79874,79875,79877,79879,79881],{"class":38,"line":192},[36,79876,73927],{"class":73},[36,79878,52768],{"class":50},[36,79880,61836],{"class":73},[36,79882,77],{"class":50},[36,79884,79885],{"class":38,"line":211},[36,79886,3693],{"class":50},[36,79888,79889],{"class":38,"line":216},[36,79890,58],{"emptyLinePlaceholder":57},[36,79892,79893,79895],{"class":38,"line":231},[36,79894,63454],{"class":46},[36,79896,16901],{"class":50},[36,79898,79899,79901,79903,79906,79908],{"class":38,"line":236},[36,79900,56102],{"class":73},[36,79902,52768],{"class":50},[36,79904,79905],{"class":73},"990",[36,79907,52823],{"class":42},[36,79909,77],{"class":50},[36,79911,79912,79914,79916,79918,79920],{"class":38,"line":247},[36,79913,56037],{"class":73},[36,79915,52768],{"class":50},[36,79917,1859],{"class":73},[36,79919,52887],{"class":73},[36,79921,77],{"class":50},[36,79923,79924,79926,79928,79930],{"class":38,"line":637},[36,79925,56340],{"class":73},[36,79927,52768],{"class":50},[36,79929,52808],{"class":73},[36,79931,77],{"class":50},[36,79933,79934,79937,79939,79942],{"class":38,"line":646},[36,79935,79936],{"class":73},"      flex-wrap",[36,79938,52768],{"class":50},[36,79940,79941],{"class":73},"wrap",[36,79943,77],{"class":50},[36,79945,79946],{"class":38,"line":655},[36,79947,3693],{"class":50},[36,79949,79950],{"class":38,"line":660},[36,79951,58],{"emptyLinePlaceholder":57},[36,79953,79954,79957],{"class":38,"line":665},[36,79955,79956],{"class":46},"    .item",[36,79958,16901],{"class":50},[36,79960,79961,79963,79965,79968,79970],{"class":38,"line":674},[36,79962,56102],{"class":73},[36,79964,52768],{"class":50},[36,79966,79967],{"class":73},"240",[36,79969,52823],{"class":42},[36,79971,77],{"class":50},[36,79973,79974,79976,79978,79980,79982],{"class":38,"line":679},[36,79975,63331],{"class":73},[36,79977,52768],{"class":50},[36,79979,2113],{"class":73},[36,79981,52823],{"class":42},[36,79983,77],{"class":50},[36,79985,79986,79988,79990,79992,79994,79997,79999],{"class":38,"line":692},[36,79987,56026],{"class":73},[36,79989,52768],{"class":50},[36,79991,2367],{"class":73},[36,79993,52823],{"class":42},[36,79995,79996],{"class":73}," 30",[36,79998,52823],{"class":42},[36,80000,77],{"class":50},[36,80002,80003,80005,80007,80009,80012,80015,80017],{"class":38,"line":705},[36,80004,63191],{"class":73},[36,80006,52768],{"class":50},[36,80008,29452],{"class":73},[36,80010,80011],{"class":73}," ease",[36,80013,80014],{"class":73}," .5",[36,80016,2362],{"class":42},[36,80018,77],{"class":50},[36,80020,80021,80024,80026,80028,80030],{"class":38,"line":710},[36,80022,80023],{"class":73},"      margin-bottom",[36,80025,52768],{"class":50},[36,80027,2367],{"class":73},[36,80029,52823],{"class":42},[36,80031,77],{"class":50},[36,80033,80034],{"class":38,"line":722},[36,80035,3693],{"class":50},[36,80037,80038],{"class":38,"line":750},[36,80039,58],{"emptyLinePlaceholder":57},[36,80041,80042,80045,80047,80050],{"class":38,"line":755},[36,80043,80044],{"class":46},"    .item:nth-child",[36,80046,222],{"class":50},[36,80048,80049],{"class":73},"4n",[36,80051,485],{"class":50},[36,80053,80054,80056,80058,80060],{"class":38,"line":777},[36,80055,63331],{"class":73},[36,80057,52768],{"class":50},[36,80059,1859],{"class":73},[36,80061,77],{"class":50},[36,80063,80064],{"class":38,"line":802},[36,80065,3693],{"class":50},[36,80067,80068],{"class":38,"line":807},[36,80069,58],{"emptyLinePlaceholder":57},[36,80071,80072,80075],{"class":38,"line":818},[36,80073,80074],{"class":46},"    .item:hover",[36,80076,16901],{"class":50},[36,80078,80079,80082,80084,80086,80088,80090,80092,80094,80096,80099,80101,80103,80105,80107,80109,80111,80113,80116],{"class":38,"line":843},[36,80080,80081],{"class":73},"      box-shadow",[36,80083,52768],{"class":50},[36,80085,1859],{"class":73},[36,80087,52823],{"class":42},[36,80089,242],{"class":73},[36,80091,52823],{"class":42},[36,80093,3654],{"class":73},[36,80095,52823],{"class":42},[36,80097,80098],{"class":73}," rgba",[36,80100,222],{"class":50},[36,80102,1859],{"class":73},[36,80104,477],{"class":50},[36,80106,1859],{"class":73},[36,80108,477],{"class":50},[36,80110,1859],{"class":73},[36,80112,477],{"class":50},[36,80114,80115],{"class":73},".2",[36,80117,228],{"class":50},[36,80119,80120,80123,80125,80128,80130,80132,80134,80137,80139,80141,80143],{"class":38,"line":848},[36,80121,80122],{"class":73},"      transform",[36,80124,52768],{"class":50},[36,80126,80127],{"class":73},"translate3d",[36,80129,222],{"class":50},[36,80131,1859],{"class":73},[36,80133,477],{"class":50},[36,80135,80136],{"class":73},"-4",[36,80138,52823],{"class":42},[36,80140,477],{"class":50},[36,80142,1859],{"class":73},[36,80144,228],{"class":50},[36,80146,80147,80149,80151,80153],{"class":38,"line":859},[36,80148,63356],{"class":73},[36,80150,52768],{"class":50},[36,80152,63361],{"class":73},[36,80154,77],{"class":50},[36,80156,80157],{"class":38,"line":864},[36,80158,3693],{"class":50},[36,80160,80161],{"class":38,"line":873},[36,80162,58],{"emptyLinePlaceholder":57},[36,80164,80165,80167,80169],{"class":38,"line":9454},[36,80166,79956],{"class":46},[36,80168,56946],{"class":52631},[36,80170,16901],{"class":50},[36,80172,80173,80175,80177,80179,80181],{"class":38,"line":9481},[36,80174,56102],{"class":73},[36,80176,52768],{"class":50},[36,80178,1979],{"class":73},[36,80180,1996],{"class":42},[36,80182,77],{"class":50},[36,80184,80185],{"class":38,"line":9486},[36,80186,3693],{"class":50},[36,80188,80189],{"class":38,"line":9492},[36,80190,58],{"emptyLinePlaceholder":57},[36,80192,80193,80195,80197],{"class":38,"line":9504},[36,80194,79956],{"class":46},[36,80196,63635],{"class":46},[36,80198,16901],{"class":50},[36,80200,80201,80203,80205,80207,80209],{"class":38,"line":9516},[36,80202,56253],{"class":73},[36,80204,52768],{"class":50},[36,80206,2317],{"class":73},[36,80208,52823],{"class":42},[36,80210,77],{"class":50},[36,80212,80213,80215,80217,80219,80221],{"class":38,"line":9528},[36,80214,80023],{"class":73},[36,80216,52768],{"class":50},[36,80218,2113],{"class":73},[36,80220,52823],{"class":42},[36,80222,77],{"class":50},[36,80224,80225,80227,80229,80232],{"class":38,"line":11184},[36,80226,58747],{"class":73},[36,80228,52768],{"class":50},[36,80230,80231],{"class":73},"#666",[36,80233,77],{"class":50},[36,80235,80236],{"class":38,"line":11209},[36,80237,3693],{"class":50},[36,80239,80240],{"class":38,"line":11232},[36,80241,58],{"emptyLinePlaceholder":57},[36,80243,80244,80246,80249],{"class":38,"line":11256},[36,80245,79956],{"class":46},[36,80247,80248],{"class":46}," .price",[36,80250,16901],{"class":50},[36,80252,80253,80255,80257,80259,80261],{"class":38,"line":11261},[36,80254,56253],{"class":73},[36,80256,52768],{"class":50},[36,80258,2417],{"class":73},[36,80260,52823],{"class":42},[36,80262,77],{"class":50},[36,80264,80265,80267,80269,80272],{"class":38,"line":11266},[36,80266,58747],{"class":73},[36,80268,52768],{"class":50},[36,80270,80271],{"class":73},"firebrick",[36,80273,77],{"class":50},[36,80275,80276],{"class":38,"line":11271},[36,80277,3693],{"class":50},[36,80279,80280],{"class":38,"line":11280},[36,80281,58],{"emptyLinePlaceholder":57},[36,80283,80284,80286,80289],{"class":38,"line":11285},[36,80285,79956],{"class":46},[36,80287,80288],{"class":46}," .price::before",[36,80290,16901],{"class":50},[36,80292,80293,80296,80298,80301],{"class":38,"line":11291},[36,80294,80295],{"class":73},"      content",[36,80297,52768],{"class":50},[36,80299,80300],{"class":110},"'￥'",[36,80302,77],{"class":50},[36,80304,80305,80307,80309,80311,80313],{"class":38,"line":11312},[36,80306,56253],{"class":73},[36,80308,52768],{"class":50},[36,80310,2216],{"class":73},[36,80312,52823],{"class":42},[36,80314,77],{"class":50},[36,80316,80317],{"class":38,"line":11318},[36,80318,3693],{"class":50},[36,80320,80321],{"class":38,"line":11332},[36,80322,58],{"emptyLinePlaceholder":57},[36,80324,80325,80328],{"class":38,"line":11338},[36,80326,80327],{"class":46},"    .filter",[36,80329,16901],{"class":50},[36,80331,80332,80334,80336,80338],{"class":38,"line":11365},[36,80333,56340],{"class":73},[36,80335,52768],{"class":50},[36,80337,52808],{"class":73},[36,80339,77],{"class":50},[36,80341,80342,80344,80346,80348,80350],{"class":38,"line":11374},[36,80343,56102],{"class":73},[36,80345,52768],{"class":50},[36,80347,79905],{"class":73},[36,80349,52823],{"class":42},[36,80351,77],{"class":50},[36,80353,80354,80356,80358,80360,80362],{"class":38,"line":11380},[36,80355,56037],{"class":73},[36,80357,52768],{"class":50},[36,80359,1859],{"class":73},[36,80361,52887],{"class":73},[36,80363,77],{"class":50},[36,80365,80366,80368,80370,80372,80374,80376],{"class":38,"line":11388},[36,80367,56026],{"class":73},[36,80369,52768],{"class":50},[36,80371,2323],{"class":73},[36,80373,52823],{"class":42},[36,80375,79996],{"class":73},[36,80377,80378],{"class":42},"px\n",[36,80380,80381],{"class":38,"line":11393},[36,80382,3693],{"class":50},[36,80384,80385],{"class":38,"line":17933},[36,80386,58],{"emptyLinePlaceholder":57},[36,80388,80389,80391,80393],{"class":38,"line":17939},[36,80390,80327],{"class":46},[36,80392,474],{"class":52631},[36,80394,16901],{"class":50},[36,80396,80397,80399,80401,80403,80405,80407,80409],{"class":38,"line":17962},[36,80398,56026],{"class":73},[36,80400,52768],{"class":50},[36,80402,2113],{"class":73},[36,80404,52823],{"class":42},[36,80406,319],{"class":73},[36,80408,52823],{"class":42},[36,80410,77],{"class":50},[36,80412,80413,80415,80417,80419],{"class":38,"line":17968},[36,80414,63052],{"class":73},[36,80416,52768],{"class":50},[36,80418,63149],{"class":73},[36,80420,77],{"class":50},[36,80422,80423,80425,80427,80429],{"class":38,"line":17991},[36,80424,58747],{"class":73},[36,80426,52768],{"class":50},[36,80428,80231],{"class":73},[36,80430,77],{"class":50},[36,80432,80433,80435,80437,80439],{"class":38,"line":18005},[36,80434,65301],{"class":73},[36,80436,52768],{"class":50},[36,80438,56068],{"class":73},[36,80440,77],{"class":50},[36,80442,80443,80445,80447,80449,80451],{"class":38,"line":18025},[36,80444,63081],{"class":73},[36,80446,52768],{"class":50},[36,80448,2367],{"class":73},[36,80450,52823],{"class":42},[36,80452,77],{"class":50},[36,80454,80455],{"class":38,"line":18031},[36,80456,3693],{"class":50},[36,80458,80459],{"class":38,"line":18042},[36,80460,58],{"emptyLinePlaceholder":57},[36,80462,80463,80465,80467,80469],{"class":38,"line":18065},[36,80464,80327],{"class":46},[36,80466,474],{"class":52631},[36,80468,63231],{"class":46},[36,80470,16901],{"class":50},[36,80472,80473,80475,80477,80480],{"class":38,"line":18087},[36,80474,56215],{"class":73},[36,80476,52768],{"class":50},[36,80478,80479],{"class":73},"#05943c",[36,80481,77],{"class":50},[36,80483,80484,80486,80488,80490],{"class":38,"line":18092},[36,80485,58747],{"class":73},[36,80487,52768],{"class":50},[36,80489,62173],{"class":73},[36,80491,77],{"class":50},[36,80493,80494],{"class":38,"line":18098},[36,80495,3693],{"class":50},[36,80497,80498,80500,80502],{"class":38,"line":18112},[36,80499,53748],{"class":50},[36,80501,1592],{"class":52631},[36,80503,52638],{"class":50},[36,80505,80506,80508,80510],{"class":38,"line":18125},[36,80507,53116],{"class":50},[36,80509,52665],{"class":52631},[36,80511,52638],{"class":50},[36,80513,80514],{"class":38,"line":18130},[36,80515,58],{"emptyLinePlaceholder":57},[36,80517,80518,80520,80522],{"class":38,"line":18144},[36,80519,2577],{"class":50},[36,80521,53131],{"class":52631},[36,80523,52638],{"class":50},[36,80525,80526,80528,80530,80532,80534,80537],{"class":38,"line":18149},[36,80527,53475],{"class":50},[36,80529,52942],{"class":52631},[36,80531,54817],{"class":46},[36,80533,70],{"class":50},[36,80535,80536],{"class":110},"\"filter\"",[36,80538,52638],{"class":50},[36,80540,80541,80543,80545,80547,80549,80551,80554,80556,80558,80561,80563],{"class":38,"line":18155},[36,80542,52672],{"class":50},[36,80544,1906],{"class":52631},[36,80546,62388],{"class":46},[36,80548,70],{"class":50},[36,80550,62393],{"class":110},[36,80552,80553],{"class":46}," data-index",[36,80555,70],{"class":50},[36,80557,5169],{"class":110},[36,80559,80560],{"class":50},">0-100元\u003C\u002F",[36,80562,1906],{"class":52631},[36,80564,52638],{"class":50},[36,80566,80567,80569,80571,80573,80575,80577,80579,80581,80583,80586,80588],{"class":38,"line":18160},[36,80568,52672],{"class":50},[36,80570,1906],{"class":52631},[36,80572,62388],{"class":46},[36,80574,70],{"class":50},[36,80576,62393],{"class":110},[36,80578,80553],{"class":46},[36,80580,70],{"class":50},[36,80582,5192],{"class":110},[36,80584,80585],{"class":50},">100-300元\u003C\u002F",[36,80587,1906],{"class":52631},[36,80589,52638],{"class":50},[36,80591,80592,80594,80596,80598,80600,80602,80604,80606,80608,80611,80613],{"class":38,"line":18174},[36,80593,52672],{"class":50},[36,80595,1906],{"class":52631},[36,80597,62388],{"class":46},[36,80599,70],{"class":50},[36,80601,62393],{"class":110},[36,80603,80553],{"class":46},[36,80605,70],{"class":50},[36,80607,5205],{"class":110},[36,80609,80610],{"class":50},">300元以上\u003C\u002F",[36,80612,1906],{"class":52631},[36,80614,52638],{"class":50},[36,80616,80617,80619,80621,80623,80625,80627,80630,80632],{"class":38,"line":18179},[36,80618,52672],{"class":50},[36,80620,1906],{"class":52631},[36,80622,62388],{"class":46},[36,80624,70],{"class":50},[36,80626,62393],{"class":110},[36,80628,80629],{"class":50},">全部区间\u003C\u002F",[36,80631,1906],{"class":52631},[36,80633,52638],{"class":50},[36,80635,80636,80638,80640],{"class":38,"line":18184},[36,80637,53748],{"class":50},[36,80639,52942],{"class":52631},[36,80641,52638],{"class":50},[36,80643,80644,80646,80648,80650,80652,80654],{"class":38,"line":18198},[36,80645,53475],{"class":50},[36,80647,52942],{"class":52631},[36,80649,54817],{"class":46},[36,80651,70],{"class":50},[36,80653,63939],{"class":110},[36,80655,52638],{"class":50},[36,80657,80658],{"class":38,"line":18210},[36,80659,80660],{"class":124},"    \u003C!-- \u003Cdiv class=\"item\">\n",[36,80662,80663],{"class":38,"line":18215},[36,80664,80665],{"class":124},"      \u003Cimg src=\"\" alt=\"\">\n",[36,80667,80668],{"class":38,"line":18228},[36,80669,80670],{"class":124},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[36,80672,80673],{"class":38,"line":18233},[36,80674,80675],{"class":124},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[36,80677,80678],{"class":38,"line":18238},[36,80679,80680],{"class":124},"    \u003C\u002Fdiv> -->\n",[36,80682,80683,80685,80687],{"class":38,"line":18243},[36,80684,53748],{"class":50},[36,80686,52942],{"class":52631},[36,80688,52638],{"class":50},[36,80690,80691,80693,80695],{"class":38,"line":18256},[36,80692,53475],{"class":50},[36,80694,53144],{"class":52631},[36,80696,52638],{"class":50},[36,80698,80699],{"class":38,"line":18261},[36,80700,80701],{"class":124},"    \u002F\u002F 2. 初始化数据\n",[36,80703,80704,80706,80709,80711],{"class":38,"line":33964},[36,80705,1498],{"class":42},[36,80707,80708],{"class":73}," goodsList",[36,80710,14893],{"class":42},[36,80712,56778],{"class":50},[36,80714,80715],{"class":38,"line":33970},[36,80716,80717],{"class":50},"      {\n",[36,80719,80720,80723,80726],{"class":38,"line":33976},[36,80721,80722],{"class":50},"        id: ",[36,80724,80725],{"class":110},"'4001172'",[36,80727,32797],{"class":50},[36,80729,80730,80733,80736],{"class":38,"line":33982},[36,80731,80732],{"class":50},"        name: ",[36,80734,80735],{"class":110},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[36,80737,32797],{"class":50},[36,80739,80740,80743,80746],{"class":38,"line":33988},[36,80741,80742],{"class":50},"        price: ",[36,80744,80745],{"class":110},"'289.00'",[36,80747,32797],{"class":50},[36,80749,80750,80753,80756],{"class":38,"line":33999},[36,80751,80752],{"class":50},"        picture: ",[36,80754,80755],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[36,80757,32797],{"class":50},[36,80759,80760],{"class":38,"line":34005},[36,80761,79223],{"class":50},[36,80763,80764],{"class":38,"line":34025},[36,80765,80717],{"class":50},[36,80767,80768,80770,80773],{"class":38,"line":34031},[36,80769,80722],{"class":50},[36,80771,80772],{"class":110},"'4001594'",[36,80774,32797],{"class":50},[36,80776,80777,80779,80782],{"class":38,"line":34042},[36,80778,80732],{"class":50},[36,80780,80781],{"class":110},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[36,80783,32797],{"class":50},[36,80785,80786,80788,80791],{"class":38,"line":34048},[36,80787,80742],{"class":50},[36,80789,80790],{"class":110},"'288.00'",[36,80792,32797],{"class":50},[36,80794,80795,80797,80800],{"class":38,"line":34054},[36,80796,80752],{"class":50},[36,80798,80799],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[36,80801,32797],{"class":50},[36,80803,80804],{"class":38,"line":34060},[36,80805,79223],{"class":50},[36,80807,80808],{"class":38,"line":34066},[36,80809,80717],{"class":50},[36,80811,80812,80814,80817],{"class":38,"line":34072},[36,80813,80722],{"class":50},[36,80815,80816],{"class":110},"'4001009'",[36,80818,32797],{"class":50},[36,80820,80821,80823,80826],{"class":38,"line":34078},[36,80822,80732],{"class":50},[36,80824,80825],{"class":110},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[36,80827,32797],{"class":50},[36,80829,80830,80832,80835],{"class":38,"line":34084},[36,80831,80742],{"class":50},[36,80833,80834],{"class":110},"'109.00'",[36,80836,32797],{"class":50},[36,80838,80839,80841,80844],{"class":38,"line":34104},[36,80840,80752],{"class":50},[36,80842,80843],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[36,80845,32797],{"class":50},[36,80847,80848],{"class":38,"line":34110},[36,80849,79223],{"class":50},[36,80851,80852],{"class":38,"line":34126},[36,80853,80717],{"class":50},[36,80855,80856,80858,80861],{"class":38,"line":34132},[36,80857,80722],{"class":50},[36,80859,80860],{"class":110},"'4001874'",[36,80862,32797],{"class":50},[36,80864,80865,80867,80870],{"class":38,"line":34146},[36,80866,80732],{"class":50},[36,80868,80869],{"class":110},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[36,80871,32797],{"class":50},[36,80873,80874,80876,80879],{"class":38,"line":34152},[36,80875,80742],{"class":50},[36,80877,80878],{"class":110},"'488.00'",[36,80880,32797],{"class":50},[36,80882,80883,80885,80888],{"class":38,"line":34167},[36,80884,80752],{"class":50},[36,80886,80887],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[36,80889,32797],{"class":50},[36,80891,80892],{"class":38,"line":34173},[36,80893,79223],{"class":50},[36,80895,80896],{"class":38,"line":34182},[36,80897,80717],{"class":50},[36,80899,80900,80902,80905],{"class":38,"line":34188},[36,80901,80722],{"class":50},[36,80903,80904],{"class":110},"'4001649'",[36,80906,32797],{"class":50},[36,80908,80909,80911,80914],{"class":38,"line":34197},[36,80910,80732],{"class":50},[36,80912,80913],{"class":110},"'大师监制龙泉青瓷茶叶罐'",[36,80915,32797],{"class":50},[36,80917,80918,80920,80923],{"class":38,"line":34203},[36,80919,80742],{"class":50},[36,80921,80922],{"class":110},"'139.00'",[36,80924,32797],{"class":50},[36,80926,80927,80929,80932],{"class":38,"line":34209},[36,80928,80752],{"class":50},[36,80930,80931],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[36,80933,32797],{"class":50},[36,80935,80936],{"class":38,"line":34218},[36,80937,79223],{"class":50},[36,80939,80940],{"class":38,"line":34224},[36,80941,80717],{"class":50},[36,80943,80944,80946,80949],{"class":38,"line":34235},[36,80945,80722],{"class":50},[36,80947,80948],{"class":110},"'3997185'",[36,80950,32797],{"class":50},[36,80952,80953,80955,80958],{"class":38,"line":34241},[36,80954,80732],{"class":50},[36,80956,80957],{"class":110},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[36,80959,32797],{"class":50},[36,80961,80962,80964,80967],{"class":38,"line":34260},[36,80963,80742],{"class":50},[36,80965,80966],{"class":110},"'108.00'",[36,80968,32797],{"class":50},[36,80970,80971,80973,80976],{"class":38,"line":34266},[36,80972,80752],{"class":50},[36,80974,80975],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[36,80977,32797],{"class":50},[36,80979,80980],{"class":38,"line":34277},[36,80981,79223],{"class":50},[36,80983,80984],{"class":38,"line":34283},[36,80985,80717],{"class":50},[36,80987,80988,80990,80993],{"class":38,"line":34303},[36,80989,80722],{"class":50},[36,80991,80992],{"class":110},"'3997403'",[36,80994,32797],{"class":50},[36,80996,80997,80999,81002],{"class":38,"line":34319},[36,80998,80732],{"class":50},[36,81000,81001],{"class":110},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[36,81003,32797],{"class":50},[36,81005,81006,81008,81011],{"class":38,"line":34325},[36,81007,80742],{"class":50},[36,81009,81010],{"class":110},"'100.00'",[36,81012,32797],{"class":50},[36,81014,81015,81017,81020],{"class":38,"line":34339},[36,81016,80752],{"class":50},[36,81018,81019],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[36,81021,32797],{"class":50},[36,81023,81024],{"class":38,"line":34345},[36,81025,79223],{"class":50},[36,81027,81028],{"class":38,"line":34351},[36,81029,80717],{"class":50},[36,81031,81032,81034,81037],{"class":38,"line":34362},[36,81033,80722],{"class":50},[36,81035,81036],{"class":110},"'3998274'",[36,81038,32797],{"class":50},[36,81040,81041,81043,81046],{"class":38,"line":34368},[36,81042,80732],{"class":50},[36,81044,81045],{"class":110},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[36,81047,32797],{"class":50},[36,81049,81050,81052,81054],{"class":38,"line":34374},[36,81051,80742],{"class":50},[36,81053,80922],{"class":110},[36,81055,32797],{"class":50},[36,81057,81058,81060,81063],{"class":38,"line":34384},[36,81059,80752],{"class":50},[36,81061,81062],{"class":110},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[36,81064,32797],{"class":50},[36,81066,81067],{"class":38,"line":34390},[36,81068,79223],{"class":50},[36,81070,81071],{"class":38,"line":34401},[36,81072,54440],{"class":50},[36,81074,81075],{"class":38,"line":34407},[36,81076,58],{"emptyLinePlaceholder":57},[36,81078,81079],{"class":38,"line":34417},[36,81080,81081],{"class":124},"    \u002F\u002F 1.渲染函数\n",[36,81083,81084,81086,81088,81090,81092],{"class":38,"line":34422},[36,81085,71415],{"class":42},[36,81087,71418],{"class":46},[36,81089,222],{"class":50},[36,81091,5371],{"class":473},[36,81093,485],{"class":50},[36,81095,81096],{"class":38,"line":34428},[36,81097,81098],{"class":124},"      \u002F\u002F 声明空字符串\n",[36,81100,81101,81104,81107,81109],{"class":38,"line":34477},[36,81102,81103],{"class":42},"      let",[36,81105,81106],{"class":50}," str ",[36,81108,70],{"class":42},[36,81110,71435],{"class":110},[36,81112,81113],{"class":38,"line":34524},[36,81114,71440],{"class":124},[36,81116,81117,81119,81122,81124,81127,81130],{"class":38,"line":34529},[36,81118,59338],{"class":50},[36,81120,81121],{"class":46},"forEach",[36,81123,222],{"class":50},[36,81125,81126],{"class":473},"item",[36,81128,81129],{"class":42}," =>",[36,81131,16901],{"class":50},[36,81133,81134,81136,81139,81142,81144,81147,81149,81152,81155,81157],{"class":38,"line":34535},[36,81135,62601],{"class":42},[36,81137,81138],{"class":50}," { ",[36,81140,81141],{"class":73},"name",[36,81143,477],{"class":50},[36,81145,81146],{"class":73},"price",[36,81148,477],{"class":50},[36,81150,81151],{"class":73},"picture",[36,81153,81154],{"class":50}," } ",[36,81156,70],{"class":42},[36,81158,81159],{"class":50}," item\n",[36,81161,81162,81165,81167],{"class":38,"line":34554},[36,81163,81164],{"class":50},"        str ",[36,81166,10945],{"class":42},[36,81168,71499],{"class":110},[36,81170,81171],{"class":38,"line":34560},[36,81172,81173],{"class":110},"          \u003Cdiv class=\"item\">\n",[36,81175,81176,81179,81181],{"class":38,"line":34580},[36,81177,81178],{"class":110},"            \u003Cimg src=\"${",[36,81180,81151],{"class":50},[36,81182,81183],{"class":110},"}\" alt=\"\">\n",[36,81185,81186,81189,81191],{"class":38,"line":34586},[36,81187,81188],{"class":110},"            \u003Cp class=\"name\">${",[36,81190,81141],{"class":50},[36,81192,81193],{"class":110},"}\u003C\u002Fp>\n",[36,81195,81196,81199,81201],{"class":38,"line":34592},[36,81197,81198],{"class":110},"            \u003Cp class=\"price\">${",[36,81200,81146],{"class":50},[36,81202,81193],{"class":110},[36,81204,81205],{"class":38,"line":34602},[36,81206,81207],{"class":110},"          \u003C\u002Fdiv>\n",[36,81209,81210],{"class":38,"line":34607},[36,81211,81212],{"class":110},"        `\n",[36,81214,81215],{"class":38,"line":34613},[36,81216,66146],{"class":50},[36,81218,81219],{"class":38,"line":34629},[36,81220,81221],{"class":124},"      \u002F\u002F 追加给List\n",[36,81223,81224,81226,81228,81230,81233,81235,81237],{"class":38,"line":34674},[36,81225,57102],{"class":50},[36,81227,55730],{"class":46},[36,81229,222],{"class":50},[36,81231,81232],{"class":110},"'.list'",[36,81234,75580],{"class":50},[36,81236,70],{"class":42},[36,81238,75316],{"class":50},[36,81240,81241],{"class":38,"line":34680},[36,81242,3693],{"class":50},[36,81244,81245],{"class":38,"line":34686},[36,81246,81247],{"class":124},"    \u002F\u002F 页面一打开就需要渲染\n",[36,81249,81250,81253],{"class":38,"line":34692},[36,81251,81252],{"class":46},"    render",[36,81254,81255],{"class":50},"(goodsList)\n",[36,81257,81258],{"class":38,"line":34703},[36,81259,81260],{"class":124},"    \u002F\u002F 2.过滤筛选\n",[36,81262,81263,81265,81267,81269,81272,81274,81276,81278,81280,81282,81284,81286],{"class":38,"line":34709},[36,81264,53738],{"class":50},[36,81266,55730],{"class":46},[36,81268,222],{"class":50},[36,81270,81271],{"class":110},"'.filter'",[36,81273,32157],{"class":50},[36,81275,59144],{"class":46},[36,81277,222],{"class":50},[36,81279,59149],{"class":110},[36,81281,477],{"class":50},[36,81283,1744],{"class":473},[36,81285,81129],{"class":42},[36,81287,16901],{"class":50},[36,81289,81290],{"class":38,"line":34715},[36,81291,81292],{"class":124},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[36,81294,81295,81297,81299,81302,81304,81306,81308,81310],{"class":38,"line":34721},[36,81296,59559],{"class":42},[36,81298,81138],{"class":50},[36,81300,81301],{"class":73},"tagName",[36,81303,477],{"class":50},[36,81305,32868],{"class":73},[36,81307,81154],{"class":50},[36,81309,70],{"class":42},[36,81311,81312],{"class":50}," e.target\n",[36,81314,81315],{"class":38,"line":34739},[36,81316,81317],{"class":124},"      \u002F\u002F 判断\n",[36,81319,81320,81322,81324,81326,81328],{"class":38,"line":34753},[36,81321,55811],{"class":42},[36,81323,68365],{"class":50},[36,81325,55817],{"class":42},[36,81327,69587],{"class":110},[36,81329,485],{"class":50},[36,81331,81332],{"class":38,"line":34762},[36,81333,81334],{"class":124},"        \u002F\u002F console.log(11)\n",[36,81336,81337],{"class":38,"line":34771},[36,81338,81339],{"class":124},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[36,81341,81342],{"class":38,"line":34780},[36,81343,81344],{"class":124},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[36,81346,81347,81349,81351,81353],{"class":38,"line":34789},[36,81348,53161],{"class":42},[36,81350,53164],{"class":50},[36,81352,70],{"class":42},[36,81354,81355],{"class":50}," goodsList\n",[36,81357,81358,81360,81363,81365,81368],{"class":38,"line":34795},[36,81359,3999],{"class":42},[36,81361,81362],{"class":50}," (dataset.index ",[36,81364,55817],{"class":42},[36,81366,81367],{"class":110}," '1'",[36,81369,485],{"class":50},[36,81371,81372,81375,81377,81380,81383,81385,81387,81389,81392,81394,81396,81399,81401,81403,81405],{"class":38,"line":34801},[36,81373,81374],{"class":50},"          arr ",[36,81376,70],{"class":42},[36,81378,81379],{"class":50}," goodsList.",[36,81381,81382],{"class":46},"filter",[36,81384,222],{"class":50},[36,81386,81126],{"class":473},[36,81388,81129],{"class":42},[36,81390,81391],{"class":50}," item.price ",[36,81393,3228],{"class":42},[36,81395,242],{"class":73},[36,81397,81398],{"class":42}," &&",[36,81400,81391],{"class":50},[36,81402,3117],{"class":42},[36,81404,162],{"class":73},[36,81406,1680],{"class":50},[36,81408,81409,81412,81414,81416,81418,81420,81423],{"class":38,"line":34809},[36,81410,81411],{"class":50},"        } ",[36,81413,3219],{"class":42},[36,81415,3222],{"class":42},[36,81417,81362],{"class":50},[36,81419,55817],{"class":42},[36,81421,81422],{"class":110}," '2'",[36,81424,485],{"class":50},[36,81426,81427,81429,81431,81433,81435,81437,81439,81441,81443,81445,81447,81449,81451,81453,81456],{"class":38,"line":34814},[36,81428,81374],{"class":50},[36,81430,70],{"class":42},[36,81432,81379],{"class":50},[36,81434,81382],{"class":46},[36,81436,222],{"class":50},[36,81438,81126],{"class":473},[36,81440,81129],{"class":42},[36,81442,81391],{"class":50},[36,81444,3228],{"class":42},[36,81446,162],{"class":73},[36,81448,81398],{"class":42},[36,81450,81391],{"class":50},[36,81452,3117],{"class":42},[36,81454,81455],{"class":73}," 300",[36,81457,1680],{"class":50},[36,81459,81460,81462,81464,81466,81468,81470,81473],{"class":38,"line":34820},[36,81461,81411],{"class":50},[36,81463,3219],{"class":42},[36,81465,3222],{"class":42},[36,81467,81362],{"class":50},[36,81469,55817],{"class":42},[36,81471,81472],{"class":110}," '3'",[36,81474,485],{"class":50},[36,81476,81477,81479,81481,81483,81485,81487,81489,81491,81493,81495,81497],{"class":38,"line":34831},[36,81478,81374],{"class":50},[36,81480,70],{"class":42},[36,81482,81379],{"class":50},[36,81484,81382],{"class":46},[36,81486,222],{"class":50},[36,81488,81126],{"class":473},[36,81490,81129],{"class":42},[36,81492,81391],{"class":50},[36,81494,3228],{"class":42},[36,81496,81455],{"class":73},[36,81498,1680],{"class":50},[36,81500,81501],{"class":38,"line":34837},[36,81502,4031],{"class":50},[36,81504,81505],{"class":38,"line":34857},[36,81506,81507],{"class":124},"        \u002F\u002F 渲染函数\n",[36,81509,81510,81512],{"class":38,"line":34863},[36,81511,71739],{"class":46},[36,81513,53743],{"class":50},[36,81515,81516],{"class":38,"line":34869},[36,81517,53729],{"class":50},[36,81519,81520],{"class":38,"line":34875},[36,81521,58],{"emptyLinePlaceholder":57},[36,81523,81524],{"class":38,"line":34892},[36,81525,34792],{"class":50},[36,81527,81528,81530,81532],{"class":38,"line":34898},[36,81529,53748],{"class":50},[36,81531,53144],{"class":52631},[36,81533,52638],{"class":50},[36,81535,81536,81538,81540],{"class":38,"line":34904},[36,81537,53116],{"class":50},[36,81539,53131],{"class":52631},[36,81541,52638],{"class":50},[36,81543,81544],{"class":38,"line":34910},[36,81545,58],{"emptyLinePlaceholder":57},[36,81547,81548,81550,81552],{"class":38,"line":34916},[36,81549,53116],{"class":50},[36,81551,51966],{"class":52631},[36,81553,52638],{"class":50},[14,81555,81557],{"id":81556},"_410-深入了解对象","4.10 深入了解对象",[1645,81559,81561],{"id":81560},"_4101-创建对象","4.10.1 创建对象",[19,81563,81564],{},[2992,81565],{"alt":31,"src":81566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81568,81569],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[1645,81571,81573],{"id":81572},"_4102-构造函数","4.10.2 构造函数",[19,81575,81576,81579],{},[887,81577,81578],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81581,81582,81585],{},[887,81583,81584],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,81587,81589],{"className":51964,"code":81588,"language":51966,"meta":31,"style":31},"\u003Cscript>\n\u002F\u002F例：\nfunction Pig(name,age,gender) {\n    this.name=name\n    this.age=age\n    this.gender=gender    \n}\n\u002F\u002F创建佩奇对象\nconst Peppa=new Pig('佩奇',6,'女')\n\u002F\u002F创建乔治对象\nconst George=new Pig('乔治',3,'男')\n\u003C\u002Fscript>\n",[33,81590,81591,81599,81604,81625,81638,81650,81662,81666,81671,81698,81703,81730],{"__ignoreMap":31},[36,81592,81593,81595,81597],{"class":38,"line":39},[36,81594,2577],{"class":50},[36,81596,53144],{"class":52631},[36,81598,52638],{"class":50},[36,81600,81601],{"class":38,"line":54},[36,81602,81603],{"class":124},"\u002F\u002F例：\n",[36,81605,81606,81608,81611,81613,81615,81617,81619,81621,81623],{"class":38,"line":61},[36,81607,55780],{"class":42},[36,81609,81610],{"class":46}," Pig",[36,81612,222],{"class":50},[36,81614,81141],{"class":473},[36,81616,2045],{"class":50},[36,81618,71552],{"class":473},[36,81620,2045],{"class":50},[36,81622,71569],{"class":473},[36,81624,485],{"class":50},[36,81626,81627,81630,81633,81635],{"class":38,"line":80},[36,81628,81629],{"class":73},"    this",[36,81631,81632],{"class":50},".name",[36,81634,70],{"class":42},[36,81636,81637],{"class":50},"name\n",[36,81639,81640,81642,81645,81647],{"class":38,"line":96},[36,81641,81629],{"class":73},[36,81643,81644],{"class":50},".age",[36,81646,70],{"class":42},[36,81648,81649],{"class":50},"age\n",[36,81651,81652,81654,81657,81659],{"class":38,"line":101},[36,81653,81629],{"class":73},[36,81655,81656],{"class":50},".gender",[36,81658,70],{"class":42},[36,81660,81661],{"class":50},"gender    \n",[36,81663,81664],{"class":38,"line":128},[36,81665,250],{"class":50},[36,81667,81668],{"class":38,"line":149},[36,81669,81670],{"class":124},"\u002F\u002F创建佩奇对象\n",[36,81672,81673,81675,81678,81680,81682,81684,81687,81689,81691,81693,81696],{"class":38,"line":154},[36,81674,1437],{"class":42},[36,81676,81677],{"class":73}," Peppa",[36,81679,13172],{"class":42},[36,81681,81610],{"class":46},[36,81683,222],{"class":50},[36,81685,81686],{"class":110},"'佩奇'",[36,81688,2045],{"class":50},[36,81690,2012],{"class":73},[36,81692,2045],{"class":50},[36,81694,81695],{"class":110},"'女'",[36,81697,1680],{"class":50},[36,81699,81700],{"class":38,"line":167},[36,81701,81702],{"class":124},"\u002F\u002F创建乔治对象\n",[36,81704,81705,81707,81710,81712,81714,81716,81719,81721,81723,81725,81728],{"class":38,"line":172},[36,81706,1437],{"class":42},[36,81708,81709],{"class":73}," George",[36,81711,13172],{"class":42},[36,81713,81610],{"class":46},[36,81715,222],{"class":50},[36,81717,81718],{"class":110},"'乔治'",[36,81720,2045],{"class":50},[36,81722,1741],{"class":73},[36,81724,2045],{"class":50},[36,81726,81727],{"class":110},"'男'",[36,81729,1680],{"class":50},[36,81731,81732,81734,81736],{"class":38,"line":192},[36,81733,53116],{"class":50},[36,81735,53144],{"class":52631},[36,81737,52638],{"class":50},[19,81739,81740],{},[2992,81741],{"alt":31,"src":81742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81744,81745],{},[2992,81746],{"alt":31,"src":81747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81749,81750],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81752,81753],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81755,81756],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81758,81759],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81761,81762],{},"这里用等号是因为：对象.属性=值",[19,81764,81765],{},"①利用对象字面量创建对象",[19,81767,81768],{},"const o={",[19,81770,81771],{},"name:'pink'",[19,81773,81774],{},"} ②利用new Object创建对象",[19,81776,81777],{},"const o=new Object({name:'pink'})",[19,81779,81780],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81782,81783],{},"构造函数创建对象的执行过程：",[19,81785,81786],{},[2992,81787],{"alt":31,"src":81788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[1645,81790,81792],{"id":81791},"_4103-实例成员","4.10.3 实例成员",[19,81794,81795],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[256,81797,81798,81801,81804],{},[259,81799,81800],{},"实例对象的属性和方法即为实例成员",[259,81802,81803],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[259,81805,81806],{},"构造函数创建的实例对象彼此独立互不影响",[1645,81808,81810],{"id":81809},"_4104-静态成员","4.10.4 静态成员",[19,81812,81813],{},[2992,81814],{"alt":31,"src":81815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81817,81818],{},"静态成员有Date.now() Math.PI Math.random()",[19,81820,81821],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81823,81824],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81826,81827],{},"function Pig(name) n {",[19,81829,81830],{},"this.name=name",[19,81832,2613],{},[19,81834,81835],{},"Pig.eyes=2",[19,81837,81838],{},"Pig.sayHai=function () { console.log(this) }",[19,81840,81841],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81843,81844],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81846,1388],{},[256,81848,81849,81852,81855,81858,81861],{},[259,81850,81851],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[259,81853,81854],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[259,81856,81857],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[259,81859,81860],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[259,81862,81863],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81865,81866],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[1645,81868,81870],{"id":81869},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81872,81873],{},"内置构造函数包含：",[19,81875,81876],{},[2992,81877],{"alt":31,"src":81878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81880,81881],{},[2992,81882],{"alt":31,"src":81883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81885,81886],{},"这些基本数据类型，js对他们进行了包装",[53144,81888,81889],{},"\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",[23327,81891,81893],{"id":81892},"_41051-object","4.10.5.1 Object",[19,81895,81896],{},"Object 是内置的构造函数，用于创建普通对象",[19,81898,81899],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,81901,81903],{"className":51964,"code":81902,"language":51966,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[33,81904,81905],{"__ignoreMap":31},[36,81906,81907],{"class":38,"line":39},[36,81908,81902],{"class":50},[19,81910,81911],{},"三个常用的静态方法：",[24239,81913,81915],{"id":81914},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81917,81918],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81920,81921],{},[2992,81922],{"alt":31,"src":81923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81925,81926],{},[2992,81927],{"alt":31,"src":81928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,81930,81932],{"className":54398,"code":81931,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,81933,81934,81942,81950,81955,81960,81965,81970,81975,81980,81988],{"__ignoreMap":31},[36,81935,81936,81938,81940],{"class":38,"line":39},[36,81937,2577],{"class":50},[36,81939,53131],{"class":52631},[36,81941,52638],{"class":50},[36,81943,81944,81946,81948],{"class":38,"line":54},[36,81945,53475],{"class":50},[36,81947,53144],{"class":52631},[36,81949,52638],{"class":50},[36,81951,81952],{"class":38,"line":61},[36,81953,81954],{"class":50},"    const o = { name: 'pink', age: 6 }\n",[36,81956,81957],{"class":38,"line":80},[36,81958,81959],{"class":50},"    \u002F\u002F 获得所有属性名\n",[36,81961,81962],{"class":38,"line":96},[36,81963,81964],{"class":50},"    const arr = Object.keys(o)\n",[36,81966,81967],{"class":38,"line":101},[36,81968,81969],{"class":50},"    console.log(arr)\n",[36,81971,81972],{"class":38,"line":128},[36,81973,81974],{"class":50},"    \u002F\u002F 获得所有属性值\n",[36,81976,81977],{"class":38,"line":149},[36,81978,81979],{"class":50},"    console.log(Object.values(o))\n",[36,81981,81982,81984,81986],{"class":38,"line":154},[36,81983,53748],{"class":50},[36,81985,53144],{"class":52631},[36,81987,52638],{"class":50},[36,81989,81990,81992,81994],{"class":38,"line":167},[36,81991,53116],{"class":50},[36,81993,53131],{"class":52631},[36,81995,52638],{"class":50},[24239,81997,81999],{"id":81998},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82001,82002],{},"Object.assign(oo,o)",[19,82004,82005],{},"后的东西添加给前 是追加",[19,82007,82008],{},[2992,82009],{"alt":31,"src":82010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82012,82013],{},[2992,82014],{"alt":31,"src":82015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,82017,82019],{"className":54398,"code":82018,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const o = { name: 'pink', age: 6 }\n    \u002F\u002F 获得所有属性名\n    const arr = Object.keys(o)\n    console.log(arr)\n    \u002F\u002F 获得所有属性值\n    console.log(Object.values(o))\n    const oo = {}\n    Object.assign(oo, o)\n    console.log(oo)\n    Object.assign(o, { gender: '女' })\n    console.log(o)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,82020,82021,82029,82037,82041,82045,82049,82053,82057,82061,82066,82071,82076,82081,82086,82094],{"__ignoreMap":31},[36,82022,82023,82025,82027],{"class":38,"line":39},[36,82024,2577],{"class":50},[36,82026,53131],{"class":52631},[36,82028,52638],{"class":50},[36,82030,82031,82033,82035],{"class":38,"line":54},[36,82032,53475],{"class":50},[36,82034,53144],{"class":52631},[36,82036,52638],{"class":50},[36,82038,82039],{"class":38,"line":61},[36,82040,81954],{"class":50},[36,82042,82043],{"class":38,"line":80},[36,82044,81959],{"class":50},[36,82046,82047],{"class":38,"line":96},[36,82048,81964],{"class":50},[36,82050,82051],{"class":38,"line":101},[36,82052,81969],{"class":50},[36,82054,82055],{"class":38,"line":128},[36,82056,81974],{"class":50},[36,82058,82059],{"class":38,"line":149},[36,82060,81979],{"class":50},[36,82062,82063],{"class":38,"line":154},[36,82064,82065],{"class":50},"    const oo = {}\n",[36,82067,82068],{"class":38,"line":167},[36,82069,82070],{"class":50},"    Object.assign(oo, o)\n",[36,82072,82073],{"class":38,"line":172},[36,82074,82075],{"class":50},"    console.log(oo)\n",[36,82077,82078],{"class":38,"line":192},[36,82079,82080],{"class":50},"    Object.assign(o, { gender: '女' })\n",[36,82082,82083],{"class":38,"line":211},[36,82084,82085],{"class":50},"    console.log(o)\n",[36,82087,82088,82090,82092],{"class":38,"line":216},[36,82089,53748],{"class":50},[36,82091,53144],{"class":52631},[36,82093,52638],{"class":50},[36,82095,82096,82098,82100],{"class":38,"line":231},[36,82097,53116],{"class":50},[36,82099,53131],{"class":52631},[36,82101,52638],{"class":50},[19,82103,82104],{},[2992,82105],{"alt":31,"src":82106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23327,82108,82110],{"id":82109},"_41052-array","4.10.5.2 Array",[19,82112,82113],{},"Array 是内置的构造函数，用于创建数组",[19,82115,82116],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,82118,82120],{"className":51964,"code":82119,"language":51966,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[33,82121,82122,82127],{"__ignoreMap":31},[36,82123,82124],{"class":38,"line":39},[36,82125,82126],{"class":50},"const arr=new Array(3,5)\n",[36,82128,82129],{"class":38,"line":54},[36,82130,82131],{"class":50},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82133,82134],{},"Array的实例方法，这个方法是实例成员",[19,82136,82137],{},[2992,82138],{"alt":31,"src":82139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24239,82141,82143],{"id":82142},"_410521-reduce","4.10.5.2.1 reduce",[19,82145,82146],{},[2992,82147],{"alt":31,"src":82148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,82150,82152],{"className":54398,"code":82151,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,82153,82154,82162,82170,82175,82180,82185,82190,82194,82199,82204,82209,82213,82218,82223,82227,82232,82237,82242,82250],{"__ignoreMap":31},[36,82155,82156,82158,82160],{"class":38,"line":39},[36,82157,2577],{"class":50},[36,82159,53131],{"class":52631},[36,82161,52638],{"class":50},[36,82163,82164,82166,82168],{"class":38,"line":54},[36,82165,53475],{"class":50},[36,82167,53144],{"class":52631},[36,82169,52638],{"class":50},[36,82171,82172],{"class":38,"line":61},[36,82173,82174],{"class":50},"    const arr = [1, 5, 8]\n",[36,82176,82177],{"class":38,"line":80},[36,82178,82179],{"class":50},"    \u002F\u002F 1.没有初始值\n",[36,82181,82182],{"class":38,"line":96},[36,82183,82184],{"class":50},"    const total = arr.reduce(function (prev, current) {\n",[36,82186,82187],{"class":38,"line":101},[36,82188,82189],{"class":50},"      return prev + current\n",[36,82191,82192],{"class":38,"line":128},[36,82193,34792],{"class":50},[36,82195,82196],{"class":38,"line":149},[36,82197,82198],{"class":50},"    console.log(total)   \u002F\u002F14\n",[36,82200,82201],{"class":38,"line":154},[36,82202,82203],{"class":50},"    \u002F\u002F 2.有初始值\n",[36,82205,82206],{"class":38,"line":167},[36,82207,82208],{"class":50},"    const total1 = arr.reduce(function (prev, current) {\n",[36,82210,82211],{"class":38,"line":172},[36,82212,82189],{"class":50},[36,82214,82215],{"class":38,"line":192},[36,82216,82217],{"class":50},"    }, 10)\n",[36,82219,82220],{"class":38,"line":211},[36,82221,82222],{"class":50},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[36,82224,82225],{"class":38,"line":216},[36,82226,58],{"emptyLinePlaceholder":57},[36,82228,82229],{"class":38,"line":231},[36,82230,82231],{"class":50},"    \u002F\u002F 3.箭头函数写法\n",[36,82233,82234],{"class":38,"line":236},[36,82235,82236],{"class":50},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[36,82238,82239],{"class":38,"line":247},[36,82240,82241],{"class":50},"    console.log(total2)   \u002F\u002F24\n",[36,82243,82244,82246,82248],{"class":38,"line":637},[36,82245,53748],{"class":50},[36,82247,53144],{"class":52631},[36,82249,52638],{"class":50},[36,82251,82252,82254,82256],{"class":38,"line":646},[36,82253,53116],{"class":50},[36,82255,53131],{"class":52631},[36,82257,52638],{"class":50},[19,82259,82260],{},"执行过程：",[256,82262,82263,82266,82269],{},[259,82264,82265],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[259,82267,82268],{},"每一次循环，把返回值给作为下一次循环的上一次值",[259,82270,82271],{},"如果有起始值，则起始值作为上一次值",[26,82273,82275],{"className":54398,"code":82274,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [1, 5, 8]\n    \u002F\u002F 1.没有初始值\n    const total = arr.reduce(function (prev, current) {\n      return prev + current\n    })\n    console.log(total)   \u002F\u002F14\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     1              5                    6\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     6              8                    14\n    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n    \u002F\u002F 2.有初始值\n    const total1 = arr.reduce(function (prev, current) {\n      return prev + current\n    }, 10)\n    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n    \u002F\u002F     10             1                     11\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     11             5                    16\n    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n    \u002F\u002F     16             8                    24\n    \u002F\u002F 有初始值时循环次数就是数组的长度\n    \u002F\u002F 3.箭头函数写法\n    const total2 = arr.reduce((prev, current) => prev + current, 10)\n    console.log(total2)   \u002F\u002F24\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,82276,82277,82285,82293,82297,82301,82305,82309,82313,82317,82322,82327,82332,82337,82342,82346,82350,82354,82358,82362,82366,82371,82375,82380,82384,82389,82394,82398,82402,82406,82414],{"__ignoreMap":31},[36,82278,82279,82281,82283],{"class":38,"line":39},[36,82280,2577],{"class":50},[36,82282,53131],{"class":52631},[36,82284,52638],{"class":50},[36,82286,82287,82289,82291],{"class":38,"line":54},[36,82288,53475],{"class":50},[36,82290,53144],{"class":52631},[36,82292,52638],{"class":50},[36,82294,82295],{"class":38,"line":61},[36,82296,82174],{"class":50},[36,82298,82299],{"class":38,"line":80},[36,82300,82179],{"class":50},[36,82302,82303],{"class":38,"line":96},[36,82304,82184],{"class":50},[36,82306,82307],{"class":38,"line":101},[36,82308,82189],{"class":50},[36,82310,82311],{"class":38,"line":128},[36,82312,34792],{"class":50},[36,82314,82315],{"class":38,"line":149},[36,82316,82198],{"class":50},[36,82318,82319],{"class":38,"line":154},[36,82320,82321],{"class":50},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[36,82323,82324],{"class":38,"line":167},[36,82325,82326],{"class":50},"    \u002F\u002F     1              5                    6\n",[36,82328,82329],{"class":38,"line":172},[36,82330,82331],{"class":50},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[36,82333,82334],{"class":38,"line":192},[36,82335,82336],{"class":50},"    \u002F\u002F     6              8                    14\n",[36,82338,82339],{"class":38,"line":211},[36,82340,82341],{"class":50},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[36,82343,82344],{"class":38,"line":216},[36,82345,82203],{"class":50},[36,82347,82348],{"class":38,"line":231},[36,82349,82208],{"class":50},[36,82351,82352],{"class":38,"line":236},[36,82353,82189],{"class":50},[36,82355,82356],{"class":38,"line":247},[36,82357,82217],{"class":50},[36,82359,82360],{"class":38,"line":637},[36,82361,82222],{"class":50},[36,82363,82364],{"class":38,"line":646},[36,82365,82321],{"class":50},[36,82367,82368],{"class":38,"line":655},[36,82369,82370],{"class":50},"    \u002F\u002F     10             1                     11\n",[36,82372,82373],{"class":38,"line":660},[36,82374,82331],{"class":50},[36,82376,82377],{"class":38,"line":665},[36,82378,82379],{"class":50},"    \u002F\u002F     11             5                    16\n",[36,82381,82382],{"class":38,"line":674},[36,82383,82331],{"class":50},[36,82385,82386],{"class":38,"line":679},[36,82387,82388],{"class":50},"    \u002F\u002F     16             8                    24\n",[36,82390,82391],{"class":38,"line":692},[36,82392,82393],{"class":50},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[36,82395,82396],{"class":38,"line":705},[36,82397,82231],{"class":50},[36,82399,82400],{"class":38,"line":710},[36,82401,82236],{"class":50},[36,82403,82404],{"class":38,"line":722},[36,82405,82241],{"class":50},[36,82407,82408,82410,82412],{"class":38,"line":750},[36,82409,53748],{"class":50},[36,82411,53144],{"class":52631},[36,82413,52638],{"class":50},[36,82415,82416,82418,82420],{"class":38,"line":755},[36,82417,53116],{"class":50},[36,82419,53131],{"class":52631},[36,82421,52638],{"class":50},[24239,82423,82425],{"id":82424},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82427,82428],{},[2992,82429],{"alt":31,"src":82430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,82432,82434],{"className":54398,"code":82433,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = [\n      { name: '张三', salary: 10000 },\n      { name: '李四', salary: 10000 },\n      { name: '王五', salary: 10000 }\n    ]\n    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n    \u002F\u002F prev是累计值\n    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n    console.log(total)\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F    0       10000*1.3=13000       13000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  13000     10000*1.3=13000       26000\n    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n    \u002F\u002F  26000     10000*1.3=13000       39000\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,82435,82436,82444,82452,82457,82462,82467,82472,82476,82481,82486,82491,82496,82501,82506,82510,82515,82519,82524,82532],{"__ignoreMap":31},[36,82437,82438,82440,82442],{"class":38,"line":39},[36,82439,2577],{"class":50},[36,82441,53131],{"class":52631},[36,82443,52638],{"class":50},[36,82445,82446,82448,82450],{"class":38,"line":54},[36,82447,53475],{"class":50},[36,82449,53144],{"class":52631},[36,82451,52638],{"class":50},[36,82453,82454],{"class":38,"line":61},[36,82455,82456],{"class":50},"    const arr = [\n",[36,82458,82459],{"class":38,"line":80},[36,82460,82461],{"class":50},"      { name: '张三', salary: 10000 },\n",[36,82463,82464],{"class":38,"line":96},[36,82465,82466],{"class":50},"      { name: '李四', salary: 10000 },\n",[36,82468,82469],{"class":38,"line":101},[36,82470,82471],{"class":50},"      { name: '王五', salary: 10000 }\n",[36,82473,82474],{"class":38,"line":128},[36,82475,54440],{"class":50},[36,82477,82478],{"class":38,"line":149},[36,82479,82480],{"class":50},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[36,82482,82483],{"class":38,"line":154},[36,82484,82485],{"class":50},"    \u002F\u002F prev是累计值\n",[36,82487,82488],{"class":38,"line":167},[36,82489,82490],{"class":50},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[36,82492,82493],{"class":38,"line":172},[36,82494,82495],{"class":50},"    console.log(total)\n",[36,82497,82498],{"class":38,"line":192},[36,82499,82500],{"class":50},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[36,82502,82503],{"class":38,"line":211},[36,82504,82505],{"class":50},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[36,82507,82508],{"class":38,"line":216},[36,82509,82500],{"class":50},[36,82511,82512],{"class":38,"line":231},[36,82513,82514],{"class":50},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[36,82516,82517],{"class":38,"line":236},[36,82518,82500],{"class":50},[36,82520,82521],{"class":38,"line":247},[36,82522,82523],{"class":50},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[36,82525,82526,82528,82530],{"class":38,"line":637},[36,82527,53748],{"class":50},[36,82529,53144],{"class":52631},[36,82531,52638],{"class":50},[36,82533,82534,82536,82538],{"class":38,"line":646},[36,82535,53116],{"class":50},[36,82537,53131],{"class":52631},[36,82539,52638],{"class":50},[24239,82541,82543],{"id":82542},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82545,82546],{},[2992,82547],{"alt":31,"src":82548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82550,82551],{},[2992,82552],{"alt":31,"src":82553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[256,82555,82556],{},[259,82557,82558],{},"find()",[19,82560,82561],{},"循环查找，找到第一个就ok",[19,82563,82564],{},[1906,82565,82568],{"href":82566,"rel":82567},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25195],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,82570,82572],{"className":51964,"code":82571,"language":51966,"meta":31,"style":31},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[33,82573,82574,82579,82584],{"__ignoreMap":31},[36,82575,82576],{"class":38,"line":39},[36,82577,82578],{"class":50},"const array1 = [5, 12, 8, 130, 44]\n",[36,82580,82581],{"class":38,"line":54},[36,82582,82583],{"class":50},"const found = array1.find((element) => element > 10)\n",[36,82585,82586],{"class":38,"line":61},[36,82587,82588],{"class":50},"console.log(found)  \u002F\u002F12\n",[19,82590,82591,82593,82594,82599,82600,82603,82604,82606,82607,82612,82613,82615,82616,82618,82619,82621,82622],{},[33,82592,82558],{}," 方法是一个",[1906,82595,82598],{"href":82596,"rel":82597},"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",[25195],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[33,82601,82602],{},"callbackFn"," 函数，直到 ",[33,82605,82602],{}," 返回一个",[1906,82608,82611],{"href":82609,"rel":82610},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25195],"真值","。然后 ",[33,82614,82558],{}," 返回该元素并停止迭代数组。如果 ",[33,82617,82602],{}," 从未返回真值，则 ",[33,82620,82558],{}," 返回 ",[33,82623,82624],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,82626,82628],{"className":54398,"code":82627,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const arr = ['red', 'blue', 'green']\n    const found = arr.find(item => item === 'pink')\n    console.log(found)   \u002F\u002F没有，输出undefined\n\n    \u002F\u002F 使用场景，用于查找数据\n    const arr1 = [\n      {\n        name: '小米',\n        price: 1999\n      },\n      {\n        name: '华为',\n        price: 3999\n      }\n    ]\n    \u002F\u002F 这小米这个对象，并且返回这个对象\n    \u002F\u002F const found1 = arr1.find(item => {\n    \u002F\u002F   if (item.name === '小米') {\n    \u002F\u002F     return item\n    \u002F\u002F   }\n    \u002F\u002F })\n    \u002F\u002F 另一种写法\n    const found1 = arr1.find(item => {\n      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n      return item.name = '小米'\n    })\n    console.log(found1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n",[33,82629,82630,82638,82646,82651,82656,82661,82665,82670,82675,82679,82684,82689,82693,82697,82702,82707,82711,82715,82720,82725,82730,82735,82740,82744,82749,82754,82759,82764,82768,82773,82781],{"__ignoreMap":31},[36,82631,82632,82634,82636],{"class":38,"line":39},[36,82633,2577],{"class":50},[36,82635,53131],{"class":52631},[36,82637,52638],{"class":50},[36,82639,82640,82642,82644],{"class":38,"line":54},[36,82641,53475],{"class":50},[36,82643,53144],{"class":52631},[36,82645,52638],{"class":50},[36,82647,82648],{"class":38,"line":61},[36,82649,82650],{"class":50},"    const arr = ['red', 'blue', 'green']\n",[36,82652,82653],{"class":38,"line":80},[36,82654,82655],{"class":50},"    const found = arr.find(item => item === 'pink')\n",[36,82657,82658],{"class":38,"line":96},[36,82659,82660],{"class":50},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[36,82662,82663],{"class":38,"line":101},[36,82664,58],{"emptyLinePlaceholder":57},[36,82666,82667],{"class":38,"line":128},[36,82668,82669],{"class":50},"    \u002F\u002F 使用场景，用于查找数据\n",[36,82671,82672],{"class":38,"line":149},[36,82673,82674],{"class":50},"    const arr1 = [\n",[36,82676,82677],{"class":38,"line":154},[36,82678,80717],{"class":50},[36,82680,82681],{"class":38,"line":167},[36,82682,82683],{"class":50},"        name: '小米',\n",[36,82685,82686],{"class":38,"line":172},[36,82687,82688],{"class":50},"        price: 1999\n",[36,82690,82691],{"class":38,"line":192},[36,82692,79223],{"class":50},[36,82694,82695],{"class":38,"line":211},[36,82696,80717],{"class":50},[36,82698,82699],{"class":38,"line":216},[36,82700,82701],{"class":50},"        name: '华为',\n",[36,82703,82704],{"class":38,"line":231},[36,82705,82706],{"class":50},"        price: 3999\n",[36,82708,82709],{"class":38,"line":236},[36,82710,53729],{"class":50},[36,82712,82713],{"class":38,"line":247},[36,82714,54440],{"class":50},[36,82716,82717],{"class":38,"line":637},[36,82718,82719],{"class":50},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[36,82721,82722],{"class":38,"line":646},[36,82723,82724],{"class":50},"    \u002F\u002F const found1 = arr1.find(item => {\n",[36,82726,82727],{"class":38,"line":655},[36,82728,82729],{"class":50},"    \u002F\u002F   if (item.name === '小米') {\n",[36,82731,82732],{"class":38,"line":660},[36,82733,82734],{"class":50},"    \u002F\u002F     return item\n",[36,82736,82737],{"class":38,"line":665},[36,82738,82739],{"class":50},"    \u002F\u002F   }\n",[36,82741,82742],{"class":38,"line":674},[36,82743,64621],{"class":50},[36,82745,82746],{"class":38,"line":679},[36,82747,82748],{"class":50},"    \u002F\u002F 另一种写法\n",[36,82750,82751],{"class":38,"line":692},[36,82752,82753],{"class":50},"    const found1 = arr1.find(item => {\n",[36,82755,82756],{"class":38,"line":705},[36,82757,82758],{"class":50},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[36,82760,82761],{"class":38,"line":710},[36,82762,82763],{"class":50},"      return item.name = '小米'\n",[36,82765,82766],{"class":38,"line":722},[36,82767,34792],{"class":50},[36,82769,82770],{"class":38,"line":750},[36,82771,82772],{"class":50},"    console.log(found1)\n",[36,82774,82775,82777,82779],{"class":38,"line":755},[36,82776,53748],{"class":50},[36,82778,53144],{"class":52631},[36,82780,52638],{"class":50},[36,82782,82783,82785,82787],{"class":38,"line":777},[36,82784,53116],{"class":50},[36,82786,53131],{"class":52631},[36,82788,52638],{"class":50},[19,82790,82791],{},[2992,82792],{"alt":31,"src":82793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82795,82796],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[256,82798,82799],{"start":54},[259,82800,82801],{},"every()返回的是布尔值",[19,82803,82804],{},[1906,82805,82808],{"href":82806,"rel":82807},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25195],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82810,82811],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82813,82814],{},"some是只有有一个就没问题",[19,82816,82817],{},"every是必须全是才行",[26,82819,82823],{"className":82820,"code":82821,"language":82822,"meta":31,"style":31},"language-sql shiki shiki-themes github-light github-dark","function isBigEnough(element, index, array) {\n  return element >= 10;\n}\n[12, 5, 8, 130, 44].every(isBigEnough); \u002F\u002F false\n[12, 54, 18, 130, 44].every(isBigEnough); \u002F\u002F true\n","sql",[33,82824,82825,82841,82855,82859,82868],{"__ignoreMap":31},[36,82826,82827,82829,82832,82834,82836,82839],{"class":38,"line":39},[36,82828,55780],{"class":42},[36,82830,82831],{"class":50}," isBigEnough(element, ",[36,82833,75389],{"class":42},[36,82835,477],{"class":50},[36,82837,82838],{"class":42},"array",[36,82840,485],{"class":50},[36,82842,82843,82846,82849,82851,82853],{"class":38,"line":54},[36,82844,82845],{"class":42},"  return",[36,82847,82848],{"class":50}," element ",[36,82850,3228],{"class":42},[36,82852,74],{"class":73},[36,82854,77],{"class":50},[36,82856,82857],{"class":38,"line":61},[36,82858,250],{"class":50},[36,82860,82861,82864,82866],{"class":38,"line":80},[36,82862,82863],{"class":50},"[12, 5, 8, 130, 44].every(isBigEnough); ",[36,82865,34660],{"class":42},[36,82867,55847],{"class":50},[36,82869,82870,82873,82875],{"class":38,"line":96},[36,82871,82872],{"class":50},"[12, 54, 18, 130, 44].every(isBigEnough); ",[36,82874,34660],{"class":42},[36,82876,59271],{"class":50},[26,82878,82880],{"className":54398,"code":82879,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 20, 30]\n    const flag = arr.every(item => item >= 10)\n    console.log(flag)    \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,82881,82882,82890,82898,82903,82907,82912,82917,82925],{"__ignoreMap":31},[36,82883,82884,82886,82888],{"class":38,"line":39},[36,82885,2577],{"class":50},[36,82887,53131],{"class":52631},[36,82889,52638],{"class":50},[36,82891,82892,82894,82896],{"class":38,"line":54},[36,82893,53475],{"class":50},[36,82895,53144],{"class":52631},[36,82897,52638],{"class":50},[36,82899,82900],{"class":38,"line":61},[36,82901,82902],{"class":50},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[36,82904,82905],{"class":38,"line":80},[36,82906,79653],{"class":50},[36,82908,82909],{"class":38,"line":96},[36,82910,82911],{"class":50},"    const flag = arr.every(item => item >= 10)\n",[36,82913,82914],{"class":38,"line":101},[36,82915,82916],{"class":50},"    console.log(flag)    \u002F\u002Ftrue\n",[36,82918,82919,82921,82923],{"class":38,"line":128},[36,82920,53748],{"class":50},[36,82922,53144],{"class":52631},[36,82924,52638],{"class":50},[36,82926,82927,82929,82931],{"class":38,"line":149},[36,82928,53116],{"class":50},[36,82930,53131],{"class":52631},[36,82932,52638],{"class":50},[26,82934,82936],{"className":54398,"code":82935,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n    const arr = [10, 0, 5]\n    const flag = arr.some(item => item >= 10)\n    console.log(flag)   \u002F\u002Ftrue\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,82937,82938,82946,82954,82958,82963,82968,82973,82981],{"__ignoreMap":31},[36,82939,82940,82942,82944],{"class":38,"line":39},[36,82941,2577],{"class":50},[36,82943,53131],{"class":52631},[36,82945,52638],{"class":50},[36,82947,82948,82950,82952],{"class":38,"line":54},[36,82949,53475],{"class":50},[36,82951,53144],{"class":52631},[36,82953,52638],{"class":50},[36,82955,82956],{"class":38,"line":61},[36,82957,82902],{"class":50},[36,82959,82960],{"class":38,"line":80},[36,82961,82962],{"class":50},"    const arr = [10, 0, 5]\n",[36,82964,82965],{"class":38,"line":96},[36,82966,82967],{"class":50},"    const flag = arr.some(item => item >= 10)\n",[36,82969,82970],{"class":38,"line":101},[36,82971,82972],{"class":50},"    console.log(flag)   \u002F\u002Ftrue\n",[36,82974,82975,82977,82979],{"class":38,"line":128},[36,82976,53748],{"class":50},[36,82978,53144],{"class":52631},[36,82980,52638],{"class":50},[36,82982,82983,82985,82987],{"class":38,"line":149},[36,82984,53116],{"class":50},[36,82986,53131],{"class":52631},[36,82988,52638],{"class":50},[24239,82990,82992],{"id":82991},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82994,82995],{},[2992,82996],{"alt":31,"src":82997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,82999,83001],{"className":51964,"code":83000,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    div {\n      width: 200px;\n      height: 40px;\n      line-height: 40px;\n      font: 12px;\n      text-align: center;\n      background-color: pink;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const spec = { size: '40cm*40cm', color: '黑色' }\n    \u002F\u002F const arr = Object.values(spec)\n    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n    document.querySelector('div').innerHTML = Object.values(spec).join('\u002F')\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,83002,83003,83013,83027,83031,83039,83053,83073,83085,83093,83100,83112,83124,83136,83148,83158,83168,83172,83180,83188,83192,83200,83212,83220,83242,83247,83252,83285,83293,83301,83305],{"__ignoreMap":31},[36,83004,83005,83007,83009,83011],{"class":38,"line":39},[36,83006,52628],{"class":50},[36,83008,52632],{"class":52631},[36,83010,52635],{"class":46},[36,83012,52638],{"class":50},[36,83014,83015,83017,83019,83021,83023,83025],{"class":38,"line":54},[36,83016,2577],{"class":50},[36,83018,51966],{"class":52631},[36,83020,52647],{"class":46},[36,83022,70],{"class":50},[36,83024,52652],{"class":110},[36,83026,52638],{"class":50},[36,83028,83029],{"class":38,"line":61},[36,83030,58],{"emptyLinePlaceholder":57},[36,83032,83033,83035,83037],{"class":38,"line":80},[36,83034,2577],{"class":50},[36,83036,52665],{"class":52631},[36,83038,52638],{"class":50},[36,83040,83041,83043,83045,83047,83049,83051],{"class":38,"line":96},[36,83042,53475],{"class":50},[36,83044,52675],{"class":52631},[36,83046,52678],{"class":46},[36,83048,70],{"class":50},[36,83050,52683],{"class":110},[36,83052,52638],{"class":50},[36,83054,83055,83057,83059,83061,83063,83065,83067,83069,83071],{"class":38,"line":101},[36,83056,53475],{"class":50},[36,83058,52675],{"class":52631},[36,83060,16249],{"class":46},[36,83062,70],{"class":50},[36,83064,52722],{"class":110},[36,83066,52702],{"class":46},[36,83068,70],{"class":50},[36,83070,52729],{"class":110},[36,83072,52638],{"class":50},[36,83074,83075,83077,83079,83081,83083],{"class":38,"line":128},[36,83076,53475],{"class":50},[36,83078,52738],{"class":52631},[36,83080,52741],{"class":50},[36,83082,52738],{"class":52631},[36,83084,52638],{"class":50},[36,83086,83087,83089,83091],{"class":38,"line":149},[36,83088,53475],{"class":50},[36,83090,1592],{"class":52631},[36,83092,52638],{"class":50},[36,83094,83095,83098],{"class":38,"line":154},[36,83096,83097],{"class":52631},"    div",[36,83099,16901],{"class":50},[36,83101,83102,83104,83106,83108,83110],{"class":38,"line":167},[36,83103,56102],{"class":73},[36,83105,52768],{"class":50},[36,83107,3240],{"class":73},[36,83109,52823],{"class":42},[36,83111,77],{"class":50},[36,83113,83114,83116,83118,83120,83122],{"class":38,"line":172},[36,83115,56116],{"class":73},[36,83117,52768],{"class":50},[36,83119,2068],{"class":73},[36,83121,52823],{"class":42},[36,83123,77],{"class":50},[36,83125,83126,83128,83130,83132,83134],{"class":38,"line":192},[36,83127,58690],{"class":73},[36,83129,52768],{"class":50},[36,83131,2068],{"class":73},[36,83133,52823],{"class":42},[36,83135,77],{"class":50},[36,83137,83138,83140,83142,83144,83146],{"class":38,"line":211},[36,83139,66464],{"class":73},[36,83141,52768],{"class":50},[36,83143,2165],{"class":73},[36,83145,52823],{"class":42},[36,83147,77],{"class":50},[36,83149,83150,83152,83154,83156],{"class":38,"line":216},[36,83151,58617],{"class":73},[36,83153,52768],{"class":50},[36,83155,52923],{"class":73},[36,83157,77],{"class":50},[36,83159,83160,83162,83164,83166],{"class":38,"line":231},[36,83161,56215],{"class":73},[36,83163,52768],{"class":50},[36,83165,52976],{"class":73},[36,83167,77],{"class":50},[36,83169,83170],{"class":38,"line":236},[36,83171,3693],{"class":50},[36,83173,83174,83176,83178],{"class":38,"line":247},[36,83175,53748],{"class":50},[36,83177,1592],{"class":52631},[36,83179,52638],{"class":50},[36,83181,83182,83184,83186],{"class":38,"line":637},[36,83183,53116],{"class":50},[36,83185,52665],{"class":52631},[36,83187,52638],{"class":50},[36,83189,83190],{"class":38,"line":646},[36,83191,58],{"emptyLinePlaceholder":57},[36,83193,83194,83196,83198],{"class":38,"line":655},[36,83195,2577],{"class":50},[36,83197,53131],{"class":52631},[36,83199,52638],{"class":50},[36,83201,83202,83204,83206,83208,83210],{"class":38,"line":660},[36,83203,53475],{"class":50},[36,83205,52942],{"class":52631},[36,83207,56645],{"class":50},[36,83209,52942],{"class":52631},[36,83211,52638],{"class":50},[36,83213,83214,83216,83218],{"class":38,"line":665},[36,83215,53475],{"class":50},[36,83217,53144],{"class":52631},[36,83219,52638],{"class":50},[36,83221,83222,83224,83227,83229,83232,83235,83237,83240],{"class":38,"line":674},[36,83223,1498],{"class":42},[36,83225,83226],{"class":73}," spec",[36,83228,14893],{"class":42},[36,83230,83231],{"class":50}," { size: ",[36,83233,83234],{"class":110},"'40cm*40cm'",[36,83236,56795],{"class":50},[36,83238,83239],{"class":110},"'黑色'",[36,83241,56935],{"class":50},[36,83243,83244],{"class":38,"line":679},[36,83245,83246],{"class":124},"    \u002F\u002F const arr = Object.values(spec)\n",[36,83248,83249],{"class":38,"line":692},[36,83250,83251],{"class":124},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[36,83253,83254,83256,83258,83260,83263,83265,83267,83270,83273,83276,83278,83280,83283],{"class":38,"line":705},[36,83255,53738],{"class":50},[36,83257,55730],{"class":46},[36,83259,222],{"class":50},[36,83261,83262],{"class":110},"'div'",[36,83264,75580],{"class":50},[36,83266,70],{"class":42},[36,83268,83269],{"class":50}," Object.",[36,83271,83272],{"class":46},"values",[36,83274,83275],{"class":50},"(spec).",[36,83277,75554],{"class":46},[36,83279,222],{"class":50},[36,83281,83282],{"class":110},"'\u002F'",[36,83284,1680],{"class":50},[36,83286,83287,83289,83291],{"class":38,"line":710},[36,83288,53748],{"class":50},[36,83290,53144],{"class":52631},[36,83292,52638],{"class":50},[36,83294,83295,83297,83299],{"class":38,"line":722},[36,83296,53116],{"class":50},[36,83298,53131],{"class":52631},[36,83300,52638],{"class":50},[36,83302,83303],{"class":38,"line":750},[36,83304,58],{"emptyLinePlaceholder":57},[36,83306,83307,83309,83311],{"class":38,"line":755},[36,83308,53116],{"class":50},[36,83310,51966],{"class":52631},[36,83312,52638],{"class":50},[19,83314,83315],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24239,83317,83319],{"id":83318},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83321,83322],{},"静态方法，将伪数组转换为真数组",[19,83324,83325],{},[2992,83326],{"alt":31,"src":83327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,83329,83331],{"className":54398,"code":83330,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cul>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n    \u003Cli>\u003C\u002Fli>\n  \u003C\u002Ful>\n  \u003Cscript>\n    const lis = document.querySelectorAll('li')\n    const liss = Array.from(lis)\n    liss.pop()\n    console.log(liss)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83332,83333,83341,83349,83361,83373,83385,83393,83401,83406,83411,83416,83421,83429],{"__ignoreMap":31},[36,83334,83335,83337,83339],{"class":38,"line":39},[36,83336,2577],{"class":50},[36,83338,53131],{"class":52631},[36,83340,52638],{"class":50},[36,83342,83343,83345,83347],{"class":38,"line":54},[36,83344,53475],{"class":50},[36,83346,2674],{"class":52631},[36,83348,52638],{"class":50},[36,83350,83351,83353,83355,83357,83359],{"class":38,"line":61},[36,83352,52672],{"class":50},[36,83354,259],{"class":52631},[36,83356,56645],{"class":50},[36,83358,259],{"class":52631},[36,83360,52638],{"class":50},[36,83362,83363,83365,83367,83369,83371],{"class":38,"line":80},[36,83364,52672],{"class":50},[36,83366,259],{"class":52631},[36,83368,56645],{"class":50},[36,83370,259],{"class":52631},[36,83372,52638],{"class":50},[36,83374,83375,83377,83379,83381,83383],{"class":38,"line":96},[36,83376,52672],{"class":50},[36,83378,259],{"class":52631},[36,83380,56645],{"class":50},[36,83382,259],{"class":52631},[36,83384,52638],{"class":50},[36,83386,83387,83389,83391],{"class":38,"line":101},[36,83388,53748],{"class":50},[36,83390,2674],{"class":52631},[36,83392,52638],{"class":50},[36,83394,83395,83397,83399],{"class":38,"line":128},[36,83396,53475],{"class":50},[36,83398,53144],{"class":52631},[36,83400,52638],{"class":50},[36,83402,83403],{"class":38,"line":149},[36,83404,83405],{"class":50},"    const lis = document.querySelectorAll('li')\n",[36,83407,83408],{"class":38,"line":154},[36,83409,83410],{"class":50},"    const liss = Array.from(lis)\n",[36,83412,83413],{"class":38,"line":167},[36,83414,83415],{"class":50},"    liss.pop()\n",[36,83417,83418],{"class":38,"line":172},[36,83419,83420],{"class":50},"    console.log(liss)\n",[36,83422,83423,83425,83427],{"class":38,"line":192},[36,83424,53748],{"class":50},[36,83426,53144],{"class":52631},[36,83428,52638],{"class":50},[36,83430,83431,83433,83435],{"class":38,"line":211},[36,83432,53116],{"class":50},[36,83434,53131],{"class":52631},[36,83436,52638],{"class":50},[19,83438,83439],{},[2992,83440],{"alt":31,"src":83441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23327,83443,83445],{"id":83444},"_41053-string","4.10.5.3 String",[19,83447,83448],{},[2992,83449],{"alt":31,"src":83450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24239,83452,83454],{"id":83453},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,83456,83458],{"className":54398,"code":83457,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 把字符串转化为数组\n    const str = 'pink,red'\n    const arr = str.split(',')\n    console.log(arr)\n    const str1 = '2025-8-25'\n    const arr1 = str1.split('-')\n    console.log(arr1)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,83459,83460,83468,83476,83481,83486,83491,83495,83500,83505,83510,83518],{"__ignoreMap":31},[36,83461,83462,83464,83466],{"class":38,"line":39},[36,83463,2577],{"class":50},[36,83465,53131],{"class":52631},[36,83467,52638],{"class":50},[36,83469,83470,83472,83474],{"class":38,"line":54},[36,83471,53475],{"class":50},[36,83473,53144],{"class":52631},[36,83475,52638],{"class":50},[36,83477,83478],{"class":38,"line":61},[36,83479,83480],{"class":50},"    \u002F\u002F 把字符串转化为数组\n",[36,83482,83483],{"class":38,"line":80},[36,83484,83485],{"class":50},"    const str = 'pink,red'\n",[36,83487,83488],{"class":38,"line":96},[36,83489,83490],{"class":50},"    const arr = str.split(',')\n",[36,83492,83493],{"class":38,"line":101},[36,83494,81969],{"class":50},[36,83496,83497],{"class":38,"line":128},[36,83498,83499],{"class":50},"    const str1 = '2025-8-25'\n",[36,83501,83502],{"class":38,"line":149},[36,83503,83504],{"class":50},"    const arr1 = str1.split('-')\n",[36,83506,83507],{"class":38,"line":154},[36,83508,83509],{"class":50},"    console.log(arr1)\n",[36,83511,83512,83514,83516],{"class":38,"line":167},[36,83513,53748],{"class":50},[36,83515,53144],{"class":52631},[36,83517,52638],{"class":50},[36,83519,83520,83522,83524],{"class":38,"line":172},[36,83521,53116],{"class":50},[36,83523,53131],{"class":52631},[36,83525,52638],{"class":50},[24239,83527,83529],{"id":83528},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83531,6670],{},[19,83533,83534],{},"substring(indexStart)",[19,83536,83537],{},"substring(indexStart, indexEnd)",[2674,83539,83540,83551,83563,83573],{},[259,83541,83542,83543,83546,83547,83550],{},"如果省略了 ",[33,83544,83545],{},"indexEnd","，则 ",[33,83548,83549],{},"substring()"," 提取字符直到字符串的末尾",[259,83552,83553,83554,83557,83558,83546,83560,83562],{},"如果 ",[33,83555,83556],{},"indexStart"," 等于 ",[33,83559,83545],{},[33,83561,83549],{}," 返回一个空字符串",[259,83564,83553,83565,83567,83568,83546,83570,83572],{},[33,83566,83556],{}," 大于 ",[33,83569,83545],{},[33,83571,83549],{}," 的效果就像交换了这两个参数一样",[259,83574,83575],{},"结束的索引号不包含想要截取的部分",[26,83577,83579],{"className":82820,"code":83578,"language":82822,"meta":31,"style":31},"const anyString = \"Mozilla\";\n\nconsole.log(anyString.substring(0, 1))  \u002F\u002F 'M'\nconsole.log(anyString.substring(1, 0))  \u002F\u002F 'M'\n\nconsole.log(anyString.substring(0, 6))  \u002F\u002F 'Mozill'\n\nconsole.log(anyString.substring(4))  \u002F\u002F 'lla'\nconsole.log(anyString.substring(4, 7))   \u002F\u002F 'lla'\nconsole.log(anyString.substring(7, 4))  \u002F\u002F 'lla'\n\nconsole.log(anyString.substring(0, 7))  \u002F\u002F 'Mozilla'\nconsole.log(anyString.substring(0, 10))  \u002F\u002F 'Mozilla'\n",[33,83580,83581,83593,83597,83631,83661,83665,83696,83700,83727,83757,83787,83791,83822],{"__ignoreMap":31},[36,83582,83583,83586,83588,83591],{"class":38,"line":39},[36,83584,83585],{"class":50},"const anyString ",[36,83587,70],{"class":42},[36,83589,83590],{"class":110}," \"Mozilla\"",[36,83592,77],{"class":50},[36,83594,83595],{"class":38,"line":54},[36,83596,58],{"emptyLinePlaceholder":57},[36,83598,83599,83602,83604,83606,83608,83611,83613,83616,83618,83620,83622,83624,83626,83628],{"class":38,"line":61},[36,83600,83601],{"class":73},"console",[36,83603,2225],{"class":50},[36,83605,59578],{"class":73},[36,83607,222],{"class":50},[36,83609,83610],{"class":73},"anyString",[36,83612,2225],{"class":50},[36,83614,83615],{"class":73},"substring",[36,83617,222],{"class":50},[36,83619,1859],{"class":73},[36,83621,477],{"class":50},[36,83623,1885],{"class":73},[36,83625,76584],{"class":50},[36,83627,34660],{"class":42},[36,83629,83630],{"class":110}," 'M'\n",[36,83632,83633,83635,83637,83639,83641,83643,83645,83647,83649,83651,83653,83655,83657,83659],{"class":38,"line":80},[36,83634,83601],{"class":73},[36,83636,2225],{"class":50},[36,83638,59578],{"class":73},[36,83640,222],{"class":50},[36,83642,83610],{"class":73},[36,83644,2225],{"class":50},[36,83646,83615],{"class":73},[36,83648,222],{"class":50},[36,83650,1885],{"class":73},[36,83652,477],{"class":50},[36,83654,1859],{"class":73},[36,83656,76584],{"class":50},[36,83658,34660],{"class":42},[36,83660,83630],{"class":110},[36,83662,83663],{"class":38,"line":96},[36,83664,58],{"emptyLinePlaceholder":57},[36,83666,83667,83669,83671,83673,83675,83677,83679,83681,83683,83685,83687,83689,83691,83693],{"class":38,"line":101},[36,83668,83601],{"class":73},[36,83670,2225],{"class":50},[36,83672,59578],{"class":73},[36,83674,222],{"class":50},[36,83676,83610],{"class":73},[36,83678,2225],{"class":50},[36,83680,83615],{"class":73},[36,83682,222],{"class":50},[36,83684,1859],{"class":73},[36,83686,477],{"class":50},[36,83688,2012],{"class":73},[36,83690,76584],{"class":50},[36,83692,34660],{"class":42},[36,83694,83695],{"class":110}," 'Mozill'\n",[36,83697,83698],{"class":38,"line":128},[36,83699,58],{"emptyLinePlaceholder":57},[36,83701,83702,83704,83706,83708,83710,83712,83714,83716,83718,83720,83722,83724],{"class":38,"line":149},[36,83703,83601],{"class":73},[36,83705,2225],{"class":50},[36,83707,59578],{"class":73},[36,83709,222],{"class":50},[36,83711,83610],{"class":73},[36,83713,2225],{"class":50},[36,83715,83615],{"class":73},[36,83717,222],{"class":50},[36,83719,1961],{"class":73},[36,83721,76584],{"class":50},[36,83723,34660],{"class":42},[36,83725,83726],{"class":110}," 'lla'\n",[36,83728,83729,83731,83733,83735,83737,83739,83741,83743,83745,83747,83749,83751,83753,83755],{"class":38,"line":154},[36,83730,83601],{"class":73},[36,83732,2225],{"class":50},[36,83734,59578],{"class":73},[36,83736,222],{"class":50},[36,83738,83610],{"class":73},[36,83740,2225],{"class":50},[36,83742,83615],{"class":73},[36,83744,222],{"class":50},[36,83746,1961],{"class":73},[36,83748,477],{"class":50},[36,83750,2036],{"class":73},[36,83752,76640],{"class":50},[36,83754,34660],{"class":42},[36,83756,83726],{"class":110},[36,83758,83759,83761,83763,83765,83767,83769,83771,83773,83775,83777,83779,83781,83783,83785],{"class":38,"line":167},[36,83760,83601],{"class":73},[36,83762,2225],{"class":50},[36,83764,59578],{"class":73},[36,83766,222],{"class":50},[36,83768,83610],{"class":73},[36,83770,2225],{"class":50},[36,83772,83615],{"class":73},[36,83774,222],{"class":50},[36,83776,2036],{"class":73},[36,83778,477],{"class":50},[36,83780,1961],{"class":73},[36,83782,76584],{"class":50},[36,83784,34660],{"class":42},[36,83786,83726],{"class":110},[36,83788,83789],{"class":38,"line":172},[36,83790,58],{"emptyLinePlaceholder":57},[36,83792,83793,83795,83797,83799,83801,83803,83805,83807,83809,83811,83813,83815,83817,83819],{"class":38,"line":192},[36,83794,83601],{"class":73},[36,83796,2225],{"class":50},[36,83798,59578],{"class":73},[36,83800,222],{"class":50},[36,83802,83610],{"class":73},[36,83804,2225],{"class":50},[36,83806,83615],{"class":73},[36,83808,222],{"class":50},[36,83810,1859],{"class":73},[36,83812,477],{"class":50},[36,83814,2036],{"class":73},[36,83816,76584],{"class":50},[36,83818,34660],{"class":42},[36,83820,83821],{"class":110}," 'Mozilla'\n",[36,83823,83824,83826,83828,83830,83832,83834,83836,83838,83840,83842,83844,83846,83848,83850],{"class":38,"line":211},[36,83825,83601],{"class":73},[36,83827,2225],{"class":50},[36,83829,59578],{"class":73},[36,83831,222],{"class":50},[36,83833,83610],{"class":73},[36,83835,2225],{"class":50},[36,83837,83615],{"class":73},[36,83839,222],{"class":50},[36,83841,1859],{"class":73},[36,83843,477],{"class":50},[36,83845,2113],{"class":73},[36,83847,76584],{"class":50},[36,83849,34660],{"class":42},[36,83851,83821],{"class":110},[24239,83853,83855],{"id":83854},"_410533-startswith","4.10.5.3.3 startsWith",[19,83857,83858,83861,83862,83867,83868,83870,83871],{},[33,83859,83860],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[887,83863,83864],{},[33,83865,83866],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[33,83869,2895],{}," 或 ",[33,83872,67351],{},[26,83874,83876],{"className":78826,"code":83875,"language":78828,"meta":31,"style":31},"const str1 = \"Saturday night plans\"\nconsole.log(str1.startsWith(\"Sat\"))\n\u002F\u002F Expected output: true\nconsole.log(str1.startsWith(\"Sat\", 3))\n\u002F\u002F Expected output: false\n",[33,83877,83878,83890,83909,83914,83934],{"__ignoreMap":31},[36,83879,83880,83882,83885,83887],{"class":38,"line":39},[36,83881,1437],{"class":42},[36,83883,83884],{"class":50}," str1 ",[36,83886,70],{"class":42},[36,83888,83889],{"class":110}," \"Saturday night plans\"\n",[36,83891,83892,83894,83896,83899,83902,83904,83907],{"class":38,"line":54},[36,83893,78863],{"class":50},[36,83895,59578],{"class":46},[36,83897,83898],{"class":50},"(str1.",[36,83900,83901],{"class":46},"startsWith",[36,83903,222],{"class":50},[36,83905,83906],{"class":110},"\"Sat\"",[36,83908,31828],{"class":50},[36,83910,83911],{"class":38,"line":61},[36,83912,83913],{"class":124},"\u002F\u002F Expected output: true\n",[36,83915,83916,83918,83920,83922,83924,83926,83928,83930,83932],{"class":38,"line":80},[36,83917,78863],{"class":50},[36,83919,59578],{"class":46},[36,83921,83898],{"class":50},[36,83923,83901],{"class":46},[36,83925,222],{"class":50},[36,83927,83906],{"class":110},[36,83929,477],{"class":50},[36,83931,1741],{"class":73},[36,83933,31828],{"class":50},[36,83935,83936],{"class":38,"line":96},[36,83937,83938],{"class":124},"\u002F\u002F Expected output: false\n",[26,83940,83942],{"className":51964,"code":83941,"language":51966,"meta":31,"style":31},"startsWith(searchString)\nstartsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n\nconst str3 = 'pink老师上课中'\nconsole.log(str3.startsWith('pink'))   \u002F\u002Ftrue\nconsole.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[33,83943,83944,83949,83954,83958,83963,83968],{"__ignoreMap":31},[36,83945,83946],{"class":38,"line":39},[36,83947,83948],{"class":50},"startsWith(searchString)\n",[36,83950,83951],{"class":38,"line":54},[36,83952,83953],{"class":50},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[36,83955,83956],{"class":38,"line":61},[36,83957,58],{"emptyLinePlaceholder":57},[36,83959,83960],{"class":38,"line":80},[36,83961,83962],{"class":50},"const str3 = 'pink老师上课中'\n",[36,83964,83965],{"class":38,"line":96},[36,83966,83967],{"class":50},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[36,83969,83970],{"class":38,"line":101},[36,83971,83972],{"class":50},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24239,83974,83976],{"id":83975},"_410534-includes","4.10.5.3.4 includes",[19,83978,83979],{},"includes(searchString) includes(searchString, position)",[256,83981,83982],{},[259,83983,83984],{},"searchString:",[19,83986,83987,83988,83990,83991,83996,83997,84002,84003,22829,84006,84009,84010,84013],{},"一个要在 ",[33,83989,2835],{}," 中查找的字符串。",[1906,83992,83995],{"href":83993,"rel":83994},"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",[25195],"不能是正则表达式","。所有非正则表达式的值都会被",[1906,83998,84001],{"href":83999,"rel":84000},"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",[25195],"强制转换为字符串","，因此如果该参数被省略或传入 ",[33,84004,84005],{},"undefined",[33,84007,84008],{},"includes()"," 方法会在字符串中搜索 ",[33,84011,84012],{},"\"undefined\"","，这通常不是你想要的",[256,84015,84016],{"start":54},[259,84017,84018,2526],{},[33,84019,84020],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84022,84023,84024,84027,84028],{},"在字符串中开始搜索 ",[33,84025,84026],{},"searchString"," 的位置。默认值为 ",[33,84029,1859],{},[256,84031,84032],{"start":61},[259,84033,84034],{},"返回值：",[19,84036,84037,84038,84040,84041,84045,84046],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[33,84039,84026],{}," 为空字符串的情况），则返回 ",[887,84042,84043],{},[33,84044,2895],{}," ，否则返回 ",[887,84047,84048],{},[33,84049,67351],{},[256,84051,84052],{"start":80},[259,84053,84054],{},"异常：",[19,84056,83553,84057,15124,84059,84063],{},[33,84058,84026],{},[1906,84060,84062],{"href":83993,"rel":84061},[25195],"是一个正则表达式","，则会抛出",[19,84065,84066],{},"只要是有就是true，不需要非得以谁开头结尾",[26,84068,84070],{"className":78826,"code":84069,"language":78828,"meta":31,"style":31},"const str = \"To be, or not to be, that is the question.\"\nconsole.log(str.includes(\"To be\"))  \u002F\u002F true\nconsole.log(str.includes(\"question\"))  \u002F\u002F true\nconsole.log(str.includes(\"nonexistent\"))  \u002F\u002F false\nconsole.log(str.includes(\"To be\", 1))  \u002F\u002F false\nconsole.log(str.includes(\"TO BE\"))  \u002F\u002F false\nconsole.log(str.includes(\"\"))  \u002F\u002F true\n",[33,84071,84072,84083,84106,84125,84145,84167,84186],{"__ignoreMap":31},[36,84073,84074,84076,84078,84080],{"class":38,"line":39},[36,84075,1437],{"class":42},[36,84077,81106],{"class":50},[36,84079,70],{"class":42},[36,84081,84082],{"class":110}," \"To be, or not to be, that is the question.\"\n",[36,84084,84085,84087,84089,84092,84095,84097,84100,84103],{"class":38,"line":54},[36,84086,78863],{"class":50},[36,84088,59578],{"class":46},[36,84090,84091],{"class":50},"(str.",[36,84093,84094],{"class":46},"includes",[36,84096,222],{"class":50},[36,84098,84099],{"class":110},"\"To be\"",[36,84101,84102],{"class":50},"))",[36,84104,84105],{"class":124},"  \u002F\u002F true\n",[36,84107,84108,84110,84112,84114,84116,84118,84121,84123],{"class":38,"line":61},[36,84109,78863],{"class":50},[36,84111,59578],{"class":46},[36,84113,84091],{"class":50},[36,84115,84094],{"class":46},[36,84117,222],{"class":50},[36,84119,84120],{"class":110},"\"question\"",[36,84122,84102],{"class":50},[36,84124,84105],{"class":124},[36,84126,84127,84129,84131,84133,84135,84137,84140,84142],{"class":38,"line":80},[36,84128,78863],{"class":50},[36,84130,59578],{"class":46},[36,84132,84091],{"class":50},[36,84134,84094],{"class":46},[36,84136,222],{"class":50},[36,84138,84139],{"class":110},"\"nonexistent\"",[36,84141,84102],{"class":50},[36,84143,84144],{"class":124},"  \u002F\u002F false\n",[36,84146,84147,84149,84151,84153,84155,84157,84159,84161,84163,84165],{"class":38,"line":96},[36,84148,78863],{"class":50},[36,84150,59578],{"class":46},[36,84152,84091],{"class":50},[36,84154,84094],{"class":46},[36,84156,222],{"class":50},[36,84158,84099],{"class":110},[36,84160,477],{"class":50},[36,84162,1885],{"class":73},[36,84164,84102],{"class":50},[36,84166,84144],{"class":124},[36,84168,84169,84171,84173,84175,84177,84179,84182,84184],{"class":38,"line":101},[36,84170,78863],{"class":50},[36,84172,59578],{"class":46},[36,84174,84091],{"class":50},[36,84176,84094],{"class":46},[36,84178,222],{"class":50},[36,84180,84181],{"class":110},"\"TO BE\"",[36,84183,84102],{"class":50},[36,84185,84144],{"class":124},[36,84187,84188,84190,84192,84194,84196,84198,84200,84202],{"class":38,"line":128},[36,84189,78863],{"class":50},[36,84191,59578],{"class":46},[36,84193,84091],{"class":50},[36,84195,84094],{"class":46},[36,84197,222],{"class":50},[36,84199,9126],{"class":110},[36,84201,84102],{"class":50},[36,84203,84105],{"class":124},[24239,84205,84207],{"id":84206},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,84209,84211],{"className":54398,"code":84210,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const num = 10\n    \u002F\u002F 强制转换\n    console.log(String(num))\n    \u002F\u002F toString()方法转换\n    console.log(num.toString())\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,84212,84213,84221,84229,84234,84239,84244,84249,84254,84262],{"__ignoreMap":31},[36,84214,84215,84217,84219],{"class":38,"line":39},[36,84216,2577],{"class":50},[36,84218,53131],{"class":52631},[36,84220,52638],{"class":50},[36,84222,84223,84225,84227],{"class":38,"line":54},[36,84224,53475],{"class":50},[36,84226,53144],{"class":52631},[36,84228,52638],{"class":50},[36,84230,84231],{"class":38,"line":61},[36,84232,84233],{"class":50},"    const num = 10\n",[36,84235,84236],{"class":38,"line":80},[36,84237,84238],{"class":50},"    \u002F\u002F 强制转换\n",[36,84240,84241],{"class":38,"line":96},[36,84242,84243],{"class":50},"    console.log(String(num))\n",[36,84245,84246],{"class":38,"line":101},[36,84247,84248],{"class":50},"    \u002F\u002F toString()方法转换\n",[36,84250,84251],{"class":38,"line":128},[36,84252,84253],{"class":50},"    console.log(num.toString())\n",[36,84255,84256,84258,84260],{"class":38,"line":149},[36,84257,53748],{"class":50},[36,84259,53144],{"class":52631},[36,84261,52638],{"class":50},[36,84263,84264,84266,84268],{"class":38,"line":154},[36,84265,53116],{"class":50},[36,84267,53131],{"class":52631},[36,84269,52638],{"class":50},[24239,84271,84273],{"id":84272},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84275,84276],{},[2992,84277],{"alt":31,"src":84278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,84280,84282],{"className":51964,"code":84281,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    const gift = '50g的茶叶，清洗球'\n    \u002F\u002F 1.把字符串拆分为数组\n    \u002F\u002F console.log(gift.split(','))\n    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n    const str = gift.split('，').map(item => `\u003Cspan>【赠品】${item}\u003C\u002Fspan>\u003Cbr>`).join('')\n    document.querySelector('div').innerHTML = str\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,84283,84284,84294,84308,84312,84320,84334,84354,84366,84374,84378,84386,84398,84406,84418,84423,84428,84433,84480,84496,84504,84512,84516],{"__ignoreMap":31},[36,84285,84286,84288,84290,84292],{"class":38,"line":39},[36,84287,52628],{"class":50},[36,84289,52632],{"class":52631},[36,84291,52635],{"class":46},[36,84293,52638],{"class":50},[36,84295,84296,84298,84300,84302,84304,84306],{"class":38,"line":54},[36,84297,2577],{"class":50},[36,84299,51966],{"class":52631},[36,84301,52647],{"class":46},[36,84303,70],{"class":50},[36,84305,52652],{"class":110},[36,84307,52638],{"class":50},[36,84309,84310],{"class":38,"line":61},[36,84311,58],{"emptyLinePlaceholder":57},[36,84313,84314,84316,84318],{"class":38,"line":80},[36,84315,2577],{"class":50},[36,84317,52665],{"class":52631},[36,84319,52638],{"class":50},[36,84321,84322,84324,84326,84328,84330,84332],{"class":38,"line":96},[36,84323,53475],{"class":50},[36,84325,52675],{"class":52631},[36,84327,52678],{"class":46},[36,84329,70],{"class":50},[36,84331,52683],{"class":110},[36,84333,52638],{"class":50},[36,84335,84336,84338,84340,84342,84344,84346,84348,84350,84352],{"class":38,"line":101},[36,84337,53475],{"class":50},[36,84339,52675],{"class":52631},[36,84341,16249],{"class":46},[36,84343,70],{"class":50},[36,84345,52722],{"class":110},[36,84347,52702],{"class":46},[36,84349,70],{"class":50},[36,84351,52729],{"class":110},[36,84353,52638],{"class":50},[36,84355,84356,84358,84360,84362,84364],{"class":38,"line":128},[36,84357,53475],{"class":50},[36,84359,52738],{"class":52631},[36,84361,52741],{"class":50},[36,84363,52738],{"class":52631},[36,84365,52638],{"class":50},[36,84367,84368,84370,84372],{"class":38,"line":149},[36,84369,53116],{"class":50},[36,84371,52665],{"class":52631},[36,84373,52638],{"class":50},[36,84375,84376],{"class":38,"line":154},[36,84377,58],{"emptyLinePlaceholder":57},[36,84379,84380,84382,84384],{"class":38,"line":167},[36,84381,2577],{"class":50},[36,84383,53131],{"class":52631},[36,84385,52638],{"class":50},[36,84387,84388,84390,84392,84394,84396],{"class":38,"line":172},[36,84389,53475],{"class":50},[36,84391,52942],{"class":52631},[36,84393,56645],{"class":50},[36,84395,52942],{"class":52631},[36,84397,52638],{"class":50},[36,84399,84400,84402,84404],{"class":38,"line":192},[36,84401,53475],{"class":50},[36,84403,53144],{"class":52631},[36,84405,52638],{"class":50},[36,84407,84408,84410,84413,84415],{"class":38,"line":211},[36,84409,1498],{"class":42},[36,84411,84412],{"class":73}," gift",[36,84414,14893],{"class":42},[36,84416,84417],{"class":110}," '50g的茶叶，清洗球'\n",[36,84419,84420],{"class":38,"line":216},[36,84421,84422],{"class":124},"    \u002F\u002F 1.把字符串拆分为数组\n",[36,84424,84425],{"class":38,"line":231},[36,84426,84427],{"class":124},"    \u002F\u002F console.log(gift.split(','))\n",[36,84429,84430],{"class":38,"line":236},[36,84431,84432],{"class":124},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[36,84434,84435,84437,84439,84441,84444,84447,84449,84452,84454,84456,84458,84460,84462,84465,84467,84470,84472,84474,84476,84478],{"class":38,"line":247},[36,84436,1498],{"class":42},[36,84438,75250],{"class":73},[36,84440,14893],{"class":42},[36,84442,84443],{"class":50}," gift.",[36,84445,84446],{"class":46},"split",[36,84448,222],{"class":50},[36,84450,84451],{"class":110},"'，'",[36,84453,32157],{"class":50},[36,84455,75375],{"class":46},[36,84457,222],{"class":50},[36,84459,81126],{"class":473},[36,84461,81129],{"class":42},[36,84463,84464],{"class":110}," `\u003Cspan>【赠品】${",[36,84466,81126],{"class":50},[36,84468,84469],{"class":110},"}\u003C\u002Fspan>\u003Cbr>`",[36,84471,32157],{"class":50},[36,84473,75554],{"class":46},[36,84475,222],{"class":50},[36,84477,75559],{"class":110},[36,84479,1680],{"class":50},[36,84481,84482,84484,84486,84488,84490,84492,84494],{"class":38,"line":637},[36,84483,53738],{"class":50},[36,84485,55730],{"class":46},[36,84487,222],{"class":50},[36,84489,83262],{"class":110},[36,84491,75580],{"class":50},[36,84493,70],{"class":42},[36,84495,75316],{"class":50},[36,84497,84498,84500,84502],{"class":38,"line":646},[36,84499,53748],{"class":50},[36,84501,53144],{"class":52631},[36,84503,52638],{"class":50},[36,84505,84506,84508,84510],{"class":38,"line":655},[36,84507,53116],{"class":50},[36,84509,53131],{"class":52631},[36,84511,52638],{"class":50},[36,84513,84514],{"class":38,"line":660},[36,84515,58],{"emptyLinePlaceholder":57},[36,84517,84518,84520,84522],{"class":38,"line":665},[36,84519,53116],{"class":50},[36,84521,51966],{"class":52631},[36,84523,52638],{"class":50},[23327,84525,84527],{"id":84526},"_41054-number","4.10.5.4 Number",[19,84529,84530],{},[2992,84531],{"alt":31,"src":84532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84534,84535],{},"整数也可以进行toFixed来保留小数",[19,84537,84538],{},"比如：",[19,84540,84541],{},"const price=10",[19,84543,84544],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23327,84546,84548],{"id":84547},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84550,84551],{},[2992,84552],{"alt":31,"src":84553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,84555,84557],{"className":51964,"code":84556,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .list {\n      width: 990px;\n      margin: 100px auto;\n    }\n\n    .item {\n      padding: 15px;\n      transition: all ease .5s;\n      display: flex;\n      border: 1px solid #e4e4e4;\n    }\n\n    .item:hover {\n      cursor: pointer;\n      background-color: #f5f5f5;\n    }\n\n    .item img {\n      width: 80px;\n      height: 80px;\n      margin-right: 5px;\n    }\n\n    .item .name {\n      width: 200px;\n    }\n\n    .item .name .tag {\n      display: block;\n      padding: 2px;\n      font-size: 12px;\n      color: #999;\n    }\n\n    .item .price,\n    .item .sub-total {\n      font-size: 18px;\n      color: firebrick;\n      flex: 1;\n    }\n\n    .item .price::before,\n    .item .sub-total::before,\n    .amount::before {\n      content: '￥';\n      font-size: 12px;\n    }\n\n    .item .spec {\n      flex: 2;\n      color: #888;\n      font-size: 14px;\n      margin-left: 20px;\n    }\n\n    .item .count {\n      flex: 1;\n      color: #aaa;\n    }\n\n    .total {\n      width: 990px;\n      margin: 0 auto;\n      display: flex;\n      justify-content: flex-end;\n      border-top: 1px solid #4e4e4e;\n      padding: 20px;\n    }\n\n    .total .amount {\n      font-size: 18px;\n      color: firebrick;\n      font-weight: 700;\n      margin-right: 50px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"list\">\n  \u003C\u002Fdiv>\n  \u003Cdiv class=\"total\">\n    \u003Cdiv>合计：\u003Cspan class=\"amount\">\u003C\u002Fspan>\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript>\n    const goodsList = [\n      {\n        id: '4001172',\n        name: '称心如意手摇咖啡磨豆机咖啡豆研磨机',\n        price: 289.9,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg',\n        count: 2,\n        spec: { color: '白色' }\n      },\n      {\n        id: '4001009',\n        name: '竹制干泡茶盘正方形沥水茶台品茶盘',\n        price: 109.8,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png',\n        count: 3,\n        spec: { size: '40cm*40cm', color: '黑色' }\n      },\n      {\n        id: '4001874',\n        name: '古法温酒汝瓷酒具套装白酒杯莲花温酒器',\n        price: 488,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png',\n        count: 1,\n        spec: { color: '青色', sum: '一大四小' }\n      },\n      {\n        id: '4001649',\n        name: '大师监制龙泉青瓷茶叶罐',\n        price: 139,\n        picture: 'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png',\n        count: 1,\n        spec: { size: '小号', color: '紫色' },\n        gift: '50g茶叶,清洗球'\n      }\n    ]\n    \u002F\u002F  1.根据数据渲染页面\n    document.querySelector('.list').innerHTML = goodsList.map(item => {\n      \u002F\u002F 对象解构\n      const { picture, name, count, price, spec, gift } = item\n      \u002F\u002F 规格文字模块处理\n      const text = Object.values(spec).join('\u002F')\n      \u002F\u002F 处理赠品模块\n      const str = gift ? gift.split(',').map(item => `\u003Cspan class=\"tag\">【赠品】${item}\u003C\u002Fspan>`).join('') : ''\n      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n      const subtotal = ((price * 100 * count) \u002F 100).toFixed(2)\n\n      return `\n        \u003Cdiv class=\"item\">\n          \u003Cimg src=\"${picture}\" alt=\"\">\n          \u003Cp class=\"name\">${name}${str}\u003C\u002Fp>\n          \u003Cp class=\"spec\">${text}\u003C\u002Fp>\n          \u003Cp class=\"price\">${price.toFixed(2)}\u003C\u002Fp>\n          \u003Cp class=\"count\">x${count}\u003C\u002Fp>\n          \u003Cp class=\"sub-total\">${subtotal}\u003C\u002Fp>\n        \u003C\u002Fdiv> \n             `\n    }).join('')\n    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n    const total = goodsList.reduce((prev, item) => prev + (item.price * 100 * item.count) \u002F 100, 0)\n    document.querySelector('.amount').innerHTML = total.toFixed(2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,84558,84559,84569,84583,84587,84595,84609,84629,84641,84649,84655,84665,84675,84685,84689,84693,84699,84711,84725,84729,84733,84739,84751,84767,84777,84793,84797,84801,84807,84817,84827,84831,84835,84843,84855,84867,84879,84883,84887,84895,84907,84911,84915,84926,84936,84948,84960,84970,84974,84978,84986,84995,85007,85017,85027,85031,85035,85043,85052,85059,85069,85081,85085,85089,85098,85108,85119,85131,85143,85147,85151,85160,85170,85181,85185,85189,85195,85207,85219,85229,85239,85257,85269,85273,85277,85286,85298,85308,85318,85330,85334,85342,85350,85354,85362,85376,85384,85398,85426,85434,85442,85452,85456,85464,85472,85481,85489,85498,85508,85512,85516,85524,85532,85541,85549,85557,85570,85574,85578,85586,85594,85603,85611,85619,85634,85638,85642,85650,85658,85667,85675,85683,85697,85705,85709,85713,85718,85744,85749,85786,85791,85814,85819,85873,85878,85914,85918,85924,85929,85938,85952,85961,85980,85989,85999,86004,86009,86022,86027,86081,86107,86115,86123,86127],{"__ignoreMap":31},[36,84560,84561,84563,84565,84567],{"class":38,"line":39},[36,84562,52628],{"class":50},[36,84564,52632],{"class":52631},[36,84566,52635],{"class":46},[36,84568,52638],{"class":50},[36,84570,84571,84573,84575,84577,84579,84581],{"class":38,"line":54},[36,84572,2577],{"class":50},[36,84574,51966],{"class":52631},[36,84576,52647],{"class":46},[36,84578,70],{"class":50},[36,84580,52652],{"class":110},[36,84582,52638],{"class":50},[36,84584,84585],{"class":38,"line":61},[36,84586,58],{"emptyLinePlaceholder":57},[36,84588,84589,84591,84593],{"class":38,"line":80},[36,84590,2577],{"class":50},[36,84592,52665],{"class":52631},[36,84594,52638],{"class":50},[36,84596,84597,84599,84601,84603,84605,84607],{"class":38,"line":96},[36,84598,53475],{"class":50},[36,84600,52675],{"class":52631},[36,84602,52678],{"class":46},[36,84604,70],{"class":50},[36,84606,52683],{"class":110},[36,84608,52638],{"class":50},[36,84610,84611,84613,84615,84617,84619,84621,84623,84625,84627],{"class":38,"line":101},[36,84612,53475],{"class":50},[36,84614,52675],{"class":52631},[36,84616,16249],{"class":46},[36,84618,70],{"class":50},[36,84620,52722],{"class":110},[36,84622,52702],{"class":46},[36,84624,70],{"class":50},[36,84626,52729],{"class":110},[36,84628,52638],{"class":50},[36,84630,84631,84633,84635,84637,84639],{"class":38,"line":128},[36,84632,53475],{"class":50},[36,84634,52738],{"class":52631},[36,84636,52741],{"class":50},[36,84638,52738],{"class":52631},[36,84640,52638],{"class":50},[36,84642,84643,84645,84647],{"class":38,"line":149},[36,84644,53475],{"class":50},[36,84646,1592],{"class":52631},[36,84648,52638],{"class":50},[36,84650,84651,84653],{"class":38,"line":154},[36,84652,569],{"class":52631},[36,84654,16901],{"class":50},[36,84656,84657,84659,84661,84663],{"class":38,"line":167},[36,84658,56026],{"class":73},[36,84660,52768],{"class":50},[36,84662,1859],{"class":73},[36,84664,77],{"class":50},[36,84666,84667,84669,84671,84673],{"class":38,"line":172},[36,84668,56037],{"class":73},[36,84670,52768],{"class":50},[36,84672,1859],{"class":73},[36,84674,77],{"class":50},[36,84676,84677,84679,84681,84683],{"class":38,"line":192},[36,84678,73927],{"class":73},[36,84680,52768],{"class":50},[36,84682,61836],{"class":73},[36,84684,77],{"class":50},[36,84686,84687],{"class":38,"line":211},[36,84688,3693],{"class":50},[36,84690,84691],{"class":38,"line":216},[36,84692,58],{"emptyLinePlaceholder":57},[36,84694,84695,84697],{"class":38,"line":231},[36,84696,63454],{"class":46},[36,84698,16901],{"class":50},[36,84700,84701,84703,84705,84707,84709],{"class":38,"line":236},[36,84702,56102],{"class":73},[36,84704,52768],{"class":50},[36,84706,79905],{"class":73},[36,84708,52823],{"class":42},[36,84710,77],{"class":50},[36,84712,84713,84715,84717,84719,84721,84723],{"class":38,"line":247},[36,84714,56037],{"class":73},[36,84716,52768],{"class":50},[36,84718,1979],{"class":73},[36,84720,52823],{"class":42},[36,84722,52887],{"class":73},[36,84724,77],{"class":50},[36,84726,84727],{"class":38,"line":637},[36,84728,3693],{"class":50},[36,84730,84731],{"class":38,"line":646},[36,84732,58],{"emptyLinePlaceholder":57},[36,84734,84735,84737],{"class":38,"line":655},[36,84736,79956],{"class":46},[36,84738,16901],{"class":50},[36,84740,84741,84743,84745,84747,84749],{"class":38,"line":660},[36,84742,56026],{"class":73},[36,84744,52768],{"class":50},[36,84746,2242],{"class":73},[36,84748,52823],{"class":42},[36,84750,77],{"class":50},[36,84752,84753,84755,84757,84759,84761,84763,84765],{"class":38,"line":665},[36,84754,63191],{"class":73},[36,84756,52768],{"class":50},[36,84758,29452],{"class":73},[36,84760,80011],{"class":73},[36,84762,80014],{"class":73},[36,84764,2362],{"class":42},[36,84766,77],{"class":50},[36,84768,84769,84771,84773,84775],{"class":38,"line":674},[36,84770,56340],{"class":73},[36,84772,52768],{"class":50},[36,84774,52808],{"class":73},[36,84776,77],{"class":50},[36,84778,84779,84781,84783,84785,84787,84789,84791],{"class":38,"line":679},[36,84780,63308],{"class":73},[36,84782,52768],{"class":50},[36,84784,1885],{"class":73},[36,84786,52823],{"class":42},[36,84788,52852],{"class":73},[36,84790,63575],{"class":73},[36,84792,77],{"class":50},[36,84794,84795],{"class":38,"line":692},[36,84796,3693],{"class":50},[36,84798,84799],{"class":38,"line":705},[36,84800,58],{"emptyLinePlaceholder":57},[36,84802,84803,84805],{"class":38,"line":710},[36,84804,80074],{"class":46},[36,84806,16901],{"class":50},[36,84808,84809,84811,84813,84815],{"class":38,"line":722},[36,84810,63356],{"class":73},[36,84812,52768],{"class":50},[36,84814,63361],{"class":73},[36,84816,77],{"class":50},[36,84818,84819,84821,84823,84825],{"class":38,"line":750},[36,84820,56215],{"class":73},[36,84822,52768],{"class":50},[36,84824,63149],{"class":73},[36,84826,77],{"class":50},[36,84828,84829],{"class":38,"line":755},[36,84830,3693],{"class":50},[36,84832,84833],{"class":38,"line":777},[36,84834,58],{"emptyLinePlaceholder":57},[36,84836,84837,84839,84841],{"class":38,"line":802},[36,84838,79956],{"class":46},[36,84840,56946],{"class":52631},[36,84842,16901],{"class":50},[36,84844,84845,84847,84849,84851,84853],{"class":38,"line":807},[36,84846,56102],{"class":73},[36,84848,52768],{"class":50},[36,84850,2279],{"class":73},[36,84852,52823],{"class":42},[36,84854,77],{"class":50},[36,84856,84857,84859,84861,84863,84865],{"class":38,"line":818},[36,84858,56116],{"class":73},[36,84860,52768],{"class":50},[36,84862,2279],{"class":73},[36,84864,52823],{"class":42},[36,84866,77],{"class":50},[36,84868,84869,84871,84873,84875,84877],{"class":38,"line":843},[36,84870,63081],{"class":73},[36,84872,52768],{"class":50},[36,84874,1987],{"class":73},[36,84876,52823],{"class":42},[36,84878,77],{"class":50},[36,84880,84881],{"class":38,"line":848},[36,84882,3693],{"class":50},[36,84884,84885],{"class":38,"line":859},[36,84886,58],{"emptyLinePlaceholder":57},[36,84888,84889,84891,84893],{"class":38,"line":864},[36,84890,79956],{"class":46},[36,84892,63635],{"class":46},[36,84894,16901],{"class":50},[36,84896,84897,84899,84901,84903,84905],{"class":38,"line":873},[36,84898,56102],{"class":73},[36,84900,52768],{"class":50},[36,84902,3240],{"class":73},[36,84904,52823],{"class":42},[36,84906,77],{"class":50},[36,84908,84909],{"class":38,"line":9454},[36,84910,3693],{"class":50},[36,84912,84913],{"class":38,"line":9481},[36,84914,58],{"emptyLinePlaceholder":57},[36,84916,84917,84919,84921,84924],{"class":38,"line":9486},[36,84918,79956],{"class":46},[36,84920,63635],{"class":46},[36,84922,84923],{"class":46}," .tag",[36,84925,16901],{"class":50},[36,84927,84928,84930,84932,84934],{"class":38,"line":9492},[36,84929,56340],{"class":73},[36,84931,52768],{"class":50},[36,84933,62200],{"class":73},[36,84935,77],{"class":50},[36,84937,84938,84940,84942,84944,84946],{"class":38,"line":9504},[36,84939,56026],{"class":73},[36,84941,52768],{"class":50},[36,84943,1747],{"class":73},[36,84945,52823],{"class":42},[36,84947,77],{"class":50},[36,84949,84950,84952,84954,84956,84958],{"class":38,"line":9516},[36,84951,56253],{"class":73},[36,84953,52768],{"class":50},[36,84955,2165],{"class":73},[36,84957,52823],{"class":42},[36,84959,77],{"class":50},[36,84961,84962,84964,84966,84968],{"class":38,"line":9528},[36,84963,58747],{"class":73},[36,84965,52768],{"class":50},[36,84967,63401],{"class":73},[36,84969,77],{"class":50},[36,84971,84972],{"class":38,"line":11184},[36,84973,3693],{"class":50},[36,84975,84976],{"class":38,"line":11209},[36,84977,58],{"emptyLinePlaceholder":57},[36,84979,84980,84982,84984],{"class":38,"line":11232},[36,84981,79956],{"class":46},[36,84983,80248],{"class":46},[36,84985,32797],{"class":50},[36,84987,84988,84990,84993],{"class":38,"line":11256},[36,84989,79956],{"class":46},[36,84991,84992],{"class":46}," .sub-total",[36,84994,16901],{"class":50},[36,84996,84997,84999,85001,85003,85005],{"class":38,"line":11261},[36,84998,56253],{"class":73},[36,85000,52768],{"class":50},[36,85002,2317],{"class":73},[36,85004,52823],{"class":42},[36,85006,77],{"class":50},[36,85008,85009,85011,85013,85015],{"class":38,"line":11266},[36,85010,58747],{"class":73},[36,85012,52768],{"class":50},[36,85014,80271],{"class":73},[36,85016,77],{"class":50},[36,85018,85019,85021,85023,85025],{"class":38,"line":11271},[36,85020,63168],{"class":73},[36,85022,52768],{"class":50},[36,85024,1885],{"class":73},[36,85026,77],{"class":50},[36,85028,85029],{"class":38,"line":11280},[36,85030,3693],{"class":50},[36,85032,85033],{"class":38,"line":11285},[36,85034,58],{"emptyLinePlaceholder":57},[36,85036,85037,85039,85041],{"class":38,"line":11291},[36,85038,79956],{"class":46},[36,85040,80288],{"class":46},[36,85042,32797],{"class":50},[36,85044,85045,85047,85050],{"class":38,"line":11312},[36,85046,79956],{"class":46},[36,85048,85049],{"class":46}," .sub-total::before",[36,85051,32797],{"class":50},[36,85053,85054,85057],{"class":38,"line":11318},[36,85055,85056],{"class":46},"    .amount::before",[36,85058,16901],{"class":50},[36,85060,85061,85063,85065,85067],{"class":38,"line":11332},[36,85062,80295],{"class":73},[36,85064,52768],{"class":50},[36,85066,80300],{"class":110},[36,85068,77],{"class":50},[36,85070,85071,85073,85075,85077,85079],{"class":38,"line":11338},[36,85072,56253],{"class":73},[36,85074,52768],{"class":50},[36,85076,2165],{"class":73},[36,85078,52823],{"class":42},[36,85080,77],{"class":50},[36,85082,85083],{"class":38,"line":11365},[36,85084,3693],{"class":50},[36,85086,85087],{"class":38,"line":11374},[36,85088,58],{"emptyLinePlaceholder":57},[36,85090,85091,85093,85096],{"class":38,"line":11380},[36,85092,79956],{"class":46},[36,85094,85095],{"class":46}," .spec",[36,85097,16901],{"class":50},[36,85099,85100,85102,85104,85106],{"class":38,"line":11388},[36,85101,63168],{"class":73},[36,85103,52768],{"class":50},[36,85105,1747],{"class":73},[36,85107,77],{"class":50},[36,85109,85110,85112,85114,85117],{"class":38,"line":11393},[36,85111,58747],{"class":73},[36,85113,52768],{"class":50},[36,85115,85116],{"class":73},"#888",[36,85118,77],{"class":50},[36,85120,85121,85123,85125,85127,85129],{"class":38,"line":17933},[36,85122,56253],{"class":73},[36,85124,52768],{"class":50},[36,85126,2216],{"class":73},[36,85128,52823],{"class":42},[36,85130,77],{"class":50},[36,85132,85133,85135,85137,85139,85141],{"class":38,"line":17939},[36,85134,63331],{"class":73},[36,85136,52768],{"class":50},[36,85138,2367],{"class":73},[36,85140,52823],{"class":42},[36,85142,77],{"class":50},[36,85144,85145],{"class":38,"line":17962},[36,85146,3693],{"class":50},[36,85148,85149],{"class":38,"line":17968},[36,85150,58],{"emptyLinePlaceholder":57},[36,85152,85153,85155,85158],{"class":38,"line":17991},[36,85154,79956],{"class":46},[36,85156,85157],{"class":46}," .count",[36,85159,16901],{"class":50},[36,85161,85162,85164,85166,85168],{"class":38,"line":18005},[36,85163,63168],{"class":73},[36,85165,52768],{"class":50},[36,85167,1885],{"class":73},[36,85169,77],{"class":50},[36,85171,85172,85174,85176,85179],{"class":38,"line":18025},[36,85173,58747],{"class":73},[36,85175,52768],{"class":50},[36,85177,85178],{"class":73},"#aaa",[36,85180,77],{"class":50},[36,85182,85183],{"class":38,"line":18031},[36,85184,3693],{"class":50},[36,85186,85187],{"class":38,"line":18042},[36,85188,58],{"emptyLinePlaceholder":57},[36,85190,85191,85193],{"class":38,"line":18065},[36,85192,73806],{"class":46},[36,85194,16901],{"class":50},[36,85196,85197,85199,85201,85203,85205],{"class":38,"line":18087},[36,85198,56102],{"class":73},[36,85200,52768],{"class":50},[36,85202,79905],{"class":73},[36,85204,52823],{"class":42},[36,85206,77],{"class":50},[36,85208,85209,85211,85213,85215,85217],{"class":38,"line":18092},[36,85210,56037],{"class":73},[36,85212,52768],{"class":50},[36,85214,1859],{"class":73},[36,85216,52887],{"class":73},[36,85218,77],{"class":50},[36,85220,85221,85223,85225,85227],{"class":38,"line":18098},[36,85222,56340],{"class":73},[36,85224,52768],{"class":50},[36,85226,52808],{"class":73},[36,85228,77],{"class":50},[36,85230,85231,85233,85235,85237],{"class":38,"line":18112},[36,85232,56351],{"class":73},[36,85234,52768],{"class":50},[36,85236,52911],{"class":73},[36,85238,77],{"class":50},[36,85240,85241,85244,85246,85248,85250,85252,85255],{"class":38,"line":18125},[36,85242,85243],{"class":73},"      border-top",[36,85245,52768],{"class":50},[36,85247,1885],{"class":73},[36,85249,52823],{"class":42},[36,85251,52852],{"class":73},[36,85253,85254],{"class":73}," #4e4e4e",[36,85256,77],{"class":50},[36,85258,85259,85261,85263,85265,85267],{"class":38,"line":18130},[36,85260,56026],{"class":73},[36,85262,52768],{"class":50},[36,85264,2367],{"class":73},[36,85266,52823],{"class":42},[36,85268,77],{"class":50},[36,85270,85271],{"class":38,"line":18144},[36,85272,3693],{"class":50},[36,85274,85275],{"class":38,"line":18149},[36,85276,58],{"emptyLinePlaceholder":57},[36,85278,85279,85281,85284],{"class":38,"line":18155},[36,85280,73806],{"class":46},[36,85282,85283],{"class":46}," .amount",[36,85285,16901],{"class":50},[36,85287,85288,85290,85292,85294,85296],{"class":38,"line":18160},[36,85289,56253],{"class":73},[36,85291,52768],{"class":50},[36,85293,2317],{"class":73},[36,85295,52823],{"class":42},[36,85297,77],{"class":50},[36,85299,85300,85302,85304,85306],{"class":38,"line":18174},[36,85301,58747],{"class":73},[36,85303,52768],{"class":50},[36,85305,80271],{"class":73},[36,85307,77],{"class":50},[36,85309,85310,85312,85314,85316],{"class":38,"line":18179},[36,85311,63665],{"class":73},[36,85313,52768],{"class":50},[36,85315,52820],{"class":73},[36,85317,77],{"class":50},[36,85319,85320,85322,85324,85326,85328],{"class":38,"line":18184},[36,85321,63081],{"class":73},[36,85323,52768],{"class":50},[36,85325,2323],{"class":73},[36,85327,52823],{"class":42},[36,85329,77],{"class":50},[36,85331,85332],{"class":38,"line":18198},[36,85333,3693],{"class":50},[36,85335,85336,85338,85340],{"class":38,"line":18210},[36,85337,53748],{"class":50},[36,85339,1592],{"class":52631},[36,85341,52638],{"class":50},[36,85343,85344,85346,85348],{"class":38,"line":18215},[36,85345,53116],{"class":50},[36,85347,52665],{"class":52631},[36,85349,52638],{"class":50},[36,85351,85352],{"class":38,"line":18228},[36,85353,58],{"emptyLinePlaceholder":57},[36,85355,85356,85358,85360],{"class":38,"line":18233},[36,85357,2577],{"class":50},[36,85359,53131],{"class":52631},[36,85361,52638],{"class":50},[36,85363,85364,85366,85368,85370,85372,85374],{"class":38,"line":18238},[36,85365,53475],{"class":50},[36,85367,52942],{"class":52631},[36,85369,54817],{"class":46},[36,85371,70],{"class":50},[36,85373,63939],{"class":110},[36,85375,52638],{"class":50},[36,85377,85378,85380,85382],{"class":38,"line":18243},[36,85379,53748],{"class":50},[36,85381,52942],{"class":52631},[36,85383,52638],{"class":50},[36,85385,85386,85388,85390,85392,85394,85396],{"class":38,"line":18256},[36,85387,53475],{"class":50},[36,85389,52942],{"class":52631},[36,85391,54817],{"class":46},[36,85393,70],{"class":50},[36,85395,63911],{"class":110},[36,85397,52638],{"class":50},[36,85399,85400,85402,85404,85407,85409,85411,85413,85416,85418,85420,85422,85424],{"class":38,"line":18261},[36,85401,52672],{"class":50},[36,85403,52942],{"class":52631},[36,85405,85406],{"class":50},">合计：\u003C",[36,85408,36],{"class":52631},[36,85410,54817],{"class":46},[36,85412,70],{"class":50},[36,85414,85415],{"class":110},"\"amount\"",[36,85417,56645],{"class":50},[36,85419,36],{"class":52631},[36,85421,56645],{"class":50},[36,85423,52942],{"class":52631},[36,85425,52638],{"class":50},[36,85427,85428,85430,85432],{"class":38,"line":33964},[36,85429,53748],{"class":50},[36,85431,52942],{"class":52631},[36,85433,52638],{"class":50},[36,85435,85436,85438,85440],{"class":38,"line":33970},[36,85437,53475],{"class":50},[36,85439,53144],{"class":52631},[36,85441,52638],{"class":50},[36,85443,85444,85446,85448,85450],{"class":38,"line":33976},[36,85445,1498],{"class":42},[36,85447,80708],{"class":73},[36,85449,14893],{"class":42},[36,85451,56778],{"class":50},[36,85453,85454],{"class":38,"line":33982},[36,85455,80717],{"class":50},[36,85457,85458,85460,85462],{"class":38,"line":33988},[36,85459,80722],{"class":50},[36,85461,80725],{"class":110},[36,85463,32797],{"class":50},[36,85465,85466,85468,85470],{"class":38,"line":33999},[36,85467,80732],{"class":50},[36,85469,80735],{"class":110},[36,85471,32797],{"class":50},[36,85473,85474,85476,85479],{"class":38,"line":34005},[36,85475,80742],{"class":50},[36,85477,85478],{"class":73},"289.9",[36,85480,32797],{"class":50},[36,85482,85483,85485,85487],{"class":38,"line":34025},[36,85484,80752],{"class":50},[36,85486,80755],{"class":110},[36,85488,32797],{"class":50},[36,85490,85491,85494,85496],{"class":38,"line":34031},[36,85492,85493],{"class":50},"        count: ",[36,85495,1747],{"class":73},[36,85497,32797],{"class":50},[36,85499,85500,85503,85506],{"class":38,"line":34042},[36,85501,85502],{"class":50},"        spec: { color: ",[36,85504,85505],{"class":110},"'白色'",[36,85507,56935],{"class":50},[36,85509,85510],{"class":38,"line":34048},[36,85511,79223],{"class":50},[36,85513,85514],{"class":38,"line":34054},[36,85515,80717],{"class":50},[36,85517,85518,85520,85522],{"class":38,"line":34060},[36,85519,80722],{"class":50},[36,85521,80816],{"class":110},[36,85523,32797],{"class":50},[36,85525,85526,85528,85530],{"class":38,"line":34066},[36,85527,80732],{"class":50},[36,85529,80825],{"class":110},[36,85531,32797],{"class":50},[36,85533,85534,85536,85539],{"class":38,"line":34072},[36,85535,80742],{"class":50},[36,85537,85538],{"class":73},"109.8",[36,85540,32797],{"class":50},[36,85542,85543,85545,85547],{"class":38,"line":34078},[36,85544,80752],{"class":50},[36,85546,80843],{"class":110},[36,85548,32797],{"class":50},[36,85550,85551,85553,85555],{"class":38,"line":34084},[36,85552,85493],{"class":50},[36,85554,1741],{"class":73},[36,85556,32797],{"class":50},[36,85558,85559,85562,85564,85566,85568],{"class":38,"line":34104},[36,85560,85561],{"class":50},"        spec: { size: ",[36,85563,83234],{"class":110},[36,85565,56795],{"class":50},[36,85567,83239],{"class":110},[36,85569,56935],{"class":50},[36,85571,85572],{"class":38,"line":34110},[36,85573,79223],{"class":50},[36,85575,85576],{"class":38,"line":34126},[36,85577,80717],{"class":50},[36,85579,85580,85582,85584],{"class":38,"line":34132},[36,85581,80722],{"class":50},[36,85583,80860],{"class":110},[36,85585,32797],{"class":50},[36,85587,85588,85590,85592],{"class":38,"line":34146},[36,85589,80732],{"class":50},[36,85591,80869],{"class":110},[36,85593,32797],{"class":50},[36,85595,85596,85598,85601],{"class":38,"line":34152},[36,85597,80742],{"class":50},[36,85599,85600],{"class":73},"488",[36,85602,32797],{"class":50},[36,85604,85605,85607,85609],{"class":38,"line":34167},[36,85606,80752],{"class":50},[36,85608,80887],{"class":110},[36,85610,32797],{"class":50},[36,85612,85613,85615,85617],{"class":38,"line":34173},[36,85614,85493],{"class":50},[36,85616,1885],{"class":73},[36,85618,32797],{"class":50},[36,85620,85621,85623,85626,85629,85632],{"class":38,"line":34182},[36,85622,85502],{"class":50},[36,85624,85625],{"class":110},"'青色'",[36,85627,85628],{"class":50},", sum: ",[36,85630,85631],{"class":110},"'一大四小'",[36,85633,56935],{"class":50},[36,85635,85636],{"class":38,"line":34188},[36,85637,79223],{"class":50},[36,85639,85640],{"class":38,"line":34197},[36,85641,80717],{"class":50},[36,85643,85644,85646,85648],{"class":38,"line":34203},[36,85645,80722],{"class":50},[36,85647,80904],{"class":110},[36,85649,32797],{"class":50},[36,85651,85652,85654,85656],{"class":38,"line":34209},[36,85653,80732],{"class":50},[36,85655,80913],{"class":110},[36,85657,32797],{"class":50},[36,85659,85660,85662,85665],{"class":38,"line":34218},[36,85661,80742],{"class":50},[36,85663,85664],{"class":73},"139",[36,85666,32797],{"class":50},[36,85668,85669,85671,85673],{"class":38,"line":34224},[36,85670,80752],{"class":50},[36,85672,80931],{"class":110},[36,85674,32797],{"class":50},[36,85676,85677,85679,85681],{"class":38,"line":34235},[36,85678,85493],{"class":50},[36,85680,1885],{"class":73},[36,85682,32797],{"class":50},[36,85684,85685,85687,85690,85692,85695],{"class":38,"line":34241},[36,85686,85561],{"class":50},[36,85688,85689],{"class":110},"'小号'",[36,85691,56795],{"class":50},[36,85693,85694],{"class":110},"'紫色'",[36,85696,56801],{"class":50},[36,85698,85699,85702],{"class":38,"line":34260},[36,85700,85701],{"class":50},"        gift: ",[36,85703,85704],{"class":110},"'50g茶叶,清洗球'\n",[36,85706,85707],{"class":38,"line":34266},[36,85708,53729],{"class":50},[36,85710,85711],{"class":38,"line":34277},[36,85712,54440],{"class":50},[36,85714,85715],{"class":38,"line":34283},[36,85716,85717],{"class":124},"    \u002F\u002F  1.根据数据渲染页面\n",[36,85719,85720,85722,85724,85726,85728,85730,85732,85734,85736,85738,85740,85742],{"class":38,"line":34303},[36,85721,53738],{"class":50},[36,85723,55730],{"class":46},[36,85725,222],{"class":50},[36,85727,81232],{"class":110},[36,85729,75580],{"class":50},[36,85731,70],{"class":42},[36,85733,81379],{"class":50},[36,85735,75375],{"class":46},[36,85737,222],{"class":50},[36,85739,81126],{"class":473},[36,85741,81129],{"class":42},[36,85743,16901],{"class":50},[36,85745,85746],{"class":38,"line":34319},[36,85747,85748],{"class":124},"      \u002F\u002F 对象解构\n",[36,85750,85751,85753,85755,85757,85759,85761,85763,85766,85768,85770,85772,85775,85777,85780,85782,85784],{"class":38,"line":34325},[36,85752,59559],{"class":42},[36,85754,81138],{"class":50},[36,85756,81151],{"class":73},[36,85758,477],{"class":50},[36,85760,81141],{"class":73},[36,85762,477],{"class":50},[36,85764,85765],{"class":73},"count",[36,85767,477],{"class":50},[36,85769,81146],{"class":73},[36,85771,477],{"class":50},[36,85773,85774],{"class":73},"spec",[36,85776,477],{"class":50},[36,85778,85779],{"class":73},"gift",[36,85781,81154],{"class":50},[36,85783,70],{"class":42},[36,85785,81159],{"class":50},[36,85787,85788],{"class":38,"line":34339},[36,85789,85790],{"class":124},"      \u002F\u002F 规格文字模块处理\n",[36,85792,85793,85795,85798,85800,85802,85804,85806,85808,85810,85812],{"class":38,"line":34345},[36,85794,59559],{"class":42},[36,85796,85797],{"class":73}," text",[36,85799,14893],{"class":42},[36,85801,83269],{"class":50},[36,85803,83272],{"class":46},[36,85805,83275],{"class":50},[36,85807,75554],{"class":46},[36,85809,222],{"class":50},[36,85811,83282],{"class":110},[36,85813,1680],{"class":50},[36,85815,85816],{"class":38,"line":34351},[36,85817,85818],{"class":124},"      \u002F\u002F 处理赠品模块\n",[36,85820,85821,85823,85825,85827,85830,85832,85834,85836,85838,85841,85843,85845,85847,85849,85851,85854,85856,85859,85861,85863,85865,85867,85869,85871],{"class":38,"line":34362},[36,85822,59559],{"class":42},[36,85824,75250],{"class":73},[36,85826,14893],{"class":42},[36,85828,85829],{"class":50}," gift ",[36,85831,2653],{"class":42},[36,85833,84443],{"class":50},[36,85835,84446],{"class":46},[36,85837,222],{"class":50},[36,85839,85840],{"class":110},"','",[36,85842,32157],{"class":50},[36,85844,75375],{"class":46},[36,85846,222],{"class":50},[36,85848,81126],{"class":473},[36,85850,81129],{"class":42},[36,85852,85853],{"class":110}," `\u003Cspan class=\"tag\">【赠品】${",[36,85855,81126],{"class":50},[36,85857,85858],{"class":110},"}\u003C\u002Fspan>`",[36,85860,32157],{"class":50},[36,85862,75554],{"class":46},[36,85864,222],{"class":50},[36,85866,75559],{"class":110},[36,85868,15043],{"class":50},[36,85870,2526],{"class":42},[36,85872,71435],{"class":110},[36,85874,85875],{"class":38,"line":34368},[36,85876,85877],{"class":124},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[36,85879,85880,85882,85885,85887,85890,85892,85894,85896,85899,85901,85903,85905,85908,85910,85912],{"class":38,"line":34374},[36,85881,59559],{"class":42},[36,85883,85884],{"class":73}," subtotal",[36,85886,14893],{"class":42},[36,85888,85889],{"class":50}," ((price ",[36,85891,2122],{"class":42},[36,85893,162],{"class":73},[36,85895,561],{"class":42},[36,85897,85898],{"class":50}," count) ",[36,85900,2251],{"class":42},[36,85902,162],{"class":73},[36,85904,32157],{"class":50},[36,85906,85907],{"class":46},"toFixed",[36,85909,222],{"class":50},[36,85911,1747],{"class":73},[36,85913,1680],{"class":50},[36,85915,85916],{"class":38,"line":34384},[36,85917,58],{"emptyLinePlaceholder":57},[36,85919,85920,85922],{"class":38,"line":34390},[36,85921,75313],{"class":42},[36,85923,71499],{"class":110},[36,85925,85926],{"class":38,"line":34401},[36,85927,85928],{"class":110},"        \u003Cdiv class=\"item\">\n",[36,85930,85931,85934,85936],{"class":38,"line":34407},[36,85932,85933],{"class":110},"          \u003Cimg src=\"${",[36,85935,81151],{"class":50},[36,85937,81183],{"class":110},[36,85939,85940,85943,85945,85948,85950],{"class":38,"line":34417},[36,85941,85942],{"class":110},"          \u003Cp class=\"name\">${",[36,85944,81141],{"class":50},[36,85946,85947],{"class":110},"}${",[36,85949,2835],{"class":50},[36,85951,81193],{"class":110},[36,85953,85954,85957,85959],{"class":38,"line":34422},[36,85955,85956],{"class":110},"          \u003Cp class=\"spec\">${",[36,85958,6676],{"class":50},[36,85960,81193],{"class":110},[36,85962,85963,85966,85968,85970,85972,85974,85976,85978],{"class":38,"line":34428},[36,85964,85965],{"class":110},"          \u003Cp class=\"price\">${",[36,85967,81146],{"class":50},[36,85969,2225],{"class":110},[36,85971,85907],{"class":46},[36,85973,222],{"class":110},[36,85975,1747],{"class":73},[36,85977,2096],{"class":110},[36,85979,81193],{"class":110},[36,85981,85982,85985,85987],{"class":38,"line":34477},[36,85983,85984],{"class":110},"          \u003Cp class=\"count\">x${",[36,85986,85765],{"class":50},[36,85988,81193],{"class":110},[36,85990,85991,85994,85997],{"class":38,"line":34524},[36,85992,85993],{"class":110},"          \u003Cp class=\"sub-total\">${",[36,85995,85996],{"class":50},"subtotal",[36,85998,81193],{"class":110},[36,86000,86001],{"class":38,"line":34529},[36,86002,86003],{"class":110},"        \u003C\u002Fdiv> \n",[36,86005,86006],{"class":38,"line":34535},[36,86007,86008],{"class":110},"             `\n",[36,86010,86011,86014,86016,86018,86020],{"class":38,"line":34554},[36,86012,86013],{"class":50},"    }).",[36,86015,75554],{"class":46},[36,86017,222],{"class":50},[36,86019,75559],{"class":110},[36,86021,1680],{"class":50},[36,86023,86024],{"class":38,"line":34560},[36,86025,86026],{"class":124},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[36,86028,86029,86031,86033,86035,86037,86040,86042,86045,86047,86049,86051,86054,86057,86059,86062,86064,86066,86068,86071,86073,86075,86077,86079],{"class":38,"line":34580},[36,86030,1498],{"class":42},[36,86032,64116],{"class":73},[36,86034,14893],{"class":42},[36,86036,81379],{"class":50},[36,86038,86039],{"class":46},"reduce",[36,86041,3880],{"class":50},[36,86043,86044],{"class":473},"prev",[36,86046,477],{"class":50},[36,86048,81126],{"class":473},[36,86050,15043],{"class":50},[36,86052,86053],{"class":42},"=>",[36,86055,86056],{"class":50}," prev ",[36,86058,2148],{"class":42},[36,86060,86061],{"class":50}," (item.price ",[36,86063,2122],{"class":42},[36,86065,162],{"class":73},[36,86067,561],{"class":42},[36,86069,86070],{"class":50}," item.count) ",[36,86072,2251],{"class":42},[36,86074,162],{"class":73},[36,86076,477],{"class":50},[36,86078,1859],{"class":73},[36,86080,1680],{"class":50},[36,86082,86083,86085,86087,86089,86092,86094,86096,86099,86101,86103,86105],{"class":38,"line":34586},[36,86084,53738],{"class":50},[36,86086,55730],{"class":46},[36,86088,222],{"class":50},[36,86090,86091],{"class":110},"'.amount'",[36,86093,75580],{"class":50},[36,86095,70],{"class":42},[36,86097,86098],{"class":50}," total.",[36,86100,85907],{"class":46},[36,86102,222],{"class":50},[36,86104,1747],{"class":73},[36,86106,1680],{"class":50},[36,86108,86109,86111,86113],{"class":38,"line":34592},[36,86110,53748],{"class":50},[36,86112,53144],{"class":52631},[36,86114,52638],{"class":50},[36,86116,86117,86119,86121],{"class":38,"line":34602},[36,86118,53116],{"class":50},[36,86120,53131],{"class":52631},[36,86122,52638],{"class":50},[36,86124,86125],{"class":38,"line":34607},[36,86126,58],{"emptyLinePlaceholder":57},[36,86128,86129,86131,86133],{"class":38,"line":34613},[36,86130,53116],{"class":50},[36,86132,51966],{"class":52631},[36,86134,52638],{"class":50},[14,86136,86138],{"id":86137},"_411-编程思想","4.11 编程思想",[1645,86140,86142],{"id":86141},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86144,86145,86148],{},[887,86146,86147],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86150,86151],{},"调用就可以了",[19,86153,86154],{},[2992,86155],{"alt":31,"src":86156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[1645,86158,86160],{"id":86159},"_4112-面向对象","4.11.2 面向对象",[19,86162,86163],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86165,86166],{},[2992,86167],{"alt":31,"src":86168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86170,86171],{},"面向对象的特性：",[2674,86173,86174,86177,86180],{},[259,86175,86176],{},"封装性",[259,86178,86179],{},"继承性",[259,86181,86182],{},"多态性",[1645,86184,86186],{"id":86185},"_4113-两者比较","4.11.3 两者比较",[19,86188,86189],{},[2992,86190],{"alt":31,"src":86191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86193,86195],{"id":86194},"_412-构造函数回顾","4.12 构造函数回顾",[19,86197,86198],{},[2992,86199],{"alt":31,"src":86200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86202,86203],{},[2992,86204],{"alt":31,"src":86205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86207,86208],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86210,86211],{},[2992,86212],{"alt":31,"src":86213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86215,86217],{"id":86216},"_413-原型","4.13 原型",[1645,86219,86221],{"id":86220},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86223,86224],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86226,86227],{},[2992,86228],{"alt":31,"src":86229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86231,86232],{},[2992,86233],{"alt":31,"src":86234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86236,86237],{},"原型是构造函数的属性，它也是一个对象",[19,86239,86240],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86242,86243],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,86245,86247],{"className":54398,"code":86246,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n  \u003Cscript>\n    function Star(uname, age) {\n      this.uname = uname,\n        this.age = age\n      \u002F\u002F this.sing = function () {\n      \u002F\u002F   console.log('唱歌')\n\n      \u002F\u002F }\n    }\n    Star.prototype.sing = function () {\n      console.log('唱歌')\n    }\n    \u002F\u002F console.dir(Star.prototype)\n    const pink = new Star('pink', 18)\n    const red = new Star('red', 20)\n    pink.sing()\n    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,86248,86249,86257,86262,86270,86275,86280,86285,86290,86295,86299,86303,86307,86312,86317,86321,86326,86331,86336,86341,86346,86350,86358],{"__ignoreMap":31},[36,86250,86251,86253,86255],{"class":38,"line":39},[36,86252,2577],{"class":50},[36,86254,53131],{"class":52631},[36,86256,52638],{"class":50},[36,86258,86259],{"class":38,"line":54},[36,86260,86261],{"class":124},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[36,86263,86264,86266,86268],{"class":38,"line":61},[36,86265,53475],{"class":50},[36,86267,53144],{"class":52631},[36,86269,52638],{"class":50},[36,86271,86272],{"class":38,"line":80},[36,86273,86274],{"class":50},"    function Star(uname, age) {\n",[36,86276,86277],{"class":38,"line":96},[36,86278,86279],{"class":50},"      this.uname = uname,\n",[36,86281,86282],{"class":38,"line":101},[36,86283,86284],{"class":50},"        this.age = age\n",[36,86286,86287],{"class":38,"line":128},[36,86288,86289],{"class":50},"      \u002F\u002F this.sing = function () {\n",[36,86291,86292],{"class":38,"line":149},[36,86293,86294],{"class":50},"      \u002F\u002F   console.log('唱歌')\n",[36,86296,86297],{"class":38,"line":154},[36,86298,58],{"emptyLinePlaceholder":57},[36,86300,86301],{"class":38,"line":167},[36,86302,61368],{"class":50},[36,86304,86305],{"class":38,"line":172},[36,86306,3693],{"class":50},[36,86308,86309],{"class":38,"line":192},[36,86310,86311],{"class":50},"    Star.prototype.sing = function () {\n",[36,86313,86314],{"class":38,"line":211},[36,86315,86316],{"class":50},"      console.log('唱歌')\n",[36,86318,86319],{"class":38,"line":216},[36,86320,3693],{"class":50},[36,86322,86323],{"class":38,"line":231},[36,86324,86325],{"class":50},"    \u002F\u002F console.dir(Star.prototype)\n",[36,86327,86328],{"class":38,"line":236},[36,86329,86330],{"class":50},"    const pink = new Star('pink', 18)\n",[36,86332,86333],{"class":38,"line":247},[36,86334,86335],{"class":50},"    const red = new Star('red', 20)\n",[36,86337,86338],{"class":38,"line":637},[36,86339,86340],{"class":50},"    pink.sing()\n",[36,86342,86343],{"class":38,"line":646},[36,86344,86345],{"class":50},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[36,86347,86348],{"class":38,"line":655},[36,86349,58],{"emptyLinePlaceholder":57},[36,86351,86352,86354,86356],{"class":38,"line":660},[36,86353,53748],{"class":50},[36,86355,53144],{"class":52631},[36,86357,52638],{"class":50},[36,86359,86360,86362,86364],{"class":38,"line":665},[36,86361,53116],{"class":50},[36,86363,53131],{"class":52631},[36,86365,52638],{"class":50},[19,86367,86368],{},[2992,86369],{"alt":31,"src":86370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,86372,86374],{"className":54398,"code":86373,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    let that\n    function Star(uname) {\n      this.uname = uname\n      that = this\n    }\n    \u002F\u002F 实例对象是 ldh\n    const ldh = new Star('刘德华')\n    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n\n    Star.sing = function () {\n      console.log('唱歌')\n    }\n    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,86375,86376,86384,86392,86397,86402,86407,86412,86416,86421,86426,86431,86435,86440,86444,86448,86453,86457,86465],{"__ignoreMap":31},[36,86377,86378,86380,86382],{"class":38,"line":39},[36,86379,2577],{"class":50},[36,86381,53131],{"class":52631},[36,86383,52638],{"class":50},[36,86385,86386,86388,86390],{"class":38,"line":54},[36,86387,53475],{"class":50},[36,86389,53144],{"class":52631},[36,86391,52638],{"class":50},[36,86393,86394],{"class":38,"line":61},[36,86395,86396],{"class":50},"    let that\n",[36,86398,86399],{"class":38,"line":80},[36,86400,86401],{"class":50},"    function Star(uname) {\n",[36,86403,86404],{"class":38,"line":96},[36,86405,86406],{"class":50},"      this.uname = uname\n",[36,86408,86409],{"class":38,"line":101},[36,86410,86411],{"class":50},"      that = this\n",[36,86413,86414],{"class":38,"line":128},[36,86415,3693],{"class":50},[36,86417,86418],{"class":38,"line":149},[36,86419,86420],{"class":50},"    \u002F\u002F 实例对象是 ldh\n",[36,86422,86423],{"class":38,"line":154},[36,86424,86425],{"class":50},"    const ldh = new Star('刘德华')\n",[36,86427,86428],{"class":38,"line":167},[36,86429,86430],{"class":50},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[36,86432,86433],{"class":38,"line":172},[36,86434,58],{"emptyLinePlaceholder":57},[36,86436,86437],{"class":38,"line":192},[36,86438,86439],{"class":50},"    Star.sing = function () {\n",[36,86441,86442],{"class":38,"line":211},[36,86443,86316],{"class":50},[36,86445,86446],{"class":38,"line":216},[36,86447,3693],{"class":50},[36,86449,86450],{"class":38,"line":231},[36,86451,86452],{"class":50},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[36,86454,86455],{"class":38,"line":236},[36,86456,58],{"emptyLinePlaceholder":57},[36,86458,86459,86461,86463],{"class":38,"line":247},[36,86460,53748],{"class":50},[36,86462,53144],{"class":52631},[36,86464,52638],{"class":50},[36,86466,86467,86469,86471],{"class":38,"line":637},[36,86468,53116],{"class":50},[36,86470,53131],{"class":52631},[36,86472,52638],{"class":50},[19,86474,86475],{},"构造函数的this指向的是实例对象；",[19,86477,86478],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[1645,86480,86482],{"id":86481},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86484,86485],{},[2992,86486],{"alt":31,"src":86487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,86489,86491],{"className":54398,"code":86490,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002F 注意数组不可以直接用min和max求最值\n    const arr = [1, 2, 3]\n    \u002F\u002F 自己定义数组的扩展方法\n    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n    \u002F\u002F 2.自定义的方法写到prototype身上\n    \u002F\u002F ①.最大值\n    Array.prototype.max = function () {\n      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n      return Math.max(...this)\n      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n    }\n    console.log(arr.max())\n    \u002F\u002F ②最小值\n    Array.prototype.min = function () {\n      return Math.min(...this)\n    }\n    console.log(arr.min())\n    \u002F\u002F③求和\n    Array.prototype.sum = function () {\n      return this.reduce((prev, current) => prev + current, 0)\n    }\n    console.log(arr.sum())\n    \u002F\u002F ③排序\n    Array.prototype.rever = function () {\n      return this.reverse()\n    }\n    console.log(arr.rever())\n\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,86492,86493,86501,86509,86514,86519,86524,86529,86534,86539,86544,86549,86554,86559,86563,86568,86573,86578,86583,86587,86592,86597,86602,86607,86611,86616,86621,86626,86631,86635,86640,86644,86652],{"__ignoreMap":31},[36,86494,86495,86497,86499],{"class":38,"line":39},[36,86496,2577],{"class":50},[36,86498,53131],{"class":52631},[36,86500,52638],{"class":50},[36,86502,86503,86505,86507],{"class":38,"line":54},[36,86504,53475],{"class":50},[36,86506,53144],{"class":52631},[36,86508,52638],{"class":50},[36,86510,86511],{"class":38,"line":61},[36,86512,86513],{"class":50},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[36,86515,86516],{"class":38,"line":80},[36,86517,86518],{"class":50},"    const arr = [1, 2, 3]\n",[36,86520,86521],{"class":38,"line":96},[36,86522,86523],{"class":50},"    \u002F\u002F 自己定义数组的扩展方法\n",[36,86525,86526],{"class":38,"line":101},[36,86527,86528],{"class":50},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[36,86530,86531],{"class":38,"line":128},[36,86532,86533],{"class":50},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[36,86535,86536],{"class":38,"line":149},[36,86537,86538],{"class":50},"    \u002F\u002F ①.最大值\n",[36,86540,86541],{"class":38,"line":154},[36,86542,86543],{"class":50},"    Array.prototype.max = function () {\n",[36,86545,86546],{"class":38,"line":167},[36,86547,86548],{"class":50},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[36,86550,86551],{"class":38,"line":172},[36,86552,86553],{"class":50},"      return Math.max(...this)\n",[36,86555,86556],{"class":38,"line":192},[36,86557,86558],{"class":50},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[36,86560,86561],{"class":38,"line":211},[36,86562,3693],{"class":50},[36,86564,86565],{"class":38,"line":216},[36,86566,86567],{"class":50},"    console.log(arr.max())\n",[36,86569,86570],{"class":38,"line":231},[36,86571,86572],{"class":50},"    \u002F\u002F ②最小值\n",[36,86574,86575],{"class":38,"line":236},[36,86576,86577],{"class":50},"    Array.prototype.min = function () {\n",[36,86579,86580],{"class":38,"line":247},[36,86581,86582],{"class":50},"      return Math.min(...this)\n",[36,86584,86585],{"class":38,"line":637},[36,86586,3693],{"class":50},[36,86588,86589],{"class":38,"line":646},[36,86590,86591],{"class":50},"    console.log(arr.min())\n",[36,86593,86594],{"class":38,"line":655},[36,86595,86596],{"class":50},"    \u002F\u002F③求和\n",[36,86598,86599],{"class":38,"line":660},[36,86600,86601],{"class":50},"    Array.prototype.sum = function () {\n",[36,86603,86604],{"class":38,"line":665},[36,86605,86606],{"class":50},"      return this.reduce((prev, current) => prev + current, 0)\n",[36,86608,86609],{"class":38,"line":674},[36,86610,3693],{"class":50},[36,86612,86613],{"class":38,"line":679},[36,86614,86615],{"class":50},"    console.log(arr.sum())\n",[36,86617,86618],{"class":38,"line":692},[36,86619,86620],{"class":50},"    \u002F\u002F ③排序\n",[36,86622,86623],{"class":38,"line":705},[36,86624,86625],{"class":50},"    Array.prototype.rever = function () {\n",[36,86627,86628],{"class":38,"line":710},[36,86629,86630],{"class":50},"      return this.reverse()\n",[36,86632,86633],{"class":38,"line":722},[36,86634,3693],{"class":50},[36,86636,86637],{"class":38,"line":750},[36,86638,86639],{"class":50},"    console.log(arr.rever())\n",[36,86641,86642],{"class":38,"line":755},[36,86643,58],{"emptyLinePlaceholder":57},[36,86645,86646,86648,86650],{"class":38,"line":777},[36,86647,53748],{"class":50},[36,86649,53144],{"class":52631},[36,86651,52638],{"class":50},[36,86653,86654,86656,86658],{"class":38,"line":802},[36,86655,53116],{"class":50},[36,86657,53131],{"class":52631},[36,86659,52638],{"class":50},[19,86661,86662],{},[2992,86663],{"alt":31,"src":86664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[1645,86666,86668],{"id":86667},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86670,86671],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86673,86674],{},[2992,86675],{"alt":31,"src":86676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,86678,86680],{"className":54398,"code":86679,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(Star.prototype)\n    console.log(Star.prototype.constructor === Star)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,86681,86682,86690,86698,86703,86708,86712,86717,86722,86727,86735],{"__ignoreMap":31},[36,86683,86684,86686,86688],{"class":38,"line":39},[36,86685,2577],{"class":50},[36,86687,53131],{"class":52631},[36,86689,52638],{"class":50},[36,86691,86692,86694,86696],{"class":38,"line":54},[36,86693,53475],{"class":50},[36,86695,53144],{"class":52631},[36,86697,52638],{"class":50},[36,86699,86700],{"class":38,"line":61},[36,86701,86702],{"class":50},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[36,86704,86705],{"class":38,"line":80},[36,86706,86707],{"class":50},"    function Star() {\n",[36,86709,86710],{"class":38,"line":96},[36,86711,3693],{"class":50},[36,86713,86714],{"class":38,"line":101},[36,86715,86716],{"class":50},"    const ldh = new Star()\n",[36,86718,86719],{"class":38,"line":128},[36,86720,86721],{"class":50},"    console.log(Star.prototype)\n",[36,86723,86724],{"class":38,"line":149},[36,86725,86726],{"class":50},"    console.log(Star.prototype.constructor === Star)\n",[36,86728,86729,86731,86733],{"class":38,"line":154},[36,86730,53748],{"class":50},[36,86732,53144],{"class":52631},[36,86734,52638],{"class":50},[36,86736,86737,86739,86741],{"class":38,"line":167},[36,86738,53116],{"class":50},[36,86740,53131],{"class":52631},[36,86742,52638],{"class":50},[19,86744,86745],{},[2992,86746],{"alt":31,"src":86747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86749,86750],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,86752,86754],{"className":54398,"code":86753,"language":54400,"meta":31,"style":31},"  \u003Cscript>\n    \u002F\u002Fconstructor   单词是构造函数的意思\n    function Star() {\n    }\n    \u002F\u002F const ldh = new Star()\n    \u002F\u002F console.log(Star.prototype)\n    \u002F\u002F console.log(Star.prototype.constructor === Star)\n\n    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n    \u002F\u002F Star.prototype.sing = function () {\n    \u002F\u002F   console.log('唱歌')\n    \u002F\u002F }\n    \u002F\u002F Star.prototype.dance = function () {\n    \u002F\u002F   console.log('跳舞')\n    \u002F\u002F }\n    console.log(Star.prototype)\n    Star.prototype = {\n      sing: function () {\n        console.log('唱歌')\n      },\n      dance: function () {\n        console.log('跳舞')\n      }\n    }\n    console.log(Star.prototype)\n  \u003C\u002Fscript>\n",[33,86755,86756,86764,86768,86772,86776,86781,86786,86791,86795,86800,86805,86810,86815,86820,86825,86829,86833,86838,86843,86848,86852,86857,86862,86866,86870,86874],{"__ignoreMap":31},[36,86757,86758,86760,86762],{"class":38,"line":39},[36,86759,53475],{"class":50},[36,86761,53144],{"class":52631},[36,86763,52638],{"class":50},[36,86765,86766],{"class":38,"line":54},[36,86767,86702],{"class":50},[36,86769,86770],{"class":38,"line":61},[36,86771,86707],{"class":50},[36,86773,86774],{"class":38,"line":80},[36,86775,3693],{"class":50},[36,86777,86778],{"class":38,"line":96},[36,86779,86780],{"class":50},"    \u002F\u002F const ldh = new Star()\n",[36,86782,86783],{"class":38,"line":101},[36,86784,86785],{"class":50},"    \u002F\u002F console.log(Star.prototype)\n",[36,86787,86788],{"class":38,"line":128},[36,86789,86790],{"class":50},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[36,86792,86793],{"class":38,"line":149},[36,86794,58],{"emptyLinePlaceholder":57},[36,86796,86797],{"class":38,"line":154},[36,86798,86799],{"class":50},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[36,86801,86802],{"class":38,"line":167},[36,86803,86804],{"class":50},"    \u002F\u002F Star.prototype.sing = function () {\n",[36,86806,86807],{"class":38,"line":172},[36,86808,86809],{"class":50},"    \u002F\u002F   console.log('唱歌')\n",[36,86811,86812],{"class":38,"line":192},[36,86813,86814],{"class":50},"    \u002F\u002F }\n",[36,86816,86817],{"class":38,"line":211},[36,86818,86819],{"class":50},"    \u002F\u002F Star.prototype.dance = function () {\n",[36,86821,86822],{"class":38,"line":216},[36,86823,86824],{"class":50},"    \u002F\u002F   console.log('跳舞')\n",[36,86826,86827],{"class":38,"line":231},[36,86828,86814],{"class":50},[36,86830,86831],{"class":38,"line":236},[36,86832,86721],{"class":50},[36,86834,86835],{"class":38,"line":247},[36,86836,86837],{"class":50},"    Star.prototype = {\n",[36,86839,86840],{"class":38,"line":637},[36,86841,86842],{"class":50},"      sing: function () {\n",[36,86844,86845],{"class":38,"line":646},[36,86846,86847],{"class":50},"        console.log('唱歌')\n",[36,86849,86850],{"class":38,"line":655},[36,86851,79223],{"class":50},[36,86853,86854],{"class":38,"line":660},[36,86855,86856],{"class":50},"      dance: function () {\n",[36,86858,86859],{"class":38,"line":665},[36,86860,86861],{"class":50},"        console.log('跳舞')\n",[36,86863,86864],{"class":38,"line":674},[36,86865,53729],{"class":50},[36,86867,86868],{"class":38,"line":679},[36,86869,3693],{"class":50},[36,86871,86872],{"class":38,"line":692},[36,86873,86721],{"class":50},[36,86875,86876,86878,86880],{"class":38,"line":705},[36,86877,53748],{"class":50},[36,86879,53144],{"class":52631},[36,86881,52638],{"class":50},[19,86883,86884],{},"进行输出结果后会发现：",[19,86886,86887],{},[2992,86888],{"alt":31,"src":86889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86891,86892],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86894,86895],{},"所以，要重新指回创造这个原型对象的构造函数",[26,86897,86899],{"className":72544,"code":86898,"language":72546,"meta":31,"style":31},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[33,86900,86901,86915,86920,86925,86936,86949,86954,86965,86979,86983],{"__ignoreMap":31},[36,86902,86903,86906,86908,86911,86913],{"class":38,"line":39},[36,86904,86905],{"class":73},"Star",[36,86907,2225],{"class":50},[36,86909,86910],{"class":73},"prototype",[36,86912,14893],{"class":42},[36,86914,16901],{"class":50},[36,86916,86917],{"class":38,"line":54},[36,86918,86919],{"class":124},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[36,86921,86922],{"class":38,"line":61},[36,86923,86924],{"class":50},"  constructor: Star,\n",[36,86926,86927,86930,86932,86934],{"class":38,"line":80},[36,86928,86929],{"class":46},"  sing",[36,86931,52768],{"class":50},[36,86933,55780],{"class":42},[36,86935,55783],{"class":50},[36,86937,86938,86940,86942,86944,86947],{"class":38,"line":96},[36,86939,75084],{"class":50},[36,86941,59578],{"class":46},[36,86943,222],{"class":50},[36,86945,86946],{"class":110},"'唱歌'",[36,86948,1680],{"class":50},[36,86950,86951],{"class":38,"line":101},[36,86952,86953],{"class":50},"   },\n",[36,86955,86956,86959,86961,86963],{"class":38,"line":128},[36,86957,86958],{"class":46},"   dance",[36,86960,52768],{"class":50},[36,86962,55780],{"class":42},[36,86964,55783],{"class":50},[36,86966,86967,86970,86972,86974,86977],{"class":38,"line":149},[36,86968,86969],{"class":50},"     console.",[36,86971,59578],{"class":46},[36,86973,222],{"class":50},[36,86975,86976],{"class":110},"'跳舞'",[36,86978,1680],{"class":50},[36,86980,86981],{"class":38,"line":154},[36,86982,5798],{"class":50},[36,86984,86985],{"class":38,"line":167},[36,86986,250],{"class":50},[19,86988,86989],{},[2992,86990],{"alt":31,"src":86991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86993,86994],{},"总结1：",[19,86996,86997],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86999,87000],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87002,87003],{},"constructor指的是他的来源",[19,87005,87006],{},[2992,87007],{"alt":31,"src":87008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87010,87011],{},[2992,87012],{"alt":31,"src":87013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87015,87016],{},"总结2：",[19,87018,87019],{},[2992,87020],{"alt":31,"src":87021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87023,87024],{},[2992,87025],{"alt":31,"src":87026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87028,87029],{},[2992,87030],{"alt":31,"src":87031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[1645,87033,87035],{"id":87034},"_4134-对象原型","4.13.4 对象原型",[19,87037,87038],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87040,87041],{},"对象原型就是__proto__这个属性",[19,87043,87044],{},[2992,87045],{"alt":31,"src":87046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87048,87049],{},[2992,87050],{"alt":31,"src":87051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87053,87054],{},[2992,87055],{"alt":31,"src":87056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87058,87059],{},[2992,87060],{"alt":31,"src":87061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,87063,87065],{"className":54398,"code":87064,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,87066,87067,87075,87083,87087,87091,87095,87100,87108],{"__ignoreMap":31},[36,87068,87069,87071,87073],{"class":38,"line":39},[36,87070,2577],{"class":50},[36,87072,53131],{"class":52631},[36,87074,52638],{"class":50},[36,87076,87077,87079,87081],{"class":38,"line":54},[36,87078,53475],{"class":50},[36,87080,53144],{"class":52631},[36,87082,52638],{"class":50},[36,87084,87085],{"class":38,"line":61},[36,87086,86707],{"class":50},[36,87088,87089],{"class":38,"line":80},[36,87090,3693],{"class":50},[36,87092,87093],{"class":38,"line":96},[36,87094,86716],{"class":50},[36,87096,87097],{"class":38,"line":101},[36,87098,87099],{"class":50},"    console.log(ldh)\n",[36,87101,87102,87104,87106],{"class":38,"line":128},[36,87103,53748],{"class":50},[36,87105,53144],{"class":52631},[36,87107,52638],{"class":50},[36,87109,87110,87112,87114],{"class":38,"line":149},[36,87111,53116],{"class":50},[36,87113,53131],{"class":52631},[36,87115,52638],{"class":50},[19,87117,87118],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87120,87121],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87123,87124],{},[2992,87125],{"alt":31,"src":87126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87128,87129],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87131,87132],{},"对象原型指向原型对象",[19,87134,87135],{},[2992,87136],{"alt":31,"src":87137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87139,87140],{},[2992,87141],{"alt":31,"src":87142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87144,87145],{},[2992,87146],{"alt":31,"src":87147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[1645,87149,87151],{"id":87150},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87153,87154],{},[2992,87155],{"alt":31,"src":87156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[256,87158,87159,87162,87165,87168],{},[259,87160,87161],{},"构造函数通过new的形式实例化得到实例对象",[259,87163,87164],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[259,87166,87167],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[259,87169,87170],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87172,87173],{},[2992,87174],{"alt":31,"src":87175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87177,87178],{},"题目梳理：",[19,87180,87181],{},[2992,87182],{"alt":31,"src":87183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[1645,87185,87187],{"id":87186},"_4136-原型继承","4.13.6 原型继承",[19,87189,87190],{},[2992,87191],{"alt":31,"src":87192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87194,87195],{},[2992,87196],{"alt":31,"src":87197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87199,87200],{},[2992,87201],{"alt":31,"src":87202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87204,87205],{},[2992,87206],{"alt":31,"src":87207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87209,87210],{},[2992,87211],{"alt":31,"src":87212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87214,87215],{},[2992,87216],{"alt":31,"src":87217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87219,87220],{},[2992,87221],{"alt":31,"src":87222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87224,87225],{},[2992,87226],{"alt":31,"src":87227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87229,87230],{},"回顾：构造函数每次new得到对象都是不同的",[1645,87232,87234],{"id":87233},"_4137-原型链","4.13.7 原型链",[19,87236,87237],{},[2992,87238],{"alt":31,"src":87239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87241,87242],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87244,87245],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87247,87248],{},"大哥是Object",[19,87250,87251],{},[2992,87252],{"alt":31,"src":87253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87255,87256],{},[2992,87257],{"alt":31,"src":87258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87260,87261],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87263,87264],{},"万物皆对象",[1645,87266,87268],{"id":87267},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87270,87271],{},"模态框",[19,87273,87274],{},"以后遇见这个效果直接使用这个就行",[19,87276,87277],{},[2992,87278],{"alt":31,"src":87279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87281,87282],{},[2992,87283],{"alt":31,"src":87284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87286,87287],{},[2992,87288],{"alt":31,"src":87289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87291,87292],{},[2992,87293],{"alt":31,"src":87294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87296,87297],{},"补充知识点：",[256,87299,87300],{},[259,87301,87302],{},"append()",[19,87304,87305],{},[2992,87306],{"alt":31,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,87309,87311],{"className":51964,"code":87310,"language":51966,"meta":31,"style":31},"append(param1)\nappend(param1, param2)\nappend(param1, param2, \u002F* …, *\u002F paramN)\n\n\n\nlet div = document.createElement(\"div\");\nlet p = document.createElement(\"p\");\ndiv.append(p);\n\nconsole.log(div.childNodes); \u002F\u002F NodeList [ \u003Cp> ]\n",[33,87312,87313,87318,87323,87328,87332,87336,87340,87345,87350,87355,87359],{"__ignoreMap":31},[36,87314,87315],{"class":38,"line":39},[36,87316,87317],{"class":50},"append(param1)\n",[36,87319,87320],{"class":38,"line":54},[36,87321,87322],{"class":50},"append(param1, param2)\n",[36,87324,87325],{"class":38,"line":61},[36,87326,87327],{"class":50},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[36,87329,87330],{"class":38,"line":80},[36,87331,58],{"emptyLinePlaceholder":57},[36,87333,87334],{"class":38,"line":96},[36,87335,58],{"emptyLinePlaceholder":57},[36,87337,87338],{"class":38,"line":101},[36,87339,58],{"emptyLinePlaceholder":57},[36,87341,87342],{"class":38,"line":128},[36,87343,87344],{"class":50},"let div = document.createElement(\"div\");\n",[36,87346,87347],{"class":38,"line":149},[36,87348,87349],{"class":50},"let p = document.createElement(\"p\");\n",[36,87351,87352],{"class":38,"line":154},[36,87353,87354],{"class":50},"div.append(p);\n",[36,87356,87357],{"class":38,"line":167},[36,87358,58],{"emptyLinePlaceholder":57},[36,87360,87361,87364,87366],{"class":38,"line":172},[36,87362,87363],{"class":50},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[36,87365,19],{"class":52631},[36,87367,87368],{"class":50},"> ]\n",[256,87370,87371],{"start":54},[259,87372,87373],{},"remove()",[19,87375,87376],{},"自己删自己",[19,87378,87379],{},[2992,87380],{"alt":31,"src":87381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,87383,87385],{"className":51964,"code":87384,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .modal {\n      width: 300px;\n      min-height: 100px;\n      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n      border-radius: 4px;\n      position: fixed;\n      z-index: 999;\n      left: 50%;\n      top: 50%;\n      transform: translate3d(-50%, -50%, 0);\n      background-color: #fff;\n    }\n\n    .modal .header {\n      line-height: 40px;\n      padding: 0 10px;\n      position: relative;\n      font-size: 20px;\n    }\n\n    .modal .header i {\n      font-style: normal;\n      color: #999;\n      position: absolute;\n      right: 15px;\n      top: -2px;\n      cursor: pointer;\n    }\n\n    .modal .body {\n      text-align: center;\n      padding: 10px;\n    }\n\n    .modal .footer {\n      display: flex;\n      justify-content: flex-end;\n      padding: 10px;\n    }\n\n    .modal .footer a {\n      padding: 3px 8px;\n      background: #ccc;\n      text-decoration: none;\n      color: #fff;\n      border-radius: 2px;\n      margin-right: 10px;\n      font-size: 14px;\n    }\n\n    .modal .footer a.submit {\n      background-color: #369;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cbutton id=\"delete\">删除\u003C\u002Fbutton>\n  \u003Cbutton id=\"login\">登录\u003C\u002Fbutton>\n  \u003Cscript>\n    \u002F\u002F 1.Model 构造函数的封装  模态框\n    function Modal(title = '', message = '') {\n      \u002F\u002F 创建Model 模态框盒子\n      \u002F\u002F 1.1 创建div标签\n      this.modalBox = document.createElement('div')\n      \u002F\u002F 1.2 给div 添加类名为model\n      this.modalBox.className = 'modal'\n      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n      this.modalBox.innerHTML = `\n        \u003Cdiv class=\"header\">${title}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n        \u003Cdiv class=\"body\">${message}\u003C\u002Fdiv>\n      `\n      \u002F\u002F console.log(this.modalBox)\n    }\n    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n    \u002F\u002F 2.给构造函数原型对象挂载open方法\n    Modal.prototype.open = function () {\n      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n      const box = document.querySelector('.modal')\n      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n      box && box.remove()\n      \u002F\u002F 主要这个方法不要用箭头函数\n      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n      \u002F\u002F append可以增加对象\n      document.body.append(this.modalBox)\n\n      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n      this.modalBox.querySelector('i').addEventListener('click', () => {\n        \u002F\u002F 这个地方需要用到箭头函数\n        \u002F\u002F 这个this是指向的是上上级 是实例对象\n        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n        this.close()\n      })\n    }\n\n    \u002F\u002F 测试一下 点击 删除按钮\n    document.querySelector('#delete').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const del = new Modal('温馨的提示', '您没有删除权限操作')\n      \u002F\u002F 实例对象调用open方法\n      del.open()\n    })\n    \u002F\u002F 测试一下 点击 登录按钮\n    document.querySelector('#login').addEventListener('click', () => {\n      \u002F\u002F 先调用Model构造函数\n      const log = new Modal('友情提示', '您还没有登录呢')\n      \u002F\u002F 实例对象调用open方法\n      log.open()\n    })\n    \u002F\u002F 3.给构造函数原型对象挂载close方法\n    Modal.prototype.close = function () {\n      this.modalBox.remove()\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,87386,87387,87397,87411,87415,87423,87437,87457,87469,87477,87484,87496,87509,87544,87556,87567,87579,87591,87603,87630,87640,87644,87648,87657,87669,87683,87693,87705,87709,87713,87723,87734,87744,87754,87767,87780,87790,87794,87798,87807,87817,87829,87833,87837,87846,87856,87866,87878,87882,87886,87896,87912,87923,87933,87943,87955,87967,87979,87983,87987,88000,88011,88015,88023,88031,88035,88043,88063,88083,88091,88096,88122,88127,88132,88151,88156,88168,88173,88184,88194,88204,88209,88214,88218,88223,88228,88233,88253,88258,88278,88283,88297,88302,88307,88312,88328,88332,88337,88366,88371,88376,88381,88392,88396,88400,88404,88409,88434,88439,88464,88469,88478,88482,88487,88512,88516,88541,88545,88554,88558,88563,88581,88591,88595,88603,88611,88615],{"__ignoreMap":31},[36,87388,87389,87391,87393,87395],{"class":38,"line":39},[36,87390,52628],{"class":50},[36,87392,52632],{"class":52631},[36,87394,52635],{"class":46},[36,87396,52638],{"class":50},[36,87398,87399,87401,87403,87405,87407,87409],{"class":38,"line":54},[36,87400,2577],{"class":50},[36,87402,51966],{"class":52631},[36,87404,52647],{"class":46},[36,87406,70],{"class":50},[36,87408,52652],{"class":110},[36,87410,52638],{"class":50},[36,87412,87413],{"class":38,"line":61},[36,87414,58],{"emptyLinePlaceholder":57},[36,87416,87417,87419,87421],{"class":38,"line":80},[36,87418,2577],{"class":50},[36,87420,52665],{"class":52631},[36,87422,52638],{"class":50},[36,87424,87425,87427,87429,87431,87433,87435],{"class":38,"line":96},[36,87426,53475],{"class":50},[36,87428,52675],{"class":52631},[36,87430,52678],{"class":46},[36,87432,70],{"class":50},[36,87434,52683],{"class":110},[36,87436,52638],{"class":50},[36,87438,87439,87441,87443,87445,87447,87449,87451,87453,87455],{"class":38,"line":101},[36,87440,53475],{"class":50},[36,87442,52675],{"class":52631},[36,87444,16249],{"class":46},[36,87446,70],{"class":50},[36,87448,52722],{"class":110},[36,87450,52702],{"class":46},[36,87452,70],{"class":50},[36,87454,52729],{"class":110},[36,87456,52638],{"class":50},[36,87458,87459,87461,87463,87465,87467],{"class":38,"line":128},[36,87460,53475],{"class":50},[36,87462,52738],{"class":52631},[36,87464,52741],{"class":50},[36,87466,52738],{"class":52631},[36,87468,52638],{"class":50},[36,87470,87471,87473,87475],{"class":38,"line":149},[36,87472,53475],{"class":50},[36,87474,1592],{"class":52631},[36,87476,52638],{"class":50},[36,87478,87479,87482],{"class":38,"line":154},[36,87480,87481],{"class":46},"    .modal",[36,87483,16901],{"class":50},[36,87485,87486,87488,87490,87492,87494],{"class":38,"line":167},[36,87487,56102],{"class":73},[36,87489,52768],{"class":50},[36,87491,5464],{"class":73},[36,87493,52823],{"class":42},[36,87495,77],{"class":50},[36,87497,87498,87501,87503,87505,87507],{"class":38,"line":172},[36,87499,87500],{"class":73},"      min-height",[36,87502,52768],{"class":50},[36,87504,1979],{"class":73},[36,87506,52823],{"class":42},[36,87508,77],{"class":50},[36,87510,87511,87513,87515,87517,87519,87521,87523,87525,87527,87529,87531,87533,87535,87537,87539,87542],{"class":38,"line":192},[36,87512,80081],{"class":73},[36,87514,52768],{"class":50},[36,87516,1859],{"class":73},[36,87518,242],{"class":73},[36,87520,74],{"class":73},[36,87522,52823],{"class":42},[36,87524,80098],{"class":73},[36,87526,222],{"class":50},[36,87528,1859],{"class":73},[36,87530,477],{"class":50},[36,87532,1859],{"class":73},[36,87534,477],{"class":50},[36,87536,1859],{"class":73},[36,87538,477],{"class":50},[36,87540,87541],{"class":73},"0.1",[36,87543,228],{"class":50},[36,87545,87546,87548,87550,87552,87554],{"class":38,"line":211},[36,87547,56465],{"class":73},[36,87549,52768],{"class":50},[36,87551,1961],{"class":73},[36,87553,52823],{"class":42},[36,87555,77],{"class":50},[36,87557,87558,87560,87562,87565],{"class":38,"line":216},[36,87559,56090],{"class":73},[36,87561,52768],{"class":50},[36,87563,87564],{"class":73},"fixed",[36,87566,77],{"class":50},[36,87568,87569,87572,87574,87577],{"class":38,"line":231},[36,87570,87571],{"class":73},"      z-index",[36,87573,52768],{"class":50},[36,87575,87576],{"class":73},"999",[36,87578,77],{"class":50},[36,87580,87581,87583,87585,87587,87589],{"class":38,"line":236},[36,87582,56169],{"class":73},[36,87584,52768],{"class":50},[36,87586,2323],{"class":73},[36,87588,1996],{"class":42},[36,87590,77],{"class":50},[36,87592,87593,87595,87597,87599,87601],{"class":38,"line":247},[36,87594,56278],{"class":73},[36,87596,52768],{"class":50},[36,87598,2323],{"class":73},[36,87600,1996],{"class":42},[36,87602,77],{"class":50},[36,87604,87605,87607,87609,87611,87613,87616,87618,87620,87622,87624,87626,87628],{"class":38,"line":637},[36,87606,80122],{"class":73},[36,87608,52768],{"class":50},[36,87610,80127],{"class":73},[36,87612,222],{"class":50},[36,87614,87615],{"class":73},"-50",[36,87617,1996],{"class":42},[36,87619,477],{"class":50},[36,87621,87615],{"class":73},[36,87623,1996],{"class":42},[36,87625,477],{"class":50},[36,87627,1859],{"class":73},[36,87629,228],{"class":50},[36,87631,87632,87634,87636,87638],{"class":38,"line":646},[36,87633,56215],{"class":73},[36,87635,52768],{"class":50},[36,87637,62173],{"class":73},[36,87639,77],{"class":50},[36,87641,87642],{"class":38,"line":655},[36,87643,3693],{"class":50},[36,87645,87646],{"class":38,"line":660},[36,87647,58],{"emptyLinePlaceholder":57},[36,87649,87650,87652,87655],{"class":38,"line":665},[36,87651,87481],{"class":46},[36,87653,87654],{"class":46}," .header",[36,87656,16901],{"class":50},[36,87658,87659,87661,87663,87665,87667],{"class":38,"line":674},[36,87660,58690],{"class":73},[36,87662,52768],{"class":50},[36,87664,2068],{"class":73},[36,87666,52823],{"class":42},[36,87668,77],{"class":50},[36,87670,87671,87673,87675,87677,87679,87681],{"class":38,"line":679},[36,87672,56026],{"class":73},[36,87674,52768],{"class":50},[36,87676,1859],{"class":73},[36,87678,74],{"class":73},[36,87680,52823],{"class":42},[36,87682,77],{"class":50},[36,87684,87685,87687,87689,87691],{"class":38,"line":692},[36,87686,56090],{"class":73},[36,87688,52768],{"class":50},[36,87690,56095],{"class":73},[36,87692,77],{"class":50},[36,87694,87695,87697,87699,87701,87703],{"class":38,"line":705},[36,87696,56253],{"class":73},[36,87698,52768],{"class":50},[36,87700,2367],{"class":73},[36,87702,52823],{"class":42},[36,87704,77],{"class":50},[36,87706,87707],{"class":38,"line":710},[36,87708,3693],{"class":50},[36,87710,87711],{"class":38,"line":722},[36,87712,58],{"emptyLinePlaceholder":57},[36,87714,87715,87717,87719,87721],{"class":38,"line":750},[36,87716,87481],{"class":46},[36,87718,87654],{"class":46},[36,87720,4523],{"class":52631},[36,87722,16901],{"class":50},[36,87724,87725,87728,87730,87732],{"class":38,"line":755},[36,87726,87727],{"class":73},"      font-style",[36,87729,52768],{"class":50},[36,87731,65172],{"class":73},[36,87733,77],{"class":50},[36,87735,87736,87738,87740,87742],{"class":38,"line":777},[36,87737,58747],{"class":73},[36,87739,52768],{"class":50},[36,87741,63401],{"class":73},[36,87743,77],{"class":50},[36,87745,87746,87748,87750,87752],{"class":38,"line":802},[36,87747,56090],{"class":73},[36,87749,52768],{"class":50},[36,87751,56162],{"class":73},[36,87753,77],{"class":50},[36,87755,87756,87759,87761,87763,87765],{"class":38,"line":807},[36,87757,87758],{"class":73},"      right",[36,87760,52768],{"class":50},[36,87762,2242],{"class":73},[36,87764,52823],{"class":42},[36,87766,77],{"class":50},[36,87768,87769,87771,87773,87776,87778],{"class":38,"line":818},[36,87770,56278],{"class":73},[36,87772,52768],{"class":50},[36,87774,87775],{"class":73},"-2",[36,87777,52823],{"class":42},[36,87779,77],{"class":50},[36,87781,87782,87784,87786,87788],{"class":38,"line":843},[36,87783,63356],{"class":73},[36,87785,52768],{"class":50},[36,87787,63361],{"class":73},[36,87789,77],{"class":50},[36,87791,87792],{"class":38,"line":848},[36,87793,3693],{"class":50},[36,87795,87796],{"class":38,"line":859},[36,87797,58],{"emptyLinePlaceholder":57},[36,87799,87800,87802,87805],{"class":38,"line":864},[36,87801,87481],{"class":46},[36,87803,87804],{"class":46}," .body",[36,87806,16901],{"class":50},[36,87808,87809,87811,87813,87815],{"class":38,"line":873},[36,87810,58617],{"class":73},[36,87812,52768],{"class":50},[36,87814,52923],{"class":73},[36,87816,77],{"class":50},[36,87818,87819,87821,87823,87825,87827],{"class":38,"line":9454},[36,87820,56026],{"class":73},[36,87822,52768],{"class":50},[36,87824,2113],{"class":73},[36,87826,52823],{"class":42},[36,87828,77],{"class":50},[36,87830,87831],{"class":38,"line":9481},[36,87832,3693],{"class":50},[36,87834,87835],{"class":38,"line":9486},[36,87836,58],{"emptyLinePlaceholder":57},[36,87838,87839,87841,87844],{"class":38,"line":9492},[36,87840,87481],{"class":46},[36,87842,87843],{"class":46}," .footer",[36,87845,16901],{"class":50},[36,87847,87848,87850,87852,87854],{"class":38,"line":9504},[36,87849,56340],{"class":73},[36,87851,52768],{"class":50},[36,87853,52808],{"class":73},[36,87855,77],{"class":50},[36,87857,87858,87860,87862,87864],{"class":38,"line":9516},[36,87859,56351],{"class":73},[36,87861,52768],{"class":50},[36,87863,52911],{"class":73},[36,87865,77],{"class":50},[36,87867,87868,87870,87872,87874,87876],{"class":38,"line":9528},[36,87869,56026],{"class":73},[36,87871,52768],{"class":50},[36,87873,2113],{"class":73},[36,87875,52823],{"class":42},[36,87877,77],{"class":50},[36,87879,87880],{"class":38,"line":11184},[36,87881,3693],{"class":50},[36,87883,87884],{"class":38,"line":11209},[36,87885,58],{"emptyLinePlaceholder":57},[36,87887,87888,87890,87892,87894],{"class":38,"line":11232},[36,87889,87481],{"class":46},[36,87891,87843],{"class":46},[36,87893,474],{"class":52631},[36,87895,16901],{"class":50},[36,87897,87898,87900,87902,87904,87906,87908,87910],{"class":38,"line":11256},[36,87899,56026],{"class":73},[36,87901,52768],{"class":50},[36,87903,1741],{"class":73},[36,87905,52823],{"class":42},[36,87907,3589],{"class":73},[36,87909,52823],{"class":42},[36,87911,77],{"class":50},[36,87913,87914,87916,87918,87921],{"class":38,"line":11261},[36,87915,63052],{"class":73},[36,87917,52768],{"class":50},[36,87919,87920],{"class":73},"#ccc",[36,87922,77],{"class":50},[36,87924,87925,87927,87929,87931],{"class":38,"line":11266},[36,87926,65301],{"class":73},[36,87928,52768],{"class":50},[36,87930,56068],{"class":73},[36,87932,77],{"class":50},[36,87934,87935,87937,87939,87941],{"class":38,"line":11271},[36,87936,58747],{"class":73},[36,87938,52768],{"class":50},[36,87940,62173],{"class":73},[36,87942,77],{"class":50},[36,87944,87945,87947,87949,87951,87953],{"class":38,"line":11280},[36,87946,56465],{"class":73},[36,87948,52768],{"class":50},[36,87950,1747],{"class":73},[36,87952,52823],{"class":42},[36,87954,77],{"class":50},[36,87956,87957,87959,87961,87963,87965],{"class":38,"line":11285},[36,87958,63081],{"class":73},[36,87960,52768],{"class":50},[36,87962,2113],{"class":73},[36,87964,52823],{"class":42},[36,87966,77],{"class":50},[36,87968,87969,87971,87973,87975,87977],{"class":38,"line":11291},[36,87970,56253],{"class":73},[36,87972,52768],{"class":50},[36,87974,2216],{"class":73},[36,87976,52823],{"class":42},[36,87978,77],{"class":50},[36,87980,87981],{"class":38,"line":11312},[36,87982,3693],{"class":50},[36,87984,87985],{"class":38,"line":11318},[36,87986,58],{"emptyLinePlaceholder":57},[36,87988,87989,87991,87993,87995,87998],{"class":38,"line":11332},[36,87990,87481],{"class":46},[36,87992,87843],{"class":46},[36,87994,474],{"class":52631},[36,87996,87997],{"class":46},".submit",[36,87999,16901],{"class":50},[36,88001,88002,88004,88006,88009],{"class":38,"line":11338},[36,88003,56215],{"class":73},[36,88005,52768],{"class":50},[36,88007,88008],{"class":73},"#369",[36,88010,77],{"class":50},[36,88012,88013],{"class":38,"line":11365},[36,88014,3693],{"class":50},[36,88016,88017,88019,88021],{"class":38,"line":11374},[36,88018,53748],{"class":50},[36,88020,1592],{"class":52631},[36,88022,52638],{"class":50},[36,88024,88025,88027,88029],{"class":38,"line":11380},[36,88026,53116],{"class":50},[36,88028,52665],{"class":52631},[36,88030,52638],{"class":50},[36,88032,88033],{"class":38,"line":11388},[36,88034,58],{"emptyLinePlaceholder":57},[36,88036,88037,88039,88041],{"class":38,"line":11393},[36,88038,2577],{"class":50},[36,88040,53131],{"class":52631},[36,88042,52638],{"class":50},[36,88044,88045,88047,88049,88051,88053,88056,88059,88061],{"class":38,"line":17933},[36,88046,53475],{"class":50},[36,88048,55218],{"class":52631},[36,88050,16288],{"class":46},[36,88052,70],{"class":50},[36,88054,88055],{"class":110},"\"delete\"",[36,88057,88058],{"class":50},">删除\u003C\u002F",[36,88060,55218],{"class":52631},[36,88062,52638],{"class":50},[36,88064,88065,88067,88069,88071,88073,88076,88079,88081],{"class":38,"line":17939},[36,88066,53475],{"class":50},[36,88068,55218],{"class":52631},[36,88070,16288],{"class":46},[36,88072,70],{"class":50},[36,88074,88075],{"class":110},"\"login\"",[36,88077,88078],{"class":50},">登录\u003C\u002F",[36,88080,55218],{"class":52631},[36,88082,52638],{"class":50},[36,88084,88085,88087,88089],{"class":38,"line":17962},[36,88086,53475],{"class":50},[36,88088,53144],{"class":52631},[36,88090,52638],{"class":50},[36,88092,88093],{"class":38,"line":17968},[36,88094,88095],{"class":124},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[36,88097,88098,88100,88103,88105,88107,88109,88111,88113,88116,88118,88120],{"class":38,"line":17991},[36,88099,71415],{"class":42},[36,88101,88102],{"class":46}," Modal",[36,88104,222],{"class":50},[36,88106,52738],{"class":473},[36,88108,14893],{"class":42},[36,88110,71261],{"class":110},[36,88112,477],{"class":50},[36,88114,88115],{"class":473},"message",[36,88117,14893],{"class":42},[36,88119,71261],{"class":110},[36,88121,485],{"class":50},[36,88123,88124],{"class":38,"line":18005},[36,88125,88126],{"class":124},"      \u002F\u002F 创建Model 模态框盒子\n",[36,88128,88129],{"class":38,"line":18025},[36,88130,88131],{"class":124},"      \u002F\u002F 1.1 创建div标签\n",[36,88133,88134,88136,88139,88141,88143,88145,88147,88149],{"class":38,"line":18031},[36,88135,71382],{"class":73},[36,88137,88138],{"class":50},".modalBox ",[36,88140,70],{"class":42},[36,88142,55727],{"class":50},[36,88144,71482],{"class":46},[36,88146,222],{"class":50},[36,88148,83262],{"class":110},[36,88150,1680],{"class":50},[36,88152,88153],{"class":38,"line":18042},[36,88154,88155],{"class":124},"      \u002F\u002F 1.2 给div 添加类名为model\n",[36,88157,88158,88160,88163,88165],{"class":38,"line":18065},[36,88159,71382],{"class":73},[36,88161,88162],{"class":50},".modalBox.className ",[36,88164,70],{"class":42},[36,88166,88167],{"class":110}," 'modal'\n",[36,88169,88170],{"class":38,"line":18087},[36,88171,88172],{"class":124},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[36,88174,88175,88177,88180,88182],{"class":38,"line":18092},[36,88176,71382],{"class":73},[36,88178,88179],{"class":50},".modalBox.innerHTML ",[36,88181,70],{"class":42},[36,88183,71499],{"class":110},[36,88185,88186,88189,88191],{"class":38,"line":18098},[36,88187,88188],{"class":110},"        \u003Cdiv class=\"header\">${",[36,88190,52738],{"class":50},[36,88192,88193],{"class":110},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[36,88195,88196,88199,88201],{"class":38,"line":18112},[36,88197,88198],{"class":110},"        \u003Cdiv class=\"body\">${",[36,88200,88115],{"class":50},[36,88202,88203],{"class":110},"}\u003C\u002Fdiv>\n",[36,88205,88206],{"class":38,"line":18125},[36,88207,88208],{"class":110},"      `\n",[36,88210,88211],{"class":38,"line":18130},[36,88212,88213],{"class":124},"      \u002F\u002F console.log(this.modalBox)\n",[36,88215,88216],{"class":38,"line":18144},[36,88217,3693],{"class":50},[36,88219,88220],{"class":38,"line":18149},[36,88221,88222],{"class":124},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[36,88224,88225],{"class":38,"line":18155},[36,88226,88227],{"class":124},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[36,88229,88230],{"class":38,"line":18160},[36,88231,88232],{"class":124},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[36,88234,88235,88238,88240,88242,88244,88247,88249,88251],{"class":38,"line":18174},[36,88236,88237],{"class":73},"    Modal",[36,88239,2225],{"class":50},[36,88241,86910],{"class":73},[36,88243,2225],{"class":50},[36,88245,88246],{"class":46},"open",[36,88248,14893],{"class":42},[36,88250,60249],{"class":42},[36,88252,55783],{"class":50},[36,88254,88255],{"class":38,"line":18179},[36,88256,88257],{"class":124},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[36,88259,88260,88262,88265,88267,88269,88271,88273,88276],{"class":38,"line":18184},[36,88261,59559],{"class":42},[36,88263,88264],{"class":73}," box",[36,88266,14893],{"class":42},[36,88268,55727],{"class":50},[36,88270,55730],{"class":46},[36,88272,222],{"class":50},[36,88274,88275],{"class":110},"'.modal'",[36,88277,1680],{"class":50},[36,88279,88280],{"class":38,"line":18198},[36,88281,88282],{"class":124},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[36,88284,88285,88288,88290,88293,88295],{"class":38,"line":18210},[36,88286,88287],{"class":50},"      box ",[36,88289,3233],{"class":42},[36,88291,88292],{"class":50}," box.",[36,88294,58337],{"class":46},[36,88296,3484],{"class":50},[36,88298,88299],{"class":38,"line":18215},[36,88300,88301],{"class":124},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[36,88303,88304],{"class":38,"line":18228},[36,88305,88306],{"class":124},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[36,88308,88309],{"class":38,"line":18233},[36,88310,88311],{"class":124},"      \u002F\u002F append可以增加对象\n",[36,88313,88314,88317,88320,88322,88325],{"class":38,"line":18238},[36,88315,88316],{"class":50},"      document.body.",[36,88318,88319],{"class":46},"append",[36,88321,222],{"class":50},[36,88323,88324],{"class":73},"this",[36,88326,88327],{"class":50},".modalBox)\n",[36,88329,88330],{"class":38,"line":18243},[36,88331,58],{"emptyLinePlaceholder":57},[36,88333,88334],{"class":38,"line":18256},[36,88335,88336],{"class":124},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[36,88338,88339,88341,88344,88346,88348,88351,88353,88355,88357,88359,88362,88364],{"class":38,"line":18261},[36,88340,71382],{"class":73},[36,88342,88343],{"class":50},".modalBox.",[36,88345,55730],{"class":46},[36,88347,222],{"class":50},[36,88349,88350],{"class":110},"'i'",[36,88352,32157],{"class":50},[36,88354,59144],{"class":46},[36,88356,222],{"class":50},[36,88358,59149],{"class":110},[36,88360,88361],{"class":50},", () ",[36,88363,86053],{"class":42},[36,88365,16901],{"class":50},[36,88367,88368],{"class":38,"line":33964},[36,88369,88370],{"class":124},"        \u002F\u002F 这个地方需要用到箭头函数\n",[36,88372,88373],{"class":38,"line":33970},[36,88374,88375],{"class":124},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[36,88377,88378],{"class":38,"line":33976},[36,88379,88380],{"class":124},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[36,88382,88383,88385,88387,88390],{"class":38,"line":33982},[36,88384,66057],{"class":73},[36,88386,2225],{"class":50},[36,88388,88389],{"class":46},"close",[36,88391,3484],{"class":50},[36,88393,88394],{"class":38,"line":33988},[36,88395,66146],{"class":50},[36,88397,88398],{"class":38,"line":33999},[36,88399,3693],{"class":50},[36,88401,88402],{"class":38,"line":34005},[36,88403,58],{"emptyLinePlaceholder":57},[36,88405,88406],{"class":38,"line":34025},[36,88407,88408],{"class":124},"    \u002F\u002F 测试一下 点击 删除按钮\n",[36,88410,88411,88413,88415,88417,88420,88422,88424,88426,88428,88430,88432],{"class":38,"line":34031},[36,88412,53738],{"class":50},[36,88414,55730],{"class":46},[36,88416,222],{"class":50},[36,88418,88419],{"class":110},"'#delete'",[36,88421,32157],{"class":50},[36,88423,59144],{"class":46},[36,88425,222],{"class":50},[36,88427,59149],{"class":110},[36,88429,88361],{"class":50},[36,88431,86053],{"class":42},[36,88433,16901],{"class":50},[36,88435,88436],{"class":38,"line":34042},[36,88437,88438],{"class":124},"      \u002F\u002F 先调用Model构造函数\n",[36,88440,88441,88443,88446,88448,88450,88452,88454,88457,88459,88462],{"class":38,"line":34048},[36,88442,59559],{"class":42},[36,88444,88445],{"class":73}," del",[36,88447,14893],{"class":42},[36,88449,13033],{"class":42},[36,88451,88102],{"class":46},[36,88453,222],{"class":50},[36,88455,88456],{"class":110},"'温馨的提示'",[36,88458,477],{"class":50},[36,88460,88461],{"class":110},"'您没有删除权限操作'",[36,88463,1680],{"class":50},[36,88465,88466],{"class":38,"line":34054},[36,88467,88468],{"class":124},"      \u002F\u002F 实例对象调用open方法\n",[36,88470,88471,88474,88476],{"class":38,"line":34060},[36,88472,88473],{"class":50},"      del.",[36,88475,88246],{"class":46},[36,88477,3484],{"class":50},[36,88479,88480],{"class":38,"line":34066},[36,88481,34792],{"class":50},[36,88483,88484],{"class":38,"line":34072},[36,88485,88486],{"class":124},"    \u002F\u002F 测试一下 点击 登录按钮\n",[36,88488,88489,88491,88493,88495,88498,88500,88502,88504,88506,88508,88510],{"class":38,"line":34078},[36,88490,53738],{"class":50},[36,88492,55730],{"class":46},[36,88494,222],{"class":50},[36,88496,88497],{"class":110},"'#login'",[36,88499,32157],{"class":50},[36,88501,59144],{"class":46},[36,88503,222],{"class":50},[36,88505,59149],{"class":110},[36,88507,88361],{"class":50},[36,88509,86053],{"class":42},[36,88511,16901],{"class":50},[36,88513,88514],{"class":38,"line":34084},[36,88515,88438],{"class":124},[36,88517,88518,88520,88523,88525,88527,88529,88531,88534,88536,88539],{"class":38,"line":34104},[36,88519,59559],{"class":42},[36,88521,88522],{"class":73}," log",[36,88524,14893],{"class":42},[36,88526,13033],{"class":42},[36,88528,88102],{"class":46},[36,88530,222],{"class":50},[36,88532,88533],{"class":110},"'友情提示'",[36,88535,477],{"class":50},[36,88537,88538],{"class":110},"'您还没有登录呢'",[36,88540,1680],{"class":50},[36,88542,88543],{"class":38,"line":34110},[36,88544,88468],{"class":124},[36,88546,88547,88550,88552],{"class":38,"line":34126},[36,88548,88549],{"class":50},"      log.",[36,88551,88246],{"class":46},[36,88553,3484],{"class":50},[36,88555,88556],{"class":38,"line":34132},[36,88557,34792],{"class":50},[36,88559,88560],{"class":38,"line":34146},[36,88561,88562],{"class":124},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[36,88564,88565,88567,88569,88571,88573,88575,88577,88579],{"class":38,"line":34152},[36,88566,88237],{"class":73},[36,88568,2225],{"class":50},[36,88570,86910],{"class":73},[36,88572,2225],{"class":50},[36,88574,88389],{"class":46},[36,88576,14893],{"class":42},[36,88578,60249],{"class":42},[36,88580,55783],{"class":50},[36,88582,88583,88585,88587,88589],{"class":38,"line":34167},[36,88584,71382],{"class":73},[36,88586,88343],{"class":50},[36,88588,58337],{"class":46},[36,88590,3484],{"class":50},[36,88592,88593],{"class":38,"line":34173},[36,88594,3693],{"class":50},[36,88596,88597,88599,88601],{"class":38,"line":34182},[36,88598,53748],{"class":50},[36,88600,53144],{"class":52631},[36,88602,52638],{"class":50},[36,88604,88605,88607,88609],{"class":38,"line":34188},[36,88606,53116],{"class":50},[36,88608,53131],{"class":52631},[36,88610,52638],{"class":50},[36,88612,88613],{"class":38,"line":34197},[36,88614,58],{"emptyLinePlaceholder":57},[36,88616,88617,88619,88621],{"class":38,"line":34203},[36,88618,53116],{"class":50},[36,88620,51966],{"class":52631},[36,88622,52638],{"class":50},[19,88624,88625],{},[2992,88626],{"alt":31,"src":88627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88629,88631],{"id":88630},"_414-深浅拷贝","4.14 深浅拷贝",[1645,88633,88635],{"id":88634},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88637,88638],{},[2992,88639],{"alt":31,"src":88640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88642,88643],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88645,88646],{},[2992,88647],{"alt":31,"src":88648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88650,88651],{},[2992,88652],{"alt":31,"src":88653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88655,88656],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88658,88659],{},[2992,88660],{"alt":31,"src":88661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88663,1388],{},[19,88665,88666],{},[2992,88667],{"alt":31,"src":88668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[1645,88670,88672],{"id":88671},"_4142-深拷贝","4.14.2 深拷贝",[19,88674,88675],{},"深拷贝：拷贝的是对象，不是地址",[19,88677,88678],{},"常用的三种方法：",[256,88680,88681,88684,88687],{},[259,88682,88683],{},"通过递归实现深拷贝",[259,88685,88686],{},"lodash\u002FcloneDeep",[259,88688,88689],{},"通过JSON.stringify()实现",[23327,88691,88693],{"id":88692},"_41421-递归函数","4.14.2.1 递归函数",[19,88695,88696],{},[2992,88697],{"alt":31,"src":88698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[256,88700,88701],{},[259,88702,88703],{},"死递归占溢出：",[26,88705,88707],{"className":54398,"code":88706,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,88708,88709,88717,88725,88729,88734,88738,88743,88751],{"__ignoreMap":31},[36,88710,88711,88713,88715],{"class":38,"line":39},[36,88712,2577],{"class":50},[36,88714,53131],{"class":52631},[36,88716,52638],{"class":50},[36,88718,88719,88721,88723],{"class":38,"line":54},[36,88720,53475],{"class":50},[36,88722,53144],{"class":52631},[36,88724,52638],{"class":50},[36,88726,88727],{"class":38,"line":61},[36,88728,78474],{"class":50},[36,88730,88731],{"class":38,"line":80},[36,88732,88733],{"class":50},"      fn()\n",[36,88735,88736],{"class":38,"line":96},[36,88737,3693],{"class":50},[36,88739,88740],{"class":38,"line":101},[36,88741,88742],{"class":50},"    fn()\n",[36,88744,88745,88747,88749],{"class":38,"line":128},[36,88746,53748],{"class":50},[36,88748,53144],{"class":52631},[36,88750,52638],{"class":50},[36,88752,88753,88755,88757],{"class":38,"line":149},[36,88754,53116],{"class":50},[36,88756,53131],{"class":52631},[36,88758,52638],{"class":50},[256,88760,88761],{"start":54},[259,88762,88763],{},"递归函数要加判断条件：",[19,88765,88766],{},[2992,88767],{"alt":31,"src":88768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[256,88770,88771],{"start":61},[259,88772,88773],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,88775,88777],{"className":51964,"code":88776,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv>\u003C\u002Fdiv>\n  \u003Cscript>\n    function getTime() {\n      document.querySelector('div').innerHTML = new Date().toLocaleString()\n      setTimeout(getTime, 1000)\n    }\n    getTime()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,88778,88779,88789,88803,88807,88815,88829,88849,88861,88869,88873,88881,88893,88901,88909,88934,88946,88950,88957,88965,88973,88977],{"__ignoreMap":31},[36,88780,88781,88783,88785,88787],{"class":38,"line":39},[36,88782,52628],{"class":50},[36,88784,52632],{"class":52631},[36,88786,52635],{"class":46},[36,88788,52638],{"class":50},[36,88790,88791,88793,88795,88797,88799,88801],{"class":38,"line":54},[36,88792,2577],{"class":50},[36,88794,51966],{"class":52631},[36,88796,52647],{"class":46},[36,88798,70],{"class":50},[36,88800,52652],{"class":110},[36,88802,52638],{"class":50},[36,88804,88805],{"class":38,"line":61},[36,88806,58],{"emptyLinePlaceholder":57},[36,88808,88809,88811,88813],{"class":38,"line":80},[36,88810,2577],{"class":50},[36,88812,52665],{"class":52631},[36,88814,52638],{"class":50},[36,88816,88817,88819,88821,88823,88825,88827],{"class":38,"line":96},[36,88818,53475],{"class":50},[36,88820,52675],{"class":52631},[36,88822,52678],{"class":46},[36,88824,70],{"class":50},[36,88826,52683],{"class":110},[36,88828,52638],{"class":50},[36,88830,88831,88833,88835,88837,88839,88841,88843,88845,88847],{"class":38,"line":101},[36,88832,53475],{"class":50},[36,88834,52675],{"class":52631},[36,88836,16249],{"class":46},[36,88838,70],{"class":50},[36,88840,52722],{"class":110},[36,88842,52702],{"class":46},[36,88844,70],{"class":50},[36,88846,52729],{"class":110},[36,88848,52638],{"class":50},[36,88850,88851,88853,88855,88857,88859],{"class":38,"line":128},[36,88852,53475],{"class":50},[36,88854,52738],{"class":52631},[36,88856,52741],{"class":50},[36,88858,52738],{"class":52631},[36,88860,52638],{"class":50},[36,88862,88863,88865,88867],{"class":38,"line":149},[36,88864,53116],{"class":50},[36,88866,52665],{"class":52631},[36,88868,52638],{"class":50},[36,88870,88871],{"class":38,"line":154},[36,88872,58],{"emptyLinePlaceholder":57},[36,88874,88875,88877,88879],{"class":38,"line":167},[36,88876,2577],{"class":50},[36,88878,53131],{"class":52631},[36,88880,52638],{"class":50},[36,88882,88883,88885,88887,88889,88891],{"class":38,"line":172},[36,88884,53475],{"class":50},[36,88886,52942],{"class":52631},[36,88888,56645],{"class":50},[36,88890,52942],{"class":52631},[36,88892,52638],{"class":50},[36,88894,88895,88897,88899],{"class":38,"line":192},[36,88896,53475],{"class":50},[36,88898,53144],{"class":52631},[36,88900,52638],{"class":50},[36,88902,88903,88905,88907],{"class":38,"line":211},[36,88904,71415],{"class":42},[36,88906,75104],{"class":46},[36,88908,51],{"class":50},[36,88910,88911,88913,88915,88917,88919,88921,88923,88925,88927,88929,88932],{"class":38,"line":216},[36,88912,57102],{"class":50},[36,88914,55730],{"class":46},[36,88916,222],{"class":50},[36,88918,83262],{"class":110},[36,88920,75580],{"class":50},[36,88922,70],{"class":42},[36,88924,13033],{"class":42},[36,88926,75120],{"class":46},[36,88928,18590],{"class":50},[36,88930,88931],{"class":46},"toLocaleString",[36,88933,3484],{"class":50},[36,88935,88936,88939,88942,88944],{"class":38,"line":231},[36,88937,88938],{"class":46},"      setTimeout",[36,88940,88941],{"class":50},"(getTime, ",[36,88943,7889],{"class":73},[36,88945,1680],{"class":50},[36,88947,88948],{"class":38,"line":236},[36,88949,3693],{"class":50},[36,88951,88952,88955],{"class":38,"line":247},[36,88953,88954],{"class":46},"    getTime",[36,88956,3484],{"class":50},[36,88958,88959,88961,88963],{"class":38,"line":637},[36,88960,53748],{"class":50},[36,88962,53144],{"class":52631},[36,88964,52638],{"class":50},[36,88966,88967,88969,88971],{"class":38,"line":646},[36,88968,53116],{"class":50},[36,88970,53131],{"class":52631},[36,88972,52638],{"class":50},[36,88974,88975],{"class":38,"line":655},[36,88976,58],{"emptyLinePlaceholder":57},[36,88978,88979,88981,88983],{"class":38,"line":660},[36,88980,53116],{"class":50},[36,88982,51966],{"class":52631},[36,88984,52638],{"class":50},[19,88986,88987],{},[2992,88988],{"alt":31,"src":88989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[256,88991,88992],{"start":80},[259,88993,88683],{},[19,88995,88996],{},[2992,88997],{"alt":31,"src":88998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89000,89001],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89003,40520],{},[19,89005,89006],{},"这个是简易版的递归函数深拷贝",[19,89008,89009],{},"一定要注意先数组再对象，因为万物皆可对象",[26,89011,89013],{"className":51964,"code":89012,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = {}\n    \u002F\u002F 拷贝函数\n    function deepCopy(newObj, oldObj) {\n      for (let k in oldObj) {\n        \u002F\u002F 处理数组的问题\n        \u002F\u002F 判断是否属于数组\n        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n        if (oldObj[k] instanceof Array) {\n          \u002F\u002F newObj[k]  接收的内容放到[]\n          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n          newObj[k] = []\n          deepCopy(newObj[k], oldObj[k])\n        } else if (oldObj[k] instanceof Object) {\n          newObj[k] = {}\n          deepCopy(newObj[k], oldObj[k])\n        } else {\n          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n          \u002F\u002F newObj[k]与newObj写法是等价的\n          newObj[k] = oldObj[k]\n        }\n      }\n    }\n    deepCopy(o, obj) \u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n    console.log(o)\n    o.age = 20\n    o.hobby[0] = '篮球'\n    o.family = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,89014,89015,89025,89039,89043,89051,89065,89085,89097,89105,89109,89117,89125,89135,89144,89152,89168,89172,89180,89184,89188,89200,89205,89224,89240,89245,89250,89255,89270,89275,89280,89289,89297,89314,89322,89328,89336,89341,89346,89355,89359,89363,89367,89378,89387,89397,89411,89421,89429,89437,89445,89449],{"__ignoreMap":31},[36,89016,89017,89019,89021,89023],{"class":38,"line":39},[36,89018,52628],{"class":50},[36,89020,52632],{"class":52631},[36,89022,52635],{"class":46},[36,89024,52638],{"class":50},[36,89026,89027,89029,89031,89033,89035,89037],{"class":38,"line":54},[36,89028,2577],{"class":50},[36,89030,51966],{"class":52631},[36,89032,52647],{"class":46},[36,89034,70],{"class":50},[36,89036,52652],{"class":110},[36,89038,52638],{"class":50},[36,89040,89041],{"class":38,"line":61},[36,89042,58],{"emptyLinePlaceholder":57},[36,89044,89045,89047,89049],{"class":38,"line":80},[36,89046,2577],{"class":50},[36,89048,52665],{"class":52631},[36,89050,52638],{"class":50},[36,89052,89053,89055,89057,89059,89061,89063],{"class":38,"line":96},[36,89054,53475],{"class":50},[36,89056,52675],{"class":52631},[36,89058,52678],{"class":46},[36,89060,70],{"class":50},[36,89062,52683],{"class":110},[36,89064,52638],{"class":50},[36,89066,89067,89069,89071,89073,89075,89077,89079,89081,89083],{"class":38,"line":101},[36,89068,53475],{"class":50},[36,89070,52675],{"class":52631},[36,89072,16249],{"class":46},[36,89074,70],{"class":50},[36,89076,52722],{"class":110},[36,89078,52702],{"class":46},[36,89080,70],{"class":50},[36,89082,52729],{"class":110},[36,89084,52638],{"class":50},[36,89086,89087,89089,89091,89093,89095],{"class":38,"line":128},[36,89088,53475],{"class":50},[36,89090,52738],{"class":52631},[36,89092,52741],{"class":50},[36,89094,52738],{"class":52631},[36,89096,52638],{"class":50},[36,89098,89099,89101,89103],{"class":38,"line":149},[36,89100,53116],{"class":50},[36,89102,52665],{"class":52631},[36,89104,52638],{"class":50},[36,89106,89107],{"class":38,"line":154},[36,89108,58],{"emptyLinePlaceholder":57},[36,89110,89111,89113,89115],{"class":38,"line":167},[36,89112,2577],{"class":50},[36,89114,53131],{"class":52631},[36,89116,52638],{"class":50},[36,89118,89119,89121,89123],{"class":38,"line":172},[36,89120,53475],{"class":50},[36,89122,53144],{"class":52631},[36,89124,52638],{"class":50},[36,89126,89127,89129,89131,89133],{"class":38,"line":192},[36,89128,1498],{"class":42},[36,89130,71302],{"class":73},[36,89132,14893],{"class":42},[36,89134,16901],{"class":50},[36,89136,89137,89139,89142],{"class":38,"line":211},[36,89138,72947],{"class":50},[36,89140,89141],{"class":110},"'pink'",[36,89143,32797],{"class":50},[36,89145,89146,89148,89150],{"class":38,"line":216},[36,89147,72957],{"class":50},[36,89149,2317],{"class":73},[36,89151,32797],{"class":50},[36,89153,89154,89157,89160,89162,89165],{"class":38,"line":231},[36,89155,89156],{"class":50},"      hobby: [",[36,89158,89159],{"class":110},"'乒乓球'",[36,89161,477],{"class":50},[36,89163,89164],{"class":110},"'足球'",[36,89166,89167],{"class":50},"],\n",[36,89169,89170],{"class":38,"line":236},[36,89171,79203],{"class":50},[36,89173,89174,89177],{"class":38,"line":247},[36,89175,89176],{"class":50},"        baby: ",[36,89178,89179],{"class":110},"'小pink'\n",[36,89181,89182],{"class":38,"line":637},[36,89183,53729],{"class":50},[36,89185,89186],{"class":38,"line":646},[36,89187,3693],{"class":50},[36,89189,89190,89192,89195,89197],{"class":38,"line":655},[36,89191,1498],{"class":42},[36,89193,89194],{"class":73}," o",[36,89196,14893],{"class":42},[36,89198,89199],{"class":50}," {}\n",[36,89201,89202],{"class":38,"line":660},[36,89203,89204],{"class":124},"    \u002F\u002F 拷贝函数\n",[36,89206,89207,89209,89212,89214,89217,89219,89222],{"class":38,"line":665},[36,89208,71415],{"class":42},[36,89210,89211],{"class":46}," deepCopy",[36,89213,222],{"class":50},[36,89215,89216],{"class":473},"newObj",[36,89218,477],{"class":50},[36,89220,89221],{"class":473},"oldObj",[36,89223,485],{"class":50},[36,89225,89226,89228,89230,89232,89235,89237],{"class":38,"line":674},[36,89227,53615],{"class":42},[36,89229,3180],{"class":50},[36,89231,53178],{"class":42},[36,89233,89234],{"class":50}," k ",[36,89236,27374],{"class":42},[36,89238,89239],{"class":50}," oldObj) {\n",[36,89241,89242],{"class":38,"line":679},[36,89243,89244],{"class":124},"        \u002F\u002F 处理数组的问题\n",[36,89246,89247],{"class":38,"line":692},[36,89248,89249],{"class":124},"        \u002F\u002F 判断是否属于数组\n",[36,89251,89252],{"class":38,"line":705},[36,89253,89254],{"class":124},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[36,89256,89257,89259,89262,89265,89268],{"class":38,"line":710},[36,89258,3999],{"class":42},[36,89260,89261],{"class":50}," (oldObj[k] ",[36,89263,89264],{"class":42},"instanceof",[36,89266,89267],{"class":46}," Array",[36,89269,485],{"class":50},[36,89271,89272],{"class":38,"line":722},[36,89273,89274],{"class":124},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[36,89276,89277],{"class":38,"line":750},[36,89278,89279],{"class":124},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[36,89281,89282,89285,89287],{"class":38,"line":755},[36,89283,89284],{"class":50},"          newObj[k] ",[36,89286,70],{"class":42},[36,89288,53169],{"class":50},[36,89290,89291,89294],{"class":38,"line":777},[36,89292,89293],{"class":46},"          deepCopy",[36,89295,89296],{"class":50},"(newObj[k], oldObj[k])\n",[36,89298,89299,89301,89303,89305,89307,89309,89312],{"class":38,"line":802},[36,89300,81411],{"class":50},[36,89302,3219],{"class":42},[36,89304,3222],{"class":42},[36,89306,89261],{"class":50},[36,89308,89264],{"class":42},[36,89310,89311],{"class":46}," Object",[36,89313,485],{"class":50},[36,89315,89316,89318,89320],{"class":38,"line":807},[36,89317,89284],{"class":50},[36,89319,70],{"class":42},[36,89321,89199],{"class":50},[36,89323,89324,89326],{"class":38,"line":818},[36,89325,89293],{"class":46},[36,89327,89296],{"class":50},[36,89329,89330,89332,89334],{"class":38,"line":843},[36,89331,81411],{"class":50},[36,89333,3219],{"class":42},[36,89335,16901],{"class":50},[36,89337,89338],{"class":38,"line":848},[36,89339,89340],{"class":124},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[36,89342,89343],{"class":38,"line":859},[36,89344,89345],{"class":124},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[36,89347,89348,89350,89352],{"class":38,"line":864},[36,89349,89284],{"class":50},[36,89351,70],{"class":42},[36,89353,89354],{"class":50}," oldObj[k]\n",[36,89356,89357],{"class":38,"line":873},[36,89358,4031],{"class":50},[36,89360,89361],{"class":38,"line":9454},[36,89362,53729],{"class":50},[36,89364,89365],{"class":38,"line":9481},[36,89366,3693],{"class":50},[36,89368,89369,89372,89375],{"class":38,"line":9486},[36,89370,89371],{"class":46},"    deepCopy",[36,89373,89374],{"class":50},"(o, obj) ",[36,89376,89377],{"class":124},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[36,89379,89380,89382,89384],{"class":38,"line":9492},[36,89381,75084],{"class":50},[36,89383,59578],{"class":46},[36,89385,89386],{"class":50},"(o)\n",[36,89388,89389,89392,89394],{"class":38,"line":9504},[36,89390,89391],{"class":50},"    o.age ",[36,89393,70],{"class":42},[36,89395,89396],{"class":73}," 20\n",[36,89398,89399,89402,89404,89406,89408],{"class":38,"line":9516},[36,89400,89401],{"class":50},"    o.hobby[",[36,89403,1859],{"class":73},[36,89405,5932],{"class":50},[36,89407,70],{"class":42},[36,89409,89410],{"class":110}," '篮球'\n",[36,89412,89413,89416,89418],{"class":38,"line":9528},[36,89414,89415],{"class":50},"    o.family ",[36,89417,70],{"class":42},[36,89419,89420],{"class":110}," '老pink'\n",[36,89422,89423,89425,89427],{"class":38,"line":11184},[36,89424,75084],{"class":50},[36,89426,59578],{"class":46},[36,89428,71367],{"class":50},[36,89430,89431,89433,89435],{"class":38,"line":11209},[36,89432,53748],{"class":50},[36,89434,53144],{"class":52631},[36,89436,52638],{"class":50},[36,89438,89439,89441,89443],{"class":38,"line":11232},[36,89440,53116],{"class":50},[36,89442,53131],{"class":52631},[36,89444,52638],{"class":50},[36,89446,89447],{"class":38,"line":11256},[36,89448,58],{"emptyLinePlaceholder":57},[36,89450,89451,89453,89455],{"class":38,"line":11261},[36,89452,53116],{"class":50},[36,89454,51966],{"class":52631},[36,89456,52638],{"class":50},[19,89458,89459],{},[2992,89460],{"alt":31,"src":89461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23327,89463,89465,89466],{"id":89464},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[887,89467,89468],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89470,89471],{},[1906,89472,89473],{"href":89473,"rel":89474},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25195],[19,89476,89477],{},"lodash里边的方法都要加上一个下划线_",[19,89479,89480],{},"_.cloneDeep()",[26,89482,89484],{"className":51964,"code":89483,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003C!-- 先引用这个库 -->\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    const o = _.cloneDeep(obj)\n    console.log(o)\n    o.family.baby = '老pink'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,89485,89486,89496,89510,89514,89522,89536,89556,89568,89576,89580,89588,89593,89612,89620,89630,89638,89646,89658,89662,89668,89672,89676,89692,89700,89709,89717,89725,89733,89737],{"__ignoreMap":31},[36,89487,89488,89490,89492,89494],{"class":38,"line":39},[36,89489,52628],{"class":50},[36,89491,52632],{"class":52631},[36,89493,52635],{"class":46},[36,89495,52638],{"class":50},[36,89497,89498,89500,89502,89504,89506,89508],{"class":38,"line":54},[36,89499,2577],{"class":50},[36,89501,51966],{"class":52631},[36,89503,52647],{"class":46},[36,89505,70],{"class":50},[36,89507,52652],{"class":110},[36,89509,52638],{"class":50},[36,89511,89512],{"class":38,"line":61},[36,89513,58],{"emptyLinePlaceholder":57},[36,89515,89516,89518,89520],{"class":38,"line":80},[36,89517,2577],{"class":50},[36,89519,52665],{"class":52631},[36,89521,52638],{"class":50},[36,89523,89524,89526,89528,89530,89532,89534],{"class":38,"line":96},[36,89525,53475],{"class":50},[36,89527,52675],{"class":52631},[36,89529,52678],{"class":46},[36,89531,70],{"class":50},[36,89533,52683],{"class":110},[36,89535,52638],{"class":50},[36,89537,89538,89540,89542,89544,89546,89548,89550,89552,89554],{"class":38,"line":101},[36,89539,53475],{"class":50},[36,89541,52675],{"class":52631},[36,89543,16249],{"class":46},[36,89545,70],{"class":50},[36,89547,52722],{"class":110},[36,89549,52702],{"class":46},[36,89551,70],{"class":50},[36,89553,52729],{"class":110},[36,89555,52638],{"class":50},[36,89557,89558,89560,89562,89564,89566],{"class":38,"line":128},[36,89559,53475],{"class":50},[36,89561,52738],{"class":52631},[36,89563,52741],{"class":50},[36,89565,52738],{"class":52631},[36,89567,52638],{"class":50},[36,89569,89570,89572,89574],{"class":38,"line":149},[36,89571,53116],{"class":50},[36,89573,52665],{"class":52631},[36,89575,52638],{"class":50},[36,89577,89578],{"class":38,"line":154},[36,89579,58],{"emptyLinePlaceholder":57},[36,89581,89582,89584,89586],{"class":38,"line":167},[36,89583,2577],{"class":50},[36,89585,53131],{"class":52631},[36,89587,52638],{"class":50},[36,89589,89590],{"class":38,"line":172},[36,89591,89592],{"class":124},"  \u003C!-- 先引用这个库 -->\n",[36,89594,89595,89597,89599,89601,89603,89606,89608,89610],{"class":38,"line":192},[36,89596,53475],{"class":50},[36,89598,53144],{"class":52631},[36,89600,56570],{"class":46},[36,89602,70],{"class":50},[36,89604,89605],{"class":110},"\"lodash.min.js\"",[36,89607,56645],{"class":50},[36,89609,53144],{"class":52631},[36,89611,52638],{"class":50},[36,89613,89614,89616,89618],{"class":38,"line":211},[36,89615,53475],{"class":50},[36,89617,53144],{"class":52631},[36,89619,52638],{"class":50},[36,89621,89622,89624,89626,89628],{"class":38,"line":216},[36,89623,1498],{"class":42},[36,89625,71302],{"class":73},[36,89627,14893],{"class":42},[36,89629,16901],{"class":50},[36,89631,89632,89634,89636],{"class":38,"line":231},[36,89633,72947],{"class":50},[36,89635,89141],{"class":110},[36,89637,32797],{"class":50},[36,89639,89640,89642,89644],{"class":38,"line":236},[36,89641,72957],{"class":50},[36,89643,2317],{"class":73},[36,89645,32797],{"class":50},[36,89647,89648,89650,89652,89654,89656],{"class":38,"line":247},[36,89649,89156],{"class":50},[36,89651,89159],{"class":110},[36,89653,477],{"class":50},[36,89655,89164],{"class":110},[36,89657,89167],{"class":50},[36,89659,89660],{"class":38,"line":637},[36,89661,79203],{"class":50},[36,89663,89664,89666],{"class":38,"line":646},[36,89665,89176],{"class":50},[36,89667,89179],{"class":110},[36,89669,89670],{"class":38,"line":655},[36,89671,53729],{"class":50},[36,89673,89674],{"class":38,"line":660},[36,89675,3693],{"class":50},[36,89677,89678,89680,89682,89684,89687,89690],{"class":38,"line":665},[36,89679,1498],{"class":42},[36,89681,89194],{"class":73},[36,89683,14893],{"class":42},[36,89685,89686],{"class":50}," _.",[36,89688,89689],{"class":46},"cloneDeep",[36,89691,71367],{"class":50},[36,89693,89694,89696,89698],{"class":38,"line":674},[36,89695,75084],{"class":50},[36,89697,59578],{"class":46},[36,89699,89386],{"class":50},[36,89701,89702,89705,89707],{"class":38,"line":679},[36,89703,89704],{"class":50},"    o.family.baby ",[36,89706,70],{"class":42},[36,89708,89420],{"class":110},[36,89710,89711,89713,89715],{"class":38,"line":692},[36,89712,75084],{"class":50},[36,89714,59578],{"class":46},[36,89716,71367],{"class":50},[36,89718,89719,89721,89723],{"class":38,"line":705},[36,89720,53748],{"class":50},[36,89722,53144],{"class":52631},[36,89724,52638],{"class":50},[36,89726,89727,89729,89731],{"class":38,"line":710},[36,89728,53116],{"class":50},[36,89730,53131],{"class":52631},[36,89732,52638],{"class":50},[36,89734,89735],{"class":38,"line":722},[36,89736,58],{"emptyLinePlaceholder":57},[36,89738,89739,89741,89743],{"class":38,"line":750},[36,89740,53116],{"class":50},[36,89742,51966],{"class":52631},[36,89744,52638],{"class":50},[19,89746,89747],{},[2992,89748],{"alt":31,"src":89749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23327,89751,89753],{"id":89752},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,89755,89757],{"className":51964,"code":89756,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink',\n      age: 18,\n      hobby: ['乒乓球', '足球'],\n      family: {\n        baby: '小pink'\n      }\n    }\n    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n    const o = JSON.parse(JSON.stringify(obj))\n    console.log(o)\n    o.family.baby = '123'\n    console.log(obj)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,89758,89759,89769,89783,89787,89795,89809,89829,89841,89849,89853,89861,89869,89879,89887,89895,89907,89911,89917,89921,89925,89930,89935,89940,89966,89974,89983,89991,89999,90007,90011],{"__ignoreMap":31},[36,89760,89761,89763,89765,89767],{"class":38,"line":39},[36,89762,52628],{"class":50},[36,89764,52632],{"class":52631},[36,89766,52635],{"class":46},[36,89768,52638],{"class":50},[36,89770,89771,89773,89775,89777,89779,89781],{"class":38,"line":54},[36,89772,2577],{"class":50},[36,89774,51966],{"class":52631},[36,89776,52647],{"class":46},[36,89778,70],{"class":50},[36,89780,52652],{"class":110},[36,89782,52638],{"class":50},[36,89784,89785],{"class":38,"line":61},[36,89786,58],{"emptyLinePlaceholder":57},[36,89788,89789,89791,89793],{"class":38,"line":80},[36,89790,2577],{"class":50},[36,89792,52665],{"class":52631},[36,89794,52638],{"class":50},[36,89796,89797,89799,89801,89803,89805,89807],{"class":38,"line":96},[36,89798,53475],{"class":50},[36,89800,52675],{"class":52631},[36,89802,52678],{"class":46},[36,89804,70],{"class":50},[36,89806,52683],{"class":110},[36,89808,52638],{"class":50},[36,89810,89811,89813,89815,89817,89819,89821,89823,89825,89827],{"class":38,"line":101},[36,89812,53475],{"class":50},[36,89814,52675],{"class":52631},[36,89816,16249],{"class":46},[36,89818,70],{"class":50},[36,89820,52722],{"class":110},[36,89822,52702],{"class":46},[36,89824,70],{"class":50},[36,89826,52729],{"class":110},[36,89828,52638],{"class":50},[36,89830,89831,89833,89835,89837,89839],{"class":38,"line":128},[36,89832,53475],{"class":50},[36,89834,52738],{"class":52631},[36,89836,52741],{"class":50},[36,89838,52738],{"class":52631},[36,89840,52638],{"class":50},[36,89842,89843,89845,89847],{"class":38,"line":149},[36,89844,53116],{"class":50},[36,89846,52665],{"class":52631},[36,89848,52638],{"class":50},[36,89850,89851],{"class":38,"line":154},[36,89852,58],{"emptyLinePlaceholder":57},[36,89854,89855,89857,89859],{"class":38,"line":167},[36,89856,2577],{"class":50},[36,89858,53131],{"class":52631},[36,89860,52638],{"class":50},[36,89862,89863,89865,89867],{"class":38,"line":172},[36,89864,53475],{"class":50},[36,89866,53144],{"class":52631},[36,89868,52638],{"class":50},[36,89870,89871,89873,89875,89877],{"class":38,"line":192},[36,89872,1498],{"class":42},[36,89874,71302],{"class":73},[36,89876,14893],{"class":42},[36,89878,16901],{"class":50},[36,89880,89881,89883,89885],{"class":38,"line":211},[36,89882,72947],{"class":50},[36,89884,89141],{"class":110},[36,89886,32797],{"class":50},[36,89888,89889,89891,89893],{"class":38,"line":216},[36,89890,72957],{"class":50},[36,89892,2317],{"class":73},[36,89894,32797],{"class":50},[36,89896,89897,89899,89901,89903,89905],{"class":38,"line":231},[36,89898,89156],{"class":50},[36,89900,89159],{"class":110},[36,89902,477],{"class":50},[36,89904,89164],{"class":110},[36,89906,89167],{"class":50},[36,89908,89909],{"class":38,"line":236},[36,89910,79203],{"class":50},[36,89912,89913,89915],{"class":38,"line":247},[36,89914,89176],{"class":50},[36,89916,89179],{"class":110},[36,89918,89919],{"class":38,"line":637},[36,89920,53729],{"class":50},[36,89922,89923],{"class":38,"line":646},[36,89924,3693],{"class":50},[36,89926,89927],{"class":38,"line":655},[36,89928,89929],{"class":124},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[36,89931,89932],{"class":38,"line":660},[36,89933,89934],{"class":124},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[36,89936,89937],{"class":38,"line":665},[36,89938,89939],{"class":124},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[36,89941,89942,89944,89946,89948,89951,89953,89956,89958,89960,89962,89964],{"class":38,"line":674},[36,89943,1498],{"class":42},[36,89945,89194],{"class":73},[36,89947,14893],{"class":42},[36,89949,89950],{"class":73}," JSON",[36,89952,2225],{"class":50},[36,89954,89955],{"class":46},"parse",[36,89957,222],{"class":50},[36,89959,72995],{"class":73},[36,89961,2225],{"class":50},[36,89963,73000],{"class":46},[36,89965,73003],{"class":50},[36,89967,89968,89970,89972],{"class":38,"line":679},[36,89969,75084],{"class":50},[36,89971,59578],{"class":46},[36,89973,89386],{"class":50},[36,89975,89976,89978,89980],{"class":38,"line":692},[36,89977,89704],{"class":50},[36,89979,70],{"class":42},[36,89981,89982],{"class":110}," '123'\n",[36,89984,89985,89987,89989],{"class":38,"line":705},[36,89986,75084],{"class":50},[36,89988,59578],{"class":46},[36,89990,71367],{"class":50},[36,89992,89993,89995,89997],{"class":38,"line":710},[36,89994,53748],{"class":50},[36,89996,53144],{"class":52631},[36,89998,52638],{"class":50},[36,90000,90001,90003,90005],{"class":38,"line":722},[36,90002,53116],{"class":50},[36,90004,53131],{"class":52631},[36,90006,52638],{"class":50},[36,90008,90009],{"class":38,"line":750},[36,90010,58],{"emptyLinePlaceholder":57},[36,90012,90013,90015,90017],{"class":38,"line":755},[36,90014,53116],{"class":50},[36,90016,51966],{"class":52631},[36,90018,52638],{"class":50},[19,90020,90021],{},[2992,90022],{"alt":31,"src":90023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90025,90027],{"id":90026},"_415-异常处理","4.15 异常处理",[256,90029,90030],{},[259,90031,90032],{},"throw抛异常",[19,90034,90035],{},[2992,90036],{"alt":31,"src":90037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[256,90039,90040],{"start":54},[259,90041,90042],{},"try\u002Fcatch 捕获错误信息",[19,90044,90045],{},[2992,90046],{"alt":31,"src":90047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,90049,90051],{"className":51964,"code":90050,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cp>123\u003C\u002Fp>\n  \u003Cscript>\n    function fn() {\n      try {\n        \u002F\u002F 可能发生错误的代码  要写到try中\n        const p = document.querySelector('.p')\n        p.style.color = 'red'\n      } catch (err) {\n        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n        console.log(err.message)\n        \u002F\u002F 想要中断程序，需要加return\n        \u002F\u002F return\n        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n        throw new Error('你看看，选择器错误了吧')\n      }\n      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n      finally {\n        alert('弹出对话框')\n      }\n      console.log(11)\n\n    }\n    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,90052,90053,90063,90077,90081,90089,90103,90123,90135,90143,90147,90155,90167,90175,90184,90191,90196,90215,90224,90235,90240,90250,90255,90260,90265,90282,90286,90291,90298,90310,90314,90326,90330,90334,90339,90344,90351,90359,90367,90371],{"__ignoreMap":31},[36,90054,90055,90057,90059,90061],{"class":38,"line":39},[36,90056,52628],{"class":50},[36,90058,52632],{"class":52631},[36,90060,52635],{"class":46},[36,90062,52638],{"class":50},[36,90064,90065,90067,90069,90071,90073,90075],{"class":38,"line":54},[36,90066,2577],{"class":50},[36,90068,51966],{"class":52631},[36,90070,52647],{"class":46},[36,90072,70],{"class":50},[36,90074,52652],{"class":110},[36,90076,52638],{"class":50},[36,90078,90079],{"class":38,"line":61},[36,90080,58],{"emptyLinePlaceholder":57},[36,90082,90083,90085,90087],{"class":38,"line":80},[36,90084,2577],{"class":50},[36,90086,52665],{"class":52631},[36,90088,52638],{"class":50},[36,90090,90091,90093,90095,90097,90099,90101],{"class":38,"line":96},[36,90092,53475],{"class":50},[36,90094,52675],{"class":52631},[36,90096,52678],{"class":46},[36,90098,70],{"class":50},[36,90100,52683],{"class":110},[36,90102,52638],{"class":50},[36,90104,90105,90107,90109,90111,90113,90115,90117,90119,90121],{"class":38,"line":101},[36,90106,53475],{"class":50},[36,90108,52675],{"class":52631},[36,90110,16249],{"class":46},[36,90112,70],{"class":50},[36,90114,52722],{"class":110},[36,90116,52702],{"class":46},[36,90118,70],{"class":50},[36,90120,52729],{"class":110},[36,90122,52638],{"class":50},[36,90124,90125,90127,90129,90131,90133],{"class":38,"line":128},[36,90126,53475],{"class":50},[36,90128,52738],{"class":52631},[36,90130,52741],{"class":50},[36,90132,52738],{"class":52631},[36,90134,52638],{"class":50},[36,90136,90137,90139,90141],{"class":38,"line":149},[36,90138,53116],{"class":50},[36,90140,52665],{"class":52631},[36,90142,52638],{"class":50},[36,90144,90145],{"class":38,"line":154},[36,90146,58],{"emptyLinePlaceholder":57},[36,90148,90149,90151,90153],{"class":38,"line":167},[36,90150,2577],{"class":50},[36,90152,53131],{"class":52631},[36,90154,52638],{"class":50},[36,90156,90157,90159,90161,90163,90165],{"class":38,"line":172},[36,90158,53475],{"class":50},[36,90160,19],{"class":52631},[36,90162,54825],{"class":50},[36,90164,19],{"class":52631},[36,90166,52638],{"class":50},[36,90168,90169,90171,90173],{"class":38,"line":192},[36,90170,53475],{"class":50},[36,90172,53144],{"class":52631},[36,90174,52638],{"class":50},[36,90176,90177,90179,90182],{"class":38,"line":211},[36,90178,71415],{"class":42},[36,90180,90181],{"class":46}," fn",[36,90183,51],{"class":50},[36,90185,90186,90189],{"class":38,"line":216},[36,90187,90188],{"class":42},"      try",[36,90190,16901],{"class":50},[36,90192,90193],{"class":38,"line":231},[36,90194,90195],{"class":124},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[36,90197,90198,90200,90202,90204,90206,90208,90210,90213],{"class":38,"line":236},[36,90199,62601],{"class":42},[36,90201,8301],{"class":73},[36,90203,14893],{"class":42},[36,90205,55727],{"class":50},[36,90207,55730],{"class":46},[36,90209,222],{"class":50},[36,90211,90212],{"class":110},"'.p'",[36,90214,1680],{"class":50},[36,90216,90217,90220,90222],{"class":38,"line":247},[36,90218,90219],{"class":50},"        p.style.color ",[36,90221,70],{"class":42},[36,90223,68382],{"class":110},[36,90225,90226,90229,90232],{"class":38,"line":637},[36,90227,90228],{"class":50},"      } ",[36,90230,90231],{"class":42},"catch",[36,90233,90234],{"class":50}," (err) {\n",[36,90236,90237],{"class":38,"line":646},[36,90238,90239],{"class":124},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[36,90241,90242,90245,90247],{"class":38,"line":655},[36,90243,90244],{"class":50},"        console.",[36,90246,59578],{"class":46},[36,90248,90249],{"class":50},"(err.message)\n",[36,90251,90252],{"class":38,"line":660},[36,90253,90254],{"class":124},"        \u002F\u002F 想要中断程序，需要加return\n",[36,90256,90257],{"class":38,"line":665},[36,90258,90259],{"class":124},"        \u002F\u002F return\n",[36,90261,90262],{"class":38,"line":674},[36,90263,90264],{"class":124},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[36,90266,90267,90270,90272,90275,90277,90280],{"class":38,"line":679},[36,90268,90269],{"class":42},"        throw",[36,90271,13033],{"class":42},[36,90273,90274],{"class":46}," Error",[36,90276,222],{"class":50},[36,90278,90279],{"class":110},"'你看看，选择器错误了吧'",[36,90281,1680],{"class":50},[36,90283,90284],{"class":38,"line":692},[36,90285,53729],{"class":50},[36,90287,90288],{"class":38,"line":705},[36,90289,90290],{"class":124},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[36,90292,90293,90296],{"class":38,"line":710},[36,90294,90295],{"class":42},"      finally",[36,90297,16901],{"class":50},[36,90299,90300,90303,90305,90308],{"class":38,"line":722},[36,90301,90302],{"class":46},"        alert",[36,90304,222],{"class":50},[36,90306,90307],{"class":110},"'弹出对话框'",[36,90309,1680],{"class":50},[36,90311,90312],{"class":38,"line":750},[36,90313,53729],{"class":50},[36,90315,90316,90318,90320,90322,90324],{"class":38,"line":755},[36,90317,59575],{"class":50},[36,90319,59578],{"class":46},[36,90321,222],{"class":50},[36,90323,2139],{"class":73},[36,90325,1680],{"class":50},[36,90327,90328],{"class":38,"line":777},[36,90329,58],{"emptyLinePlaceholder":57},[36,90331,90332],{"class":38,"line":802},[36,90333,3693],{"class":50},[36,90335,90336],{"class":38,"line":807},[36,90337,90338],{"class":124},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[36,90340,90341],{"class":38,"line":818},[36,90342,90343],{"class":124},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[36,90345,90346,90349],{"class":38,"line":843},[36,90347,90348],{"class":46},"    fn",[36,90350,3484],{"class":50},[36,90352,90353,90355,90357],{"class":38,"line":848},[36,90354,53748],{"class":50},[36,90356,53144],{"class":52631},[36,90358,52638],{"class":50},[36,90360,90361,90363,90365],{"class":38,"line":859},[36,90362,53116],{"class":50},[36,90364,53131],{"class":52631},[36,90366,52638],{"class":50},[36,90368,90369],{"class":38,"line":864},[36,90370,58],{"emptyLinePlaceholder":57},[36,90372,90373,90375,90377],{"class":38,"line":873},[36,90374,53116],{"class":50},[36,90376,51966],{"class":52631},[36,90378,52638],{"class":50},[19,90380,90381],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[256,90383,90384],{"start":61},[259,90385,90386],{},"debugger",[19,90388,90389],{},[2992,90390],{"alt":31,"src":90391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90393,90394],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90396,90398],{"id":90397},"_416-处理this","4.16 处理this",[1645,90400,90402],{"id":90401},"_4161-this的指向","4.16.1 this的指向",[256,90404,90405],{},[259,90406,90407],{},"普通函数的this",[19,90409,90410],{},[2992,90411],{"alt":31,"src":90412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[256,90414,90415],{"start":54},[259,90416,90417],{},"箭头函数的this",[19,90419,90420],{},[2992,90421],{"alt":31,"src":90422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90424,90425],{},[2992,90426],{"alt":31,"src":90427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90429,90430],{},[2992,90431],{"alt":31,"src":90432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[1645,90434,90436],{"id":90435},"_4162-this的改变","4.16.2 this的改变",[19,90438,90439],{},"call() apply() bind()",[256,90441,90442],{},[259,90443,90444],{},"call()",[19,90446,90447],{},[2992,90448],{"alt":31,"src":90449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90451,90452],{},"两个作用：①调用函数；②改变this指向",[26,90454,90456],{"className":54398,"code":90455,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      uname: 'pink'\n    }\n    function fn(x, y) {\n      console.log(this)  \u002F\u002Fwindow\n      console.log(x + y)\n    }\n    fn.call(obj, 1, 2)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,90457,90458,90466,90474,90478,90483,90487,90492,90497,90502,90506,90511,90519],{"__ignoreMap":31},[36,90459,90460,90462,90464],{"class":38,"line":39},[36,90461,2577],{"class":50},[36,90463,53131],{"class":52631},[36,90465,52638],{"class":50},[36,90467,90468,90470,90472],{"class":38,"line":54},[36,90469,53475],{"class":50},[36,90471,53144],{"class":52631},[36,90473,52638],{"class":50},[36,90475,90476],{"class":38,"line":61},[36,90477,72854],{"class":50},[36,90479,90480],{"class":38,"line":80},[36,90481,90482],{"class":50},"      uname: 'pink'\n",[36,90484,90485],{"class":38,"line":96},[36,90486,3693],{"class":50},[36,90488,90489],{"class":38,"line":101},[36,90490,90491],{"class":50},"    function fn(x, y) {\n",[36,90493,90494],{"class":38,"line":128},[36,90495,90496],{"class":50},"      console.log(this)  \u002F\u002Fwindow\n",[36,90498,90499],{"class":38,"line":149},[36,90500,90501],{"class":50},"      console.log(x + y)\n",[36,90503,90504],{"class":38,"line":154},[36,90505,3693],{"class":50},[36,90507,90508],{"class":38,"line":167},[36,90509,90510],{"class":50},"    fn.call(obj, 1, 2)\n",[36,90512,90513,90515,90517],{"class":38,"line":172},[36,90514,53748],{"class":50},[36,90516,53144],{"class":52631},[36,90518,52638],{"class":50},[36,90520,90521,90523,90525],{"class":38,"line":192},[36,90522,53116],{"class":50},[36,90524,53131],{"class":52631},[36,90526,52638],{"class":50},[19,90528,90529],{},[2992,90530],{"alt":31,"src":90531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[256,90533,90534],{"start":54},[259,90535,90536],{},"apply()",[19,90538,90539],{},[2992,90540],{"alt":31,"src":90541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90543,90452],{},[19,90545,90546],{},"call传递的是普通参数，而apply必须传递的是数组",[26,90548,90550],{"className":51964,"code":90549,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n    function fn(x, y) {\n      console.log(this)\n      console.log(x + y)\n    }\n    \u002F\u002F fn.apply(this指向谁, 数组参数)\n    fn.apply(obj, [1, 2])\n    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n\n    \u002F\u002F 使用场景：求数组最大值\n    \u002F\u002F const max = Math.max(1, 2, 3)\n    \u002F\u002F console.log(max)   \u002F\u002F3\n    \u002F\u002F 指向空或者Math都是可以的\n    const arr = [100, 44, 77]\n    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n    const max = Math.max.apply(Math, arr)\n    const min = Math.min.apply(Math, arr)\n    console.log(max, min)     \u002F\u002F100,4\n\n    \u002F\u002F 求最大值的另一种方式:展开运算符\n    console.log(Max.max(...arr))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,90551,90552,90562,90576,90580,90588,90602,90622,90634,90642,90646,90654,90662,90672,90679,90683,90688,90704,90716,90730,90734,90739,90758,90763,90767,90772,90777,90785,90790,90812,90817,90833,90849,90861,90865,90870,90889,90897,90905,90909],{"__ignoreMap":31},[36,90553,90554,90556,90558,90560],{"class":38,"line":39},[36,90555,52628],{"class":50},[36,90557,52632],{"class":52631},[36,90559,52635],{"class":46},[36,90561,52638],{"class":50},[36,90563,90564,90566,90568,90570,90572,90574],{"class":38,"line":54},[36,90565,2577],{"class":50},[36,90567,51966],{"class":52631},[36,90569,52647],{"class":46},[36,90571,70],{"class":50},[36,90573,52652],{"class":110},[36,90575,52638],{"class":50},[36,90577,90578],{"class":38,"line":61},[36,90579,58],{"emptyLinePlaceholder":57},[36,90581,90582,90584,90586],{"class":38,"line":80},[36,90583,2577],{"class":50},[36,90585,52665],{"class":52631},[36,90587,52638],{"class":50},[36,90589,90590,90592,90594,90596,90598,90600],{"class":38,"line":96},[36,90591,53475],{"class":50},[36,90593,52675],{"class":52631},[36,90595,52678],{"class":46},[36,90597,70],{"class":50},[36,90599,52683],{"class":110},[36,90601,52638],{"class":50},[36,90603,90604,90606,90608,90610,90612,90614,90616,90618,90620],{"class":38,"line":101},[36,90605,53475],{"class":50},[36,90607,52675],{"class":52631},[36,90609,16249],{"class":46},[36,90611,70],{"class":50},[36,90613,52722],{"class":110},[36,90615,52702],{"class":46},[36,90617,70],{"class":50},[36,90619,52729],{"class":110},[36,90621,52638],{"class":50},[36,90623,90624,90626,90628,90630,90632],{"class":38,"line":128},[36,90625,53475],{"class":50},[36,90627,52738],{"class":52631},[36,90629,52741],{"class":50},[36,90631,52738],{"class":52631},[36,90633,52638],{"class":50},[36,90635,90636,90638,90640],{"class":38,"line":149},[36,90637,53116],{"class":50},[36,90639,52665],{"class":52631},[36,90641,52638],{"class":50},[36,90643,90644],{"class":38,"line":154},[36,90645,58],{"emptyLinePlaceholder":57},[36,90647,90648,90650,90652],{"class":38,"line":167},[36,90649,2577],{"class":50},[36,90651,53131],{"class":52631},[36,90653,52638],{"class":50},[36,90655,90656,90658,90660],{"class":38,"line":172},[36,90657,53475],{"class":50},[36,90659,53144],{"class":52631},[36,90661,52638],{"class":50},[36,90663,90664,90666,90668,90670],{"class":38,"line":192},[36,90665,1498],{"class":42},[36,90667,71302],{"class":73},[36,90669,14893],{"class":42},[36,90671,16901],{"class":50},[36,90673,90674,90676],{"class":38,"line":211},[36,90675,72957],{"class":50},[36,90677,90678],{"class":73},"18\n",[36,90680,90681],{"class":38,"line":216},[36,90682,3693],{"class":50},[36,90684,90685],{"class":38,"line":231},[36,90686,90687],{"class":124},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[36,90689,90690,90692,90694,90696,90698,90700,90702],{"class":38,"line":236},[36,90691,71415],{"class":42},[36,90693,90181],{"class":46},[36,90695,222],{"class":50},[36,90697,2487],{"class":473},[36,90699,477],{"class":50},[36,90701,2512],{"class":473},[36,90703,485],{"class":50},[36,90705,90706,90708,90710,90712,90714],{"class":38,"line":247},[36,90707,59575],{"class":50},[36,90709,59578],{"class":46},[36,90711,222],{"class":50},[36,90713,88324],{"class":73},[36,90715,1680],{"class":50},[36,90717,90718,90720,90722,90725,90727],{"class":38,"line":637},[36,90719,59575],{"class":50},[36,90721,59578],{"class":46},[36,90723,90724],{"class":50},"(x ",[36,90726,2148],{"class":42},[36,90728,90729],{"class":50}," y)\n",[36,90731,90732],{"class":38,"line":646},[36,90733,3693],{"class":50},[36,90735,90736],{"class":38,"line":655},[36,90737,90738],{"class":124},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[36,90740,90741,90744,90747,90750,90752,90754,90756],{"class":38,"line":660},[36,90742,90743],{"class":50},"    fn.",[36,90745,90746],{"class":46},"apply",[36,90748,90749],{"class":50},"(obj, [",[36,90751,1885],{"class":73},[36,90753,477],{"class":50},[36,90755,1747],{"class":73},[36,90757,6146],{"class":50},[36,90759,90760],{"class":38,"line":665},[36,90761,90762],{"class":124},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[36,90764,90765],{"class":38,"line":674},[36,90766,58],{"emptyLinePlaceholder":57},[36,90768,90769],{"class":38,"line":679},[36,90770,90771],{"class":124},"    \u002F\u002F 使用场景：求数组最大值\n",[36,90773,90774],{"class":38,"line":692},[36,90775,90776],{"class":124},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[36,90778,90779,90782],{"class":38,"line":705},[36,90780,90781],{"class":124},"    \u002F\u002F console.log(max)",[36,90783,90784],{"class":124},"   \u002F\u002F3\n",[36,90786,90787],{"class":38,"line":710},[36,90788,90789],{"class":124},"    \u002F\u002F 指向空或者Math都是可以的\n",[36,90791,90792,90794,90796,90798,90800,90802,90804,90806,90808,90810],{"class":38,"line":722},[36,90793,1498],{"class":42},[36,90795,59026],{"class":73},[36,90797,14893],{"class":42},[36,90799,53557],{"class":50},[36,90801,1979],{"class":73},[36,90803,477],{"class":50},[36,90805,2171],{"class":73},[36,90807,477],{"class":50},[36,90809,2202],{"class":73},[36,90811,34577],{"class":50},[36,90813,90814],{"class":38,"line":750},[36,90815,90816],{"class":124},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[36,90818,90819,90821,90823,90825,90828,90830],{"class":38,"line":755},[36,90820,1498],{"class":42},[36,90822,7433],{"class":73},[36,90824,14893],{"class":42},[36,90826,90827],{"class":50}," Math.max.",[36,90829,90746],{"class":46},[36,90831,90832],{"class":50},"(Math, arr)\n",[36,90834,90835,90837,90840,90842,90845,90847],{"class":38,"line":777},[36,90836,1498],{"class":42},[36,90838,90839],{"class":73}," min",[36,90841,14893],{"class":42},[36,90843,90844],{"class":50}," Math.min.",[36,90846,90746],{"class":46},[36,90848,90832],{"class":50},[36,90850,90851,90853,90855,90858],{"class":38,"line":802},[36,90852,75084],{"class":50},[36,90854,59578],{"class":46},[36,90856,90857],{"class":50},"(max, min)     ",[36,90859,90860],{"class":124},"\u002F\u002F100,4\n",[36,90862,90863],{"class":38,"line":807},[36,90864,58],{"emptyLinePlaceholder":57},[36,90866,90867],{"class":38,"line":818},[36,90868,90869],{"class":124},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[36,90871,90872,90874,90876,90879,90881,90883,90886],{"class":38,"line":843},[36,90873,75084],{"class":50},[36,90875,59578],{"class":46},[36,90877,90878],{"class":50},"(Max.",[36,90880,7497],{"class":46},[36,90882,222],{"class":50},[36,90884,90885],{"class":42},"...",[36,90887,90888],{"class":50},"arr))\n",[36,90890,90891,90893,90895],{"class":38,"line":848},[36,90892,53748],{"class":50},[36,90894,53144],{"class":52631},[36,90896,52638],{"class":50},[36,90898,90899,90901,90903],{"class":38,"line":859},[36,90900,53116],{"class":50},[36,90902,53131],{"class":52631},[36,90904,52638],{"class":50},[36,90906,90907],{"class":38,"line":864},[36,90908,58],{"emptyLinePlaceholder":57},[36,90910,90911,90913,90915],{"class":38,"line":873},[36,90912,53116],{"class":50},[36,90914,51966],{"class":52631},[36,90916,52638],{"class":50},[19,90918,90919],{},[2992,90920],{"alt":31,"src":90921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[256,90923,90924],{"start":61},[259,90925,90926],{},"bind()",[19,90928,90929],{},[2992,90930],{"alt":31,"src":90931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90933,90934],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90936,90937],{},"bind的语法跟call很相似",[26,90939,90941],{"className":54398,"code":90940,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    const obj = {\n      age: 18\n    }\n    function fn() {\n      console.log(this)\n    }\n    \u002F\u002F 1.bind 不会调用函数\n    \u002F\u002F 2.bind能改变this的指向\n    fn.bind()\n    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n    const fun = fn.bind(obj)\n    \u002F\u002F console.log(fun)\n    \u002F\u002F 调用,查看this的指向\n    fun()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,90942,90943,90951,90959,90963,90968,90972,90976,90981,90985,90990,90995,91000,91005,91010,91015,91020,91024,91032],{"__ignoreMap":31},[36,90944,90945,90947,90949],{"class":38,"line":39},[36,90946,2577],{"class":50},[36,90948,53131],{"class":52631},[36,90950,52638],{"class":50},[36,90952,90953,90955,90957],{"class":38,"line":54},[36,90954,53475],{"class":50},[36,90956,53144],{"class":52631},[36,90958,52638],{"class":50},[36,90960,90961],{"class":38,"line":61},[36,90962,72854],{"class":50},[36,90964,90965],{"class":38,"line":80},[36,90966,90967],{"class":50},"      age: 18\n",[36,90969,90970],{"class":38,"line":96},[36,90971,3693],{"class":50},[36,90973,90974],{"class":38,"line":101},[36,90975,78474],{"class":50},[36,90977,90978],{"class":38,"line":128},[36,90979,90980],{"class":50},"      console.log(this)\n",[36,90982,90983],{"class":38,"line":149},[36,90984,3693],{"class":50},[36,90986,90987],{"class":38,"line":154},[36,90988,90989],{"class":50},"    \u002F\u002F 1.bind 不会调用函数\n",[36,90991,90992],{"class":38,"line":167},[36,90993,90994],{"class":50},"    \u002F\u002F 2.bind能改变this的指向\n",[36,90996,90997],{"class":38,"line":172},[36,90998,90999],{"class":50},"    fn.bind()\n",[36,91001,91002],{"class":38,"line":192},[36,91003,91004],{"class":50},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[36,91006,91007],{"class":38,"line":211},[36,91008,91009],{"class":50},"    const fun = fn.bind(obj)\n",[36,91011,91012],{"class":38,"line":216},[36,91013,91014],{"class":50},"    \u002F\u002F console.log(fun)\n",[36,91016,91017],{"class":38,"line":231},[36,91018,91019],{"class":50},"    \u002F\u002F 调用,查看this的指向\n",[36,91021,91022],{"class":38,"line":236},[36,91023,53982],{"class":50},[36,91025,91026,91028,91030],{"class":38,"line":247},[36,91027,53748],{"class":50},[36,91029,53144],{"class":52631},[36,91031,52638],{"class":50},[36,91033,91034,91036,91038],{"class":38,"line":637},[36,91035,53116],{"class":50},[36,91037,53131],{"class":52631},[36,91039,52638],{"class":50},[19,91041,91042],{},[2992,91043],{"alt":31,"src":91044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[256,91046,91047],{"start":80},[259,91048,91049],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,91051,91053],{"className":54398,"code":91052,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cbutton>禁用\u003C\u002Fbutton>\n  \u003Cscript>\n    const btn = document.querySelector('button')\n    btn.addEventListener('click', function () {\n      this.disabled = true\n      \u002F\u002F 定时器是window进行调用的\n      setTimeout(function () {\n        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n        this.disabled = false\n      }.bind(this), 2000)\n      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n    })\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,91054,91055,91063,91076,91084,91089,91093,91098,91103,91108,91113,91118,91123,91128,91133,91137,91145],{"__ignoreMap":31},[36,91056,91057,91059,91061],{"class":38,"line":39},[36,91058,2577],{"class":50},[36,91060,53131],{"class":52631},[36,91062,52638],{"class":50},[36,91064,91065,91067,91069,91072,91074],{"class":38,"line":54},[36,91066,53475],{"class":50},[36,91068,55218],{"class":52631},[36,91070,91071],{"class":50},">禁用\u003C\u002F",[36,91073,55218],{"class":52631},[36,91075,52638],{"class":50},[36,91077,91078,91080,91082],{"class":38,"line":61},[36,91079,53475],{"class":50},[36,91081,53144],{"class":52631},[36,91083,52638],{"class":50},[36,91085,91086],{"class":38,"line":80},[36,91087,91088],{"class":50},"    const btn = document.querySelector('button')\n",[36,91090,91091],{"class":38,"line":96},[36,91092,60347],{"class":50},[36,91094,91095],{"class":38,"line":101},[36,91096,91097],{"class":50},"      this.disabled = true\n",[36,91099,91100],{"class":38,"line":128},[36,91101,91102],{"class":50},"      \u002F\u002F 定时器是window进行调用的\n",[36,91104,91105],{"class":38,"line":149},[36,91106,91107],{"class":50},"      setTimeout(function () {\n",[36,91109,91110],{"class":38,"line":154},[36,91111,91112],{"class":50},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[36,91114,91115],{"class":38,"line":167},[36,91116,91117],{"class":50},"        this.disabled = false\n",[36,91119,91120],{"class":38,"line":172},[36,91121,91122],{"class":50},"      }.bind(this), 2000)\n",[36,91124,91125],{"class":38,"line":192},[36,91126,91127],{"class":50},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[36,91129,91130],{"class":38,"line":211},[36,91131,91132],{"class":50},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[36,91134,91135],{"class":38,"line":216},[36,91136,34792],{"class":50},[36,91138,91139,91141,91143],{"class":38,"line":231},[36,91140,53748],{"class":50},[36,91142,53144],{"class":52631},[36,91144,52638],{"class":50},[36,91146,91147,91149,91151],{"class":38,"line":236},[36,91148,53116],{"class":50},[36,91150,53131],{"class":52631},[36,91152,52638],{"class":50},[256,91154,91155],{"start":96},[259,91156,23282],{},[19,91158,91159],{},[2992,91160],{"alt":31,"src":91161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91163,91165],{"id":91164},"_417-性能优化","4.17 性能优化",[1645,91167,91169],{"id":91168},"_4171-防抖","4.17.1 防抖",[19,91171,91172],{},[2992,91173],{"alt":31,"src":91174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91176,91177],{},[887,91178,91179],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91181,91182],{},"防抖实现方式：",[2674,91184,91185],{},[259,91186,91187],{},"lodash 提供了防抖处理",[19,91189,91190],{},"_.debounce(func,[wait=0],[options={}])",[19,91192,91193],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,91195,91197],{"className":51964,"code":91196,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n    box.addEventListener('mousemove', _.debounce(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,91198,91199,91209,91223,91227,91235,91249,91269,91281,91289,91295,91305,91317,91329,91340,91352,91362,91372,91385,91389,91397,91405,91409,91417,91435,91453,91461,91480,91490,91499,91510,91515,91519,91524,91529,91534,91559,91567,91575,91579],{"__ignoreMap":31},[36,91200,91201,91203,91205,91207],{"class":38,"line":39},[36,91202,52628],{"class":50},[36,91204,52632],{"class":52631},[36,91206,52635],{"class":46},[36,91208,52638],{"class":50},[36,91210,91211,91213,91215,91217,91219,91221],{"class":38,"line":54},[36,91212,2577],{"class":50},[36,91214,51966],{"class":52631},[36,91216,52647],{"class":46},[36,91218,70],{"class":50},[36,91220,52652],{"class":110},[36,91222,52638],{"class":50},[36,91224,91225],{"class":38,"line":61},[36,91226,58],{"emptyLinePlaceholder":57},[36,91228,91229,91231,91233],{"class":38,"line":80},[36,91230,2577],{"class":50},[36,91232,52665],{"class":52631},[36,91234,52638],{"class":50},[36,91236,91237,91239,91241,91243,91245,91247],{"class":38,"line":96},[36,91238,53475],{"class":50},[36,91240,52675],{"class":52631},[36,91242,52678],{"class":46},[36,91244,70],{"class":50},[36,91246,52683],{"class":110},[36,91248,52638],{"class":50},[36,91250,91251,91253,91255,91257,91259,91261,91263,91265,91267],{"class":38,"line":101},[36,91252,53475],{"class":50},[36,91254,52675],{"class":52631},[36,91256,16249],{"class":46},[36,91258,70],{"class":50},[36,91260,52722],{"class":110},[36,91262,52702],{"class":46},[36,91264,70],{"class":50},[36,91266,52729],{"class":110},[36,91268,52638],{"class":50},[36,91270,91271,91273,91275,91277,91279],{"class":38,"line":128},[36,91272,53475],{"class":50},[36,91274,52738],{"class":52631},[36,91276,52741],{"class":50},[36,91278,52738],{"class":52631},[36,91280,52638],{"class":50},[36,91282,91283,91285,91287],{"class":38,"line":149},[36,91284,53475],{"class":50},[36,91286,1592],{"class":52631},[36,91288,52638],{"class":50},[36,91290,91291,91293],{"class":38,"line":154},[36,91292,56083],{"class":46},[36,91294,16901],{"class":50},[36,91296,91297,91299,91301,91303],{"class":38,"line":167},[36,91298,73927],{"class":73},[36,91300,52768],{"class":50},[36,91302,61836],{"class":73},[36,91304,77],{"class":50},[36,91306,91307,91309,91311,91313,91315],{"class":38,"line":172},[36,91308,56102],{"class":73},[36,91310,52768],{"class":50},[36,91312,3240],{"class":73},[36,91314,52823],{"class":42},[36,91316,77],{"class":50},[36,91318,91319,91321,91323,91325,91327],{"class":38,"line":192},[36,91320,56116],{"class":73},[36,91322,52768],{"class":50},[36,91324,3240],{"class":73},[36,91326,52823],{"class":42},[36,91328,77],{"class":50},[36,91330,91331,91333,91335,91338],{"class":38,"line":211},[36,91332,56215],{"class":73},[36,91334,52768],{"class":50},[36,91336,91337],{"class":73},"gray",[36,91339,77],{"class":50},[36,91341,91342,91344,91346,91348,91350],{"class":38,"line":216},[36,91343,56253],{"class":73},[36,91345,52768],{"class":50},[36,91347,2492],{"class":73},[36,91349,52823],{"class":42},[36,91351,77],{"class":50},[36,91353,91354,91356,91358,91360],{"class":38,"line":231},[36,91355,58747],{"class":73},[36,91357,52768],{"class":50},[36,91359,62173],{"class":73},[36,91361,77],{"class":50},[36,91363,91364,91366,91368,91370],{"class":38,"line":236},[36,91365,58617],{"class":73},[36,91367,52768],{"class":50},[36,91369,52923],{"class":73},[36,91371,77],{"class":50},[36,91373,91374,91377,91379,91381,91383],{"class":38,"line":247},[36,91375,91376],{"class":73},"      padding-top",[36,91378,52768],{"class":50},[36,91380,1987],{"class":73},[36,91382,52823],{"class":42},[36,91384,77],{"class":50},[36,91386,91387],{"class":38,"line":637},[36,91388,3693],{"class":50},[36,91390,91391,91393,91395],{"class":38,"line":646},[36,91392,53748],{"class":50},[36,91394,1592],{"class":52631},[36,91396,52638],{"class":50},[36,91398,91399,91401,91403],{"class":38,"line":655},[36,91400,53116],{"class":50},[36,91402,52665],{"class":52631},[36,91404,52638],{"class":50},[36,91406,91407],{"class":38,"line":660},[36,91408,58],{"emptyLinePlaceholder":57},[36,91410,91411,91413,91415],{"class":38,"line":665},[36,91412,2577],{"class":50},[36,91414,53131],{"class":52631},[36,91416,52638],{"class":50},[36,91418,91419,91421,91423,91425,91427,91429,91431,91433],{"class":38,"line":674},[36,91420,53475],{"class":50},[36,91422,52942],{"class":52631},[36,91424,54817],{"class":46},[36,91426,70],{"class":50},[36,91428,54822],{"class":110},[36,91430,56645],{"class":50},[36,91432,52942],{"class":52631},[36,91434,52638],{"class":50},[36,91436,91437,91439,91441,91443,91445,91447,91449,91451],{"class":38,"line":679},[36,91438,53475],{"class":50},[36,91440,53144],{"class":52631},[36,91442,56570],{"class":46},[36,91444,70],{"class":50},[36,91446,89605],{"class":110},[36,91448,56645],{"class":50},[36,91450,53144],{"class":52631},[36,91452,52638],{"class":50},[36,91454,91455,91457,91459],{"class":38,"line":692},[36,91456,53475],{"class":50},[36,91458,53144],{"class":52631},[36,91460,52638],{"class":50},[36,91462,91463,91465,91467,91469,91471,91473,91475,91478],{"class":38,"line":705},[36,91464,1498],{"class":42},[36,91466,88264],{"class":73},[36,91468,14893],{"class":42},[36,91470,55727],{"class":50},[36,91472,55730],{"class":46},[36,91474,222],{"class":50},[36,91476,91477],{"class":110},"'.box'",[36,91479,1680],{"class":50},[36,91481,91482,91484,91486,91488],{"class":38,"line":710},[36,91483,53550],{"class":42},[36,91485,10906],{"class":50},[36,91487,70],{"class":42},[36,91489,48664],{"class":73},[36,91491,91492,91494,91497],{"class":38,"line":722},[36,91493,71415],{"class":42},[36,91495,91496],{"class":46}," mouseMove",[36,91498,51],{"class":50},[36,91500,91501,91504,91506,91508],{"class":38,"line":750},[36,91502,91503],{"class":50},"      box.innerHTML ",[36,91505,70],{"class":42},[36,91507,4523],{"class":50},[36,91509,4197],{"class":42},[36,91511,91512],{"class":38,"line":755},[36,91513,91514],{"class":124},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[36,91516,91517],{"class":38,"line":777},[36,91518,3693],{"class":50},[36,91520,91521],{"class":38,"line":802},[36,91522,91523],{"class":124},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[36,91525,91526],{"class":38,"line":807},[36,91527,91528],{"class":124},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[36,91530,91531],{"class":38,"line":818},[36,91532,91533],{"class":124},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[36,91535,91536,91539,91541,91543,91546,91549,91552,91555,91557],{"class":38,"line":843},[36,91537,91538],{"class":50},"    box.",[36,91540,59144],{"class":46},[36,91542,222],{"class":50},[36,91544,91545],{"class":110},"'mousemove'",[36,91547,91548],{"class":50},", _.",[36,91550,91551],{"class":46},"debounce",[36,91553,91554],{"class":50},"(mouseMove, ",[36,91556,66405],{"class":73},[36,91558,31828],{"class":50},[36,91560,91561,91563,91565],{"class":38,"line":848},[36,91562,53748],{"class":50},[36,91564,53144],{"class":52631},[36,91566,52638],{"class":50},[36,91568,91569,91571,91573],{"class":38,"line":859},[36,91570,53116],{"class":50},[36,91572,53131],{"class":52631},[36,91574,52638],{"class":50},[36,91576,91577],{"class":38,"line":864},[36,91578,58],{"emptyLinePlaceholder":57},[36,91580,91581,91583,91585],{"class":38,"line":873},[36,91582,53116],{"class":50},[36,91584,51966],{"class":52631},[36,91586,52638],{"class":50},[2674,91588,91589],{},[259,91590,91591],{},"手写一个防抖函数来处理",[19,91593,91594],{},"防抖的核心就是利用定时器来实现的：",[19,91596,91597],{},"①声明一个定时器变量",[19,91599,91600],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91602,91603],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,91605,91607],{"className":51964,"code":91606,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写防抖函数\n    \u002F\u002F 核心是利用延时器setTimeout来实现的\n    \u002F\u002F 1.声明定时器变量\n    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n    \u002F\u002F 4.定时器里面写函数调用\n    function debounce(fn, t) {\n      let timer\n      \u002F\u002F return 返回一个匿名函数\n      return function () {\n        \u002F\u002F 这里边写第二三四步\n        if (timer) clearTimeout(timer)\n        timer = setTimeout(function () {\n          fn() \u002F\u002F加小括号调用fn }, t)\n        }, t)\n      }\n    }\n    box.addEventListener('mousemove', debounce(mouseMove, 500))\n\n    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,91608,91609,91619,91633,91637,91645,91659,91679,91691,91699,91705,91715,91727,91739,91749,91761,91771,91781,91793,91797,91805,91813,91817,91825,91843,91861,91869,91887,91897,91905,91915,91919,91923,91927,91932,91937,91942,91947,91952,91957,91975,91982,91987,91995,92000,92013,92029,92039,92044,92048,92052,92072,92076,92081,92086,92091,92096,92104,92112,92116],{"__ignoreMap":31},[36,91610,91611,91613,91615,91617],{"class":38,"line":39},[36,91612,52628],{"class":50},[36,91614,52632],{"class":52631},[36,91616,52635],{"class":46},[36,91618,52638],{"class":50},[36,91620,91621,91623,91625,91627,91629,91631],{"class":38,"line":54},[36,91622,2577],{"class":50},[36,91624,51966],{"class":52631},[36,91626,52647],{"class":46},[36,91628,70],{"class":50},[36,91630,52652],{"class":110},[36,91632,52638],{"class":50},[36,91634,91635],{"class":38,"line":61},[36,91636,58],{"emptyLinePlaceholder":57},[36,91638,91639,91641,91643],{"class":38,"line":80},[36,91640,2577],{"class":50},[36,91642,52665],{"class":52631},[36,91644,52638],{"class":50},[36,91646,91647,91649,91651,91653,91655,91657],{"class":38,"line":96},[36,91648,53475],{"class":50},[36,91650,52675],{"class":52631},[36,91652,52678],{"class":46},[36,91654,70],{"class":50},[36,91656,52683],{"class":110},[36,91658,52638],{"class":50},[36,91660,91661,91663,91665,91667,91669,91671,91673,91675,91677],{"class":38,"line":101},[36,91662,53475],{"class":50},[36,91664,52675],{"class":52631},[36,91666,16249],{"class":46},[36,91668,70],{"class":50},[36,91670,52722],{"class":110},[36,91672,52702],{"class":46},[36,91674,70],{"class":50},[36,91676,52729],{"class":110},[36,91678,52638],{"class":50},[36,91680,91681,91683,91685,91687,91689],{"class":38,"line":128},[36,91682,53475],{"class":50},[36,91684,52738],{"class":52631},[36,91686,52741],{"class":50},[36,91688,52738],{"class":52631},[36,91690,52638],{"class":50},[36,91692,91693,91695,91697],{"class":38,"line":149},[36,91694,53475],{"class":50},[36,91696,1592],{"class":52631},[36,91698,52638],{"class":50},[36,91700,91701,91703],{"class":38,"line":154},[36,91702,56083],{"class":46},[36,91704,16901],{"class":50},[36,91706,91707,91709,91711,91713],{"class":38,"line":167},[36,91708,73927],{"class":73},[36,91710,52768],{"class":50},[36,91712,61836],{"class":73},[36,91714,77],{"class":50},[36,91716,91717,91719,91721,91723,91725],{"class":38,"line":172},[36,91718,56102],{"class":73},[36,91720,52768],{"class":50},[36,91722,3240],{"class":73},[36,91724,52823],{"class":42},[36,91726,77],{"class":50},[36,91728,91729,91731,91733,91735,91737],{"class":38,"line":192},[36,91730,56116],{"class":73},[36,91732,52768],{"class":50},[36,91734,3240],{"class":73},[36,91736,52823],{"class":42},[36,91738,77],{"class":50},[36,91740,91741,91743,91745,91747],{"class":38,"line":211},[36,91742,56215],{"class":73},[36,91744,52768],{"class":50},[36,91746,91337],{"class":73},[36,91748,77],{"class":50},[36,91750,91751,91753,91755,91757,91759],{"class":38,"line":216},[36,91752,56253],{"class":73},[36,91754,52768],{"class":50},[36,91756,2492],{"class":73},[36,91758,52823],{"class":42},[36,91760,77],{"class":50},[36,91762,91763,91765,91767,91769],{"class":38,"line":231},[36,91764,58747],{"class":73},[36,91766,52768],{"class":50},[36,91768,62173],{"class":73},[36,91770,77],{"class":50},[36,91772,91773,91775,91777,91779],{"class":38,"line":236},[36,91774,58617],{"class":73},[36,91776,52768],{"class":50},[36,91778,52923],{"class":73},[36,91780,77],{"class":50},[36,91782,91783,91785,91787,91789,91791],{"class":38,"line":247},[36,91784,91376],{"class":73},[36,91786,52768],{"class":50},[36,91788,1987],{"class":73},[36,91790,52823],{"class":42},[36,91792,77],{"class":50},[36,91794,91795],{"class":38,"line":637},[36,91796,3693],{"class":50},[36,91798,91799,91801,91803],{"class":38,"line":646},[36,91800,53748],{"class":50},[36,91802,1592],{"class":52631},[36,91804,52638],{"class":50},[36,91806,91807,91809,91811],{"class":38,"line":655},[36,91808,53116],{"class":50},[36,91810,52665],{"class":52631},[36,91812,52638],{"class":50},[36,91814,91815],{"class":38,"line":660},[36,91816,58],{"emptyLinePlaceholder":57},[36,91818,91819,91821,91823],{"class":38,"line":665},[36,91820,2577],{"class":50},[36,91822,53131],{"class":52631},[36,91824,52638],{"class":50},[36,91826,91827,91829,91831,91833,91835,91837,91839,91841],{"class":38,"line":674},[36,91828,53475],{"class":50},[36,91830,52942],{"class":52631},[36,91832,54817],{"class":46},[36,91834,70],{"class":50},[36,91836,54822],{"class":110},[36,91838,56645],{"class":50},[36,91840,52942],{"class":52631},[36,91842,52638],{"class":50},[36,91844,91845,91847,91849,91851,91853,91855,91857,91859],{"class":38,"line":679},[36,91846,53475],{"class":50},[36,91848,53144],{"class":52631},[36,91850,56570],{"class":46},[36,91852,70],{"class":50},[36,91854,89605],{"class":110},[36,91856,56645],{"class":50},[36,91858,53144],{"class":52631},[36,91860,52638],{"class":50},[36,91862,91863,91865,91867],{"class":38,"line":692},[36,91864,53475],{"class":50},[36,91866,53144],{"class":52631},[36,91868,52638],{"class":50},[36,91870,91871,91873,91875,91877,91879,91881,91883,91885],{"class":38,"line":705},[36,91872,1498],{"class":42},[36,91874,88264],{"class":73},[36,91876,14893],{"class":42},[36,91878,55727],{"class":50},[36,91880,55730],{"class":46},[36,91882,222],{"class":50},[36,91884,91477],{"class":110},[36,91886,1680],{"class":50},[36,91888,91889,91891,91893,91895],{"class":38,"line":710},[36,91890,53550],{"class":42},[36,91892,10906],{"class":50},[36,91894,70],{"class":42},[36,91896,48664],{"class":73},[36,91898,91899,91901,91903],{"class":38,"line":722},[36,91900,71415],{"class":42},[36,91902,91496],{"class":46},[36,91904,51],{"class":50},[36,91906,91907,91909,91911,91913],{"class":38,"line":750},[36,91908,91503],{"class":50},[36,91910,70],{"class":42},[36,91912,4523],{"class":50},[36,91914,4197],{"class":42},[36,91916,91917],{"class":38,"line":755},[36,91918,91514],{"class":124},[36,91920,91921],{"class":38,"line":777},[36,91922,3693],{"class":50},[36,91924,91925],{"class":38,"line":802},[36,91926,91523],{"class":124},[36,91928,91929],{"class":38,"line":807},[36,91930,91931],{"class":124},"    \u002F\u002F 手写防抖函数\n",[36,91933,91934],{"class":38,"line":818},[36,91935,91936],{"class":124},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[36,91938,91939],{"class":38,"line":843},[36,91940,91941],{"class":124},"    \u002F\u002F 1.声明定时器变量\n",[36,91943,91944],{"class":38,"line":848},[36,91945,91946],{"class":124},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[36,91948,91949],{"class":38,"line":859},[36,91950,91951],{"class":124},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[36,91953,91954],{"class":38,"line":864},[36,91955,91956],{"class":124},"    \u002F\u002F 4.定时器里面写函数调用\n",[36,91958,91959,91961,91964,91966,91969,91971,91973],{"class":38,"line":873},[36,91960,71415],{"class":42},[36,91962,91963],{"class":46}," debounce",[36,91965,222],{"class":50},[36,91967,91968],{"class":473},"fn",[36,91970,477],{"class":50},[36,91972,2387],{"class":473},[36,91974,485],{"class":50},[36,91976,91977,91979],{"class":38,"line":9454},[36,91978,81103],{"class":42},[36,91980,91981],{"class":50}," timer\n",[36,91983,91984],{"class":38,"line":9481},[36,91985,91986],{"class":124},"      \u002F\u002F return 返回一个匿名函数\n",[36,91988,91989,91991,91993],{"class":38,"line":9486},[36,91990,75313],{"class":42},[36,91992,60249],{"class":42},[36,91994,55783],{"class":50},[36,91996,91997],{"class":38,"line":9492},[36,91998,91999],{"class":124},"        \u002F\u002F 这里边写第二三四步\n",[36,92001,92002,92004,92007,92010],{"class":38,"line":9504},[36,92003,3999],{"class":42},[36,92005,92006],{"class":50}," (timer) ",[36,92008,92009],{"class":46},"clearTimeout",[36,92011,92012],{"class":50},"(timer)\n",[36,92014,92015,92018,92020,92023,92025,92027],{"class":38,"line":9516},[36,92016,92017],{"class":50},"        timer ",[36,92019,70],{"class":42},[36,92021,92022],{"class":46}," setTimeout",[36,92024,222],{"class":50},[36,92026,55780],{"class":42},[36,92028,55783],{"class":50},[36,92030,92031,92034,92036],{"class":38,"line":9528},[36,92032,92033],{"class":46},"          fn",[36,92035,1133],{"class":50},[36,92037,92038],{"class":124},"\u002F\u002F加小括号调用fn }, t)\n",[36,92040,92041],{"class":38,"line":11184},[36,92042,92043],{"class":50},"        }, t)\n",[36,92045,92046],{"class":38,"line":11209},[36,92047,53729],{"class":50},[36,92049,92050],{"class":38,"line":11232},[36,92051,3693],{"class":50},[36,92053,92054,92056,92058,92060,92062,92064,92066,92068,92070],{"class":38,"line":11256},[36,92055,91538],{"class":50},[36,92057,59144],{"class":46},[36,92059,222],{"class":50},[36,92061,91545],{"class":110},[36,92063,477],{"class":50},[36,92065,91551],{"class":46},[36,92067,91554],{"class":50},[36,92069,66405],{"class":73},[36,92071,31828],{"class":50},[36,92073,92074],{"class":38,"line":11261},[36,92075,58],{"emptyLinePlaceholder":57},[36,92077,92078],{"class":38,"line":11266},[36,92079,92080],{"class":124},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[36,92082,92083],{"class":38,"line":11271},[36,92084,92085],{"class":124},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[36,92087,92088],{"class":38,"line":11280},[36,92089,92090],{"class":124},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[36,92092,92093],{"class":38,"line":11285},[36,92094,92095],{"class":124},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[36,92097,92098,92100,92102],{"class":38,"line":11291},[36,92099,53748],{"class":50},[36,92101,53144],{"class":52631},[36,92103,52638],{"class":50},[36,92105,92106,92108,92110],{"class":38,"line":11312},[36,92107,53116],{"class":50},[36,92109,53131],{"class":52631},[36,92111,52638],{"class":50},[36,92113,92114],{"class":38,"line":11318},[36,92115,58],{"emptyLinePlaceholder":57},[36,92117,92118,92120,92122],{"class":38,"line":11332},[36,92119,53116],{"class":50},[36,92121,51966],{"class":52631},[36,92123,52638],{"class":50},[1645,92125,92127],{"id":92126},"_4172-节流","4.17.2 节流",[19,92129,92130],{},[2992,92131],{"alt":31,"src":92132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92134,92135],{},[2992,92136],{"alt":31,"src":92137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92139,92140],{},[887,92141,92142],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92144,92145],{},"实现方式：",[2674,92147,92148],{},[259,92149,92150],{},"lodash 提供的节流函数来处理",[19,92152,92153],{},"_.throttle(func,[wait=0],[options=])",[19,92155,92156],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,92158,92160],{"className":51964,"code":92159,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n    \u002F\u002F 语法:_.throttle(fun,时间)\n    box.addEventListener('mousemove', _.throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,92161,92162,92172,92186,92190,92198,92212,92232,92244,92252,92258,92268,92280,92292,92302,92314,92324,92334,92346,92350,92358,92366,92370,92378,92396,92414,92422,92440,92450,92458,92468,92472,92476,92480,92485,92490,92511,92519,92527,92531],{"__ignoreMap":31},[36,92163,92164,92166,92168,92170],{"class":38,"line":39},[36,92165,52628],{"class":50},[36,92167,52632],{"class":52631},[36,92169,52635],{"class":46},[36,92171,52638],{"class":50},[36,92173,92174,92176,92178,92180,92182,92184],{"class":38,"line":54},[36,92175,2577],{"class":50},[36,92177,51966],{"class":52631},[36,92179,52647],{"class":46},[36,92181,70],{"class":50},[36,92183,52652],{"class":110},[36,92185,52638],{"class":50},[36,92187,92188],{"class":38,"line":61},[36,92189,58],{"emptyLinePlaceholder":57},[36,92191,92192,92194,92196],{"class":38,"line":80},[36,92193,2577],{"class":50},[36,92195,52665],{"class":52631},[36,92197,52638],{"class":50},[36,92199,92200,92202,92204,92206,92208,92210],{"class":38,"line":96},[36,92201,53475],{"class":50},[36,92203,52675],{"class":52631},[36,92205,52678],{"class":46},[36,92207,70],{"class":50},[36,92209,52683],{"class":110},[36,92211,52638],{"class":50},[36,92213,92214,92216,92218,92220,92222,92224,92226,92228,92230],{"class":38,"line":101},[36,92215,53475],{"class":50},[36,92217,52675],{"class":52631},[36,92219,16249],{"class":46},[36,92221,70],{"class":50},[36,92223,52722],{"class":110},[36,92225,52702],{"class":46},[36,92227,70],{"class":50},[36,92229,52729],{"class":110},[36,92231,52638],{"class":50},[36,92233,92234,92236,92238,92240,92242],{"class":38,"line":128},[36,92235,53475],{"class":50},[36,92237,52738],{"class":52631},[36,92239,52741],{"class":50},[36,92241,52738],{"class":52631},[36,92243,52638],{"class":50},[36,92245,92246,92248,92250],{"class":38,"line":149},[36,92247,53475],{"class":50},[36,92249,1592],{"class":52631},[36,92251,52638],{"class":50},[36,92253,92254,92256],{"class":38,"line":154},[36,92255,56083],{"class":46},[36,92257,16901],{"class":50},[36,92259,92260,92262,92264,92266],{"class":38,"line":167},[36,92261,73927],{"class":73},[36,92263,52768],{"class":50},[36,92265,61836],{"class":73},[36,92267,77],{"class":50},[36,92269,92270,92272,92274,92276,92278],{"class":38,"line":172},[36,92271,56102],{"class":73},[36,92273,52768],{"class":50},[36,92275,3240],{"class":73},[36,92277,52823],{"class":42},[36,92279,77],{"class":50},[36,92281,92282,92284,92286,92288,92290],{"class":38,"line":192},[36,92283,56116],{"class":73},[36,92285,52768],{"class":50},[36,92287,3240],{"class":73},[36,92289,52823],{"class":42},[36,92291,77],{"class":50},[36,92293,92294,92296,92298,92300],{"class":38,"line":211},[36,92295,56215],{"class":73},[36,92297,52768],{"class":50},[36,92299,91337],{"class":73},[36,92301,77],{"class":50},[36,92303,92304,92306,92308,92310,92312],{"class":38,"line":216},[36,92305,56253],{"class":73},[36,92307,52768],{"class":50},[36,92309,2492],{"class":73},[36,92311,52823],{"class":42},[36,92313,77],{"class":50},[36,92315,92316,92318,92320,92322],{"class":38,"line":231},[36,92317,58747],{"class":73},[36,92319,52768],{"class":50},[36,92321,62173],{"class":73},[36,92323,77],{"class":50},[36,92325,92326,92328,92330,92332],{"class":38,"line":236},[36,92327,58617],{"class":73},[36,92329,52768],{"class":50},[36,92331,52923],{"class":73},[36,92333,77],{"class":50},[36,92335,92336,92338,92340,92342,92344],{"class":38,"line":247},[36,92337,91376],{"class":73},[36,92339,52768],{"class":50},[36,92341,1987],{"class":73},[36,92343,52823],{"class":42},[36,92345,77],{"class":50},[36,92347,92348],{"class":38,"line":637},[36,92349,3693],{"class":50},[36,92351,92352,92354,92356],{"class":38,"line":646},[36,92353,53748],{"class":50},[36,92355,1592],{"class":52631},[36,92357,52638],{"class":50},[36,92359,92360,92362,92364],{"class":38,"line":655},[36,92361,53116],{"class":50},[36,92363,52665],{"class":52631},[36,92365,52638],{"class":50},[36,92367,92368],{"class":38,"line":660},[36,92369,58],{"emptyLinePlaceholder":57},[36,92371,92372,92374,92376],{"class":38,"line":665},[36,92373,2577],{"class":50},[36,92375,53131],{"class":52631},[36,92377,52638],{"class":50},[36,92379,92380,92382,92384,92386,92388,92390,92392,92394],{"class":38,"line":674},[36,92381,53475],{"class":50},[36,92383,52942],{"class":52631},[36,92385,54817],{"class":46},[36,92387,70],{"class":50},[36,92389,54822],{"class":110},[36,92391,56645],{"class":50},[36,92393,52942],{"class":52631},[36,92395,52638],{"class":50},[36,92397,92398,92400,92402,92404,92406,92408,92410,92412],{"class":38,"line":679},[36,92399,53475],{"class":50},[36,92401,53144],{"class":52631},[36,92403,56570],{"class":46},[36,92405,70],{"class":50},[36,92407,89605],{"class":110},[36,92409,56645],{"class":50},[36,92411,53144],{"class":52631},[36,92413,52638],{"class":50},[36,92415,92416,92418,92420],{"class":38,"line":692},[36,92417,53475],{"class":50},[36,92419,53144],{"class":52631},[36,92421,52638],{"class":50},[36,92423,92424,92426,92428,92430,92432,92434,92436,92438],{"class":38,"line":705},[36,92425,1498],{"class":42},[36,92427,88264],{"class":73},[36,92429,14893],{"class":42},[36,92431,55727],{"class":50},[36,92433,55730],{"class":46},[36,92435,222],{"class":50},[36,92437,91477],{"class":110},[36,92439,1680],{"class":50},[36,92441,92442,92444,92446,92448],{"class":38,"line":710},[36,92443,53550],{"class":42},[36,92445,10906],{"class":50},[36,92447,70],{"class":42},[36,92449,48664],{"class":73},[36,92451,92452,92454,92456],{"class":38,"line":722},[36,92453,71415],{"class":42},[36,92455,91496],{"class":46},[36,92457,51],{"class":50},[36,92459,92460,92462,92464,92466],{"class":38,"line":750},[36,92461,91503],{"class":50},[36,92463,70],{"class":42},[36,92465,4523],{"class":50},[36,92467,4197],{"class":42},[36,92469,92470],{"class":38,"line":755},[36,92471,91514],{"class":124},[36,92473,92474],{"class":38,"line":777},[36,92475,3693],{"class":50},[36,92477,92478],{"class":38,"line":802},[36,92479,91523],{"class":124},[36,92481,92482],{"class":38,"line":807},[36,92483,92484],{"class":124},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[36,92486,92487],{"class":38,"line":818},[36,92488,92489],{"class":124},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[36,92491,92492,92494,92496,92498,92500,92502,92505,92507,92509],{"class":38,"line":843},[36,92493,91538],{"class":50},[36,92495,59144],{"class":46},[36,92497,222],{"class":50},[36,92499,91545],{"class":110},[36,92501,91548],{"class":50},[36,92503,92504],{"class":46},"throttle",[36,92506,91554],{"class":50},[36,92508,66405],{"class":73},[36,92510,31828],{"class":50},[36,92512,92513,92515,92517],{"class":38,"line":848},[36,92514,53748],{"class":50},[36,92516,53144],{"class":52631},[36,92518,52638],{"class":50},[36,92520,92521,92523,92525],{"class":38,"line":859},[36,92522,53116],{"class":50},[36,92524,53131],{"class":52631},[36,92526,52638],{"class":50},[36,92528,92529],{"class":38,"line":864},[36,92530,58],{"emptyLinePlaceholder":57},[36,92532,92533,92535,92537],{"class":38,"line":873},[36,92534,53116],{"class":50},[36,92536,51966],{"class":52631},[36,92538,52638],{"class":50},[2674,92540,92541],{},[259,92542,92543],{},"手写一个节流函数来处理",[19,92545,72283],{},[19,92547,91597],{},[19,92549,92550],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92552,92553],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,92555,92557],{"className":51964,"code":92556,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \u003Ctitle>Document\u003C\u002Ftitle>\n  \u003Cstyle>\n    .box {\n      box-sizing: border-box;\n      width: 200px;\n      height: 200px;\n      background-color: gray;\n      font-size: 25px;\n      color: #fff;\n      text-align: center;\n      padding-top: 5px;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"box\">\u003C\u002Fdiv>\n  \u003Cscript src=\"lodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    const box = document.querySelector('.box')\n    let i = 0\n    function mouseMove() {\n      box.innerHTML = i++\n      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n    }\n    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n    \u002F\u002F 手写节流函数  每隔500ms+1\n    \u002F\u002F 1.声明一个定时器变量\n    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n    \u002F\u002F 3.1定时器里面调用执行函数\n    \u002F\u002F 3.2定时器里面要把定时器清空\n    function throttle(fn, t) {\n      let timer\n      return function () {\n        if (!timer) {\n          timer = setTimeout(function () {\n            fn()\n            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n            timer = null\n            \u002F\u002F 不能用clearTimeout(timer)\n            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n          }, t)\n        }\n      }\n    }\n    box.addEventListener('mousemove', throttle(mouseMove, 500))\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,92558,92559,92569,92583,92587,92595,92609,92629,92641,92649,92655,92665,92677,92689,92699,92711,92721,92731,92743,92747,92755,92763,92767,92775,92793,92811,92819,92837,92847,92855,92865,92869,92873,92877,92882,92887,92892,92897,92902,92907,92924,92930,92938,92949,92964,92971,92976,92981,92991,92996,93001,93006,93010,93014,93018,93038,93046,93054,93058],{"__ignoreMap":31},[36,92560,92561,92563,92565,92567],{"class":38,"line":39},[36,92562,52628],{"class":50},[36,92564,52632],{"class":52631},[36,92566,52635],{"class":46},[36,92568,52638],{"class":50},[36,92570,92571,92573,92575,92577,92579,92581],{"class":38,"line":54},[36,92572,2577],{"class":50},[36,92574,51966],{"class":52631},[36,92576,52647],{"class":46},[36,92578,70],{"class":50},[36,92580,52652],{"class":110},[36,92582,52638],{"class":50},[36,92584,92585],{"class":38,"line":61},[36,92586,58],{"emptyLinePlaceholder":57},[36,92588,92589,92591,92593],{"class":38,"line":80},[36,92590,2577],{"class":50},[36,92592,52665],{"class":52631},[36,92594,52638],{"class":50},[36,92596,92597,92599,92601,92603,92605,92607],{"class":38,"line":96},[36,92598,53475],{"class":50},[36,92600,52675],{"class":52631},[36,92602,52678],{"class":46},[36,92604,70],{"class":50},[36,92606,52683],{"class":110},[36,92608,52638],{"class":50},[36,92610,92611,92613,92615,92617,92619,92621,92623,92625,92627],{"class":38,"line":101},[36,92612,53475],{"class":50},[36,92614,52675],{"class":52631},[36,92616,16249],{"class":46},[36,92618,70],{"class":50},[36,92620,52722],{"class":110},[36,92622,52702],{"class":46},[36,92624,70],{"class":50},[36,92626,52729],{"class":110},[36,92628,52638],{"class":50},[36,92630,92631,92633,92635,92637,92639],{"class":38,"line":128},[36,92632,53475],{"class":50},[36,92634,52738],{"class":52631},[36,92636,52741],{"class":50},[36,92638,52738],{"class":52631},[36,92640,52638],{"class":50},[36,92642,92643,92645,92647],{"class":38,"line":149},[36,92644,53475],{"class":50},[36,92646,1592],{"class":52631},[36,92648,52638],{"class":50},[36,92650,92651,92653],{"class":38,"line":154},[36,92652,56083],{"class":46},[36,92654,16901],{"class":50},[36,92656,92657,92659,92661,92663],{"class":38,"line":167},[36,92658,73927],{"class":73},[36,92660,52768],{"class":50},[36,92662,61836],{"class":73},[36,92664,77],{"class":50},[36,92666,92667,92669,92671,92673,92675],{"class":38,"line":172},[36,92668,56102],{"class":73},[36,92670,52768],{"class":50},[36,92672,3240],{"class":73},[36,92674,52823],{"class":42},[36,92676,77],{"class":50},[36,92678,92679,92681,92683,92685,92687],{"class":38,"line":192},[36,92680,56116],{"class":73},[36,92682,52768],{"class":50},[36,92684,3240],{"class":73},[36,92686,52823],{"class":42},[36,92688,77],{"class":50},[36,92690,92691,92693,92695,92697],{"class":38,"line":211},[36,92692,56215],{"class":73},[36,92694,52768],{"class":50},[36,92696,91337],{"class":73},[36,92698,77],{"class":50},[36,92700,92701,92703,92705,92707,92709],{"class":38,"line":216},[36,92702,56253],{"class":73},[36,92704,52768],{"class":50},[36,92706,2492],{"class":73},[36,92708,52823],{"class":42},[36,92710,77],{"class":50},[36,92712,92713,92715,92717,92719],{"class":38,"line":231},[36,92714,58747],{"class":73},[36,92716,52768],{"class":50},[36,92718,62173],{"class":73},[36,92720,77],{"class":50},[36,92722,92723,92725,92727,92729],{"class":38,"line":236},[36,92724,58617],{"class":73},[36,92726,52768],{"class":50},[36,92728,52923],{"class":73},[36,92730,77],{"class":50},[36,92732,92733,92735,92737,92739,92741],{"class":38,"line":247},[36,92734,91376],{"class":73},[36,92736,52768],{"class":50},[36,92738,1987],{"class":73},[36,92740,52823],{"class":42},[36,92742,77],{"class":50},[36,92744,92745],{"class":38,"line":637},[36,92746,3693],{"class":50},[36,92748,92749,92751,92753],{"class":38,"line":646},[36,92750,53748],{"class":50},[36,92752,1592],{"class":52631},[36,92754,52638],{"class":50},[36,92756,92757,92759,92761],{"class":38,"line":655},[36,92758,53116],{"class":50},[36,92760,52665],{"class":52631},[36,92762,52638],{"class":50},[36,92764,92765],{"class":38,"line":660},[36,92766,58],{"emptyLinePlaceholder":57},[36,92768,92769,92771,92773],{"class":38,"line":665},[36,92770,2577],{"class":50},[36,92772,53131],{"class":52631},[36,92774,52638],{"class":50},[36,92776,92777,92779,92781,92783,92785,92787,92789,92791],{"class":38,"line":674},[36,92778,53475],{"class":50},[36,92780,52942],{"class":52631},[36,92782,54817],{"class":46},[36,92784,70],{"class":50},[36,92786,54822],{"class":110},[36,92788,56645],{"class":50},[36,92790,52942],{"class":52631},[36,92792,52638],{"class":50},[36,92794,92795,92797,92799,92801,92803,92805,92807,92809],{"class":38,"line":679},[36,92796,53475],{"class":50},[36,92798,53144],{"class":52631},[36,92800,56570],{"class":46},[36,92802,70],{"class":50},[36,92804,89605],{"class":110},[36,92806,56645],{"class":50},[36,92808,53144],{"class":52631},[36,92810,52638],{"class":50},[36,92812,92813,92815,92817],{"class":38,"line":692},[36,92814,53475],{"class":50},[36,92816,53144],{"class":52631},[36,92818,52638],{"class":50},[36,92820,92821,92823,92825,92827,92829,92831,92833,92835],{"class":38,"line":705},[36,92822,1498],{"class":42},[36,92824,88264],{"class":73},[36,92826,14893],{"class":42},[36,92828,55727],{"class":50},[36,92830,55730],{"class":46},[36,92832,222],{"class":50},[36,92834,91477],{"class":110},[36,92836,1680],{"class":50},[36,92838,92839,92841,92843,92845],{"class":38,"line":710},[36,92840,53550],{"class":42},[36,92842,10906],{"class":50},[36,92844,70],{"class":42},[36,92846,48664],{"class":73},[36,92848,92849,92851,92853],{"class":38,"line":722},[36,92850,71415],{"class":42},[36,92852,91496],{"class":46},[36,92854,51],{"class":50},[36,92856,92857,92859,92861,92863],{"class":38,"line":750},[36,92858,91503],{"class":50},[36,92860,70],{"class":42},[36,92862,4523],{"class":50},[36,92864,4197],{"class":42},[36,92866,92867],{"class":38,"line":755},[36,92868,91514],{"class":124},[36,92870,92871],{"class":38,"line":777},[36,92872,3693],{"class":50},[36,92874,92875],{"class":38,"line":802},[36,92876,91523],{"class":124},[36,92878,92879],{"class":38,"line":807},[36,92880,92881],{"class":124},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[36,92883,92884],{"class":38,"line":818},[36,92885,92886],{"class":124},"    \u002F\u002F 1.声明一个定时器变量\n",[36,92888,92889],{"class":38,"line":843},[36,92890,92891],{"class":124},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[36,92893,92894],{"class":38,"line":848},[36,92895,92896],{"class":124},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[36,92898,92899],{"class":38,"line":859},[36,92900,92901],{"class":124},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[36,92903,92904],{"class":38,"line":864},[36,92905,92906],{"class":124},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[36,92908,92909,92911,92914,92916,92918,92920,92922],{"class":38,"line":873},[36,92910,71415],{"class":42},[36,92912,92913],{"class":46}," throttle",[36,92915,222],{"class":50},[36,92917,91968],{"class":473},[36,92919,477],{"class":50},[36,92921,2387],{"class":473},[36,92923,485],{"class":50},[36,92925,92926,92928],{"class":38,"line":9454},[36,92927,81103],{"class":42},[36,92929,91981],{"class":50},[36,92931,92932,92934,92936],{"class":38,"line":9481},[36,92933,75313],{"class":42},[36,92935,60249],{"class":42},[36,92937,55783],{"class":50},[36,92939,92940,92942,92944,92946],{"class":38,"line":9486},[36,92941,3999],{"class":42},[36,92943,3180],{"class":50},[36,92945,1894],{"class":42},[36,92947,92948],{"class":50},"timer) {\n",[36,92950,92951,92954,92956,92958,92960,92962],{"class":38,"line":9492},[36,92952,92953],{"class":50},"          timer ",[36,92955,70],{"class":42},[36,92957,92022],{"class":46},[36,92959,222],{"class":50},[36,92961,55780],{"class":42},[36,92963,55783],{"class":50},[36,92965,92966,92969],{"class":38,"line":9504},[36,92967,92968],{"class":46},"            fn",[36,92970,3484],{"class":50},[36,92972,92973],{"class":38,"line":9516},[36,92974,92975],{"class":124},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[36,92977,92978],{"class":38,"line":9528},[36,92979,92980],{"class":124},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[36,92982,92983,92986,92988],{"class":38,"line":11184},[36,92984,92985],{"class":50},"            timer ",[36,92987,70],{"class":42},[36,92989,92990],{"class":73}," null\n",[36,92992,92993],{"class":38,"line":11209},[36,92994,92995],{"class":124},"            \u002F\u002F 不能用clearTimeout(timer)\n",[36,92997,92998],{"class":38,"line":11232},[36,92999,93000],{"class":124},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[36,93002,93003],{"class":38,"line":11256},[36,93004,93005],{"class":50},"          }, t)\n",[36,93007,93008],{"class":38,"line":11261},[36,93009,4031],{"class":50},[36,93011,93012],{"class":38,"line":11266},[36,93013,53729],{"class":50},[36,93015,93016],{"class":38,"line":11271},[36,93017,3693],{"class":50},[36,93019,93020,93022,93024,93026,93028,93030,93032,93034,93036],{"class":38,"line":11280},[36,93021,91538],{"class":50},[36,93023,59144],{"class":46},[36,93025,222],{"class":50},[36,93027,91545],{"class":110},[36,93029,477],{"class":50},[36,93031,92504],{"class":46},[36,93033,91554],{"class":50},[36,93035,66405],{"class":73},[36,93037,31828],{"class":50},[36,93039,93040,93042,93044],{"class":38,"line":11285},[36,93041,53748],{"class":50},[36,93043,53144],{"class":52631},[36,93045,52638],{"class":50},[36,93047,93048,93050,93052],{"class":38,"line":11291},[36,93049,53116],{"class":50},[36,93051,53131],{"class":52631},[36,93053,52638],{"class":50},[36,93055,93056],{"class":38,"line":11312},[36,93057,58],{"emptyLinePlaceholder":57},[36,93059,93060,93062,93064],{"class":38,"line":11318},[36,93061,53116],{"class":50},[36,93063,51966],{"class":52631},[36,93065,52638],{"class":50},[1645,93067,93069],{"id":93068},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,93071,93073],{"className":54398,"code":93072,"language":54400,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    let timer = null\n    timer = setTimeout(() => {\n      clearTimeout(timer)\n      console.log(timer)\n    }, 1000)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,93074,93075,93083,93091,93096,93101,93106,93111,93115,93123],{"__ignoreMap":31},[36,93076,93077,93079,93081],{"class":38,"line":39},[36,93078,2577],{"class":50},[36,93080,53131],{"class":52631},[36,93082,52638],{"class":50},[36,93084,93085,93087,93089],{"class":38,"line":54},[36,93086,53475],{"class":50},[36,93088,53144],{"class":52631},[36,93090,52638],{"class":50},[36,93092,93093],{"class":38,"line":61},[36,93094,93095],{"class":50},"    let timer = null\n",[36,93097,93098],{"class":38,"line":80},[36,93099,93100],{"class":50},"    timer = setTimeout(() => {\n",[36,93102,93103],{"class":38,"line":96},[36,93104,93105],{"class":50},"      clearTimeout(timer)\n",[36,93107,93108],{"class":38,"line":101},[36,93109,93110],{"class":50},"      console.log(timer)\n",[36,93112,93113],{"class":38,"line":128},[36,93114,61556],{"class":50},[36,93116,93117,93119,93121],{"class":38,"line":149},[36,93118,53748],{"class":50},[36,93120,53144],{"class":52631},[36,93122,52638],{"class":50},[36,93124,93125,93127,93129],{"class":38,"line":154},[36,93126,53116],{"class":50},[36,93128,53131],{"class":52631},[36,93130,52638],{"class":50},[19,93132,93133],{},"输出为1",[19,93135,93136],{},"在开启的定时器里边写清除定时器",[19,93138,93139],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[1645,93141,93143],{"id":93142},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93145,93146],{},"页面打开，可以记录上一次的视频播放位置",[19,93148,93149],{},[2992,93150],{"alt":31,"src":93151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93153,93154],{},[2992,93155],{"alt":31,"src":93156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,93158,93160],{"className":51964,"code":93159,"language":51966,"meta":31,"style":31},"\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\n\u003Chead>\n  \u003Cmeta charset=\"UTF-8\" \u002F>\n  \u003Cmeta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \u002F>\n  \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \u002F>\n  \u003Cmeta name=\"referrer\" content=\"never\" \u002F>\n  \u003Ctitle>综合案例\u003C\u002Ftitle>\n  \u003Cstyle>\n    * {\n      padding: 0;\n      margin: 0;\n      box-sizing: border-box;\n    }\n\n    .container {\n      width: 1200px;\n      margin: 0 auto;\n    }\n\n    .video video {\n      width: 100%;\n      padding: 20px 0;\n    }\n\n    .elevator {\n      position: fixed;\n      top: 280px;\n      right: 20px;\n      z-index: 999;\n      background: #fff;\n      border: 1px solid #e4e4e4;\n      width: 60px;\n    }\n\n    .elevator a {\n      display: block;\n      padding: 10px;\n      text-decoration: none;\n      text-align: center;\n      color: #999;\n    }\n\n    .elevator a.active {\n      color: #1286ff;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\n\u003Cbody>\n  \u003Cdiv class=\"container\">\n    \u003Cdiv class=\"header\">\n      \u003Ca href=\"http:\u002F\u002Fpip.itcast.cn\">\n        \u003Cimg src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\" alt=\"\" \u002F>\n      \u003C\u002Fa>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"video\">\n      \u003Cvideo src=\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\" controls>\u003C\u002Fvideo>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"elevator\">\n      \u003Ca href=\"javascript:;\" data-ref=\"video\">视频介绍\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"intro\">课程简介\u003C\u002Fa>\n      \u003Ca href=\"javascript:;\" data-ref=\"outline\">评论列表\u003C\u002Fa>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n  \u003Cscript src=\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\">\u003C\u002Fscript>\n  \u003Cscript>\n    \u002F\u002F 1.获取元素 要对视频进行操作\n    const video = document.querySelector('video')\n    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n    video.ontimeupdate = _.throttle(() => {\n      \u002F\u002F 要进行本地存储,存当前播放的时间\n      \u002F\u002F 控制台输出当前的时间\n      \u002F\u002F console.log(video.currentTime)  \u002F\u002F获得当前的视频时间\n      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n      localStorage.setItem('currentTime', video.currentTime)\n    }, 1000)\n    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n    video.onloadeddata = () => {\n      \u002F\u002F console.log(11)\n      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n      video.currentTime = localStorage.getItem('currentTime') || 0\n    }\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n\n\u003C\u002Fhtml>\n",[33,93161,93162,93172,93186,93190,93198,93212,93232,93252,93274,93287,93295,93301,93311,93321,93331,93335,93339,93346,93359,93371,93375,93379,93389,93401,93415,93419,93423,93430,93440,93453,93465,93475,93485,93501,93513,93517,93521,93529,93539,93551,93561,93571,93581,93585,93589,93599,93610,93614,93622,93630,93634,93642,93657,93672,93687,93708,93716,93724,93739,93761,93769,93784,93810,93836,93862,93870,93878,93897,93905,93910,93929,93934,93952,93957,93962,93970,93975,93989,93997,94002,94019,94023,94028,94050,94054,94062,94070,94074],{"__ignoreMap":31},[36,93163,93164,93166,93168,93170],{"class":38,"line":39},[36,93165,52628],{"class":50},[36,93167,52632],{"class":52631},[36,93169,52635],{"class":46},[36,93171,52638],{"class":50},[36,93173,93174,93176,93178,93180,93182,93184],{"class":38,"line":54},[36,93175,2577],{"class":50},[36,93177,51966],{"class":52631},[36,93179,52647],{"class":46},[36,93181,70],{"class":50},[36,93183,52652],{"class":110},[36,93185,52638],{"class":50},[36,93187,93188],{"class":38,"line":61},[36,93189,58],{"emptyLinePlaceholder":57},[36,93191,93192,93194,93196],{"class":38,"line":80},[36,93193,2577],{"class":50},[36,93195,52665],{"class":52631},[36,93197,52638],{"class":50},[36,93199,93200,93202,93204,93206,93208,93210],{"class":38,"line":96},[36,93201,53475],{"class":50},[36,93203,52675],{"class":52631},[36,93205,52678],{"class":46},[36,93207,70],{"class":50},[36,93209,52683],{"class":110},[36,93211,60458],{"class":50},[36,93213,93214,93216,93218,93220,93222,93224,93226,93228,93230],{"class":38,"line":101},[36,93215,53475],{"class":50},[36,93217,52675],{"class":52631},[36,93219,52694],{"class":46},[36,93221,70],{"class":50},[36,93223,52699],{"class":110},[36,93225,52702],{"class":46},[36,93227,70],{"class":50},[36,93229,52707],{"class":110},[36,93231,60458],{"class":50},[36,93233,93234,93236,93238,93240,93242,93244,93246,93248,93250],{"class":38,"line":128},[36,93235,53475],{"class":50},[36,93237,52675],{"class":52631},[36,93239,16249],{"class":46},[36,93241,70],{"class":50},[36,93243,52722],{"class":110},[36,93245,52702],{"class":46},[36,93247,70],{"class":50},[36,93249,52729],{"class":110},[36,93251,60458],{"class":50},[36,93253,93254,93256,93258,93260,93262,93265,93267,93269,93272],{"class":38,"line":149},[36,93255,53475],{"class":50},[36,93257,52675],{"class":52631},[36,93259,16249],{"class":46},[36,93261,70],{"class":50},[36,93263,93264],{"class":110},"\"referrer\"",[36,93266,52702],{"class":46},[36,93268,70],{"class":50},[36,93270,93271],{"class":110},"\"never\"",[36,93273,60458],{"class":50},[36,93275,93276,93278,93280,93283,93285],{"class":38,"line":154},[36,93277,53475],{"class":50},[36,93279,52738],{"class":52631},[36,93281,93282],{"class":50},">综合案例\u003C\u002F",[36,93284,52738],{"class":52631},[36,93286,52638],{"class":50},[36,93288,93289,93291,93293],{"class":38,"line":167},[36,93290,53475],{"class":50},[36,93292,1592],{"class":52631},[36,93294,52638],{"class":50},[36,93296,93297,93299],{"class":38,"line":172},[36,93298,569],{"class":52631},[36,93300,16901],{"class":50},[36,93302,93303,93305,93307,93309],{"class":38,"line":192},[36,93304,56026],{"class":73},[36,93306,52768],{"class":50},[36,93308,1859],{"class":73},[36,93310,77],{"class":50},[36,93312,93313,93315,93317,93319],{"class":38,"line":211},[36,93314,56037],{"class":73},[36,93316,52768],{"class":50},[36,93318,1859],{"class":73},[36,93320,77],{"class":50},[36,93322,93323,93325,93327,93329],{"class":38,"line":216},[36,93324,73927],{"class":73},[36,93326,52768],{"class":50},[36,93328,61836],{"class":73},[36,93330,77],{"class":50},[36,93332,93333],{"class":38,"line":231},[36,93334,3693],{"class":50},[36,93336,93337],{"class":38,"line":236},[36,93338,58],{"emptyLinePlaceholder":57},[36,93340,93341,93344],{"class":38,"line":247},[36,93342,93343],{"class":46},"    .container",[36,93345,16901],{"class":50},[36,93347,93348,93350,93352,93355,93357],{"class":38,"line":637},[36,93349,56102],{"class":73},[36,93351,52768],{"class":50},[36,93353,93354],{"class":73},"1200",[36,93356,52823],{"class":42},[36,93358,77],{"class":50},[36,93360,93361,93363,93365,93367,93369],{"class":38,"line":646},[36,93362,56037],{"class":73},[36,93364,52768],{"class":50},[36,93366,1859],{"class":73},[36,93368,52887],{"class":73},[36,93370,77],{"class":50},[36,93372,93373],{"class":38,"line":655},[36,93374,3693],{"class":50},[36,93376,93377],{"class":38,"line":660},[36,93378,58],{"emptyLinePlaceholder":57},[36,93380,93381,93384,93387],{"class":38,"line":665},[36,93382,93383],{"class":46},"    .video",[36,93385,93386],{"class":52631}," video",[36,93388,16901],{"class":50},[36,93390,93391,93393,93395,93397,93399],{"class":38,"line":674},[36,93392,56102],{"class":73},[36,93394,52768],{"class":50},[36,93396,1979],{"class":73},[36,93398,1996],{"class":42},[36,93400,77],{"class":50},[36,93402,93403,93405,93407,93409,93411,93413],{"class":38,"line":679},[36,93404,56026],{"class":73},[36,93406,52768],{"class":50},[36,93408,2367],{"class":73},[36,93410,52823],{"class":42},[36,93412,242],{"class":73},[36,93414,77],{"class":50},[36,93416,93417],{"class":38,"line":692},[36,93418,3693],{"class":50},[36,93420,93421],{"class":38,"line":705},[36,93422,58],{"emptyLinePlaceholder":57},[36,93424,93425,93428],{"class":38,"line":710},[36,93426,93427],{"class":46},"    .elevator",[36,93429,16901],{"class":50},[36,93431,93432,93434,93436,93438],{"class":38,"line":722},[36,93433,56090],{"class":73},[36,93435,52768],{"class":50},[36,93437,87564],{"class":73},[36,93439,77],{"class":50},[36,93441,93442,93444,93446,93449,93451],{"class":38,"line":750},[36,93443,56278],{"class":73},[36,93445,52768],{"class":50},[36,93447,93448],{"class":73},"280",[36,93450,52823],{"class":42},[36,93452,77],{"class":50},[36,93454,93455,93457,93459,93461,93463],{"class":38,"line":755},[36,93456,87758],{"class":73},[36,93458,52768],{"class":50},[36,93460,2367],{"class":73},[36,93462,52823],{"class":42},[36,93464,77],{"class":50},[36,93466,93467,93469,93471,93473],{"class":38,"line":777},[36,93468,87571],{"class":73},[36,93470,52768],{"class":50},[36,93472,87576],{"class":73},[36,93474,77],{"class":50},[36,93476,93477,93479,93481,93483],{"class":38,"line":802},[36,93478,63052],{"class":73},[36,93480,52768],{"class":50},[36,93482,62173],{"class":73},[36,93484,77],{"class":50},[36,93486,93487,93489,93491,93493,93495,93497,93499],{"class":38,"line":807},[36,93488,63308],{"class":73},[36,93490,52768],{"class":50},[36,93492,1885],{"class":73},[36,93494,52823],{"class":42},[36,93496,52852],{"class":73},[36,93498,63575],{"class":73},[36,93500,77],{"class":50},[36,93502,93503,93505,93507,93509,93511],{"class":38,"line":818},[36,93504,56102],{"class":73},[36,93506,52768],{"class":50},[36,93508,2574],{"class":73},[36,93510,52823],{"class":42},[36,93512,77],{"class":50},[36,93514,93515],{"class":38,"line":843},[36,93516,3693],{"class":50},[36,93518,93519],{"class":38,"line":848},[36,93520,58],{"emptyLinePlaceholder":57},[36,93522,93523,93525,93527],{"class":38,"line":859},[36,93524,93427],{"class":46},[36,93526,474],{"class":52631},[36,93528,16901],{"class":50},[36,93530,93531,93533,93535,93537],{"class":38,"line":864},[36,93532,56340],{"class":73},[36,93534,52768],{"class":50},[36,93536,62200],{"class":73},[36,93538,77],{"class":50},[36,93540,93541,93543,93545,93547,93549],{"class":38,"line":873},[36,93542,56026],{"class":73},[36,93544,52768],{"class":50},[36,93546,2113],{"class":73},[36,93548,52823],{"class":42},[36,93550,77],{"class":50},[36,93552,93553,93555,93557,93559],{"class":38,"line":9454},[36,93554,65301],{"class":73},[36,93556,52768],{"class":50},[36,93558,56068],{"class":73},[36,93560,77],{"class":50},[36,93562,93563,93565,93567,93569],{"class":38,"line":9481},[36,93564,58617],{"class":73},[36,93566,52768],{"class":50},[36,93568,52923],{"class":73},[36,93570,77],{"class":50},[36,93572,93573,93575,93577,93579],{"class":38,"line":9486},[36,93574,58747],{"class":73},[36,93576,52768],{"class":50},[36,93578,63401],{"class":73},[36,93580,77],{"class":50},[36,93582,93583],{"class":38,"line":9492},[36,93584,3693],{"class":50},[36,93586,93587],{"class":38,"line":9504},[36,93588,58],{"emptyLinePlaceholder":57},[36,93590,93591,93593,93595,93597],{"class":38,"line":9516},[36,93592,93427],{"class":46},[36,93594,474],{"class":52631},[36,93596,65355],{"class":46},[36,93598,16901],{"class":50},[36,93600,93601,93603,93605,93608],{"class":38,"line":9528},[36,93602,58747],{"class":73},[36,93604,52768],{"class":50},[36,93606,93607],{"class":73},"#1286ff",[36,93609,77],{"class":50},[36,93611,93612],{"class":38,"line":11184},[36,93613,3693],{"class":50},[36,93615,93616,93618,93620],{"class":38,"line":11209},[36,93617,53748],{"class":50},[36,93619,1592],{"class":52631},[36,93621,52638],{"class":50},[36,93623,93624,93626,93628],{"class":38,"line":11232},[36,93625,53116],{"class":50},[36,93627,52665],{"class":52631},[36,93629,52638],{"class":50},[36,93631,93632],{"class":38,"line":11256},[36,93633,58],{"emptyLinePlaceholder":57},[36,93635,93636,93638,93640],{"class":38,"line":11261},[36,93637,2577],{"class":50},[36,93639,53131],{"class":52631},[36,93641,52638],{"class":50},[36,93643,93644,93646,93648,93650,93652,93655],{"class":38,"line":11266},[36,93645,53475],{"class":50},[36,93647,52942],{"class":52631},[36,93649,54817],{"class":46},[36,93651,70],{"class":50},[36,93653,93654],{"class":110},"\"container\"",[36,93656,52638],{"class":50},[36,93658,93659,93661,93663,93665,93667,93670],{"class":38,"line":11271},[36,93660,52672],{"class":50},[36,93662,52942],{"class":52631},[36,93664,54817],{"class":46},[36,93666,70],{"class":50},[36,93668,93669],{"class":110},"\"header\"",[36,93671,52638],{"class":50},[36,93673,93674,93676,93678,93680,93682,93685],{"class":38,"line":11280},[36,93675,56565],{"class":50},[36,93677,1906],{"class":52631},[36,93679,62388],{"class":46},[36,93681,70],{"class":50},[36,93683,93684],{"class":110},"\"http:\u002F\u002Fpip.itcast.cn\"",[36,93686,52638],{"class":50},[36,93688,93689,93691,93693,93695,93697,93700,93702,93704,93706],{"class":38,"line":11285},[36,93690,56633],{"class":50},[36,93692,2992],{"class":52631},[36,93694,56570],{"class":46},[36,93696,70],{"class":50},[36,93698,93699],{"class":110},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[36,93701,56578],{"class":46},[36,93703,70],{"class":50},[36,93705,9126],{"class":110},[36,93707,60458],{"class":50},[36,93709,93710,93712,93714],{"class":38,"line":11291},[36,93711,56738],{"class":50},[36,93713,1906],{"class":52631},[36,93715,52638],{"class":50},[36,93717,93718,93720,93722],{"class":38,"line":11312},[36,93719,53107],{"class":50},[36,93721,52942],{"class":52631},[36,93723,52638],{"class":50},[36,93725,93726,93728,93730,93732,93734,93737],{"class":38,"line":11318},[36,93727,52672],{"class":50},[36,93729,52942],{"class":52631},[36,93731,54817],{"class":46},[36,93733,70],{"class":50},[36,93735,93736],{"class":110},"\"video\"",[36,93738,52638],{"class":50},[36,93740,93741,93743,93745,93747,93749,93752,93755,93757,93759],{"class":38,"line":11332},[36,93742,56565],{"class":50},[36,93744,29514],{"class":52631},[36,93746,56570],{"class":46},[36,93748,70],{"class":50},[36,93750,93751],{"class":110},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[36,93753,93754],{"class":46}," controls",[36,93756,56645],{"class":50},[36,93758,29514],{"class":52631},[36,93760,52638],{"class":50},[36,93762,93763,93765,93767],{"class":38,"line":11338},[36,93764,53107],{"class":50},[36,93766,52942],{"class":52631},[36,93768,52638],{"class":50},[36,93770,93771,93773,93775,93777,93779,93782],{"class":38,"line":11365},[36,93772,52672],{"class":50},[36,93774,52942],{"class":52631},[36,93776,54817],{"class":46},[36,93778,70],{"class":50},[36,93780,93781],{"class":110},"\"elevator\"",[36,93783,52638],{"class":50},[36,93785,93786,93788,93790,93792,93794,93796,93799,93801,93803,93806,93808],{"class":38,"line":11374},[36,93787,56565],{"class":50},[36,93789,1906],{"class":52631},[36,93791,62388],{"class":46},[36,93793,70],{"class":50},[36,93795,65567],{"class":110},[36,93797,93798],{"class":46}," data-ref",[36,93800,70],{"class":50},[36,93802,93736],{"class":110},[36,93804,93805],{"class":50},">视频介绍\u003C\u002F",[36,93807,1906],{"class":52631},[36,93809,52638],{"class":50},[36,93811,93812,93814,93816,93818,93820,93822,93824,93826,93829,93832,93834],{"class":38,"line":11380},[36,93813,56565],{"class":50},[36,93815,1906],{"class":52631},[36,93817,62388],{"class":46},[36,93819,70],{"class":50},[36,93821,65567],{"class":110},[36,93823,93798],{"class":46},[36,93825,70],{"class":50},[36,93827,93828],{"class":110},"\"intro\"",[36,93830,93831],{"class":50},">课程简介\u003C\u002F",[36,93833,1906],{"class":52631},[36,93835,52638],{"class":50},[36,93837,93838,93840,93842,93844,93846,93848,93850,93852,93855,93858,93860],{"class":38,"line":11388},[36,93839,56565],{"class":50},[36,93841,1906],{"class":52631},[36,93843,62388],{"class":46},[36,93845,70],{"class":50},[36,93847,65567],{"class":110},[36,93849,93798],{"class":46},[36,93851,70],{"class":50},[36,93853,93854],{"class":110},"\"outline\"",[36,93856,93857],{"class":50},">评论列表\u003C\u002F",[36,93859,1906],{"class":52631},[36,93861,52638],{"class":50},[36,93863,93864,93866,93868],{"class":38,"line":11393},[36,93865,53107],{"class":50},[36,93867,52942],{"class":52631},[36,93869,52638],{"class":50},[36,93871,93872,93874,93876],{"class":38,"line":17933},[36,93873,53748],{"class":50},[36,93875,52942],{"class":52631},[36,93877,52638],{"class":50},[36,93879,93880,93882,93884,93886,93888,93891,93893,93895],{"class":38,"line":17939},[36,93881,53475],{"class":50},[36,93883,53144],{"class":52631},[36,93885,56570],{"class":46},[36,93887,70],{"class":50},[36,93889,93890],{"class":110},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[36,93892,56645],{"class":50},[36,93894,53144],{"class":52631},[36,93896,52638],{"class":50},[36,93898,93899,93901,93903],{"class":38,"line":17962},[36,93900,53475],{"class":50},[36,93902,53144],{"class":52631},[36,93904,52638],{"class":50},[36,93906,93907],{"class":38,"line":17968},[36,93908,93909],{"class":124},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[36,93911,93912,93914,93916,93918,93920,93922,93924,93927],{"class":38,"line":17991},[36,93913,1498],{"class":42},[36,93915,93386],{"class":73},[36,93917,14893],{"class":42},[36,93919,55727],{"class":50},[36,93921,55730],{"class":46},[36,93923,222],{"class":50},[36,93925,93926],{"class":110},"'video'",[36,93928,1680],{"class":50},[36,93930,93931],{"class":38,"line":18005},[36,93932,93933],{"class":124},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[36,93935,93936,93939,93941,93943,93945,93948,93950],{"class":38,"line":18025},[36,93937,93938],{"class":50},"    video.ontimeupdate ",[36,93940,70],{"class":42},[36,93942,89686],{"class":50},[36,93944,92504],{"class":46},[36,93946,93947],{"class":50},"(() ",[36,93949,86053],{"class":42},[36,93951,16901],{"class":50},[36,93953,93954],{"class":38,"line":18031},[36,93955,93956],{"class":124},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[36,93958,93959],{"class":38,"line":18042},[36,93960,93961],{"class":124},"      \u002F\u002F 控制台输出当前的时间\n",[36,93963,93964,93967],{"class":38,"line":18065},[36,93965,93966],{"class":124},"      \u002F\u002F console.log(video.currentTime)",[36,93968,93969],{"class":124},"  \u002F\u002F获得当前的视频时间\n",[36,93971,93972],{"class":38,"line":18087},[36,93973,93974],{"class":124},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[36,93976,93977,93979,93981,93983,93986],{"class":38,"line":18092},[36,93978,76014],{"class":50},[36,93980,72985],{"class":46},[36,93982,222],{"class":50},[36,93984,93985],{"class":110},"'currentTime'",[36,93987,93988],{"class":50},", video.currentTime)\n",[36,93990,93991,93993,93995],{"class":38,"line":18098},[36,93992,55866],{"class":50},[36,93994,7889],{"class":73},[36,93996,1680],{"class":50},[36,93998,93999],{"class":38,"line":18112},[36,94000,94001],{"class":124},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[36,94003,94004,94007,94010,94012,94015,94017],{"class":38,"line":18125},[36,94005,94006],{"class":50},"    video.",[36,94008,94009],{"class":46},"onloadeddata",[36,94011,14893],{"class":42},[36,94013,94014],{"class":50}," () ",[36,94016,86053],{"class":42},[36,94018,16901],{"class":50},[36,94020,94021],{"class":38,"line":18130},[36,94022,61343],{"class":124},[36,94024,94025],{"class":38,"line":18144},[36,94026,94027],{"class":124},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[36,94029,94030,94033,94035,94038,94040,94042,94044,94046,94048],{"class":38,"line":18149},[36,94031,94032],{"class":50},"      video.currentTime ",[36,94034,70],{"class":42},[36,94036,94037],{"class":50}," localStorage.",[36,94039,73016],{"class":46},[36,94041,222],{"class":50},[36,94043,93985],{"class":110},[36,94045,15043],{"class":50},[36,94047,72688],{"class":42},[36,94049,48664],{"class":73},[36,94051,94052],{"class":38,"line":18155},[36,94053,3693],{"class":50},[36,94055,94056,94058,94060],{"class":38,"line":18160},[36,94057,53748],{"class":50},[36,94059,53144],{"class":52631},[36,94061,52638],{"class":50},[36,94063,94064,94066,94068],{"class":38,"line":18174},[36,94065,53116],{"class":50},[36,94067,53131],{"class":52631},[36,94069,52638],{"class":50},[36,94071,94072],{"class":38,"line":18179},[36,94073,58],{"emptyLinePlaceholder":57},[36,94075,94076,94078,94080],{"class":38,"line":18184},[36,94077,53116],{"class":50},[36,94079,51966],{"class":52631},[36,94081,52638],{"class":50},[1592,94083,94084],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":94086},[94087,94092,94096,94097,94098,94103,94108,94109,94110,94111,94118,94123,94124,94134,94138,94139,94143],{"id":78022,"depth":54,"text":78023,"children":94088},[94089,94090,94091],{"id":78026,"depth":61,"text":78027},{"id":78051,"depth":61,"text":78052},{"id":78063,"depth":61,"text":78064},{"id":78075,"depth":54,"text":78076,"children":94093},[94094,94095],{"id":78079,"depth":61,"text":78080},{"id":78094,"depth":61,"text":78095},{"id":78146,"depth":54,"text":78147},{"id":78190,"depth":54,"text":78191},{"id":78207,"depth":54,"text":78208,"children":94099},[94100,94101,94102],{"id":78211,"depth":61,"text":78212},{"id":78224,"depth":61,"text":78225},{"id":78329,"depth":61,"text":78330},{"id":78618,"depth":54,"text":78619,"children":94104},[94105,94106,94107],{"id":78622,"depth":61,"text":78623},{"id":79065,"depth":61,"text":79066},{"id":79476,"depth":61,"text":79477},{"id":79539,"depth":54,"text":79540},{"id":79618,"depth":54,"text":79619},{"id":79711,"depth":54,"text":79712},{"id":81556,"depth":54,"text":81557,"children":94112},[94113,94114,94115,94116,94117],{"id":81560,"depth":61,"text":81561},{"id":81572,"depth":61,"text":81573},{"id":81791,"depth":61,"text":81792},{"id":81809,"depth":61,"text":81810},{"id":81869,"depth":61,"text":81870},{"id":86137,"depth":54,"text":86138,"children":94119},[94120,94121,94122],{"id":86141,"depth":61,"text":86142},{"id":86159,"depth":61,"text":86160},{"id":86185,"depth":61,"text":86186},{"id":86194,"depth":54,"text":86195},{"id":86216,"depth":54,"text":86217,"children":94125},[94126,94127,94128,94129,94130,94131,94132,94133],{"id":86220,"depth":61,"text":86221},{"id":86481,"depth":61,"text":86482},{"id":86667,"depth":61,"text":86668},{"id":87034,"depth":61,"text":87035},{"id":87150,"depth":61,"text":87151},{"id":87186,"depth":61,"text":87187},{"id":87233,"depth":61,"text":87234},{"id":87267,"depth":61,"text":87268},{"id":88630,"depth":54,"text":88631,"children":94135},[94136,94137],{"id":88634,"depth":61,"text":88635},{"id":88671,"depth":61,"text":88672},{"id":90026,"depth":54,"text":90027},{"id":90397,"depth":54,"text":90398,"children":94140},[94141,94142],{"id":90401,"depth":61,"text":90402},{"id":90435,"depth":61,"text":90436},{"id":91164,"depth":54,"text":91165,"children":94144},[94145,94146,94147,94148],{"id":91168,"depth":61,"text":91169},{"id":92126,"depth":61,"text":92127},{"id":93068,"depth":61,"text":93069},{"id":93142,"depth":61,"text":93143},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78011,"description":24706},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94155,"title":94156,"body":94157,"description":94168,"extension":1603,"meta":94169,"navigation":57,"path":94171,"seo":94172,"stem":94173,"__hash__":94174},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94158,"toc":94166},[94159],[19,94160,94161,94162],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[1906,94163,94164],{"href":94164,"rel":94165},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25195],{"title":31,"searchDepth":54,"depth":54,"links":94167},[],"三件套第三套学习",{"category":94170},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94156,"description":94168},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94176,"title":94177,"body":94178,"description":24706,"extension":1603,"meta":94283,"navigation":57,"path":94284,"seo":94285,"stem":94286,"__hash__":94287},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94179,"toc":94278},[94180,94187,94190,94193,94196,94200,94209,94212,94215,94219,94228,94231,94235,94238,94258,94261,94275],[19,94181,94182],{},[1906,94183,94186],{"href":94184,"rel":94185},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25195],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94188,94177],{"id":94189},"_1安装",[19,94191,94192],{},"numpy是科学计算基础库,底层是C语言",[19,94194,94195],{},"三种方式：",[14,94197,94199],{"id":94198},"_11-通过pip安装","1.1 通过pip安装",[26,94201,94203],{"className":31709,"code":94202,"language":31711,"meta":31,"style":31},"pip install numpy\n",[33,94204,94205],{"__ignoreMap":31},[36,94206,94207],{"class":38,"line":39},[36,94208,94202],{"class":50},[19,94210,94211],{},"首选方式，自动处理依赖项",[19,94213,94214],{},"在提示系统命令符中使用cmd",[14,94216,94218],{"id":94217},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,94220,94222],{"className":31709,"code":94221,"language":31711,"meta":31,"style":31},"conda install numpy\n",[33,94223,94224],{"__ignoreMap":31},[36,94225,94226],{"class":38,"line":39},[36,94227,94221],{"class":50},[19,94229,94230],{},"自动解决环境依赖",[14,94232,94234],{"id":94233},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94236,94237],{},"对于Debian\u002FUbuntu",[26,94239,94241],{"className":31709,"code":94240,"language":31711,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[33,94242,94243],{"__ignoreMap":31},[36,94244,94245,94248,94250,94253,94255],{"class":38,"line":39},[36,94246,94247],{"class":50},"sudo apt",[36,94249,2199],{"class":42},[36,94251,94252],{"class":50},"get install python3",[36,94254,2199],{"class":42},[36,94256,94257],{"class":50},"numpy\n",[19,94259,94260],{},"对于Fedora:",[26,94262,94264],{"className":31709,"code":94263,"language":31711,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[33,94265,94266],{"__ignoreMap":31},[36,94267,94268,94271,94273],{"class":38,"line":39},[36,94269,94270],{"class":50},"sudo dnf install python3",[36,94272,2199],{"class":42},[36,94274,94257],{"class":50},[1592,94276,94277],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":94279},[94280,94281,94282],{"id":94198,"depth":54,"text":94199},{"id":94217,"depth":54,"text":94218},{"id":94233,"depth":54,"text":94234},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94177,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94289,"title":94290,"body":94291,"description":24706,"extension":1603,"meta":94404,"navigation":57,"path":94405,"seo":94406,"stem":94407,"__hash__":94408},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94292,"toc":94402},[94293,94296,94299,94302,94305,94308,94311,94314,94317,94320,94396,94399],[10,94294,94290],{"id":94295},"_10算数函数",[19,94297,94298],{},"加减乘除运算跟python基础语法没区别",[19,94300,94301],{},"除了python那种方法外还可以使用函数",[19,94303,94304],{},"加：np.add(a,b)",[19,94306,94307],{},"减：np.subtract(a,b)",[19,94309,94310],{},"乘：np.multiply(a,b)",[19,94312,94313],{},"除：np.divide(a,b) == a\u002Fb",[19,94315,94316],{},"取余：np.mod(a,b) == a%b",[19,94318,94319],{},"必须会的用法：",[26,94321,94323],{"className":31709,"code":94322,"language":31711,"meta":31,"style":31},"a=np.arange(9).reshape(3,3)\nb=np.array([10,10,10])\nresult=np.empty_like(a)\nnp.add(a,b,out=result)\nresult\n",[33,94324,94325,94347,94368,94378,94391],{"__ignoreMap":31},[36,94326,94327,94329,94331,94334,94336,94339,94341,94343,94345],{"class":38,"line":39},[36,94328,1906],{"class":50},[36,94330,70],{"class":42},[36,94332,94333],{"class":50},"np.arange(",[36,94335,2087],{"class":73},[36,94337,94338],{"class":50},").reshape(",[36,94340,1741],{"class":73},[36,94342,2045],{"class":50},[36,94344,1741],{"class":73},[36,94346,1680],{"class":50},[36,94348,94349,94351,94353,94356,94358,94360,94362,94364,94366],{"class":38,"line":54},[36,94350,1931],{"class":50},[36,94352,70],{"class":42},[36,94354,94355],{"class":50},"np.array([",[36,94357,2113],{"class":73},[36,94359,2045],{"class":50},[36,94361,2113],{"class":73},[36,94363,2045],{"class":50},[36,94365,2113],{"class":73},[36,94367,6146],{"class":50},[36,94369,94370,94373,94375],{"class":38,"line":61},[36,94371,94372],{"class":50},"result",[36,94374,70],{"class":42},[36,94376,94377],{"class":50},"np.empty_like(a)\n",[36,94379,94380,94383,94386,94388],{"class":38,"line":80},[36,94381,94382],{"class":50},"np.add(a,b,",[36,94384,94385],{"class":473},"out",[36,94387,70],{"class":42},[36,94389,94390],{"class":50},"result)\n",[36,94392,94393],{"class":38,"line":96},[36,94394,94395],{"class":50},"result\n",[19,94397,94398],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1592,94400,94401],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":94403},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94290,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94410,"title":94411,"body":94412,"description":24706,"extension":1603,"meta":95174,"navigation":57,"path":95175,"seo":95176,"stem":95177,"__hash__":95178},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94413,"toc":95161},[94414,94417,94420,94423,94427,94466,94470,94514,94574,94578,94581,94620,94623,94668,94672,94708,94712,94781,94785,94849,94853,94856,94859,94862,94865,94901,94905,94945,94949,95021,95024,95028,95091,95095,95158],[10,94415,94411],{"id":94416},"_11统计函数",[19,94418,94419],{},"sum max min mean",[19,94421,94422],{},"这些有axis参数，可以指定方向",[14,94424,94426],{"id":94425},"_111-sum求和函数","11.1 sum()求和函数",[26,94428,94430],{"className":31709,"code":94429,"language":31711,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[33,94431,94432,94437,94458],{"__ignoreMap":31},[36,94433,94434],{"class":38,"line":39},[36,94435,94436],{"class":124},"#创建一维数组\n",[36,94438,94439,94441,94443,94446,94448,94450,94452,94454,94456],{"class":38,"line":54},[36,94440,1906],{"class":50},[36,94442,70],{"class":42},[36,94444,94445],{"class":50},"np.random.randint(",[36,94447,1885],{"class":73},[36,94449,2045],{"class":50},[36,94451,1979],{"class":73},[36,94453,2045],{"class":50},[36,94455,2367],{"class":73},[36,94457,1680],{"class":50},[36,94459,94460,94463],{"class":38,"line":61},[36,94461,94462],{"class":50},"np.sum(a)",[36,94464,94465],{"class":124},"#求和\n",[14,94467,94469],{"id":94468},"_112-max求最大值函数","11.2 max()求最大值函数",[26,94471,94473],{"className":31709,"code":94472,"language":31711,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[33,94474,94475,94479,94499,94504,94509],{"__ignoreMap":31},[36,94476,94477],{"class":38,"line":39},[36,94478,94436],{"class":124},[36,94480,94481,94483,94485,94487,94489,94491,94493,94495,94497],{"class":38,"line":54},[36,94482,1906],{"class":50},[36,94484,70],{"class":42},[36,94486,94445],{"class":50},[36,94488,1885],{"class":73},[36,94490,2045],{"class":50},[36,94492,1979],{"class":73},[36,94494,2045],{"class":50},[36,94496,2367],{"class":73},[36,94498,1680],{"class":50},[36,94500,94501],{"class":38,"line":61},[36,94502,94503],{"class":50},"np.max(a)\n",[36,94505,94506],{"class":38,"line":80},[36,94507,94508],{"class":124},"#最大索引(求最大元素的索引)arg\n",[36,94510,94511],{"class":38,"line":96},[36,94512,94513],{"class":50},"np.argmax(a)\n",[26,94515,94517],{"className":31709,"code":94516,"language":31711,"meta":31,"style":31},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[33,94518,94519,94540,94560,94564],{"__ignoreMap":31},[36,94520,94521,94523,94525,94528,94530,94532,94534,94536,94538],{"class":38,"line":39},[36,94522,572],{"class":50},[36,94524,70],{"class":42},[36,94526,94527],{"class":50}," np.array([",[36,94529,1885],{"class":73},[36,94531,477],{"class":50},[36,94533,1987],{"class":73},[36,94535,477],{"class":50},[36,94537,1741],{"class":73},[36,94539,6146],{"class":50},[36,94541,94542,94544,94546,94548,94550,94552,94554,94556,94558],{"class":38,"line":54},[36,94543,88],{"class":50},[36,94545,70],{"class":42},[36,94547,94527],{"class":50},[36,94549,1741],{"class":73},[36,94551,477],{"class":50},[36,94553,1747],{"class":73},[36,94555,477],{"class":50},[36,94557,1961],{"class":73},[36,94559,6146],{"class":50},[36,94561,94562],{"class":38,"line":61},[36,94563,58],{"emptyLinePlaceholder":57},[36,94565,94566,94568,94571],{"class":38,"line":80},[36,94567,31746],{"class":73},[36,94569,94570],{"class":50},"(np.maximum(a, b))   ",[36,94572,94573],{"class":124},"# [3 5 4]，每个位置上取较大值\n",[14,94575,94577],{"id":94576},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94579,94580],{},"①一维数组：",[26,94582,94584],{"className":31709,"code":94583,"language":31711,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[33,94585,94586,94590,94610,94615],{"__ignoreMap":31},[36,94587,94588],{"class":38,"line":39},[36,94589,94436],{"class":124},[36,94591,94592,94594,94596,94598,94600,94602,94604,94606,94608],{"class":38,"line":54},[36,94593,1906],{"class":50},[36,94595,70],{"class":42},[36,94597,94445],{"class":50},[36,94599,1885],{"class":73},[36,94601,2045],{"class":50},[36,94603,1979],{"class":73},[36,94605,2045],{"class":50},[36,94607,2367],{"class":73},[36,94609,1680],{"class":50},[36,94611,94612],{"class":38,"line":61},[36,94613,94614],{"class":124},"#求平均值\n",[36,94616,94617],{"class":38,"line":80},[36,94618,94619],{"class":50},"np.mean(a)\n",[19,94621,94622],{},"②二维数组",[26,94624,94626],{"className":31709,"code":94625,"language":31711,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[33,94627,94628,94633,94658,94663],{"__ignoreMap":31},[36,94629,94630],{"class":38,"line":39},[36,94631,94632],{"class":124},"#二维数组\n",[36,94634,94635,94638,94640,94642,94644,94646,94648,94650,94652,94654,94656],{"class":38,"line":54},[36,94636,94637],{"class":50},"aa",[36,94639,70],{"class":42},[36,94641,94333],{"class":50},[36,94643,1885],{"class":73},[36,94645,2045],{"class":50},[36,94647,2190],{"class":73},[36,94649,94338],{"class":50},[36,94651,1741],{"class":73},[36,94653,2045],{"class":50},[36,94655,1961],{"class":73},[36,94657,1680],{"class":50},[36,94659,94660],{"class":38,"line":61},[36,94661,94662],{"class":124},"#对数组中的所有数求平均\n",[36,94664,94665],{"class":38,"line":80},[36,94666,94667],{"class":50},"np.mean(aa)\n",[14,94669,94671],{"id":94670},"_114-median求中位数函数","11.4 median()求中位数函数",[26,94673,94675],{"className":31709,"code":94674,"language":31711,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,94676,94677,94682,94698,94703],{"__ignoreMap":31},[36,94678,94679],{"class":38,"line":39},[36,94680,94681],{"class":124},"#求中位数\n",[36,94683,94684,94686,94688,94690,94692,94694,94696],{"class":38,"line":54},[36,94685,1931],{"class":50},[36,94687,70],{"class":42},[36,94689,94333],{"class":50},[36,94691,1885],{"class":73},[36,94693,2045],{"class":50},[36,94695,2113],{"class":73},[36,94697,1680],{"class":50},[36,94699,94700],{"class":38,"line":61},[36,94701,94702],{"class":50},"np.median(b)\n",[36,94704,94705],{"class":38,"line":80},[36,94706,94707],{"class":124},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94709,94711],{"id":94710},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,94713,94715],{"className":31709,"code":94714,"language":31711,"meta":31,"style":31},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[33,94716,94717,94733,94738,94743,94752,94757,94766],{"__ignoreMap":31},[36,94718,94719,94721,94723,94725,94727,94729,94731],{"class":38,"line":39},[36,94720,1931],{"class":50},[36,94722,70],{"class":42},[36,94724,94333],{"class":50},[36,94726,1885],{"class":73},[36,94728,2045],{"class":50},[36,94730,2113],{"class":73},[36,94732,1680],{"class":50},[36,94734,94735],{"class":38,"line":54},[36,94736,94737],{"class":124},"#幂运算\n",[36,94739,94740],{"class":38,"line":61},[36,94741,94742],{"class":124},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[36,94744,94745,94748,94750],{"class":38,"line":80},[36,94746,94747],{"class":50},"np.power(b,",[36,94749,1747],{"class":73},[36,94751,1680],{"class":50},[36,94753,94754],{"class":38,"line":96},[36,94755,94756],{"class":124},"#或者以下代码，将数据存储起来\n",[36,94758,94759,94761,94763],{"class":38,"line":101},[36,94760,2512],{"class":50},[36,94762,70],{"class":42},[36,94764,94765],{"class":50},"np.empty_like(b)\n",[36,94767,94768,94770,94772,94774,94776,94778],{"class":38,"line":128},[36,94769,94747],{"class":50},[36,94771,1747],{"class":73},[36,94773,2045],{"class":50},[36,94775,94385],{"class":473},[36,94777,70],{"class":42},[36,94779,94780],{"class":50},"y)\n",[14,94782,94784],{"id":94783},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,94786,94788],{"className":31709,"code":94787,"language":31711,"meta":31,"style":31},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[33,94789,94790,94806,94811,94816,94820,94838],{"__ignoreMap":31},[36,94791,94792,94794,94796,94798,94800,94802,94804],{"class":38,"line":39},[36,94793,1931],{"class":50},[36,94795,70],{"class":42},[36,94797,94333],{"class":50},[36,94799,1885],{"class":73},[36,94801,2045],{"class":50},[36,94803,2113],{"class":73},[36,94805,1680],{"class":50},[36,94807,94808],{"class":38,"line":54},[36,94809,94810],{"class":124},"#开方\n",[36,94812,94813],{"class":38,"line":61},[36,94814,94815],{"class":50},"np.sqrt(b)\n",[36,94817,94818],{"class":38,"line":80},[36,94819,94756],{"class":124},[36,94821,94822,94824,94826,94829,94832,94834,94836],{"class":38,"line":96},[36,94823,2512],{"class":50},[36,94825,70],{"class":42},[36,94827,94828],{"class":50},"np.empty_like(b,",[36,94830,94831],{"class":473},"dtype",[36,94833,70],{"class":42},[36,94835,1713],{"class":73},[36,94837,1680],{"class":50},[36,94839,94840,94843,94845,94847],{"class":38,"line":101},[36,94841,94842],{"class":50},"np.sqrt(b,",[36,94844,94385],{"class":473},[36,94846,70],{"class":42},[36,94848,94780],{"class":50},[14,94850,94852],{"id":94851},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94854,94855],{},"对数组中的元素累计求和，可指定轴",[19,94857,94858],{},"#累计求和的意思是：",[19,94860,94861],{},"a = np.array([1, 2, 3, 4])",[19,94863,94864],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,94866,94868],{"className":31709,"code":94867,"language":31711,"meta":31,"style":31},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,94869,94870,94886,94891,94896],{"__ignoreMap":31},[36,94871,94872,94874,94876,94878,94880,94882,94884],{"class":38,"line":39},[36,94873,1931],{"class":50},[36,94875,70],{"class":42},[36,94877,94333],{"class":50},[36,94879,1885],{"class":73},[36,94881,2045],{"class":50},[36,94883,2113],{"class":73},[36,94885,1680],{"class":50},[36,94887,94888],{"class":38,"line":54},[36,94889,94890],{"class":50},"np.cumsum(b)\n",[36,94892,94893],{"class":38,"line":61},[36,94894,94895],{"class":124},"#结果：\n",[36,94897,94898],{"class":38,"line":80},[36,94899,94900],{"class":124},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94902,94904],{"id":94903},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,94906,94908],{"className":31709,"code":94907,"language":31711,"meta":31,"style":31},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,94909,94910,94926,94931,94936,94940],{"__ignoreMap":31},[36,94911,94912,94914,94916,94918,94920,94922,94924],{"class":38,"line":39},[36,94913,1931],{"class":50},[36,94915,70],{"class":42},[36,94917,94333],{"class":50},[36,94919,1885],{"class":73},[36,94921,2045],{"class":50},[36,94923,2113],{"class":73},[36,94925,1680],{"class":50},[36,94927,94928],{"class":38,"line":54},[36,94929,94930],{"class":124},"#对数组中的元素累计求积，可指定轴\n",[36,94932,94933],{"class":38,"line":61},[36,94934,94935],{"class":50},"np.cumprod(b)\n",[36,94937,94938],{"class":38,"line":80},[36,94939,94895],{"class":124},[36,94941,94942],{"class":38,"line":96},[36,94943,94944],{"class":124},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94946,94948],{"id":94947},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,94950,94952],{"className":31709,"code":94951,"language":31711,"meta":31,"style":31},"#删除数组中的重复数据，并对数据进行排序\na=np.array([1,2,3,12,3,10,32,0,23,4])\nnp.unique(a)\n#结果：\n#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[33,94953,94954,94959,95007,95012,95016],{"__ignoreMap":31},[36,94955,94956],{"class":38,"line":39},[36,94957,94958],{"class":124},"#删除数组中的重复数据，并对数据进行排序\n",[36,94960,94961,94963,94965,94967,94969,94971,94973,94975,94977,94979,94981,94983,94985,94987,94989,94991,94993,94995,94997,94999,95001,95003,95005],{"class":38,"line":54},[36,94962,1906],{"class":50},[36,94964,70],{"class":42},[36,94966,94355],{"class":50},[36,94968,1885],{"class":73},[36,94970,2045],{"class":50},[36,94972,1747],{"class":73},[36,94974,2045],{"class":50},[36,94976,1741],{"class":73},[36,94978,2045],{"class":50},[36,94980,2165],{"class":73},[36,94982,2045],{"class":50},[36,94984,1741],{"class":73},[36,94986,2045],{"class":50},[36,94988,2113],{"class":73},[36,94990,2045],{"class":50},[36,94992,1865],{"class":73},[36,94994,2045],{"class":50},[36,94996,1859],{"class":73},[36,94998,2045],{"class":50},[36,95000,2442],{"class":73},[36,95002,2045],{"class":50},[36,95004,1961],{"class":73},[36,95006,6146],{"class":50},[36,95008,95009],{"class":38,"line":61},[36,95010,95011],{"class":50},"np.unique(a)\n",[36,95013,95014],{"class":38,"line":80},[36,95015,94895],{"class":124},[36,95017,95018],{"class":38,"line":96},[36,95019,95020],{"class":124},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95022,95023],{},"升序形式排序",[14,95025,95027],{"id":95026},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,95029,95031],{"className":31709,"code":95030,"language":31711,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[33,95032,95033,95081,95086],{"__ignoreMap":31},[36,95034,95035,95037,95039,95041,95043,95045,95047,95049,95051,95053,95055,95057,95059,95061,95063,95065,95067,95069,95071,95073,95075,95077,95079],{"class":38,"line":39},[36,95036,1906],{"class":50},[36,95038,70],{"class":42},[36,95040,94355],{"class":50},[36,95042,1885],{"class":73},[36,95044,2045],{"class":50},[36,95046,1747],{"class":73},[36,95048,2045],{"class":50},[36,95050,1741],{"class":73},[36,95052,2045],{"class":50},[36,95054,2165],{"class":73},[36,95056,2045],{"class":50},[36,95058,1741],{"class":73},[36,95060,2045],{"class":50},[36,95062,2113],{"class":73},[36,95064,2045],{"class":50},[36,95066,1865],{"class":73},[36,95068,2045],{"class":50},[36,95070,1859],{"class":73},[36,95072,2045],{"class":50},[36,95074,2442],{"class":73},[36,95076,2045],{"class":50},[36,95078,1961],{"class":73},[36,95080,6146],{"class":50},[36,95082,95083],{"class":38,"line":54},[36,95084,95085],{"class":124},"#返回数组中非零元素的索引\n",[36,95087,95088],{"class":38,"line":61},[36,95089,95090],{"class":50},"np.nonzero(a)\n",[14,95092,95094],{"id":95093},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,95096,95098],{"className":31709,"code":95097,"language":31711,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[33,95099,95100,95148,95153],{"__ignoreMap":31},[36,95101,95102,95104,95106,95108,95110,95112,95114,95116,95118,95120,95122,95124,95126,95128,95130,95132,95134,95136,95138,95140,95142,95144,95146],{"class":38,"line":39},[36,95103,1906],{"class":50},[36,95105,70],{"class":42},[36,95107,94355],{"class":50},[36,95109,1885],{"class":73},[36,95111,2045],{"class":50},[36,95113,1747],{"class":73},[36,95115,2045],{"class":50},[36,95117,1741],{"class":73},[36,95119,2045],{"class":50},[36,95121,2165],{"class":73},[36,95123,2045],{"class":50},[36,95125,1741],{"class":73},[36,95127,2045],{"class":50},[36,95129,2113],{"class":73},[36,95131,2045],{"class":50},[36,95133,1865],{"class":73},[36,95135,2045],{"class":50},[36,95137,1859],{"class":73},[36,95139,2045],{"class":50},[36,95141,2442],{"class":73},[36,95143,2045],{"class":50},[36,95145,1961],{"class":73},[36,95147,6146],{"class":50},[36,95149,95150],{"class":38,"line":54},[36,95151,95152],{"class":124},"#计算一组数中最大值与最小值的差，可指定轴\n",[36,95154,95155],{"class":38,"line":61},[36,95156,95157],{"class":50},"np.ptp(a)\n",[1592,95159,95160],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":95162},[95163,95164,95165,95166,95167,95168,95169,95170,95171,95172,95173],{"id":94425,"depth":54,"text":94426},{"id":94468,"depth":54,"text":94469},{"id":94576,"depth":54,"text":94577},{"id":94670,"depth":54,"text":94671},{"id":94710,"depth":54,"text":94711},{"id":94783,"depth":54,"text":94784},{"id":94851,"depth":54,"text":94852},{"id":94903,"depth":54,"text":94904},{"id":94947,"depth":54,"text":94948},{"id":95026,"depth":54,"text":95027},{"id":95093,"depth":54,"text":95094},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94411,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95180,"title":95181,"body":95182,"description":24706,"extension":1603,"meta":95837,"navigation":57,"path":95838,"seo":95839,"stem":95840,"__hash__":95841},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95183,"toc":95825},[95184,95187,95191,95194,95410,95414,95417,95626,95630,95696,95701,95705,95708,95711,95749,95753,95756,95761,95765,95768,95771,95776,95780,95783,95787,95790,95793,95798,95802,95805,95808,95813,95817,95822],[10,95185,95181],{"id":95186},"_12其他常用函数",[14,95188,95190],{"id":95189},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95192,95193],{},"将数组的数据按照行列复制扩展",[26,95195,95197],{"className":31709,"code":95196,"language":31711,"meta":31,"style":31},"a=np.arange(1,5)\nnp.tile(a,2)\n#结果：\n#array([1, 2, 3, 4, 1, 2, 3, 4])\n#行复制两次，列复制三次\nnp.tile(a,(2,3))\n#结果：\n'''\narray([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n'''\n#创建二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.tile(aa,2)#一个数的时候就是行\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12]])\n'''\nnp.tile(aa,(2,3))\n#结果：\n'''\narray([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n'''\n\n",[33,95198,95199,95215,95224,95228,95233,95238,95251,95255,95260,95265,95270,95274,95279,95303,95315,95319,95323,95328,95333,95338,95343,95347,95360,95364,95368,95373,95378,95383,95388,95393,95397,95401,95406],{"__ignoreMap":31},[36,95200,95201,95203,95205,95207,95209,95211,95213],{"class":38,"line":39},[36,95202,1906],{"class":50},[36,95204,70],{"class":42},[36,95206,94333],{"class":50},[36,95208,1885],{"class":73},[36,95210,2045],{"class":50},[36,95212,1987],{"class":73},[36,95214,1680],{"class":50},[36,95216,95217,95220,95222],{"class":38,"line":54},[36,95218,95219],{"class":50},"np.tile(a,",[36,95221,1747],{"class":73},[36,95223,1680],{"class":50},[36,95225,95226],{"class":38,"line":61},[36,95227,94895],{"class":124},[36,95229,95230],{"class":38,"line":80},[36,95231,95232],{"class":124},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[36,95234,95235],{"class":38,"line":96},[36,95236,95237],{"class":124},"#行复制两次，列复制三次\n",[36,95239,95240,95243,95245,95247,95249],{"class":38,"line":101},[36,95241,95242],{"class":50},"np.tile(a,(",[36,95244,1747],{"class":73},[36,95246,2045],{"class":50},[36,95248,1741],{"class":73},[36,95250,31828],{"class":50},[36,95252,95253],{"class":38,"line":128},[36,95254,94895],{"class":124},[36,95256,95257],{"class":38,"line":149},[36,95258,95259],{"class":110},"'''\n",[36,95261,95262],{"class":38,"line":154},[36,95263,95264],{"class":110},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[36,95266,95267],{"class":38,"line":167},[36,95268,95269],{"class":110},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[36,95271,95272],{"class":38,"line":172},[36,95273,95259],{"class":110},[36,95275,95276],{"class":38,"line":192},[36,95277,95278],{"class":124},"#创建二维数组\n",[36,95280,95281,95283,95285,95287,95289,95291,95293,95295,95297,95299,95301],{"class":38,"line":211},[36,95282,94637],{"class":50},[36,95284,70],{"class":42},[36,95286,94333],{"class":50},[36,95288,1885],{"class":73},[36,95290,2045],{"class":50},[36,95292,2190],{"class":73},[36,95294,94338],{"class":50},[36,95296,1961],{"class":73},[36,95298,2045],{"class":50},[36,95300,1741],{"class":73},[36,95302,1680],{"class":50},[36,95304,95305,95308,95310,95312],{"class":38,"line":216},[36,95306,95307],{"class":50},"np.tile(aa,",[36,95309,1747],{"class":73},[36,95311,2096],{"class":50},[36,95313,95314],{"class":124},"#一个数的时候就是行\n",[36,95316,95317],{"class":38,"line":231},[36,95318,94895],{"class":124},[36,95320,95321],{"class":38,"line":236},[36,95322,95259],{"class":110},[36,95324,95325],{"class":38,"line":247},[36,95326,95327],{"class":110},"array([[ 1,  2,  3,  1,  2,  3],\n",[36,95329,95330],{"class":38,"line":637},[36,95331,95332],{"class":110},"       [ 4,  5,  6,  4,  5,  6],\n",[36,95334,95335],{"class":38,"line":646},[36,95336,95337],{"class":110},"       [ 7,  8,  9,  7,  8,  9],\n",[36,95339,95340],{"class":38,"line":655},[36,95341,95342],{"class":110},"       [10, 11, 12, 10, 11, 12]])\n",[36,95344,95345],{"class":38,"line":660},[36,95346,95259],{"class":110},[36,95348,95349,95352,95354,95356,95358],{"class":38,"line":665},[36,95350,95351],{"class":50},"np.tile(aa,(",[36,95353,1747],{"class":73},[36,95355,2045],{"class":50},[36,95357,1741],{"class":73},[36,95359,31828],{"class":50},[36,95361,95362],{"class":38,"line":674},[36,95363,94895],{"class":124},[36,95365,95366],{"class":38,"line":679},[36,95367,95259],{"class":110},[36,95369,95370],{"class":38,"line":692},[36,95371,95372],{"class":110},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,95374,95375],{"class":38,"line":705},[36,95376,95377],{"class":110},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[36,95379,95380],{"class":38,"line":710},[36,95381,95382],{"class":110},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[36,95384,95385],{"class":38,"line":722},[36,95386,95387],{"class":110},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[36,95389,95390],{"class":38,"line":750},[36,95391,95392],{"class":110},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,95394,95395],{"class":38,"line":755},[36,95396,95377],{"class":110},[36,95398,95399],{"class":38,"line":777},[36,95400,95382],{"class":110},[36,95402,95403],{"class":38,"line":802},[36,95404,95405],{"class":110},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[36,95407,95408],{"class":38,"line":807},[36,95409,95259],{"class":110},[14,95411,95413],{"id":95412},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95415,95416],{},"repeat()将数组中的每个元素重复若干次",[26,95418,95420],{"className":31709,"code":95419,"language":31711,"meta":31,"style":31},"a=np.arange(1,5)\nnp.repeat(a,3)\n#结果：\n#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\naa=np.arange(1,13).reshape(4,3)\n#这个重复之后二维变成一维\nnp.repeat(aa,2)\n'''\narray([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n'''\n#指定axis\nnp.repeat(aa,2,axis=0)\n#结果：\n'''\narray([[ 1,  2,  3],\n       [ 1,  2,  3],\n       [ 4,  5,  6],\n       [ 4,  5,  6],\n       [ 7,  8,  9],\n       [ 7,  8,  9],\n       [10, 11, 12],\n       [10, 11, 12]])\n'''\nnp.repeat(aa,2,axis=1)\n#结果：\n'''\narray([[ 1,  1,  2,  2,  3,  3],\n       [ 4,  4,  5,  5,  6,  6],\n       [ 7,  7,  8,  8,  9,  9],\n       [10, 10, 11, 11, 12, 12]])\n'''\n",[33,95421,95422,95438,95447,95451,95456,95480,95485,95494,95498,95503,95507,95512,95528,95532,95536,95541,95546,95551,95555,95560,95564,95569,95574,95578,95594,95598,95602,95607,95612,95617,95622],{"__ignoreMap":31},[36,95423,95424,95426,95428,95430,95432,95434,95436],{"class":38,"line":39},[36,95425,1906],{"class":50},[36,95427,70],{"class":42},[36,95429,94333],{"class":50},[36,95431,1885],{"class":73},[36,95433,2045],{"class":50},[36,95435,1987],{"class":73},[36,95437,1680],{"class":50},[36,95439,95440,95443,95445],{"class":38,"line":54},[36,95441,95442],{"class":50},"np.repeat(a,",[36,95444,1741],{"class":73},[36,95446,1680],{"class":50},[36,95448,95449],{"class":38,"line":61},[36,95450,94895],{"class":124},[36,95452,95453],{"class":38,"line":80},[36,95454,95455],{"class":124},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[36,95457,95458,95460,95462,95464,95466,95468,95470,95472,95474,95476,95478],{"class":38,"line":96},[36,95459,94637],{"class":50},[36,95461,70],{"class":42},[36,95463,94333],{"class":50},[36,95465,1885],{"class":73},[36,95467,2045],{"class":50},[36,95469,2190],{"class":73},[36,95471,94338],{"class":50},[36,95473,1961],{"class":73},[36,95475,2045],{"class":50},[36,95477,1741],{"class":73},[36,95479,1680],{"class":50},[36,95481,95482],{"class":38,"line":101},[36,95483,95484],{"class":124},"#这个重复之后二维变成一维\n",[36,95486,95487,95490,95492],{"class":38,"line":128},[36,95488,95489],{"class":50},"np.repeat(aa,",[36,95491,1747],{"class":73},[36,95493,1680],{"class":50},[36,95495,95496],{"class":38,"line":149},[36,95497,95259],{"class":110},[36,95499,95500],{"class":38,"line":154},[36,95501,95502],{"class":110},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[36,95504,95505],{"class":38,"line":167},[36,95506,95259],{"class":110},[36,95508,95509],{"class":38,"line":172},[36,95510,95511],{"class":124},"#指定axis\n",[36,95513,95514,95516,95518,95520,95522,95524,95526],{"class":38,"line":192},[36,95515,95489],{"class":50},[36,95517,1747],{"class":73},[36,95519,2045],{"class":50},[36,95521,48845],{"class":473},[36,95523,70],{"class":42},[36,95525,1859],{"class":73},[36,95527,1680],{"class":50},[36,95529,95530],{"class":38,"line":211},[36,95531,94895],{"class":124},[36,95533,95534],{"class":38,"line":216},[36,95535,95259],{"class":110},[36,95537,95538],{"class":38,"line":231},[36,95539,95540],{"class":110},"array([[ 1,  2,  3],\n",[36,95542,95543],{"class":38,"line":236},[36,95544,95545],{"class":110},"       [ 1,  2,  3],\n",[36,95547,95548],{"class":38,"line":247},[36,95549,95550],{"class":110},"       [ 4,  5,  6],\n",[36,95552,95553],{"class":38,"line":637},[36,95554,95550],{"class":110},[36,95556,95557],{"class":38,"line":646},[36,95558,95559],{"class":110},"       [ 7,  8,  9],\n",[36,95561,95562],{"class":38,"line":655},[36,95563,95559],{"class":110},[36,95565,95566],{"class":38,"line":660},[36,95567,95568],{"class":110},"       [10, 11, 12],\n",[36,95570,95571],{"class":38,"line":665},[36,95572,95573],{"class":110},"       [10, 11, 12]])\n",[36,95575,95576],{"class":38,"line":674},[36,95577,95259],{"class":110},[36,95579,95580,95582,95584,95586,95588,95590,95592],{"class":38,"line":679},[36,95581,95489],{"class":50},[36,95583,1747],{"class":73},[36,95585,2045],{"class":50},[36,95587,48845],{"class":473},[36,95589,70],{"class":42},[36,95591,1885],{"class":73},[36,95593,1680],{"class":50},[36,95595,95596],{"class":38,"line":692},[36,95597,94895],{"class":124},[36,95599,95600],{"class":38,"line":705},[36,95601,95259],{"class":110},[36,95603,95604],{"class":38,"line":710},[36,95605,95606],{"class":110},"array([[ 1,  1,  2,  2,  3,  3],\n",[36,95608,95609],{"class":38,"line":722},[36,95610,95611],{"class":110},"       [ 4,  4,  5,  5,  6,  6],\n",[36,95613,95614],{"class":38,"line":750},[36,95615,95616],{"class":110},"       [ 7,  7,  8,  8,  9,  9],\n",[36,95618,95619],{"class":38,"line":755},[36,95620,95621],{"class":110},"       [10, 10, 11, 11, 12, 12]])\n",[36,95623,95624],{"class":38,"line":777},[36,95625,95259],{"class":110},[14,95627,95629],{"id":95628},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,95631,95633],{"className":31709,"code":95632,"language":31711,"meta":31,"style":31},"a=np.arange(1,5)\n#array([，2，3，4])\nnp.roll(a,2)#传正数向后调多少位，传负数向前调多少位\n#结果：\n#array([3, 4, 1, 2])\nnp.roll(a,-1)\n#结果：\n#array([2, 3, 4, 1])\n",[33,95634,95635,95651,95656,95668,95672,95677,95687,95691],{"__ignoreMap":31},[36,95636,95637,95639,95641,95643,95645,95647,95649],{"class":38,"line":39},[36,95638,1906],{"class":50},[36,95640,70],{"class":42},[36,95642,94333],{"class":50},[36,95644,1885],{"class":73},[36,95646,2045],{"class":50},[36,95648,1987],{"class":73},[36,95650,1680],{"class":50},[36,95652,95653],{"class":38,"line":54},[36,95654,95655],{"class":124},"#array([，2，3，4])\n",[36,95657,95658,95661,95663,95665],{"class":38,"line":61},[36,95659,95660],{"class":50},"np.roll(a,",[36,95662,1747],{"class":73},[36,95664,2096],{"class":50},[36,95666,95667],{"class":124},"#传正数向后调多少位，传负数向前调多少位\n",[36,95669,95670],{"class":38,"line":80},[36,95671,94895],{"class":124},[36,95673,95674],{"class":38,"line":96},[36,95675,95676],{"class":124},"#array([3, 4, 1, 2])\n",[36,95678,95679,95681,95683,95685],{"class":38,"line":101},[36,95680,95660],{"class":50},[36,95682,2199],{"class":42},[36,95684,1885],{"class":73},[36,95686,1680],{"class":50},[36,95688,95689],{"class":38,"line":128},[36,95690,94895],{"class":124},[36,95692,95693],{"class":38,"line":149},[36,95694,95695],{"class":124},"#array([2, 3, 4, 1])\n",[19,95697,95698],{},[2992,95699],{"alt":31,"src":95700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95702,95704],{"id":95703},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95706,95707],{},"resize()重新调整数组的大小",[19,95709,95710],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,95712,95714],{"className":31709,"code":95713,"language":31711,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,95715,95716,95721,95734],{"__ignoreMap":31},[36,95717,95718],{"class":38,"line":39},[36,95719,95720],{"class":124},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[36,95722,95723,95726,95728,95730,95732],{"class":38,"line":54},[36,95724,95725],{"class":50},"np.resize(aa,(",[36,95727,1747],{"class":73},[36,95729,2045],{"class":50},[36,95731,2012],{"class":73},[36,95733,31828],{"class":50},[36,95735,95736,95738,95740,95742,95744,95746],{"class":38,"line":61},[36,95737,95725],{"class":50},[36,95739,1747],{"class":73},[36,95741,2045],{"class":50},[36,95743,2087],{"class":73},[36,95745,84102],{"class":50},[36,95747,95748],{"class":124},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95750,95752],{"id":95751},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95754,95755],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95757,95758],{},[2992,95759],{"alt":31,"src":95760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95762,95764],{"id":95763},"_126-保存加载文件","12.6 保存加载文件",[19,95766,95767],{},"savetxt():将数据保存到txt文件中",[19,95769,95770],{},"loadtxt():从文件加载数据",[19,95772,95773],{},[2992,95774],{"alt":31,"src":95775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95777,95779],{"id":95778},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95781,95782],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95784,95786],{"id":95785},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95788,95789],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95791,95792],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95794,95795],{},[2992,95796],{"alt":31,"src":95797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95799,95801],{"id":95800},"_129-where语句","12.9 where语句",[19,95803,95804],{},"np.where(条件,x,y)",[19,95806,95807],{},"如果条件为True,对应值为x,否则对应值为y",[19,95809,95810],{},[2992,95811],{"alt":31,"src":95812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95814,95816],{"id":95815},"_1210-dot矩阵","12.10 dot()矩阵",[19,95818,95819],{},[2992,95820],{"alt":31,"src":95821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1592,95823,95824],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":95826},[95827,95828,95829,95830,95831,95832,95833,95834,95835,95836],{"id":95189,"depth":54,"text":95190},{"id":95412,"depth":54,"text":95413},{"id":95628,"depth":54,"text":95629},{"id":95703,"depth":54,"text":95704},{"id":95751,"depth":54,"text":95752},{"id":95763,"depth":54,"text":95764},{"id":95778,"depth":54,"text":95779},{"id":95785,"depth":54,"text":95786},{"id":95800,"depth":54,"text":95801},{"id":95815,"depth":54,"text":95816},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95181,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95843,"title":95844,"body":95845,"description":24706,"extension":1603,"meta":96198,"navigation":57,"path":96199,"seo":96200,"stem":96201,"__hash__":96202},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95846,"toc":96196},[95847,95850,95853,95856,95859,95862,95927,95929,96193],[10,95848,95844],{"id":95849},"_13数组排序",[19,95851,95852],{},"排序主要用到的方法是np.sort和np.argsort",[19,95854,95855],{},"其中np.sort()对数组直接排序",[19,95857,95858],{},"而np.argsort()是返回排序后的原始索引",[19,95860,95861],{},"①一维数组",[26,95863,95865],{"className":31709,"code":95864,"language":31711,"meta":31,"style":31},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[33,95866,95867,95871,95911,95919],{"__ignoreMap":31},[36,95868,95869],{"class":38,"line":39},[36,95870,94436],{"class":124},[36,95872,95873,95875,95877,95879,95881,95883,95885,95887,95889,95891,95893,95895,95897,95899,95901,95903,95905,95907,95909],{"class":38,"line":54},[36,95874,1906],{"class":50},[36,95876,70],{"class":42},[36,95878,94355],{"class":50},[36,95880,1741],{"class":73},[36,95882,2045],{"class":50},[36,95884,2165],{"class":73},[36,95886,2045],{"class":50},[36,95888,2062],{"class":73},[36,95890,2045],{"class":50},[36,95892,2442],{"class":73},[36,95894,2045],{"class":50},[36,95896,1947],{"class":73},[36,95898,2045],{"class":50},[36,95900,2560],{"class":73},[36,95902,2045],{"class":50},[36,95904,2012],{"class":73},[36,95906,2045],{"class":50},[36,95908,2113],{"class":73},[36,95910,6146],{"class":50},[36,95912,95913,95916],{"class":38,"line":61},[36,95914,95915],{"class":50},"np.sort(a)",[36,95917,95918],{"class":124},"#升序排序\n",[36,95920,95921,95924],{"class":38,"line":80},[36,95922,95923],{"class":50},"np.argsort(a)",[36,95925,95926],{"class":124},"#按照元素大小来索引排序\n",[19,95928,94622],{},[26,95930,95932],{"className":31709,"code":95931,"language":31711,"meta":31,"style":31},"np.random.seed(0)#保证每次值一样\naa=np.random.randint(100,size=(4,6))\n#原数组：\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [83, 21, 36, 87, 70, 88],\n       [88, 12, 58, 65, 39, 87],\n       [46, 88, 81, 37, 25, 77]], dtype=int32)\n'''\nnp.sort(aa)#每行进行了排序\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#axis=0时\nnp.sort(aa,axis=0)\n'''\narray([[44, 12, 36, 37, 25,  9],\n       [46, 21, 58, 65, 39, 77],\n       [83, 47, 64, 67, 67, 87],\n       [88, 88, 81, 87, 70, 88]], dtype=int32)\n'''\n#axis=1时,为默认值\nnp.sort(aa,axis=1)\n'''\narray([[ 9, 44, 47, 64, 67, 67],\n       [21, 36, 70, 83, 87, 88],\n       [12, 39, 58, 65, 87, 88],\n       [25, 37, 46, 77, 81, 88]], dtype=int32)\n'''\n#按最后一列排序\nb=aa[:,-1]\n#获取最后一列排好序的索引\nindex=np.argsort(b)\naa[index]\n'''\narray([[44, 47, 64, 67, 67,  9],\n       [46, 88, 81, 37, 25, 77],\n       [88, 12, 58, 65, 39, 87],\n       [83, 21, 36, 87, 70, 88]], dtype=int32)\n'''\n",[33,95933,95934,95946,95972,95977,95981,95986,95991,95996,96001,96005,96013,96017,96022,96027,96032,96037,96041,96046,96059,96063,96068,96073,96078,96083,96087,96092,96104,96108,96112,96116,96120,96124,96128,96133,96148,96153,96162,96167,96171,96175,96180,96184,96189],{"__ignoreMap":31},[36,95935,95936,95939,95941,95943],{"class":38,"line":39},[36,95937,95938],{"class":50},"np.random.seed(",[36,95940,1859],{"class":73},[36,95942,2096],{"class":50},[36,95944,95945],{"class":124},"#保证每次值一样\n",[36,95947,95948,95950,95952,95954,95956,95958,95960,95962,95964,95966,95968,95970],{"class":38,"line":54},[36,95949,94637],{"class":50},[36,95951,70],{"class":42},[36,95953,94445],{"class":50},[36,95955,1979],{"class":73},[36,95957,2045],{"class":50},[36,95959,32827],{"class":473},[36,95961,70],{"class":42},[36,95963,222],{"class":50},[36,95965,1961],{"class":73},[36,95967,2045],{"class":50},[36,95969,2012],{"class":73},[36,95971,31828],{"class":50},[36,95973,95974],{"class":38,"line":61},[36,95975,95976],{"class":124},"#原数组：\n",[36,95978,95979],{"class":38,"line":80},[36,95980,95259],{"class":110},[36,95982,95983],{"class":38,"line":96},[36,95984,95985],{"class":110},"array([[44, 47, 64, 67, 67,  9],\n",[36,95987,95988],{"class":38,"line":101},[36,95989,95990],{"class":110},"       [83, 21, 36, 87, 70, 88],\n",[36,95992,95993],{"class":38,"line":128},[36,95994,95995],{"class":110},"       [88, 12, 58, 65, 39, 87],\n",[36,95997,95998],{"class":38,"line":149},[36,95999,96000],{"class":110},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[36,96002,96003],{"class":38,"line":154},[36,96004,95259],{"class":110},[36,96006,96007,96010],{"class":38,"line":167},[36,96008,96009],{"class":50},"np.sort(aa)",[36,96011,96012],{"class":124},"#每行进行了排序\n",[36,96014,96015],{"class":38,"line":172},[36,96016,95259],{"class":110},[36,96018,96019],{"class":38,"line":192},[36,96020,96021],{"class":110},"array([[ 9, 44, 47, 64, 67, 67],\n",[36,96023,96024],{"class":38,"line":211},[36,96025,96026],{"class":110},"       [21, 36, 70, 83, 87, 88],\n",[36,96028,96029],{"class":38,"line":216},[36,96030,96031],{"class":110},"       [12, 39, 58, 65, 87, 88],\n",[36,96033,96034],{"class":38,"line":231},[36,96035,96036],{"class":110},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[36,96038,96039],{"class":38,"line":236},[36,96040,95259],{"class":110},[36,96042,96043],{"class":38,"line":247},[36,96044,96045],{"class":124},"#axis=0时\n",[36,96047,96048,96051,96053,96055,96057],{"class":38,"line":637},[36,96049,96050],{"class":50},"np.sort(aa,",[36,96052,48845],{"class":473},[36,96054,70],{"class":42},[36,96056,1859],{"class":73},[36,96058,1680],{"class":50},[36,96060,96061],{"class":38,"line":646},[36,96062,95259],{"class":110},[36,96064,96065],{"class":38,"line":655},[36,96066,96067],{"class":110},"array([[44, 12, 36, 37, 25,  9],\n",[36,96069,96070],{"class":38,"line":660},[36,96071,96072],{"class":110},"       [46, 21, 58, 65, 39, 77],\n",[36,96074,96075],{"class":38,"line":665},[36,96076,96077],{"class":110},"       [83, 47, 64, 67, 67, 87],\n",[36,96079,96080],{"class":38,"line":674},[36,96081,96082],{"class":110},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[36,96084,96085],{"class":38,"line":679},[36,96086,95259],{"class":110},[36,96088,96089],{"class":38,"line":692},[36,96090,96091],{"class":124},"#axis=1时,为默认值\n",[36,96093,96094,96096,96098,96100,96102],{"class":38,"line":705},[36,96095,96050],{"class":50},[36,96097,48845],{"class":473},[36,96099,70],{"class":42},[36,96101,1885],{"class":73},[36,96103,1680],{"class":50},[36,96105,96106],{"class":38,"line":710},[36,96107,95259],{"class":110},[36,96109,96110],{"class":38,"line":722},[36,96111,96021],{"class":110},[36,96113,96114],{"class":38,"line":750},[36,96115,96026],{"class":110},[36,96117,96118],{"class":38,"line":755},[36,96119,96031],{"class":110},[36,96121,96122],{"class":38,"line":777},[36,96123,96036],{"class":110},[36,96125,96126],{"class":38,"line":802},[36,96127,95259],{"class":110},[36,96129,96130],{"class":38,"line":807},[36,96131,96132],{"class":124},"#按最后一列排序\n",[36,96134,96135,96137,96139,96142,96144,96146],{"class":38,"line":818},[36,96136,1931],{"class":50},[36,96138,70],{"class":42},[36,96140,96141],{"class":50},"aa[:,",[36,96143,2199],{"class":42},[36,96145,1885],{"class":73},[36,96147,34577],{"class":50},[36,96149,96150],{"class":38,"line":843},[36,96151,96152],{"class":124},"#获取最后一列排好序的索引\n",[36,96154,96155,96157,96159],{"class":38,"line":848},[36,96156,75389],{"class":50},[36,96158,70],{"class":42},[36,96160,96161],{"class":50},"np.argsort(b)\n",[36,96163,96164],{"class":38,"line":859},[36,96165,96166],{"class":50},"aa[index]\n",[36,96168,96169],{"class":38,"line":864},[36,96170,95259],{"class":110},[36,96172,96173],{"class":38,"line":873},[36,96174,95985],{"class":110},[36,96176,96177],{"class":38,"line":9454},[36,96178,96179],{"class":110},"       [46, 88, 81, 37, 25, 77],\n",[36,96181,96182],{"class":38,"line":9481},[36,96183,95995],{"class":110},[36,96185,96186],{"class":38,"line":9486},[36,96187,96188],{"class":110},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[36,96190,96191],{"class":38,"line":9492},[36,96192,95259],{"class":110},[1592,96194,96195],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":96197},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95844,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96204,"title":96205,"body":96206,"description":24706,"extension":1603,"meta":96236,"navigation":57,"path":96237,"seo":96238,"stem":96239,"__hash__":96240},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96207,"toc":96234},[96208,96211,96214,96217,96220,96223,96226,96229],[10,96209,96205],{"id":96210},"_14广播机制",[19,96212,96213],{},"广播的规则：",[19,96215,96216],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96218,96219],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96221,96222],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96224,96225],{},"3.如果没有维度形状为1，则会引发异常",[19,96227,96228],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96230,96231],{},[2992,96232],{"alt":31,"src":96233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":54,"depth":54,"links":96235},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96205,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96242,"title":96243,"body":96244,"description":24706,"extension":1603,"meta":96342,"navigation":57,"path":96343,"seo":96344,"stem":96345,"__hash__":96346},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96245,"toc":96340},[96246,96249,96252,96337],[10,96247,96243],{"id":96248},"_15比较掩码",[19,96250,96251],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,96253,96255],{"className":31709,"code":96254,"language":31711,"meta":31,"style":31},"a=np.array([[1,2,3],[11,12,13],[21,22,23]])\na\u003C20#结果是一个由True,False组成的数组\na[a\u003C20]#小于20的元素会存到这个数组中\n#结果：\n#array([ 1,  2,  3, 11, 12, 13])\n",[33,96256,96257,96303,96314,96328,96332],{"__ignoreMap":31},[36,96258,96259,96261,96263,96266,96268,96270,96272,96274,96276,96278,96280,96282,96284,96286,96288,96290,96292,96294,96296,96298,96300],{"class":38,"line":39},[36,96260,1906],{"class":50},[36,96262,70],{"class":42},[36,96264,96265],{"class":50},"np.array([[",[36,96267,1885],{"class":73},[36,96269,2045],{"class":50},[36,96271,1747],{"class":73},[36,96273,2045],{"class":50},[36,96275,1741],{"class":73},[36,96277,49361],{"class":50},[36,96279,2139],{"class":73},[36,96281,2045],{"class":50},[36,96283,2165],{"class":73},[36,96285,2045],{"class":50},[36,96287,2190],{"class":73},[36,96289,49361],{"class":50},[36,96291,2392],{"class":73},[36,96293,2045],{"class":50},[36,96295,2417],{"class":73},[36,96297,2045],{"class":50},[36,96299,2442],{"class":73},[36,96301,96302],{"class":50},"]])\n",[36,96304,96305,96307,96309,96311],{"class":38,"line":54},[36,96306,1906],{"class":50},[36,96308,2577],{"class":42},[36,96310,2367],{"class":73},[36,96312,96313],{"class":124},"#结果是一个由True,False组成的数组\n",[36,96315,96316,96319,96321,96323,96325],{"class":38,"line":61},[36,96317,96318],{"class":50},"a[a",[36,96320,2577],{"class":42},[36,96322,2367],{"class":73},[36,96324,2607],{"class":50},[36,96326,96327],{"class":124},"#小于20的元素会存到这个数组中\n",[36,96329,96330],{"class":38,"line":80},[36,96331,94895],{"class":124},[36,96333,96334],{"class":38,"line":96},[36,96335,96336],{"class":124},"#array([ 1,  2,  3, 11, 12, 13])\n",[1592,96338,96339],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":96341},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96243,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96348,"title":96349,"body":96350,"description":24706,"extension":1603,"meta":96442,"navigation":57,"path":96443,"seo":96444,"stem":96445,"__hash__":96446},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96351,"toc":96440},[96352,96355,96358,96361,96364,96367,96432,96437],[10,96353,96349],{"id":96354},"_16魔法命令time",[19,96356,96357],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96359,96360],{},"%:行模式",[19,96362,96363],{},"%%:单元格模式",[19,96365,96366],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,96368,96370],{"className":31709,"code":96369,"language":31711,"meta":31,"style":31},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[33,96371,96372,96377,96384,96389,96398,96411,96415,96423],{"__ignoreMap":31},[36,96373,96374],{"class":38,"line":39},[36,96375,96376],{"class":124},"#程序执行时间\n",[36,96378,96379,96381],{"class":38,"line":54},[36,96380,31723],{"class":42},[36,96382,96383],{"class":50}," time \n",[36,96385,96386],{"class":38,"line":61},[36,96387,96388],{"class":124},"#获取时间\n",[36,96390,96391,96394,96396],{"class":38,"line":80},[36,96392,96393],{"class":50},"start",[36,96395,70],{"class":42},[36,96397,33749],{"class":50},[36,96399,96400,96403,96406,96408],{"class":38,"line":96},[36,96401,96402],{"class":50},"time.sleep(",[36,96404,96405],{"class":73},"0.4",[36,96407,2096],{"class":50},[36,96409,96410],{"class":124},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[36,96412,96413],{"class":38,"line":101},[36,96414,96388],{"class":124},[36,96416,96417,96419,96421],{"class":38,"line":128},[36,96418,47132],{"class":50},[36,96420,70],{"class":42},[36,96422,33749],{"class":50},[36,96424,96425,96427,96429],{"class":38,"line":149},[36,96426,47132],{"class":50},[36,96428,2199],{"class":42},[36,96430,96431],{"class":50},"start\n",[19,96433,96434],{},[2992,96435],{"alt":31,"src":96436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1592,96438,96439],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":96441},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96349,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96448,"title":96449,"body":96450,"description":24706,"extension":1603,"meta":96485,"navigation":57,"path":96486,"seo":96487,"stem":96488,"__hash__":96489},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96451,"toc":96483},[96452,96455,96458,96461,96464,96467,96470,96473,96478],[10,96453,96449],{"id":96454},"_17魔法命令timeit",[19,96456,96457],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96459,96460],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96462,96463],{},"单元格模式：",[19,96465,96466],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96468,96469],{},"初始化语句执行次数由轮数来决定",[19,96471,96472],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96474,96475],{},[2992,96476],{"alt":31,"src":96477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96479,96480],{},[2992,96481],{"alt":31,"src":96482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":54,"depth":54,"links":96484},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96449,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96491,"title":96492,"body":96493,"description":24706,"extension":1603,"meta":96511,"navigation":57,"path":96512,"seo":96513,"stem":96514,"__hash__":96515},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96494,"toc":96509},[96495,96498,96501,96504],[10,96496,96492],{"id":96497},"_18魔法命令writefile和run",[19,96499,96500],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96502,96503],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96505,96506],{},[2992,96507],{"alt":31,"src":96508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":54,"depth":54,"links":96510},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96492,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96517,"title":96518,"body":96519,"description":24706,"extension":1603,"meta":96572,"navigation":57,"path":96573,"seo":96574,"stem":96575,"__hash__":96576},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96520,"toc":96570},[96521,96524,96527,96529,96532,96535,96540,96543,96546,96549,96552,96555,96558,96561,96564,96567],[10,96522,96518],{"id":96523},"_19魔法命令memit",[19,96525,96526],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96528,25930],{},[19,96530,96531],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96533,96534],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96536,96537],{},[2992,96538],{"alt":31,"src":96539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96541,96542],{},"补充：",[19,96544,96545],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96547,96548],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96550,96551],{},"解决方法：",[19,96553,96554],{},"1.cmd",[19,96556,96557],{},"2.依次输入以下代码：",[19,96559,96560],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96562,96563],{},"pip install --upgrade ipython",[19,96565,96566],{},"#升级 memory_profiler 和 setuptools",[19,96568,96569],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":54,"depth":54,"links":96571},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96518,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96578,"title":96579,"body":96580,"description":24706,"extension":1603,"meta":98226,"navigation":57,"path":98227,"seo":98228,"stem":98229,"__hash__":98230},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96581,"toc":98196},[96582,96585,96589,96593,96654,96657,96662,96666,96671,96676,96681,96686,96689,96694,96698,96702,96735,96738,96741,96744,96796,96799,96835,96838,96880,96884,96905,96907,96944,96946,96951,96953,96958,96962,96965,96993,96997,97001,97054,97058,97150,97154,97158,97161,97166,97170,97195,97200,97204,97207,97210,97213,97216,97219,97222,97225,97237,97241,97245,97248,97280,97283,97306,97309,97335,97338,97364,97367,97401,97404,97466,97470,97473,97477,97480,97506,97509,97512,97517,97520,97589,97591,97596,97657,97660,97671,97677,97682,97686,97689,97702,97706,97721,97723,97746,97748,97774,97777,97780,97783,97831,97833,97838,97842,97846,97873,97877,97904,97907,97912,97917,98007,98011,98069,98074,98077,98080,98122,98126,98182,98187,98190,98193],[10,96583,96579],{"id":96584},"_2创建数组",[14,96586,96588],{"id":96587},"_21-array函数创建数组","2.1 array()函数创建数组",[1645,96590,96592],{"id":96591},"_221-函数语句","2.2.1 函数语句",[26,96594,96596],{"className":31709,"code":96595,"language":31711,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[33,96597,96598],{"__ignoreMap":31},[36,96599,96600,96603,96606,96608,96610,96612,96614,96616,96619,96621,96624,96626,96629,96631,96633,96635,96638,96640,96643,96645,96648,96650,96652],{"class":38,"line":39},[36,96601,96602],{"class":50},"numpy.array(",[36,96604,96605],{"class":73},"object",[36,96607,477],{"class":50},[36,96609,94831],{"class":473},[36,96611,14893],{"class":42},[36,96613,40264],{"class":73},[36,96615,477],{"class":50},[36,96617,96618],{"class":473},"copy",[36,96620,14893],{"class":42},[36,96622,96623],{"class":73}," True",[36,96625,477],{"class":50},[36,96627,96628],{"class":473},"order",[36,96630,14893],{"class":42},[36,96632,40264],{"class":73},[36,96634,477],{"class":50},[36,96636,96637],{"class":473},"subok",[36,96639,14893],{"class":42},[36,96641,96642],{"class":73}," False",[36,96644,477],{"class":50},[36,96646,96647],{"class":473},"ndmin",[36,96649,14893],{"class":42},[36,96651,242],{"class":73},[36,96653,1680],{"class":50},[19,96655,96656],{},"参数：",[19,96658,96659],{},[2992,96660],{"alt":31,"src":96661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[1645,96663,96665],{"id":96664},"_222-实例","2.2.2 实例",[19,96667,96668],{},[2992,96669],{"alt":31,"src":96670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96672,96673],{},[2992,96674],{"alt":31,"src":96675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96677,96678],{},[2992,96679],{"alt":31,"src":96680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96682,96683],{},[2992,96684],{"alt":31,"src":96685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96687,96688],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96690,96691],{},[2992,96692],{"alt":31,"src":96693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96695,96697],{"id":96696},"_22-随机数创建数组","2.2 随机数创建数组",[1645,96699,96701],{"id":96700},"_221-random语句","2.2.1 random语句",[26,96703,96705],{"className":31709,"code":96704,"language":31711,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[33,96706,96707,96712,96717,96725,96730],{"__ignoreMap":31},[36,96708,96709],{"class":38,"line":39},[36,96710,96711],{"class":124},"#random.random()\n",[36,96713,96714],{"class":38,"line":54},[36,96715,96716],{"class":124},"#确定随机种子,就是每次运行结果是相同的\n",[36,96718,96719,96721,96723],{"class":38,"line":61},[36,96720,95938],{"class":50},[36,96722,1859],{"class":73},[36,96724,1680],{"class":50},[36,96726,96727],{"class":38,"line":80},[36,96728,96729],{"class":50},"np.random.random()\n",[36,96731,96732],{"class":38,"line":96},[36,96733,96734],{"class":124},"#生成一个随机的数目\n",[19,96736,96737],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96739,96740],{},"可以指定数组形状 size",[19,96742,96743],{},"①生成一维数组",[26,96745,96747],{"className":31709,"code":96746,"language":31711,"meta":31,"style":31},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[33,96748,96749,96754,96767,96772,96788],{"__ignoreMap":31},[36,96750,96751],{"class":38,"line":39},[36,96752,96753],{"class":124},"#random.random(size())\n",[36,96755,96756,96759,96761,96763,96765],{"class":38,"line":54},[36,96757,96758],{"class":50},"np.random.random(",[36,96760,32827],{"class":473},[36,96762,70],{"class":42},[36,96764,1987],{"class":73},[36,96766,1680],{"class":50},[36,96768,96769],{"class":38,"line":61},[36,96770,96771],{"class":124},"#生成一位的五个元素\n",[36,96773,96774,96776,96778,96780,96782,96784,96786],{"class":38,"line":80},[36,96775,1906],{"class":50},[36,96777,70],{"class":42},[36,96779,96758],{"class":50},[36,96781,32827],{"class":473},[36,96783,70],{"class":42},[36,96785,1961],{"class":73},[36,96787,1680],{"class":50},[36,96789,96790,96793],{"class":38,"line":96},[36,96791,96792],{"class":50},"a.shape ",[36,96794,96795],{"class":124},"#输出数组形状\n",[19,96797,96798],{},"②生成二维数组",[26,96800,96802],{"className":31709,"code":96801,"language":31711,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[33,96803,96804,96808,96830],{"__ignoreMap":31},[36,96805,96806],{"class":38,"line":39},[36,96807,94632],{"class":124},[36,96809,96810,96812,96814,96816,96818,96820,96822,96824,96826,96828],{"class":38,"line":54},[36,96811,94637],{"class":50},[36,96813,70],{"class":42},[36,96815,96758],{"class":50},[36,96817,32827],{"class":473},[36,96819,70],{"class":42},[36,96821,222],{"class":50},[36,96823,1961],{"class":73},[36,96825,2045],{"class":50},[36,96827,1987],{"class":73},[36,96829,31828],{"class":50},[36,96831,96832],{"class":38,"line":61},[36,96833,96834],{"class":124},"#生成四行五列的数组\n",[19,96836,96837],{},"③生成三维数组",[26,96839,96841],{"className":31709,"code":96840,"language":31711,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[33,96842,96843,96848,96875],{"__ignoreMap":31},[36,96844,96845],{"class":38,"line":39},[36,96846,96847],{"class":124},"#三维数组\n",[36,96849,96850,96853,96855,96857,96859,96861,96863,96865,96867,96869,96871,96873],{"class":38,"line":54},[36,96851,96852],{"class":50},"aaa",[36,96854,70],{"class":42},[36,96856,96758],{"class":50},[36,96858,32827],{"class":473},[36,96860,70],{"class":42},[36,96862,222],{"class":50},[36,96864,1747],{"class":73},[36,96866,2045],{"class":50},[36,96868,1741],{"class":73},[36,96870,2045],{"class":50},[36,96872,1961],{"class":73},[36,96874,31828],{"class":50},[36,96876,96877],{"class":38,"line":61},[36,96878,96879],{"class":50},"aaa.shape\n",[1645,96881,96883],{"id":96882},"_222-randint语句","2.2.2 randint语句",[26,96885,96887],{"className":31709,"code":96886,"language":31711,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[33,96888,96889,96894],{"__ignoreMap":31},[36,96890,96891],{"class":38,"line":39},[36,96892,96893],{"class":124},"#生成随机的整数 random.randint(low,high,size)\n",[36,96895,96896,96898,96900,96902],{"class":38,"line":54},[36,96897,94445],{"class":50},[36,96899,1987],{"class":73},[36,96901,15043],{"class":50},[36,96903,96904],{"class":124},"#0~5中的随机一个数\n",[19,96906,96743],{},[26,96908,96910],{"className":31709,"code":96909,"language":31711,"meta":31,"style":31},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[33,96911,96912,96917,96939],{"__ignoreMap":31},[36,96913,96914],{"class":38,"line":39},[36,96915,96916],{"class":124},"#一维\n",[36,96918,96919,96921,96923,96925,96927,96929,96931,96933,96935,96937],{"class":38,"line":54},[36,96920,94445],{"class":50},[36,96922,1885],{"class":73},[36,96924,2045],{"class":50},[36,96926,2139],{"class":73},[36,96928,2045],{"class":50},[36,96930,32827],{"class":473},[36,96932,70],{"class":42},[36,96934,222],{"class":50},[36,96936,2113],{"class":73},[36,96938,31828],{"class":50},[36,96940,96941],{"class":38,"line":61},[36,96942,96943],{"class":124},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96945,96798],{},[19,96947,96948],{},[2992,96949],{"alt":31,"src":96950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96952,96837],{},[19,96954,96955],{},[2992,96956],{"alt":31,"src":96957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[1645,96959,96961],{"id":96960},"_222-rand语句","2.2.2 rand语句",[19,96963,96964],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,96966,96968],{"className":31709,"code":96967,"language":31711,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,96969,96970,96983,96988],{"__ignoreMap":31},[36,96971,96972,96975,96977,96979,96981],{"class":38,"line":39},[36,96973,96974],{"class":50},"np.random.rand(",[36,96976,1979],{"class":73},[36,96978,2045],{"class":50},[36,96980,2113],{"class":73},[36,96982,1680],{"class":50},[36,96984,96985],{"class":38,"line":54},[36,96986,96987],{"class":124},"#第一个参数100：行数，表示有100个样本\n",[36,96989,96990],{"class":38,"line":61},[36,96991,96992],{"class":124},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96994,96996],{"id":96995},"_23-arange创建数组","2.3 arange()创建数组",[1645,96998,97000],{"id":96999},"_231-函数语句","2.3.1 函数语句",[26,97002,97004],{"className":31709,"code":97003,"language":31711,"meta":31,"style":31},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[33,97005,97006,97020,97025,97030,97035,97040,97045,97050],{"__ignoreMap":31},[36,97007,97008,97011,97013,97015,97018],{"class":38,"line":39},[36,97009,97010],{"class":50},"numpy.arange([start,] stop[, step], ",[36,97012,94831],{"class":473},[36,97014,70],{"class":42},[36,97016,97017],{"class":73},"None",[36,97019,1680],{"class":50},[36,97021,97022],{"class":38,"line":54},[36,97023,97024],{"class":124},"#参数\n",[36,97026,97027],{"class":38,"line":61},[36,97028,97029],{"class":110},"\"\"\"\n",[36,97031,97032],{"class":38,"line":80},[36,97033,97034],{"class":110},"start:起始值，可选，默认从 0 开始。\n",[36,97036,97037],{"class":38,"line":96},[36,97038,97039],{"class":110},"stop:结束值（不包含该值）。\n",[36,97041,97042],{"class":38,"line":101},[36,97043,97044],{"class":110},"step:步长，可选，默认是 1。可以为浮点数。\n",[36,97046,97047],{"class":38,"line":128},[36,97048,97049],{"class":110},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[36,97051,97052],{"class":38,"line":149},[36,97053,97029],{"class":110},[1645,97055,97057],{"id":97056},"_232-实例","2.3.2 实例",[26,97059,97061],{"className":31709,"code":97060,"language":31711,"meta":31,"style":31},"#创建一维数组\nnp.arange(1,21,1,dtype=int)\n#输出结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n#创建二维数组\nnp.array([np.arange(1,4),np.arange(4,7)])\n#结果：\n\"\"\"\narray([[1, 2, 3],\n       [4, 5, 6]])\n\"\"\"\n",[33,97062,97063,97067,97091,97096,97101,97105,97128,97132,97136,97141,97146],{"__ignoreMap":31},[36,97064,97065],{"class":38,"line":39},[36,97066,94436],{"class":124},[36,97068,97069,97071,97073,97075,97077,97079,97081,97083,97085,97087,97089],{"class":38,"line":54},[36,97070,94333],{"class":50},[36,97072,1885],{"class":73},[36,97074,2045],{"class":50},[36,97076,2392],{"class":73},[36,97078,2045],{"class":50},[36,97080,1885],{"class":73},[36,97082,2045],{"class":50},[36,97084,94831],{"class":473},[36,97086,70],{"class":42},[36,97088,43],{"class":73},[36,97090,1680],{"class":50},[36,97092,97093],{"class":38,"line":61},[36,97094,97095],{"class":124},"#输出结果：\n",[36,97097,97098],{"class":38,"line":80},[36,97099,97100],{"class":124},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[36,97102,97103],{"class":38,"line":96},[36,97104,95278],{"class":124},[36,97106,97107,97110,97112,97114,97116,97119,97121,97123,97125],{"class":38,"line":101},[36,97108,97109],{"class":50},"np.array([np.arange(",[36,97111,1885],{"class":73},[36,97113,2045],{"class":50},[36,97115,1961],{"class":73},[36,97117,97118],{"class":50},"),np.arange(",[36,97120,1961],{"class":73},[36,97122,2045],{"class":50},[36,97124,2036],{"class":73},[36,97126,97127],{"class":50},")])\n",[36,97129,97130],{"class":38,"line":128},[36,97131,94895],{"class":124},[36,97133,97134],{"class":38,"line":149},[36,97135,97029],{"class":110},[36,97137,97138],{"class":38,"line":154},[36,97139,97140],{"class":110},"array([[1, 2, 3],\n",[36,97142,97143],{"class":38,"line":167},[36,97144,97145],{"class":110},"       [4, 5, 6]])\n",[36,97147,97148],{"class":38,"line":172},[36,97149,97029],{"class":110},[14,97151,97153],{"id":97152},"_24-生态分布","2.4 生态分布",[1645,97155,97157],{"id":97156},"_241-标准正态分布","2.4.1 标准正态分布",[19,97159,97160],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97162,97163],{},[2992,97164],{"alt":31,"src":97165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[1645,97167,97169],{"id":97168},"_242-常规正态分布","2.4.2 常规正态分布",[26,97171,97173],{"className":31709,"code":97172,"language":31711,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[33,97174,97175,97180,97185,97190],{"__ignoreMap":31},[36,97176,97177],{"class":38,"line":39},[36,97178,97179],{"class":50},"random.normal(loc,scale,size)也可以生成正态分布\n",[36,97181,97182],{"class":38,"line":54},[36,97183,97184],{"class":124},"#loc:期望\n",[36,97186,97187],{"class":38,"line":61},[36,97188,97189],{"class":124},"#scale:方差\n",[36,97191,97192],{"class":38,"line":80},[36,97193,97194],{"class":124},"#size:用于确定是几维的数列\n",[19,97196,97197],{},[2992,97198],{"alt":31,"src":97199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97201,97203],{"id":97202},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97205,97206],{},"ndim:秩，维度个数",[19,97208,97209],{},"size:数组元素的个数",[19,97211,97212],{},"shape:数组的形状",[19,97214,97215],{},"dtype:数组元素的类型",[19,97217,97218],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97220,97221],{},"他们都是属性，通过数组.属性的形式来确定",[19,97223,97224],{},"如果需要输出多个可以通过以下方式：",[26,97226,97228],{"className":31709,"code":97227,"language":31711,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,97229,97230],{"__ignoreMap":31},[36,97231,97232,97234],{"class":38,"line":39},[36,97233,31746],{"class":73},[36,97235,97236],{"class":50},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97238,97240],{"id":97239},"_26-其他方式创建数组","2.6 其他方式创建数组",[1645,97242,97244],{"id":97243},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97246,97247],{},"①创建一维数组",[26,97249,97251],{"className":31709,"code":97250,"language":31711,"meta":31,"style":31},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[33,97252,97253,97262,97266,97271,97276],{"__ignoreMap":31},[36,97254,97255,97258,97260],{"class":38,"line":39},[36,97256,97257],{"class":50},"np.zeros(",[36,97259,2113],{"class":73},[36,97261,1680],{"class":50},[36,97263,97264],{"class":38,"line":54},[36,97265,97029],{"class":110},[36,97267,97268],{"class":38,"line":61},[36,97269,97270],{"class":110},"输出结果：\n",[36,97272,97273],{"class":38,"line":80},[36,97274,97275],{"class":110},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[36,97277,97278],{"class":38,"line":96},[36,97279,97029],{"class":110},[19,97281,97282],{},"上方代码等价于：",[26,97284,97286],{"className":31709,"code":97285,"language":31711,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[33,97287,97288],{"__ignoreMap":31},[36,97289,97290,97292,97295,97297,97299,97301,97303],{"class":38,"line":39},[36,97291,97257],{"class":50},[36,97293,97294],{"class":473},"shape",[36,97296,70],{"class":42},[36,97298,222],{"class":50},[36,97300,2113],{"class":73},[36,97302,84102],{"class":50},[36,97304,97305],{"class":124},"#创建10个元素的0数组\n",[19,97307,97308],{},"也可以指定类型",[26,97310,97312],{"className":31709,"code":97311,"language":31711,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[33,97313,97314,97319],{"__ignoreMap":31},[36,97315,97316],{"class":38,"line":39},[36,97317,97318],{"class":124},"#指定类型\n",[36,97320,97321,97323,97325,97327,97329,97331,97333],{"class":38,"line":54},[36,97322,97257],{"class":50},[36,97324,1987],{"class":73},[36,97326,2045],{"class":50},[36,97328,94831],{"class":473},[36,97330,70],{"class":42},[36,97332,43],{"class":73},[36,97334,1680],{"class":50},[19,97336,97337],{},"②创建二维数组",[26,97339,97341],{"className":31709,"code":97340,"language":31711,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[33,97342,97343],{"__ignoreMap":31},[36,97344,97345,97348,97350,97352,97354,97356,97358,97360,97362],{"class":38,"line":39},[36,97346,97347],{"class":50},"np.zeros((",[36,97349,1741],{"class":73},[36,97351,2045],{"class":50},[36,97353,1961],{"class":73},[36,97355,43587],{"class":50},[36,97357,94831],{"class":473},[36,97359,70],{"class":42},[36,97361,43],{"class":73},[36,97363,1680],{"class":50},[19,97365,97366],{},"③创建三维数组",[26,97368,97370],{"className":31709,"code":97369,"language":31711,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[33,97371,97372,97377],{"__ignoreMap":31},[36,97373,97374],{"class":38,"line":39},[36,97375,97376],{"class":124},"#创建三维数组\n",[36,97378,97379,97381,97383,97385,97387,97389,97391,97393,97395,97397,97399],{"class":38,"line":54},[36,97380,97347],{"class":50},[36,97382,1741],{"class":73},[36,97384,2045],{"class":50},[36,97386,1961],{"class":73},[36,97388,2045],{"class":50},[36,97390,1987],{"class":73},[36,97392,43587],{"class":50},[36,97394,94831],{"class":473},[36,97396,70],{"class":42},[36,97398,43],{"class":73},[36,97400,1680],{"class":50},[19,97402,97403],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,97405,97407],{"className":31709,"code":97406,"language":31711,"meta":31,"style":31},"#使用zeros_like将创建的一维数组变成全0的数组\na=np.arange(4)#这个得到的结果：一维数组0，1，2，3\nnp.zeros_like(a)\n#使用zeros_like将创建的二维数组变成全0的数组\naa=np.random.random(size=(4,5))\nnp.zeros_like(aa)\n",[33,97408,97409,97414,97429,97434,97439,97461],{"__ignoreMap":31},[36,97410,97411],{"class":38,"line":39},[36,97412,97413],{"class":124},"#使用zeros_like将创建的一维数组变成全0的数组\n",[36,97415,97416,97418,97420,97422,97424,97426],{"class":38,"line":54},[36,97417,1906],{"class":50},[36,97419,70],{"class":42},[36,97421,94333],{"class":50},[36,97423,1961],{"class":73},[36,97425,2096],{"class":50},[36,97427,97428],{"class":124},"#这个得到的结果：一维数组0，1，2，3\n",[36,97430,97431],{"class":38,"line":61},[36,97432,97433],{"class":50},"np.zeros_like(a)\n",[36,97435,97436],{"class":38,"line":80},[36,97437,97438],{"class":124},"#使用zeros_like将创建的二维数组变成全0的数组\n",[36,97440,97441,97443,97445,97447,97449,97451,97453,97455,97457,97459],{"class":38,"line":96},[36,97442,94637],{"class":50},[36,97444,70],{"class":42},[36,97446,96758],{"class":50},[36,97448,32827],{"class":473},[36,97450,70],{"class":42},[36,97452,222],{"class":50},[36,97454,1961],{"class":73},[36,97456,2045],{"class":50},[36,97458,1987],{"class":73},[36,97460,31828],{"class":50},[36,97462,97463],{"class":38,"line":101},[36,97464,97465],{"class":50},"np.zeros_like(aa)\n",[1645,97467,97469],{"id":97468},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97471,97472],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[1645,97474,97476],{"id":97475},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97478,97479],{},"①empty()用法",[26,97481,97483],{"className":31709,"code":97482,"language":31711,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[33,97484,97485],{"__ignoreMap":31},[36,97486,97487,97490,97492,97494,97496,97498,97500,97502,97504],{"class":38,"line":39},[36,97488,97489],{"class":50},"numpy.empty(shape,",[36,97491,94831],{"class":473},[36,97493,70],{"class":42},[36,97495,1713],{"class":73},[36,97497,2045],{"class":50},[36,97499,96628],{"class":473},[36,97501,70],{"class":42},[36,97503,77359],{"class":110},[36,97505,1680],{"class":50},[19,97507,97508],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97510,97511],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97513,97514],{},[2992,97515],{"alt":31,"src":97516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97518,97519],{},"②empty()用法",[26,97521,97523],{"className":31709,"code":97522,"language":31711,"meta":31,"style":31},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[33,97524,97525,97546,97558,97579,97584],{"__ignoreMap":31},[36,97526,97527,97529,97531,97534,97536,97538,97540,97542,97544],{"class":38,"line":39},[36,97528,2512],{"class":50},[36,97530,70],{"class":42},[36,97532,97533],{"class":50},"np.empty(",[36,97535,2113],{"class":73},[36,97537,2045],{"class":50},[36,97539,94831],{"class":473},[36,97541,70],{"class":42},[36,97543,43],{"class":73},[36,97545,1680],{"class":50},[36,97547,97548,97550,97552,97554,97556],{"class":38,"line":54},[36,97549,2487],{"class":50},[36,97551,70],{"class":42},[36,97553,94333],{"class":50},[36,97555,1987],{"class":73},[36,97557,1680],{"class":50},[36,97559,97560,97563,97565,97568,97570,97572,97575,97577],{"class":38,"line":61},[36,97561,97562],{"class":50},"np.add(",[36,97564,1747],{"class":73},[36,97566,97567],{"class":50},",x,",[36,97569,94385],{"class":473},[36,97571,70],{"class":42},[36,97573,97574],{"class":50},"y[:",[36,97576,1987],{"class":73},[36,97578,6146],{"class":50},[36,97580,97581],{"class":38,"line":80},[36,97582,97583],{"class":124},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[36,97585,97586],{"class":38,"line":96},[36,97587,97588],{"class":50},"y\n",[19,97590,12969],{},[19,97592,97593],{},[2992,97594],{"alt":31,"src":97595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,97597,97599],{"className":31709,"code":97598,"language":31711,"meta":31,"style":31},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[33,97600,97601,97617,97637,97652],{"__ignoreMap":31},[36,97602,97603,97605,97607,97609,97611,97613,97615],{"class":38,"line":39},[36,97604,2487],{"class":50},[36,97606,70],{"class":42},[36,97608,94333],{"class":50},[36,97610,1885],{"class":73},[36,97612,2045],{"class":50},[36,97614,2012],{"class":73},[36,97616,1680],{"class":50},[36,97618,97619,97621,97623,97625,97627,97629,97631,97633,97635],{"class":38,"line":54},[36,97620,2512],{"class":50},[36,97622,70],{"class":42},[36,97624,97533],{"class":50},[36,97626,1987],{"class":73},[36,97628,2045],{"class":50},[36,97630,94831],{"class":473},[36,97632,70],{"class":42},[36,97634,43],{"class":73},[36,97636,1680],{"class":50},[36,97638,97639,97642,97644,97646,97648,97650],{"class":38,"line":61},[36,97640,97641],{"class":50},"np.add(x,",[36,97643,1747],{"class":73},[36,97645,2045],{"class":50},[36,97647,94385],{"class":473},[36,97649,70],{"class":42},[36,97651,94780],{"class":50},[36,97653,97654],{"class":38,"line":80},[36,97655,97656],{"class":124},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97658,97659],{},"③empty_like()",[19,97661,97662],{},[887,97663,97664,97665,97670],{},"创建一个",[887,97666,97667],{},[887,97668,97669],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97672,97673,97676],{},[33,97674,97675],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97678,97679],{},[2992,97680],{"alt":31,"src":97681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[1645,97683,97685],{"id":97684},"_264-用法","2.6.4 ？？用法",[19,97687,97688],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,97690,97692],{"className":31709,"code":97691,"language":31711,"meta":31,"style":31},"np.full??\n",[33,97693,97694],{"__ignoreMap":31},[36,97695,97696,97699],{"class":38,"line":39},[36,97697,97698],{"class":50},"np.full",[36,97700,97701],{"class":78734},"??\n",[1645,97703,97705],{"id":97704},"_265-full创建数组","2.6.5 full()创建数组",[26,97707,97709],{"className":31709,"code":97708,"language":31711,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[33,97710,97711,97716],{"__ignoreMap":31},[36,97712,97713],{"class":38,"line":39},[36,97714,97715],{"class":50},"full(shape,fill_value)\n",[36,97717,97718],{"class":38,"line":54},[36,97719,97720],{"class":50},"创建全为某个指定值的数组\n",[19,97722,95861],{},[26,97724,97726],{"className":31709,"code":97725,"language":31711,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[33,97727,97728,97733],{"__ignoreMap":31},[36,97729,97730],{"class":38,"line":39},[36,97731,97732],{"class":124},"#创建一个一维数组,以20进行填充\n",[36,97734,97735,97738,97740,97742,97744],{"class":38,"line":54},[36,97736,97737],{"class":50},"np.full(",[36,97739,2113],{"class":73},[36,97741,2045],{"class":50},[36,97743,2367],{"class":73},[36,97745,1680],{"class":50},[19,97747,94622],{},[26,97749,97751],{"className":31709,"code":97750,"language":31711,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[33,97752,97753,97757],{"__ignoreMap":31},[36,97754,97755],{"class":38,"line":39},[36,97756,95278],{"class":124},[36,97758,97759,97762,97764,97766,97768,97770,97772],{"class":38,"line":54},[36,97760,97761],{"class":50},"np.full((",[36,97763,1741],{"class":73},[36,97765,2045],{"class":50},[36,97767,1987],{"class":73},[36,97769,43587],{"class":50},[36,97771,2139],{"class":73},[36,97773,1680],{"class":50},[19,97775,97776],{},"③full_like用法",[19,97778,97779],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97781,97782],{},"这里是指定填充而已",[26,97784,97786],{"className":31709,"code":97785,"language":31711,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[33,97787,97788,97793,97817,97822],{"__ignoreMap":31},[36,97789,97790],{"class":38,"line":39},[36,97791,97792],{"class":124},"#创建一个指定形状数组\n",[36,97794,97795,97797,97799,97801,97803,97805,97807,97809,97811,97813,97815],{"class":38,"line":54},[36,97796,1906],{"class":50},[36,97798,70],{"class":42},[36,97800,94333],{"class":50},[36,97802,1885],{"class":73},[36,97804,2045],{"class":50},[36,97806,1993],{"class":73},[36,97808,94338],{"class":50},[36,97810,1961],{"class":73},[36,97812,2045],{"class":50},[36,97814,2087],{"class":73},[36,97816,1680],{"class":50},[36,97818,97819],{"class":38,"line":61},[36,97820,97821],{"class":124},"#进行指定填充\n",[36,97823,97824,97827,97829],{"class":38,"line":80},[36,97825,97826],{"class":50},"np.full_like(a,",[36,97828,2113],{"class":73},[36,97830,1680],{"class":50},[19,97832,12969],{},[19,97834,97835],{},[2992,97836],{"alt":31,"src":97837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[1645,97839,97841],{"id":97840},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23327,97843,97845],{"id":97844},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,97847,97849],{"className":31709,"code":97848,"language":31711,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[33,97850,97851,97868],{"__ignoreMap":31},[36,97852,97853,97856,97858,97860,97862,97864,97866],{"class":38,"line":39},[36,97854,97855],{"class":50},"np.eye(",[36,97857,1961],{"class":73},[36,97859,2045],{"class":50},[36,97861,94831],{"class":473},[36,97863,70],{"class":42},[36,97865,43],{"class":73},[36,97867,1680],{"class":50},[36,97869,97870],{"class":38,"line":54},[36,97871,97872],{"class":124},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23327,97874,97876],{"id":97875},"_2662-法2identity","2.6.6.2 法2：identity()",[26,97878,97880],{"className":31709,"code":97879,"language":31711,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[33,97881,97882,97887],{"__ignoreMap":31},[36,97883,97884],{"class":38,"line":39},[36,97885,97886],{"class":124},"#identity()\n",[36,97888,97889,97892,97894,97896,97898,97900,97902],{"class":38,"line":54},[36,97890,97891],{"class":50},"np.identity(",[36,97893,1987],{"class":73},[36,97895,2045],{"class":50},[36,97897,94831],{"class":473},[36,97899,70],{"class":42},[36,97901,43],{"class":73},[36,97903,1680],{"class":50},[19,97905,97906],{},"两个函数是有区别的",[19,97908,97909],{},[2992,97910],{"alt":31,"src":97911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97913,97914],{},[2992,97915],{"alt":31,"src":97916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,97918,97920],{"className":31709,"code":97919,"language":31711,"meta":31,"style":31},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\nnp.eye(3, 4)\n# 输出:\n# [[1. 0. 0. 0.]\n#  [0. 1. 0. 0.]\n#  [0. 0. 1. 0.]]\n\n# 对角线向上偏移1\nnp.eye(3, 4, k=1)\n# 输出:\n# [[0. 1. 0. 0.]\n#  [0. 0. 1. 0.]\n#  [0. 0. 0. 1.]]\n\n",[33,97921,97922,97927,97939,97944,97949,97954,97959,97963,97968,97988,97992,97997,98002],{"__ignoreMap":31},[36,97923,97924],{"class":38,"line":39},[36,97925,97926],{"class":124},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[36,97928,97929,97931,97933,97935,97937],{"class":38,"line":54},[36,97930,97855],{"class":50},[36,97932,1741],{"class":73},[36,97934,477],{"class":50},[36,97936,1961],{"class":73},[36,97938,1680],{"class":50},[36,97940,97941],{"class":38,"line":61},[36,97942,97943],{"class":124},"# 输出:\n",[36,97945,97946],{"class":38,"line":80},[36,97947,97948],{"class":124},"# [[1. 0. 0. 0.]\n",[36,97950,97951],{"class":38,"line":96},[36,97952,97953],{"class":124},"#  [0. 1. 0. 0.]\n",[36,97955,97956],{"class":38,"line":101},[36,97957,97958],{"class":124},"#  [0. 0. 1. 0.]]\n",[36,97960,97961],{"class":38,"line":128},[36,97962,58],{"emptyLinePlaceholder":57},[36,97964,97965],{"class":38,"line":149},[36,97966,97967],{"class":124},"# 对角线向上偏移1\n",[36,97969,97970,97972,97974,97976,97978,97980,97982,97984,97986],{"class":38,"line":154},[36,97971,97855],{"class":50},[36,97973,1741],{"class":73},[36,97975,477],{"class":50},[36,97977,1961],{"class":73},[36,97979,477],{"class":50},[36,97981,2160],{"class":473},[36,97983,70],{"class":42},[36,97985,1885],{"class":73},[36,97987,1680],{"class":50},[36,97989,97990],{"class":38,"line":167},[36,97991,97943],{"class":124},[36,97993,97994],{"class":38,"line":172},[36,97995,97996],{"class":124},"# [[0. 1. 0. 0.]\n",[36,97998,97999],{"class":38,"line":192},[36,98000,98001],{"class":124},"#  [0. 0. 1. 0.]\n",[36,98003,98004],{"class":38,"line":211},[36,98005,98006],{"class":124},"#  [0. 0. 0. 1.]]\n",[1645,98008,98010],{"id":98009},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,98012,98014],{"className":31709,"code":98013,"language":31711,"meta":31,"style":31},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n\"\"\"\nnp.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n参数介绍：\nstart：序列的起始值\nstop:序列的终止值，如果endpoint为True，该值包含数列中\nnum：要生长的等步长的样本数量，默认为50\nendpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\nretstep：如果为True时，生长的数组中会显示间距，反之不显示\ndtype：ndarry的数据类型\n\"\"\"\n",[33,98015,98016,98021,98025,98030,98035,98040,98045,98050,98055,98060,98065],{"__ignoreMap":31},[36,98017,98018],{"class":38,"line":39},[36,98019,98020],{"class":124},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[36,98022,98023],{"class":38,"line":54},[36,98024,97029],{"class":110},[36,98026,98027],{"class":38,"line":61},[36,98028,98029],{"class":110},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[36,98031,98032],{"class":38,"line":80},[36,98033,98034],{"class":110},"参数介绍：\n",[36,98036,98037],{"class":38,"line":96},[36,98038,98039],{"class":110},"start：序列的起始值\n",[36,98041,98042],{"class":38,"line":101},[36,98043,98044],{"class":110},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[36,98046,98047],{"class":38,"line":128},[36,98048,98049],{"class":110},"num：要生长的等步长的样本数量，默认为50\n",[36,98051,98052],{"class":38,"line":149},[36,98053,98054],{"class":110},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[36,98056,98057],{"class":38,"line":154},[36,98058,98059],{"class":110},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[36,98061,98062],{"class":38,"line":167},[36,98063,98064],{"class":110},"dtype：ndarry的数据类型\n",[36,98066,98067],{"class":38,"line":172},[36,98068,97029],{"class":110},[19,98070,98071],{},[2992,98072],{"alt":31,"src":98073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98075,98076],{},"这里num=是可以省略的",[19,98078,98079],{},"也就是下方两行代码结果是一模一样的",[26,98081,98083],{"className":31709,"code":98082,"language":31711,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[33,98084,98085,98102],{"__ignoreMap":31},[36,98086,98087,98090,98092,98094,98096,98098,98100],{"class":38,"line":39},[36,98088,98089],{"class":50},"np.linspace(",[36,98091,1885],{"class":73},[36,98093,2045],{"class":50},[36,98095,1987],{"class":73},[36,98097,2045],{"class":50},[36,98099,1987],{"class":73},[36,98101,1680],{"class":50},[36,98103,98104,98106,98108,98110,98112,98114,98116,98118,98120],{"class":38,"line":54},[36,98105,98089],{"class":50},[36,98107,1885],{"class":73},[36,98109,2045],{"class":50},[36,98111,1987],{"class":73},[36,98113,2045],{"class":50},[36,98115,3187],{"class":473},[36,98117,70],{"class":42},[36,98119,1987],{"class":73},[36,98121,1680],{"class":50},[1645,98123,98125],{"id":98124},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,98127,98129],{"className":31709,"code":98128,"language":31711,"meta":31,"style":31},"#logspace函数用于创建一个等比数列，格式如下：\n\"\"\"\nnp.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n参数为：\nstart:序列的起始位置为：base**start\nstop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\nnum：要生长的等步长的样本数量，默认为50\nendpoint：是否包含 stop 这个值，默认是 True\nbase：对数的底数，默认是 10（常见对数）\ndtype：ndarry的数据类型\n\"\"\"\n",[33,98130,98131,98136,98140,98145,98150,98155,98160,98164,98169,98174,98178],{"__ignoreMap":31},[36,98132,98133],{"class":38,"line":39},[36,98134,98135],{"class":124},"#logspace函数用于创建一个等比数列，格式如下：\n",[36,98137,98138],{"class":38,"line":54},[36,98139,97029],{"class":110},[36,98141,98142],{"class":38,"line":61},[36,98143,98144],{"class":110},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[36,98146,98147],{"class":38,"line":80},[36,98148,98149],{"class":110},"参数为：\n",[36,98151,98152],{"class":38,"line":96},[36,98153,98154],{"class":110},"start:序列的起始位置为：base**start\n",[36,98156,98157],{"class":38,"line":101},[36,98158,98159],{"class":110},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[36,98161,98162],{"class":38,"line":128},[36,98163,98049],{"class":110},[36,98165,98166],{"class":38,"line":149},[36,98167,98168],{"class":110},"endpoint：是否包含 stop 这个值，默认是 True\n",[36,98170,98171],{"class":38,"line":154},[36,98172,98173],{"class":110},"base：对数的底数，默认是 10（常见对数）\n",[36,98175,98176],{"class":38,"line":167},[36,98177,98064],{"class":110},[36,98179,98180],{"class":38,"line":172},[36,98181,97029],{"class":110},[19,98183,98184],{},[2992,98185],{"alt":31,"src":98186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98188,98189],{},"logspace()函数中的num参数也是可以不写num=的",[19,98191,98192],{},"endpoint是不可以省略的",[1592,98194,98195],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":31,"searchDepth":54,"depth":54,"links":98197},[98198,98202,98207,98211,98215,98216],{"id":96587,"depth":54,"text":96588,"children":98199},[98200,98201],{"id":96591,"depth":61,"text":96592},{"id":96664,"depth":61,"text":96665},{"id":96696,"depth":54,"text":96697,"children":98203},[98204,98205,98206],{"id":96700,"depth":61,"text":96701},{"id":96882,"depth":61,"text":96883},{"id":96960,"depth":61,"text":96961},{"id":96995,"depth":54,"text":96996,"children":98208},[98209,98210],{"id":96999,"depth":61,"text":97000},{"id":97056,"depth":61,"text":97057},{"id":97152,"depth":54,"text":97153,"children":98212},[98213,98214],{"id":97156,"depth":61,"text":97157},{"id":97168,"depth":61,"text":97169},{"id":97202,"depth":54,"text":97203},{"id":97239,"depth":54,"text":97240,"children":98217},[98218,98219,98220,98221,98222,98223,98224,98225],{"id":97243,"depth":61,"text":97244},{"id":97468,"depth":61,"text":97469},{"id":97475,"depth":61,"text":97476},{"id":97684,"depth":61,"text":97685},{"id":97704,"depth":61,"text":97705},{"id":97840,"depth":61,"text":97841},{"id":98009,"depth":61,"text":98010},{"id":98124,"depth":61,"text":98125},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96579,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98232,"title":98233,"body":98234,"description":24706,"extension":1603,"meta":98327,"navigation":57,"path":98328,"seo":98329,"stem":98330,"__hash__":98331},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98235,"toc":98325},[98236,98239,98242,98245,98248,98251,98254,98257,98260,98263,98266,98269,98271,98274,98277,98282,98285,98288,98322],[10,98237,98233],{"id":98238},"_20魔法命令mprun",[19,98240,98241],{},"逐行分析数据内存的使用情况",[19,98243,98244],{},"语法格式：",[19,98246,98247],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98249,98250],{},"分析结果列如下：",[19,98252,98253],{},"Line行号",[19,98255,98256],{},"Mem usage内存使用大小",[19,98258,98259],{},"increment内存增量",[19,98261,98262],{},"Line content代码内容",[19,98264,98265],{},"补充说明：",[19,98267,98268],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98270,96534],{},[19,98272,98273],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98275,98276],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98278,98279],{},[2992,98280],{"alt":31,"src":98281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98283,98284],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98286,98287],{},"这时候需要重新加载模块",[26,98289,98291],{"className":31709,"code":98290,"language":31711,"meta":31,"style":31},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[33,98292,98293,98298,98305,98310],{"__ignoreMap":31},[36,98294,98295],{"class":38,"line":39},[36,98296,98297],{"class":124},"#重新加载模块\n",[36,98299,98300,98302],{"class":38,"line":54},[36,98301,31723],{"class":42},[36,98303,98304],{"class":50}," importlib\n",[36,98306,98307],{"class":38,"line":61},[36,98308,98309],{"class":50},"importlib.reload(mprun_test)\n",[36,98311,98312,98314,98317,98319],{"class":38,"line":80},[36,98313,1996],{"class":42},[36,98315,98316],{"class":50},"mprun ",[36,98318,2199],{"class":42},[36,98320,98321],{"class":50},"f mprun_test.fun_test mprun_test.fun_test()\n",[1592,98323,98324],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":98326},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98233,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98333,"title":98334,"body":98335,"description":24706,"extension":1603,"meta":98352,"navigation":57,"path":98353,"seo":98354,"stem":98355,"__hash__":98356},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98336,"toc":98350},[98337,98340,98345],[10,98338,98334],{"id":98339},"_3一维数组的索引和切片",[19,98341,98342],{},[2992,98343],{"alt":31,"src":98344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98346,98347],{},[2992,98348],{"alt":31,"src":98349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":54,"depth":54,"links":98351},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98334,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98358,"title":98359,"body":98360,"description":24706,"extension":1603,"meta":98843,"navigation":57,"path":98844,"seo":98845,"stem":98846,"__hash__":98847},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98361,"toc":98841},[98362,98365,98368,98373,98406,98409,98447,98450,98484,98487,98592,98595,98632,98635,98736,98739,98790,98793,98835,98838],[10,98363,98359],{"id":98364},"_4二维数组的索引与切片",[19,98366,98367],{},"①获取指定单个元素",[19,98369,98370],{},[2992,98371],{"alt":31,"src":98372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,98374,98376],{"className":31709,"code":98375,"language":31711,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[33,98377,98378,98383,98388,98393],{"__ignoreMap":31},[36,98379,98380],{"class":38,"line":39},[36,98381,98382],{"class":124},"#获取元素9\n",[36,98384,98385],{"class":38,"line":54},[36,98386,98387],{"class":124},"#先获取所在行，再获取所在列\n",[36,98389,98390],{"class":38,"line":61},[36,98391,98392],{"class":124},"#数组[行索引号，列索引号]\n",[36,98394,98395,98398,98400,98402,98404],{"class":38,"line":80},[36,98396,98397],{"class":50},"a[",[36,98399,1885],{"class":73},[36,98401,2045],{"class":50},[36,98403,1747],{"class":73},[36,98405,34577],{"class":50},[19,98407,98408],{},"②获取整行元素",[26,98410,98412],{"className":31709,"code":98411,"language":31711,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[33,98413,98414,98419,98424,98432,98437],{"__ignoreMap":31},[36,98415,98416],{"class":38,"line":39},[36,98417,98418],{"class":124},"#获取整行 数组[行索引号]\n",[36,98420,98421],{"class":38,"line":54},[36,98422,98423],{"class":124},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[36,98425,98426,98428,98430],{"class":38,"line":61},[36,98427,98397],{"class":50},[36,98429,1747],{"class":73},[36,98431,34577],{"class":50},[36,98433,98434],{"class":38,"line":80},[36,98435,98436],{"class":124},"#也可以负索引获取一行\n",[36,98438,98439,98441,98443,98445],{"class":38,"line":96},[36,98440,98397],{"class":50},[36,98442,2199],{"class":42},[36,98444,1885],{"class":73},[36,98446,34577],{"class":50},[19,98448,98449],{},"③获取整列元素",[26,98451,98453],{"className":31709,"code":98452,"language":31711,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[33,98454,98455,98460,98469,98474],{"__ignoreMap":31},[36,98456,98457],{"class":38,"line":39},[36,98458,98459],{"class":124},"#获取整列 数组名[:,列索引]\n",[36,98461,98462,98465,98467],{"class":38,"line":54},[36,98463,98464],{"class":50},"a[:,",[36,98466,1747],{"class":73},[36,98468,34577],{"class":50},[36,98470,98471],{"class":38,"line":61},[36,98472,98473],{"class":124},"#也可以负索引获取一列\n",[36,98475,98476,98478,98480,98482],{"class":38,"line":80},[36,98477,98464],{"class":50},[36,98479,2199],{"class":42},[36,98481,1885],{"class":73},[36,98483,34577],{"class":50},[19,98485,98486],{},"④部分行部分列的元素",[26,98488,98490],{"className":31709,"code":98489,"language":31711,"meta":31,"style":31},"#部分行部分列 数组名[行切片，列切片]\na[:2,:]\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\na[:,1:4]\n#结果：\n'''\narray([[ 2,  3,  4],\n       [ 8,  9, 10],\n       [14, 15, 16],\n       [20, 21, 22]])\n'''\n#对列行同时进行切片，使用了step参数\na[::2,::2]\n",[33,98491,98492,98497,98507,98511,98515,98520,98525,98529,98541,98545,98549,98554,98559,98564,98569,98573,98578],{"__ignoreMap":31},[36,98493,98494],{"class":38,"line":39},[36,98495,98496],{"class":124},"#部分行部分列 数组名[行切片，列切片]\n",[36,98498,98499,98502,98504],{"class":38,"line":54},[36,98500,98501],{"class":50},"a[:",[36,98503,1747],{"class":73},[36,98505,98506],{"class":50},",:]\n",[36,98508,98509],{"class":38,"line":61},[36,98510,94895],{"class":124},[36,98512,98513],{"class":38,"line":80},[36,98514,95259],{"class":110},[36,98516,98517],{"class":38,"line":96},[36,98518,98519],{"class":110},"array([[ 1,  2,  3,  4,  5,  6],\n",[36,98521,98522],{"class":38,"line":101},[36,98523,98524],{"class":110},"       [ 7,  8,  9, 10, 11, 12]])\n",[36,98526,98527],{"class":38,"line":128},[36,98528,95259],{"class":110},[36,98530,98531,98533,98535,98537,98539],{"class":38,"line":149},[36,98532,98464],{"class":50},[36,98534,1885],{"class":73},[36,98536,2526],{"class":50},[36,98538,1961],{"class":73},[36,98540,34577],{"class":50},[36,98542,98543],{"class":38,"line":154},[36,98544,94895],{"class":124},[36,98546,98547],{"class":38,"line":167},[36,98548,95259],{"class":110},[36,98550,98551],{"class":38,"line":172},[36,98552,98553],{"class":110},"array([[ 2,  3,  4],\n",[36,98555,98556],{"class":38,"line":192},[36,98557,98558],{"class":110},"       [ 8,  9, 10],\n",[36,98560,98561],{"class":38,"line":211},[36,98562,98563],{"class":110},"       [14, 15, 16],\n",[36,98565,98566],{"class":38,"line":216},[36,98567,98568],{"class":110},"       [20, 21, 22]])\n",[36,98570,98571],{"class":38,"line":231},[36,98572,95259],{"class":110},[36,98574,98575],{"class":38,"line":236},[36,98576,98577],{"class":124},"#对列行同时进行切片，使用了step参数\n",[36,98579,98580,98583,98585,98588,98590],{"class":38,"line":247},[36,98581,98582],{"class":50},"a[::",[36,98584,1747],{"class":73},[36,98586,98587],{"class":50},",::",[36,98589,1747],{"class":73},[36,98591,34577],{"class":50},[19,98593,98594],{},"⑤同时获取两个元素",[26,98596,98598],{"className":31709,"code":98597,"language":31711,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[33,98599,98600,98605,98610],{"__ignoreMap":31},[36,98601,98602],{"class":38,"line":39},[36,98603,98604],{"class":124},"#同时获取第三行第二列，第四行第一列\n",[36,98606,98607],{"class":38,"line":54},[36,98608,98609],{"class":124},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[36,98611,98612,98615,98617,98619,98621,98623,98625,98627,98629],{"class":38,"line":61},[36,98613,98614],{"class":50},"a[(",[36,98616,1747],{"class":73},[36,98618,2045],{"class":50},[36,98620,1741],{"class":73},[36,98622,43578],{"class":50},[36,98624,1885],{"class":73},[36,98626,2045],{"class":50},[36,98628,1859],{"class":73},[36,98630,98631],{"class":50},")]\n",[19,98633,98634],{},"⑥切片，对行进行反向获取",[26,98636,98638],{"className":31709,"code":98637,"language":31711,"meta":31,"style":31},"#切片 对所有行进行反向获取\na[::-1]\n#结果：\n'''\narray([[19, 20, 21, 22, 23, 24],\n       [13, 14, 15, 16, 17, 18],\n       [ 7,  8,  9, 10, 11, 12],\n       [ 1,  2,  3,  4,  5,  6]])\n'''\n#对行列都进行反向切片获取\na[::-1,::-1]\n'''\narray([[24, 23, 22, 21, 20, 19],\n       [18, 17, 16, 15, 14, 13],\n       [12, 11, 10,  9,  8,  7],\n       [ 6,  5,  4,  3,  2,  1]])\n'''\n",[33,98639,98640,98645,98655,98659,98663,98668,98673,98678,98683,98687,98692,98708,98712,98717,98722,98727,98732],{"__ignoreMap":31},[36,98641,98642],{"class":38,"line":39},[36,98643,98644],{"class":124},"#切片 对所有行进行反向获取\n",[36,98646,98647,98649,98651,98653],{"class":38,"line":54},[36,98648,98582],{"class":50},[36,98650,2199],{"class":42},[36,98652,1885],{"class":73},[36,98654,34577],{"class":50},[36,98656,98657],{"class":38,"line":61},[36,98658,94895],{"class":124},[36,98660,98661],{"class":38,"line":80},[36,98662,95259],{"class":110},[36,98664,98665],{"class":38,"line":96},[36,98666,98667],{"class":110},"array([[19, 20, 21, 22, 23, 24],\n",[36,98669,98670],{"class":38,"line":101},[36,98671,98672],{"class":110},"       [13, 14, 15, 16, 17, 18],\n",[36,98674,98675],{"class":38,"line":128},[36,98676,98677],{"class":110},"       [ 7,  8,  9, 10, 11, 12],\n",[36,98679,98680],{"class":38,"line":149},[36,98681,98682],{"class":110},"       [ 1,  2,  3,  4,  5,  6]])\n",[36,98684,98685],{"class":38,"line":154},[36,98686,95259],{"class":110},[36,98688,98689],{"class":38,"line":167},[36,98690,98691],{"class":124},"#对行列都进行反向切片获取\n",[36,98693,98694,98696,98698,98700,98702,98704,98706],{"class":38,"line":172},[36,98695,98582],{"class":50},[36,98697,2199],{"class":42},[36,98699,1885],{"class":73},[36,98701,98587],{"class":50},[36,98703,2199],{"class":42},[36,98705,1885],{"class":73},[36,98707,34577],{"class":50},[36,98709,98710],{"class":38,"line":192},[36,98711,95259],{"class":110},[36,98713,98714],{"class":38,"line":211},[36,98715,98716],{"class":110},"array([[24, 23, 22, 21, 20, 19],\n",[36,98718,98719],{"class":38,"line":216},[36,98720,98721],{"class":110},"       [18, 17, 16, 15, 14, 13],\n",[36,98723,98724],{"class":38,"line":231},[36,98725,98726],{"class":110},"       [12, 11, 10,  9,  8,  7],\n",[36,98728,98729],{"class":38,"line":236},[36,98730,98731],{"class":110},"       [ 6,  5,  4,  3,  2,  1]])\n",[36,98733,98734],{"class":38,"line":247},[36,98735,95259],{"class":110},[19,98737,98738],{},"⑦修改元素",[26,98740,98742],{"className":31709,"code":98741,"language":31711,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[33,98743,98744,98749,98767,98772],{"__ignoreMap":31},[36,98745,98746],{"class":38,"line":39},[36,98747,98748],{"class":124},"#获取前两行和前两列\n",[36,98750,98751,98754,98756,98758,98760,98763,98765],{"class":38,"line":54},[36,98752,98753],{"class":50},"sub_a",[36,98755,70],{"class":42},[36,98757,98501],{"class":50},[36,98759,1747],{"class":73},[36,98761,98762],{"class":50},",:",[36,98764,1747],{"class":73},[36,98766,34577],{"class":50},[36,98768,98769],{"class":38,"line":61},[36,98770,98771],{"class":124},"#修改sub_a第一个元素的值\n",[36,98773,98774,98777,98779,98781,98783,98785,98787],{"class":38,"line":80},[36,98775,98776],{"class":50},"sub_a[",[36,98778,1859],{"class":73},[36,98780,2045],{"class":50},[36,98782,1859],{"class":73},[36,98784,2607],{"class":50},[36,98786,70],{"class":42},[36,98788,98789],{"class":73},"100\n",[19,98791,98792],{},"⑧数组复制copy()",[26,98794,98796],{"className":31709,"code":98795,"language":31711,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[33,98797,98798,98803,98813,98818],{"__ignoreMap":31},[36,98799,98800],{"class":38,"line":39},[36,98801,98802],{"class":124},"#数组复制\n",[36,98804,98805,98808,98810],{"class":38,"line":54},[36,98806,98807],{"class":50},"copy_a",[36,98809,70],{"class":42},[36,98811,98812],{"class":50},"np.copy(sub_a)\n",[36,98814,98815],{"class":38,"line":61},[36,98816,98817],{"class":124},"#修改copy_a后不影响原数组\n",[36,98819,98820,98823,98825,98827,98829,98831,98833],{"class":38,"line":80},[36,98821,98822],{"class":50},"copy_a[",[36,98824,1859],{"class":73},[36,98826,2045],{"class":50},[36,98828,1859],{"class":73},[36,98830,2607],{"class":50},[36,98832,70],{"class":42},[36,98834,98789],{"class":73},[19,98836,98837],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1592,98839,98840],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":98842},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98359,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98849,"title":98850,"body":98851,"description":24706,"extension":1603,"meta":99343,"navigation":57,"path":99344,"seo":99345,"stem":99346,"__hash__":99347},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98852,"toc":99335},[98853,98856,98860,98863,98866,98919,98922,98947,98950,98969,98989,98992,99008,99012,99058,99062,99104,99108,99111,99114,99117,99120,99123,99185,99245,99249,99252,99309,99313,99318,99327,99332],[10,98854,98850],{"id":98855},"_5改变数组的维度",[14,98857,98859],{"id":98858},"_51-使用reshape","5.1 使用reshape()",[19,98861,98862],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98864,98865],{},"①一维数组转换为二维数组",[26,98867,98869],{"className":31709,"code":98868,"language":31711,"meta":31,"style":31},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[33,98870,98871,98887,98892,98897,98902],{"__ignoreMap":31},[36,98872,98873,98875,98877,98879,98881,98883,98885],{"class":38,"line":39},[36,98874,1906],{"class":50},[36,98876,70],{"class":42},[36,98878,94333],{"class":50},[36,98880,1885],{"class":73},[36,98882,2045],{"class":50},[36,98884,2190],{"class":73},[36,98886,1680],{"class":50},[36,98888,98889],{"class":38,"line":54},[36,98890,98891],{"class":124},"#将一维数组进行转换\n",[36,98893,98894],{"class":38,"line":61},[36,98895,98896],{"class":124},"#注意点：元素个数不可以变\n",[36,98898,98899],{"class":38,"line":80},[36,98900,98901],{"class":124},"#转换维度要保持一致，不一致就异常！！！\n",[36,98903,98904,98906,98908,98911,98913,98915,98917],{"class":38,"line":96},[36,98905,94637],{"class":50},[36,98907,70],{"class":42},[36,98909,98910],{"class":50},"a.reshape(",[36,98912,1747],{"class":73},[36,98914,2045],{"class":50},[36,98916,2012],{"class":73},[36,98918,1680],{"class":50},[19,98920,98921],{},"②一维数组转换为三维数组",[26,98923,98925],{"className":31709,"code":98924,"language":31711,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[33,98926,98927],{"__ignoreMap":31},[36,98928,98929,98931,98933,98935,98937,98939,98941,98943,98945],{"class":38,"line":39},[36,98930,96852],{"class":50},[36,98932,70],{"class":42},[36,98934,98910],{"class":50},[36,98936,1747],{"class":73},[36,98938,2045],{"class":50},[36,98940,1741],{"class":73},[36,98942,2045],{"class":50},[36,98944,1747],{"class":73},[36,98946,1680],{"class":50},[19,98948,98949],{},"③二维数组转化为一维数组",[26,98951,98953],{"className":31709,"code":98952,"language":31711,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[33,98954,98955,98960],{"__ignoreMap":31},[36,98956,98957],{"class":38,"line":39},[36,98958,98959],{"class":124},"#知道元素个数：\n",[36,98961,98962,98965,98967],{"class":38,"line":54},[36,98963,98964],{"class":50},"aa.reshape(",[36,98966,2165],{"class":73},[36,98968,1680],{"class":50},[26,98970,98972],{"className":31709,"code":98971,"language":31711,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[33,98973,98974,98979],{"__ignoreMap":31},[36,98975,98976],{"class":38,"line":39},[36,98977,98978],{"class":124},"#不知道元素个数，参数传递-1\n",[36,98980,98981,98983,98985,98987],{"class":38,"line":54},[36,98982,98964],{"class":50},[36,98984,2199],{"class":42},[36,98986,1885],{"class":73},[36,98988,1680],{"class":50},[19,98990,98991],{},"④三维数组转换为一维数组",[26,98993,98995],{"className":31709,"code":98994,"language":31711,"meta":31,"style":31},"aaa.reshape(-1)\n",[33,98996,98997],{"__ignoreMap":31},[36,98998,98999,99002,99004,99006],{"class":38,"line":39},[36,99000,99001],{"class":50},"aaa.reshape(",[36,99003,2199],{"class":42},[36,99005,1885],{"class":73},[36,99007,1680],{"class":50},[14,99009,99011],{"id":99010},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,99013,99015],{"className":31709,"code":99014,"language":31711,"meta":31,"style":31},"aa=np.arange(1,13).reshape(2,6)#转换为2行6列的数组\naa.revel()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,99016,99017,99044,99049,99053],{"__ignoreMap":31},[36,99018,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041],{"class":38,"line":39},[36,99020,94637],{"class":50},[36,99022,70],{"class":42},[36,99024,94333],{"class":50},[36,99026,1885],{"class":73},[36,99028,2045],{"class":50},[36,99030,2190],{"class":73},[36,99032,94338],{"class":50},[36,99034,1747],{"class":73},[36,99036,2045],{"class":50},[36,99038,2012],{"class":73},[36,99040,2096],{"class":50},[36,99042,99043],{"class":124},"#转换为2行6列的数组\n",[36,99045,99046],{"class":38,"line":54},[36,99047,99048],{"class":50},"aa.revel()\n",[36,99050,99051],{"class":38,"line":61},[36,99052,94895],{"class":124},[36,99054,99055],{"class":38,"line":80},[36,99056,99057],{"class":124},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99059,99061],{"id":99060},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,99063,99065],{"className":31709,"code":99064,"language":31711,"meta":31,"style":31},"aa=np.arange(1,13).reshape(2,6)\naa.flatten()\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,99066,99067,99091,99096,99100],{"__ignoreMap":31},[36,99068,99069,99071,99073,99075,99077,99079,99081,99083,99085,99087,99089],{"class":38,"line":39},[36,99070,94637],{"class":50},[36,99072,70],{"class":42},[36,99074,94333],{"class":50},[36,99076,1885],{"class":73},[36,99078,2045],{"class":50},[36,99080,2190],{"class":73},[36,99082,94338],{"class":50},[36,99084,1747],{"class":73},[36,99086,2045],{"class":50},[36,99088,2012],{"class":73},[36,99090,1680],{"class":50},[36,99092,99093],{"class":38,"line":54},[36,99094,99095],{"class":50},"aa.flatten()\n",[36,99097,99098],{"class":38,"line":61},[36,99099,94895],{"class":124},[36,99101,99102],{"class":38,"line":80},[36,99103,99057],{"class":124},[14,99105,99107],{"id":99106},"_54-使用resize","5.4 使用resize()",[19,99109,99110],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99112,99113],{},"通过resize方法可以改变数组的维度",[19,99115,99116],{},"#resize修改数组维度",[19,99118,99119],{},"#以元组的形式指定形状",[19,99121,99122],{},"#改变的是原数组",[26,99124,99126],{"className":31709,"code":99125,"language":31711,"meta":31,"style":31},"a=np.arange(1,13)\na.shape=(2,6)#改变了原数组\na=resize((12))\n#结果：\n#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[33,99127,99128,99144,99164,99177,99181],{"__ignoreMap":31},[36,99129,99130,99132,99134,99136,99138,99140,99142],{"class":38,"line":39},[36,99131,1906],{"class":50},[36,99133,70],{"class":42},[36,99135,94333],{"class":50},[36,99137,1885],{"class":73},[36,99139,2045],{"class":50},[36,99141,2190],{"class":73},[36,99143,1680],{"class":50},[36,99145,99146,99149,99151,99153,99155,99157,99159,99161],{"class":38,"line":54},[36,99147,99148],{"class":50},"a.shape",[36,99150,70],{"class":42},[36,99152,222],{"class":50},[36,99154,1747],{"class":73},[36,99156,2045],{"class":50},[36,99158,2012],{"class":73},[36,99160,2096],{"class":50},[36,99162,99163],{"class":124},"#改变了原数组\n",[36,99165,99166,99168,99170,99173,99175],{"class":38,"line":61},[36,99167,1906],{"class":50},[36,99169,70],{"class":42},[36,99171,99172],{"class":50},"resize((",[36,99174,2165],{"class":73},[36,99176,31828],{"class":50},[36,99178,99179],{"class":38,"line":80},[36,99180,94895],{"class":124},[36,99182,99183],{"class":38,"line":96},[36,99184,99057],{"class":124},[26,99186,99188],{"className":31709,"code":99187,"language":31711,"meta":31,"style":31},"a.resize((6,2))\n#结果：\n'''\narray([[ 1,  2],\n       [ 3,  4],\n       [ 5,  6],\n       [ 7,  8],\n       [ 9, 10],\n       [11, 12]])\n'''\n",[33,99189,99190,99203,99207,99211,99216,99221,99226,99231,99236,99241],{"__ignoreMap":31},[36,99191,99192,99195,99197,99199,99201],{"class":38,"line":39},[36,99193,99194],{"class":50},"a.resize((",[36,99196,2012],{"class":73},[36,99198,2045],{"class":50},[36,99200,1747],{"class":73},[36,99202,31828],{"class":50},[36,99204,99205],{"class":38,"line":54},[36,99206,94895],{"class":124},[36,99208,99209],{"class":38,"line":61},[36,99210,95259],{"class":110},[36,99212,99213],{"class":38,"line":80},[36,99214,99215],{"class":110},"array([[ 1,  2],\n",[36,99217,99218],{"class":38,"line":96},[36,99219,99220],{"class":110},"       [ 3,  4],\n",[36,99222,99223],{"class":38,"line":101},[36,99224,99225],{"class":110},"       [ 5,  6],\n",[36,99227,99228],{"class":38,"line":128},[36,99229,99230],{"class":110},"       [ 7,  8],\n",[36,99232,99233],{"class":38,"line":149},[36,99234,99235],{"class":110},"       [ 9, 10],\n",[36,99237,99238],{"class":38,"line":154},[36,99239,99240],{"class":110},"       [11, 12]])\n",[36,99242,99243],{"class":38,"line":167},[36,99244,95259],{"class":110},[14,99246,99248],{"id":99247},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99250,99251],{},"改变了原数组",[26,99253,99255],{"className":31709,"code":99254,"language":31711,"meta":31,"style":31},"a=np.arange(1,13)\na.shape=(2,6)\n#结果：\n'''\narray([[ 1,  2,  3,  4,  5,  6],\n       [ 7,  8,  9, 10, 11, 12]])\n'''\n",[33,99256,99257,99273,99289,99293,99297,99301,99305],{"__ignoreMap":31},[36,99258,99259,99261,99263,99265,99267,99269,99271],{"class":38,"line":39},[36,99260,1906],{"class":50},[36,99262,70],{"class":42},[36,99264,94333],{"class":50},[36,99266,1885],{"class":73},[36,99268,2045],{"class":50},[36,99270,2190],{"class":73},[36,99272,1680],{"class":50},[36,99274,99275,99277,99279,99281,99283,99285,99287],{"class":38,"line":54},[36,99276,99148],{"class":50},[36,99278,70],{"class":42},[36,99280,222],{"class":50},[36,99282,1747],{"class":73},[36,99284,2045],{"class":50},[36,99286,2012],{"class":73},[36,99288,1680],{"class":50},[36,99290,99291],{"class":38,"line":61},[36,99292,94895],{"class":124},[36,99294,99295],{"class":38,"line":80},[36,99296,95259],{"class":110},[36,99298,99299],{"class":38,"line":96},[36,99300,98519],{"class":110},[36,99302,99303],{"class":38,"line":101},[36,99304,98524],{"class":110},[36,99306,99307],{"class":38,"line":128},[36,99308,95259],{"class":110},[14,99310,99312],{"id":99311},"_56-重要比较","5.6 重要比较：",[19,99314,99315],{},[2992,99316],{"alt":31,"src":99317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99319,99320,99321,99323,99324,99326],{},"口诀：NumPy 函数要么用 ",[33,99322,97294],{},"，要么用 ",[33,99325,32827],{},"，创建结构用 shape，造数据用 size",[19,99328,99329],{},[2992,99330],{"alt":31,"src":99331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1592,99333,99334],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":99336},[99337,99338,99339,99340,99341,99342],{"id":98858,"depth":54,"text":98859},{"id":99010,"depth":54,"text":99011},{"id":99060,"depth":54,"text":99061},{"id":99106,"depth":54,"text":99107},{"id":99247,"depth":54,"text":99248},{"id":99311,"depth":54,"text":99312},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98850,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99349,"title":99350,"body":99351,"description":24706,"extension":1603,"meta":100423,"navigation":57,"path":100424,"seo":100425,"stem":100426,"__hash__":100427},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99352,"toc":100417},[99353,99356,99360,99363,99366,99369,99434,99437,99477,99480,99562,99565,99570,99592,99594,99599,99604,99607,99610,99765,99768,99970,99974,99977,99980,100048,100050,100055,100058,100061,100141,100145,100148,100150,100223,100225,100230,100232,100312,100316,100319,100322,100325,100328,100331,100334,100414],[10,99354,99350],{"id":99355},"_6数组的拼接",[14,99357,99359],{"id":99358},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99361,99362],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99364,99365],{},"函数内部传两个数列构成的数列或者元组",[19,99367,99368],{},"①一维数组的拼接",[26,99370,99372],{"className":31709,"code":99371,"language":31711,"meta":31,"style":31},"a=np.array([1,2,3])\nb=np.array([4,5,6])\n#调用concatenate进行数组拼接\nnp.concatenate((a,b))\n#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n#np.concatenate([a,b])\n",[33,99373,99374,99394,99414,99419,99424,99429],{"__ignoreMap":31},[36,99375,99376,99378,99380,99382,99384,99386,99388,99390,99392],{"class":38,"line":39},[36,99377,1906],{"class":50},[36,99379,70],{"class":42},[36,99381,94355],{"class":50},[36,99383,1885],{"class":73},[36,99385,2045],{"class":50},[36,99387,1747],{"class":73},[36,99389,2045],{"class":50},[36,99391,1741],{"class":73},[36,99393,6146],{"class":50},[36,99395,99396,99398,99400,99402,99404,99406,99408,99410,99412],{"class":38,"line":54},[36,99397,1931],{"class":50},[36,99399,70],{"class":42},[36,99401,94355],{"class":50},[36,99403,1961],{"class":73},[36,99405,2045],{"class":50},[36,99407,1987],{"class":73},[36,99409,2045],{"class":50},[36,99411,2012],{"class":73},[36,99413,6146],{"class":50},[36,99415,99416],{"class":38,"line":61},[36,99417,99418],{"class":124},"#调用concatenate进行数组拼接\n",[36,99420,99421],{"class":38,"line":80},[36,99422,99423],{"class":50},"np.concatenate((a,b))\n",[36,99425,99426],{"class":38,"line":96},[36,99427,99428],{"class":124},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[36,99430,99431],{"class":38,"line":101},[36,99432,99433],{"class":124},"#np.concatenate([a,b])\n",[19,99435,99436],{},"②一维多个数组拼接",[26,99438,99440],{"className":31709,"code":99439,"language":31711,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[33,99441,99442,99447,99467,99472],{"__ignoreMap":31},[36,99443,99444],{"class":38,"line":39},[36,99445,99446],{"class":124},"#也可以多个数组进行拼接\n",[36,99448,99449,99451,99453,99455,99457,99459,99461,99463,99465],{"class":38,"line":54},[36,99450,1956],{"class":50},[36,99452,70],{"class":42},[36,99454,94355],{"class":50},[36,99456,2113],{"class":73},[36,99458,2045],{"class":50},[36,99460,2139],{"class":73},[36,99462,2045],{"class":50},[36,99464,2190],{"class":73},[36,99466,6146],{"class":50},[36,99468,99469],{"class":38,"line":61},[36,99470,99471],{"class":50},"c\n",[36,99473,99474],{"class":38,"line":80},[36,99475,99476],{"class":50},"np.concatenate((a,b,c))\n",[19,99478,99479],{},"③二维数组拼接",[26,99481,99483],{"className":31709,"code":99482,"language":31711,"meta":31,"style":31},"#二维数组使用concatenate进行拼接\naa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\nnp.concatenate((aa,bb),axis=0)\n",[33,99484,99485,99490,99514,99539,99544,99549],{"__ignoreMap":31},[36,99486,99487],{"class":38,"line":39},[36,99488,99489],{"class":124},"#二维数组使用concatenate进行拼接\n",[36,99491,99492,99494,99496,99498,99500,99502,99504,99506,99508,99510,99512],{"class":38,"line":54},[36,99493,94637],{"class":50},[36,99495,70],{"class":42},[36,99497,94333],{"class":50},[36,99499,1885],{"class":73},[36,99501,2045],{"class":50},[36,99503,2190],{"class":73},[36,99505,94338],{"class":50},[36,99507,1741],{"class":73},[36,99509,2045],{"class":50},[36,99511,1961],{"class":73},[36,99513,1680],{"class":50},[36,99515,99516,99519,99521,99523,99525,99527,99529,99531,99533,99535,99537],{"class":38,"line":61},[36,99517,99518],{"class":50},"bb",[36,99520,70],{"class":42},[36,99522,94333],{"class":50},[36,99524,2005],{"class":73},[36,99526,2045],{"class":50},[36,99528,2309],{"class":73},[36,99530,94338],{"class":50},[36,99532,1741],{"class":73},[36,99534,2045],{"class":50},[36,99536,1961],{"class":73},[36,99538,1680],{"class":50},[36,99540,99541],{"class":38,"line":80},[36,99542,99543],{"class":124},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[36,99545,99546],{"class":38,"line":96},[36,99547,99548],{"class":124},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[36,99550,99551,99554,99556,99558,99560],{"class":38,"line":101},[36,99552,99553],{"class":50},"np.concatenate((aa,bb),",[36,99555,48845],{"class":473},[36,99557,70],{"class":42},[36,99559,1859],{"class":73},[36,99561,1680],{"class":50},[19,99563,99564],{},"结果：",[19,99566,99567],{},[2992,99568],{"alt":31,"src":99569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,99571,99573],{"className":31709,"code":99572,"language":31711,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[33,99574,99575,99580],{"__ignoreMap":31},[36,99576,99577],{"class":38,"line":39},[36,99578,99579],{"class":124},"#指定axis为1进行拼接\n",[36,99581,99582,99584,99586,99588,99590],{"class":38,"line":54},[36,99583,99553],{"class":50},[36,99585,48845],{"class":473},[36,99587,70],{"class":42},[36,99589,1885],{"class":73},[36,99591,1680],{"class":50},[19,99593,99564],{},[19,99595,99596],{},[2992,99597],{"alt":31,"src":99598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99600,99601],{},[887,99602,99603],{},"二维数组总结：0竖着方向，1横着方向",[19,99605,99606],{},"④三维数组拼接",[19,99608,99609],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,99611,99613],{"className":31709,"code":99612,"language":31711,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#axis=0\ns=np.concatenate((aaa,bbb),axis=0)\ns.shape\n#输出：(4,3,6)\n#axis=1\nss=np.concatenate((aaa,bbb),axis=1)\nss.shape\n#输出：(2,6,6)\n#axis=2\nnp.concatenate((aaa,bbb),axis=2).shape\n#输出：（2，3，12）\n",[33,99614,99615,99620,99648,99678,99683,99700,99705,99710,99715,99732,99737,99742,99747,99760],{"__ignoreMap":31},[36,99616,99617],{"class":38,"line":39},[36,99618,99619],{"class":124},"#两个三行六列\n",[36,99621,99622,99624,99626,99628,99630,99632,99634,99636,99638,99640,99642,99644,99646],{"class":38,"line":54},[36,99623,96852],{"class":50},[36,99625,70],{"class":42},[36,99627,94333],{"class":50},[36,99629,1885],{"class":73},[36,99631,2045],{"class":50},[36,99633,1993],{"class":73},[36,99635,94338],{"class":50},[36,99637,1747],{"class":73},[36,99639,2045],{"class":50},[36,99641,1741],{"class":73},[36,99643,2045],{"class":50},[36,99645,2012],{"class":73},[36,99647,1680],{"class":50},[36,99649,99650,99653,99655,99657,99659,99661,99664,99666,99668,99670,99672,99674,99676],{"class":38,"line":61},[36,99651,99652],{"class":50},"bbb",[36,99654,70],{"class":42},[36,99656,94333],{"class":50},[36,99658,2005],{"class":73},[36,99660,2045],{"class":50},[36,99662,99663],{"class":73},"137",[36,99665,94338],{"class":50},[36,99667,1747],{"class":73},[36,99669,2045],{"class":50},[36,99671,1741],{"class":73},[36,99673,2045],{"class":50},[36,99675,2012],{"class":73},[36,99677,1680],{"class":50},[36,99679,99680],{"class":38,"line":80},[36,99681,99682],{"class":124},"#axis=0\n",[36,99684,99685,99687,99689,99692,99694,99696,99698],{"class":38,"line":96},[36,99686,2362],{"class":50},[36,99688,70],{"class":42},[36,99690,99691],{"class":50},"np.concatenate((aaa,bbb),",[36,99693,48845],{"class":473},[36,99695,70],{"class":42},[36,99697,1859],{"class":73},[36,99699,1680],{"class":50},[36,99701,99702],{"class":38,"line":101},[36,99703,99704],{"class":50},"s.shape\n",[36,99706,99707],{"class":38,"line":128},[36,99708,99709],{"class":124},"#输出：(4,3,6)\n",[36,99711,99712],{"class":38,"line":149},[36,99713,99714],{"class":124},"#axis=1\n",[36,99716,99717,99720,99722,99724,99726,99728,99730],{"class":38,"line":154},[36,99718,99719],{"class":50},"ss",[36,99721,70],{"class":42},[36,99723,99691],{"class":50},[36,99725,48845],{"class":473},[36,99727,70],{"class":42},[36,99729,1885],{"class":73},[36,99731,1680],{"class":50},[36,99733,99734],{"class":38,"line":167},[36,99735,99736],{"class":50},"ss.shape\n",[36,99738,99739],{"class":38,"line":172},[36,99740,99741],{"class":124},"#输出：(2,6,6)\n",[36,99743,99744],{"class":38,"line":192},[36,99745,99746],{"class":124},"#axis=2\n",[36,99748,99749,99751,99753,99755,99757],{"class":38,"line":211},[36,99750,99691],{"class":50},[36,99752,48845],{"class":473},[36,99754,70],{"class":42},[36,99756,1747],{"class":73},[36,99758,99759],{"class":50},").shape\n",[36,99761,99762],{"class":38,"line":216},[36,99763,99764],{"class":124},"#输出：（2，3，12）\n",[19,99766,99767],{},"⑤四维数组拼接",[26,99769,99771],{"className":31709,"code":99770,"language":31711,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\naaaa=aaa.reshape(2,3,3,2)\nbbbb=bbb.reshape(2,3,3,2)\n#axis=0\nnp.concatenate((aaaa,bbbb),axis=0).shape\n#结果：（4，3，3，2）\n#axis=1\nnp.concatenate((aaaa,bbbb),axis=1).shape\n#结果：（2，6，3，2）\n#axis=2\nnp.concatenate((aaaa,bbbb),axis=2).shape\n#结果：（2，3，6，2）\n#axis=3\nnp.concatenate((aaaa,bbbb),axis=3).shape\n#结果：（2，3，3，4）\n",[33,99772,99773,99777,99805,99833,99858,99884,99888,99901,99906,99910,99922,99927,99931,99943,99948,99953,99965],{"__ignoreMap":31},[36,99774,99775],{"class":38,"line":39},[36,99776,99619],{"class":124},[36,99778,99779,99781,99783,99785,99787,99789,99791,99793,99795,99797,99799,99801,99803],{"class":38,"line":54},[36,99780,96852],{"class":50},[36,99782,70],{"class":42},[36,99784,94333],{"class":50},[36,99786,1885],{"class":73},[36,99788,2045],{"class":50},[36,99790,1993],{"class":73},[36,99792,94338],{"class":50},[36,99794,1747],{"class":73},[36,99796,2045],{"class":50},[36,99798,1741],{"class":73},[36,99800,2045],{"class":50},[36,99802,2012],{"class":73},[36,99804,1680],{"class":50},[36,99806,99807,99809,99811,99813,99815,99817,99819,99821,99823,99825,99827,99829,99831],{"class":38,"line":61},[36,99808,99652],{"class":50},[36,99810,70],{"class":42},[36,99812,94333],{"class":50},[36,99814,2005],{"class":73},[36,99816,2045],{"class":50},[36,99818,99663],{"class":73},[36,99820,94338],{"class":50},[36,99822,1747],{"class":73},[36,99824,2045],{"class":50},[36,99826,1741],{"class":73},[36,99828,2045],{"class":50},[36,99830,2012],{"class":73},[36,99832,1680],{"class":50},[36,99834,99835,99838,99840,99842,99844,99846,99848,99850,99852,99854,99856],{"class":38,"line":80},[36,99836,99837],{"class":50},"aaaa",[36,99839,70],{"class":42},[36,99841,99001],{"class":50},[36,99843,1747],{"class":73},[36,99845,2045],{"class":50},[36,99847,1741],{"class":73},[36,99849,2045],{"class":50},[36,99851,1741],{"class":73},[36,99853,2045],{"class":50},[36,99855,1747],{"class":73},[36,99857,1680],{"class":50},[36,99859,99860,99863,99865,99868,99870,99872,99874,99876,99878,99880,99882],{"class":38,"line":96},[36,99861,99862],{"class":50},"bbbb",[36,99864,70],{"class":42},[36,99866,99867],{"class":50},"bbb.reshape(",[36,99869,1747],{"class":73},[36,99871,2045],{"class":50},[36,99873,1741],{"class":73},[36,99875,2045],{"class":50},[36,99877,1741],{"class":73},[36,99879,2045],{"class":50},[36,99881,1747],{"class":73},[36,99883,1680],{"class":50},[36,99885,99886],{"class":38,"line":101},[36,99887,99682],{"class":124},[36,99889,99890,99893,99895,99897,99899],{"class":38,"line":128},[36,99891,99892],{"class":50},"np.concatenate((aaaa,bbbb),",[36,99894,48845],{"class":473},[36,99896,70],{"class":42},[36,99898,1859],{"class":73},[36,99900,99759],{"class":50},[36,99902,99903],{"class":38,"line":149},[36,99904,99905],{"class":124},"#结果：（4，3，3，2）\n",[36,99907,99908],{"class":38,"line":154},[36,99909,99714],{"class":124},[36,99911,99912,99914,99916,99918,99920],{"class":38,"line":167},[36,99913,99892],{"class":50},[36,99915,48845],{"class":473},[36,99917,70],{"class":42},[36,99919,1885],{"class":73},[36,99921,99759],{"class":50},[36,99923,99924],{"class":38,"line":172},[36,99925,99926],{"class":124},"#结果：（2，6，3，2）\n",[36,99928,99929],{"class":38,"line":192},[36,99930,99746],{"class":124},[36,99932,99933,99935,99937,99939,99941],{"class":38,"line":211},[36,99934,99892],{"class":50},[36,99936,48845],{"class":473},[36,99938,70],{"class":42},[36,99940,1747],{"class":73},[36,99942,99759],{"class":50},[36,99944,99945],{"class":38,"line":216},[36,99946,99947],{"class":124},"#结果：（2，3，6，2）\n",[36,99949,99950],{"class":38,"line":231},[36,99951,99952],{"class":124},"#axis=3\n",[36,99954,99955,99957,99959,99961,99963],{"class":38,"line":236},[36,99956,99892],{"class":50},[36,99958,48845],{"class":473},[36,99960,70],{"class":42},[36,99962,1741],{"class":73},[36,99964,99759],{"class":50},[36,99966,99967],{"class":38,"line":247},[36,99968,99969],{"class":124},"#结果：（2，3，3，4）\n",[14,99971,99973],{"id":99972},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,99975,99976],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,99978,99979],{},"①二维数组",[26,99981,99983],{"className":31709,"code":99982,"language":31711,"meta":31,"style":31},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\nnp.hstack((aa,bb))\n#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n#np.hstack([aa,bb])\n",[33,99984,99985,100009,100033,100038,100043],{"__ignoreMap":31},[36,99986,99987,99989,99991,99993,99995,99997,99999,100001,100003,100005,100007],{"class":38,"line":39},[36,99988,94637],{"class":50},[36,99990,70],{"class":42},[36,99992,94333],{"class":50},[36,99994,1885],{"class":73},[36,99996,2045],{"class":50},[36,99998,2190],{"class":73},[36,100000,94338],{"class":50},[36,100002,1741],{"class":73},[36,100004,2045],{"class":50},[36,100006,1961],{"class":73},[36,100008,1680],{"class":50},[36,100010,100011,100013,100015,100017,100019,100021,100023,100025,100027,100029,100031],{"class":38,"line":54},[36,100012,99518],{"class":50},[36,100014,70],{"class":42},[36,100016,94333],{"class":50},[36,100018,2005],{"class":73},[36,100020,2045],{"class":50},[36,100022,2309],{"class":73},[36,100024,94338],{"class":50},[36,100026,1741],{"class":73},[36,100028,2045],{"class":50},[36,100030,1961],{"class":73},[36,100032,1680],{"class":50},[36,100034,100035],{"class":38,"line":61},[36,100036,100037],{"class":50},"np.hstack((aa,bb))\n",[36,100039,100040],{"class":38,"line":80},[36,100041,100042],{"class":124},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[36,100044,100045],{"class":38,"line":96},[36,100046,100047],{"class":124},"#np.hstack([aa,bb])\n",[19,100049,99564],{},[19,100051,100052],{},[2992,100053],{"alt":31,"src":100054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100056,100057],{},"等效于concatenate()函数中axis=1时的情况",[19,100059,100060],{},"②三维数组",[26,100062,100064],{"className":31709,"code":100063,"language":31711,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用hstack\nnp.hstack((aaa,bbb)).shape\n#输出：（2，6，6）\n",[33,100065,100066,100070,100098,100126,100131,100136],{"__ignoreMap":31},[36,100067,100068],{"class":38,"line":39},[36,100069,99619],{"class":124},[36,100071,100072,100074,100076,100078,100080,100082,100084,100086,100088,100090,100092,100094,100096],{"class":38,"line":54},[36,100073,96852],{"class":50},[36,100075,70],{"class":42},[36,100077,94333],{"class":50},[36,100079,1885],{"class":73},[36,100081,2045],{"class":50},[36,100083,1993],{"class":73},[36,100085,94338],{"class":50},[36,100087,1747],{"class":73},[36,100089,2045],{"class":50},[36,100091,1741],{"class":73},[36,100093,2045],{"class":50},[36,100095,2012],{"class":73},[36,100097,1680],{"class":50},[36,100099,100100,100102,100104,100106,100108,100110,100112,100114,100116,100118,100120,100122,100124],{"class":38,"line":61},[36,100101,99652],{"class":50},[36,100103,70],{"class":42},[36,100105,94333],{"class":50},[36,100107,2005],{"class":73},[36,100109,2045],{"class":50},[36,100111,99663],{"class":73},[36,100113,94338],{"class":50},[36,100115,1747],{"class":73},[36,100117,2045],{"class":50},[36,100119,1741],{"class":73},[36,100121,2045],{"class":50},[36,100123,2012],{"class":73},[36,100125,1680],{"class":50},[36,100127,100128],{"class":38,"line":80},[36,100129,100130],{"class":124},"#使用hstack\n",[36,100132,100133],{"class":38,"line":96},[36,100134,100135],{"class":50},"np.hstack((aaa,bbb)).shape\n",[36,100137,100138],{"class":38,"line":101},[36,100139,100140],{"class":124},"#输出：（2，6，6）\n",[14,100142,100144],{"id":100143},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100146,100147],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100149,99979],{},[26,100151,100153],{"className":31709,"code":100152,"language":31711,"meta":31,"style":31},"aa=np.arange(1,13).reshape(3,4)\nbb=np.arange(101,113).reshape(3,4)\n#vstack 垂直方向进行堆叠\nnp.vstack((aa,bb))\n#与hstack传的参数类似，等价于：\nnp.vstack([aa,bb])\n",[33,100154,100155,100179,100203,100208,100213,100218],{"__ignoreMap":31},[36,100156,100157,100159,100161,100163,100165,100167,100169,100171,100173,100175,100177],{"class":38,"line":39},[36,100158,94637],{"class":50},[36,100160,70],{"class":42},[36,100162,94333],{"class":50},[36,100164,1885],{"class":73},[36,100166,2045],{"class":50},[36,100168,2190],{"class":73},[36,100170,94338],{"class":50},[36,100172,1741],{"class":73},[36,100174,2045],{"class":50},[36,100176,1961],{"class":73},[36,100178,1680],{"class":50},[36,100180,100181,100183,100185,100187,100189,100191,100193,100195,100197,100199,100201],{"class":38,"line":54},[36,100182,99518],{"class":50},[36,100184,70],{"class":42},[36,100186,94333],{"class":50},[36,100188,2005],{"class":73},[36,100190,2045],{"class":50},[36,100192,2309],{"class":73},[36,100194,94338],{"class":50},[36,100196,1741],{"class":73},[36,100198,2045],{"class":50},[36,100200,1961],{"class":73},[36,100202,1680],{"class":50},[36,100204,100205],{"class":38,"line":61},[36,100206,100207],{"class":124},"#vstack 垂直方向进行堆叠\n",[36,100209,100210],{"class":38,"line":80},[36,100211,100212],{"class":50},"np.vstack((aa,bb))\n",[36,100214,100215],{"class":38,"line":96},[36,100216,100217],{"class":124},"#与hstack传的参数类似，等价于：\n",[36,100219,100220],{"class":38,"line":101},[36,100221,100222],{"class":50},"np.vstack([aa,bb])\n",[19,100224,99564],{},[19,100226,100227],{},[2992,100228],{"alt":31,"src":100229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100231,100060],{},[26,100233,100235],{"className":31709,"code":100234,"language":31711,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用vstack\nnp.vstack((aaa,bbb)).shape\n#输出：（4，3，6）\n",[33,100236,100237,100241,100269,100297,100302,100307],{"__ignoreMap":31},[36,100238,100239],{"class":38,"line":39},[36,100240,99619],{"class":124},[36,100242,100243,100245,100247,100249,100251,100253,100255,100257,100259,100261,100263,100265,100267],{"class":38,"line":54},[36,100244,96852],{"class":50},[36,100246,70],{"class":42},[36,100248,94333],{"class":50},[36,100250,1885],{"class":73},[36,100252,2045],{"class":50},[36,100254,1993],{"class":73},[36,100256,94338],{"class":50},[36,100258,1747],{"class":73},[36,100260,2045],{"class":50},[36,100262,1741],{"class":73},[36,100264,2045],{"class":50},[36,100266,2012],{"class":73},[36,100268,1680],{"class":50},[36,100270,100271,100273,100275,100277,100279,100281,100283,100285,100287,100289,100291,100293,100295],{"class":38,"line":61},[36,100272,99652],{"class":50},[36,100274,70],{"class":42},[36,100276,94333],{"class":50},[36,100278,2005],{"class":73},[36,100280,2045],{"class":50},[36,100282,99663],{"class":73},[36,100284,94338],{"class":50},[36,100286,1747],{"class":73},[36,100288,2045],{"class":50},[36,100290,1741],{"class":73},[36,100292,2045],{"class":50},[36,100294,2012],{"class":73},[36,100296,1680],{"class":50},[36,100298,100299],{"class":38,"line":80},[36,100300,100301],{"class":124},"#使用vstack\n",[36,100303,100304],{"class":38,"line":96},[36,100305,100306],{"class":50},"np.vstack((aaa,bbb)).shape\n",[36,100308,100309],{"class":38,"line":101},[36,100310,100311],{"class":124},"#输出：（4，3，6）\n",[14,100313,100315],{"id":100314},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100317,100318],{},"该方法是三维数组特有的方法",[19,100320,100321],{},"也就是说",[19,100323,100324],{},"一维数组拼接方法用：concatenate()",[19,100326,100327],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100329,100330],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100332,100333],{},"四维数组及多维数组只能用concatenate进行拼接",[26,100335,100337],{"className":31709,"code":100336,"language":31711,"meta":31,"style":31},"#两个三行六列\naaa=np.arange(1,37).reshape(2,3,6)\nbbb=np.arange(101,137).reshape(2,3,6)\n#使用dstack\nnp.dstack((aaa,bbb)).shape\n#结果：（2，3，12）\n",[33,100338,100339,100343,100371,100399,100404,100409],{"__ignoreMap":31},[36,100340,100341],{"class":38,"line":39},[36,100342,99619],{"class":124},[36,100344,100345,100347,100349,100351,100353,100355,100357,100359,100361,100363,100365,100367,100369],{"class":38,"line":54},[36,100346,96852],{"class":50},[36,100348,70],{"class":42},[36,100350,94333],{"class":50},[36,100352,1885],{"class":73},[36,100354,2045],{"class":50},[36,100356,1993],{"class":73},[36,100358,94338],{"class":50},[36,100360,1747],{"class":73},[36,100362,2045],{"class":50},[36,100364,1741],{"class":73},[36,100366,2045],{"class":50},[36,100368,2012],{"class":73},[36,100370,1680],{"class":50},[36,100372,100373,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393,100395,100397],{"class":38,"line":61},[36,100374,99652],{"class":50},[36,100376,70],{"class":42},[36,100378,94333],{"class":50},[36,100380,2005],{"class":73},[36,100382,2045],{"class":50},[36,100384,99663],{"class":73},[36,100386,94338],{"class":50},[36,100388,1747],{"class":73},[36,100390,2045],{"class":50},[36,100392,1741],{"class":73},[36,100394,2045],{"class":50},[36,100396,2012],{"class":73},[36,100398,1680],{"class":50},[36,100400,100401],{"class":38,"line":80},[36,100402,100403],{"class":124},"#使用dstack\n",[36,100405,100406],{"class":38,"line":96},[36,100407,100408],{"class":50},"np.dstack((aaa,bbb)).shape\n",[36,100410,100411],{"class":38,"line":101},[36,100412,100413],{"class":124},"#结果：（2，3，12）\n",[1592,100415,100416],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":100418},[100419,100420,100421,100422],{"id":99358,"depth":54,"text":99359},{"id":99972,"depth":54,"text":99973},{"id":100143,"depth":54,"text":100144},{"id":100314,"depth":54,"text":100315},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99350,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100429,"title":100430,"body":100431,"description":24706,"extension":1603,"meta":100706,"navigation":57,"path":100707,"seo":100708,"stem":100709,"__hash__":100710},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100432,"toc":100704},[100433,100436,100439,100533,100536,100539,100542,100545,100548,100551,100554,100557,100701],[10,100434,100430],{"id":100435},"_7数组转置",[19,100437,100438],{},"使用transpose()函数",[26,100440,100442],{"className":31709,"code":100441,"language":31711,"meta":31,"style":31},"import numpy as np\na= np.arange(1,13).reshape(4,3)\n#二维数组转置\n#调用transpose()函数\na.transpose()\n#对于二维数组也可以采用.T来实现\na.T#与上述代码一样\n#结果：\n'''\narray([[ 1,  4,  7, 10],\n       [ 2,  5,  8, 11],\n       [ 3,  6,  9, 12]])\n'''\n",[33,100443,100444,100454,100478,100483,100488,100493,100498,100506,100510,100514,100519,100524,100529],{"__ignoreMap":31},[36,100445,100446,100448,100450,100452],{"class":38,"line":39},[36,100447,31723],{"class":42},[36,100449,32711],{"class":50},[36,100451,32714],{"class":42},[36,100453,32717],{"class":50},[36,100455,100456,100458,100460,100462,100464,100466,100468,100470,100472,100474,100476],{"class":38,"line":54},[36,100457,1906],{"class":50},[36,100459,70],{"class":42},[36,100461,33048],{"class":50},[36,100463,1885],{"class":73},[36,100465,2045],{"class":50},[36,100467,2190],{"class":73},[36,100469,94338],{"class":50},[36,100471,1961],{"class":73},[36,100473,2045],{"class":50},[36,100475,1741],{"class":73},[36,100477,1680],{"class":50},[36,100479,100480],{"class":38,"line":61},[36,100481,100482],{"class":124},"#二维数组转置\n",[36,100484,100485],{"class":38,"line":80},[36,100486,100487],{"class":124},"#调用transpose()函数\n",[36,100489,100490],{"class":38,"line":96},[36,100491,100492],{"class":50},"a.transpose()\n",[36,100494,100495],{"class":38,"line":101},[36,100496,100497],{"class":124},"#对于二维数组也可以采用.T来实现\n",[36,100499,100500,100503],{"class":38,"line":128},[36,100501,100502],{"class":50},"a.T",[36,100504,100505],{"class":124},"#与上述代码一样\n",[36,100507,100508],{"class":38,"line":149},[36,100509,94895],{"class":124},[36,100511,100512],{"class":38,"line":154},[36,100513,95259],{"class":110},[36,100515,100516],{"class":38,"line":167},[36,100517,100518],{"class":110},"array([[ 1,  4,  7, 10],\n",[36,100520,100521],{"class":38,"line":172},[36,100522,100523],{"class":110},"       [ 2,  5,  8, 11],\n",[36,100525,100526],{"class":38,"line":192},[36,100527,100528],{"class":110},"       [ 3,  6,  9, 12]])\n",[36,100530,100531],{"class":38,"line":211},[36,100532,95259],{"class":110},[19,100534,100535],{},"也可以使用np.transpose()的形式",[19,100537,100538],{},"#多维数组进行转置 np.transpose()",[19,100540,100541],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100543,100544],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100546,100547],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100549,100550],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100552,100553],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100555,100556],{},"四维及以上的数组也是一样的道理",[26,100558,100560],{"className":31709,"code":100559,"language":31711,"meta":31,"style":31},"x=np.arange(1,37).reshape(3,6,2)\nx.shape\n#结果：（3,6,2）\n#使用np.transpose()进行转置 变为(2,6,3)\nnp.transpose(x,(2,1,0)).shape\n#结果：(2,6,3)\naaaa=np.arange(1,37).reshape(3,2,1,6)\naaaa.shape\n#结果：（3，2，1，6）\n#使用np.transpose()进行转置 变为(2,1,3,6)\nnp.transpose(aaaa,(1,2,0,3)).shape\n#结果：(2,1,3,6)\n",[33,100561,100562,100590,100595,100600,100605,100623,100628,100660,100665,100670,100675,100696],{"__ignoreMap":31},[36,100563,100564,100566,100568,100570,100572,100574,100576,100578,100580,100582,100584,100586,100588],{"class":38,"line":39},[36,100565,2487],{"class":50},[36,100567,70],{"class":42},[36,100569,94333],{"class":50},[36,100571,1885],{"class":73},[36,100573,2045],{"class":50},[36,100575,1993],{"class":73},[36,100577,94338],{"class":50},[36,100579,1741],{"class":73},[36,100581,2045],{"class":50},[36,100583,2012],{"class":73},[36,100585,2045],{"class":50},[36,100587,1747],{"class":73},[36,100589,1680],{"class":50},[36,100591,100592],{"class":38,"line":54},[36,100593,100594],{"class":50},"x.shape\n",[36,100596,100597],{"class":38,"line":61},[36,100598,100599],{"class":124},"#结果：（3,6,2）\n",[36,100601,100602],{"class":38,"line":80},[36,100603,100604],{"class":124},"#使用np.transpose()进行转置 变为(2,6,3)\n",[36,100606,100607,100610,100612,100614,100616,100618,100620],{"class":38,"line":96},[36,100608,100609],{"class":50},"np.transpose(x,(",[36,100611,1747],{"class":73},[36,100613,2045],{"class":50},[36,100615,1885],{"class":73},[36,100617,2045],{"class":50},[36,100619,1859],{"class":73},[36,100621,100622],{"class":50},")).shape\n",[36,100624,100625],{"class":38,"line":101},[36,100626,100627],{"class":124},"#结果：(2,6,3)\n",[36,100629,100630,100632,100634,100636,100638,100640,100642,100644,100646,100648,100650,100652,100654,100656,100658],{"class":38,"line":128},[36,100631,99837],{"class":50},[36,100633,70],{"class":42},[36,100635,94333],{"class":50},[36,100637,1885],{"class":73},[36,100639,2045],{"class":50},[36,100641,1993],{"class":73},[36,100643,94338],{"class":50},[36,100645,1741],{"class":73},[36,100647,2045],{"class":50},[36,100649,1747],{"class":73},[36,100651,2045],{"class":50},[36,100653,1885],{"class":73},[36,100655,2045],{"class":50},[36,100657,2012],{"class":73},[36,100659,1680],{"class":50},[36,100661,100662],{"class":38,"line":149},[36,100663,100664],{"class":50},"aaaa.shape\n",[36,100666,100667],{"class":38,"line":154},[36,100668,100669],{"class":124},"#结果：（3，2，1，6）\n",[36,100671,100672],{"class":38,"line":167},[36,100673,100674],{"class":124},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[36,100676,100677,100680,100682,100684,100686,100688,100690,100692,100694],{"class":38,"line":172},[36,100678,100679],{"class":50},"np.transpose(aaaa,(",[36,100681,1885],{"class":73},[36,100683,2045],{"class":50},[36,100685,1747],{"class":73},[36,100687,2045],{"class":50},[36,100689,1859],{"class":73},[36,100691,2045],{"class":50},[36,100693,1741],{"class":73},[36,100695,100622],{"class":50},[36,100697,100698],{"class":38,"line":192},[36,100699,100700],{"class":124},"#结果：(2,1,3,6)\n",[1592,100702,100703],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":100705},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100430,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100712,"title":100713,"body":100714,"description":24706,"extension":1603,"meta":101448,"navigation":57,"path":101449,"seo":101450,"stem":101451,"__hash__":101452},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100715,"toc":101446},[100716,100719,100722,100725,100728,100731,100734,100737,100740,100849,100852,100855,101443],[10,100717,100713],{"id":100718},"_8数组分割",[19,100720,100721],{},"split分割",[19,100723,100724],{},"numpy.split(ary,indics_or_sections,axis)",[19,100726,100727],{},"解释：",[19,100729,100730],{},"ary:被分割的数组",[19,100732,100733],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100735,100736],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100738,100739],{},"①一维数组的分割",[26,100741,100743],{"className":31709,"code":100742,"language":31711,"meta":31,"style":31},"a=np.arange(1,9)\n#如果传入整数，必须能够平分，否则会报错\nnp.split(a,2)\n#结果：\n#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\nnp.split(a,4)\n#结果：\n#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n#传入数组\nnp.split(a,[3,5])\n#结果：\n#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\nnp.split(a,[5,7])\n#结果：\n#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[33,100744,100745,100761,100766,100775,100779,100784,100792,100796,100801,100806,100819,100823,100828,100840,100844],{"__ignoreMap":31},[36,100746,100747,100749,100751,100753,100755,100757,100759],{"class":38,"line":39},[36,100748,1906],{"class":50},[36,100750,70],{"class":42},[36,100752,94333],{"class":50},[36,100754,1885],{"class":73},[36,100756,2045],{"class":50},[36,100758,2087],{"class":73},[36,100760,1680],{"class":50},[36,100762,100763],{"class":38,"line":54},[36,100764,100765],{"class":124},"#如果传入整数，必须能够平分，否则会报错\n",[36,100767,100768,100771,100773],{"class":38,"line":61},[36,100769,100770],{"class":50},"np.split(a,",[36,100772,1747],{"class":73},[36,100774,1680],{"class":50},[36,100776,100777],{"class":38,"line":80},[36,100778,94895],{"class":124},[36,100780,100781],{"class":38,"line":96},[36,100782,100783],{"class":124},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[36,100785,100786,100788,100790],{"class":38,"line":101},[36,100787,100770],{"class":50},[36,100789,1961],{"class":73},[36,100791,1680],{"class":50},[36,100793,100794],{"class":38,"line":128},[36,100795,94895],{"class":124},[36,100797,100798],{"class":38,"line":149},[36,100799,100800],{"class":124},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[36,100802,100803],{"class":38,"line":154},[36,100804,100805],{"class":124},"#传入数组\n",[36,100807,100808,100811,100813,100815,100817],{"class":38,"line":167},[36,100809,100810],{"class":50},"np.split(a,[",[36,100812,1741],{"class":73},[36,100814,2045],{"class":50},[36,100816,1987],{"class":73},[36,100818,6146],{"class":50},[36,100820,100821],{"class":38,"line":172},[36,100822,94895],{"class":124},[36,100824,100825],{"class":38,"line":192},[36,100826,100827],{"class":124},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[36,100829,100830,100832,100834,100836,100838],{"class":38,"line":211},[36,100831,100810],{"class":50},[36,100833,1987],{"class":73},[36,100835,2045],{"class":50},[36,100837,2036],{"class":73},[36,100839,6146],{"class":50},[36,100841,100842],{"class":38,"line":216},[36,100843,94895],{"class":124},[36,100845,100846],{"class":38,"line":231},[36,100847,100848],{"class":124},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100850,100851],{},"②二维数组的分割",[19,100853,100854],{},"使用split()",[26,100856,100858],{"className":31709,"code":100857,"language":31711,"meta":31,"style":31},"#二维数组分割\naa=np.arange(1,37).reshape(6,6)\n#默认axis=0  传入整数平均分,按行来的\nnp.split(aa,3)\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n '''\n#传入数组\nnp.split(aa,[2,5])\n#输出结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n'''\n#axis=1 按照列来分\nnp.split(aa,3,axis=1)\n#输出结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n '''\n#传入数组\nnp.split(aa,[1,2],axis=1)\n#结果：\n'''\n[array([[ 1],\n        [ 7],\n        [13],\n        [19],\n        [25],\n        [31]]),\n array([[ 2],\n        [ 8],\n        [14],\n        [20],\n        [26],\n        [32]]),\n array([[ 3,  4,  5,  6],\n        [ 9, 10, 11, 12],\n        [15, 16, 17, 18],\n        [21, 22, 23, 24],\n        [27, 28, 29, 30],\n        [33, 34, 35, 36]])]\n'''\n#在处理二维数组时也可以直接用vsplit()和hsplit()函数\nnp.vsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24]]),\n array([[25, 26, 27, 28, 29, 30],\n        [31, 32, 33, 34, 35, 36]])]\n'''\nnp.hsplit(aa,3)\n#结果：\n'''\n[array([[ 1,  2],\n        [ 7,  8],\n        [13, 14],\n        [19, 20],\n        [25, 26],\n        [31, 32]]),\n array([[ 3,  4],\n        [ 9, 10],\n        [15, 16],\n        [21, 22],\n        [27, 28],\n        [33, 34]]),\n array([[ 5,  6],\n        [11, 12],\n        [17, 18],\n        [23, 24],\n        [29, 30],\n        [35, 36]])]\n'''\nnp.vsplit(aa,[2,5])\n#结果：\n'''\n[array([[ 1,  2,  3,  4,  5,  6],\n        [ 7,  8,  9, 10, 11, 12]]),\n array([[13, 14, 15, 16, 17, 18],\n        [19, 20, 21, 22, 23, 24],\n        [25, 26, 27, 28, 29, 30]]),\n array([[31, 32, 33, 34, 35, 36]])]\n '''\n",[33,100859,100860,100865,100889,100894,100903,100907,100911,100916,100921,100926,100931,100936,100941,100946,100950,100963,100967,100971,100975,100979,100983,100988,100993,100998,101002,101007,101023,101027,101031,101036,101041,101046,101051,101056,101061,101066,101071,101076,101081,101086,101091,101096,101101,101106,101111,101116,101121,101125,101129,101149,101153,101157,101162,101167,101172,101177,101182,101187,101192,101197,101202,101207,101212,101217,101222,101227,101232,101237,101242,101247,101251,101256,101265,101269,101273,101277,101281,101285,101289,101293,101297,101301,101310,101314,101318,101322,101326,101330,101334,101338,101342,101346,101350,101354,101358,101362,101366,101370,101374,101378,101382,101386,101390,101394,101407,101411,101415,101419,101423,101427,101431,101435,101439],{"__ignoreMap":31},[36,100861,100862],{"class":38,"line":39},[36,100863,100864],{"class":124},"#二维数组分割\n",[36,100866,100867,100869,100871,100873,100875,100877,100879,100881,100883,100885,100887],{"class":38,"line":54},[36,100868,94637],{"class":50},[36,100870,70],{"class":42},[36,100872,94333],{"class":50},[36,100874,1885],{"class":73},[36,100876,2045],{"class":50},[36,100878,1993],{"class":73},[36,100880,94338],{"class":50},[36,100882,2012],{"class":73},[36,100884,2045],{"class":50},[36,100886,2012],{"class":73},[36,100888,1680],{"class":50},[36,100890,100891],{"class":38,"line":61},[36,100892,100893],{"class":124},"#默认axis=0  传入整数平均分,按行来的\n",[36,100895,100896,100899,100901],{"class":38,"line":80},[36,100897,100898],{"class":50},"np.split(aa,",[36,100900,1741],{"class":73},[36,100902,1680],{"class":50},[36,100904,100905],{"class":38,"line":96},[36,100906,97095],{"class":124},[36,100908,100909],{"class":38,"line":101},[36,100910,95259],{"class":110},[36,100912,100913],{"class":38,"line":128},[36,100914,100915],{"class":110},"[array([[ 1,  2,  3,  4,  5,  6],\n",[36,100917,100918],{"class":38,"line":149},[36,100919,100920],{"class":110},"        [ 7,  8,  9, 10, 11, 12]]),\n",[36,100922,100923],{"class":38,"line":154},[36,100924,100925],{"class":110}," array([[13, 14, 15, 16, 17, 18],\n",[36,100927,100928],{"class":38,"line":167},[36,100929,100930],{"class":110},"        [19, 20, 21, 22, 23, 24]]),\n",[36,100932,100933],{"class":38,"line":172},[36,100934,100935],{"class":110}," array([[25, 26, 27, 28, 29, 30],\n",[36,100937,100938],{"class":38,"line":192},[36,100939,100940],{"class":110},"        [31, 32, 33, 34, 35, 36]])]\n",[36,100942,100943],{"class":38,"line":211},[36,100944,100945],{"class":110}," '''\n",[36,100947,100948],{"class":38,"line":216},[36,100949,100805],{"class":124},[36,100951,100952,100955,100957,100959,100961],{"class":38,"line":231},[36,100953,100954],{"class":50},"np.split(aa,[",[36,100956,1747],{"class":73},[36,100958,2045],{"class":50},[36,100960,1987],{"class":73},[36,100962,6146],{"class":50},[36,100964,100965],{"class":38,"line":236},[36,100966,97095],{"class":124},[36,100968,100969],{"class":38,"line":247},[36,100970,95259],{"class":110},[36,100972,100973],{"class":38,"line":637},[36,100974,100915],{"class":110},[36,100976,100977],{"class":38,"line":646},[36,100978,100920],{"class":110},[36,100980,100981],{"class":38,"line":655},[36,100982,100925],{"class":110},[36,100984,100985],{"class":38,"line":660},[36,100986,100987],{"class":110},"        [19, 20, 21, 22, 23, 24],\n",[36,100989,100990],{"class":38,"line":665},[36,100991,100992],{"class":110},"        [25, 26, 27, 28, 29, 30]]),\n",[36,100994,100995],{"class":38,"line":674},[36,100996,100997],{"class":110}," array([[31, 32, 33, 34, 35, 36]])]\n",[36,100999,101000],{"class":38,"line":679},[36,101001,95259],{"class":110},[36,101003,101004],{"class":38,"line":692},[36,101005,101006],{"class":124},"#axis=1 按照列来分\n",[36,101008,101009,101011,101013,101015,101017,101019,101021],{"class":38,"line":705},[36,101010,100898],{"class":50},[36,101012,1741],{"class":73},[36,101014,2045],{"class":50},[36,101016,48845],{"class":473},[36,101018,70],{"class":42},[36,101020,1885],{"class":73},[36,101022,1680],{"class":50},[36,101024,101025],{"class":38,"line":710},[36,101026,97095],{"class":124},[36,101028,101029],{"class":38,"line":722},[36,101030,95259],{"class":110},[36,101032,101033],{"class":38,"line":750},[36,101034,101035],{"class":110},"[array([[ 1,  2],\n",[36,101037,101038],{"class":38,"line":755},[36,101039,101040],{"class":110},"        [ 7,  8],\n",[36,101042,101043],{"class":38,"line":777},[36,101044,101045],{"class":110},"        [13, 14],\n",[36,101047,101048],{"class":38,"line":802},[36,101049,101050],{"class":110},"        [19, 20],\n",[36,101052,101053],{"class":38,"line":807},[36,101054,101055],{"class":110},"        [25, 26],\n",[36,101057,101058],{"class":38,"line":818},[36,101059,101060],{"class":110},"        [31, 32]]),\n",[36,101062,101063],{"class":38,"line":843},[36,101064,101065],{"class":110}," array([[ 3,  4],\n",[36,101067,101068],{"class":38,"line":848},[36,101069,101070],{"class":110},"        [ 9, 10],\n",[36,101072,101073],{"class":38,"line":859},[36,101074,101075],{"class":110},"        [15, 16],\n",[36,101077,101078],{"class":38,"line":864},[36,101079,101080],{"class":110},"        [21, 22],\n",[36,101082,101083],{"class":38,"line":873},[36,101084,101085],{"class":110},"        [27, 28],\n",[36,101087,101088],{"class":38,"line":9454},[36,101089,101090],{"class":110},"        [33, 34]]),\n",[36,101092,101093],{"class":38,"line":9481},[36,101094,101095],{"class":110}," array([[ 5,  6],\n",[36,101097,101098],{"class":38,"line":9486},[36,101099,101100],{"class":110},"        [11, 12],\n",[36,101102,101103],{"class":38,"line":9492},[36,101104,101105],{"class":110},"        [17, 18],\n",[36,101107,101108],{"class":38,"line":9504},[36,101109,101110],{"class":110},"        [23, 24],\n",[36,101112,101113],{"class":38,"line":9516},[36,101114,101115],{"class":110},"        [29, 30],\n",[36,101117,101118],{"class":38,"line":9528},[36,101119,101120],{"class":110},"        [35, 36]])]\n",[36,101122,101123],{"class":38,"line":11184},[36,101124,100945],{"class":110},[36,101126,101127],{"class":38,"line":11209},[36,101128,100805],{"class":124},[36,101130,101131,101133,101135,101137,101139,101141,101143,101145,101147],{"class":38,"line":11232},[36,101132,100954],{"class":50},[36,101134,1885],{"class":73},[36,101136,2045],{"class":50},[36,101138,1747],{"class":73},[36,101140,42940],{"class":50},[36,101142,48845],{"class":473},[36,101144,70],{"class":42},[36,101146,1885],{"class":73},[36,101148,1680],{"class":50},[36,101150,101151],{"class":38,"line":11256},[36,101152,94895],{"class":124},[36,101154,101155],{"class":38,"line":11261},[36,101156,95259],{"class":110},[36,101158,101159],{"class":38,"line":11266},[36,101160,101161],{"class":110},"[array([[ 1],\n",[36,101163,101164],{"class":38,"line":11271},[36,101165,101166],{"class":110},"        [ 7],\n",[36,101168,101169],{"class":38,"line":11280},[36,101170,101171],{"class":110},"        [13],\n",[36,101173,101174],{"class":38,"line":11285},[36,101175,101176],{"class":110},"        [19],\n",[36,101178,101179],{"class":38,"line":11291},[36,101180,101181],{"class":110},"        [25],\n",[36,101183,101184],{"class":38,"line":11312},[36,101185,101186],{"class":110},"        [31]]),\n",[36,101188,101189],{"class":38,"line":11318},[36,101190,101191],{"class":110}," array([[ 2],\n",[36,101193,101194],{"class":38,"line":11332},[36,101195,101196],{"class":110},"        [ 8],\n",[36,101198,101199],{"class":38,"line":11338},[36,101200,101201],{"class":110},"        [14],\n",[36,101203,101204],{"class":38,"line":11365},[36,101205,101206],{"class":110},"        [20],\n",[36,101208,101209],{"class":38,"line":11374},[36,101210,101211],{"class":110},"        [26],\n",[36,101213,101214],{"class":38,"line":11380},[36,101215,101216],{"class":110},"        [32]]),\n",[36,101218,101219],{"class":38,"line":11388},[36,101220,101221],{"class":110}," array([[ 3,  4,  5,  6],\n",[36,101223,101224],{"class":38,"line":11393},[36,101225,101226],{"class":110},"        [ 9, 10, 11, 12],\n",[36,101228,101229],{"class":38,"line":17933},[36,101230,101231],{"class":110},"        [15, 16, 17, 18],\n",[36,101233,101234],{"class":38,"line":17939},[36,101235,101236],{"class":110},"        [21, 22, 23, 24],\n",[36,101238,101239],{"class":38,"line":17962},[36,101240,101241],{"class":110},"        [27, 28, 29, 30],\n",[36,101243,101244],{"class":38,"line":17968},[36,101245,101246],{"class":110},"        [33, 34, 35, 36]])]\n",[36,101248,101249],{"class":38,"line":17991},[36,101250,95259],{"class":110},[36,101252,101253],{"class":38,"line":18005},[36,101254,101255],{"class":124},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[36,101257,101258,101261,101263],{"class":38,"line":18025},[36,101259,101260],{"class":50},"np.vsplit(aa,",[36,101262,1741],{"class":73},[36,101264,1680],{"class":50},[36,101266,101267],{"class":38,"line":18031},[36,101268,94895],{"class":124},[36,101270,101271],{"class":38,"line":18042},[36,101272,95259],{"class":110},[36,101274,101275],{"class":38,"line":18065},[36,101276,100915],{"class":110},[36,101278,101279],{"class":38,"line":18087},[36,101280,100920],{"class":110},[36,101282,101283],{"class":38,"line":18092},[36,101284,100925],{"class":110},[36,101286,101287],{"class":38,"line":18098},[36,101288,100930],{"class":110},[36,101290,101291],{"class":38,"line":18112},[36,101292,100935],{"class":110},[36,101294,101295],{"class":38,"line":18125},[36,101296,100940],{"class":110},[36,101298,101299],{"class":38,"line":18130},[36,101300,95259],{"class":110},[36,101302,101303,101306,101308],{"class":38,"line":18144},[36,101304,101305],{"class":50},"np.hsplit(aa,",[36,101307,1741],{"class":73},[36,101309,1680],{"class":50},[36,101311,101312],{"class":38,"line":18149},[36,101313,94895],{"class":124},[36,101315,101316],{"class":38,"line":18155},[36,101317,95259],{"class":110},[36,101319,101320],{"class":38,"line":18160},[36,101321,101035],{"class":110},[36,101323,101324],{"class":38,"line":18174},[36,101325,101040],{"class":110},[36,101327,101328],{"class":38,"line":18179},[36,101329,101045],{"class":110},[36,101331,101332],{"class":38,"line":18184},[36,101333,101050],{"class":110},[36,101335,101336],{"class":38,"line":18198},[36,101337,101055],{"class":110},[36,101339,101340],{"class":38,"line":18210},[36,101341,101060],{"class":110},[36,101343,101344],{"class":38,"line":18215},[36,101345,101065],{"class":110},[36,101347,101348],{"class":38,"line":18228},[36,101349,101070],{"class":110},[36,101351,101352],{"class":38,"line":18233},[36,101353,101075],{"class":110},[36,101355,101356],{"class":38,"line":18238},[36,101357,101080],{"class":110},[36,101359,101360],{"class":38,"line":18243},[36,101361,101085],{"class":110},[36,101363,101364],{"class":38,"line":18256},[36,101365,101090],{"class":110},[36,101367,101368],{"class":38,"line":18261},[36,101369,101095],{"class":110},[36,101371,101372],{"class":38,"line":33964},[36,101373,101100],{"class":110},[36,101375,101376],{"class":38,"line":33970},[36,101377,101105],{"class":110},[36,101379,101380],{"class":38,"line":33976},[36,101381,101110],{"class":110},[36,101383,101384],{"class":38,"line":33982},[36,101385,101115],{"class":110},[36,101387,101388],{"class":38,"line":33988},[36,101389,101120],{"class":110},[36,101391,101392],{"class":38,"line":33999},[36,101393,95259],{"class":110},[36,101395,101396,101399,101401,101403,101405],{"class":38,"line":34005},[36,101397,101398],{"class":50},"np.vsplit(aa,[",[36,101400,1747],{"class":73},[36,101402,2045],{"class":50},[36,101404,1987],{"class":73},[36,101406,6146],{"class":50},[36,101408,101409],{"class":38,"line":34025},[36,101410,94895],{"class":124},[36,101412,101413],{"class":38,"line":34031},[36,101414,95259],{"class":110},[36,101416,101417],{"class":38,"line":34042},[36,101418,100915],{"class":110},[36,101420,101421],{"class":38,"line":34048},[36,101422,100920],{"class":110},[36,101424,101425],{"class":38,"line":34054},[36,101426,100925],{"class":110},[36,101428,101429],{"class":38,"line":34060},[36,101430,100987],{"class":110},[36,101432,101433],{"class":38,"line":34066},[36,101434,100992],{"class":110},[36,101436,101437],{"class":38,"line":34072},[36,101438,100997],{"class":110},[36,101440,101441],{"class":38,"line":34078},[36,101442,100945],{"class":110},[1592,101444,101445],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":101447},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100713,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101454,"title":101455,"body":101456,"description":24706,"extension":1603,"meta":101950,"navigation":57,"path":101951,"seo":101952,"stem":101953,"__hash__":101954},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101457,"toc":101941},[101458,101461,101464,101489,101493,101552,101604,101608,101610,101646,101700,101702,101740,101811,101815,101820,101824,101827,101860,101863,101867,101870,101873,101876,101879,101884,101888,101891,101894,101897,101900,101905,101909,101914,101917,101938],[10,101459,101455],{"id":101460},"_9数学函数",[19,101462,101463],{},"补充回顾：python的列表推导式",[26,101465,101467],{"className":31709,"code":101466,"language":31711,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[33,101468,101469],{"__ignoreMap":31},[36,101470,101471,101473,101475,101477,101480,101482,101484,101486],{"class":38,"line":39},[36,101472,2557],{"class":50},[36,101474,1885],{"class":73},[36,101476,2251],{"class":42},[36,101478,101479],{"class":50},"i ",[36,101481,4516],{"class":42},[36,101483,10906],{"class":50},[36,101485,27374],{"class":42},[36,101487,101488],{"class":50}," a]\n",[14,101490,101492],{"id":101491},"_91-求倒数","9.1 求倒数",[26,101494,101496],{"className":31709,"code":101495,"language":31711,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[33,101497,101498,101503,101531,101543],{"__ignoreMap":31},[36,101499,101500],{"class":38,"line":39},[36,101501,101502],{"class":124},"#数组求倒数\n",[36,101504,101505,101507,101509,101511,101513,101515,101517,101519,101521,101523,101525,101527,101529],{"class":38,"line":54},[36,101506,1906],{"class":50},[36,101508,70],{"class":42},[36,101510,2557],{"class":50},[36,101512,1885],{"class":73},[36,101514,2045],{"class":50},[36,101516,1747],{"class":73},[36,101518,2045],{"class":50},[36,101520,1741],{"class":73},[36,101522,2045],{"class":50},[36,101524,1961],{"class":73},[36,101526,2045],{"class":50},[36,101528,1987],{"class":73},[36,101530,34577],{"class":50},[36,101532,101533,101535,101537,101540],{"class":38,"line":61},[36,101534,1931],{"class":50},[36,101536,70],{"class":42},[36,101538,101539],{"class":50},"np.array(a)",[36,101541,101542],{"class":124},"#将列表转换为数组\n",[36,101544,101545,101547,101549],{"class":38,"line":80},[36,101546,1885],{"class":73},[36,101548,2251],{"class":42},[36,101550,101551],{"class":50},"b\n",[26,101553,101555],{"className":31709,"code":101554,"language":31711,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[33,101556,101557,101585,101594,101599],{"__ignoreMap":31},[36,101558,101559,101561,101563,101565,101567,101569,101571,101573,101575,101577,101579,101581,101583],{"class":38,"line":39},[36,101560,1906],{"class":50},[36,101562,70],{"class":42},[36,101564,2557],{"class":50},[36,101566,1885],{"class":73},[36,101568,2045],{"class":50},[36,101570,1747],{"class":73},[36,101572,2045],{"class":50},[36,101574,1741],{"class":73},[36,101576,2045],{"class":50},[36,101578,1961],{"class":73},[36,101580,2045],{"class":50},[36,101582,1987],{"class":73},[36,101584,34577],{"class":50},[36,101586,101587,101589,101591],{"class":38,"line":54},[36,101588,1931],{"class":50},[36,101590,70],{"class":42},[36,101592,101593],{"class":50},"np.array(a)\n",[36,101595,101596],{"class":38,"line":61},[36,101597,101598],{"class":124},"#调用numpy中的函数reciprocal()\n",[36,101600,101601],{"class":38,"line":80},[36,101602,101603],{"class":50},"np.reciprocal(b)\n",[14,101605,101607],{"id":101606},"_92-求平方","9.2 求平方",[19,101609,95861],{},[26,101611,101613],{"className":31709,"code":101612,"language":31711,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[33,101614,101615,101620,101625,101641],{"__ignoreMap":31},[36,101616,101617],{"class":38,"line":39},[36,101618,101619],{"class":124},"#square()，求平方\n",[36,101621,101622],{"class":38,"line":54},[36,101623,101624],{"class":124},"#一维数组\n",[36,101626,101627,101629,101631,101633,101635,101637,101639],{"class":38,"line":61},[36,101628,1906],{"class":50},[36,101630,70],{"class":42},[36,101632,94333],{"class":50},[36,101634,1885],{"class":73},[36,101636,2045],{"class":50},[36,101638,2113],{"class":73},[36,101640,1680],{"class":50},[36,101642,101643],{"class":38,"line":80},[36,101644,101645],{"class":50},"np.square(a)\n",[26,101647,101649],{"className":31709,"code":101648,"language":31711,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[33,101650,101651,101656,101661,101682],{"__ignoreMap":31},[36,101652,101653],{"class":38,"line":39},[36,101654,101655],{"class":124},"#或者通过循环遍历的形式来计算\n",[36,101657,101658],{"class":38,"line":54},[36,101659,101660],{"class":124},"#这是一个列表\n",[36,101662,101663,101666,101668,101670,101672,101674,101676,101679],{"class":38,"line":61},[36,101664,101665],{"class":50},"[i",[36,101667,2122],{"class":42},[36,101669,101479],{"class":50},[36,101671,4516],{"class":42},[36,101673,10906],{"class":50},[36,101675,27374],{"class":42},[36,101677,101678],{"class":50}," a]",[36,101680,101681],{"class":124},"#这个求完之后在数列当中\n",[36,101683,101684,101687,101689,101691,101693,101695,101697],{"class":38,"line":80},[36,101685,101686],{"class":50},"np.array([i",[36,101688,2122],{"class":42},[36,101690,101479],{"class":50},[36,101692,4516],{"class":42},[36,101694,10906],{"class":50},[36,101696,27374],{"class":42},[36,101698,101699],{"class":50}," a])\n",[19,101701,94622],{},[26,101703,101705],{"className":31709,"code":101704,"language":31711,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[33,101706,101707,101711,101735],{"__ignoreMap":31},[36,101708,101709],{"class":38,"line":39},[36,101710,94632],{"class":124},[36,101712,101713,101715,101717,101719,101721,101723,101725,101727,101729,101731,101733],{"class":38,"line":54},[36,101714,94637],{"class":50},[36,101716,70],{"class":42},[36,101718,94333],{"class":50},[36,101720,1885],{"class":73},[36,101722,2045],{"class":50},[36,101724,2190],{"class":73},[36,101726,94338],{"class":50},[36,101728,1961],{"class":73},[36,101730,2045],{"class":50},[36,101732,1741],{"class":73},[36,101734,1680],{"class":50},[36,101736,101737],{"class":38,"line":61},[36,101738,101739],{"class":50},"np.square(aa)\n",[26,101741,101743],{"className":31709,"code":101742,"language":31711,"meta":31,"style":31},"#传统的方式\nbb=np.empty_like(aa)\nfor i in range(4):\n    for j in range(3):\n        bb[i,j]=aa[i,j]*aa[i,j]\nbb\n",[33,101744,101745,101750,101759,101775,101791,101806],{"__ignoreMap":31},[36,101746,101747],{"class":38,"line":39},[36,101748,101749],{"class":124},"#传统的方式\n",[36,101751,101752,101754,101756],{"class":38,"line":54},[36,101753,99518],{"class":50},[36,101755,70],{"class":42},[36,101757,101758],{"class":50},"np.empty_like(aa)\n",[36,101760,101761,101763,101765,101767,101769,101771,101773],{"class":38,"line":61},[36,101762,4516],{"class":42},[36,101764,10906],{"class":50},[36,101766,27374],{"class":42},[36,101768,33774],{"class":73},[36,101770,222],{"class":50},[36,101772,1961],{"class":73},[36,101774,32117],{"class":50},[36,101776,101777,101779,101781,101783,101785,101787,101789],{"class":38,"line":80},[36,101778,4692],{"class":42},[36,101780,10968],{"class":50},[36,101782,27374],{"class":42},[36,101784,33774],{"class":73},[36,101786,222],{"class":50},[36,101788,1741],{"class":73},[36,101790,32117],{"class":50},[36,101792,101793,101796,101798,101801,101803],{"class":38,"line":96},[36,101794,101795],{"class":50},"        bb[i,j]",[36,101797,70],{"class":42},[36,101799,101800],{"class":50},"aa[i,j]",[36,101802,2122],{"class":42},[36,101804,101805],{"class":50},"aa[i,j]\n",[36,101807,101808],{"class":38,"line":101},[36,101809,101810],{"class":50},"bb\n",[14,101812,101814],{"id":101813},"_93-求各元素的符号","9.3 求各元素的符号",[19,101816,101817],{},[2992,101818],{"alt":31,"src":101819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101821,101823],{"id":101822},"_94-modf函数","9.4 modf函数",[19,101825,101826],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,101828,101830],{"className":31709,"code":101829,"language":31711,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[33,101831,101832,101855],{"__ignoreMap":31},[36,101833,101834,101836,101838,101840,101842,101844,101846,101848,101850,101853],{"class":38,"line":39},[36,101835,1906],{"class":50},[36,101837,70],{"class":42},[36,101839,94333],{"class":50},[36,101841,2199],{"class":42},[36,101843,2113],{"class":73},[36,101845,2045],{"class":50},[36,101847,2113],{"class":73},[36,101849,2045],{"class":50},[36,101851,101852],{"class":73},"0.3",[36,101854,1680],{"class":50},[36,101856,101857],{"class":38,"line":54},[36,101858,101859],{"class":50},"np.modf(a)\n",[19,101861,101862],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101864,101866],{"id":101865},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101868,101869],{},"np.cell()",[19,101871,101872],{},"np.floor()",[19,101874,101875],{},"np.rint()",[19,101877,101878],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101880,101881],{},[2992,101882],{"alt":31,"src":101883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101885,101887],{"id":101886},"_96-around函数","9.6 around()函数",[19,101889,101890],{},"around()函数也可以实现对数的小数位数进行操作",[19,101892,101893],{},"其中的参数：",[19,101895,101896],{},"1.要传的数组",[19,101898,101899],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101901,101902],{},[2992,101903],{"alt":31,"src":101904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101906,101908],{"id":101907},"_97-三角函数","9.7 三角函数",[19,101910,101911],{},[2992,101912],{"alt":31,"src":101913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101915,101916],{},"引入图像模块非常重要",[26,101918,101920],{"className":31709,"code":101919,"language":31711,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[33,101921,101922],{"__ignoreMap":31},[36,101923,101924,101926,101929,101931,101934,101936],{"class":38,"line":39},[36,101925,32068],{"class":42},[36,101927,101928],{"class":50}," matplotlib ",[36,101930,31723],{"class":42},[36,101932,101933],{"class":50}," pyplot ",[36,101935,32714],{"class":42},[36,101937,32768],{"class":50},[1592,101939,101940],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":101942},[101943,101944,101945,101946,101947,101948,101949],{"id":101491,"depth":54,"text":101492},{"id":101606,"depth":54,"text":101607},{"id":101813,"depth":54,"text":101814},{"id":101822,"depth":54,"text":101823},{"id":101865,"depth":54,"text":101866},{"id":101886,"depth":54,"text":101887},{"id":101907,"depth":54,"text":101908},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101455,"description":24706},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101956,"title":101957,"body":101958,"description":24706,"extension":1603,"meta":101962,"navigation":57,"path":101963,"seo":101964,"stem":101965,"__hash__":101966},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101959,"toc":101960},[],{"title":31,"searchDepth":54,"depth":54,"links":101961},[],{"category":51751},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101957,"description":24706},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101968,"title":101969,"body":101970,"description":31,"extension":1603,"meta":103978,"navigation":57,"path":103979,"seo":103980,"stem":103981,"__hash__":103982},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101971,"toc":103954},[101972,101975,101979,101982,101985,101991,101994,102017,102020,102054,102057,102098,102102,102105,102198,102201,102245,102248,102265,102268,102282,102285,102288,102333,102336,102373,102377,102380,102386,102391,102411,102415,102418,102484,102487,102505,102509,102512,102541,102551,102557,102561,102564,102570,102581,102585,102588,102618,102621,102901,102904,102907,102918,102921,102924,102946,102953,102956,102974,102977,102980,102994,103002,103005,103031,103037,103040,103043,103053,103065,103085,103094,103114,103124,103148,103161,103175,103180,103221,103238,103263,103275,103295,103301,103346,103365,103382,103395,103411,103418,103430,103439,103474,103495,103520,103533,103557,103572,103597,103600,103621,103630,103633,103644,103648,103651,103657,103669,103676,103680,103683,103695,103698,103712,103715,103725,103735,103738,103778,103781,103785,103791,103794,103808,103812,103815,103848,103852,103855,103878,103886,103889,103895,103901,103904,103907,103935,103939,103942,103948,103951],[10,101973,101969],{"id":101974},"_1环境安装与第一个-mujoco-程序",[14,101976,101978],{"id":101977},"_1目标说明","1.目标说明",[19,101980,101981],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101983,101984],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,101986,101989],{"className":101987,"code":101988,"language":6676,"meta":31},[6674],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[33,101990,101988],{"__ignoreMap":31},[19,101992,101993],{},"需要掌握:",[256,101995,101996,101999,102002,102007,102012],{},[259,101997,101998],{},"Fedora 44 下 MuJoCo 的系统依赖",[259,102000,102001],{},"Python 虚拟环境创建",[259,102003,102004],{},[33,102005,102006],{},"mujoco.MjModel",[259,102008,102009],{},[33,102010,102011],{},"mujoco.MjData",[259,102013,102014],{},[33,102015,102016],{},"mujoco.mj_step(model, data)",[19,102018,102019],{},"MuJoCo 中最重要的两个对象:",[1806,102021,102022,102032],{},[1809,102023,102024],{},[1812,102025,102026,102029],{},[1815,102027,102028],{"align":25066},"对象",[1815,102030,102031],{"align":25066},"含义",[1852,102033,102034,102044],{},[1812,102035,102036,102041],{},[1857,102037,102038],{"align":25066},[33,102039,102040],{},"MjModel",[1857,102042,102043],{"align":25066},"模型结构，来自 XML，基本不随时间变化",[1812,102045,102046,102051],{},[1857,102047,102048],{"align":25066},[33,102049,102050],{},"MjData",[1857,102052,102053],{"align":25066},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102055,102056],{},"可以先用一个类比理解：",[1806,102058,102059,102069],{},[1809,102060,102061],{},[1812,102062,102063,102066],{},[1815,102064,102065],{"align":25066},"类比",[1815,102067,102068],{"align":25066},"MuJoCo 对象",[1852,102070,102071,102080,102089],{},[1812,102072,102073,102076],{},[1857,102074,102075],{"align":25066},"游戏地图和角色配置",[1857,102077,102078],{"align":25066},[33,102079,102040],{},[1812,102081,102082,102085],{},[1857,102083,102084],{"align":25066},"游戏运行到当前帧的状态",[1857,102086,102087],{"align":25066},[33,102088,102050],{},[1812,102090,102091,102094],{},[1857,102092,102093],{"align":25066},"前进一帧",[1857,102095,102096],{"align":25066},[33,102097,102016],{},[14,102099,102101],{"id":102100},"_2环境与依赖安装","2.环境与依赖安装",[19,102103,102104],{},"Fedora 44 系统依赖:",[26,102106,102108],{"className":25152,"code":102107,"language":25154,"meta":31,"style":31},"sudo dnf install -y \\\n  python3 python3-pip python3-virtualenv \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr \\\n  gcc gcc-c++ make\n",[33,102109,102110,102122,102135,102148,102158,102168,102187],{"__ignoreMap":31},[36,102111,102112,102114,102116,102118,102120],{"class":38,"line":39},[36,102113,25907],{"class":46},[36,102115,27646],{"class":110},[36,102117,25164],{"class":110},[36,102119,27731],{"class":73},[36,102121,26009],{"class":73},[36,102123,102124,102127,102130,102133],{"class":38,"line":54},[36,102125,102126],{"class":110},"  python3",[36,102128,102129],{"class":110}," python3-pip",[36,102131,102132],{"class":110}," python3-virtualenv",[36,102134,26009],{"class":73},[36,102136,102137,102140,102143,102146],{"class":38,"line":61},[36,102138,102139],{"class":110},"  mesa-libGL",[36,102141,102142],{"class":110}," mesa-libGLU",[36,102144,102145],{"class":110}," mesa-dri-drivers",[36,102147,26009],{"class":73},[36,102149,102150,102153,102156],{"class":38,"line":80},[36,102151,102152],{"class":110},"  libglvnd-glx",[36,102154,102155],{"class":110}," libglvnd-opengl",[36,102157,26009],{"class":73},[36,102159,102160,102163,102166],{"class":38,"line":96},[36,102161,102162],{"class":110},"  glfw",[36,102164,102165],{"class":110}," glfw-devel",[36,102167,26009],{"class":73},[36,102169,102170,102173,102176,102179,102182,102185],{"class":38,"line":101},[36,102171,102172],{"class":110},"  libX11",[36,102174,102175],{"class":110}," libXcursor",[36,102177,102178],{"class":110}," libXi",[36,102180,102181],{"class":110}," libXinerama",[36,102183,102184],{"class":110}," libXrandr",[36,102186,26009],{"class":73},[36,102188,102189,102192,102195],{"class":38,"line":128},[36,102190,102191],{"class":110},"  gcc",[36,102193,102194],{"class":110}," gcc-c++",[36,102196,102197],{"class":110}," make\n",[19,102199,102200],{},"创建 Python 环境:",[26,102202,102204],{"className":25152,"code":102203,"language":25154,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[33,102205,102206,102220,102228],{"__ignoreMap":31},[36,102207,102208,102211,102214,102217],{"class":38,"line":39},[36,102209,102210],{"class":46},"python3",[36,102212,102213],{"class":73}," -m",[36,102215,102216],{"class":110}," venv",[36,102218,102219],{"class":110}," .venv\n",[36,102221,102222,102225],{"class":38,"line":54},[36,102223,102224],{"class":73},"source",[36,102226,102227],{"class":110}," .venv\u002Fbin\u002Factivate\n",[36,102229,102230,102232,102234,102237,102239,102242],{"class":38,"line":61},[36,102231,31711],{"class":46},[36,102233,102213],{"class":73},[36,102235,102236],{"class":110}," pip",[36,102238,25164],{"class":110},[36,102240,102241],{"class":73}," --upgrade",[36,102243,102244],{"class":110}," pip\n",[19,102246,102247],{},"pip 安装:",[26,102249,102251],{"className":25152,"code":102250,"language":25154,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[33,102252,102253],{"__ignoreMap":31},[36,102254,102255,102257,102259,102262],{"class":38,"line":39},[36,102256,25161],{"class":46},[36,102258,25164],{"class":110},[36,102260,102261],{"class":110}," \"mujoco>=2.3\"",[36,102263,102264],{"class":110}," numpy\n",[19,102266,102267],{},"安装完成后，先做最小检查：",[26,102269,102271],{"className":25152,"code":102270,"language":25154,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[33,102272,102273],{"__ignoreMap":31},[36,102274,102275,102277,102279],{"class":38,"line":39},[36,102276,31711],{"class":46},[36,102278,31689],{"class":73},[36,102280,102281],{"class":110}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102283,102284],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102286,102287],{},"conda 安装:",[26,102289,102291],{"className":25152,"code":102290,"language":25154,"meta":31,"style":31},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[33,102292,102293,102313,102323],{"__ignoreMap":31},[36,102294,102295,102297,102299,102301,102304,102307,102310],{"class":38,"line":39},[36,102296,31661],{"class":46},[36,102298,30507],{"class":110},[36,102300,26446],{"class":73},[36,102302,102303],{"class":110}," mujoco-study",[36,102305,102306],{"class":110}," python=",[36,102308,102309],{"class":73},"3.10",[36,102311,102312],{"class":73}," -y\n",[36,102314,102315,102317,102320],{"class":38,"line":54},[36,102316,31661],{"class":46},[36,102318,102319],{"class":110}," activate",[36,102321,102322],{"class":110}," mujoco-study\n",[36,102324,102325,102327,102329,102331],{"class":38,"line":61},[36,102326,25161],{"class":46},[36,102328,25164],{"class":110},[36,102330,102261],{"class":110},[36,102332,102264],{"class":110},[19,102334,102335],{},"版本冲突说明:",[256,102337,102338,102344,102354,102363],{},[259,102339,102340,102341,29716],{},"不要安装 ",[33,102342,102343],{},"mujoco-py",[259,102345,102346,102347,102349,102350,102353],{},"如果旧项目里同时安装了 ",[33,102348,102343],{}," 和 ",[33,102351,102352],{},"mujoco","，建议新建干净虚拟环境。",[259,102355,102356,102359,102360,29716],{},[33,102357,102358],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[33,102361,102362],{},"~\u002F.mujoco\u002Fmujoco210",[259,102364,102365,102366,83870,102369,102372],{},"离屏渲染可能涉及 OpenGL 后端，",[33,102367,102368],{},"MUJOCO_GL=egl",[33,102370,102371],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102374,102376],{"id":102375},"_3核心概念解释","3.核心概念解释",[19,102378,102379],{},"MuJoCo 的基本执行流程:",[26,102381,102384],{"className":102382,"code":102383,"language":6676,"meta":31},[6674],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[33,102385,102383],{"__ignoreMap":31},[19,102387,102388,102390],{},[33,102389,102040],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102392,102393,102395,102396,1880,102399,1880,102402,1880,102405,1880,102408,29716],{},[33,102394,102050],{}," 存放仿真运行时状态，例如 ",[33,102397,102398],{},"data.time",[33,102400,102401],{},"data.qpos",[33,102403,102404],{},"data.qvel",[33,102406,102407],{},"data.ctrl",[33,102409,102410],{},"data.xpos",[1645,102412,102414],{"id":102413},"xml-是什么","XML 是什么",[19,102416,102417],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,102419,102421],{"className":54398,"code":102420,"language":54400,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[33,102422,102423,102445,102476],{"__ignoreMap":31},[36,102424,102425,102427,102429,102431,102433,102435,102438,102440,102443],{"class":38,"line":39},[36,102426,2577],{"class":50},[36,102428,53131],{"class":52631},[36,102430,16249],{"class":46},[36,102432,70],{"class":50},[36,102434,54822],{"class":110},[36,102436,102437],{"class":46}," pos",[36,102439,70],{"class":50},[36,102441,102442],{"class":110},"\"0 0 1\"",[36,102444,52638],{"class":50},[36,102446,102447,102449,102452,102454,102456,102459,102461,102463,102465,102468,102470,102473],{"class":38,"line":54},[36,102448,53475],{"class":50},[36,102450,102451],{"class":52631},"geom",[36,102453,16249],{"class":46},[36,102455,70],{"class":50},[36,102457,102458],{"class":110},"\"box_geom\"",[36,102460,55155],{"class":46},[36,102462,70],{"class":50},[36,102464,54822],{"class":110},[36,102466,102467],{"class":46}," size",[36,102469,70],{"class":50},[36,102471,102472],{"class":110},"\"0.1 0.1 0.1\"",[36,102474,102475],{"class":50},"\u002F>\n",[36,102477,102478,102480,102482],{"class":38,"line":61},[36,102479,53116],{"class":50},[36,102481,53131],{"class":52631},[36,102483,52638],{"class":50},[19,102485,102486],{},"这段意思是：",[256,102488,102489,102495,102502],{},[259,102490,102491,102492,102494],{},"创建一个叫 ",[33,102493,55045],{}," 的刚体。",[259,102496,102497,102498,102501],{},"它初始放在 ",[33,102499,102500],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[259,102503,102504],{},"它里面有一个盒子形状的几何体。",[1645,102506,102508],{"id":102507},"timestep-是什么","timestep 是什么",[19,102510,102511],{},"XML 里的：",[26,102513,102515],{"className":54398,"code":102514,"language":54400,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,102516,102517],{"__ignoreMap":31},[36,102518,102519,102521,102523,102526,102528,102531,102534,102536,102539],{"class":38,"line":39},[36,102520,2577],{"class":50},[36,102522,70497],{"class":52631},[36,102524,102525],{"class":46}," timestep",[36,102527,70],{"class":50},[36,102529,102530],{"class":110},"\"0.01\"",[36,102532,102533],{"class":46}," gravity",[36,102535,70],{"class":50},[36,102537,102538],{"class":110},"\"0 0 -9.81\"",[36,102540,102475],{"class":50},[19,102542,102543,102544,102547,102548,102550],{},"表示每调用一次 ",[33,102545,102546],{},"mj_step","，仿真时间前进 ",[33,102549,40317],{}," 秒。循环 100 次，大约就是 1 秒：",[26,102552,102555],{"className":102553,"code":102554,"language":6676,"meta":31},[6674],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[33,102556,102554],{"__ignoreMap":31},[1645,102558,102560],{"id":102559},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102562,102563],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,102565,102568],{"className":102566,"code":102567,"language":6676,"meta":31},[6674],"x y z qw qx qy qz\n",[33,102569,102567],{"__ignoreMap":31},[19,102571,102572,102573,102576,102577,102580],{},"表示一个自由刚体的位置和姿态。其中 ",[33,102574,102575],{},"x y z"," 是位置，",[33,102578,102579],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102582,102584],{"id":102583},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102586,102587],{},"新建文件:",[26,102589,102591],{"className":25152,"code":102590,"language":25154,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[33,102592,102593,102603,102610],{"__ignoreMap":31},[36,102594,102595,102598,102600],{"class":38,"line":39},[36,102596,102597],{"class":46},"mkdir",[36,102599,30547],{"class":73},[36,102601,102602],{"class":110}," mujoco_tutorial\n",[36,102604,102605,102608],{"class":38,"line":54},[36,102606,102607],{"class":73},"cd",[36,102609,102602],{"class":110},[36,102611,102612,102615],{"class":38,"line":61},[36,102613,102614],{"class":46},"touch",[36,102616,102617],{"class":110}," ch1_first_sim.py\n",[19,102619,102620],{},"写入:",[26,102622,102624],{"className":31709,"code":102623,"language":31711,"meta":31,"style":31},"import mujoco\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"first_sim\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n    print(\"initial time:\", data.time)\n    print(\"initial qpos:\", data.qpos.copy())\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    print(\"final time:\", data.time)\n    print(\"final qpos:\", data.qpos.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,102625,102626,102633,102637,102641,102651,102656,102661,102665,102670,102675,102679,102684,102689,102694,102699,102704,102709,102713,102717,102721,102734,102748,102758,102762,102774,102786,102798,102810,102822,102826,102843,102848,102852,102863,102874,102878,102882,102896],{"__ignoreMap":31},[36,102627,102628,102630],{"class":38,"line":39},[36,102629,31723],{"class":42},[36,102631,102632],{"class":50}," mujoco\n",[36,102634,102635],{"class":38,"line":54},[36,102636,58],{"emptyLinePlaceholder":57},[36,102638,102639],{"class":38,"line":61},[36,102640,58],{"emptyLinePlaceholder":57},[36,102642,102643,102646,102648],{"class":38,"line":80},[36,102644,102645],{"class":73},"XML",[36,102647,14893],{"class":42},[36,102649,102650],{"class":110}," \"\"\"\n",[36,102652,102653],{"class":38,"line":96},[36,102654,102655],{"class":110},"\u003Cmujoco model=\"first_sim\">\n",[36,102657,102658],{"class":38,"line":101},[36,102659,102660],{"class":110},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,102662,102663],{"class":38,"line":128},[36,102664,58],{"emptyLinePlaceholder":57},[36,102666,102667],{"class":38,"line":149},[36,102668,102669],{"class":110},"  \u003Cworldbody>\n",[36,102671,102672],{"class":38,"line":154},[36,102673,102674],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,102676,102677],{"class":38,"line":167},[36,102678,58],{"emptyLinePlaceholder":57},[36,102680,102681],{"class":38,"line":172},[36,102682,102683],{"class":110},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,102685,102686],{"class":38,"line":192},[36,102687,102688],{"class":110},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[36,102690,102691],{"class":38,"line":211},[36,102692,102693],{"class":110},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,102695,102696],{"class":38,"line":216},[36,102697,102698],{"class":110},"    \u003C\u002Fbody>\n",[36,102700,102701],{"class":38,"line":231},[36,102702,102703],{"class":110},"  \u003C\u002Fworldbody>\n",[36,102705,102706],{"class":38,"line":236},[36,102707,102708],{"class":110},"\u003C\u002Fmujoco>\n",[36,102710,102711],{"class":38,"line":247},[36,102712,97029],{"class":110},[36,102714,102715],{"class":38,"line":637},[36,102716,58],{"emptyLinePlaceholder":57},[36,102718,102719],{"class":38,"line":646},[36,102720,58],{"emptyLinePlaceholder":57},[36,102722,102723,102725,102727,102730,102732],{"class":38,"line":655},[36,102724,33278],{"class":42},[36,102726,47],{"class":46},[36,102728,102729],{"class":50},"() -> ",[36,102731,97017],{"class":73},[36,102733,5230],{"class":50},[36,102735,102736,102739,102741,102744,102746],{"class":38,"line":660},[36,102737,102738],{"class":50},"    model ",[36,102740,70],{"class":42},[36,102742,102743],{"class":50}," mujoco.MjModel.from_xml_string(",[36,102745,102645],{"class":73},[36,102747,1680],{"class":50},[36,102749,102750,102753,102755],{"class":38,"line":665},[36,102751,102752],{"class":50},"    data ",[36,102754,70],{"class":42},[36,102756,102757],{"class":50}," mujoco.MjData(model)\n",[36,102759,102760],{"class":38,"line":674},[36,102761,58],{"emptyLinePlaceholder":57},[36,102763,102764,102766,102768,102771],{"class":38,"line":679},[36,102765,32630],{"class":73},[36,102767,222],{"class":50},[36,102769,102770],{"class":110},"\"nq:\"",[36,102772,102773],{"class":50},", model.nq)\n",[36,102775,102776,102778,102780,102783],{"class":38,"line":692},[36,102777,32630],{"class":73},[36,102779,222],{"class":50},[36,102781,102782],{"class":110},"\"nv:\"",[36,102784,102785],{"class":50},", model.nv)\n",[36,102787,102788,102790,102792,102795],{"class":38,"line":705},[36,102789,32630],{"class":73},[36,102791,222],{"class":50},[36,102793,102794],{"class":110},"\"nu:\"",[36,102796,102797],{"class":50},", model.nu)\n",[36,102799,102800,102802,102804,102807],{"class":38,"line":710},[36,102801,32630],{"class":73},[36,102803,222],{"class":50},[36,102805,102806],{"class":110},"\"initial time:\"",[36,102808,102809],{"class":50},", data.time)\n",[36,102811,102812,102814,102816,102819],{"class":38,"line":722},[36,102813,32630],{"class":73},[36,102815,222],{"class":50},[36,102817,102818],{"class":110},"\"initial qpos:\"",[36,102820,102821],{"class":50},", data.qpos.copy())\n",[36,102823,102824],{"class":38,"line":750},[36,102825,58],{"emptyLinePlaceholder":57},[36,102827,102828,102830,102833,102835,102837,102839,102841],{"class":38,"line":755},[36,102829,4692],{"class":42},[36,102831,102832],{"class":50}," _ ",[36,102834,27374],{"class":42},[36,102836,33774],{"class":73},[36,102838,222],{"class":50},[36,102840,1979],{"class":73},[36,102842,32117],{"class":50},[36,102844,102845],{"class":38,"line":777},[36,102846,102847],{"class":50},"        mujoco.mj_step(model, data)\n",[36,102849,102850],{"class":38,"line":802},[36,102851,58],{"emptyLinePlaceholder":57},[36,102853,102854,102856,102858,102861],{"class":38,"line":807},[36,102855,32630],{"class":73},[36,102857,222],{"class":50},[36,102859,102860],{"class":110},"\"final time:\"",[36,102862,102809],{"class":50},[36,102864,102865,102867,102869,102872],{"class":38,"line":818},[36,102866,32630],{"class":73},[36,102868,222],{"class":50},[36,102870,102871],{"class":110},"\"final qpos:\"",[36,102873,102821],{"class":50},[36,102875,102876],{"class":38,"line":843},[36,102877,58],{"emptyLinePlaceholder":57},[36,102879,102880],{"class":38,"line":848},[36,102881,58],{"emptyLinePlaceholder":57},[36,102883,102884,102886,102888,102891,102894],{"class":38,"line":859},[36,102885,3061],{"class":42},[36,102887,32551],{"class":73},[36,102889,102890],{"class":42}," ==",[36,102892,102893],{"class":110}," \"__main__\"",[36,102895,5230],{"class":50},[36,102897,102898],{"class":38,"line":864},[36,102899,102900],{"class":50},"    main()\n",[1645,102902,102903],{"id":102903},"代码逐段解释",[19,102905,102906],{},"导入库：",[26,102908,102910],{"className":31709,"code":102909,"language":31711,"meta":31,"style":31},"import mujoco\n",[33,102911,102912],{"__ignoreMap":31},[36,102913,102914,102916],{"class":38,"line":39},[36,102915,31723],{"class":42},[36,102917,102632],{"class":50},[19,102919,102920],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102922,102923],{},"定义 XML：",[26,102925,102927],{"className":31709,"code":102926,"language":31711,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[33,102928,102929,102937,102942],{"__ignoreMap":31},[36,102930,102931,102933,102935],{"class":38,"line":39},[36,102932,102645],{"class":73},[36,102934,14893],{"class":42},[36,102936,102650],{"class":110},[36,102938,102939],{"class":38,"line":54},[36,102940,102941],{"class":110},"...\n",[36,102943,102944],{"class":38,"line":61},[36,102945,97029],{"class":110},[19,102947,102948,102949,102952],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[33,102950,102951],{},"freejoint"," 的方块。",[19,102954,102955],{},"编译模型：",[26,102957,102959],{"className":31709,"code":102958,"language":31711,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[33,102960,102961],{"__ignoreMap":31},[36,102962,102963,102966,102968,102970,102972],{"class":38,"line":39},[36,102964,102965],{"class":50},"model ",[36,102967,70],{"class":42},[36,102969,102743],{"class":50},[36,102971,102645],{"class":73},[36,102973,1680],{"class":50},[19,102975,102976],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102978,102979],{},"创建数据：",[26,102981,102983],{"className":31709,"code":102982,"language":31711,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[33,102984,102985],{"__ignoreMap":31},[36,102986,102987,102990,102992],{"class":38,"line":39},[36,102988,102989],{"class":50},"data ",[36,102991,70],{"class":42},[36,102993,102757],{"class":50},[19,102995,102996,102998,102999,103001],{},[33,102997,34732],{}," 会保存仿真当前状态。刚创建时，时间是 ",[33,103000,1859],{},"，方块还在初始位置。",[19,103003,103004],{},"推进仿真：",[26,103006,103008],{"className":31709,"code":103007,"language":31711,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[33,103009,103010,103026],{"__ignoreMap":31},[36,103011,103012,103014,103016,103018,103020,103022,103024],{"class":38,"line":39},[36,103013,4516],{"class":42},[36,103015,102832],{"class":50},[36,103017,27374],{"class":42},[36,103019,33774],{"class":73},[36,103021,222],{"class":50},[36,103023,1979],{"class":73},[36,103025,32117],{"class":50},[36,103027,103028],{"class":38,"line":54},[36,103029,103030],{"class":50},"    mujoco.mj_step(model, data)\n",[19,103032,103033,103034,103036],{},"每次 ",[33,103035,102546],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[1645,103038,103039],{"id":103039},"代码逐行细讲",[19,103041,103042],{},"下面把完整代码按新手视角拆开讲。",[26,103044,103045],{"className":31709,"code":102909,"language":31711,"meta":31,"style":31},[33,103046,103047],{"__ignoreMap":31},[36,103048,103049,103051],{"class":38,"line":39},[36,103050,31723],{"class":42},[36,103052,102632],{"class":50},[19,103054,103055,103057,103058,1880,103060,1880,103062,29716],{},[33,103056,31723],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[33,103059,102006],{},[33,103061,102011],{},[33,103063,103064],{},"mujoco.mj_step",[26,103066,103067],{"className":31709,"code":102926,"language":31711,"meta":31,"style":31},[33,103068,103069,103077,103081],{"__ignoreMap":31},[36,103070,103071,103073,103075],{"class":38,"line":39},[36,103072,102645],{"class":73},[36,103074,14893],{"class":42},[36,103076,102650],{"class":110},[36,103078,103079],{"class":38,"line":54},[36,103080,102941],{"class":110},[36,103082,103083],{"class":38,"line":61},[36,103084,97029],{"class":110},[19,103086,103087,103089,103090,103093],{},[33,103088,102645],{}," 是一个变量名。右边的三引号 ",[33,103091,103092],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,103095,103096],{"className":54398,"code":102655,"language":54400,"meta":31,"style":31},[33,103097,103098],{"__ignoreMap":31},[36,103099,103100,103102,103104,103107,103109,103112],{"class":38,"line":39},[36,103101,2577],{"class":50},[36,103103,102352],{"class":52631},[36,103105,103106],{"class":46}," model",[36,103108,70],{"class":50},[36,103110,103111],{"class":110},"\"first_sim\"",[36,103113,52638],{"class":50},[19,103115,103116,103117,103120,103121,29716],{},"这是 XML 的根标签。",[33,103118,103119],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[33,103122,103123],{},"first_sim",[26,103125,103126],{"className":54398,"code":102514,"language":54400,"meta":31,"style":31},[33,103127,103128],{"__ignoreMap":31},[36,103129,103130,103132,103134,103136,103138,103140,103142,103144,103146],{"class":38,"line":39},[36,103131,2577],{"class":50},[36,103133,70497],{"class":52631},[36,103135,102525],{"class":46},[36,103137,70],{"class":50},[36,103139,102530],{"class":110},[36,103141,102533],{"class":46},[36,103143,70],{"class":50},[36,103145,102538],{"class":110},[36,103147,102475],{"class":50},[19,103149,103150,103152,103153,103156,103157,103160],{},[33,103151,70497],{}," 用来设置仿真参数。",[33,103154,103155],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[33,103158,103159],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,103162,103164],{"className":54398,"code":103163,"language":54400,"meta":31,"style":31},"\u003Cworldbody>\n",[33,103165,103166],{"__ignoreMap":31},[36,103167,103168,103170,103173],{"class":38,"line":39},[36,103169,2577],{"class":50},[36,103171,103172],{"class":52631},"worldbody",[36,103174,52638],{"class":50},[19,103176,103177,103179],{},[33,103178,103172],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,103181,103183],{"className":54398,"code":103182,"language":54400,"meta":31,"style":31},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,103184,103185],{"__ignoreMap":31},[36,103186,103187,103189,103191,103193,103195,103198,103200,103202,103205,103207,103209,103212,103214,103216,103219],{"class":38,"line":39},[36,103188,2577],{"class":50},[36,103190,102451],{"class":52631},[36,103192,16249],{"class":46},[36,103194,70],{"class":50},[36,103196,103197],{"class":110},"\"floor\"",[36,103199,55155],{"class":46},[36,103201,70],{"class":50},[36,103203,103204],{"class":110},"\"plane\"",[36,103206,102467],{"class":46},[36,103208,70],{"class":50},[36,103210,103211],{"class":110},"\"2 2 0.1\"",[36,103213,80098],{"class":46},[36,103215,70],{"class":50},[36,103217,103218],{"class":110},"\"0.8 0.8 0.8 1\"",[36,103220,102475],{"class":50},[19,103222,103223,103224,103226,103227,103230,103231,103234,103235,103237],{},"这行创建地面。",[33,103225,102451],{}," 是几何体。",[33,103228,103229],{},"name=\"floor\""," 是名字。",[33,103232,103233],{},"type=\"plane\""," 表示平面。",[33,103236,56441],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,103239,103241],{"className":54398,"code":103240,"language":54400,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,103242,103243],{"__ignoreMap":31},[36,103244,103245,103247,103249,103251,103253,103255,103257,103259,103261],{"class":38,"line":39},[36,103246,2577],{"class":50},[36,103248,53131],{"class":52631},[36,103250,16249],{"class":46},[36,103252,70],{"class":50},[36,103254,54822],{"class":110},[36,103256,102437],{"class":46},[36,103258,70],{"class":50},[36,103260,102442],{"class":110},[36,103262,52638],{"class":50},[19,103264,103265,103266,29716,103268,103271,103272,103274],{},"这行创建一个刚体，名字叫 ",[33,103267,55045],{},[33,103269,103270],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[33,103273,102500],{},"，也就是离地面 1 米高。",[26,103276,103278],{"className":54398,"code":103277,"language":54400,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[33,103279,103280],{"__ignoreMap":31},[36,103281,103282,103284,103286,103288,103290,103293],{"class":38,"line":39},[36,103283,2577],{"class":50},[36,103285,102951],{"class":52631},[36,103287,16249],{"class":46},[36,103289,70],{"class":50},[36,103291,103292],{"class":110},"\"box_free\"",[36,103294,102475],{"class":50},[19,103296,103297,103298,103300],{},"这行很重要。",[33,103299,102951],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,103302,103304],{"className":54398,"code":103303,"language":54400,"meta":31,"style":31},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,103305,103306],{"__ignoreMap":31},[36,103307,103308,103310,103312,103314,103316,103318,103320,103322,103324,103326,103328,103330,103333,103335,103337,103339,103341,103344],{"class":38,"line":39},[36,103309,2577],{"class":50},[36,103311,102451],{"class":52631},[36,103313,16249],{"class":46},[36,103315,70],{"class":50},[36,103317,102458],{"class":110},[36,103319,55155],{"class":46},[36,103321,70],{"class":50},[36,103323,54822],{"class":110},[36,103325,102467],{"class":46},[36,103327,70],{"class":50},[36,103329,102472],{"class":110},[36,103331,103332],{"class":46}," mass",[36,103334,70],{"class":50},[36,103336,5169],{"class":110},[36,103338,80098],{"class":46},[36,103340,70],{"class":50},[36,103342,103343],{"class":110},"\"1 0 0 1\"",[36,103345,102475],{"class":50},[19,103347,103348,103349,103352,103353,103356,103357,103360,103361,103364],{},"这行给 box body 添加一个盒子形状。",[33,103350,103351],{},"type=\"box\""," 表示形状是盒子。",[33,103354,103355],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[33,103358,103359],{},"mass=\"1\""," 表示质量是 1。",[33,103362,103363],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,103366,103368],{"className":31709,"code":103367,"language":31711,"meta":31,"style":31},"def main() -> None:\n",[33,103369,103370],{"__ignoreMap":31},[36,103371,103372,103374,103376,103378,103380],{"class":38,"line":39},[36,103373,33278],{"class":42},[36,103375,47],{"class":46},[36,103377,102729],{"class":50},[36,103379,97017],{"class":73},[36,103381,5230],{"class":50},[19,103383,103384,103386,103387,103390,103391,103394],{},[33,103385,33278],{}," 用来定义函数。这里定义了一个叫 ",[33,103388,103389],{},"main"," 的函数。",[33,103392,103393],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,103396,103397],{"className":31709,"code":102958,"language":31711,"meta":31,"style":31},[33,103398,103399],{"__ignoreMap":31},[36,103400,103401,103403,103405,103407,103409],{"class":38,"line":39},[36,103402,102965],{"class":50},[36,103404,70],{"class":42},[36,103406,102743],{"class":50},[36,103408,102645],{"class":73},[36,103410,1680],{"class":50},[19,103412,103413,103414,103417],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[33,103415,103416],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,103419,103420],{"className":31709,"code":102982,"language":31711,"meta":31,"style":31},[33,103421,103422],{"__ignoreMap":31},[36,103423,103424,103426,103428],{"class":38,"line":39},[36,103425,102989],{"class":50},[36,103427,70],{"class":42},[36,103429,102757],{"class":50},[19,103431,103432,103433,103435,103436,103438],{},"这行创建仿真数据。",[33,103434,34732],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[33,103437,34732],{}," 都会变化。",[26,103440,103442],{"className":31709,"code":103441,"language":31711,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[33,103443,103444,103454,103464],{"__ignoreMap":31},[36,103445,103446,103448,103450,103452],{"class":38,"line":39},[36,103447,31746],{"class":73},[36,103449,222],{"class":50},[36,103451,102770],{"class":110},[36,103453,102773],{"class":50},[36,103455,103456,103458,103460,103462],{"class":38,"line":54},[36,103457,31746],{"class":73},[36,103459,222],{"class":50},[36,103461,102782],{"class":110},[36,103463,102785],{"class":50},[36,103465,103466,103468,103470,103472],{"class":38,"line":61},[36,103467,31746],{"class":73},[36,103469,222],{"class":50},[36,103471,102794],{"class":110},[36,103473,102797],{"class":50},[19,103475,103476,103478,103479,103482,103483,103486,103487,103490,103491,103494],{},[33,103477,31746],{}," 用来输出信息。",[33,103480,103481],{},"model.nq"," 是位置变量数量，",[33,103484,103485],{},"model.nv"," 是速度变量数量，",[33,103488,103489],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[33,103492,103493],{},"nu"," 是 0。",[26,103496,103498],{"className":31709,"code":103497,"language":31711,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[33,103499,103500,103510],{"__ignoreMap":31},[36,103501,103502,103504,103506,103508],{"class":38,"line":39},[36,103503,31746],{"class":73},[36,103505,222],{"class":50},[36,103507,102806],{"class":110},[36,103509,102809],{"class":50},[36,103511,103512,103514,103516,103518],{"class":38,"line":54},[36,103513,31746],{"class":73},[36,103515,222],{"class":50},[36,103517,102818],{"class":110},[36,103519,102821],{"class":50},[19,103521,103522,103523,103525,103526,103528,103529,103532],{},"这里打印初始时间和初始位置。",[33,103524,102398],{}," 一开始是 0。",[33,103527,102401],{}," 是位置数组。",[33,103530,103531],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,103534,103535],{"className":31709,"code":103007,"language":31711,"meta":31,"style":31},[33,103536,103537,103553],{"__ignoreMap":31},[36,103538,103539,103541,103543,103545,103547,103549,103551],{"class":38,"line":39},[36,103540,4516],{"class":42},[36,103542,102832],{"class":50},[36,103544,27374],{"class":42},[36,103546,33774],{"class":73},[36,103548,222],{"class":50},[36,103550,1979],{"class":73},[36,103552,32117],{"class":50},[36,103554,103555],{"class":38,"line":54},[36,103556,103030],{"class":50},[19,103558,103559,103561,103562,103565,103566,103568,103569,103571],{},[33,103560,4516],{}," 是循环。",[33,103563,103564],{},"range(100)"," 表示循环 100 次。",[33,103567,2659],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[33,103570,102546],{},"，仿真就前进一步。",[26,103573,103575],{"className":31709,"code":103574,"language":31711,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[33,103576,103577,103587],{"__ignoreMap":31},[36,103578,103579,103581,103583,103585],{"class":38,"line":39},[36,103580,31746],{"class":73},[36,103582,222],{"class":50},[36,103584,102860],{"class":110},[36,103586,102809],{"class":50},[36,103588,103589,103591,103593,103595],{"class":38,"line":54},[36,103590,31746],{"class":73},[36,103592,222],{"class":50},[36,103594,102871],{"class":110},[36,103596,102821],{"class":50},[19,103598,103599],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,103601,103603],{"className":31709,"code":103602,"language":31711,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[33,103604,103605,103617],{"__ignoreMap":31},[36,103606,103607,103609,103611,103613,103615],{"class":38,"line":39},[36,103608,3061],{"class":42},[36,103610,32551],{"class":73},[36,103612,102890],{"class":42},[36,103614,102893],{"class":110},[36,103616,5230],{"class":50},[36,103618,103619],{"class":38,"line":54},[36,103620,102900],{"class":50},[19,103622,103623,103624,103627,103628,29716],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[33,103625,103626],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[33,103629,103626],{},[19,103631,103632],{},"运行:",[26,103634,103636],{"className":25152,"code":103635,"language":25154,"meta":31,"style":31},"python ch1_first_sim.py\n",[33,103637,103638],{"__ignoreMap":31},[36,103639,103640,103642],{"class":38,"line":39},[36,103641,31711],{"class":46},[36,103643,102617],{"class":110},[14,103645,103647],{"id":103646},"_5运行结果说明","5.运行结果说明",[19,103649,103650],{},"你应该看到类似输出:",[26,103652,103655],{"className":103653,"code":103654,"language":6676,"meta":31},[6674],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[33,103656,103654],{"__ignoreMap":31},[19,103658,103659,103661,103662,103665,103666,29716],{},[33,103660,102951],{}," 有 7 个位置变量: ",[33,103663,103664],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[33,103667,103668],{},"vx vy vz wx wy wz",[19,103670,103671,103672,103675],{},"你还会看到 ",[33,103673,103674],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103677,103679],{"id":103678},"_6验证步骤","6.验证步骤",[19,103681,103682],{},"确认版本:",[26,103684,103685],{"className":25152,"code":102270,"language":25154,"meta":31,"style":31},[33,103686,103687],{"__ignoreMap":31},[36,103688,103689,103691,103693],{"class":38,"line":39},[36,103690,31711],{"class":46},[36,103692,31689],{"class":73},[36,103694,102281],{"class":110},[19,103696,103697],{},"确认导入的是官方 bindings:",[26,103699,103701],{"className":25152,"code":103700,"language":25154,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[33,103702,103703],{"__ignoreMap":31},[36,103704,103705,103707,103709],{"class":38,"line":39},[36,103706,31711],{"class":46},[36,103708,31689],{"class":73},[36,103710,103711],{"class":110}," \"import mujoco; print(mujoco)\"\n",[19,103713,103714],{},"运行程序:",[26,103716,103717],{"className":25152,"code":103635,"language":25154,"meta":31,"style":31},[33,103718,103719],{"__ignoreMap":31},[36,103720,103721,103723],{"class":38,"line":39},[36,103722,31711],{"class":46},[36,103724,102617],{"class":110},[19,103726,103727,103728,103731,103732,29716],{},"检查 ",[33,103729,103730],{},"final time"," 是否约等于 ",[33,103733,103734],{},"1.0",[19,103736,103737],{},"再做几个小实验：",[256,103739,103740,103750,103758,103771],{},[259,103741,103742,103743,103745,103746,103749],{},"把 ",[33,103744,103270],{}," 改成 ",[33,103747,103748],{},"pos=\"0 0 2\"","，观察初始高度变化。",[259,103751,103742,103752,103745,103754,103757],{},[33,103753,103159],{},[33,103755,103756],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[259,103759,103742,103760,103745,103762,103765,103766,103768,103769,29716],{},[33,103761,103155],{},[33,103763,103764],{},"timestep=\"0.005\"","，观察 100 步后的 ",[33,103767,103730],{}," 是否变成约 ",[33,103770,36660],{},[259,103772,103773,103774,103777],{},"删除 ",[33,103775,103776],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103779,103780],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103782,103784],{"id":103783},"_7常见错误与解决方案","7.常见错误与解决方案",[1645,103786,103788],{"id":103787},"modulenotfounderror-no-module-named-mujoco",[33,103789,103790],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103792,103793],{},"解决:",[26,103795,103797],{"className":25152,"code":103796,"language":25154,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[33,103798,103799],{"__ignoreMap":31},[36,103800,103801,103803,103805],{"class":38,"line":39},[36,103802,25161],{"class":46},[36,103804,25164],{"class":110},[36,103806,103807],{"class":110}," \"mujoco>=2.3\"\n",[1645,103809,103811],{"id":103810},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103813,103814],{},"先安装系统依赖:",[26,103816,103818],{"className":25152,"code":103817,"language":25154,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[33,103819,103820],{"__ignoreMap":31},[36,103821,103822,103824,103826,103828,103830,103833,103835,103838,103840,103843,103845],{"class":38,"line":39},[36,103823,25907],{"class":46},[36,103825,27646],{"class":110},[36,103827,25164],{"class":110},[36,103829,27731],{"class":73},[36,103831,103832],{"class":110}," mesa-libGL",[36,103834,102145],{"class":110},[36,103836,103837],{"class":110}," glfw",[36,103839,102165],{"class":110},[36,103841,103842],{"class":110}," libX11",[36,103844,102178],{"class":110},[36,103846,103847],{"class":110}," libXrandr\n",[1645,103849,103851],{"id":103850},"xml-解析失败","XML 解析失败",[19,103853,103854],{},"检查:",[256,103856,103857,103860,103863,103869],{},[259,103858,103859],{},"标签是否闭合",[259,103861,103862],{},"属性是否带引号",[259,103864,103865,103866],{},"根节点是否是 ",[33,103867,103868],{},"\u003Cmujoco>",[259,103870,103871,103873,103874,103877],{},[33,103872,53131],{}," 是否放在 ",[33,103875,103876],{},"\u003Cworldbody>"," 内部",[1645,103879,103881,103883,103884],{"id":103880},"final-time-不是严格等于-10",[33,103882,103730],{}," 不是严格等于 ",[33,103885,103734],{},[19,103887,103888],{},"这通常不是错误。浮点数计算可能得到：",[26,103890,103893],{"className":103891,"code":103892,"language":6676,"meta":31},[6674],"1.0000000000000007\n",[33,103894,103892],{"__ignoreMap":31},[19,103896,103897,103898,103900],{},"只要接近 ",[33,103899,103734],{}," 就正常。",[1645,103902,103903],{"id":103903},"方块没有掉下来",[19,103905,103906],{},"检查：",[256,103908,103909,103915,103921,103926],{},[259,103910,103911,103912],{},"方块 body 里是否有 ",[33,103913,103914],{},"\u003Cfreejoint\u002F>",[259,103916,103917,103918],{},"重力是否是 ",[33,103919,103920],{},"0 0 -9.81",[259,103922,103923,103924],{},"是否真的调用了 ",[33,103925,102016],{},[259,103927,103928,103929,103931,103932],{},"你看的是否是 ",[33,103930,103674],{},"，不是 ",[33,103933,103934],{},"initial qpos",[14,103936,103938],{"id":103937},"_8本章小结","8.本章小结",[19,103940,103941],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,103943,103946],{"className":103944,"code":103945,"language":6676,"meta":31},[6674],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[33,103947,103945],{"__ignoreMap":31},[19,103949,103950],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1592,103952,103953],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":103955},[103956,103957,103958,103963,103967,103968,103969,103977],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":103959},[103960,103961,103962],{"id":102413,"depth":61,"text":102414},{"id":102507,"depth":61,"text":102508},{"id":102559,"depth":61,"text":102560},{"id":102583,"depth":54,"text":102584,"children":103964},[103965,103966],{"id":102903,"depth":61,"text":102903},{"id":103039,"depth":61,"text":103039},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":103970},[103971,103972,103973,103974,103976],{"id":103787,"depth":61,"text":103790},{"id":103810,"depth":61,"text":103811},{"id":103850,"depth":61,"text":103851},{"id":103880,"depth":61,"text":103975},"final time 不是严格等于 1.0",{"id":103903,"depth":61,"text":103903},{"id":103937,"depth":54,"text":103938},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101969,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103984,"title":103985,"body":103986,"description":31,"extension":1603,"meta":105642,"navigation":57,"path":105643,"seo":105644,"stem":105645,"__hash__":105646},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103987,"toc":105618},[103988,103991,103993,103996,103999,104016,104111,104114,104120,104122,104124,104148,104151,104165,104168,104209,104211,104224,104226,104229,104277,104289,104292,104295,104301,104314,104381,104384,104403,104406,104409,104415,104417,104426,104429,104433,104442,104524,104533,104537,104543,104557,104567,104569,104899,104902,104914,104916,104927,104929,104932,104950,104953,104956,104974,104985,104988,105003,105013,105015,105036,105053,105073,105079,105119,105135,105151,105157,105160,105184,105200,105205,105235,105252,105277,105280,105295,105304,105319,105328,105343,105350,105352,105362,105375,105382,105385,105424,105431,105433,105485,105487,105493,105496,105503,105510,105513,105515,105533,105536,105539,105573,105585,105587,105590,105612,105615],[10,103989,103985],{"id":103990},"_2xml-与-mjcf-物理建模基础",[14,103992,101978],{"id":101977},[19,103994,103995],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103997,103998],{},"本章结束后，你应该能看懂一个简单模型里：",[256,104000,104001,104004,104007,104010,104013],{},[259,104002,104003],{},"地面在哪里。",[259,104005,104006],{},"物体初始位置在哪里。",[259,104008,104009],{},"几何体是什么形状。",[259,104011,104012],{},"哪些 body 可以自由运动。",[259,104014,104015],{},"如何用名字在 Python 里找到 XML 中的对象。",[1806,104017,104018,104028],{},[1809,104019,104020],{},[1812,104021,104022,104025],{},[1815,104023,104024],{"align":25066},"标签",[1815,104026,104027],{"align":25066},"作用",[1852,104029,104030,104039,104049,104058,104068,104078,104091,104101],{},[1812,104031,104032,104036],{},[1857,104033,104034],{"align":25066},[33,104035,103868],{},[1857,104037,104038],{"align":25066},"根节点",[1812,104040,104041,104046],{},[1857,104042,104043],{"align":25066},[33,104044,104045],{},"\u003Coption>",[1857,104047,104048],{"align":25066},"仿真参数",[1812,104050,104051,104055],{},[1857,104052,104053],{"align":25066},[33,104054,103876],{},[1857,104056,104057],{"align":25066},"世界中的物体",[1812,104059,104060,104065],{},[1857,104061,104062],{"align":25066},[33,104063,104064],{},"\u003Cbody>",[1857,104066,104067],{"align":25066},"刚体",[1812,104069,104070,104075],{},[1857,104071,104072],{"align":25066},[33,104073,104074],{},"\u003Cgeom>",[1857,104076,104077],{"align":25066},"几何体、碰撞体、可视体",[1812,104079,104080,104088],{},[1857,104081,104082,26309,104085],{"align":25066},[33,104083,104084],{},"\u003Cjoint>",[33,104086,104087],{},"\u003Cfreejoint>",[1857,104089,104090],{"align":25066},"关节",[1812,104092,104093,104098],{},[1857,104094,104095],{"align":25066},[33,104096,104097],{},"\u003Csite>",[1857,104099,104100],{"align":25066},"标记点",[1812,104102,104103,104108],{},[1857,104104,104105],{"align":25066},[33,104106,104107],{},"\u003Cactuator>",[1857,104109,104110],{"align":25066},"控制器",[19,104112,104113],{},"初学时可以先记住：",[26,104115,104118],{"className":104116,"code":104117,"language":6676,"meta":31},[6674],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[33,104119,104117],{"__ignoreMap":31},[14,104121,102101],{"id":102100},[19,104123,102104],{},[26,104125,104127],{"className":25152,"code":104126,"language":25154,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[33,104128,104129],{"__ignoreMap":31},[36,104130,104131,104133,104135,104137,104139,104141,104143,104145],{"class":38,"line":39},[36,104132,25907],{"class":46},[36,104134,27646],{"class":110},[36,104136,25164],{"class":110},[36,104138,27731],{"class":73},[36,104140,103832],{"class":110},[36,104142,102145],{"class":110},[36,104144,103837],{"class":110},[36,104146,104147],{"class":110}," glfw-devel\n",[19,104149,104150],{},"pip:",[26,104152,104153],{"className":25152,"code":102250,"language":25154,"meta":31,"style":31},[33,104154,104155],{"__ignoreMap":31},[36,104156,104157,104159,104161,104163],{"class":38,"line":39},[36,104158,25161],{"class":46},[36,104160,25164],{"class":110},[36,104162,102261],{"class":110},[36,104164,102264],{"class":110},[19,104166,104167],{},"conda:",[26,104169,104171],{"className":25152,"code":104170,"language":25154,"meta":31,"style":31},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[33,104172,104173,104190,104199],{"__ignoreMap":31},[36,104174,104175,104177,104179,104181,104184,104186,104188],{"class":38,"line":39},[36,104176,31661],{"class":46},[36,104178,30507],{"class":110},[36,104180,26446],{"class":73},[36,104182,104183],{"class":110}," mujoco-xml",[36,104185,102306],{"class":110},[36,104187,102309],{"class":73},[36,104189,102312],{"class":73},[36,104191,104192,104194,104196],{"class":38,"line":54},[36,104193,31661],{"class":46},[36,104195,102319],{"class":110},[36,104197,104198],{"class":110}," mujoco-xml\n",[36,104200,104201,104203,104205,104207],{"class":38,"line":61},[36,104202,25161],{"class":46},[36,104204,25164],{"class":110},[36,104206,102261],{"class":110},[36,104208,102264],{"class":110},[19,104210,102335],{},[256,104212,104213,104216,104221],{},[259,104214,104215],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[259,104217,104218,104219,29716],{},"本章使用基础标签，适用于 ",[33,104220,102358],{},[259,104222,104223],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104225,102376],{"id":102375},[19,104227,104228],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,104230,104232],{"className":54398,"code":104231,"language":54400,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[33,104233,104234,104248,104256,104261,104269],{"__ignoreMap":31},[36,104235,104236,104238,104240,104242,104244,104246],{"class":38,"line":39},[36,104237,2577],{"class":50},[36,104239,102352],{"class":52631},[36,104241,103106],{"class":46},[36,104243,70],{"class":50},[36,104245,64010],{"class":110},[36,104247,52638],{"class":50},[36,104249,104250,104252,104254],{"class":38,"line":54},[36,104251,53475],{"class":50},[36,104253,103172],{"class":52631},[36,104255,52638],{"class":50},[36,104257,104258],{"class":38,"line":61},[36,104259,104260],{"class":50},"    ...\n",[36,104262,104263,104265,104267],{"class":38,"line":80},[36,104264,53748],{"class":50},[36,104266,103172],{"class":52631},[36,104268,52638],{"class":50},[36,104270,104271,104273,104275],{"class":38,"line":96},[36,104272,53116],{"class":50},[36,104274,102352],{"class":52631},[36,104276,52638],{"class":50},[19,104278,104279,104281,104282,104284,104285,104288],{},[33,104280,53131],{}," 表示刚体。",[33,104283,102451],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[33,104286,104287],{},"joint"," 表示刚体相对父刚体如何运动。",[1645,104290,104291],{"id":104291},"层级结构非常重要",[19,104293,104294],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,104296,104299],{"className":104297,"code":104298,"language":6676,"meta":31},[6674],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[33,104300,104298],{"__ignoreMap":31},[19,104302,104303,102349,104306,104309,104310,104313],{},[33,104304,104305],{},"red_box_geom",[33,104307,104308],{},"box_center"," 都属于 ",[33,104311,104312],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,104315,104317],{"className":54398,"code":104316,"language":54400,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n  \u003Cfreejoint name=\"box_free\"\u002F>\n  \u003Cgeom type=\"box\" size=\"0.1 0.1 0.1\"\u002F>\n\u003C\u002Fbody>\n",[33,104318,104319,104339,104353,104373],{"__ignoreMap":31},[36,104320,104321,104323,104325,104327,104329,104331,104333,104335,104337],{"class":38,"line":39},[36,104322,2577],{"class":50},[36,104324,53131],{"class":52631},[36,104326,16249],{"class":46},[36,104328,70],{"class":50},[36,104330,54822],{"class":110},[36,104332,102437],{"class":46},[36,104334,70],{"class":50},[36,104336,102442],{"class":110},[36,104338,52638],{"class":50},[36,104340,104341,104343,104345,104347,104349,104351],{"class":38,"line":54},[36,104342,53475],{"class":50},[36,104344,102951],{"class":52631},[36,104346,16249],{"class":46},[36,104348,70],{"class":50},[36,104350,103292],{"class":110},[36,104352,102475],{"class":50},[36,104354,104355,104357,104359,104361,104363,104365,104367,104369,104371],{"class":38,"line":61},[36,104356,53475],{"class":50},[36,104358,102451],{"class":52631},[36,104360,55155],{"class":46},[36,104362,70],{"class":50},[36,104364,54822],{"class":110},[36,104366,102467],{"class":46},[36,104368,70],{"class":50},[36,104370,102472],{"class":110},[36,104372,102475],{"class":50},[36,104374,104375,104377,104379],{"class":38,"line":80},[36,104376,53116],{"class":50},[36,104378,53131],{"class":52631},[36,104380,52638],{"class":50},[19,104382,104383],{},"含义:",[256,104385,104386,104392,104397,104400],{},[259,104387,104388,104389,104391],{},"创建名为 ",[33,104390,55045],{}," 的刚体",[259,104393,104394,104395],{},"初始位置在世界坐标 ",[33,104396,102500],{},[259,104398,104399],{},"它有一个自由关节",[259,104401,104402],{},"它有一个盒子几何体",[1645,104404,104405],{"id":104405},"坐标怎么理解",[19,104407,104408],{},"MuJoCo 默认使用三维坐标：",[26,104410,104413],{"className":104411,"code":104412,"language":6676,"meta":31},[6674],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[33,104414,104412],{"__ignoreMap":31},[19,104416,15962],{},[26,104418,104420],{"className":54398,"code":104419,"language":54400,"meta":31,"style":31},"pos=\"0 0 1\"\n",[33,104421,104422],{"__ignoreMap":31},[36,104423,104424],{"class":38,"line":39},[36,104425,104419],{"class":50},[19,104427,104428],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[1645,104430,104432],{"id":104431},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104434,104435,104436,83861,104439,104441],{},"不同 ",[33,104437,104438],{},"type",[33,104440,32827],{}," 含义不同：",[1806,104443,104444,104459],{},[1809,104445,104446],{},[1812,104447,104448,104452,104457],{},[1815,104449,104450],{"align":25066},[33,104451,104438],{},[1815,104453,104454,104456],{"align":25066},[33,104455,32827],{}," 示例",[1815,104458,102031],{"align":25066},[1852,104460,104461,104475,104490,104509],{},[1812,104462,104463,104467,104472],{},[1857,104464,104465],{"align":25066},[33,104466,55045],{},[1857,104468,104469],{"align":25066},[33,104470,104471],{},"size=\"0.1 0.2 0.3\"",[1857,104473,104474],{"align":25066},"x\u002Fy\u002Fz 半边长，不是完整长度",[1812,104476,104477,104482,104487],{},[1857,104478,104479],{"align":25066},[33,104480,104481],{},"sphere",[1857,104483,104484],{"align":25066},[33,104485,104486],{},"size=\"0.1\"",[1857,104488,104489],{"align":25066},"球半径",[1812,104491,104492,104497,104502],{},[1857,104493,104494],{"align":25066},[33,104495,104496],{},"capsule",[1857,104498,104499],{"align":25066},[33,104500,104501],{},"size=\"0.03\"",[1857,104503,104504,104505,104508],{"align":25066},"胶囊半径，长度常用 ",[33,104506,104507],{},"fromto"," 指定",[1812,104510,104511,104516,104521],{},[1857,104512,104513],{"align":25066},[33,104514,104515],{},"plane",[1857,104517,104518],{"align":25066},[33,104519,104520],{},"size=\"3 3 0.1\"",[1857,104522,104523],{"align":25066},"可视平面大小，通常当地面",[19,104525,104526,104527,104529,104530,104532],{},"最容易踩坑的是 box：",[33,104528,103355],{}," 表示边长大约是 ",[33,104531,33368],{},"，因为 MuJoCo 用的是半边长。",[1645,104534,104536],{"id":104535},"site-是什么","site 是什么",[19,104538,104539,104542],{},[33,104540,104541],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[256,104544,104545,104548,104551,104554],{},[259,104546,104547],{},"标记机械臂末端。",[259,104549,104550],{},"标记目标位置。",[259,104552,104553],{},"放传感器或相机参考点。",[259,104555,104556],{},"在 Python 中读取某个关键点的世界坐标。",[19,104558,104559,104560,102349,104563,104566],{},"在后面的 Reacher 任务中，",[33,104561,104562],{},"tip",[33,104564,104565],{},"target"," 就会用 site 表示。",[14,104568,102584],{"id":102583},[26,104570,104572],{"className":31709,"code":104571,"language":31711,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"xml_basic\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n\n    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"red_box_free\"\u002F>\n      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n\n    if box_body_id \u003C 0:\n        raise RuntimeError(\"body red_box not found\")\n    if site_id \u003C 0:\n        raise RuntimeError(\"site box_center not found\")\n\n    for _ in range(200):\n        mujoco.mj_step(model, data)\n\n    print(\"simulation time:\", data.time)\n    print(\"box body position:\", data.xpos[box_body_id].copy())\n    print(\"site position:\", data.site_xpos[site_id].copy())\n    print(\"box qpos:\", np.array(data.qpos))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,104573,104574,104580,104590,104594,104598,104606,104611,104615,104619,104623,104628,104632,104637,104642,104647,104652,104656,104660,104664,104668,104672,104676,104688,104700,104708,104712,104727,104742,104746,104759,104774,104787,104800,104804,104820,104824,104828,104839,104851,104863,104875,104879,104883,104895],{"__ignoreMap":31},[36,104575,104576,104578],{"class":38,"line":39},[36,104577,31723],{"class":42},[36,104579,102632],{"class":50},[36,104581,104582,104584,104586,104588],{"class":38,"line":54},[36,104583,31723],{"class":42},[36,104585,32711],{"class":50},[36,104587,32714],{"class":42},[36,104589,32717],{"class":50},[36,104591,104592],{"class":38,"line":61},[36,104593,58],{"emptyLinePlaceholder":57},[36,104595,104596],{"class":38,"line":80},[36,104597,58],{"emptyLinePlaceholder":57},[36,104599,104600,104602,104604],{"class":38,"line":96},[36,104601,102645],{"class":73},[36,104603,14893],{"class":42},[36,104605,102650],{"class":110},[36,104607,104608],{"class":38,"line":101},[36,104609,104610],{"class":110},"\u003Cmujoco model=\"xml_basic\">\n",[36,104612,104613],{"class":38,"line":128},[36,104614,102660],{"class":110},[36,104616,104617],{"class":38,"line":149},[36,104618,58],{"emptyLinePlaceholder":57},[36,104620,104621],{"class":38,"line":154},[36,104622,102669],{"class":110},[36,104624,104625],{"class":38,"line":167},[36,104626,104627],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[36,104629,104630],{"class":38,"line":172},[36,104631,58],{"emptyLinePlaceholder":57},[36,104633,104634],{"class":38,"line":192},[36,104635,104636],{"class":110},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[36,104638,104639],{"class":38,"line":211},[36,104640,104641],{"class":110},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[36,104643,104644],{"class":38,"line":216},[36,104645,104646],{"class":110},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,104648,104649],{"class":38,"line":231},[36,104650,104651],{"class":110},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,104653,104654],{"class":38,"line":236},[36,104655,102698],{"class":110},[36,104657,104658],{"class":38,"line":247},[36,104659,102703],{"class":110},[36,104661,104662],{"class":38,"line":637},[36,104663,102708],{"class":110},[36,104665,104666],{"class":38,"line":646},[36,104667,97029],{"class":110},[36,104669,104670],{"class":38,"line":655},[36,104671,58],{"emptyLinePlaceholder":57},[36,104673,104674],{"class":38,"line":660},[36,104675,58],{"emptyLinePlaceholder":57},[36,104677,104678,104680,104682,104684,104686],{"class":38,"line":665},[36,104679,33278],{"class":42},[36,104681,47],{"class":46},[36,104683,102729],{"class":50},[36,104685,97017],{"class":73},[36,104687,5230],{"class":50},[36,104689,104690,104692,104694,104696,104698],{"class":38,"line":674},[36,104691,102738],{"class":50},[36,104693,70],{"class":42},[36,104695,102743],{"class":50},[36,104697,102645],{"class":73},[36,104699,1680],{"class":50},[36,104701,104702,104704,104706],{"class":38,"line":679},[36,104703,102752],{"class":50},[36,104705,70],{"class":42},[36,104707,102757],{"class":50},[36,104709,104710],{"class":38,"line":692},[36,104711,58],{"emptyLinePlaceholder":57},[36,104713,104714,104717,104719,104722,104725],{"class":38,"line":705},[36,104715,104716],{"class":50},"    box_body_id ",[36,104718,70],{"class":42},[36,104720,104721],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[36,104723,104724],{"class":110},"\"red_box\"",[36,104726,1680],{"class":50},[36,104728,104729,104732,104734,104737,104740],{"class":38,"line":710},[36,104730,104731],{"class":50},"    site_id ",[36,104733,70],{"class":42},[36,104735,104736],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[36,104738,104739],{"class":110},"\"box_center\"",[36,104741,1680],{"class":50},[36,104743,104744],{"class":38,"line":722},[36,104745,58],{"emptyLinePlaceholder":57},[36,104747,104748,104750,104753,104755,104757],{"class":38,"line":750},[36,104749,4592],{"class":42},[36,104751,104752],{"class":50}," box_body_id ",[36,104754,2577],{"class":42},[36,104756,242],{"class":73},[36,104758,5230],{"class":50},[36,104760,104761,104764,104767,104769,104772],{"class":38,"line":755},[36,104762,104763],{"class":42},"        raise",[36,104765,104766],{"class":73}," RuntimeError",[36,104768,222],{"class":50},[36,104770,104771],{"class":110},"\"body red_box not found\"",[36,104773,1680],{"class":50},[36,104775,104776,104778,104781,104783,104785],{"class":38,"line":777},[36,104777,4592],{"class":42},[36,104779,104780],{"class":50}," site_id ",[36,104782,2577],{"class":42},[36,104784,242],{"class":73},[36,104786,5230],{"class":50},[36,104788,104789,104791,104793,104795,104798],{"class":38,"line":802},[36,104790,104763],{"class":42},[36,104792,104766],{"class":73},[36,104794,222],{"class":50},[36,104796,104797],{"class":110},"\"site box_center not found\"",[36,104799,1680],{"class":50},[36,104801,104802],{"class":38,"line":807},[36,104803,58],{"emptyLinePlaceholder":57},[36,104805,104806,104808,104810,104812,104814,104816,104818],{"class":38,"line":818},[36,104807,4692],{"class":42},[36,104809,102832],{"class":50},[36,104811,27374],{"class":42},[36,104813,33774],{"class":73},[36,104815,222],{"class":50},[36,104817,3240],{"class":73},[36,104819,32117],{"class":50},[36,104821,104822],{"class":38,"line":843},[36,104823,102847],{"class":50},[36,104825,104826],{"class":38,"line":848},[36,104827,58],{"emptyLinePlaceholder":57},[36,104829,104830,104832,104834,104837],{"class":38,"line":859},[36,104831,32630],{"class":73},[36,104833,222],{"class":50},[36,104835,104836],{"class":110},"\"simulation time:\"",[36,104838,102809],{"class":50},[36,104840,104841,104843,104845,104848],{"class":38,"line":864},[36,104842,32630],{"class":73},[36,104844,222],{"class":50},[36,104846,104847],{"class":110},"\"box body position:\"",[36,104849,104850],{"class":50},", data.xpos[box_body_id].copy())\n",[36,104852,104853,104855,104857,104860],{"class":38,"line":873},[36,104854,32630],{"class":73},[36,104856,222],{"class":50},[36,104858,104859],{"class":110},"\"site position:\"",[36,104861,104862],{"class":50},", data.site_xpos[site_id].copy())\n",[36,104864,104865,104867,104869,104872],{"class":38,"line":9454},[36,104866,32630],{"class":73},[36,104868,222],{"class":50},[36,104870,104871],{"class":110},"\"box qpos:\"",[36,104873,104874],{"class":50},", np.array(data.qpos))\n",[36,104876,104877],{"class":38,"line":9481},[36,104878,58],{"emptyLinePlaceholder":57},[36,104880,104881],{"class":38,"line":9486},[36,104882,58],{"emptyLinePlaceholder":57},[36,104884,104885,104887,104889,104891,104893],{"class":38,"line":9492},[36,104886,3061],{"class":42},[36,104888,32551],{"class":73},[36,104890,102890],{"class":42},[36,104892,102893],{"class":110},[36,104894,5230],{"class":50},[36,104896,104897],{"class":38,"line":9504},[36,104898,102900],{"class":50},[19,104900,104901],{},"保存为：",[26,104903,104905],{"className":25152,"code":104904,"language":25154,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[33,104906,104907],{"__ignoreMap":31},[36,104908,104909,104911],{"class":38,"line":39},[36,104910,102614],{"class":46},[36,104912,104913],{"class":110}," ch2_xml_basic.py\n",[19,104915,103632],{},[26,104917,104919],{"className":25152,"code":104918,"language":25154,"meta":31,"style":31},"python ch2_xml_basic.py\n",[33,104920,104921],{"__ignoreMap":31},[36,104922,104923,104925],{"class":38,"line":39},[36,104924,31711],{"class":46},[36,104926,104913],{"class":110},[1645,104928,102903],{"id":102903},[19,104930,104931],{},"用名字查找 body：",[26,104933,104935],{"className":31709,"code":104934,"language":31711,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[33,104936,104937],{"__ignoreMap":31},[36,104938,104939,104942,104944,104946,104948],{"class":38,"line":39},[36,104940,104941],{"class":50},"box_body_id ",[36,104943,70],{"class":42},[36,104945,104721],{"class":50},[36,104947,104724],{"class":110},[36,104949,1680],{"class":50},[19,104951,104952],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104954,104955],{},"用名字查找 site：",[26,104957,104959],{"className":31709,"code":104958,"language":31711,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[33,104960,104961],{"__ignoreMap":31},[36,104962,104963,104966,104968,104970,104972],{"class":38,"line":39},[36,104964,104965],{"class":50},"site_id ",[36,104967,70],{"class":42},[36,104969,104736],{"class":50},[36,104971,104739],{"class":110},[36,104973,1680],{"class":50},[19,104975,104976,104977,104980,104981,104984],{},"注意第二个参数是对象类型。查 body 就用 ",[33,104978,104979],{},"mjOBJ_BODY","，查 site 就用 ",[33,104982,104983],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104986,104987],{},"读取世界坐标：",[26,104989,104991],{"className":31709,"code":104990,"language":31711,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[33,104992,104993,104998],{"__ignoreMap":31},[36,104994,104995],{"class":38,"line":39},[36,104996,104997],{"class":50},"data.xpos[box_body_id]\n",[36,104999,105000],{"class":38,"line":54},[36,105001,105002],{"class":50},"data.site_xpos[site_id]\n",[19,105004,105005,105008,105009,105012],{},[33,105006,105007],{},"xpos"," 是 body 的世界坐标，",[33,105010,105011],{},"site_xpos"," 是 site 的世界坐标。",[1645,105014,103039],{"id":103039},[26,105016,105018],{"className":31709,"code":105017,"language":31711,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[33,105019,105020,105026],{"__ignoreMap":31},[36,105021,105022,105024],{"class":38,"line":39},[36,105023,31723],{"class":42},[36,105025,102632],{"class":50},[36,105027,105028,105030,105032,105034],{"class":38,"line":54},[36,105029,31723],{"class":42},[36,105031,32711],{"class":50},[36,105033,32714],{"class":42},[36,105035,32717],{"class":50},[19,105037,105038,105039,105042,105043,105046,105047,1880,105050,29716],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[33,105040,105041],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[33,105044,105045],{},"as np"," 是习惯写法，后面就可以写 ",[33,105048,105049],{},"np.array(...)",[33,105051,105052],{},"np.round(...)",[26,105054,105055],{"className":31709,"code":102926,"language":31711,"meta":31,"style":31},[33,105056,105057,105065,105069],{"__ignoreMap":31},[36,105058,105059,105061,105063],{"class":38,"line":39},[36,105060,102645],{"class":73},[36,105062,14893],{"class":42},[36,105064,102650],{"class":110},[36,105066,105067],{"class":38,"line":54},[36,105068,102941],{"class":110},[36,105070,105071],{"class":38,"line":61},[36,105072,97029],{"class":110},[19,105074,105075,105076,29716],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[33,105077,105078],{},"mujoco.MjModel.from_xml_string(XML)",[26,105080,105082],{"className":54398,"code":105081,"language":54400,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,105083,105084],{"__ignoreMap":31},[36,105085,105086,105088,105090,105092,105094,105096,105098,105100,105103,105105,105107,105110,105112,105114,105117],{"class":38,"line":39},[36,105087,2577],{"class":50},[36,105089,104541],{"class":52631},[36,105091,16249],{"class":46},[36,105093,70],{"class":50},[36,105095,104739],{"class":110},[36,105097,102437],{"class":46},[36,105099,70],{"class":50},[36,105101,105102],{"class":110},"\"0 0 0\"",[36,105104,102467],{"class":46},[36,105106,70],{"class":50},[36,105108,105109],{"class":110},"\"0.03\"",[36,105111,80098],{"class":46},[36,105113,70],{"class":50},[36,105115,105116],{"class":110},"\"0 1 0 1\"",[36,105118,102475],{"class":50},[19,105120,105121,105123,105124,105127,105128,105130,105131,105134],{},[33,105122,104541],{}," 是标记点。",[33,105125,105126],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[33,105129,104501],{}," 表示显示出来的小球大小。",[33,105132,105133],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,105136,105137],{"className":31709,"code":104934,"language":31711,"meta":31,"style":31},[33,105138,105139],{"__ignoreMap":31},[36,105140,105141,105143,105145,105147,105149],{"class":38,"line":39},[36,105142,104941],{"class":50},[36,105144,70],{"class":42},[36,105146,104721],{"class":50},[36,105148,104724],{"class":110},[36,105150,1680],{"class":50},[19,105152,105153,105154,105156],{},"这行的作用是：根据名字 ",[33,105155,104724],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105158,105159],{},"拆开看：",[256,105161,105162,105168,105173,105179],{},[259,105163,105164,105167],{},[33,105165,105166],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[259,105169,105170,105172],{},[33,105171,103416],{}," 是被查询的模型。",[259,105174,105175,105178],{},[33,105176,105177],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[259,105180,105181,105183],{},[33,105182,104724],{}," 是 XML 里写的名字。",[26,105185,105186],{"className":31709,"code":104958,"language":31711,"meta":31,"style":31},[33,105187,105188],{"__ignoreMap":31},[36,105189,105190,105192,105194,105196,105198],{"class":38,"line":39},[36,105191,104965],{"class":50},[36,105193,70],{"class":42},[36,105195,104736],{"class":50},[36,105197,104739],{"class":110},[36,105199,1680],{"class":50},[19,105201,105202,105203,29716],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[33,105204,104739],{},[26,105206,105208],{"className":31709,"code":105207,"language":31711,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[33,105209,105210,105222],{"__ignoreMap":31},[36,105211,105212,105214,105216,105218,105220],{"class":38,"line":39},[36,105213,3061],{"class":42},[36,105215,104752],{"class":50},[36,105217,2577],{"class":42},[36,105219,242],{"class":73},[36,105221,5230],{"class":50},[36,105223,105224,105227,105229,105231,105233],{"class":38,"line":54},[36,105225,105226],{"class":42},"    raise",[36,105228,104766],{"class":73},[36,105230,222],{"class":50},[36,105232,104771],{"class":110},[36,105234,1680],{"class":50},[19,105236,105237,105239,105240,105243,105244,105247,105248,105251],{},[33,105238,3061],{}," 是条件判断。",[33,105241,105242],{},"mj_name2id"," 找不到对象时会返回 ",[33,105245,105246],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[33,105249,105250],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,105253,105255],{"className":31709,"code":105254,"language":31711,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[33,105256,105257,105273],{"__ignoreMap":31},[36,105258,105259,105261,105263,105265,105267,105269,105271],{"class":38,"line":39},[36,105260,4516],{"class":42},[36,105262,102832],{"class":50},[36,105264,27374],{"class":42},[36,105266,33774],{"class":73},[36,105268,222],{"class":50},[36,105270,3240],{"class":73},[36,105272,32117],{"class":50},[36,105274,105275],{"class":38,"line":54},[36,105276,103030],{"class":50},[19,105278,105279],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,105281,105283],{"className":31709,"code":105282,"language":31711,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[33,105284,105285],{"__ignoreMap":31},[36,105286,105287,105289,105291,105293],{"class":38,"line":39},[36,105288,31746],{"class":73},[36,105290,222],{"class":50},[36,105292,104847],{"class":110},[36,105294,104850],{"class":50},[19,105296,105297,105299,105300,105303],{},[33,105298,102410],{}," 保存所有 body 的世界坐标。",[33,105301,105302],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,105305,105307],{"className":31709,"code":105306,"language":31711,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[33,105308,105309],{"__ignoreMap":31},[36,105310,105311,105313,105315,105317],{"class":38,"line":39},[36,105312,31746],{"class":73},[36,105314,222],{"class":50},[36,105316,104859],{"class":110},[36,105318,104862],{"class":50},[19,105320,105321,105324,105325,105327],{},[33,105322,105323],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[33,105326,104308],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,105329,105331],{"className":31709,"code":105330,"language":31711,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[33,105332,105333],{"__ignoreMap":31},[36,105334,105335,105337,105339,105341],{"class":38,"line":39},[36,105336,31746],{"class":73},[36,105338,222],{"class":50},[36,105340,104871],{"class":110},[36,105342,104874],{"class":50},[19,105344,105345,105346,105349],{},"这里打印广义位置数组。",[33,105347,105348],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105351,103647],{"id":103646},[19,105353,105354,105355,105358,105359,29716],{},"程序会输出 ",[33,105356,105357],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[33,105360,105361],{},"qpos",[19,105363,105364,105366,105367,105370,105371,105374],{},[33,105365,105302],{}," 是 body 的世界坐标位置。",[33,105368,105369],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[33,105372,105373],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105376,83553,105377,83861,105379,105381],{},[33,105378,104308],{},[33,105380,105126],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105383,105384],{},"如果你把 site 改成：",[26,105386,105388],{"className":54398,"code":105387,"language":54400,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,105389,105390],{"__ignoreMap":31},[36,105391,105392,105394,105396,105398,105400,105403,105405,105407,105410,105412,105414,105416,105418,105420,105422],{"class":38,"line":39},[36,105393,2577],{"class":50},[36,105395,104541],{"class":52631},[36,105397,16249],{"class":46},[36,105399,70],{"class":50},[36,105401,105402],{"class":110},"\"box_top\"",[36,105404,102437],{"class":46},[36,105406,70],{"class":50},[36,105408,105409],{"class":110},"\"0 0 0.15\"",[36,105411,102467],{"class":46},[36,105413,70],{"class":50},[36,105415,105109],{"class":110},[36,105417,80098],{"class":46},[36,105419,70],{"class":50},[36,105421,105116],{"class":110},[36,105423,102475],{"class":50},[19,105425,105426,105427,105430],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[33,105428,105429],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105432,103679],{"id":103678},[256,105434,105435,105444,105447,105454,105460,105471],{},[259,105436,103742,105437,105439,105440,103745,105442,29716],{},[33,105438,104312],{}," 的初始高度从 ",[33,105441,1885],{},[33,105443,1747],{},[259,105445,105446],{},"重新运行程序。",[259,105448,105449,105450,105453],{},"观察 ",[33,105451,105452],{},"box qpos"," 和最终位置是否变化。",[259,105455,105456,105457,105459],{},"故意把 ",[33,105458,104541],{}," 名称改错，确认程序能报错。",[259,105461,103742,105462,105464,105465,103745,105467,105470],{},[33,105463,102451],{}," 的颜色 ",[33,105466,103363],{},[33,105468,105469],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[259,105472,103742,105473,83861,105475,103745,105478,105481,105482,105484],{},[33,105474,104308],{},[33,105476,105477],{},"pos",[33,105479,105480],{},"0 0 0.2","，观察 ",[33,105483,105429],{}," 如何变化。",[14,105486,103784],{"id":103783},[1645,105488,105490],{"id":105489},"xml-error-schema-violation",[33,105491,105492],{},"XML Error: Schema violation",[19,105494,105495],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[1645,105497,105499,82621,105501],{"id":105498},"mj_name2id-返回-1",[33,105500,105242],{},[33,105502,105246],{},[19,105504,105505,105506,105509],{},"说明名字没有找到。检查 XML 中 ",[33,105507,105508],{},"name=\"...\"","，并确认对象类型正确。",[1645,105511,105512],{"id":105512},"物体不下落",[19,105514,103854],{},[256,105516,105517,105522,105527],{},[259,105518,105519,105520],{},"body 是否有 ",[33,105521,102951],{},[259,105523,105524,105525],{},"gravity 是否为 ",[33,105526,103920],{},[259,105528,105529,105530,105532],{},"body 是否被固定在 ",[33,105531,103172],{}," 中",[1645,105534,105535],{"id":105535},"坐标看起来不符合预期",[19,105537,105538],{},"先区分两种坐标：",[1806,105540,105541,105550],{},[1809,105542,105543],{},[1812,105544,105545,105548],{},[1815,105546,105547],{"align":25066},"坐标",[1815,105549,102031],{"align":25066},[1852,105551,105552,105562],{},[1812,105553,105554,105559],{},[1857,105555,105556,105557],{"align":25066},"XML 里的 ",[33,105558,105477],{},[1857,105560,105561],{"align":25066},"相对父 body 的局部坐标",[1812,105563,105564,105570],{},[1857,105565,105566,26309,105568],{"align":25066},[33,105567,102410],{},[33,105569,105323],{},[1857,105571,105572],{"align":25066},"仿真更新后的世界坐标",[19,105574,105575,105576,105578,105579,83870,105582,105584],{},"如果你修改了 ",[33,105577,102401],{},"，但还没调用 ",[33,105580,105581],{},"mj_forward",[33,105583,102546],{},"，世界坐标可能还没有更新。",[14,105586,103938],{"id":103937},[19,105588,105589],{},"MJCF 建模先掌握四件事：",[256,105591,105592,105597,105602,105607],{},[259,105593,105594,105596],{},[33,105595,53131],{}," 表示刚体层级。",[259,105598,105599,105601],{},[33,105600,102451],{}," 表示形状、碰撞和质量。",[259,105603,105604,105606],{},[33,105605,104287],{}," 决定 body 能不能动、怎么动。",[259,105608,105609,105611],{},[33,105610,104541],{}," 用来标记关键点，方便 Python 读取位置。",[19,105613,105614],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1592,105616,105617],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":105619},[105620,105621,105622,105628,105632,105633,105634,105641],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":105623},[105624,105625,105626,105627],{"id":104291,"depth":61,"text":104291},{"id":104405,"depth":61,"text":104405},{"id":104431,"depth":61,"text":104432},{"id":104535,"depth":61,"text":104536},{"id":102583,"depth":54,"text":102584,"children":105629},[105630,105631],{"id":102903,"depth":61,"text":102903},{"id":103039,"depth":61,"text":103039},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":105635},[105636,105637,105639,105640],{"id":105489,"depth":61,"text":105492},{"id":105498,"depth":61,"text":105638},"mj_name2id 返回 -1",{"id":105512,"depth":61,"text":105512},{"id":105535,"depth":61,"text":105535},{"id":103937,"depth":54,"text":103938},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103985,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105648,"title":105649,"body":105650,"description":31,"extension":1603,"meta":107145,"navigation":57,"path":107146,"seo":107147,"stem":107148,"__hash__":107149},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105651,"toc":107117},[105652,105655,105657,105660,105663,105701,105704,105710,105713,105715,105717,105744,105746,105760,105762,105803,105805,105829,105831,105834,105843,105852,105855,105864,105872,105881,105884,105894,105897,105949,105956,105962,105970,106018,106021,106040,106043,106051,106055,106064,106097,106099,106447,106449,106461,106463,106474,106476,106479,106500,106506,106509,106534,106544,106547,106555,106558,106561,106582,106593,106595,106615,106618,106639,106648,106667,106673,106698,106701,106715,106722,106746,106749,106757,106766,106782,106794,106802,106811,106813,106816,106840,106845,106848,106870,106872,106911,106913,106920,106922,106930,106933,106936,106948,106989,106996,107007,107014,107017,107066,107069,107072,107078,107080,107085,107111,107114],[10,105653,105649],{"id":105654},"_3python-控制接口读取状态与推进仿真",[14,105656,101978],{"id":101977},[19,105658,105659],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105661,105662],{},"你将学习:",[256,105664,105665,105670,105675,105679,105684,105695],{},[259,105666,105667],{},[33,105668,105669],{},"MjModel.from_xml_string",[259,105671,105672],{},[33,105673,105674],{},"MjData(model)",[259,105676,105677],{},[33,105678,102546],{},[259,105680,105681],{},[33,105682,105683],{},"mj_resetData",[259,105685,105686,105687,1880,105689,1880,105692],{},"读取 ",[33,105688,105361],{},[33,105690,105691],{},"qvel",[33,105693,105694],{},"ctrl",[259,105696,105697,105698],{},"使用 ",[33,105699,105700],{},"model.opt.timestep",[19,105702,105703],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,105705,105708],{"className":105706,"code":105707,"language":6676,"meta":31},[6674],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[33,105709,105707],{"__ignoreMap":31},[19,105711,105712],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105714,102101],{"id":102100},[19,105716,102104],{},[26,105718,105720],{"className":25152,"code":105719,"language":25154,"meta":31,"style":31},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[33,105721,105722],{"__ignoreMap":31},[36,105723,105724,105726,105728,105730,105732,105735,105737,105739,105741],{"class":38,"line":39},[36,105725,25907],{"class":46},[36,105727,27646],{"class":110},[36,105729,25164],{"class":110},[36,105731,27731],{"class":73},[36,105733,105734],{"class":110}," python3",[36,105736,102129],{"class":110},[36,105738,103832],{"class":110},[36,105740,102145],{"class":110},[36,105742,105743],{"class":110}," glfw\n",[19,105745,104150],{},[26,105747,105748],{"className":25152,"code":102250,"language":25154,"meta":31,"style":31},[33,105749,105750],{"__ignoreMap":31},[36,105751,105752,105754,105756,105758],{"class":38,"line":39},[36,105753,25161],{"class":46},[36,105755,25164],{"class":110},[36,105757,102261],{"class":110},[36,105759,102264],{"class":110},[19,105761,104167],{},[26,105763,105765],{"className":25152,"code":105764,"language":25154,"meta":31,"style":31},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[33,105766,105767,105784,105793],{"__ignoreMap":31},[36,105768,105769,105771,105773,105775,105778,105780,105782],{"class":38,"line":39},[36,105770,31661],{"class":46},[36,105772,30507],{"class":110},[36,105774,26446],{"class":73},[36,105776,105777],{"class":110}," mujoco-python-api",[36,105779,102306],{"class":110},[36,105781,102309],{"class":73},[36,105783,102312],{"class":73},[36,105785,105786,105788,105790],{"class":38,"line":54},[36,105787,31661],{"class":46},[36,105789,102319],{"class":110},[36,105791,105792],{"class":110}," mujoco-python-api\n",[36,105794,105795,105797,105799,105801],{"class":38,"line":61},[36,105796,25161],{"class":46},[36,105798,25164],{"class":110},[36,105800,102261],{"class":110},[36,105802,102264],{"class":110},[19,105804,102335],{},[256,105806,105807,105814,105823],{},[259,105808,105809,102349,105811,105813],{},[33,105810,102006],{},[33,105812,102011],{}," 是官方 Python bindings 的类名。",[259,105815,105816,105817,105820,105821,29716],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[33,105818,105819],{},"mjModel"," 在 Python 中是 ",[33,105822,102040],{},[259,105824,105825,105826,29716],{},"不要使用 ",[33,105827,105828],{},"sim = mujoco_py.MjSim(...)",[14,105830,102376],{"id":102375},[19,105832,105833],{},"仿真推进核心代码:",[26,105835,105837],{"className":31709,"code":105836,"language":31711,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[33,105838,105839],{"__ignoreMap":31},[36,105840,105841],{"class":38,"line":39},[36,105842,105836],{"class":50},[19,105844,105845,105846,1880,105848,1880,105850,29716],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[33,105847,102401],{},[33,105849,102404],{},[33,105851,102398],{},[19,105853,105854],{},"重置仿真:",[26,105856,105858],{"className":31709,"code":105857,"language":31711,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[33,105859,105860],{"__ignoreMap":31},[36,105861,105862],{"class":38,"line":39},[36,105863,105857],{"class":50},[19,105865,105866,105867,83870,105869,105871],{},"如果手动修改了 ",[33,105868,102401],{},[33,105870,102404],{},"，通常应调用:",[26,105873,105875],{"className":31709,"code":105874,"language":31711,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[33,105876,105877],{"__ignoreMap":31},[36,105878,105879],{"class":38,"line":39},[36,105880,105874],{"class":50},[19,105882,105883],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[1645,105885,105887,1880,105889,1880,105891,105893],{"id":105886},"qposqvelctrl-是什么",[33,105888,105361],{},[33,105890,105691],{},[33,105892,105694],{}," 是什么",[19,105895,105896],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1806,105898,105899,105911],{},[1809,105900,105901],{},[1812,105902,105903,105906,105908],{},[1815,105904,105905],{"align":25066},"字段",[1815,105907,102031],{"align":25066},[1815,105909,105910],{"align":25066},"谁来修改",[1852,105912,105913,105925,105937],{},[1812,105914,105915,105919,105922],{},[1857,105916,105917],{"align":25066},[33,105918,102401],{},[1857,105920,105921],{"align":25066},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1857,105923,105924],{"align":25066},"MuJoCo 更新，也可以手动设置初始状态",[1812,105926,105927,105931,105934],{},[1857,105928,105929],{"align":25066},[33,105930,102404],{},[1857,105932,105933],{"align":25066},"广义速度，例如小车速度、关节角速度",[1857,105935,105936],{"align":25066},"MuJoCo 更新，也可以手动清零",[1812,105938,105939,105943,105946],{},[1857,105940,105941],{"align":25066},[33,105942,102407],{},[1857,105944,105945],{"align":25066},"actuator 的控制输入",[1857,105947,105948],{"align":25066},"主要由你的控制代码写入",[19,105950,885,105951,102349,105953,105955],{},[33,105952,105361],{},[33,105954,105691],{}," 不一定同维。自由刚体就是典型例子：",[26,105957,105960],{"className":105958,"code":105959,"language":6676,"meta":31},[6674],"freejoint: qpos 7 维，qvel 6 维\n",[33,105961,105959],{"__ignoreMap":31},[1645,105963,105965,102349,105967,105969],{"id":105964},"mj_step-和-mj_forward-的区别",[33,105966,102546],{},[33,105968,105581],{}," 的区别",[1806,105971,105972,105985],{},[1809,105973,105974],{},[1812,105975,105976,105979,105982],{},[1815,105977,105978],{"align":25066},"函数",[1815,105980,105981],{"align":25066},"是否推进时间",[1815,105983,105984],{"align":25066},"什么时候用",[1852,105986,105987,106000],{},[1812,105988,105989,105994,105997],{},[1857,105990,105991],{"align":25066},[33,105992,105993],{},"mj_step(model, data)",[1857,105995,105996],{"align":25066},"是",[1857,105998,105999],{"align":25066},"正常仿真循环，每调用一次前进一步",[1812,106001,106002,106007,106010],{},[1857,106003,106004],{"align":25066},[33,106005,106006],{},"mj_forward(model, data)",[1857,106008,106009],{"align":25066},"否",[1857,106011,106012,106013,1880,106015,106017],{"align":25066},"手动改了 ",[33,106014,105361],{},[33,106016,105691],{}," 后，刷新派生量",[19,106019,106020],{},"例如你写：",[26,106022,106024],{"className":31709,"code":106023,"language":31711,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[33,106025,106026],{"__ignoreMap":31},[36,106027,106028,106031,106033,106035,106037],{"class":38,"line":39},[36,106029,106030],{"class":50},"data.qpos[",[36,106032,1747],{"class":73},[36,106034,5932],{"class":50},[36,106036,70],{"class":42},[36,106038,106039],{"class":73}," 2.0\n",[19,106041,106042],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,106044,106045],{"className":31709,"code":105874,"language":31711,"meta":31,"style":31},[33,106046,106047],{"__ignoreMap":31},[36,106048,106049],{"class":38,"line":39},[36,106050,105874],{"class":50},[1645,106052,106054],{"id":106053},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106056,106057,106060,106061,106063],{},[33,106058,106059],{},"mujoco.mj_resetData(model, data)"," 会把 ",[33,106062,34732],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,106065,106067],{"className":31709,"code":106066,"language":31711,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[33,106068,106069,106073,106083,106093],{"__ignoreMap":31},[36,106070,106071],{"class":38,"line":39},[36,106072,105857],{"class":50},[36,106074,106075,106078,106080],{"class":38,"line":54},[36,106076,106077],{"class":50},"data.qpos[:] ",[36,106079,70],{"class":42},[36,106081,106082],{"class":50}," random_qpos\n",[36,106084,106085,106088,106090],{"class":38,"line":61},[36,106086,106087],{"class":50},"data.qvel[:] ",[36,106089,70],{"class":42},[36,106091,106092],{"class":73}," 0.0\n",[36,106094,106095],{"class":38,"line":80},[36,106096,105874],{"class":50},[14,106098,102584],{"id":102583},[26,106100,106102],{"className":31709,"code":106101,"language":31711,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"state_api\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n\n    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"ball_free\"\u002F>\n      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n    print(prefix)\n    print(\"  timestep:\", model.opt.timestep)\n    print(\"  time:\", data.time)\n    print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"  qvel:\", np.round(data.qvel.copy(), 4))\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print_state(\"initial\", model, data)\n\n    for _ in range(50):\n        mujoco.mj_step(model, data)\n\n    print_state(\"after 50 steps\", model, data)\n\n    mujoco.mj_resetData(model, data)\n    print_state(\"after reset\", model, data)\n\n    data.qpos[2] = 2.0\n    mujoco.mj_forward(model, data)\n    print_state(\"after manual qpos edit\", model, data)\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,106103,106104,106110,106120,106124,106128,106136,106141,106145,106149,106153,106158,106162,106167,106172,106177,106181,106185,106189,106193,106197,106201,106220,106227,106239,106250,106266,106282,106286,106290,106302,106314,106322,106326,106337,106341,106357,106361,106365,106374,106378,106383,106392,106396,106409,106414,106423,106427,106431,106443],{"__ignoreMap":31},[36,106105,106106,106108],{"class":38,"line":39},[36,106107,31723],{"class":42},[36,106109,102632],{"class":50},[36,106111,106112,106114,106116,106118],{"class":38,"line":54},[36,106113,31723],{"class":42},[36,106115,32711],{"class":50},[36,106117,32714],{"class":42},[36,106119,32717],{"class":50},[36,106121,106122],{"class":38,"line":61},[36,106123,58],{"emptyLinePlaceholder":57},[36,106125,106126],{"class":38,"line":80},[36,106127,58],{"emptyLinePlaceholder":57},[36,106129,106130,106132,106134],{"class":38,"line":96},[36,106131,102645],{"class":73},[36,106133,14893],{"class":42},[36,106135,102650],{"class":110},[36,106137,106138],{"class":38,"line":101},[36,106139,106140],{"class":110},"\u003Cmujoco model=\"state_api\">\n",[36,106142,106143],{"class":38,"line":128},[36,106144,102660],{"class":110},[36,106146,106147],{"class":38,"line":149},[36,106148,58],{"emptyLinePlaceholder":57},[36,106150,106151],{"class":38,"line":154},[36,106152,102669],{"class":110},[36,106154,106155],{"class":38,"line":167},[36,106156,106157],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[36,106159,106160],{"class":38,"line":172},[36,106161,58],{"emptyLinePlaceholder":57},[36,106163,106164],{"class":38,"line":192},[36,106165,106166],{"class":110},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[36,106168,106169],{"class":38,"line":211},[36,106170,106171],{"class":110},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[36,106173,106174],{"class":38,"line":216},[36,106175,106176],{"class":110},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[36,106178,106179],{"class":38,"line":231},[36,106180,102698],{"class":110},[36,106182,106183],{"class":38,"line":236},[36,106184,102703],{"class":110},[36,106186,106187],{"class":38,"line":247},[36,106188,102708],{"class":110},[36,106190,106191],{"class":38,"line":637},[36,106192,97029],{"class":110},[36,106194,106195],{"class":38,"line":646},[36,106196,58],{"emptyLinePlaceholder":57},[36,106198,106199],{"class":38,"line":655},[36,106200,58],{"emptyLinePlaceholder":57},[36,106202,106203,106205,106208,106211,106213,106216,106218],{"class":38,"line":660},[36,106204,33278],{"class":42},[36,106206,106207],{"class":46}," print_state",[36,106209,106210],{"class":50},"(prefix: ",[36,106212,2835],{"class":73},[36,106214,106215],{"class":50},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,106217,97017],{"class":73},[36,106219,5230],{"class":50},[36,106221,106222,106224],{"class":38,"line":665},[36,106223,32630],{"class":73},[36,106225,106226],{"class":50},"(prefix)\n",[36,106228,106229,106231,106233,106236],{"class":38,"line":674},[36,106230,32630],{"class":73},[36,106232,222],{"class":50},[36,106234,106235],{"class":110},"\"  timestep:\"",[36,106237,106238],{"class":50},", model.opt.timestep)\n",[36,106240,106241,106243,106245,106248],{"class":38,"line":679},[36,106242,32630],{"class":73},[36,106244,222],{"class":50},[36,106246,106247],{"class":110},"\"  time:\"",[36,106249,102809],{"class":50},[36,106251,106252,106254,106256,106259,106262,106264],{"class":38,"line":692},[36,106253,32630],{"class":73},[36,106255,222],{"class":50},[36,106257,106258],{"class":110},"\"  qpos:\"",[36,106260,106261],{"class":50},", np.round(data.qpos.copy(), ",[36,106263,1961],{"class":73},[36,106265,31828],{"class":50},[36,106267,106268,106270,106272,106275,106278,106280],{"class":38,"line":705},[36,106269,32630],{"class":73},[36,106271,222],{"class":50},[36,106273,106274],{"class":110},"\"  qvel:\"",[36,106276,106277],{"class":50},", np.round(data.qvel.copy(), ",[36,106279,1961],{"class":73},[36,106281,31828],{"class":50},[36,106283,106284],{"class":38,"line":710},[36,106285,58],{"emptyLinePlaceholder":57},[36,106287,106288],{"class":38,"line":722},[36,106289,58],{"emptyLinePlaceholder":57},[36,106291,106292,106294,106296,106298,106300],{"class":38,"line":750},[36,106293,33278],{"class":42},[36,106295,47],{"class":46},[36,106297,102729],{"class":50},[36,106299,97017],{"class":73},[36,106301,5230],{"class":50},[36,106303,106304,106306,106308,106310,106312],{"class":38,"line":755},[36,106305,102738],{"class":50},[36,106307,70],{"class":42},[36,106309,102743],{"class":50},[36,106311,102645],{"class":73},[36,106313,1680],{"class":50},[36,106315,106316,106318,106320],{"class":38,"line":777},[36,106317,102752],{"class":50},[36,106319,70],{"class":42},[36,106321,102757],{"class":50},[36,106323,106324],{"class":38,"line":802},[36,106325,58],{"emptyLinePlaceholder":57},[36,106327,106328,106331,106334],{"class":38,"line":807},[36,106329,106330],{"class":50},"    print_state(",[36,106332,106333],{"class":110},"\"initial\"",[36,106335,106336],{"class":50},", model, data)\n",[36,106338,106339],{"class":38,"line":818},[36,106340,58],{"emptyLinePlaceholder":57},[36,106342,106343,106345,106347,106349,106351,106353,106355],{"class":38,"line":843},[36,106344,4692],{"class":42},[36,106346,102832],{"class":50},[36,106348,27374],{"class":42},[36,106350,33774],{"class":73},[36,106352,222],{"class":50},[36,106354,2323],{"class":73},[36,106356,32117],{"class":50},[36,106358,106359],{"class":38,"line":848},[36,106360,102847],{"class":50},[36,106362,106363],{"class":38,"line":859},[36,106364,58],{"emptyLinePlaceholder":57},[36,106366,106367,106369,106372],{"class":38,"line":864},[36,106368,106330],{"class":50},[36,106370,106371],{"class":110},"\"after 50 steps\"",[36,106373,106336],{"class":50},[36,106375,106376],{"class":38,"line":873},[36,106377,58],{"emptyLinePlaceholder":57},[36,106379,106380],{"class":38,"line":9454},[36,106381,106382],{"class":50},"    mujoco.mj_resetData(model, data)\n",[36,106384,106385,106387,106390],{"class":38,"line":9481},[36,106386,106330],{"class":50},[36,106388,106389],{"class":110},"\"after reset\"",[36,106391,106336],{"class":50},[36,106393,106394],{"class":38,"line":9486},[36,106395,58],{"emptyLinePlaceholder":57},[36,106397,106398,106401,106403,106405,106407],{"class":38,"line":9492},[36,106399,106400],{"class":50},"    data.qpos[",[36,106402,1747],{"class":73},[36,106404,5932],{"class":50},[36,106406,70],{"class":42},[36,106408,106039],{"class":73},[36,106410,106411],{"class":38,"line":9504},[36,106412,106413],{"class":50},"    mujoco.mj_forward(model, data)\n",[36,106415,106416,106418,106421],{"class":38,"line":9516},[36,106417,106330],{"class":50},[36,106419,106420],{"class":110},"\"after manual qpos edit\"",[36,106422,106336],{"class":50},[36,106424,106425],{"class":38,"line":9528},[36,106426,58],{"emptyLinePlaceholder":57},[36,106428,106429],{"class":38,"line":11184},[36,106430,58],{"emptyLinePlaceholder":57},[36,106432,106433,106435,106437,106439,106441],{"class":38,"line":11209},[36,106434,3061],{"class":42},[36,106436,32551],{"class":73},[36,106438,102890],{"class":42},[36,106440,102893],{"class":110},[36,106442,5230],{"class":50},[36,106444,106445],{"class":38,"line":11232},[36,106446,102900],{"class":50},[19,106448,104901],{},[26,106450,106452],{"className":25152,"code":106451,"language":25154,"meta":31,"style":31},"touch ch3_python_state.py\n",[33,106453,106454],{"__ignoreMap":31},[36,106455,106456,106458],{"class":38,"line":39},[36,106457,102614],{"class":46},[36,106459,106460],{"class":110}," ch3_python_state.py\n",[19,106462,103632],{},[26,106464,106466],{"className":25152,"code":106465,"language":25154,"meta":31,"style":31},"python ch3_python_state.py\n",[33,106467,106468],{"__ignoreMap":31},[36,106469,106470,106472],{"class":38,"line":39},[36,106471,31711],{"class":46},[36,106473,106460],{"class":110},[1645,106475,102903],{"id":102903},[19,106477,106478],{},"打印状态的函数：",[26,106480,106482],{"className":31709,"code":106481,"language":31711,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[33,106483,106484],{"__ignoreMap":31},[36,106485,106486,106488,106490,106492,106494,106496,106498],{"class":38,"line":39},[36,106487,33278],{"class":42},[36,106489,106207],{"class":46},[36,106491,106210],{"class":50},[36,106493,2835],{"class":73},[36,106495,106215],{"class":50},[36,106497,97017],{"class":73},[36,106499,5230],{"class":50},[19,106501,106502,106503,106505],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[33,106504,34732],{}," 里发生了什么。",[19,106507,106508],{},"推进 50 步：",[26,106510,106512],{"className":31709,"code":106511,"language":31711,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[33,106513,106514,106530],{"__ignoreMap":31},[36,106515,106516,106518,106520,106522,106524,106526,106528],{"class":38,"line":39},[36,106517,4516],{"class":42},[36,106519,102832],{"class":50},[36,106521,27374],{"class":42},[36,106523,33774],{"class":73},[36,106525,222],{"class":50},[36,106527,2323],{"class":73},[36,106529,32117],{"class":50},[36,106531,106532],{"class":38,"line":54},[36,106533,103030],{"class":50},[19,106535,106536,106537,106540,106541,106543],{},"由于 ",[33,106538,106539],{},"timestep=0.01","，所以 50 步后时间约为 ",[33,106542,36660],{}," 秒。",[19,106545,106546],{},"重置：",[26,106548,106549],{"className":31709,"code":105857,"language":31711,"meta":31,"style":31},[33,106550,106551],{"__ignoreMap":31},[36,106552,106553],{"class":38,"line":39},[36,106554,105857],{"class":50},[19,106556,106557],{},"这会把时间、位置、速度恢复到初始状态。",[19,106559,106560],{},"手动改高度：",[26,106562,106564],{"className":31709,"code":106563,"language":31711,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[33,106565,106566,106578],{"__ignoreMap":31},[36,106567,106568,106570,106572,106574,106576],{"class":38,"line":39},[36,106569,106030],{"class":50},[36,106571,1747],{"class":73},[36,106573,5932],{"class":50},[36,106575,70],{"class":42},[36,106577,106039],{"class":73},[36,106579,106580],{"class":38,"line":54},[36,106581,105874],{"class":50},[19,106583,106584,106585,106588,106589,106592],{},"这个例子里 ",[33,106586,106587],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[33,106590,106591],{},"2.0"," 表示把小球放到更高的位置。",[1645,106594,103039],{"id":103039},[26,106596,106597],{"className":31709,"code":106481,"language":31711,"meta":31,"style":31},[33,106598,106599],{"__ignoreMap":31},[36,106600,106601,106603,106605,106607,106609,106611,106613],{"class":38,"line":39},[36,106602,33278],{"class":42},[36,106604,106207],{"class":46},[36,106606,106210],{"class":50},[36,106608,2835],{"class":73},[36,106610,106215],{"class":50},[36,106612,97017],{"class":73},[36,106614,5230],{"class":50},[19,106616,106617],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[256,106619,106620,106629,106634],{},[259,106621,106622,106625,106626,106628],{},[33,106623,106624],{},"prefix","：一段文字，比如 ",[33,106627,106333],{},"，用来说明现在打印的是哪个阶段。",[259,106630,106631,106633],{},[33,106632,103416],{},"：MuJoCo 模型。",[259,106635,106636,106638],{},[33,106637,34732],{},"：MuJoCo 当前状态。",[19,106640,106641,1880,106644,106647],{},[33,106642,106643],{},"prefix: str",[33,106645,106646],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,106649,106651],{"className":31709,"code":106650,"language":31711,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[33,106652,106653],{"__ignoreMap":31},[36,106654,106655,106657,106659,106661,106663,106665],{"class":38,"line":39},[36,106656,31746],{"class":73},[36,106658,222],{"class":50},[36,106660,106258],{"class":110},[36,106662,106261],{"class":50},[36,106664,1961],{"class":73},[36,106666,31828],{"class":50},[19,106668,106669,106672],{},[33,106670,106671],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,106674,106676],{"className":31709,"code":106675,"language":31711,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[33,106677,106678,106690],{"__ignoreMap":31},[36,106679,106680,106682,106684,106686,106688],{"class":38,"line":39},[36,106681,102965],{"class":50},[36,106683,70],{"class":42},[36,106685,102743],{"class":50},[36,106687,102645],{"class":73},[36,106689,1680],{"class":50},[36,106691,106692,106694,106696],{"class":38,"line":54},[36,106693,102989],{"class":50},[36,106695,70],{"class":42},[36,106697,102757],{"class":50},[19,106699,106700],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,106702,106704],{"className":31709,"code":106703,"language":31711,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[33,106705,106706],{"__ignoreMap":31},[36,106707,106708,106711,106713],{"class":38,"line":39},[36,106709,106710],{"class":50},"print_state(",[36,106712,106333],{"class":110},[36,106714,106336],{"class":50},[19,106716,106717,106718,106721],{},"调用刚才定义的 ",[33,106719,106720],{},"print_state"," 函数，打印初始状态。",[26,106723,106724],{"className":31709,"code":106511,"language":31711,"meta":31,"style":31},[33,106725,106726,106742],{"__ignoreMap":31},[36,106727,106728,106730,106732,106734,106736,106738,106740],{"class":38,"line":39},[36,106729,4516],{"class":42},[36,106731,102832],{"class":50},[36,106733,27374],{"class":42},[36,106735,33774],{"class":73},[36,106737,222],{"class":50},[36,106739,2323],{"class":73},[36,106741,32117],{"class":50},[36,106743,106744],{"class":38,"line":54},[36,106745,103030],{"class":50},[19,106747,106748],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,106750,106751],{"className":31709,"code":105857,"language":31711,"meta":31,"style":31},[33,106752,106753],{"__ignoreMap":31},[36,106754,106755],{"class":38,"line":39},[36,106756,105857],{"class":50},[19,106758,106759,106760,106762,106763,106765],{},"重置 ",[33,106761,34732],{},"。注意它不会重新创建 ",[33,106764,103416],{},"，因为模型结构没有变，只是状态回到初始值。",[26,106767,106768],{"className":31709,"code":106023,"language":31711,"meta":31,"style":31},[33,106769,106770],{"__ignoreMap":31},[36,106771,106772,106774,106776,106778,106780],{"class":38,"line":39},[36,106773,106030],{"class":50},[36,106775,1747],{"class":73},[36,106777,5932],{"class":50},[36,106779,70],{"class":42},[36,106781,106039],{"class":73},[19,106783,106784,106785,1880,106788,1880,106791,106793],{},"这行是“手动改状态”。在 freejoint 中，",[33,106786,106787],{},"qpos[0]",[33,106789,106790],{},"qpos[1]",[33,106792,106587],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,106795,106796],{"className":31709,"code":105874,"language":31711,"meta":31,"style":31},[33,106797,106798],{"__ignoreMap":31},[36,106799,106800],{"class":38,"line":39},[36,106801,105874],{"class":50},[19,106803,106804,106805,106807,106808,106810],{},"手动改完 ",[33,106806,105361],{}," 后，调用 ",[33,106809,105581],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106812,103647],{"id":103646},[19,106814,106815],{},"你会看到:",[256,106817,106818,106823,106828,106831],{},[259,106819,106820,106821],{},"初始时间为 ",[33,106822,1859],{},[259,106824,106825,106826],{},"50 步后时间约为 ",[33,106827,36660],{},[259,106829,106830],{},"reset 后状态恢复",[259,106832,106833,106834,106837,106838],{},"手动修改 ",[33,106835,106836],{},"data.qpos[2]"," 后，小球高度变为 ",[33,106839,106591],{},[19,106841,106842,106844],{},[33,106843,106587],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106846,106847],{},"输出里可以重点看三件事：",[256,106849,106850,106858,106863],{},[259,106851,106852,106854,106855,106857],{},[33,106853,3890],{}," 是否随着 ",[33,106856,102546],{}," 增加。",[259,106859,106860,106862],{},[33,106861,105361],{}," 的 z 坐标是否因为下落而变化。",[259,106864,106865,106867,106868,29716],{},[33,106866,105683],{}," 后时间是否回到 ",[33,106869,1859],{},[14,106871,103679],{"id":103678},[256,106873,106874,106880,106886,106892,106895,106904],{},[259,106875,106876,106877,29716],{},"修改 timestep 为 ",[33,106878,106879],{},"0.005",[259,106881,106882,106883,29716],{},"重新运行，检查 50 步后时间是否约为 ",[33,106884,106885],{},"0.25",[259,106887,106888,106889,29716],{},"修改重力为 ",[33,106890,106891],{},"0 0 -1.0",[259,106893,106894],{},"观察小球下降速度是否变慢。",[259,106896,103742,106897,103745,106900,106903],{},[33,106898,106899],{},"data.qpos[2] = 2.0",[33,106901,106902],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[259,106905,106906,106907,106910],{},"注释掉 ",[33,106908,106909],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106912,103784],{"id":103783},[1645,106914,106916,106917,106919],{"id":106915},"修改-dataqpos-后位置没有更新","修改 ",[33,106918,102401],{}," 后位置没有更新",[19,106921,103793],{},[26,106923,106924],{"className":31709,"code":105874,"language":31711,"meta":31,"style":31},[33,106925,106926],{"__ignoreMap":31},[36,106927,106928],{"class":38,"line":39},[36,106929,105874],{"class":50},[1645,106931,106932],{"id":106932},"数组维度看不懂",[19,106934,106935],{},"打印模型维度:",[26,106937,106939],{"className":31709,"code":106938,"language":31711,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[33,106940,106941],{"__ignoreMap":31},[36,106942,106943,106945],{"class":38,"line":39},[36,106944,31746],{"class":73},[36,106946,106947],{"class":50},"(model.nq, model.nv, model.nu)\n",[1806,106949,106950,106958],{},[1809,106951,106952],{},[1812,106953,106954,106956],{},[1815,106955,105905],{"align":25066},[1815,106957,102031],{"align":25066},[1852,106959,106960,106970,106980],{},[1812,106961,106962,106967],{},[1857,106963,106964],{"align":25066},[33,106965,106966],{},"nq",[1857,106968,106969],{"align":25066},"位置变量数量",[1812,106971,106972,106977],{},[1857,106973,106974],{"align":25066},[33,106975,106976],{},"nv",[1857,106978,106979],{"align":25066},"速度变量数量",[1812,106981,106982,106986],{},[1857,106983,106984],{"align":25066},[33,106985,103493],{},[1857,106987,106988],{"align":25066},"控制输入数量",[1645,106990,106992,106993,106995],{"id":106991},"误以为-qpos-一定等于关节数","误以为 ",[33,106994,105361],{}," 一定等于关节数",[19,106997,106998,106999,83861,107001,107003,107004,107006],{},"不是。例如 ",[33,107000,102951],{},[33,107002,105361],{}," 是 7 维，但 ",[33,107005,105691],{}," 是 6 维。",[1645,107008,107010,107011,107013],{"id":107009},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[33,107012,105361],{}," 的第几位",[19,107015,107016],{},"初学时可以先打印：",[26,107018,107020],{"className":31709,"code":107019,"language":31711,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[33,107021,107022,107032,107042,107054],{"__ignoreMap":31},[36,107023,107024,107026,107028,107030],{"class":38,"line":39},[36,107025,31746],{"class":73},[36,107027,222],{"class":50},[36,107029,102770],{"class":110},[36,107031,102773],{"class":50},[36,107033,107034,107036,107038,107040],{"class":38,"line":54},[36,107035,31746],{"class":73},[36,107037,222],{"class":50},[36,107039,102782],{"class":110},[36,107041,102785],{"class":50},[36,107043,107044,107046,107048,107051],{"class":38,"line":61},[36,107045,31746],{"class":73},[36,107047,222],{"class":50},[36,107049,107050],{"class":110},"\"qpos:\"",[36,107052,107053],{"class":50},", data.qpos)\n",[36,107055,107056,107058,107060,107063],{"class":38,"line":80},[36,107057,31746],{"class":73},[36,107059,222],{"class":50},[36,107061,107062],{"class":110},"\"qvel:\"",[36,107064,107065],{"class":50},", data.qvel)\n",[19,107067,107068],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[1645,107070,107071],{"id":107071},"仿真结果每次都一样",[19,107073,107074,107075,107077],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[33,107076,105361],{},"、目标点或控制输入。",[14,107079,103938],{"id":103937},[19,107081,107082,107083,25949],{},"Python 控制 MuJoCo 的核心就是读写 ",[33,107084,34732],{},[256,107086,107087,107095,107100,107105],{},[259,107088,107089,107090,102349,107092,107094],{},"用 ",[33,107091,102401],{},[33,107093,102404],{}," 读取状态。",[259,107096,107089,107097,107099],{},[33,107098,102407],{}," 写入控制。",[259,107101,107089,107102,107104],{},[33,107103,102546],{}," 推进时间。",[259,107106,107107,107108,107110],{},"手动改状态后用 ",[33,107109,105581],{}," 刷新派生量。",[19,107112,107113],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1592,107115,107116],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":107118},[107119,107120,107121,107128,107132,107133,107134,107144],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":107122},[107123,107125,107127],{"id":105886,"depth":61,"text":107124},"qpos、qvel、ctrl 是什么",{"id":105964,"depth":61,"text":107126},"mj_step 和 mj_forward 的区别",{"id":106053,"depth":61,"text":106054},{"id":102583,"depth":54,"text":102584,"children":107129},[107130,107131],{"id":102903,"depth":61,"text":102903},{"id":103039,"depth":61,"text":103039},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":107135},[107136,107138,107139,107141,107143],{"id":106915,"depth":61,"text":107137},"修改 data.qpos 后位置没有更新",{"id":106932,"depth":61,"text":106932},{"id":106991,"depth":61,"text":107140},"误以为 qpos 一定等于关节数",{"id":107009,"depth":61,"text":107142},"不知道某个元素在 qpos 的第几位",{"id":107071,"depth":61,"text":107071},{"id":103937,"depth":54,"text":103938},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105649,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107151,"title":107152,"body":107153,"description":31,"extension":1603,"meta":108843,"navigation":57,"path":108844,"seo":108845,"stem":108846,"__hash__":108847},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107154,"toc":108819},[107155,107158,107160,107163,107165,107190,107193,107212,107215,107217,107219,107243,107245,107259,107261,107302,107304,107328,107330,107333,107367,107369,107382,107385,107453,107462,107466,107469,107503,107509,107512,107516,107555,107558,107578,107582,107625,107627,107656,107659,107665,107668,107670,108064,108066,108078,108080,108091,108093,108096,108125,108133,108136,108171,108174,108176,108184,108187,108189,108200,108210,108230,108233,108269,108281,108329,108348,108390,108403,108431,108436,108457,108467,108485,108488,108522,108525,108545,108548,108567,108573,108575,108578,108584,108590,108600,108603,108609,108618,108620,108666,108668,108674,108680,108683,108686,108706,108709,108715,108721,108723,108746,108749,108752,108761,108764,108802,108804,108807,108813,108816],[10,107156,107152],{"id":107157},"_4关节actuator-与力控制",[14,107159,101978],{"id":101977},[19,107161,107162],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107164,105662],{},[256,107166,107167,107173,107178,107182,107187],{},[259,107168,107169,107172],{},[33,107170,107171],{},"hinge"," 关节",[259,107174,107175],{},[33,107176,107177],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[259,107179,107180],{},[33,107181,102407],{},[259,107183,107184],{},[33,107185,107186],{},"ctrlrange",[259,107188,107189],{},"读取关节角和角速度",[19,107191,107192],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,107194,107196],{"className":31709,"code":107195,"language":31711,"meta":31,"style":31},"data.ctrl[0] = ...\n",[33,107197,107198],{"__ignoreMap":31},[36,107199,107200,107203,107205,107207,107209],{"class":38,"line":39},[36,107201,107202],{"class":50},"data.ctrl[",[36,107204,1859],{"class":73},[36,107206,5932],{"class":50},[36,107208,70],{"class":42},[36,107210,107211],{"class":73}," ...\n",[19,107213,107214],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107216,102101],{"id":102100},[19,107218,102104],{},[26,107220,107221],{"className":25152,"code":105719,"language":25154,"meta":31,"style":31},[33,107222,107223],{"__ignoreMap":31},[36,107224,107225,107227,107229,107231,107233,107235,107237,107239,107241],{"class":38,"line":39},[36,107226,25907],{"class":46},[36,107228,27646],{"class":110},[36,107230,25164],{"class":110},[36,107232,27731],{"class":73},[36,107234,105734],{"class":110},[36,107236,102129],{"class":110},[36,107238,103832],{"class":110},[36,107240,102145],{"class":110},[36,107242,105743],{"class":110},[19,107244,104150],{},[26,107246,107247],{"className":25152,"code":102250,"language":25154,"meta":31,"style":31},[33,107248,107249],{"__ignoreMap":31},[36,107250,107251,107253,107255,107257],{"class":38,"line":39},[36,107252,25161],{"class":46},[36,107254,25164],{"class":110},[36,107256,102261],{"class":110},[36,107258,102264],{"class":110},[19,107260,104167],{},[26,107262,107264],{"className":25152,"code":107263,"language":25154,"meta":31,"style":31},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[33,107265,107266,107283,107292],{"__ignoreMap":31},[36,107267,107268,107270,107272,107274,107277,107279,107281],{"class":38,"line":39},[36,107269,31661],{"class":46},[36,107271,30507],{"class":110},[36,107273,26446],{"class":73},[36,107275,107276],{"class":110}," mujoco-control",[36,107278,102306],{"class":110},[36,107280,102309],{"class":73},[36,107282,102312],{"class":73},[36,107284,107285,107287,107289],{"class":38,"line":54},[36,107286,31661],{"class":46},[36,107288,102319],{"class":110},[36,107290,107291],{"class":110}," mujoco-control\n",[36,107293,107294,107296,107298,107300],{"class":38,"line":61},[36,107295,25161],{"class":46},[36,107297,25164],{"class":110},[36,107299,102261],{"class":110},[36,107301,102264],{"class":110},[19,107303,102335],{},[256,107305,107306,107312,107319,107325],{},[259,107307,107308,107311],{},[33,107309,107310],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[259,107313,107314,107316,107317,29716],{},[33,107315,102407],{}," 长度等于 ",[33,107318,103489],{},[259,107320,83553,107321,107324],{},[33,107322,107323],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[259,107326,107327],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107329,102376],{"id":102375},[19,107331,107332],{},"关节决定 body 如何运动:",[26,107334,107336],{"className":54398,"code":107335,"language":54400,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,107337,107338],{"__ignoreMap":31},[36,107339,107340,107342,107344,107346,107348,107351,107353,107355,107357,107360,107362,107365],{"class":38,"line":39},[36,107341,2577],{"class":50},[36,107343,104287],{"class":52631},[36,107345,16249],{"class":46},[36,107347,70],{"class":50},[36,107349,107350],{"class":110},"\"hinge\"",[36,107352,55155],{"class":46},[36,107354,70],{"class":50},[36,107356,107350],{"class":110},[36,107358,107359],{"class":46}," axis",[36,107361,70],{"class":50},[36,107363,107364],{"class":110},"\"0 1 0\"",[36,107366,102475],{"class":50},[19,107368,104383],{},[256,107370,107371,107376,107379],{},[259,107372,107373,107374],{},"名字是 ",[33,107375,107171],{},[259,107377,107378],{},"类型是旋转关节",[259,107380,107381],{},"绕 y 轴旋转",[19,107383,107384],{},"actuator 决定如何施加控制:",[26,107386,107388],{"className":54398,"code":107387,"language":54400,"meta":31,"style":31},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[33,107389,107390,107399,107445],{"__ignoreMap":31},[36,107391,107392,107394,107397],{"class":38,"line":39},[36,107393,2577],{"class":50},[36,107395,107396],{"class":52631},"actuator",[36,107398,52638],{"class":50},[36,107400,107401,107403,107406,107408,107410,107413,107416,107418,107420,107423,107425,107427,107430,107432,107435,107438,107440,107443],{"class":38,"line":54},[36,107402,53475],{"class":50},[36,107404,107405],{"class":52631},"motor",[36,107407,16249],{"class":46},[36,107409,70],{"class":50},[36,107411,107412],{"class":110},"\"hinge_motor\"",[36,107414,107415],{"class":46}," joint",[36,107417,70],{"class":50},[36,107419,107350],{"class":110},[36,107421,107422],{"class":46}," gear",[36,107424,70],{"class":50},[36,107426,5169],{"class":110},[36,107428,107429],{"class":46}," ctrlrange",[36,107431,70],{"class":50},[36,107433,107434],{"class":110},"\"-2 2\"",[36,107436,107437],{"class":46}," ctrllimited",[36,107439,70],{"class":50},[36,107441,107442],{"class":110},"\"true\"",[36,107444,102475],{"class":50},[36,107446,107447,107449,107451],{"class":38,"line":61},[36,107448,53116],{"class":50},[36,107450,107396],{"class":52631},[36,107452,52638],{"class":50},[19,107454,107455,107458,107459,29716],{},[33,107456,107457],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[33,107460,107461],{},"[-2, 2]",[1645,107463,107465],{"id":107464},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107467,107468],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1806,107470,107471,107481],{},[1809,107472,107473],{},[1812,107474,107475,107477,107479],{},[1815,107476,27084],{"align":25066},[1815,107478,104027],{"align":25066},[1815,107480,102065],{"align":25066},[1852,107482,107483,107493],{},[1812,107484,107485,107487,107490],{},[1857,107486,104287],{"align":25066},[1857,107488,107489],{"align":25066},"定义能怎么动",[1857,107491,107492],{"align":25066},"门轴允许门旋转",[1812,107494,107495,107497,107500],{},[1857,107496,107396],{"align":25066},[1857,107498,107499],{"align":25066},"定义怎么施力或控制",[1857,107501,107502],{"align":25066},"人推门、马达带动门",[19,107504,107505,107506,107508],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[33,107507,102407],{}," 主动控制它。",[19,107510,107511],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[1645,107513,107515],{"id":107514},"hinge-joint","hinge joint",[26,107517,107519],{"className":54398,"code":107518,"language":54400,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,107520,107521],{"__ignoreMap":31},[36,107522,107523,107525,107527,107529,107531,107533,107535,107537,107539,107541,107543,107545,107548,107550,107553],{"class":38,"line":39},[36,107524,2577],{"class":50},[36,107526,104287],{"class":52631},[36,107528,16249],{"class":46},[36,107530,70],{"class":50},[36,107532,107350],{"class":110},[36,107534,55155],{"class":46},[36,107536,70],{"class":50},[36,107538,107350],{"class":110},[36,107540,107359],{"class":46},[36,107542,70],{"class":50},[36,107544,107364],{"class":110},[36,107546,107547],{"class":46}," damping",[36,107549,70],{"class":50},[36,107551,107552],{"class":110},"\"0.1\"",[36,107554,102475],{"class":50},[19,107556,107557],{},"含义：",[256,107559,107560,107566,107572],{},[259,107561,107562,107565],{},[33,107563,107564],{},"type=\"hinge\"","：只能绕一个轴旋转。",[259,107567,107568,107571],{},[33,107569,107570],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[259,107573,107574,107577],{},[33,107575,107576],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[1645,107579,107581],{"id":107580},"motor-actuator","motor actuator",[26,107583,107585],{"className":54398,"code":107584,"language":54400,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,107586,107587],{"__ignoreMap":31},[36,107588,107589,107591,107593,107595,107597,107599,107601,107603,107605,107607,107609,107611,107613,107615,107617,107619,107621,107623],{"class":38,"line":39},[36,107590,2577],{"class":50},[36,107592,107405],{"class":52631},[36,107594,16249],{"class":46},[36,107596,70],{"class":50},[36,107598,107412],{"class":110},[36,107600,107415],{"class":46},[36,107602,70],{"class":50},[36,107604,107350],{"class":110},[36,107606,107422],{"class":46},[36,107608,70],{"class":50},[36,107610,5169],{"class":110},[36,107612,107429],{"class":46},[36,107614,70],{"class":50},[36,107616,107434],{"class":110},[36,107618,107437],{"class":46},[36,107620,70],{"class":50},[36,107622,107442],{"class":110},[36,107624,102475],{"class":50},[19,107626,107557],{},[256,107628,107629,107638,107644,107650],{},[259,107630,107631,107634,107635,107637],{},[33,107632,107633],{},"joint=\"hinge\"","：这个电机作用在名为 ",[33,107636,107171],{}," 的关节上。",[259,107639,107640,107643],{},[33,107641,107642],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[259,107645,107646,107649],{},[33,107647,107648],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[259,107651,107652,107655],{},[33,107653,107654],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107657,107658],{},"简单理解：",[26,107660,107663],{"className":107661,"code":107662,"language":6676,"meta":31},[6674],"实际施加效果 ≈ data.ctrl[0] * gear\n",[33,107664,107662],{"__ignoreMap":31},[19,107666,107667],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107669,102584],{"id":102583},[26,107671,107673],{"className":31709,"code":107672,"language":31711,"meta":31,"style":31},"import math\n\nimport mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"one_link_motor\">\n  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n\n      \u003Cbody name=\"link\" pos=\"0 0 0\">\n        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    print(\"nq:\", model.nq)\n    print(\"nv:\", model.nv)\n    print(\"nu:\", model.nu)\n\n    if model.nu != 1:\n        raise RuntimeError(\"expected exactly one actuator\")\n\n    for step in range(2000):\n        t = step * model.opt.timestep\n        data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n        mujoco.mj_step(model, data)\n\n    print(\"time:\", data.time)\n    print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n    print(\"joint qvel:\", np.round(data.qvel.copy(), 4))\n    print(\"last ctrl:\", data.ctrl.copy())\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,107674,107675,107682,107686,107692,107702,107706,107710,107718,107723,107728,107732,107736,107741,107746,107750,107755,107760,107765,107770,107774,107778,107782,107787,107792,107797,107801,107805,107809,107813,107825,107837,107845,107849,107859,107869,107879,107883,107896,107909,107913,107930,107944,107979,107983,107987,107998,108013,108028,108040,108044,108048,108060],{"__ignoreMap":31},[36,107676,107677,107679],{"class":38,"line":39},[36,107678,31723],{"class":42},[36,107680,107681],{"class":50}," math\n",[36,107683,107684],{"class":38,"line":54},[36,107685,58],{"emptyLinePlaceholder":57},[36,107687,107688,107690],{"class":38,"line":61},[36,107689,31723],{"class":42},[36,107691,102632],{"class":50},[36,107693,107694,107696,107698,107700],{"class":38,"line":80},[36,107695,31723],{"class":42},[36,107697,32711],{"class":50},[36,107699,32714],{"class":42},[36,107701,32717],{"class":50},[36,107703,107704],{"class":38,"line":96},[36,107705,58],{"emptyLinePlaceholder":57},[36,107707,107708],{"class":38,"line":101},[36,107709,58],{"emptyLinePlaceholder":57},[36,107711,107712,107714,107716],{"class":38,"line":128},[36,107713,102645],{"class":73},[36,107715,14893],{"class":42},[36,107717,102650],{"class":110},[36,107719,107720],{"class":38,"line":149},[36,107721,107722],{"class":110},"\u003Cmujoco model=\"one_link_motor\">\n",[36,107724,107725],{"class":38,"line":154},[36,107726,107727],{"class":110},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[36,107729,107730],{"class":38,"line":167},[36,107731,58],{"emptyLinePlaceholder":57},[36,107733,107734],{"class":38,"line":172},[36,107735,102669],{"class":110},[36,107737,107738],{"class":38,"line":192},[36,107739,107740],{"class":110},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[36,107742,107743],{"class":38,"line":211},[36,107744,107745],{"class":110},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[36,107747,107748],{"class":38,"line":216},[36,107749,58],{"emptyLinePlaceholder":57},[36,107751,107752],{"class":38,"line":231},[36,107753,107754],{"class":110},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[36,107756,107757],{"class":38,"line":236},[36,107758,107759],{"class":110},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,107761,107762],{"class":38,"line":247},[36,107763,107764],{"class":110},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[36,107766,107767],{"class":38,"line":637},[36,107768,107769],{"class":110},"      \u003C\u002Fbody>\n",[36,107771,107772],{"class":38,"line":646},[36,107773,102698],{"class":110},[36,107775,107776],{"class":38,"line":655},[36,107777,102703],{"class":110},[36,107779,107780],{"class":38,"line":660},[36,107781,58],{"emptyLinePlaceholder":57},[36,107783,107784],{"class":38,"line":665},[36,107785,107786],{"class":110},"  \u003Cactuator>\n",[36,107788,107789],{"class":38,"line":674},[36,107790,107791],{"class":110},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,107793,107794],{"class":38,"line":679},[36,107795,107796],{"class":110},"  \u003C\u002Factuator>\n",[36,107798,107799],{"class":38,"line":692},[36,107800,102708],{"class":110},[36,107802,107803],{"class":38,"line":705},[36,107804,97029],{"class":110},[36,107806,107807],{"class":38,"line":710},[36,107808,58],{"emptyLinePlaceholder":57},[36,107810,107811],{"class":38,"line":722},[36,107812,58],{"emptyLinePlaceholder":57},[36,107814,107815,107817,107819,107821,107823],{"class":38,"line":750},[36,107816,33278],{"class":42},[36,107818,47],{"class":46},[36,107820,102729],{"class":50},[36,107822,97017],{"class":73},[36,107824,5230],{"class":50},[36,107826,107827,107829,107831,107833,107835],{"class":38,"line":755},[36,107828,102738],{"class":50},[36,107830,70],{"class":42},[36,107832,102743],{"class":50},[36,107834,102645],{"class":73},[36,107836,1680],{"class":50},[36,107838,107839,107841,107843],{"class":38,"line":777},[36,107840,102752],{"class":50},[36,107842,70],{"class":42},[36,107844,102757],{"class":50},[36,107846,107847],{"class":38,"line":802},[36,107848,58],{"emptyLinePlaceholder":57},[36,107850,107851,107853,107855,107857],{"class":38,"line":807},[36,107852,32630],{"class":73},[36,107854,222],{"class":50},[36,107856,102770],{"class":110},[36,107858,102773],{"class":50},[36,107860,107861,107863,107865,107867],{"class":38,"line":818},[36,107862,32630],{"class":73},[36,107864,222],{"class":50},[36,107866,102782],{"class":110},[36,107868,102785],{"class":50},[36,107870,107871,107873,107875,107877],{"class":38,"line":843},[36,107872,32630],{"class":73},[36,107874,222],{"class":50},[36,107876,102794],{"class":110},[36,107878,102797],{"class":50},[36,107880,107881],{"class":38,"line":848},[36,107882,58],{"emptyLinePlaceholder":57},[36,107884,107885,107887,107890,107892,107894],{"class":38,"line":859},[36,107886,4592],{"class":42},[36,107888,107889],{"class":50}," model.nu ",[36,107891,22277],{"class":42},[36,107893,26449],{"class":73},[36,107895,5230],{"class":50},[36,107897,107898,107900,107902,107904,107907],{"class":38,"line":864},[36,107899,104763],{"class":42},[36,107901,104766],{"class":73},[36,107903,222],{"class":50},[36,107905,107906],{"class":110},"\"expected exactly one actuator\"",[36,107908,1680],{"class":50},[36,107910,107911],{"class":38,"line":873},[36,107912,58],{"emptyLinePlaceholder":57},[36,107914,107915,107917,107919,107921,107923,107925,107928],{"class":38,"line":9454},[36,107916,4692],{"class":42},[36,107918,32947],{"class":50},[36,107920,27374],{"class":42},[36,107922,33774],{"class":73},[36,107924,222],{"class":50},[36,107926,107927],{"class":73},"2000",[36,107929,32117],{"class":50},[36,107931,107932,107935,107937,107939,107941],{"class":38,"line":9481},[36,107933,107934],{"class":50},"        t ",[36,107936,70],{"class":42},[36,107938,32947],{"class":50},[36,107940,2122],{"class":42},[36,107942,107943],{"class":50}," model.opt.timestep\n",[36,107945,107946,107949,107951,107953,107955,107958,107960,107963,107965,107967,107970,107972,107974,107976],{"class":38,"line":9486},[36,107947,107948],{"class":50},"        data.ctrl[",[36,107950,1859],{"class":73},[36,107952,5932],{"class":50},[36,107954,70],{"class":42},[36,107956,107957],{"class":73}," 1.5",[36,107959,561],{"class":42},[36,107961,107962],{"class":50}," math.sin(",[36,107964,106591],{"class":73},[36,107966,561],{"class":42},[36,107968,107969],{"class":50}," math.pi ",[36,107971,2122],{"class":42},[36,107973,63198],{"class":73},[36,107975,561],{"class":42},[36,107977,107978],{"class":50}," t)\n",[36,107980,107981],{"class":38,"line":9492},[36,107982,102847],{"class":50},[36,107984,107985],{"class":38,"line":9504},[36,107986,58],{"emptyLinePlaceholder":57},[36,107988,107989,107991,107993,107996],{"class":38,"line":9516},[36,107990,32630],{"class":73},[36,107992,222],{"class":50},[36,107994,107995],{"class":110},"\"time:\"",[36,107997,102809],{"class":50},[36,107999,108000,108002,108004,108007,108009,108011],{"class":38,"line":9528},[36,108001,32630],{"class":73},[36,108003,222],{"class":50},[36,108005,108006],{"class":110},"\"joint qpos:\"",[36,108008,106261],{"class":50},[36,108010,1961],{"class":73},[36,108012,31828],{"class":50},[36,108014,108015,108017,108019,108022,108024,108026],{"class":38,"line":11184},[36,108016,32630],{"class":73},[36,108018,222],{"class":50},[36,108020,108021],{"class":110},"\"joint qvel:\"",[36,108023,106277],{"class":50},[36,108025,1961],{"class":73},[36,108027,31828],{"class":50},[36,108029,108030,108032,108034,108037],{"class":38,"line":11209},[36,108031,32630],{"class":73},[36,108033,222],{"class":50},[36,108035,108036],{"class":110},"\"last ctrl:\"",[36,108038,108039],{"class":50},", data.ctrl.copy())\n",[36,108041,108042],{"class":38,"line":11232},[36,108043,58],{"emptyLinePlaceholder":57},[36,108045,108046],{"class":38,"line":11256},[36,108047,58],{"emptyLinePlaceholder":57},[36,108049,108050,108052,108054,108056,108058],{"class":38,"line":11261},[36,108051,3061],{"class":42},[36,108053,32551],{"class":73},[36,108055,102890],{"class":42},[36,108057,102893],{"class":110},[36,108059,5230],{"class":50},[36,108061,108062],{"class":38,"line":11266},[36,108063,102900],{"class":50},[19,108065,104901],{},[26,108067,108069],{"className":25152,"code":108068,"language":25154,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[33,108070,108071],{"__ignoreMap":31},[36,108072,108073,108075],{"class":38,"line":39},[36,108074,102614],{"class":46},[36,108076,108077],{"class":110}," ch4_joint_motor.py\n",[19,108079,103632],{},[26,108081,108083],{"className":25152,"code":108082,"language":25154,"meta":31,"style":31},"python ch4_joint_motor.py\n",[33,108084,108085],{"__ignoreMap":31},[36,108086,108087,108089],{"class":38,"line":39},[36,108088,31711],{"class":46},[36,108090,108077],{"class":110},[1645,108092,102903],{"id":102903},[19,108094,108095],{},"检查 actuator 数量：",[26,108097,108099],{"className":31709,"code":108098,"language":31711,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[33,108100,108101,108113],{"__ignoreMap":31},[36,108102,108103,108105,108107,108109,108111],{"class":38,"line":39},[36,108104,3061],{"class":42},[36,108106,107889],{"class":50},[36,108108,22277],{"class":42},[36,108110,26449],{"class":73},[36,108112,5230],{"class":50},[36,108114,108115,108117,108119,108121,108123],{"class":38,"line":54},[36,108116,105226],{"class":42},[36,108118,104766],{"class":73},[36,108120,222],{"class":50},[36,108122,107906],{"class":110},[36,108124,1680],{"class":50},[19,108126,108127,108129,108130,108132],{},[33,108128,103489],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[33,108131,102407],{}," 长度应该是 1。",[19,108134,108135],{},"产生正弦控制信号：",[26,108137,108139],{"className":31709,"code":108138,"language":31711,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[33,108140,108141],{"__ignoreMap":31},[36,108142,108143,108145,108147,108149,108151,108153,108155,108157,108159,108161,108163,108165,108167,108169],{"class":38,"line":39},[36,108144,107202],{"class":50},[36,108146,1859],{"class":73},[36,108148,5932],{"class":50},[36,108150,70],{"class":42},[36,108152,107957],{"class":73},[36,108154,561],{"class":42},[36,108156,107962],{"class":50},[36,108158,106591],{"class":73},[36,108160,561],{"class":42},[36,108162,107969],{"class":50},[36,108164,2122],{"class":42},[36,108166,63198],{"class":73},[36,108168,561],{"class":42},[36,108170,107978],{"class":50},[19,108172,108173],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108175,103004],{},[26,108177,108178],{"className":31709,"code":105836,"language":31711,"meta":31,"style":31},[33,108179,108180],{"__ignoreMap":31},[36,108181,108182],{"class":38,"line":39},[36,108183,105836],{"class":50},[19,108185,108186],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[1645,108188,103039],{"id":103039},[26,108190,108192],{"className":31709,"code":108191,"language":31711,"meta":31,"style":31},"import math\n",[33,108193,108194],{"__ignoreMap":31},[36,108195,108196,108198],{"class":38,"line":39},[36,108197,31723],{"class":42},[36,108199,107681],{"class":50},[19,108201,108202,108203,102349,108206,108209],{},"导入 Python 标准库里的数学模块。后面要用 ",[33,108204,108205],{},"math.sin",[33,108207,108208],{},"math.pi"," 生成周期变化的控制信号。",[26,108211,108212],{"className":31709,"code":105017,"language":31711,"meta":31,"style":31},[33,108213,108214,108220],{"__ignoreMap":31},[36,108215,108216,108218],{"class":38,"line":39},[36,108217,31723],{"class":42},[36,108219,102632],{"class":50},[36,108221,108222,108224,108226,108228],{"class":38,"line":54},[36,108223,31723],{"class":42},[36,108225,32711],{"class":50},[36,108227,32714],{"class":42},[36,108229,32717],{"class":50},[19,108231,108232],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,108234,108235],{"className":54398,"code":107518,"language":54400,"meta":31,"style":31},[33,108236,108237],{"__ignoreMap":31},[36,108238,108239,108241,108243,108245,108247,108249,108251,108253,108255,108257,108259,108261,108263,108265,108267],{"class":38,"line":39},[36,108240,2577],{"class":50},[36,108242,104287],{"class":52631},[36,108244,16249],{"class":46},[36,108246,70],{"class":50},[36,108248,107350],{"class":110},[36,108250,55155],{"class":46},[36,108252,70],{"class":50},[36,108254,107350],{"class":110},[36,108256,107359],{"class":46},[36,108258,70],{"class":50},[36,108260,107364],{"class":110},[36,108262,107547],{"class":46},[36,108264,70],{"class":50},[36,108266,107552],{"class":110},[36,108268,102475],{"class":50},[19,108270,108271,108272,108274,108275,108277,108278,108280],{},"这行定义关节。",[33,108273,107171],{}," 表示旋转关节。",[33,108276,107570],{}," 表示绕 y 轴旋转。",[33,108279,107576],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,108282,108284],{"className":54398,"code":108283,"language":54400,"meta":31,"style":31},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[33,108285,108286],{"__ignoreMap":31},[36,108287,108288,108290,108292,108294,108296,108299,108301,108303,108306,108309,108311,108314,108316,108318,108320,108322,108324,108327],{"class":38,"line":39},[36,108289,2577],{"class":50},[36,108291,102451],{"class":52631},[36,108293,16249],{"class":46},[36,108295,70],{"class":50},[36,108297,108298],{"class":110},"\"link_geom\"",[36,108300,55155],{"class":46},[36,108302,70],{"class":50},[36,108304,108305],{"class":110},"\"capsule\"",[36,108307,108308],{"class":46}," fromto",[36,108310,70],{"class":50},[36,108312,108313],{"class":110},"\"0 0 0 0 0 0.5\"",[36,108315,102467],{"class":46},[36,108317,70],{"class":50},[36,108319,105109],{"class":110},[36,108321,103332],{"class":46},[36,108323,70],{"class":50},[36,108325,108326],{"class":110},"\"0.5\"",[36,108328,102475],{"class":50},[19,108330,108331,108332,108334,108335,108337,108338,108341,108342,29716,108345,108347],{},"这行定义摆杆的形状。",[33,108333,104496],{}," 是胶囊体，适合表示杆子。",[33,108336,104507],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[33,108339,108340],{},"(0,0,0)"," 延伸到 ",[33,108343,108344],{},"(0,0,0.5)",[33,108346,104501],{}," 是半径。",[26,108349,108350],{"className":54398,"code":107584,"language":54400,"meta":31,"style":31},[33,108351,108352],{"__ignoreMap":31},[36,108353,108354,108356,108358,108360,108362,108364,108366,108368,108370,108372,108374,108376,108378,108380,108382,108384,108386,108388],{"class":38,"line":39},[36,108355,2577],{"class":50},[36,108357,107405],{"class":52631},[36,108359,16249],{"class":46},[36,108361,70],{"class":50},[36,108363,107412],{"class":110},[36,108365,107415],{"class":46},[36,108367,70],{"class":50},[36,108369,107350],{"class":110},[36,108371,107422],{"class":46},[36,108373,70],{"class":50},[36,108375,5169],{"class":110},[36,108377,107429],{"class":46},[36,108379,70],{"class":50},[36,108381,107434],{"class":110},[36,108383,107437],{"class":46},[36,108385,70],{"class":50},[36,108387,107442],{"class":110},[36,108389,102475],{"class":50},[19,108391,108392,108393,108395,108396,108399,108400,108402],{},"这行定义电机。它作用在 ",[33,108394,107171],{}," 关节上。",[33,108397,108398],{},"gear"," 可以理解成放大倍数。",[33,108401,107186],{}," 限制控制输入范围。",[26,108404,108405],{"className":31709,"code":108098,"language":31711,"meta":31,"style":31},[33,108406,108407,108419],{"__ignoreMap":31},[36,108408,108409,108411,108413,108415,108417],{"class":38,"line":39},[36,108410,3061],{"class":42},[36,108412,107889],{"class":50},[36,108414,22277],{"class":42},[36,108416,26449],{"class":73},[36,108418,5230],{"class":50},[36,108420,108421,108423,108425,108427,108429],{"class":38,"line":54},[36,108422,105226],{"class":42},[36,108424,104766],{"class":73},[36,108426,222],{"class":50},[36,108428,107906],{"class":110},[36,108430,1680],{"class":50},[19,108432,108433,108435],{},[33,108434,103489],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,108437,108439],{"className":31709,"code":108438,"language":31711,"meta":31,"style":31},"for step in range(2000):\n",[33,108440,108441],{"__ignoreMap":31},[36,108442,108443,108445,108447,108449,108451,108453,108455],{"class":38,"line":39},[36,108444,4516],{"class":42},[36,108446,32947],{"class":50},[36,108448,27374],{"class":42},[36,108450,33774],{"class":73},[36,108452,222],{"class":50},[36,108454,107927],{"class":73},[36,108456,32117],{"class":50},[19,108458,108459,108460,108462,108463,108466],{},"循环 2000 步。这里没有用 ",[33,108461,2659],{},"，而是用 ",[33,108464,108465],{},"step","，因为后面要用当前步数计算时间。",[26,108468,108470],{"className":31709,"code":108469,"language":31711,"meta":31,"style":31},"t = step * model.opt.timestep\n",[33,108471,108472],{"__ignoreMap":31},[36,108473,108474,108477,108479,108481,108483],{"class":38,"line":39},[36,108475,108476],{"class":50},"t ",[36,108478,70],{"class":42},[36,108480,32947],{"class":50},[36,108482,2122],{"class":42},[36,108484,107943],{"class":50},[19,108486,108487],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,108489,108490],{"className":31709,"code":108138,"language":31711,"meta":31,"style":31},[33,108491,108492],{"__ignoreMap":31},[36,108493,108494,108496,108498,108500,108502,108504,108506,108508,108510,108512,108514,108516,108518,108520],{"class":38,"line":39},[36,108495,107202],{"class":50},[36,108497,1859],{"class":73},[36,108499,5932],{"class":50},[36,108501,70],{"class":42},[36,108503,107957],{"class":73},[36,108505,561],{"class":42},[36,108507,107962],{"class":50},[36,108509,106591],{"class":73},[36,108511,561],{"class":42},[36,108513,107969],{"class":50},[36,108515,2122],{"class":42},[36,108517,63198],{"class":73},[36,108519,561],{"class":42},[36,108521,107978],{"class":50},[19,108523,108524],{},"这行给电机输入一个正弦波。拆开看：",[256,108526,108527,108533,108539],{},[259,108528,108529,108532],{},[33,108530,108531],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[259,108534,108535,108538],{},[33,108536,108537],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[259,108540,108541,108544],{},[33,108542,108543],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108546,108547],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,108549,108551],{"className":31709,"code":108550,"language":31711,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[33,108552,108553],{"__ignoreMap":31},[36,108554,108555,108557,108559,108561,108563,108565],{"class":38,"line":39},[36,108556,31746],{"class":73},[36,108558,222],{"class":50},[36,108560,108006],{"class":110},[36,108562,106261],{"class":50},[36,108564,1961],{"class":73},[36,108566,31828],{"class":50},[19,108568,108569,108570,108572],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[33,108571,102401],{}," 只有一个数。",[14,108574,103647],{"id":103646},[19,108576,108577],{},"输出类似:",[26,108579,108582],{"className":108580,"code":108581,"language":6676,"meta":31},[6674],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[33,108583,108581],{"__ignoreMap":31},[19,108585,108586,108587,108589],{},"这里 ",[33,108588,107457],{}," 是电机输入。",[19,108591,108592,108595,108596,108599],{},[33,108593,108594],{},"joint qpos"," 是关节角度，单位通常是弧度。",[33,108597,108598],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108601,108602],{},"角度单位提示：",[26,108604,108607],{"className":108605,"code":108606,"language":6676,"meta":31},[6674],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[33,108608,108606],{"__ignoreMap":31},[19,108610,108611,108612,108614,108615,108617],{},"如果你看到 ",[33,108613,105361],{}," 是 ",[33,108616,36660],{},"，大约就是 28.6 度。",[14,108619,103679],{"id":103678},[256,108621,108622,108629,108632,108639,108642,108650,108658],{},[259,108623,103742,108624,103745,108626,29716],{},[33,108625,107642],{},[33,108627,108628],{},"gear=\"5\"",[259,108630,108631],{},"重新运行，观察关节运动是否更剧烈。",[259,108633,103742,108634,103745,108636,29716],{},[33,108635,107186],{},[33,108637,108638],{},"-0.2 0.2",[259,108640,108641],{},"重新运行，观察控制能力是否变弱。",[259,108643,108644,108645,108647,108648,29716],{},"去掉 actuator，确认 ",[33,108646,103489],{}," 变成 ",[33,108649,1859],{},[259,108651,103742,108652,103745,108654,108657],{},[33,108653,107576],{},[33,108655,108656],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[259,108659,103742,108660,103745,108662,108665],{},[33,108661,107570],{},[33,108663,108664],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108667,103784],{"id":103783},[1645,108669,108671],{"id":108670},"indexerror-index-0-is-out-of-bounds",[33,108672,108673],{},"IndexError: index 0 is out of bounds",[19,108675,108676,108677,108679],{},"原因是 ",[33,108678,107323],{},"，没有 actuator。",[1645,108681,108682],{"id":108682},"关节几乎不动",[19,108684,108685],{},"可能原因:",[256,108687,108688,108693,108697,108703],{},[259,108689,108690,108692],{},[33,108691,108398],{}," 太小",[259,108694,108695,108692],{},[33,108696,107186],{},[259,108698,108699,108702],{},[33,108700,108701],{},"damping"," 太大",[259,108704,108705],{},"重力方向导致运动不明显",[1645,108707,108708],{"id":108708},"模型编译失败",[19,108710,108711,108712,108714],{},"检查 actuator 引用的 ",[33,108713,107633],{}," 是否存在，joint 名称是否拼写一致。",[1645,108716,108718,108720],{"id":108717},"datactrl0-写了但没有效果",[33,108719,107457],{}," 写了但没有效果",[19,108722,103906],{},[256,108724,108725,108730,108733,108738,108743],{},[259,108726,108727,108729],{},[33,108728,103489],{}," 是否大于 0。",[259,108731,108732],{},"motor 是否引用了正确 joint。",[259,108734,108735,108737],{},[33,108736,108398],{}," 是否太小。",[259,108739,108740,108742],{},[33,108741,107186],{}," 是否把输入限制得太小。",[259,108744,108745],{},"body 是否真的有可动 joint。",[1645,108747,108748],{"id":108748},"控制输入超过范围会怎样",[19,108750,108751],{},"如果设置了：",[26,108753,108755],{"className":54398,"code":108754,"language":54400,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[33,108756,108757],{"__ignoreMap":31},[36,108758,108759],{"class":38,"line":39},[36,108760,108754],{"class":50},[19,108762,108763],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,108765,108767],{"className":31709,"code":108766,"language":31711,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[33,108768,108769,108789],{"__ignoreMap":31},[36,108770,108771,108774,108776,108779,108781,108783,108785,108787],{"class":38,"line":39},[36,108772,108773],{"class":50},"action ",[36,108775,70],{"class":42},[36,108777,108778],{"class":50}," np.clip(action, ",[36,108780,2199],{"class":42},[36,108782,106591],{"class":73},[36,108784,477],{"class":50},[36,108786,106591],{"class":73},[36,108788,1680],{"class":50},[36,108790,108791,108793,108795,108797,108799],{"class":38,"line":54},[36,108792,107202],{"class":50},[36,108794,1859],{"class":73},[36,108796,5932],{"class":50},[36,108798,70],{"class":42},[36,108800,108801],{"class":50}," action\n",[14,108803,103938],{"id":103937},[19,108805,108806],{},"这一章建立了控制任务的基本形式：",[26,108808,108811],{"className":108809,"code":108810,"language":6676,"meta":31},[6674],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[33,108812,108810],{"__ignoreMap":31},[19,108814,108815],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1592,108817,108818],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":108820},[108821,108822,108823,108828,108832,108833,108834,108842],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":108824},[108825,108826,108827],{"id":107464,"depth":61,"text":107465},{"id":107514,"depth":61,"text":107515},{"id":107580,"depth":61,"text":107581},{"id":102583,"depth":54,"text":102584,"children":108829},[108830,108831],{"id":102903,"depth":61,"text":102903},{"id":103039,"depth":61,"text":103039},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":108835},[108836,108837,108838,108839,108841],{"id":108670,"depth":61,"text":108673},{"id":108682,"depth":61,"text":108682},{"id":108708,"depth":61,"text":108708},{"id":108717,"depth":61,"text":108840},"data.ctrl[0] 写了但没有效果",{"id":108748,"depth":61,"text":108748},{"id":103937,"depth":54,"text":103938},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107152,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108849,"title":108850,"body":108851,"description":31,"extension":1603,"meta":110760,"navigation":57,"path":110761,"seo":110762,"stem":110763,"__hash__":110764},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108852,"toc":110736},[108853,108856,108858,108861,108869,108872,108889,108892,108917,108920,108966,108968,108970,109025,109027,109046,109048,109091,109094,109111,109114,109130,109140,109147,109149,109152,109155,109189,109192,109240,109244,109247,109261,109270,109274,109277,109302,109305,109309,109322,109325,109331,109334,109349,109351,109354,109614,109616,109628,109631,109943,109945,109957,109959,109962,109977,109982,109985,110007,110010,110013,110047,110050,110054,110065,110068,110085,110088,110102,110109,110129,110136,110150,110153,110165,110180,110200,110203,110225,110228,110232,110247,110258,110273,110276,110306,110322,110351,110359,110383,110386,110404,110414,110426,110433,110442,110448,110457,110460,110462,110471,110474,110489,110491,110494,110505,110508,110519,110522,110540,110542,110559,110562,110590,110592,110596,110599,110629,110635,110638,110642,110650,110653,110655,110676,110679,110682,110698,110701,110717,110719,110722,110733],[10,108854,108850],{"id":108855},"_5viewer-可视化与-renderer-离屏渲染",[14,108857,101978],{"id":101977},[19,108859,108860],{},"本章掌握两类可视化方式:",[256,108862,108863,108866],{},[259,108864,108865],{},"交互式 viewer: 适合人工观察仿真",[259,108867,108868],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108870,108871],{},"使用官方接口:",[26,108873,108875],{"className":31709,"code":108874,"language":31711,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[33,108876,108877,108884],{"__ignoreMap":31},[36,108878,108879,108881],{"class":38,"line":39},[36,108880,31723],{"class":42},[36,108882,108883],{"class":50}," mujoco.viewer\n",[36,108885,108886],{"class":38,"line":54},[36,108887,108888],{"class":50},"mujoco.viewer.launch_passive(model, data)\n",[19,108890,108891],{},"以及:",[26,108893,108895],{"className":31709,"code":108894,"language":31711,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[33,108896,108897,108907],{"__ignoreMap":31},[36,108898,108899,108902,108904],{"class":38,"line":39},[36,108900,108901],{"class":50},"renderer ",[36,108903,70],{"class":42},[36,108905,108906],{"class":50}," mujoco.Renderer(model)\n",[36,108908,108909,108912,108914],{"class":38,"line":54},[36,108910,108911],{"class":50},"image ",[36,108913,70],{"class":42},[36,108915,108916],{"class":50}," renderer.render()\n",[19,108918,108919],{},"新手建议先理解二者区别：",[1806,108921,108922,108938],{},[1809,108923,108924],{},[1812,108925,108926,108929,108932,108935],{},[1815,108927,108928],{"align":25066},"工具",[1815,108930,108931],{"align":25066},"用途",[1815,108933,108934],{"align":25066},"是否打开窗口",[1815,108936,108937],{"align":25066},"常见场景",[1852,108939,108940,108953],{},[1812,108941,108942,108945,108948,108950],{},[1857,108943,108944],{"align":25066},"Viewer",[1857,108946,108947],{"align":25066},"人眼实时观察仿真",[1857,108949,105996],{"align":25066},[1857,108951,108952],{"align":25066},"调试模型、看控制效果",[1812,108954,108955,108958,108961,108963],{},[1857,108956,108957],{"align":25066},"Renderer",[1857,108959,108960],{"align":25066},"生成图像数组",[1857,108962,106009],{"align":25066},[1857,108964,108965],{"align":25066},"保存图片、训练视觉策略、服务器批量采集",[14,108967,102101],{"id":102100},[19,108969,102104],{},[26,108971,108973],{"className":25152,"code":108972,"language":25154,"meta":31,"style":31},"sudo dnf install -y \\\n  mesa-libGL mesa-libGLU mesa-dri-drivers \\\n  libglvnd-glx libglvnd-opengl \\\n  glfw glfw-devel \\\n  libX11 libXcursor libXi libXinerama libXrandr\n",[33,108974,108975,108987,108997,109005,109013],{"__ignoreMap":31},[36,108976,108977,108979,108981,108983,108985],{"class":38,"line":39},[36,108978,25907],{"class":46},[36,108980,27646],{"class":110},[36,108982,25164],{"class":110},[36,108984,27731],{"class":73},[36,108986,26009],{"class":73},[36,108988,108989,108991,108993,108995],{"class":38,"line":54},[36,108990,102139],{"class":110},[36,108992,102142],{"class":110},[36,108994,102145],{"class":110},[36,108996,26009],{"class":73},[36,108998,108999,109001,109003],{"class":38,"line":61},[36,109000,102152],{"class":110},[36,109002,102155],{"class":110},[36,109004,26009],{"class":73},[36,109006,109007,109009,109011],{"class":38,"line":80},[36,109008,102162],{"class":110},[36,109010,102165],{"class":110},[36,109012,26009],{"class":73},[36,109014,109015,109017,109019,109021,109023],{"class":38,"line":96},[36,109016,102172],{"class":110},[36,109018,102175],{"class":110},[36,109020,102178],{"class":110},[36,109022,102181],{"class":110},[36,109024,103847],{"class":110},[19,109026,104150],{},[26,109028,109030],{"className":25152,"code":109029,"language":25154,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[33,109031,109032],{"__ignoreMap":31},[36,109033,109034,109036,109038,109040,109043],{"class":38,"line":39},[36,109035,25161],{"class":46},[36,109037,25164],{"class":110},[36,109039,102261],{"class":110},[36,109041,109042],{"class":110}," numpy",[36,109044,109045],{"class":110}," pillow\n",[19,109047,104167],{},[26,109049,109051],{"className":25152,"code":109050,"language":25154,"meta":31,"style":31},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[33,109052,109053,109070,109079],{"__ignoreMap":31},[36,109054,109055,109057,109059,109061,109064,109066,109068],{"class":38,"line":39},[36,109056,31661],{"class":46},[36,109058,30507],{"class":110},[36,109060,26446],{"class":73},[36,109062,109063],{"class":110}," mujoco-render",[36,109065,102306],{"class":110},[36,109067,102309],{"class":73},[36,109069,102312],{"class":73},[36,109071,109072,109074,109076],{"class":38,"line":54},[36,109073,31661],{"class":46},[36,109075,102319],{"class":110},[36,109077,109078],{"class":110}," mujoco-render\n",[36,109080,109081,109083,109085,109087,109089],{"class":38,"line":61},[36,109082,25161],{"class":46},[36,109084,25164],{"class":110},[36,109086,102261],{"class":110},[36,109088,109042],{"class":110},[36,109090,109045],{"class":110},[19,109092,109093],{},"离屏渲染后端:",[26,109095,109097],{"className":25152,"code":109096,"language":25154,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[33,109098,109099],{"__ignoreMap":31},[36,109100,109101,109103,109106,109108],{"class":38,"line":39},[36,109102,26373],{"class":42},[36,109104,109105],{"class":50}," MUJOCO_GL",[36,109107,70],{"class":42},[36,109109,109110],{"class":50},"egl\n",[19,109112,109113],{},"或:",[26,109115,109117],{"className":25152,"code":109116,"language":25154,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[33,109118,109119],{"__ignoreMap":31},[36,109120,109121,109123,109125,109127],{"class":38,"line":39},[36,109122,26373],{"class":42},[36,109124,109105],{"class":50},[36,109126,70],{"class":42},[36,109128,109129],{"class":50},"osmesa\n",[19,109131,109132,109133,109136,109137,29716],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[33,109134,109135],{},"egl"," 失败，再尝试 ",[33,109138,109139],{},"osmesa",[19,109141,109142,109143,109146],{},"如果你在本机桌面环境运行，通常先不要设置 ",[33,109144,109145],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109148,102376],{"id":102375},[19,109150,109151],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109153,109154],{},"典型 viewer 流程:",[26,109156,109158],{"className":31709,"code":109157,"language":31711,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[33,109159,109160,109173,109180,109184],{"__ignoreMap":31},[36,109161,109162,109165,109168,109170],{"class":38,"line":39},[36,109163,109164],{"class":42},"with",[36,109166,109167],{"class":50}," mujoco.viewer.launch_passive(model, data) ",[36,109169,32714],{"class":42},[36,109171,109172],{"class":50}," viewer:\n",[36,109174,109175,109177],{"class":38,"line":54},[36,109176,3757],{"class":42},[36,109178,109179],{"class":50}," viewer.is_running():\n",[36,109181,109182],{"class":38,"line":61},[36,109183,102847],{"class":50},[36,109185,109186],{"class":38,"line":80},[36,109187,109188],{"class":50},"        viewer.sync()\n",[19,109190,109191],{},"典型 renderer 流程:",[26,109193,109195],{"className":31709,"code":109194,"language":31711,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[33,109196,109197,109223,109227,109232],{"__ignoreMap":31},[36,109198,109199,109201,109203,109206,109208,109210,109212,109214,109216,109218,109221],{"class":38,"line":39},[36,109200,108901],{"class":50},[36,109202,70],{"class":42},[36,109204,109205],{"class":50}," mujoco.Renderer(model, ",[36,109207,26312],{"class":473},[36,109209,70],{"class":42},[36,109211,43673],{"class":73},[36,109213,477],{"class":50},[36,109215,26308],{"class":473},[36,109217,70],{"class":42},[36,109219,109220],{"class":73},"640",[36,109222,1680],{"class":50},[36,109224,109225],{"class":38,"line":54},[36,109226,105836],{"class":50},[36,109228,109229],{"class":38,"line":61},[36,109230,109231],{"class":50},"renderer.update_scene(data)\n",[36,109233,109234,109236,109238],{"class":38,"line":80},[36,109235,108911],{"class":50},[36,109237,70],{"class":42},[36,109239,108916],{"class":50},[1645,109241,109243],{"id":109242},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109245,109246],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,109248,109250],{"className":31709,"code":109249,"language":31711,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[33,109251,109252,109256],{"__ignoreMap":31},[36,109253,109254],{"class":38,"line":39},[36,109255,105836],{"class":50},[36,109257,109258],{"class":38,"line":54},[36,109259,109260],{"class":50},"viewer.sync()\n",[19,109262,109263,109265,109266,109269],{},[33,109264,102546],{}," 负责算物理，",[33,109267,109268],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[1645,109271,109273],{"id":109272},"为什么要-sleep","为什么要 sleep",[19,109275,109276],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,109278,109280],{"className":31709,"code":109279,"language":31711,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[33,109281,109282],{"__ignoreMap":31},[36,109283,109284,109287,109289,109292,109294,109297,109299],{"class":38,"line":39},[36,109285,109286],{"class":50},"sleep_time ",[36,109288,70],{"class":42},[36,109290,109291],{"class":50}," model.opt.timestep ",[36,109293,2199],{"class":42},[36,109295,109296],{"class":50}," (time.time() ",[36,109298,2199],{"class":42},[36,109300,109301],{"class":50}," step_start)\n",[19,109303,109304],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[1645,109306,109308],{"id":109307},"renderer-输出是什么","renderer 输出是什么",[26,109310,109312],{"className":31709,"code":109311,"language":31711,"meta":31,"style":31},"image = renderer.render()\n",[33,109313,109314],{"__ignoreMap":31},[36,109315,109316,109318,109320],{"class":38,"line":39},[36,109317,108911],{"class":50},[36,109319,70],{"class":42},[36,109321,108916],{"class":50},[19,109323,109324],{},"得到的是 NumPy 数组，形状通常是：",[26,109326,109329],{"className":109327,"code":109328,"language":6676,"meta":31},[6674],"(height, width, 3)\n",[33,109330,109328],{"__ignoreMap":31},[19,109332,109333],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,109335,109337],{"className":31709,"code":109336,"language":31711,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[33,109338,109339],{"__ignoreMap":31},[36,109340,109341,109344,109347],{"class":38,"line":39},[36,109342,109343],{"class":50},"Image.fromarray(image).save(",[36,109345,109346],{"class":110},"\"render_output.png\"",[36,109348,1680],{"class":50},[14,109350,102584],{"id":102583},[19,109352,109353],{},"交互式 Viewer:",[26,109355,109357],{"className":31709,"code":109356,"language":31711,"meta":31,"style":31},"import time\n\nimport mujoco\nimport mujoco.viewer\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"viewer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    with mujoco.viewer.launch_passive(model, data) as viewer:\n        while viewer.is_running() and data.time \u003C 5.0:\n            step_start = time.time()\n            mujoco.mj_step(model, data)\n            viewer.sync()\n\n            sleep_time = model.opt.timestep - (time.time() - step_start)\n            if sleep_time > 0:\n                time.sleep(sleep_time)\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,109358,109359,109365,109369,109375,109381,109385,109389,109397,109402,109406,109410,109414,109419,109424,109428,109432,109436,109441,109445,109449,109453,109457,109461,109465,109477,109489,109497,109501,109511,109531,109541,109546,109551,109555,109572,109585,109590,109594,109598,109610],{"__ignoreMap":31},[36,109360,109361,109363],{"class":38,"line":39},[36,109362,31723],{"class":42},[36,109364,33160],{"class":50},[36,109366,109367],{"class":38,"line":54},[36,109368,58],{"emptyLinePlaceholder":57},[36,109370,109371,109373],{"class":38,"line":61},[36,109372,31723],{"class":42},[36,109374,102632],{"class":50},[36,109376,109377,109379],{"class":38,"line":80},[36,109378,31723],{"class":42},[36,109380,108883],{"class":50},[36,109382,109383],{"class":38,"line":96},[36,109384,58],{"emptyLinePlaceholder":57},[36,109386,109387],{"class":38,"line":101},[36,109388,58],{"emptyLinePlaceholder":57},[36,109390,109391,109393,109395],{"class":38,"line":128},[36,109392,102645],{"class":73},[36,109394,14893],{"class":42},[36,109396,102650],{"class":110},[36,109398,109399],{"class":38,"line":149},[36,109400,109401],{"class":110},"\u003Cmujoco model=\"viewer_demo\">\n",[36,109403,109404],{"class":38,"line":154},[36,109405,102660],{"class":110},[36,109407,109408],{"class":38,"line":167},[36,109409,58],{"emptyLinePlaceholder":57},[36,109411,109412],{"class":38,"line":172},[36,109413,102669],{"class":110},[36,109415,109416],{"class":38,"line":192},[36,109417,109418],{"class":110},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[36,109420,109421],{"class":38,"line":211},[36,109422,109423],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,109425,109426],{"class":38,"line":216},[36,109427,58],{"emptyLinePlaceholder":57},[36,109429,109430],{"class":38,"line":231},[36,109431,102683],{"class":110},[36,109433,109434],{"class":38,"line":236},[36,109435,102688],{"class":110},[36,109437,109438],{"class":38,"line":247},[36,109439,109440],{"class":110},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,109442,109443],{"class":38,"line":637},[36,109444,102698],{"class":110},[36,109446,109447],{"class":38,"line":646},[36,109448,102703],{"class":110},[36,109450,109451],{"class":38,"line":655},[36,109452,102708],{"class":110},[36,109454,109455],{"class":38,"line":660},[36,109456,97029],{"class":110},[36,109458,109459],{"class":38,"line":665},[36,109460,58],{"emptyLinePlaceholder":57},[36,109462,109463],{"class":38,"line":674},[36,109464,58],{"emptyLinePlaceholder":57},[36,109466,109467,109469,109471,109473,109475],{"class":38,"line":679},[36,109468,33278],{"class":42},[36,109470,47],{"class":46},[36,109472,102729],{"class":50},[36,109474,97017],{"class":73},[36,109476,5230],{"class":50},[36,109478,109479,109481,109483,109485,109487],{"class":38,"line":692},[36,109480,102738],{"class":50},[36,109482,70],{"class":42},[36,109484,102743],{"class":50},[36,109486,102645],{"class":73},[36,109488,1680],{"class":50},[36,109490,109491,109493,109495],{"class":38,"line":705},[36,109492,102752],{"class":50},[36,109494,70],{"class":42},[36,109496,102757],{"class":50},[36,109498,109499],{"class":38,"line":710},[36,109500,58],{"emptyLinePlaceholder":57},[36,109502,109503,109505,109507,109509],{"class":38,"line":722},[36,109504,35509],{"class":42},[36,109506,109167],{"class":50},[36,109508,32714],{"class":42},[36,109510,109172],{"class":50},[36,109512,109513,109516,109519,109521,109524,109526,109529],{"class":38,"line":750},[36,109514,109515],{"class":42},"        while",[36,109517,109518],{"class":50}," viewer.is_running() ",[36,109520,31793],{"class":42},[36,109522,109523],{"class":50}," data.time ",[36,109525,2577],{"class":42},[36,109527,109528],{"class":73}," 5.0",[36,109530,5230],{"class":50},[36,109532,109533,109536,109538],{"class":38,"line":755},[36,109534,109535],{"class":50},"            step_start ",[36,109537,70],{"class":42},[36,109539,109540],{"class":50}," time.time()\n",[36,109542,109543],{"class":38,"line":777},[36,109544,109545],{"class":50},"            mujoco.mj_step(model, data)\n",[36,109547,109548],{"class":38,"line":802},[36,109549,109550],{"class":50},"            viewer.sync()\n",[36,109552,109553],{"class":38,"line":807},[36,109554,58],{"emptyLinePlaceholder":57},[36,109556,109557,109560,109562,109564,109566,109568,109570],{"class":38,"line":818},[36,109558,109559],{"class":50},"            sleep_time ",[36,109561,70],{"class":42},[36,109563,109291],{"class":50},[36,109565,2199],{"class":42},[36,109567,109296],{"class":50},[36,109569,2199],{"class":42},[36,109571,109301],{"class":50},[36,109573,109574,109576,109579,109581,109583],{"class":38,"line":843},[36,109575,6131],{"class":42},[36,109577,109578],{"class":50}," sleep_time ",[36,109580,2627],{"class":42},[36,109582,242],{"class":73},[36,109584,5230],{"class":50},[36,109586,109587],{"class":38,"line":848},[36,109588,109589],{"class":50},"                time.sleep(sleep_time)\n",[36,109591,109592],{"class":38,"line":859},[36,109593,58],{"emptyLinePlaceholder":57},[36,109595,109596],{"class":38,"line":864},[36,109597,58],{"emptyLinePlaceholder":57},[36,109599,109600,109602,109604,109606,109608],{"class":38,"line":873},[36,109601,3061],{"class":42},[36,109603,32551],{"class":73},[36,109605,102890],{"class":42},[36,109607,102893],{"class":110},[36,109609,5230],{"class":50},[36,109611,109612],{"class":38,"line":9454},[36,109613,102900],{"class":50},[19,109615,104901],{},[26,109617,109619],{"className":25152,"code":109618,"language":25154,"meta":31,"style":31},"touch ch5_viewer.py\n",[33,109620,109621],{"__ignoreMap":31},[36,109622,109623,109625],{"class":38,"line":39},[36,109624,102614],{"class":46},[36,109626,109627],{"class":110}," ch5_viewer.py\n",[19,109629,109630],{},"离屏 Renderer 保存图片:",[26,109632,109634],{"className":31709,"code":109633,"language":31711,"meta":31,"style":31},"from pathlib import Path\n\nimport mujoco\nfrom PIL import Image\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"renderer_demo\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"box\" pos=\"0 0 1\">\n      \u003Cfreejoint name=\"box_free\"\u002F>\n      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    renderer = mujoco.Renderer(model, height=480, width=640)\n\n    for _ in range(100):\n        mujoco.mj_step(model, data)\n\n    renderer.update_scene(data, camera=\"fixed_camera\")\n    image = renderer.render()\n\n    output_path = Path(\"render_output.png\")\n    Image.fromarray(image).save(output_path)\n    renderer.close()\n\n    print(\"saved:\", output_path.resolve())\n    print(\"image shape:\", image.shape)\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,109635,109636,109648,109652,109658,109668,109672,109676,109684,109689,109693,109697,109701,109705,109710,109714,109718,109722,109726,109730,109734,109738,109742,109746,109750,109754,109766,109778,109786,109811,109815,109831,109835,109839,109854,109863,109867,109881,109886,109891,109895,109907,109919,109923,109927,109939],{"__ignoreMap":31},[36,109637,109638,109640,109643,109645],{"class":38,"line":39},[36,109639,32068],{"class":42},[36,109641,109642],{"class":50}," pathlib ",[36,109644,31723],{"class":42},[36,109646,109647],{"class":50}," Path\n",[36,109649,109650],{"class":38,"line":54},[36,109651,58],{"emptyLinePlaceholder":57},[36,109653,109654,109656],{"class":38,"line":61},[36,109655,31723],{"class":42},[36,109657,102632],{"class":50},[36,109659,109660,109662,109664,109666],{"class":38,"line":80},[36,109661,32068],{"class":42},[36,109663,48594],{"class":73},[36,109665,48597],{"class":42},[36,109667,48600],{"class":50},[36,109669,109670],{"class":38,"line":96},[36,109671,58],{"emptyLinePlaceholder":57},[36,109673,109674],{"class":38,"line":101},[36,109675,58],{"emptyLinePlaceholder":57},[36,109677,109678,109680,109682],{"class":38,"line":128},[36,109679,102645],{"class":73},[36,109681,14893],{"class":42},[36,109683,102650],{"class":110},[36,109685,109686],{"class":38,"line":149},[36,109687,109688],{"class":110},"\u003Cmujoco model=\"renderer_demo\">\n",[36,109690,109691],{"class":38,"line":154},[36,109692,102660],{"class":110},[36,109694,109695],{"class":38,"line":167},[36,109696,58],{"emptyLinePlaceholder":57},[36,109698,109699],{"class":38,"line":172},[36,109700,102669],{"class":110},[36,109702,109703],{"class":38,"line":192},[36,109704,109418],{"class":110},[36,109706,109707],{"class":38,"line":211},[36,109708,109709],{"class":110},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,109711,109712],{"class":38,"line":216},[36,109713,109423],{"class":110},[36,109715,109716],{"class":38,"line":231},[36,109717,58],{"emptyLinePlaceholder":57},[36,109719,109720],{"class":38,"line":236},[36,109721,102683],{"class":110},[36,109723,109724],{"class":38,"line":247},[36,109725,102688],{"class":110},[36,109727,109728],{"class":38,"line":637},[36,109729,109440],{"class":110},[36,109731,109732],{"class":38,"line":646},[36,109733,102698],{"class":110},[36,109735,109736],{"class":38,"line":655},[36,109737,102703],{"class":110},[36,109739,109740],{"class":38,"line":660},[36,109741,102708],{"class":110},[36,109743,109744],{"class":38,"line":665},[36,109745,97029],{"class":110},[36,109747,109748],{"class":38,"line":674},[36,109749,58],{"emptyLinePlaceholder":57},[36,109751,109752],{"class":38,"line":679},[36,109753,58],{"emptyLinePlaceholder":57},[36,109755,109756,109758,109760,109762,109764],{"class":38,"line":692},[36,109757,33278],{"class":42},[36,109759,47],{"class":46},[36,109761,102729],{"class":50},[36,109763,97017],{"class":73},[36,109765,5230],{"class":50},[36,109767,109768,109770,109772,109774,109776],{"class":38,"line":705},[36,109769,102738],{"class":50},[36,109771,70],{"class":42},[36,109773,102743],{"class":50},[36,109775,102645],{"class":73},[36,109777,1680],{"class":50},[36,109779,109780,109782,109784],{"class":38,"line":710},[36,109781,102752],{"class":50},[36,109783,70],{"class":42},[36,109785,102757],{"class":50},[36,109787,109788,109791,109793,109795,109797,109799,109801,109803,109805,109807,109809],{"class":38,"line":722},[36,109789,109790],{"class":50},"    renderer ",[36,109792,70],{"class":42},[36,109794,109205],{"class":50},[36,109796,26312],{"class":473},[36,109798,70],{"class":42},[36,109800,43673],{"class":73},[36,109802,477],{"class":50},[36,109804,26308],{"class":473},[36,109806,70],{"class":42},[36,109808,109220],{"class":73},[36,109810,1680],{"class":50},[36,109812,109813],{"class":38,"line":750},[36,109814,58],{"emptyLinePlaceholder":57},[36,109816,109817,109819,109821,109823,109825,109827,109829],{"class":38,"line":755},[36,109818,4692],{"class":42},[36,109820,102832],{"class":50},[36,109822,27374],{"class":42},[36,109824,33774],{"class":73},[36,109826,222],{"class":50},[36,109828,1979],{"class":73},[36,109830,32117],{"class":50},[36,109832,109833],{"class":38,"line":777},[36,109834,102847],{"class":50},[36,109836,109837],{"class":38,"line":802},[36,109838,58],{"emptyLinePlaceholder":57},[36,109840,109841,109844,109847,109849,109852],{"class":38,"line":807},[36,109842,109843],{"class":50},"    renderer.update_scene(data, ",[36,109845,109846],{"class":473},"camera",[36,109848,70],{"class":42},[36,109850,109851],{"class":110},"\"fixed_camera\"",[36,109853,1680],{"class":50},[36,109855,109856,109859,109861],{"class":38,"line":818},[36,109857,109858],{"class":50},"    image ",[36,109860,70],{"class":42},[36,109862,108916],{"class":50},[36,109864,109865],{"class":38,"line":843},[36,109866,58],{"emptyLinePlaceholder":57},[36,109868,109869,109872,109874,109877,109879],{"class":38,"line":848},[36,109870,109871],{"class":50},"    output_path ",[36,109873,70],{"class":42},[36,109875,109876],{"class":50}," Path(",[36,109878,109346],{"class":110},[36,109880,1680],{"class":50},[36,109882,109883],{"class":38,"line":859},[36,109884,109885],{"class":50},"    Image.fromarray(image).save(output_path)\n",[36,109887,109888],{"class":38,"line":864},[36,109889,109890],{"class":50},"    renderer.close()\n",[36,109892,109893],{"class":38,"line":873},[36,109894,58],{"emptyLinePlaceholder":57},[36,109896,109897,109899,109901,109904],{"class":38,"line":9454},[36,109898,32630],{"class":73},[36,109900,222],{"class":50},[36,109902,109903],{"class":110},"\"saved:\"",[36,109905,109906],{"class":50},", output_path.resolve())\n",[36,109908,109909,109911,109913,109916],{"class":38,"line":9481},[36,109910,32630],{"class":73},[36,109912,222],{"class":50},[36,109914,109915],{"class":110},"\"image shape:\"",[36,109917,109918],{"class":50},", image.shape)\n",[36,109920,109921],{"class":38,"line":9486},[36,109922,58],{"emptyLinePlaceholder":57},[36,109924,109925],{"class":38,"line":9492},[36,109926,58],{"emptyLinePlaceholder":57},[36,109928,109929,109931,109933,109935,109937],{"class":38,"line":9504},[36,109930,3061],{"class":42},[36,109932,32551],{"class":73},[36,109934,102890],{"class":42},[36,109936,102893],{"class":110},[36,109938,5230],{"class":50},[36,109940,109941],{"class":38,"line":9516},[36,109942,102900],{"class":50},[19,109944,104901],{},[26,109946,109948],{"className":25152,"code":109947,"language":25154,"meta":31,"style":31},"touch ch5_renderer.py\n",[33,109949,109950],{"__ignoreMap":31},[36,109951,109952,109954],{"class":38,"line":39},[36,109953,102614],{"class":46},[36,109955,109956],{"class":110}," ch5_renderer.py\n",[1645,109958,102903],{"id":102903},[19,109960,109961],{},"viewer 上下文：",[26,109963,109965],{"className":31709,"code":109964,"language":31711,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[33,109966,109967],{"__ignoreMap":31},[36,109968,109969,109971,109973,109975],{"class":38,"line":39},[36,109970,109164],{"class":42},[36,109972,109167],{"class":50},[36,109974,32714],{"class":42},[36,109976,109172],{"class":50},[19,109978,109979,109981],{},[33,109980,109164],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109983,109984],{},"窗口循环：",[26,109986,109988],{"className":31709,"code":109987,"language":31711,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[33,109989,109990],{"__ignoreMap":31},[36,109991,109992,109995,109997,109999,110001,110003,110005],{"class":38,"line":39},[36,109993,109994],{"class":42},"while",[36,109996,109518],{"class":50},[36,109998,31793],{"class":42},[36,110000,109523],{"class":50},[36,110002,2577],{"class":42},[36,110004,109528],{"class":73},[36,110006,5230],{"class":50},[19,110008,110009],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110011,110012],{},"固定相机：",[26,110014,110016],{"className":54398,"code":110015,"language":54400,"meta":31,"style":31},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,110017,110018],{"__ignoreMap":31},[36,110019,110020,110022,110024,110026,110028,110030,110032,110034,110037,110040,110042,110045],{"class":38,"line":39},[36,110021,2577],{"class":50},[36,110023,109846],{"class":52631},[36,110025,16249],{"class":46},[36,110027,70],{"class":50},[36,110029,109851],{"class":110},[36,110031,102437],{"class":46},[36,110033,70],{"class":50},[36,110035,110036],{"class":110},"\"1.5 -2.0 1.2\"",[36,110038,110039],{"class":46}," xyaxes",[36,110041,70],{"class":50},[36,110043,110044],{"class":110},"\"1 0.75 0 0 0 1\"",[36,110046,102475],{"class":50},[19,110048,110049],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[1645,110051,110053],{"id":110052},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,110055,110057],{"className":31709,"code":110056,"language":31711,"meta":31,"style":31},"import time\n",[33,110058,110059],{"__ignoreMap":31},[36,110060,110061,110063],{"class":38,"line":39},[36,110062,31723],{"class":42},[36,110064,33160],{"class":50},[19,110066,110067],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,110069,110071],{"className":31709,"code":110070,"language":31711,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[33,110072,110073,110079],{"__ignoreMap":31},[36,110074,110075,110077],{"class":38,"line":39},[36,110076,31723],{"class":42},[36,110078,102632],{"class":50},[36,110080,110081,110083],{"class":38,"line":54},[36,110082,31723],{"class":42},[36,110084,108883],{"class":50},[19,110086,110087],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,110089,110090],{"className":31709,"code":109964,"language":31711,"meta":31,"style":31},[33,110091,110092],{"__ignoreMap":31},[36,110093,110094,110096,110098,110100],{"class":38,"line":39},[36,110095,109164],{"class":42},[36,110097,109167],{"class":50},[36,110099,32714],{"class":42},[36,110101,109172],{"class":50},[19,110103,110104,110105,110108],{},"打开一个 viewer 窗口。",[33,110106,110107],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,110110,110111],{"className":31709,"code":109987,"language":31711,"meta":31,"style":31},[33,110112,110113],{"__ignoreMap":31},[36,110114,110115,110117,110119,110121,110123,110125,110127],{"class":38,"line":39},[36,110116,109994],{"class":42},[36,110118,109518],{"class":50},[36,110120,31793],{"class":42},[36,110122,109523],{"class":50},[36,110124,2577],{"class":42},[36,110126,109528],{"class":73},[36,110128,5230],{"class":50},[19,110130,110131,110132,110135],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[33,110133,110134],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,110137,110139],{"className":31709,"code":110138,"language":31711,"meta":31,"style":31},"step_start = time.time()\n",[33,110140,110141],{"__ignoreMap":31},[36,110142,110143,110146,110148],{"class":38,"line":39},[36,110144,110145],{"class":50},"step_start ",[36,110147,70],{"class":42},[36,110149,109540],{"class":50},[19,110151,110152],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,110154,110155],{"className":31709,"code":109249,"language":31711,"meta":31,"style":31},[33,110156,110157,110161],{"__ignoreMap":31},[36,110158,110159],{"class":38,"line":39},[36,110160,105836],{"class":50},[36,110162,110163],{"class":38,"line":54},[36,110164,109260],{"class":50},[19,110166,110167,110169,110170,110172,110173,110175,110176,110179],{},[33,110168,102546],{}," 推进物理仿真。",[33,110171,109268],{}," 把最新的 ",[33,110174,34732],{}," 同步到窗口里显示。没有 ",[33,110177,110178],{},"sync()","，窗口可能看不到最新状态。",[26,110181,110182],{"className":31709,"code":109279,"language":31711,"meta":31,"style":31},[33,110183,110184],{"__ignoreMap":31},[36,110185,110186,110188,110190,110192,110194,110196,110198],{"class":38,"line":39},[36,110187,109286],{"class":50},[36,110189,70],{"class":42},[36,110191,109291],{"class":50},[36,110193,2199],{"class":42},[36,110195,109296],{"class":50},[36,110197,2199],{"class":42},[36,110199,109301],{"class":50},[19,110201,110202],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,110204,110206],{"className":31709,"code":110205,"language":31711,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[33,110207,110208,110220],{"__ignoreMap":31},[36,110209,110210,110212,110214,110216,110218],{"class":38,"line":39},[36,110211,3061],{"class":42},[36,110213,109578],{"class":50},[36,110215,2627],{"class":42},[36,110217,242],{"class":73},[36,110219,5230],{"class":50},[36,110221,110222],{"class":38,"line":54},[36,110223,110224],{"class":50},"    time.sleep(sleep_time)\n",[19,110226,110227],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[1645,110229,110231],{"id":110230},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,110233,110235],{"className":31709,"code":110234,"language":31711,"meta":31,"style":31},"from pathlib import Path\n",[33,110236,110237],{"__ignoreMap":31},[36,110238,110239,110241,110243,110245],{"class":38,"line":39},[36,110240,32068],{"class":42},[36,110242,109642],{"class":50},[36,110244,31723],{"class":42},[36,110246,109647],{"class":50},[19,110248,110249,110250,110253,110254,110257],{},"导入 ",[33,110251,110252],{},"Path","，用来处理文件路径。相比直接写字符串，",[33,110255,110256],{},"Path(\"render_output.png\")"," 更清晰。",[26,110259,110261],{"className":31709,"code":110260,"language":31711,"meta":31,"style":31},"from PIL import Image\n",[33,110262,110263],{"__ignoreMap":31},[36,110264,110265,110267,110269,110271],{"class":38,"line":39},[36,110266,32068],{"class":42},[36,110268,48594],{"class":73},[36,110270,48597],{"class":42},[36,110272,48600],{"class":50},[19,110274,110275],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,110277,110278],{"className":54398,"code":110015,"language":54400,"meta":31,"style":31},[33,110279,110280],{"__ignoreMap":31},[36,110281,110282,110284,110286,110288,110290,110292,110294,110296,110298,110300,110302,110304],{"class":38,"line":39},[36,110283,2577],{"class":50},[36,110285,109846],{"class":52631},[36,110287,16249],{"class":46},[36,110289,70],{"class":50},[36,110291,109851],{"class":110},[36,110293,102437],{"class":46},[36,110295,70],{"class":50},[36,110297,110036],{"class":110},[36,110299,110039],{"class":46},[36,110301,70],{"class":50},[36,110303,110044],{"class":110},[36,110305,102475],{"class":50},[19,110307,110308,110309,110311,110312,110314,110315,110318,110319,110321],{},"定义一个相机。",[33,110310,81141],{}," 是相机名字。",[33,110313,105477],{}," 是相机在世界里的位置。",[33,110316,110317],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[33,110320,105477],{}," 来调视角。",[26,110323,110325],{"className":31709,"code":110324,"language":31711,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[33,110326,110327],{"__ignoreMap":31},[36,110328,110329,110331,110333,110335,110337,110339,110341,110343,110345,110347,110349],{"class":38,"line":39},[36,110330,108901],{"class":50},[36,110332,70],{"class":42},[36,110334,109205],{"class":50},[36,110336,26312],{"class":473},[36,110338,70],{"class":42},[36,110340,43673],{"class":73},[36,110342,477],{"class":50},[36,110344,26308],{"class":473},[36,110346,70],{"class":42},[36,110348,109220],{"class":73},[36,110350,1680],{"class":50},[19,110352,110353,110354,102349,110356,110358],{},"创建离屏渲染器。",[33,110355,26312],{},[33,110357,26308],{}," 决定输出图片大小。",[26,110360,110361],{"className":31709,"code":103007,"language":31711,"meta":31,"style":31},[33,110362,110363,110379],{"__ignoreMap":31},[36,110364,110365,110367,110369,110371,110373,110375,110377],{"class":38,"line":39},[36,110366,4516],{"class":42},[36,110368,102832],{"class":50},[36,110370,27374],{"class":42},[36,110372,33774],{"class":73},[36,110374,222],{"class":50},[36,110376,1979],{"class":73},[36,110378,32117],{"class":50},[36,110380,110381],{"class":38,"line":54},[36,110382,103030],{"class":50},[19,110384,110385],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,110387,110389],{"className":31709,"code":110388,"language":31711,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[33,110390,110391],{"__ignoreMap":31},[36,110392,110393,110396,110398,110400,110402],{"class":38,"line":39},[36,110394,110395],{"class":50},"renderer.update_scene(data, ",[36,110397,109846],{"class":473},[36,110399,70],{"class":42},[36,110401,109851],{"class":110},[36,110403,1680],{"class":50},[19,110405,110406,110407,110409,110410,110413],{},"告诉 renderer：用当前 ",[33,110408,34732],{}," 的状态更新画面，并使用名为 ",[33,110411,110412],{},"fixed_camera"," 的相机视角。",[26,110415,110416],{"className":31709,"code":109311,"language":31711,"meta":31,"style":31},[33,110417,110418],{"__ignoreMap":31},[36,110419,110420,110422,110424],{"class":38,"line":39},[36,110421,108911],{"class":50},[36,110423,70],{"class":42},[36,110425,108916],{"class":50},[19,110427,110428,110429,110432],{},"真正渲染出图像。",[33,110430,110431],{},"image"," 是一个 NumPy 数组，不是文件。",[26,110434,110436],{"className":31709,"code":110435,"language":31711,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[33,110437,110438],{"__ignoreMap":31},[36,110439,110440],{"class":38,"line":39},[36,110441,110435],{"class":50},[19,110443,110444,110445,29716],{},"把数组转换成图片，并保存到 ",[33,110446,110447],{},"render_output.png",[26,110449,110451],{"className":31709,"code":110450,"language":31711,"meta":31,"style":31},"renderer.close()\n",[33,110452,110453],{"__ignoreMap":31},[36,110454,110455],{"class":38,"line":39},[36,110456,110450],{"class":50},[19,110458,110459],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110461,103647],{"id":103646},[19,110463,110464,110465,110467,110468,29716],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[33,110466,110447],{},"，并输出图像数组形状，例如 ",[33,110469,110470],{},"(480, 640, 3)",[19,110472,110473],{},"如果图片里看不到方块，先检查：",[256,110475,110476,110479,110482],{},[259,110477,110478],{},"方块是否掉到相机视野外。",[259,110480,110481],{},"camera 位置是否合理。",[259,110483,110484,110485,110488],{},"是否在 ",[33,110486,110487],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110490,103679],{"id":103678},[19,110492,110493],{},"运行 viewer:",[26,110495,110497],{"className":25152,"code":110496,"language":25154,"meta":31,"style":31},"python ch5_viewer.py\n",[33,110498,110499],{"__ignoreMap":31},[36,110500,110501,110503],{"class":38,"line":39},[36,110502,31711],{"class":46},[36,110504,109627],{"class":110},[19,110506,110507],{},"运行 renderer:",[26,110509,110511],{"className":25152,"code":110510,"language":25154,"meta":31,"style":31},"python ch5_renderer.py\n",[33,110512,110513],{"__ignoreMap":31},[36,110514,110515,110517],{"class":38,"line":39},[36,110516,31711],{"class":46},[36,110518,109956],{"class":110},[19,110520,110521],{},"如果在服务器上运行:",[26,110523,110525],{"className":25152,"code":110524,"language":25154,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[33,110526,110527],{"__ignoreMap":31},[36,110528,110529,110531,110533,110535,110538],{"class":38,"line":39},[36,110530,109145],{"class":50},[36,110532,70],{"class":42},[36,110534,109135],{"class":110},[36,110536,110537],{"class":46}," python",[36,110539,109956],{"class":110},[19,110541,109113],{},[26,110543,110545],{"className":25152,"code":110544,"language":25154,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[33,110546,110547],{"__ignoreMap":31},[36,110548,110549,110551,110553,110555,110557],{"class":38,"line":39},[36,110550,109145],{"class":50},[36,110552,70],{"class":42},[36,110554,109139],{"class":110},[36,110556,110537],{"class":46},[36,110558,109956],{"class":110},[19,110560,110561],{},"再做几个练习：",[256,110563,110564,110571,110574,110580],{},[259,110565,110566,110567,110570],{},"把 renderer 分辨率改成 ",[33,110568,110569],{},"height=240, width=320","，观察输出 shape。",[259,110572,110573],{},"把方块颜色改成蓝色，重新保存图片。",[259,110575,110576,110577,110579],{},"把相机 ",[33,110578,105477],{}," 改远一点，观察画面中物体是否变小。",[259,110581,110582,110583,103745,110586,110589],{},"把 viewer 示例中的 ",[33,110584,110585],{},"data.time \u003C 5.0",[33,110587,110588],{},"data.time \u003C 20.0","，观察更长时间。",[14,110591,103784],{"id":103783},[1645,110593,110595],{"id":110594},"viewer-窗口打不开","viewer 窗口打不开",[19,110597,110598],{},"安装:",[26,110600,110602],{"className":25152,"code":110601,"language":25154,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[33,110603,110604],{"__ignoreMap":31},[36,110605,110606,110608,110610,110612,110614,110616,110618,110620,110622,110624,110626],{"class":38,"line":39},[36,110607,25907],{"class":46},[36,110609,27646],{"class":110},[36,110611,25164],{"class":110},[36,110613,27731],{"class":73},[36,110615,103837],{"class":110},[36,110617,102165],{"class":110},[36,110619,103842],{"class":110},[36,110621,102178],{"class":110},[36,110623,102184],{"class":110},[36,110625,102175],{"class":110},[36,110627,110628],{"class":110}," libXinerama\n",[1645,110630,110632],{"id":110631},"glfwerror",[33,110633,110634],{},"GLFWError",[19,110636,110637],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[1645,110639,110641],{"id":110640},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110643,110644,110645,83870,110647,110649],{},"尝试 ",[33,110646,102368],{},[33,110648,102371],{},"。可能存在版本差异。",[1645,110651,110652],{"id":110652},"保存图片是黑的",[19,110654,103906],{},[256,110656,110657,110660,110663,110673],{},[259,110658,110659],{},"XML 里是否有 light。",[259,110661,110662],{},"相机是否对着模型。",[259,110664,110665,110666,110669,110670,29716],{},"是否先 ",[33,110667,110668],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[33,110671,110672],{},"renderer.render()",[259,110674,110675],{},"物体是否已经掉出视野。",[1645,110677,110678],{"id":110678},"远程服务器没有显示器",[19,110680,110681],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,110683,110684],{"className":25152,"code":110524,"language":25154,"meta":31,"style":31},[33,110685,110686],{"__ignoreMap":31},[36,110687,110688,110690,110692,110694,110696],{"class":38,"line":39},[36,110689,109145],{"class":50},[36,110691,70],{"class":42},[36,110693,109135],{"class":110},[36,110695,110537],{"class":46},[36,110697,109956],{"class":110},[19,110699,110700],{},"如果 EGL 不可用，再尝试：",[26,110702,110703],{"className":25152,"code":110544,"language":25154,"meta":31,"style":31},[33,110704,110705],{"__ignoreMap":31},[36,110706,110707,110709,110711,110713,110715],{"class":38,"line":39},[36,110708,109145],{"class":50},[36,110710,70],{"class":42},[36,110712,109139],{"class":110},[36,110714,110537],{"class":46},[36,110716,109956],{"class":110},[14,110718,103938],{"id":103937},[19,110720,110721],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[256,110723,110724,110727,110730],{},[259,110725,110726],{},"先用 viewer 看模型和控制是否正常。",[259,110728,110729],{},"再用 renderer 保存图片或构造视觉观测。",[259,110731,110732],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1592,110734,110735],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":110737},[110738,110739,110740,110745,110750,110751,110752,110759],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":110741},[110742,110743,110744],{"id":109242,"depth":61,"text":109243},{"id":109272,"depth":61,"text":109273},{"id":109307,"depth":61,"text":109308},{"id":102583,"depth":54,"text":102584,"children":110746},[110747,110748,110749],{"id":102903,"depth":61,"text":102903},{"id":110052,"depth":61,"text":110053},{"id":110230,"depth":61,"text":110231},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":110753},[110754,110755,110756,110757,110758],{"id":110594,"depth":61,"text":110595},{"id":110631,"depth":61,"text":110634},{"id":110640,"depth":61,"text":110641},{"id":110652,"depth":61,"text":110652},{"id":110678,"depth":61,"text":110678},{"id":103937,"depth":54,"text":103938},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108850,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110766,"title":110767,"body":110768,"description":31,"extension":1603,"meta":112679,"navigation":57,"path":112680,"seo":112681,"stem":112682,"__hash__":112683},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110769,"toc":112655},[110770,110773,110775,110778,110780,110799,110802,110808,110811,110813,110815,110839,110841,110855,110857,110898,110900,110911,110913,110916,110922,110925,110959,110962,110994,110997,111029,111033,111036,111076,111079,111085,111088,111094,111098,111101,111107,111110,111114,111117,111157,111159,111172,111175,111177,111759,111761,111773,111776,111787,111789,111792,111811,111823,111826,111847,111850,111853,111896,111899,111902,111922,111929,111931,111949,111964,111967,111973,111976,111982,111999,112006,112037,112048,112082,112093,112110,112119,112127,112132,112146,112149,112170,112176,112190,112195,112225,112235,112260,112268,112291,112294,112310,112313,112321,112327,112349,112362,112383,112392,112431,112442,112444,112447,112453,112456,112459,112465,112468,112488,112491,112493,112532,112534,112537,112545,112548,112551,112578,112581,112591,112597,112600,112606,112608,112614,112618,112621,112623,112626,112650,112653],[10,110771,110767],{"id":110772},"_6控制任务cartpole",[14,110774,101978],{"id":101977},[19,110776,110777],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110779,105662],{},[256,110781,110782,110785,110787,110790,110793,110796],{},[259,110783,110784],{},"slide joint",[259,110786,107515],{},[259,110788,110789],{},"cart force actuator",[259,110791,110792],{},"状态观测",[259,110794,110795],{},"简单控制循环",[259,110797,110798],{},"reward 设计雏形",[19,110800,110801],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,110803,110806],{"className":110804,"code":110805,"language":6676,"meta":31},[6674],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[33,110807,110805],{"__ignoreMap":31},[19,110809,110810],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110812,102101],{"id":102100},[19,110814,102104],{},[26,110816,110817],{"className":25152,"code":105719,"language":25154,"meta":31,"style":31},[33,110818,110819],{"__ignoreMap":31},[36,110820,110821,110823,110825,110827,110829,110831,110833,110835,110837],{"class":38,"line":39},[36,110822,25907],{"class":46},[36,110824,27646],{"class":110},[36,110826,25164],{"class":110},[36,110828,27731],{"class":73},[36,110830,105734],{"class":110},[36,110832,102129],{"class":110},[36,110834,103832],{"class":110},[36,110836,102145],{"class":110},[36,110838,105743],{"class":110},[19,110840,104150],{},[26,110842,110843],{"className":25152,"code":102250,"language":25154,"meta":31,"style":31},[33,110844,110845],{"__ignoreMap":31},[36,110846,110847,110849,110851,110853],{"class":38,"line":39},[36,110848,25161],{"class":46},[36,110850,25164],{"class":110},[36,110852,102261],{"class":110},[36,110854,102264],{"class":110},[19,110856,104167],{},[26,110858,110860],{"className":25152,"code":110859,"language":25154,"meta":31,"style":31},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[33,110861,110862,110879,110888],{"__ignoreMap":31},[36,110863,110864,110866,110868,110870,110873,110875,110877],{"class":38,"line":39},[36,110865,31661],{"class":46},[36,110867,30507],{"class":110},[36,110869,26446],{"class":73},[36,110871,110872],{"class":110}," mujoco-cartpole",[36,110874,102306],{"class":110},[36,110876,102309],{"class":73},[36,110878,102312],{"class":73},[36,110880,110881,110883,110885],{"class":38,"line":54},[36,110882,31661],{"class":46},[36,110884,102319],{"class":110},[36,110886,110887],{"class":110}," mujoco-cartpole\n",[36,110889,110890,110892,110894,110896],{"class":38,"line":61},[36,110891,25161],{"class":46},[36,110893,25164],{"class":110},[36,110895,102261],{"class":110},[36,110897,102264],{"class":110},[19,110899,102335],{},[256,110901,110902,110905,110908],{},[259,110903,110904],{},"本章不依赖 Gymnasium。",[259,110906,110907],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[259,110909,110910],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110912,102376],{"id":102375},[19,110914,110915],{},"Cartpole 的模型结构:",[26,110917,110920],{"className":110918,"code":110919,"language":6676,"meta":31},[6674],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[33,110921,110919],{"__ignoreMap":31},[19,110923,110924],{},"小车通过 slide joint 左右移动:",[26,110926,110928],{"className":54398,"code":110927,"language":54400,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[33,110929,110930],{"__ignoreMap":31},[36,110931,110932,110934,110936,110938,110940,110943,110945,110947,110950,110952,110954,110957],{"class":38,"line":39},[36,110933,2577],{"class":50},[36,110935,104287],{"class":52631},[36,110937,16249],{"class":46},[36,110939,70],{"class":50},[36,110941,110942],{"class":110},"\"cart_x\"",[36,110944,55155],{"class":46},[36,110946,70],{"class":50},[36,110948,110949],{"class":110},"\"slide\"",[36,110951,107359],{"class":46},[36,110953,70],{"class":50},[36,110955,110956],{"class":110},"\"1 0 0\"",[36,110958,102475],{"class":50},[19,110960,110961],{},"杆子通过 hinge joint 旋转:",[26,110963,110965],{"className":54398,"code":110964,"language":54400,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,110966,110967],{"__ignoreMap":31},[36,110968,110969,110971,110973,110975,110977,110980,110982,110984,110986,110988,110990,110992],{"class":38,"line":39},[36,110970,2577],{"class":50},[36,110972,104287],{"class":52631},[36,110974,16249],{"class":46},[36,110976,70],{"class":50},[36,110978,110979],{"class":110},"\"pole_hinge\"",[36,110981,55155],{"class":46},[36,110983,70],{"class":50},[36,110985,107350],{"class":110},[36,110987,107359],{"class":46},[36,110989,70],{"class":50},[36,110991,107364],{"class":110},[36,110993,102475],{"class":50},[19,110995,110996],{},"控制力作用在小车 slide joint 上:",[26,110998,111000],{"className":54398,"code":110999,"language":54400,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[33,111001,111002],{"__ignoreMap":31},[36,111003,111004,111006,111008,111010,111012,111015,111017,111019,111021,111023,111025,111027],{"class":38,"line":39},[36,111005,2577],{"class":50},[36,111007,107405],{"class":52631},[36,111009,16249],{"class":46},[36,111011,70],{"class":50},[36,111013,111014],{"class":110},"\"cart_motor\"",[36,111016,107415],{"class":46},[36,111018,70],{"class":50},[36,111020,110942],{"class":110},[36,111022,107422],{"class":46},[36,111024,70],{"class":50},[36,111026,55647],{"class":110},[36,111028,102475],{"class":50},[1645,111030,111032],{"id":111031},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111034,111035],{},"这个简化模型有两个关节：",[1806,111037,111038,111049],{},[1809,111039,111040],{},[1812,111041,111042,111044,111046],{},[1815,111043,104090],{"align":25066},[1815,111045,25067],{"align":25066},[1815,111047,111048],{"align":25066},"对应状态",[1852,111050,111051,111064],{},[1812,111052,111053,111058,111061],{},[1857,111054,111055],{"align":25066},[33,111056,111057],{},"cart_x",[1857,111059,111060],{"align":25066},"slide",[1857,111062,111063],{"align":25066},"小车 x 位置",[1812,111065,111066,111071,111073],{},[1857,111067,111068],{"align":25066},[33,111069,111070],{},"pole_hinge",[1857,111072,107171],{"align":25066},[1857,111074,111075],{"align":25066},"杆子角度",[19,111077,111078],{},"所以：",[26,111080,111083],{"className":111081,"code":111082,"language":6676,"meta":31},[6674],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[33,111084,111082],{"__ignoreMap":31},[19,111086,111087],{},"把它们拼起来就是观测：",[26,111089,111092],{"className":111090,"code":111091,"language":6676,"meta":31},[6674],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,111093,111091],{"__ignoreMap":31},[1645,111095,111097],{"id":111096},"action-是什么","action 是什么",[19,111099,111100],{},"本章只有一个 actuator：",[26,111102,111105],{"className":111103,"code":111104,"language":6676,"meta":31},[6674],"data.ctrl[0] = action\n",[33,111106,111104],{"__ignoreMap":31},[19,111108,111109],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[1645,111111,111113],{"id":111112},"reward-是什么","reward 是什么",[19,111115,111116],{},"奖励函数：",[26,111118,111120],{"className":31709,"code":111119,"language":31711,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[33,111121,111122],{"__ignoreMap":31},[36,111123,111124,111126,111129,111131,111133,111135,111138,111140,111143,111145,111147,111149,111152,111154],{"class":38,"line":39},[36,111125,18375],{"class":42},[36,111127,111128],{"class":73}," float",[36,111130,222],{"class":50},[36,111132,103734],{"class":73},[36,111134,53602],{"class":42},[36,111136,111137],{"class":73}," 0.1",[36,111139,561],{"class":42},[36,111141,111142],{"class":50}," cart_x ",[36,111144,2122],{"class":42},[36,111146,111142],{"class":50},[36,111148,2199],{"class":42},[36,111150,111151],{"class":50}," pole_angle ",[36,111153,2122],{"class":42},[36,111155,111156],{"class":50}," pole_angle)\n",[19,111158,107557],{},[256,111160,111161,111166,111169],{},[259,111162,111163,111164,29716],{},"基础奖励是 ",[33,111165,103734],{},[259,111167,111168],{},"小车离中心越远，扣分越多。",[259,111170,111171],{},"杆子角度越大，扣分越多。",[19,111173,111174],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111176,102584],{"id":102583},[26,111178,111180],{"className":31709,"code":111179,"language":31711,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"cartpole\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n\n    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n\n\ndef compute_reward(obs: np.ndarray) -> float:\n    cart_x = obs[0]\n    pole_angle = obs[1]\n    return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n\n    data.qpos[1] = 0.1\n    mujoco.mj_forward(model, data)\n\n    total_reward = 0.0\n\n    for step in range(1000):\n        obs = get_observation(data)\n        pole_angle = obs[1]\n        pole_angular_velocity = obs[3]\n\n        action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n        action = np.clip(action, -1.0, 1.0)\n\n        data.ctrl[0] = action\n        mujoco.mj_step(model, data)\n\n        reward = compute_reward(get_observation(data))\n        total_reward += reward\n\n        if step % 100 == 0:\n            print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final obs:\", np.round(get_observation(data), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,111181,111182,111188,111198,111202,111206,111214,111219,111223,111227,111231,111236,111240,111245,111250,111255,111259,111264,111269,111274,111278,111282,111286,111290,111294,111299,111303,111307,111311,111315,111319,111329,111336,111340,111344,111358,111372,111385,111415,111419,111423,111435,111447,111455,111459,111472,111476,111480,111489,111493,111509,111519,111532,111545,111549,111572,111590,111594,111606,111610,111614,111624,111634,111638,111654,111695,111699,111719,111735,111739,111743,111755],{"__ignoreMap":31},[36,111183,111184,111186],{"class":38,"line":39},[36,111185,31723],{"class":42},[36,111187,102632],{"class":50},[36,111189,111190,111192,111194,111196],{"class":38,"line":54},[36,111191,31723],{"class":42},[36,111193,32711],{"class":50},[36,111195,32714],{"class":42},[36,111197,32717],{"class":50},[36,111199,111200],{"class":38,"line":61},[36,111201,58],{"emptyLinePlaceholder":57},[36,111203,111204],{"class":38,"line":80},[36,111205,58],{"emptyLinePlaceholder":57},[36,111207,111208,111210,111212],{"class":38,"line":96},[36,111209,102645],{"class":73},[36,111211,14893],{"class":42},[36,111213,102650],{"class":110},[36,111215,111216],{"class":38,"line":101},[36,111217,111218],{"class":110},"\u003Cmujoco model=\"cartpole\">\n",[36,111220,111221],{"class":38,"line":128},[36,111222,102660],{"class":110},[36,111224,111225],{"class":38,"line":149},[36,111226,58],{"emptyLinePlaceholder":57},[36,111228,111229],{"class":38,"line":154},[36,111230,102669],{"class":110},[36,111232,111233],{"class":38,"line":167},[36,111234,111235],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,111237,111238],{"class":38,"line":172},[36,111239,58],{"emptyLinePlaceholder":57},[36,111241,111242],{"class":38,"line":192},[36,111243,111244],{"class":110},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[36,111246,111247],{"class":38,"line":211},[36,111248,111249],{"class":110},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[36,111251,111252],{"class":38,"line":216},[36,111253,111254],{"class":110},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,111256,111257],{"class":38,"line":231},[36,111258,58],{"emptyLinePlaceholder":57},[36,111260,111261],{"class":38,"line":236},[36,111262,111263],{"class":110},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[36,111265,111266],{"class":38,"line":247},[36,111267,111268],{"class":110},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[36,111270,111271],{"class":38,"line":637},[36,111272,111273],{"class":110},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[36,111275,111276],{"class":38,"line":646},[36,111277,107769],{"class":110},[36,111279,111280],{"class":38,"line":655},[36,111281,102698],{"class":110},[36,111283,111284],{"class":38,"line":660},[36,111285,102703],{"class":110},[36,111287,111288],{"class":38,"line":665},[36,111289,58],{"emptyLinePlaceholder":57},[36,111291,111292],{"class":38,"line":674},[36,111293,107786],{"class":110},[36,111295,111296],{"class":38,"line":679},[36,111297,111298],{"class":110},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,111300,111301],{"class":38,"line":692},[36,111302,107796],{"class":110},[36,111304,111305],{"class":38,"line":705},[36,111306,102708],{"class":110},[36,111308,111309],{"class":38,"line":710},[36,111310,97029],{"class":110},[36,111312,111313],{"class":38,"line":722},[36,111314,58],{"emptyLinePlaceholder":57},[36,111316,111317],{"class":38,"line":750},[36,111318,58],{"emptyLinePlaceholder":57},[36,111320,111321,111323,111326],{"class":38,"line":755},[36,111322,33278],{"class":42},[36,111324,111325],{"class":46}," get_observation",[36,111327,111328],{"class":50},"(data: mujoco.MjData) -> np.ndarray:\n",[36,111330,111331,111333],{"class":38,"line":777},[36,111332,239],{"class":42},[36,111334,111335],{"class":50}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,111337,111338],{"class":38,"line":802},[36,111339,58],{"emptyLinePlaceholder":57},[36,111341,111342],{"class":38,"line":807},[36,111343,58],{"emptyLinePlaceholder":57},[36,111345,111346,111348,111351,111354,111356],{"class":38,"line":818},[36,111347,33278],{"class":42},[36,111349,111350],{"class":46}," compute_reward",[36,111352,111353],{"class":50},"(obs: np.ndarray) -> ",[36,111355,1713],{"class":73},[36,111357,5230],{"class":50},[36,111359,111360,111363,111365,111368,111370],{"class":38,"line":843},[36,111361,111362],{"class":50},"    cart_x ",[36,111364,70],{"class":42},[36,111366,111367],{"class":50}," obs[",[36,111369,1859],{"class":73},[36,111371,34577],{"class":50},[36,111373,111374,111377,111379,111381,111383],{"class":38,"line":848},[36,111375,111376],{"class":50},"    pole_angle ",[36,111378,70],{"class":42},[36,111380,111367],{"class":50},[36,111382,1885],{"class":73},[36,111384,34577],{"class":50},[36,111386,111387,111389,111391,111393,111395,111397,111399,111401,111403,111405,111407,111409,111411,111413],{"class":38,"line":859},[36,111388,239],{"class":42},[36,111390,111128],{"class":73},[36,111392,222],{"class":50},[36,111394,103734],{"class":73},[36,111396,53602],{"class":42},[36,111398,111137],{"class":73},[36,111400,561],{"class":42},[36,111402,111142],{"class":50},[36,111404,2122],{"class":42},[36,111406,111142],{"class":50},[36,111408,2199],{"class":42},[36,111410,111151],{"class":50},[36,111412,2122],{"class":42},[36,111414,111156],{"class":50},[36,111416,111417],{"class":38,"line":864},[36,111418,58],{"emptyLinePlaceholder":57},[36,111420,111421],{"class":38,"line":873},[36,111422,58],{"emptyLinePlaceholder":57},[36,111424,111425,111427,111429,111431,111433],{"class":38,"line":9454},[36,111426,33278],{"class":42},[36,111428,47],{"class":46},[36,111430,102729],{"class":50},[36,111432,97017],{"class":73},[36,111434,5230],{"class":50},[36,111436,111437,111439,111441,111443,111445],{"class":38,"line":9481},[36,111438,102738],{"class":50},[36,111440,70],{"class":42},[36,111442,102743],{"class":50},[36,111444,102645],{"class":73},[36,111446,1680],{"class":50},[36,111448,111449,111451,111453],{"class":38,"line":9486},[36,111450,102752],{"class":50},[36,111452,70],{"class":42},[36,111454,102757],{"class":50},[36,111456,111457],{"class":38,"line":9492},[36,111458,58],{"emptyLinePlaceholder":57},[36,111460,111461,111463,111465,111467,111469],{"class":38,"line":9504},[36,111462,106400],{"class":50},[36,111464,1885],{"class":73},[36,111466,5932],{"class":50},[36,111468,70],{"class":42},[36,111470,111471],{"class":73}," 0.1\n",[36,111473,111474],{"class":38,"line":9516},[36,111475,106413],{"class":50},[36,111477,111478],{"class":38,"line":9528},[36,111479,58],{"emptyLinePlaceholder":57},[36,111481,111482,111485,111487],{"class":38,"line":11184},[36,111483,111484],{"class":50},"    total_reward ",[36,111486,70],{"class":42},[36,111488,106092],{"class":73},[36,111490,111491],{"class":38,"line":11209},[36,111492,58],{"emptyLinePlaceholder":57},[36,111494,111495,111497,111499,111501,111503,111505,111507],{"class":38,"line":11232},[36,111496,4692],{"class":42},[36,111498,32947],{"class":50},[36,111500,27374],{"class":42},[36,111502,33774],{"class":73},[36,111504,222],{"class":50},[36,111506,7889],{"class":73},[36,111508,32117],{"class":50},[36,111510,111511,111514,111516],{"class":38,"line":11256},[36,111512,111513],{"class":50},"        obs ",[36,111515,70],{"class":42},[36,111517,111518],{"class":50}," get_observation(data)\n",[36,111520,111521,111524,111526,111528,111530],{"class":38,"line":11261},[36,111522,111523],{"class":50},"        pole_angle ",[36,111525,70],{"class":42},[36,111527,111367],{"class":50},[36,111529,1885],{"class":73},[36,111531,34577],{"class":50},[36,111533,111534,111537,111539,111541,111543],{"class":38,"line":11266},[36,111535,111536],{"class":50},"        pole_angular_velocity ",[36,111538,70],{"class":42},[36,111540,111367],{"class":50},[36,111542,1741],{"class":73},[36,111544,34577],{"class":50},[36,111546,111547],{"class":38,"line":11271},[36,111548,58],{"emptyLinePlaceholder":57},[36,111550,111551,111554,111556,111559,111561,111563,111565,111567,111569],{"class":38,"line":11280},[36,111552,111553],{"class":50},"        action ",[36,111555,70],{"class":42},[36,111557,111558],{"class":73}," 2.0",[36,111560,561],{"class":42},[36,111562,111151],{"class":50},[36,111564,2148],{"class":42},[36,111566,63198],{"class":73},[36,111568,561],{"class":42},[36,111570,111571],{"class":50}," pole_angular_velocity\n",[36,111573,111574,111576,111578,111580,111582,111584,111586,111588],{"class":38,"line":11285},[36,111575,111553],{"class":50},[36,111577,70],{"class":42},[36,111579,108778],{"class":50},[36,111581,2199],{"class":42},[36,111583,103734],{"class":73},[36,111585,477],{"class":50},[36,111587,103734],{"class":73},[36,111589,1680],{"class":50},[36,111591,111592],{"class":38,"line":11291},[36,111593,58],{"emptyLinePlaceholder":57},[36,111595,111596,111598,111600,111602,111604],{"class":38,"line":11312},[36,111597,107948],{"class":50},[36,111599,1859],{"class":73},[36,111601,5932],{"class":50},[36,111603,70],{"class":42},[36,111605,108801],{"class":50},[36,111607,111608],{"class":38,"line":11318},[36,111609,102847],{"class":50},[36,111611,111612],{"class":38,"line":11332},[36,111613,58],{"emptyLinePlaceholder":57},[36,111615,111616,111619,111621],{"class":38,"line":11338},[36,111617,111618],{"class":50},"        reward ",[36,111620,70],{"class":42},[36,111622,111623],{"class":50}," compute_reward(get_observation(data))\n",[36,111625,111626,111629,111631],{"class":38,"line":11365},[36,111627,111628],{"class":50},"        total_reward ",[36,111630,10945],{"class":42},[36,111632,111633],{"class":50}," reward\n",[36,111635,111636],{"class":38,"line":11374},[36,111637,58],{"emptyLinePlaceholder":57},[36,111639,111640,111642,111644,111646,111648,111650,111652],{"class":38,"line":11380},[36,111641,3999],{"class":42},[36,111643,32947],{"class":50},[36,111645,1996],{"class":42},[36,111647,162],{"class":73},[36,111649,102890],{"class":42},[36,111651,242],{"class":73},[36,111653,5230],{"class":50},[36,111655,111656,111658,111660,111663,111666,111669,111672,111674,111677,111680,111682,111684,111686,111688,111691,111693],{"class":38,"line":11388},[36,111657,35981],{"class":73},[36,111659,222],{"class":50},[36,111661,111662],{"class":110},"\"step:\"",[36,111664,111665],{"class":50},", step, ",[36,111667,111668],{"class":110},"\"obs:\"",[36,111670,111671],{"class":50},", np.round(obs, ",[36,111673,1741],{"class":73},[36,111675,111676],{"class":50},"), ",[36,111678,111679],{"class":110},"\"action:\"",[36,111681,477],{"class":50},[36,111683,33349],{"class":73},[36,111685,222],{"class":50},[36,111687,1713],{"class":73},[36,111689,111690],{"class":50},"(action), ",[36,111692,1741],{"class":73},[36,111694,31828],{"class":50},[36,111696,111697],{"class":38,"line":11393},[36,111698,58],{"emptyLinePlaceholder":57},[36,111700,111701,111703,111705,111708,111710,111712,111715,111717],{"class":38,"line":17933},[36,111702,32630],{"class":73},[36,111704,222],{"class":50},[36,111706,111707],{"class":110},"\"total_reward:\"",[36,111709,477],{"class":50},[36,111711,33349],{"class":73},[36,111713,111714],{"class":50},"(total_reward, ",[36,111716,1741],{"class":73},[36,111718,31828],{"class":50},[36,111720,111721,111723,111725,111728,111731,111733],{"class":38,"line":17939},[36,111722,32630],{"class":73},[36,111724,222],{"class":50},[36,111726,111727],{"class":110},"\"final obs:\"",[36,111729,111730],{"class":50},", np.round(get_observation(data), ",[36,111732,1741],{"class":73},[36,111734,31828],{"class":50},[36,111736,111737],{"class":38,"line":17962},[36,111738,58],{"emptyLinePlaceholder":57},[36,111740,111741],{"class":38,"line":17968},[36,111742,58],{"emptyLinePlaceholder":57},[36,111744,111745,111747,111749,111751,111753],{"class":38,"line":17991},[36,111746,3061],{"class":42},[36,111748,32551],{"class":73},[36,111750,102890],{"class":42},[36,111752,102893],{"class":110},[36,111754,5230],{"class":50},[36,111756,111757],{"class":38,"line":18005},[36,111758,102900],{"class":50},[19,111760,104901],{},[26,111762,111764],{"className":25152,"code":111763,"language":25154,"meta":31,"style":31},"touch ch6_cartpole.py\n",[33,111765,111766],{"__ignoreMap":31},[36,111767,111768,111770],{"class":38,"line":39},[36,111769,102614],{"class":46},[36,111771,111772],{"class":110}," ch6_cartpole.py\n",[19,111774,111775],{},"运行：",[26,111777,111779],{"className":25152,"code":111778,"language":25154,"meta":31,"style":31},"python ch6_cartpole.py\n",[33,111780,111781],{"__ignoreMap":31},[36,111782,111783,111785],{"class":38,"line":39},[36,111784,31711],{"class":46},[36,111786,111772],{"class":110},[1645,111788,102903],{"id":102903},[19,111790,111791],{},"构造观测：",[26,111793,111795],{"className":31709,"code":111794,"language":31711,"meta":31,"style":31},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,111796,111797,111805],{"__ignoreMap":31},[36,111798,111799,111801,111803],{"class":38,"line":39},[36,111800,33278],{"class":42},[36,111802,111325],{"class":46},[36,111804,111328],{"class":50},[36,111806,111807,111809],{"class":38,"line":54},[36,111808,239],{"class":42},[36,111810,111335],{"class":50},[19,111812,111813,111816,111817,111819,111820,111822],{},[33,111814,111815],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[33,111818,105361],{}," 2 维，",[33,111821,105691],{}," 2 维，所以 obs 是 4 维。",[19,111824,111825],{},"设置初始角度：",[26,111827,111829],{"className":31709,"code":111828,"language":31711,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[33,111830,111831,111843],{"__ignoreMap":31},[36,111832,111833,111835,111837,111839,111841],{"class":38,"line":39},[36,111834,106030],{"class":50},[36,111836,1885],{"class":73},[36,111838,5932],{"class":50},[36,111840,70],{"class":42},[36,111842,111471],{"class":73},[36,111844,111845],{"class":38,"line":54},[36,111846,105874],{"class":50},[19,111848,111849],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111851,111852],{},"简单反馈控制：",[26,111854,111856],{"className":31709,"code":111855,"language":31711,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[33,111857,111858,111878],{"__ignoreMap":31},[36,111859,111860,111862,111864,111866,111868,111870,111872,111874,111876],{"class":38,"line":39},[36,111861,108773],{"class":50},[36,111863,70],{"class":42},[36,111865,111558],{"class":73},[36,111867,561],{"class":42},[36,111869,111151],{"class":50},[36,111871,2148],{"class":42},[36,111873,63198],{"class":73},[36,111875,561],{"class":42},[36,111877,111571],{"class":50},[36,111879,111880,111882,111884,111886,111888,111890,111892,111894],{"class":38,"line":54},[36,111881,108773],{"class":50},[36,111883,70],{"class":42},[36,111885,108778],{"class":50},[36,111887,2199],{"class":42},[36,111889,103734],{"class":73},[36,111891,477],{"class":50},[36,111893,103734],{"class":73},[36,111895,1680],{"class":50},[19,111897,111898],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111900,111901],{},"限制动作：",[26,111903,111905],{"className":31709,"code":111904,"language":31711,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[33,111906,111907],{"__ignoreMap":31},[36,111908,111909,111912,111914,111916,111918,111920],{"class":38,"line":39},[36,111910,111911],{"class":50},"np.clip(action, ",[36,111913,2199],{"class":42},[36,111915,103734],{"class":73},[36,111917,477],{"class":50},[36,111919,103734],{"class":73},[36,111921,1680],{"class":50},[19,111923,111924,111925,111928],{},"因为 XML 里 ",[33,111926,111927],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[1645,111930,103039],{"id":103039},[26,111932,111933],{"className":31709,"code":111794,"language":31711,"meta":31,"style":31},[33,111934,111935,111943],{"__ignoreMap":31},[36,111936,111937,111939,111941],{"class":38,"line":39},[36,111938,33278],{"class":42},[36,111940,111325],{"class":46},[36,111942,111328],{"class":50},[36,111944,111945,111947],{"class":38,"line":54},[36,111946,239],{"class":42},[36,111948,111335],{"class":50},[19,111950,111951,111952,111955,111956,111959,111960,111963],{},"这段定义了一个函数，用来获取当前观测。",[33,111953,111954],{},"data.qpos.copy()"," 是位置数组副本，",[33,111957,111958],{},"data.qvel.copy()"," 是速度数组副本。",[33,111961,111962],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111965,111966],{},"在本章模型里：",[26,111968,111971],{"className":111969,"code":111970,"language":6676,"meta":31},[6674],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[33,111972,111970],{"__ignoreMap":31},[19,111974,111975],{},"所以返回的 obs 是：",[26,111977,111980],{"className":111978,"code":111979,"language":6676,"meta":31},[6674],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[33,111981,111979],{"__ignoreMap":31},[26,111983,111985],{"className":31709,"code":111984,"language":31711,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[33,111986,111987],{"__ignoreMap":31},[36,111988,111989,111991,111993,111995,111997],{"class":38,"line":39},[36,111990,33278],{"class":42},[36,111992,111350],{"class":46},[36,111994,111353],{"class":50},[36,111996,1713],{"class":73},[36,111998,5230],{"class":50},[19,112000,112001,112002,112005],{},"这行定义奖励函数。输入是观测 ",[33,112003,112004],{},"obs","，输出是一个浮点数奖励。",[26,112007,112009],{"className":31709,"code":112008,"language":31711,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[33,112010,112011,112024],{"__ignoreMap":31},[36,112012,112013,112016,112018,112020,112022],{"class":38,"line":39},[36,112014,112015],{"class":50},"cart_x ",[36,112017,70],{"class":42},[36,112019,111367],{"class":50},[36,112021,1859],{"class":73},[36,112023,34577],{"class":50},[36,112025,112026,112029,112031,112033,112035],{"class":38,"line":54},[36,112027,112028],{"class":50},"pole_angle ",[36,112030,70],{"class":42},[36,112032,111367],{"class":50},[36,112034,1885],{"class":73},[36,112036,34577],{"class":50},[19,112038,112039,112040,112043,112044,112047],{},"数组索引从 0 开始。",[33,112041,112042],{},"obs[0]"," 是第一个元素，也就是小车位置。",[33,112045,112046],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,112049,112050],{"className":31709,"code":111119,"language":31711,"meta":31,"style":31},[33,112051,112052],{"__ignoreMap":31},[36,112053,112054,112056,112058,112060,112062,112064,112066,112068,112070,112072,112074,112076,112078,112080],{"class":38,"line":39},[36,112055,18375],{"class":42},[36,112057,111128],{"class":73},[36,112059,222],{"class":50},[36,112061,103734],{"class":73},[36,112063,53602],{"class":42},[36,112065,111137],{"class":73},[36,112067,561],{"class":42},[36,112069,111142],{"class":50},[36,112071,2122],{"class":42},[36,112073,111142],{"class":50},[36,112075,2199],{"class":42},[36,112077,111151],{"class":50},[36,112079,2122],{"class":42},[36,112081,111156],{"class":50},[19,112083,112084,112085,112088,112089,112092],{},"这行计算奖励。",[33,112086,112087],{},"cart_x * cart_x"," 是小车位置的平方，",[33,112090,112091],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,112094,112096],{"className":31709,"code":112095,"language":31711,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[33,112097,112098],{"__ignoreMap":31},[36,112099,112100,112102,112104,112106,112108],{"class":38,"line":39},[36,112101,106030],{"class":50},[36,112103,1885],{"class":73},[36,112105,5932],{"class":50},[36,112107,70],{"class":42},[36,112109,111471],{"class":73},[19,112111,112112,112113,112115,112116,112118],{},"手动设置杆子的初始角度。因为 ",[33,112114,106787],{}," 是小车位置，",[33,112117,106790],{}," 是杆子角度，所以这里改的是杆子。",[26,112120,112121],{"className":31709,"code":105874,"language":31711,"meta":31,"style":31},[33,112122,112123],{"__ignoreMap":31},[36,112124,112125],{"class":38,"line":39},[36,112126,105874],{"class":50},[19,112128,106833,112129,112131],{},[33,112130,105361],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,112133,112135],{"className":31709,"code":112134,"language":31711,"meta":31,"style":31},"total_reward = 0.0\n",[33,112136,112137],{"__ignoreMap":31},[36,112138,112139,112142,112144],{"class":38,"line":39},[36,112140,112141],{"class":50},"total_reward ",[36,112143,70],{"class":42},[36,112145,106092],{"class":73},[19,112147,112148],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,112150,112152],{"className":31709,"code":112151,"language":31711,"meta":31,"style":31},"for step in range(1000):\n",[33,112153,112154],{"__ignoreMap":31},[36,112155,112156,112158,112160,112162,112164,112166,112168],{"class":38,"line":39},[36,112157,4516],{"class":42},[36,112159,32947],{"class":50},[36,112161,27374],{"class":42},[36,112163,33774],{"class":73},[36,112165,222],{"class":50},[36,112167,7889],{"class":73},[36,112169,32117],{"class":50},[19,112171,112172,112173,112175],{},"循环 1000 步。",[33,112174,108465],{}," 是当前步数，从 0 到 999。",[26,112177,112179],{"className":31709,"code":112178,"language":31711,"meta":31,"style":31},"obs = get_observation(data)\n",[33,112180,112181],{"__ignoreMap":31},[36,112182,112183,112186,112188],{"class":38,"line":39},[36,112184,112185],{"class":50},"obs ",[36,112187,70],{"class":42},[36,112189,111518],{"class":50},[19,112191,112192,112193,29716],{},"读取当前状态，保存到 ",[33,112194,112004],{},[26,112196,112198],{"className":31709,"code":112197,"language":31711,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[33,112199,112200,112212],{"__ignoreMap":31},[36,112201,112202,112204,112206,112208,112210],{"class":38,"line":39},[36,112203,112028],{"class":50},[36,112205,70],{"class":42},[36,112207,111367],{"class":50},[36,112209,1885],{"class":73},[36,112211,34577],{"class":50},[36,112213,112214,112217,112219,112221,112223],{"class":38,"line":54},[36,112215,112216],{"class":50},"pole_angular_velocity ",[36,112218,70],{"class":42},[36,112220,111367],{"class":50},[36,112222,1741],{"class":73},[36,112224,34577],{"class":50},[19,112226,112227,112228,112231,112232,29716],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[33,112229,112230],{},"obs[3]","？因为 obs 的顺序是 ",[33,112233,112234],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,112236,112238],{"className":31709,"code":112237,"language":31711,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[33,112239,112240],{"__ignoreMap":31},[36,112241,112242,112244,112246,112248,112250,112252,112254,112256,112258],{"class":38,"line":39},[36,112243,108773],{"class":50},[36,112245,70],{"class":42},[36,112247,111558],{"class":73},[36,112249,561],{"class":42},[36,112251,111151],{"class":50},[36,112253,2148],{"class":42},[36,112255,63198],{"class":73},[36,112257,561],{"class":42},[36,112259,111571],{"class":50},[19,112261,112262,112263,102349,112265,112267],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[33,112264,106591],{},[33,112266,36660],{}," 是人为设置的系数，不是固定公式。",[26,112269,112271],{"className":31709,"code":112270,"language":31711,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[33,112272,112273],{"__ignoreMap":31},[36,112274,112275,112277,112279,112281,112283,112285,112287,112289],{"class":38,"line":39},[36,112276,108773],{"class":50},[36,112278,70],{"class":42},[36,112280,108778],{"class":50},[36,112282,2199],{"class":42},[36,112284,103734],{"class":73},[36,112286,477],{"class":50},[36,112288,103734],{"class":73},[36,112290,1680],{"class":50},[19,112292,112293],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,112295,112296],{"className":31709,"code":111104,"language":31711,"meta":31,"style":31},[33,112297,112298],{"__ignoreMap":31},[36,112299,112300,112302,112304,112306,112308],{"class":38,"line":39},[36,112301,107202],{"class":50},[36,112303,1859],{"class":73},[36,112305,5932],{"class":50},[36,112307,70],{"class":42},[36,112309,108801],{"class":50},[19,112311,112312],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,112314,112315],{"className":31709,"code":105836,"language":31711,"meta":31,"style":31},[33,112316,112317],{"__ignoreMap":31},[36,112318,112319],{"class":38,"line":39},[36,112320,105836],{"class":50},[19,112322,112323,112324,112326],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[33,112325,107457],{}," 计算小车和杆子的下一刻状态。",[26,112328,112330],{"className":31709,"code":112329,"language":31711,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[33,112331,112332,112341],{"__ignoreMap":31},[36,112333,112334,112337,112339],{"class":38,"line":39},[36,112335,112336],{"class":50},"reward ",[36,112338,70],{"class":42},[36,112340,111623],{"class":50},[36,112342,112343,112345,112347],{"class":38,"line":54},[36,112344,112141],{"class":50},[36,112346,10945],{"class":42},[36,112348,111633],{"class":50},[19,112350,112351,112352,112354,112355,112358,112359,29716],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[33,112353,10945],{}," 是简写，",[33,112356,112357],{},"total_reward += reward"," 等价于 ",[33,112360,112361],{},"total_reward = total_reward + reward",[26,112363,112365],{"className":31709,"code":112364,"language":31711,"meta":31,"style":31},"if step % 100 == 0:\n",[33,112366,112367],{"__ignoreMap":31},[36,112368,112369,112371,112373,112375,112377,112379,112381],{"class":38,"line":39},[36,112370,3061],{"class":42},[36,112372,32947],{"class":50},[36,112374,1996],{"class":42},[36,112376,162],{"class":73},[36,112378,102890],{"class":42},[36,112380,242],{"class":73},[36,112382,5230],{"class":50},[19,112384,112385,112387,112388,112391],{},[33,112386,1996],{}," 是取余数。",[33,112389,112390],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,112393,112395],{"className":31709,"code":112394,"language":31711,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[33,112396,112397],{"__ignoreMap":31},[36,112398,112399,112401,112403,112405,112407,112409,112411,112413,112415,112417,112419,112421,112423,112425,112427,112429],{"class":38,"line":39},[36,112400,31746],{"class":73},[36,112402,222],{"class":50},[36,112404,111662],{"class":110},[36,112406,111665],{"class":50},[36,112408,111668],{"class":110},[36,112410,111671],{"class":50},[36,112412,1741],{"class":73},[36,112414,111676],{"class":50},[36,112416,111679],{"class":110},[36,112418,477],{"class":50},[36,112420,33349],{"class":73},[36,112422,222],{"class":50},[36,112424,1713],{"class":73},[36,112426,111690],{"class":50},[36,112428,1741],{"class":73},[36,112430,31828],{"class":50},[19,112432,112433,112434,112437,112438,112441],{},"打印当前步数、观测和动作。",[33,112435,112436],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[33,112439,112440],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112443,103647],{"id":103646},[19,112445,112446],{},"观测向量:",[26,112448,112451],{"className":112449,"code":112450,"language":6676,"meta":31},[6674],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,112452,112450],{"__ignoreMap":31},[19,112454,112455],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112457,112458],{},"每隔 100 步会打印一次：",[26,112460,112463],{"className":112461,"code":112462,"language":6676,"meta":31},[6674],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[33,112464,112462],{"__ignoreMap":31},[19,112466,112467],{},"重点观察：",[256,112469,112470,112476,112481],{},[259,112471,112472,112475],{},[33,112473,112474],{},"pole_angle"," 是否越来越大。",[259,112477,112478,112480],{},[33,112479,111057],{}," 是否跑得太远。",[259,112482,112483,112484,83870,112486,29716],{},"action 是否经常被 clip 到 ",[33,112485,105246],{},[33,112487,1885],{},[19,112489,112490],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112492,103679],{"id":103678},[256,112494,112495,112501,112504,112510,112520,112526,112529],{},[259,112496,112497,112498,29716],{},"把初始角度改为 ",[33,112499,112500],{},"data.qpos[1] = 0.3",[259,112502,112503],{},"重新运行，观察控制是否变差。",[259,112505,112506,112507,112509],{},"把 actuator ",[33,112508,108398],{}," 改小。",[259,112511,112512,112513,112516,112517,29716],{},"打印 ",[33,112514,112515],{},"model.nq, model.nv, model.nu","，应为 ",[33,112518,112519],{},"2 2 1",[259,112521,112522,112523,112525],{},"把 reward 里的 ",[33,112524,112091],{}," 系数改大，观察总奖励变化。",[259,112527,112528],{},"把控制器改成反号，观察杆子是否更容易倒。",[259,112530,112531],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112533,103784],{"id":103783},[1645,112535,112536],{"id":112536},"杆子方向和预期不一致",[19,112538,103727,112539,112541,112542,112544],{},[33,112540,107570],{}," 和 capsule 的 ",[33,112543,104507],{},"，必要时用 viewer 可视化确认。",[1645,112546,112547],{"id":112547},"控制器越控越倒",[19,112549,112550],{},"说明反馈符号可能反了，尝试:",[26,112552,112554],{"className":31709,"code":112553,"language":31711,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[33,112555,112556],{"__ignoreMap":31},[36,112557,112558,112560,112562,112564,112566,112568,112570,112572,112574,112576],{"class":38,"line":39},[36,112559,108773],{"class":50},[36,112561,70],{"class":42},[36,112563,53602],{"class":42},[36,112565,106591],{"class":73},[36,112567,561],{"class":42},[36,112569,111151],{"class":50},[36,112571,2199],{"class":42},[36,112573,63198],{"class":73},[36,112575,561],{"class":42},[36,112577,111571],{"class":50},[1645,112579,112580],{"id":112580},"小车飞走",[19,112582,112583,112584,112586,112587,112590],{},"降低 ",[33,112585,108398],{}," 或缩小 ",[33,112588,112589],{},"action"," 的 clip 范围。",[1645,112592,112594,112596],{"id":112593},"obs3-为什么是杆子角速度",[33,112595,112230],{}," 为什么是杆子角速度",[19,112598,112599],{},"因为这个模型里：",[26,112601,112604],{"className":112602,"code":112603,"language":6676,"meta":31},[6674],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[33,112605,112603],{"__ignoreMap":31},[19,112607,111078],{},[26,112609,112612],{"className":112610,"code":112611,"language":6676,"meta":31},[6674],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[33,112613,112611],{"__ignoreMap":31},[1645,112615,112617],{"id":112616},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112619,112620],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112622,103938],{"id":103937},[19,112624,112625],{},"一个控制任务通常包含：",[256,112627,112628,112631,112639,112644,112647],{},[259,112629,112630],{},"模型：Cartpole 的 body、joint、actuator。",[259,112632,112633,112634,1880,112636,112638],{},"观测：从 ",[33,112635,105361],{},[33,112637,105691],{}," 里取状态。",[259,112640,112641,112642,29716],{},"动作：写入 ",[33,112643,102407],{},[259,112645,112646],{},"奖励：根据任务目标打分。",[259,112648,112649],{},"循环：obs -> action -> step -> reward。",[19,112651,112652],{},"这就是后面 Gymnasium 环境的基本骨架。",[1592,112654,105617],{},{"title":31,"searchDepth":54,"depth":54,"links":112656},[112657,112658,112659,112664,112668,112669,112670,112678],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":112660},[112661,112662,112663],{"id":111031,"depth":61,"text":111032},{"id":111096,"depth":61,"text":111097},{"id":111112,"depth":61,"text":111113},{"id":102583,"depth":54,"text":102584,"children":112665},[112666,112667],{"id":102903,"depth":61,"text":102903},{"id":103039,"depth":61,"text":103039},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":112671},[112672,112673,112674,112675,112677],{"id":112536,"depth":61,"text":112536},{"id":112547,"depth":61,"text":112547},{"id":112580,"depth":61,"text":112580},{"id":112593,"depth":61,"text":112676},"obs[3] 为什么是杆子角速度",{"id":112616,"depth":61,"text":112617},{"id":103937,"depth":54,"text":103938},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110767,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112685,"title":112686,"body":112687,"description":31,"extension":1603,"meta":114701,"navigation":57,"path":114702,"seo":114703,"stem":114704,"__hash__":114705},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112688,"toc":114677},[112689,112692,112694,112697,112699,112716,112719,112722,112728,112731,112733,112735,112759,112761,112775,112777,112818,112820,112838,112840,112843,112849,112852,112880,112884,112890,112915,112918,112949,112956,112959,112962,112968,112971,112977,112980,112986,112990,112993,113018,113021,113023,113783,113785,113797,113799,113810,113812,113815,113832,113835,113837,113848,113851,113853,113899,113902,113915,113918,114000,114003,114005,114021,114031,114044,114047,114086,114096,114107,114117,114130,114133,114162,114165,114175,114178,114184,114201,114212,114214,114220,114237,114248,114269,114272,114284,114287,114308,114311,114319,114327,114344,114347,114416,114423,114431,114434,114447,114454,114456,114459,114465,114468,114471,114477,114483,114485,114525,114527,114533,114542,114545,114547,114567,114570,114573,114579,114583,114585,114612,114615,114618,114645,114651,114654,114657,114659,114662,114665,114671,114674],[10,112690,112686],{"id":112691},"_7控制任务reacher-机械臂到达目标",[14,112693,101978],{"id":101977},[19,112695,112696],{},"本章搭建一个二维两关节 reacher 任务。",[19,112698,105662],{},[256,112700,112701,112704,112707,112710,112713],{},[259,112702,112703],{},"两个 hinge joint",[259,112705,112706],{},"两个 motor actuator",[259,112708,112709],{},"site 作为末端点和目标点",[259,112711,112712],{},"根据末端和目标距离设计 reward",[259,112714,112715],{},"构造机械臂任务的基本形式",[19,112717,112718],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112720,112721],{},"Reacher 任务可以理解为：",[26,112723,112726],{"className":112724,"code":112725,"language":6676,"meta":31},[6674],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[33,112727,112725],{"__ignoreMap":31},[19,112729,112730],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112732,102101],{"id":102100},[19,112734,102104],{},[26,112736,112737],{"className":25152,"code":105719,"language":25154,"meta":31,"style":31},[33,112738,112739],{"__ignoreMap":31},[36,112740,112741,112743,112745,112747,112749,112751,112753,112755,112757],{"class":38,"line":39},[36,112742,25907],{"class":46},[36,112744,27646],{"class":110},[36,112746,25164],{"class":110},[36,112748,27731],{"class":73},[36,112750,105734],{"class":110},[36,112752,102129],{"class":110},[36,112754,103832],{"class":110},[36,112756,102145],{"class":110},[36,112758,105743],{"class":110},[19,112760,104150],{},[26,112762,112763],{"className":25152,"code":102250,"language":25154,"meta":31,"style":31},[33,112764,112765],{"__ignoreMap":31},[36,112766,112767,112769,112771,112773],{"class":38,"line":39},[36,112768,25161],{"class":46},[36,112770,25164],{"class":110},[36,112772,102261],{"class":110},[36,112774,102264],{"class":110},[19,112776,104167],{},[26,112778,112780],{"className":25152,"code":112779,"language":25154,"meta":31,"style":31},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[33,112781,112782,112799,112808],{"__ignoreMap":31},[36,112783,112784,112786,112788,112790,112793,112795,112797],{"class":38,"line":39},[36,112785,31661],{"class":46},[36,112787,30507],{"class":110},[36,112789,26446],{"class":73},[36,112791,112792],{"class":110}," mujoco-reacher",[36,112794,102306],{"class":110},[36,112796,102309],{"class":73},[36,112798,102312],{"class":73},[36,112800,112801,112803,112805],{"class":38,"line":54},[36,112802,31661],{"class":46},[36,112804,102319],{"class":110},[36,112806,112807],{"class":110}," mujoco-reacher\n",[36,112809,112810,112812,112814,112816],{"class":38,"line":61},[36,112811,25161],{"class":46},[36,112813,25164],{"class":110},[36,112815,102261],{"class":110},[36,112817,102264],{"class":110},[19,112819,102335],{},[256,112821,112822,112825,112828],{},[259,112823,112824],{},"本章使用低维状态，不使用图像输入。",[259,112826,112827],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[259,112829,112830,112831,1880,112833,1880,112835,112837],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[33,112832,105361],{},[33,112834,105691],{},[33,112836,105011],{}," 的方法一致。",[14,112839,102376],{"id":102375},[19,112841,112842],{},"Reacher 任务核心:",[26,112844,112847],{"className":112845,"code":112846,"language":6676,"meta":31},[6674],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[33,112848,112846],{"__ignoreMap":31},[19,112850,112851],{},"读取 site 世界坐标:",[26,112853,112855],{"className":31709,"code":112854,"language":31711,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[33,112856,112857,112870],{"__ignoreMap":31},[36,112858,112859,112861,112863,112865,112868],{"class":38,"line":39},[36,112860,104965],{"class":50},[36,112862,70],{"class":42},[36,112864,104736],{"class":50},[36,112866,112867],{"class":110},"\"tip\"",[36,112869,1680],{"class":50},[36,112871,112872,112875,112877],{"class":38,"line":54},[36,112873,112874],{"class":50},"tip_pos ",[36,112876,70],{"class":42},[36,112878,112879],{"class":50}," data.site_xpos[site_id]\n",[1645,112881,112883],{"id":112882},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112885,112886,112887,112889],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[33,112888,105361],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,112891,112893],{"className":31709,"code":112892,"language":31711,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[33,112894,112895,112905],{"__ignoreMap":31},[36,112896,112897,112900,112902],{"class":38,"line":39},[36,112898,112899],{"class":50},"tip ",[36,112901,70],{"class":42},[36,112903,112904],{"class":50}," data.site_xpos[tip_site_id]\n",[36,112906,112907,112910,112912],{"class":38,"line":54},[36,112908,112909],{"class":50},"target ",[36,112911,70],{"class":42},[36,112913,112914],{"class":50}," data.site_xpos[target_site_id]\n",[19,112916,112917],{},"这样 reward 就很容易写：",[26,112919,112921],{"className":31709,"code":112920,"language":31711,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[33,112922,112923,112938],{"__ignoreMap":31},[36,112924,112925,112928,112930,112933,112935],{"class":38,"line":39},[36,112926,112927],{"class":50},"dist ",[36,112929,70],{"class":42},[36,112931,112932],{"class":50}," np.linalg.norm(tip ",[36,112934,2199],{"class":42},[36,112936,112937],{"class":50}," target)\n",[36,112939,112940,112942,112944,112946],{"class":38,"line":54},[36,112941,112336],{"class":50},[36,112943,70],{"class":42},[36,112945,53602],{"class":42},[36,112947,112948],{"class":50},"dist\n",[19,112950,112951,112952,112955],{},"距离越小，",[33,112953,112954],{},"-dist"," 越接近 0，奖励越高。",[1645,112957,112958],{"id":112958},"两关节机械臂的状态",[19,112960,112961],{},"这个模型有两个 hinge joint：",[26,112963,112966],{"className":112964,"code":112965,"language":6676,"meta":31},[6674],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[33,112967,112965],{"__ignoreMap":31},[19,112969,112970],{},"再加上末端和目标位置：",[26,112972,112975],{"className":112973,"code":112974,"language":6676,"meta":31},[6674],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[33,112976,112974],{"__ignoreMap":31},[19,112978,112979],{},"总维度：",[26,112981,112984],{"className":112982,"code":112983,"language":6676,"meta":31},[6674],"2 + 2 + 3 + 3 = 10\n",[33,112985,112983],{"__ignoreMap":31},[1645,112987,112989],{"id":112988},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112991,112992],{},"本章把重力设为：",[26,112994,112996],{"className":54398,"code":112995,"language":54400,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,112997,112998],{"__ignoreMap":31},[36,112999,113000,113002,113004,113006,113008,113010,113012,113014,113016],{"class":38,"line":39},[36,113001,2577],{"class":50},[36,113003,70497],{"class":52631},[36,113005,102525],{"class":46},[36,113007,70],{"class":50},[36,113009,102530],{"class":110},[36,113011,102533],{"class":46},[36,113013,70],{"class":50},[36,113015,105102],{"class":110},[36,113017,102475],{"class":50},[19,113019,113020],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113022,102584],{"id":102583},[26,113024,113026],{"className":31709,"code":113025,"language":31711,"meta":31,"style":31},"import mujoco\nimport numpy as np\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"two_link_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\ndef site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n    site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n    if site_id \u003C 0:\n        raise RuntimeError(f\"site not found: {name}\")\n    return data.site_xpos[site_id].copy()\n\n\ndef get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n\n\ndef reward(model: mujoco.MjModel, data: mujoco.MjData) -> float:\n    tip = site_position(model, data, \"tip\")\n    target = site_position(model, data, \"target\")\n    dist = np.linalg.norm(tip - target)\n    control_cost = 0.01 * np.sum(np.square(data.ctrl))\n    return float(-dist - control_cost)\n\n\ndef main() -> None:\n    model = mujoco.MjModel.from_xml_string(XML)\n    data = mujoco.MjData(model)\n    total_reward = 0.0\n\n    for step in range(500):\n        mujoco.mj_forward(model, data)\n        tip = site_position(model, data, \"tip\")\n        target = site_position(model, data, \"target\")\n        error = target - tip\n\n        data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\n        data.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n\n        mujoco.mj_step(model, data)\n        total_reward += reward(model, data)\n\n        if step % 100 == 0:\n            obs = get_obs(model, data)\n            print(\"step:\", step)\n            print(\"  tip:\", np.round(tip, 3))\n            print(\"  target:\", np.round(target, 3))\n            print(\"  ctrl:\", np.round(data.ctrl.copy(), 3))\n            print(\"  obs_dim:\", obs.shape[0])\n\n    print(\"total_reward:\", round(total_reward, 3))\n    print(\"final tip:\", np.round(site_position(model, data, \"tip\"), 3))\n    print(\"target:\", np.round(site_position(model, data, \"target\"), 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,113027,113028,113034,113044,113048,113052,113060,113065,113070,113074,113078,113083,113088,113092,113097,113102,113107,113111,113116,113121,113126,113131,113135,113139,113143,113147,113151,113156,113161,113165,113169,113173,113177,113181,113196,113205,113217,113240,113247,113251,113255,113265,113279,113293,113300,113304,113308,113322,113334,113346,113359,113374,113391,113395,113399,113411,113423,113431,113439,113443,113459,113464,113477,113490,113505,113509,113544,113576,113580,113584,113593,113597,113613,113623,113634,113650,113666,113682,113698,113702,113720,113740,113759,113763,113767,113779],{"__ignoreMap":31},[36,113029,113030,113032],{"class":38,"line":39},[36,113031,31723],{"class":42},[36,113033,102632],{"class":50},[36,113035,113036,113038,113040,113042],{"class":38,"line":54},[36,113037,31723],{"class":42},[36,113039,32711],{"class":50},[36,113041,32714],{"class":42},[36,113043,32717],{"class":50},[36,113045,113046],{"class":38,"line":61},[36,113047,58],{"emptyLinePlaceholder":57},[36,113049,113050],{"class":38,"line":80},[36,113051,58],{"emptyLinePlaceholder":57},[36,113053,113054,113056,113058],{"class":38,"line":96},[36,113055,102645],{"class":73},[36,113057,14893],{"class":42},[36,113059,102650],{"class":110},[36,113061,113062],{"class":38,"line":101},[36,113063,113064],{"class":110},"\u003Cmujoco model=\"two_link_reacher\">\n",[36,113066,113067],{"class":38,"line":128},[36,113068,113069],{"class":110},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,113071,113072],{"class":38,"line":149},[36,113073,58],{"emptyLinePlaceholder":57},[36,113075,113076],{"class":38,"line":154},[36,113077,102669],{"class":110},[36,113079,113080],{"class":38,"line":167},[36,113081,113082],{"class":110},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[36,113084,113085],{"class":38,"line":172},[36,113086,113087],{"class":110},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[36,113089,113090],{"class":38,"line":192},[36,113091,58],{"emptyLinePlaceholder":57},[36,113093,113094],{"class":38,"line":211},[36,113095,113096],{"class":110},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[36,113098,113099],{"class":38,"line":216},[36,113100,113101],{"class":110},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,113103,113104],{"class":38,"line":231},[36,113105,113106],{"class":110},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,113108,113109],{"class":38,"line":236},[36,113110,58],{"emptyLinePlaceholder":57},[36,113112,113113],{"class":38,"line":247},[36,113114,113115],{"class":110},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[36,113117,113118],{"class":38,"line":637},[36,113119,113120],{"class":110},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,113122,113123],{"class":38,"line":646},[36,113124,113125],{"class":110},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[36,113127,113128],{"class":38,"line":655},[36,113129,113130],{"class":110},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[36,113132,113133],{"class":38,"line":660},[36,113134,107769],{"class":110},[36,113136,113137],{"class":38,"line":665},[36,113138,102698],{"class":110},[36,113140,113141],{"class":38,"line":674},[36,113142,102703],{"class":110},[36,113144,113145],{"class":38,"line":679},[36,113146,58],{"emptyLinePlaceholder":57},[36,113148,113149],{"class":38,"line":692},[36,113150,107786],{"class":110},[36,113152,113153],{"class":38,"line":705},[36,113154,113155],{"class":110},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,113157,113158],{"class":38,"line":710},[36,113159,113160],{"class":110},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,113162,113163],{"class":38,"line":722},[36,113164,107796],{"class":110},[36,113166,113167],{"class":38,"line":750},[36,113168,102708],{"class":110},[36,113170,113171],{"class":38,"line":755},[36,113172,97029],{"class":110},[36,113174,113175],{"class":38,"line":777},[36,113176,58],{"emptyLinePlaceholder":57},[36,113178,113179],{"class":38,"line":802},[36,113180,58],{"emptyLinePlaceholder":57},[36,113182,113183,113185,113188,113191,113193],{"class":38,"line":807},[36,113184,33278],{"class":42},[36,113186,113187],{"class":46}," site_position",[36,113189,113190],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[36,113192,2835],{"class":73},[36,113194,113195],{"class":50},") -> np.ndarray:\n",[36,113197,113198,113200,113202],{"class":38,"line":818},[36,113199,104731],{"class":50},[36,113201,70],{"class":42},[36,113203,113204],{"class":50}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,113206,113207,113209,113211,113213,113215],{"class":38,"line":843},[36,113208,4592],{"class":42},[36,113210,104780],{"class":50},[36,113212,2577],{"class":42},[36,113214,242],{"class":73},[36,113216,5230],{"class":50},[36,113218,113219,113221,113223,113225,113227,113230,113232,113234,113236,113238],{"class":38,"line":848},[36,113220,104763],{"class":42},[36,113222,104766],{"class":73},[36,113224,222],{"class":50},[36,113226,1724],{"class":42},[36,113228,113229],{"class":110},"\"site not found: ",[36,113231,2563],{"class":73},[36,113233,81141],{"class":50},[36,113235,2613],{"class":73},[36,113237,1919],{"class":110},[36,113239,1680],{"class":50},[36,113241,113242,113244],{"class":38,"line":859},[36,113243,239],{"class":42},[36,113245,113246],{"class":50}," data.site_xpos[site_id].copy()\n",[36,113248,113249],{"class":38,"line":864},[36,113250,58],{"emptyLinePlaceholder":57},[36,113252,113253],{"class":38,"line":873},[36,113254,58],{"emptyLinePlaceholder":57},[36,113256,113257,113259,113262],{"class":38,"line":9454},[36,113258,33278],{"class":42},[36,113260,113261],{"class":46}," get_obs",[36,113263,113264],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,113266,113267,113270,113272,113275,113277],{"class":38,"line":9481},[36,113268,113269],{"class":50},"    tip ",[36,113271,70],{"class":42},[36,113273,113274],{"class":50}," site_position(model, data, ",[36,113276,112867],{"class":110},[36,113278,1680],{"class":50},[36,113280,113281,113284,113286,113288,113291],{"class":38,"line":9486},[36,113282,113283],{"class":50},"    target ",[36,113285,70],{"class":42},[36,113287,113274],{"class":50},[36,113289,113290],{"class":110},"\"target\"",[36,113292,1680],{"class":50},[36,113294,113295,113297],{"class":38,"line":9492},[36,113296,239],{"class":42},[36,113298,113299],{"class":50}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,113301,113302],{"class":38,"line":9504},[36,113303,58],{"emptyLinePlaceholder":57},[36,113305,113306],{"class":38,"line":9516},[36,113307,58],{"emptyLinePlaceholder":57},[36,113309,113310,113312,113315,113318,113320],{"class":38,"line":9528},[36,113311,33278],{"class":42},[36,113313,113314],{"class":46}," reward",[36,113316,113317],{"class":50},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,113319,1713],{"class":73},[36,113321,5230],{"class":50},[36,113323,113324,113326,113328,113330,113332],{"class":38,"line":11184},[36,113325,113269],{"class":50},[36,113327,70],{"class":42},[36,113329,113274],{"class":50},[36,113331,112867],{"class":110},[36,113333,1680],{"class":50},[36,113335,113336,113338,113340,113342,113344],{"class":38,"line":11209},[36,113337,113283],{"class":50},[36,113339,70],{"class":42},[36,113341,113274],{"class":50},[36,113343,113290],{"class":110},[36,113345,1680],{"class":50},[36,113347,113348,113351,113353,113355,113357],{"class":38,"line":11232},[36,113349,113350],{"class":50},"    dist ",[36,113352,70],{"class":42},[36,113354,112932],{"class":50},[36,113356,2199],{"class":42},[36,113358,112937],{"class":50},[36,113360,113361,113364,113366,113369,113371],{"class":38,"line":11256},[36,113362,113363],{"class":50},"    control_cost ",[36,113365,70],{"class":42},[36,113367,113368],{"class":73}," 0.01",[36,113370,561],{"class":42},[36,113372,113373],{"class":50}," np.sum(np.square(data.ctrl))\n",[36,113375,113376,113378,113380,113382,113384,113386,113388],{"class":38,"line":11261},[36,113377,239],{"class":42},[36,113379,111128],{"class":73},[36,113381,222],{"class":50},[36,113383,2199],{"class":42},[36,113385,112927],{"class":50},[36,113387,2199],{"class":42},[36,113389,113390],{"class":50}," control_cost)\n",[36,113392,113393],{"class":38,"line":11266},[36,113394,58],{"emptyLinePlaceholder":57},[36,113396,113397],{"class":38,"line":11271},[36,113398,58],{"emptyLinePlaceholder":57},[36,113400,113401,113403,113405,113407,113409],{"class":38,"line":11280},[36,113402,33278],{"class":42},[36,113404,47],{"class":46},[36,113406,102729],{"class":50},[36,113408,97017],{"class":73},[36,113410,5230],{"class":50},[36,113412,113413,113415,113417,113419,113421],{"class":38,"line":11285},[36,113414,102738],{"class":50},[36,113416,70],{"class":42},[36,113418,102743],{"class":50},[36,113420,102645],{"class":73},[36,113422,1680],{"class":50},[36,113424,113425,113427,113429],{"class":38,"line":11291},[36,113426,102752],{"class":50},[36,113428,70],{"class":42},[36,113430,102757],{"class":50},[36,113432,113433,113435,113437],{"class":38,"line":11312},[36,113434,111484],{"class":50},[36,113436,70],{"class":42},[36,113438,106092],{"class":73},[36,113440,113441],{"class":38,"line":11318},[36,113442,58],{"emptyLinePlaceholder":57},[36,113444,113445,113447,113449,113451,113453,113455,113457],{"class":38,"line":11332},[36,113446,4692],{"class":42},[36,113448,32947],{"class":50},[36,113450,27374],{"class":42},[36,113452,33774],{"class":73},[36,113454,222],{"class":50},[36,113456,66405],{"class":73},[36,113458,32117],{"class":50},[36,113460,113461],{"class":38,"line":11338},[36,113462,113463],{"class":50},"        mujoco.mj_forward(model, data)\n",[36,113465,113466,113469,113471,113473,113475],{"class":38,"line":11365},[36,113467,113468],{"class":50},"        tip ",[36,113470,70],{"class":42},[36,113472,113274],{"class":50},[36,113474,112867],{"class":110},[36,113476,1680],{"class":50},[36,113478,113479,113482,113484,113486,113488],{"class":38,"line":11374},[36,113480,113481],{"class":50},"        target ",[36,113483,70],{"class":42},[36,113485,113274],{"class":50},[36,113487,113290],{"class":110},[36,113489,1680],{"class":50},[36,113491,113492,113495,113497,113500,113502],{"class":38,"line":11380},[36,113493,113494],{"class":50},"        error ",[36,113496,70],{"class":42},[36,113498,113499],{"class":50}," target ",[36,113501,2199],{"class":42},[36,113503,113504],{"class":50}," tip\n",[36,113506,113507],{"class":38,"line":11388},[36,113508,58],{"emptyLinePlaceholder":57},[36,113510,113511,113513,113515,113517,113519,113522,113524,113526,113529,113531,113534,113536,113538,113540,113542],{"class":38,"line":11393},[36,113512,107948],{"class":50},[36,113514,1859],{"class":73},[36,113516,5932],{"class":50},[36,113518,70],{"class":42},[36,113520,113521],{"class":50}," np.clip(",[36,113523,106591],{"class":73},[36,113525,561],{"class":42},[36,113527,113528],{"class":50}," error[",[36,113530,1747],{"class":73},[36,113532,113533],{"class":50},"], ",[36,113535,2199],{"class":42},[36,113537,103734],{"class":73},[36,113539,477],{"class":50},[36,113541,103734],{"class":73},[36,113543,1680],{"class":50},[36,113545,113546,113548,113550,113552,113554,113556,113558,113560,113562,113564,113566,113568,113570,113572,113574],{"class":38,"line":17933},[36,113547,107948],{"class":50},[36,113549,1885],{"class":73},[36,113551,5932],{"class":50},[36,113553,70],{"class":42},[36,113555,113521],{"class":50},[36,113557,106591],{"class":73},[36,113559,561],{"class":42},[36,113561,113528],{"class":50},[36,113563,1859],{"class":73},[36,113565,113533],{"class":50},[36,113567,2199],{"class":42},[36,113569,103734],{"class":73},[36,113571,477],{"class":50},[36,113573,103734],{"class":73},[36,113575,1680],{"class":50},[36,113577,113578],{"class":38,"line":17939},[36,113579,58],{"emptyLinePlaceholder":57},[36,113581,113582],{"class":38,"line":17962},[36,113583,102847],{"class":50},[36,113585,113586,113588,113590],{"class":38,"line":17968},[36,113587,111628],{"class":50},[36,113589,10945],{"class":42},[36,113591,113592],{"class":50}," reward(model, data)\n",[36,113594,113595],{"class":38,"line":17991},[36,113596,58],{"emptyLinePlaceholder":57},[36,113598,113599,113601,113603,113605,113607,113609,113611],{"class":38,"line":18005},[36,113600,3999],{"class":42},[36,113602,32947],{"class":50},[36,113604,1996],{"class":42},[36,113606,162],{"class":73},[36,113608,102890],{"class":42},[36,113610,242],{"class":73},[36,113612,5230],{"class":50},[36,113614,113615,113618,113620],{"class":38,"line":18025},[36,113616,113617],{"class":50},"            obs ",[36,113619,70],{"class":42},[36,113621,113622],{"class":50}," get_obs(model, data)\n",[36,113624,113625,113627,113629,113631],{"class":38,"line":18031},[36,113626,35981],{"class":73},[36,113628,222],{"class":50},[36,113630,111662],{"class":110},[36,113632,113633],{"class":50},", step)\n",[36,113635,113636,113638,113640,113643,113646,113648],{"class":38,"line":18042},[36,113637,35981],{"class":73},[36,113639,222],{"class":50},[36,113641,113642],{"class":110},"\"  tip:\"",[36,113644,113645],{"class":50},", np.round(tip, ",[36,113647,1741],{"class":73},[36,113649,31828],{"class":50},[36,113651,113652,113654,113656,113659,113662,113664],{"class":38,"line":18065},[36,113653,35981],{"class":73},[36,113655,222],{"class":50},[36,113657,113658],{"class":110},"\"  target:\"",[36,113660,113661],{"class":50},", np.round(target, ",[36,113663,1741],{"class":73},[36,113665,31828],{"class":50},[36,113667,113668,113670,113672,113675,113678,113680],{"class":38,"line":18087},[36,113669,35981],{"class":73},[36,113671,222],{"class":50},[36,113673,113674],{"class":110},"\"  ctrl:\"",[36,113676,113677],{"class":50},", np.round(data.ctrl.copy(), ",[36,113679,1741],{"class":73},[36,113681,31828],{"class":50},[36,113683,113684,113686,113688,113691,113694,113696],{"class":38,"line":18092},[36,113685,35981],{"class":73},[36,113687,222],{"class":50},[36,113689,113690],{"class":110},"\"  obs_dim:\"",[36,113692,113693],{"class":50},", obs.shape[",[36,113695,1859],{"class":73},[36,113697,6146],{"class":50},[36,113699,113700],{"class":38,"line":18098},[36,113701,58],{"emptyLinePlaceholder":57},[36,113703,113704,113706,113708,113710,113712,113714,113716,113718],{"class":38,"line":18112},[36,113705,32630],{"class":73},[36,113707,222],{"class":50},[36,113709,111707],{"class":110},[36,113711,477],{"class":50},[36,113713,33349],{"class":73},[36,113715,111714],{"class":50},[36,113717,1741],{"class":73},[36,113719,31828],{"class":50},[36,113721,113722,113724,113726,113729,113732,113734,113736,113738],{"class":38,"line":18125},[36,113723,32630],{"class":73},[36,113725,222],{"class":50},[36,113727,113728],{"class":110},"\"final tip:\"",[36,113730,113731],{"class":50},", np.round(site_position(model, data, ",[36,113733,112867],{"class":110},[36,113735,111676],{"class":50},[36,113737,1741],{"class":73},[36,113739,31828],{"class":50},[36,113741,113742,113744,113746,113749,113751,113753,113755,113757],{"class":38,"line":18130},[36,113743,32630],{"class":73},[36,113745,222],{"class":50},[36,113747,113748],{"class":110},"\"target:\"",[36,113750,113731],{"class":50},[36,113752,113290],{"class":110},[36,113754,111676],{"class":50},[36,113756,1741],{"class":73},[36,113758,31828],{"class":50},[36,113760,113761],{"class":38,"line":18144},[36,113762,58],{"emptyLinePlaceholder":57},[36,113764,113765],{"class":38,"line":18149},[36,113766,58],{"emptyLinePlaceholder":57},[36,113768,113769,113771,113773,113775,113777],{"class":38,"line":18155},[36,113770,3061],{"class":42},[36,113772,32551],{"class":73},[36,113774,102890],{"class":42},[36,113776,102893],{"class":110},[36,113778,5230],{"class":50},[36,113780,113781],{"class":38,"line":18160},[36,113782,102900],{"class":50},[19,113784,104901],{},[26,113786,113788],{"className":25152,"code":113787,"language":25154,"meta":31,"style":31},"touch ch7_reacher.py\n",[33,113789,113790],{"__ignoreMap":31},[36,113791,113792,113794],{"class":38,"line":39},[36,113793,102614],{"class":46},[36,113795,113796],{"class":110}," ch7_reacher.py\n",[19,113798,111775],{},[26,113800,113802],{"className":25152,"code":113801,"language":25154,"meta":31,"style":31},"python ch7_reacher.py\n",[33,113803,113804],{"__ignoreMap":31},[36,113805,113806,113808],{"class":38,"line":39},[36,113807,31711],{"class":46},[36,113809,113796],{"class":110},[1645,113811,102903],{"id":102903},[19,113813,113814],{},"读取 site 坐标：",[26,113816,113818],{"className":31709,"code":113817,"language":31711,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[33,113819,113820],{"__ignoreMap":31},[36,113821,113822,113824,113826,113828,113830],{"class":38,"line":39},[36,113823,33278],{"class":42},[36,113825,113187],{"class":46},[36,113827,113190],{"class":50},[36,113829,2835],{"class":73},[36,113831,113195],{"class":50},[19,113833,113834],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113836,111791],{},[26,113838,113840],{"className":31709,"code":113839,"language":31711,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,113841,113842],{"__ignoreMap":31},[36,113843,113844,113846],{"class":38,"line":39},[36,113845,18375],{"class":42},[36,113847,113299],{"class":50},[19,113849,113850],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113852,111116],{},[26,113854,113856],{"className":31709,"code":113855,"language":31711,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[33,113857,113858,113870,113883],{"__ignoreMap":31},[36,113859,113860,113862,113864,113866,113868],{"class":38,"line":39},[36,113861,112927],{"class":50},[36,113863,70],{"class":42},[36,113865,112932],{"class":50},[36,113867,2199],{"class":42},[36,113869,112937],{"class":50},[36,113871,113872,113875,113877,113879,113881],{"class":38,"line":54},[36,113873,113874],{"class":50},"control_cost ",[36,113876,70],{"class":42},[36,113878,113368],{"class":73},[36,113880,561],{"class":42},[36,113882,113373],{"class":50},[36,113884,113885,113887,113889,113891,113893,113895,113897],{"class":38,"line":61},[36,113886,18375],{"class":42},[36,113888,111128],{"class":73},[36,113890,222],{"class":50},[36,113892,2199],{"class":42},[36,113894,112927],{"class":50},[36,113896,2199],{"class":42},[36,113898,113390],{"class":50},[19,113900,113901],{},"奖励由两部分组成：",[256,113903,113904,113909],{},[259,113905,113906,113908],{},[33,113907,112954],{},"：末端离目标越远，奖励越低。",[259,113910,113911,113914],{},[33,113912,113913],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113916,113917],{},"简单控制器：",[26,113919,113921],{"className":31709,"code":113920,"language":31711,"meta":31,"style":31},"error = target - tip\ndata.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[33,113922,113923,113936,113968],{"__ignoreMap":31},[36,113924,113925,113928,113930,113932,113934],{"class":38,"line":39},[36,113926,113927],{"class":50},"error ",[36,113929,70],{"class":42},[36,113931,113499],{"class":50},[36,113933,2199],{"class":42},[36,113935,113504],{"class":50},[36,113937,113938,113940,113942,113944,113946,113948,113950,113952,113954,113956,113958,113960,113962,113964,113966],{"class":38,"line":54},[36,113939,107202],{"class":50},[36,113941,1859],{"class":73},[36,113943,5932],{"class":50},[36,113945,70],{"class":42},[36,113947,113521],{"class":50},[36,113949,106591],{"class":73},[36,113951,561],{"class":42},[36,113953,113528],{"class":50},[36,113955,1747],{"class":73},[36,113957,113533],{"class":50},[36,113959,2199],{"class":42},[36,113961,103734],{"class":73},[36,113963,477],{"class":50},[36,113965,103734],{"class":73},[36,113967,1680],{"class":50},[36,113969,113970,113972,113974,113976,113978,113980,113982,113984,113986,113988,113990,113992,113994,113996,113998],{"class":38,"line":61},[36,113971,107202],{"class":50},[36,113973,1885],{"class":73},[36,113975,5932],{"class":50},[36,113977,70],{"class":42},[36,113979,113521],{"class":50},[36,113981,106591],{"class":73},[36,113983,561],{"class":42},[36,113985,113528],{"class":50},[36,113987,1859],{"class":73},[36,113989,113533],{"class":50},[36,113991,2199],{"class":42},[36,113993,103734],{"class":73},[36,113995,477],{"class":50},[36,113997,103734],{"class":73},[36,113999,1680],{"class":50},[19,114001,114002],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[1645,114004,103039],{"id":103039},[26,114006,114007],{"className":31709,"code":113817,"language":31711,"meta":31,"style":31},[33,114008,114009],{"__ignoreMap":31},[36,114010,114011,114013,114015,114017,114019],{"class":38,"line":39},[36,114012,33278],{"class":42},[36,114014,113187],{"class":46},[36,114016,113190],{"class":50},[36,114018,2835],{"class":73},[36,114020,113195],{"class":50},[19,114022,114023,114024,114026,114027,83870,114029,29716],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[33,114025,81141],{}," 是 site 的名字，比如 ",[33,114028,112867],{},[33,114030,113290],{},[26,114032,114034],{"className":31709,"code":114033,"language":31711,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,114035,114036],{"__ignoreMap":31},[36,114037,114038,114040,114042],{"class":38,"line":39},[36,114039,104965],{"class":50},[36,114041,70],{"class":42},[36,114043,113204],{"class":50},[19,114045,114046],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,114048,114050],{"className":31709,"code":114049,"language":31711,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[33,114051,114052,114064],{"__ignoreMap":31},[36,114053,114054,114056,114058,114060,114062],{"class":38,"line":39},[36,114055,3061],{"class":42},[36,114057,104780],{"class":50},[36,114059,2577],{"class":42},[36,114061,242],{"class":73},[36,114063,5230],{"class":50},[36,114065,114066,114068,114070,114072,114074,114076,114078,114080,114082,114084],{"class":38,"line":54},[36,114067,105226],{"class":42},[36,114069,104766],{"class":73},[36,114071,222],{"class":50},[36,114073,1724],{"class":42},[36,114075,113229],{"class":110},[36,114077,2563],{"class":73},[36,114079,81141],{"class":50},[36,114081,2613],{"class":73},[36,114083,1919],{"class":110},[36,114085,1680],{"class":50},[19,114087,114088,114089,114092,114093,114095],{},"如果 site 没找到，就主动报错。",[33,114090,114091],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[33,114094,81141],{}," 的值放进字符串里。",[26,114097,114099],{"className":31709,"code":114098,"language":31711,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[33,114100,114101],{"__ignoreMap":31},[36,114102,114103,114105],{"class":38,"line":39},[36,114104,18375],{"class":42},[36,114106,113246],{"class":50},[19,114108,114109,114110,114112,114113,114116],{},"返回这个 site 的世界坐标。",[33,114111,105011],{}," 里的每一行都是一个 site 的 ",[33,114114,114115],{},"(x, y, z)"," 坐标。",[26,114118,114120],{"className":31709,"code":114119,"language":31711,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,114121,114122],{"__ignoreMap":31},[36,114123,114124,114126,114128],{"class":38,"line":39},[36,114125,33278],{"class":42},[36,114127,113261],{"class":46},[36,114129,113264],{"class":50},[19,114131,114132],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,114134,114136],{"className":31709,"code":114135,"language":31711,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[33,114137,114138,114150],{"__ignoreMap":31},[36,114139,114140,114142,114144,114146,114148],{"class":38,"line":39},[36,114141,112899],{"class":50},[36,114143,70],{"class":42},[36,114145,113274],{"class":50},[36,114147,112867],{"class":110},[36,114149,1680],{"class":50},[36,114151,114152,114154,114156,114158,114160],{"class":38,"line":54},[36,114153,112909],{"class":50},[36,114155,70],{"class":42},[36,114157,113274],{"class":50},[36,114159,113290],{"class":110},[36,114161,1680],{"class":50},[19,114163,114164],{},"分别读取末端点和目标点的世界坐标。",[26,114166,114167],{"className":31709,"code":113839,"language":31711,"meta":31,"style":31},[33,114168,114169],{"__ignoreMap":31},[36,114170,114171,114173],{"class":38,"line":39},[36,114172,18375],{"class":42},[36,114174,113299],{"class":50},[19,114176,114177],{},"把四部分拼成一个观测数组：",[26,114179,114182],{"className":114180,"code":114181,"language":6676,"meta":31},[6674],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[33,114183,114181],{"__ignoreMap":31},[26,114185,114187],{"className":31709,"code":114186,"language":31711,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[33,114188,114189],{"__ignoreMap":31},[36,114190,114191,114193,114195,114197,114199],{"class":38,"line":39},[36,114192,112927],{"class":50},[36,114194,70],{"class":42},[36,114196,112932],{"class":50},[36,114198,2199],{"class":42},[36,114200,112937],{"class":50},[19,114202,114203,114204,114207,114208,114211],{},"计算 tip 到 target 的距离。",[33,114205,114206],{},"tip - target"," 得到一个三维向量，",[33,114209,114210],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114213,15962],{},[26,114215,114218],{"className":114216,"code":114217,"language":6676,"meta":31},[6674],"tip    = [0.3, 0.0, 0.4]\ntarget = [0.5, 0.0, 0.4]\ntip - target = [-0.2, 0.0, 0.0]\ndistance = 0.2\n",[33,114219,114217],{"__ignoreMap":31},[26,114221,114223],{"className":31709,"code":114222,"language":31711,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[33,114224,114225],{"__ignoreMap":31},[36,114226,114227,114229,114231,114233,114235],{"class":38,"line":39},[36,114228,113874],{"class":50},[36,114230,70],{"class":42},[36,114232,113368],{"class":73},[36,114234,561],{"class":42},[36,114236,113373],{"class":50},[19,114238,114239,114240,114243,114244,114247],{},"计算动作惩罚。",[33,114241,114242],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[33,114245,114246],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,114249,114251],{"className":31709,"code":114250,"language":31711,"meta":31,"style":31},"return float(-dist - control_cost)\n",[33,114252,114253],{"__ignoreMap":31},[36,114254,114255,114257,114259,114261,114263,114265,114267],{"class":38,"line":39},[36,114256,18375],{"class":42},[36,114258,111128],{"class":73},[36,114260,222],{"class":50},[36,114262,2199],{"class":42},[36,114264,112927],{"class":50},[36,114266,2199],{"class":42},[36,114268,113390],{"class":50},[19,114270,114271],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,114273,114274],{"className":31709,"code":112134,"language":31711,"meta":31,"style":31},[33,114275,114276],{"__ignoreMap":31},[36,114277,114278,114280,114282],{"class":38,"line":39},[36,114279,112141],{"class":50},[36,114281,70],{"class":42},[36,114283,106092],{"class":73},[19,114285,114286],{},"累计奖励变量，记录整个运行过程的总分。",[26,114288,114290],{"className":31709,"code":114289,"language":31711,"meta":31,"style":31},"for step in range(500):\n",[33,114291,114292],{"__ignoreMap":31},[36,114293,114294,114296,114298,114300,114302,114304,114306],{"class":38,"line":39},[36,114295,4516],{"class":42},[36,114297,32947],{"class":50},[36,114299,27374],{"class":42},[36,114301,33774],{"class":73},[36,114303,222],{"class":50},[36,114305,66405],{"class":73},[36,114307,32117],{"class":50},[19,114309,114310],{},"运行 500 个控制步。",[26,114312,114313],{"className":31709,"code":105874,"language":31711,"meta":31,"style":31},[33,114314,114315],{"__ignoreMap":31},[36,114316,114317],{"class":38,"line":39},[36,114318,105874],{"class":50},[19,114320,114321,114322,102349,114324,114326],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[33,114323,104562],{},[33,114325,104565],{}," 是当前状态下的坐标。",[26,114328,114330],{"className":31709,"code":114329,"language":31711,"meta":31,"style":31},"error = target - tip\n",[33,114331,114332],{"__ignoreMap":31},[36,114333,114334,114336,114338,114340,114342],{"class":38,"line":39},[36,114335,113927],{"class":50},[36,114337,70],{"class":42},[36,114339,113499],{"class":50},[36,114341,2199],{"class":42},[36,114343,113504],{"class":50},[19,114345,114346],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,114348,114350],{"className":31709,"code":114349,"language":31711,"meta":31,"style":31},"data.ctrl[0] = np.clip(2.0 * error[2], -1.0, 1.0)\ndata.ctrl[1] = np.clip(2.0 * error[0], -1.0, 1.0)\n",[33,114351,114352,114384],{"__ignoreMap":31},[36,114353,114354,114356,114358,114360,114362,114364,114366,114368,114370,114372,114374,114376,114378,114380,114382],{"class":38,"line":39},[36,114355,107202],{"class":50},[36,114357,1859],{"class":73},[36,114359,5932],{"class":50},[36,114361,70],{"class":42},[36,114363,113521],{"class":50},[36,114365,106591],{"class":73},[36,114367,561],{"class":42},[36,114369,113528],{"class":50},[36,114371,1747],{"class":73},[36,114373,113533],{"class":50},[36,114375,2199],{"class":42},[36,114377,103734],{"class":73},[36,114379,477],{"class":50},[36,114381,103734],{"class":73},[36,114383,1680],{"class":50},[36,114385,114386,114388,114390,114392,114394,114396,114398,114400,114402,114404,114406,114408,114410,114412,114414],{"class":38,"line":54},[36,114387,107202],{"class":50},[36,114389,1885],{"class":73},[36,114391,5932],{"class":50},[36,114393,70],{"class":42},[36,114395,113521],{"class":50},[36,114397,106591],{"class":73},[36,114399,561],{"class":42},[36,114401,113528],{"class":50},[36,114403,1859],{"class":73},[36,114405,113533],{"class":50},[36,114407,2199],{"class":42},[36,114409,103734],{"class":73},[36,114411,477],{"class":50},[36,114413,103734],{"class":73},[36,114415,1680],{"class":50},[19,114417,114418,114419,114422],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[33,114420,114421],{},"error -> ctrl -> step"," 的流程。",[26,114424,114425],{"className":31709,"code":105836,"language":31711,"meta":31,"style":31},[33,114426,114427],{"__ignoreMap":31},[36,114428,114429],{"class":38,"line":39},[36,114430,105836],{"class":50},[19,114432,114433],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,114435,114437],{"className":31709,"code":114436,"language":31711,"meta":31,"style":31},"obs = get_obs(model, data)\n",[33,114438,114439],{"__ignoreMap":31},[36,114440,114441,114443,114445],{"class":38,"line":39},[36,114442,112185],{"class":50},[36,114444,70],{"class":42},[36,114446,113622],{"class":50},[19,114448,114449,114450,114453],{},"读取最新观测。后面打印 ",[33,114451,114452],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114455,103647],{"id":103646},[19,114457,114458],{},"观测维度为:",[26,114460,114463],{"className":114461,"code":114462,"language":6676,"meta":31},[6674],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[33,114464,114462],{"__ignoreMap":31},[19,114466,114467],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114469,114470],{},"程序每 100 步打印：",[26,114472,114475],{"className":114473,"code":114474,"language":6676,"meta":31},[6674],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[33,114476,114474],{"__ignoreMap":31},[19,114478,114479,114480,114482],{},"如果控制有效，你应该看到最终 ",[33,114481,104562],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114484,103679],{"id":103678},[256,114486,114487,114490,114493,114499,114505,114512,114522],{},[259,114488,114489],{},"修改目标点位置。",[259,114491,114492],{},"重新运行，观察最终 tip 是否变化。",[259,114494,114495,114496,114498],{},"把 gravity 改成 ",[33,114497,103920],{},"，观察控制是否变差。",[259,114500,112512,114501,112516,114503,29716],{},[33,114502,103489],{},[33,114504,1747],{},[259,114506,103742,114507,103745,114509,114511],{},[33,114508,111927],{},[33,114510,108638],{},"，观察机械臂是否更难移动。",[259,114513,103742,114514,83861,114516,103745,114518,114521],{},[33,114515,104565],{},[33,114517,105477],{},[33,114519,114520],{},"0.2 0 0.6","，观察 reward 和 final tip。",[259,114523,114524],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114526,103784],{"id":103783},[1645,114528,114530],{"id":114529},"site-not-found",[33,114531,114532],{},"site not found",[19,114534,114535,114536,102349,114539,29716],{},"检查 XML 中是否有 ",[33,114537,114538],{},"site name=\"tip\"",[33,114540,114541],{},"site name=\"target\"",[1645,114543,114544],{"id":114544},"机械臂完全不动",[19,114546,103854],{},[256,114548,114549,114554,114557,114562],{},[259,114550,114551,114553],{},[33,114552,103489],{}," 是否为 2",[259,114555,114556],{},"actuator 是否引用正确 joint",[259,114558,114559,114561],{},[33,114560,102407],{}," 是否被赋值",[259,114563,114564,114565],{},"是否执行了 ",[33,114566,102016],{},[1645,114568,114569],{"id":114569},"控制效果不好",[19,114571,114572],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,114574,114577],{"className":114575,"code":114576,"language":6676,"meta":31},[6674],"obs → action → mj_step → reward → next_obs\n",[33,114578,114576],{"__ignoreMap":31},[1645,114580,114582],{"id":114581},"tip-坐标不变化","tip 坐标不变化",[19,114584,103906],{},[256,114586,114587,114592,114600,114609],{},[259,114588,114589,114590,29716],{},"是否每步调用了 ",[33,114591,102016],{},[259,114593,114594,114595,102349,114597,29716],{},"是否写入了 ",[33,114596,107457],{},[33,114598,114599],{},"data.ctrl[1]",[259,114601,114602,114603,1880,114606,29716],{},"actuator 是否正确引用 ",[33,114604,114605],{},"joint1",[33,114607,114608],{},"joint2",[259,114610,114611],{},"控制输入是否太小。",[1645,114613,114614],{"id":114614},"目标点不会动",[19,114616,114617],{},"本章的 target 是固定 site：",[26,114619,114621],{"className":54398,"code":114620,"language":54400,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[33,114622,114623],{"__ignoreMap":31},[36,114624,114625,114627,114629,114631,114633,114635,114637,114639,114642],{"class":38,"line":39},[36,114626,2577],{"class":50},[36,114628,104541],{"class":52631},[36,114630,16249],{"class":46},[36,114632,70],{"class":50},[36,114634,113290],{"class":110},[36,114636,102437],{"class":46},[36,114638,70],{"class":50},[36,114640,114641],{"class":110},"\"0.5 0 0.4\"",[36,114643,114644],{"class":50}," ...\u002F>\n",[19,114646,114647,114648,114650],{},"它直接挂在 ",[33,114649,103172],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[1645,114652,114653],{"id":114653},"机械臂不像真实机械臂",[19,114655,114656],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114658,103938],{"id":103937},[19,114660,114661],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114663,114664],{},"核心公式：",[26,114666,114669],{"className":114667,"code":114668,"language":6676,"meta":31},[6674],"distance = ||tip - target||\nreward = -distance - action_cost\n",[33,114670,114668],{"__ignoreMap":31},[19,114672,114673],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1592,114675,114676],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":114678},[114679,114680,114681,114686,114690,114691,114692,114700],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":114682},[114683,114684,114685],{"id":112882,"depth":61,"text":112883},{"id":112958,"depth":61,"text":112958},{"id":112988,"depth":61,"text":112989},{"id":102583,"depth":54,"text":102584,"children":114687},[114688,114689],{"id":102903,"depth":61,"text":102903},{"id":103039,"depth":61,"text":103039},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":114693},[114694,114695,114696,114697,114698,114699],{"id":114529,"depth":61,"text":114532},{"id":114544,"depth":61,"text":114544},{"id":114569,"depth":61,"text":114569},{"id":114581,"depth":61,"text":114582},{"id":114614,"depth":61,"text":114614},{"id":114653,"depth":61,"text":114653},{"id":103937,"depth":54,"text":103938},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112686,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114707,"title":114708,"body":114709,"description":31,"extension":1603,"meta":118171,"navigation":57,"path":118172,"seo":118173,"stem":118174,"__hash__":118175},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114710,"toc":118142},[114711,114714,114716,114719,114722,114747,114750,114756,114759,114765,114767,114769,114793,114795,114813,114815,114858,114860,114887,114889,114892,114944,114947,114953,114962,114965,115003,115006,115045,115048,115056,115063,115066,115072,115074,115128,115135,115180,115183,115187,115203,115213,115215,116476,116478,116490,116492,116503,116505,116508,116529,116532,116535,116568,116574,116577,116610,116613,116616,116657,116662,116676,116679,116692,116697,116720,116722,116737,116747,116762,116769,116789,116804,116822,116825,116842,116850,116866,116872,116904,116917,116949,116959,116994,117008,117054,117068,117110,117121,117134,117140,117173,117176,117203,117213,117253,117263,117280,117287,117305,117308,117349,117362,117377,117380,117403,117406,117418,117421,117440,117445,117466,117469,117484,117487,117521,117533,117548,117551,117576,117579,117598,117601,117633,117636,117660,117666,117696,117703,117716,117719,117721,117723,117729,117732,117735,117747,117750,117752,117806,117808,117812,117818,117827,117830,117837,117839,117862,117865,117869,117871,117889,117895,117897,117930,117933,117939,117943,117946,117966,117971,117975,117982,118002,118007,118011,118014,118034,118037,118123,118127,118130,118136,118139],[10,114712,114708],{"id":114713},"_8gymnasium-风格强化学习接口基础",[14,114715,101978],{"id":101977},[19,114717,114718],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114720,114721],{},"你将实现:",[26,114723,114725],{"className":31709,"code":114724,"language":31711,"meta":31,"style":31},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[33,114726,114727,114737],{"__ignoreMap":31},[36,114728,114729,114732,114734],{"class":38,"line":39},[36,114730,114731],{"class":50},"obs, info ",[36,114733,70],{"class":42},[36,114735,114736],{"class":50}," env.reset()\n",[36,114738,114739,114742,114744],{"class":38,"line":54},[36,114740,114741],{"class":50},"obs, reward, terminated, truncated, info ",[36,114743,70],{"class":42},[36,114745,114746],{"class":50}," env.step(action)\n",[19,114748,114749],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114751,114752,114753,114755],{},"前面章节的代码都是“脚本式”的：在 ",[33,114754,103626],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114757,114758],{},"可以先记住 Gymnasium 环境的核心交互：",[26,114760,114763],{"className":114761,"code":114762,"language":6676,"meta":31},[6674],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[33,114764,114762],{"__ignoreMap":31},[14,114766,102101],{"id":102100},[19,114768,102104],{},[26,114770,114771],{"className":25152,"code":105719,"language":25154,"meta":31,"style":31},[33,114772,114773],{"__ignoreMap":31},[36,114774,114775,114777,114779,114781,114783,114785,114787,114789,114791],{"class":38,"line":39},[36,114776,25907],{"class":46},[36,114778,27646],{"class":110},[36,114780,25164],{"class":110},[36,114782,27731],{"class":73},[36,114784,105734],{"class":110},[36,114786,102129],{"class":110},[36,114788,103832],{"class":110},[36,114790,102145],{"class":110},[36,114792,105743],{"class":110},[19,114794,104150],{},[26,114796,114798],{"className":25152,"code":114797,"language":25154,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[33,114799,114800],{"__ignoreMap":31},[36,114801,114802,114804,114806,114808,114810],{"class":38,"line":39},[36,114803,25161],{"class":46},[36,114805,25164],{"class":110},[36,114807,102261],{"class":110},[36,114809,109042],{"class":110},[36,114811,114812],{"class":110}," gymnasium\n",[19,114814,104167],{},[26,114816,114818],{"className":25152,"code":114817,"language":25154,"meta":31,"style":31},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[33,114819,114820,114837,114846],{"__ignoreMap":31},[36,114821,114822,114824,114826,114828,114831,114833,114835],{"class":38,"line":39},[36,114823,31661],{"class":46},[36,114825,30507],{"class":110},[36,114827,26446],{"class":73},[36,114829,114830],{"class":110}," mujoco-gym-api",[36,114832,102306],{"class":110},[36,114834,102309],{"class":73},[36,114836,102312],{"class":73},[36,114838,114839,114841,114843],{"class":38,"line":54},[36,114840,31661],{"class":46},[36,114842,102319],{"class":110},[36,114844,114845],{"class":110}," mujoco-gym-api\n",[36,114847,114848,114850,114852,114854,114856],{"class":38,"line":61},[36,114849,25161],{"class":46},[36,114851,25164],{"class":110},[36,114853,102261],{"class":110},[36,114855,109042],{"class":110},[36,114857,114812],{"class":110},[19,114859,102335],{},[256,114861,114862,114872,114875,114881],{},[259,114863,114864,114865,114868,114869,29716],{},"本章使用 ",[33,114866,114867],{},"gymnasium","，不是旧版 ",[33,114870,114871],{},"gym",[259,114873,114874],{},"Gymnasium API 与旧 Gym API 有差异。",[259,114876,114877,114878,29716],{},"旧 Gym 常见返回值是 4 个: ",[33,114879,114880],{},"obs, reward, done, info",[259,114882,114883,114884,29716],{},"Gymnasium 返回值是 5 个: ",[33,114885,114886],{},"obs, reward, terminated, truncated, info",[14,114888,102376],{"id":102375},[19,114890,114891],{},"强化学习环境接口包含:",[1806,114893,114894,114903],{},[1809,114895,114896],{},[1812,114897,114898,114901],{},[1815,114899,114900],{"align":25066},"方法",[1815,114902,104027],{"align":25066},[1852,114904,114905,114915,114925,114935],{},[1812,114906,114907,114912],{},[1857,114908,114909],{"align":25066},[33,114910,114911],{},"reset()",[1857,114913,114914],{"align":25066},"重置环境",[1812,114916,114917,114922],{},[1857,114918,114919],{"align":25066},[33,114920,114921],{},"step(action)",[1857,114923,114924],{"align":25066},"执行动作",[1812,114926,114927,114932],{},[1857,114928,114929],{"align":25066},[33,114930,114931],{},"observation_space",[1857,114933,114934],{"align":25066},"观测空间",[1812,114936,114937,114942],{},[1857,114938,114939],{"align":25066},[33,114940,114941],{},"action_space",[1857,114943,24984],{"align":25066},[19,114945,114946],{},"一个最小环境需要完成:",[26,114948,114951],{"className":114949,"code":114950,"language":6676,"meta":31},[6674],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[33,114952,114950],{"__ignoreMap":31},[1645,114954,114956,102349,114959,105969],{"id":114955},"terminated-和-truncated-的区别",[33,114957,114958],{},"terminated",[33,114960,114961],{},"truncated",[19,114963,114964],{},"Gymnasium 把“结束”拆成两个概念：",[1806,114966,114967,114977],{},[1809,114968,114969],{},[1812,114970,114971,114973,114975],{},[1815,114972,105905],{"align":25066},[1815,114974,102031],{"align":25066},[1815,114976,22516],{"align":25066},[1852,114978,114979,114991],{},[1812,114980,114981,114985,114988],{},[1857,114982,114983],{"align":25066},[33,114984,114958],{},[1857,114986,114987],{"align":25066},"任务自然结束",[1857,114989,114990],{"align":25066},"机械臂到达目标、机器人摔倒",[1812,114992,114993,114997,115000],{},[1857,114994,114995],{"align":25066},[33,114996,114961],{},[1857,114998,114999],{"align":25066},"因外部限制截断",[1857,115001,115002],{"align":25066},"达到最大步数、时间限制",[19,115004,115005],{},"本章中：",[26,115007,115009],{"className":31709,"code":115008,"language":31711,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[33,115010,115011,115026],{"__ignoreMap":31},[36,115012,115013,115016,115018,115021,115023],{"class":38,"line":39},[36,115014,115015],{"class":50},"terminated ",[36,115017,70],{"class":42},[36,115019,115020],{"class":50}," dist ",[36,115022,2577],{"class":42},[36,115024,115025],{"class":73}," 0.05\n",[36,115027,115028,115031,115033,115035,115038,115040,115042],{"class":38,"line":54},[36,115029,115030],{"class":50},"truncated ",[36,115032,70],{"class":42},[36,115034,40204],{"class":73},[36,115036,115037],{"class":50},".steps ",[36,115039,3228],{"class":42},[36,115041,40204],{"class":73},[36,115043,115044],{"class":50},".max_steps\n",[19,115046,115047],{},"也就是：",[256,115049,115050,115053],{},[259,115051,115052],{},"末端距离目标小于 0.05，任务成功结束。",[259,115054,115055],{},"步数超过上限，episode 被截断。",[1645,115057,115059,102349,115061],{"id":115058},"observation_space-和-action_space",[33,115060,114931],{},[33,115062,114941],{},[19,115064,115065],{},"这两个对象告诉算法：",[26,115067,115070],{"className":115068,"code":115069,"language":6676,"meta":31},[6674],"观测长什么样\n动作允许多大\n",[33,115071,115069],{"__ignoreMap":31},[19,115073,15962],{},[26,115075,115077],{"className":31709,"code":115076,"language":31711,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[33,115078,115079],{"__ignoreMap":31},[36,115080,115081,115083,115086,115088,115091,115094,115097,115099,115101,115104,115106,115108,115110,115112,115114,115116,115118,115121,115123,115125],{"class":38,"line":39},[36,115082,32154],{"class":73},[36,115084,115085],{"class":50},".action_space ",[36,115087,70],{"class":42},[36,115089,115090],{"class":50}," spaces.Box(",[36,115092,115093],{"class":473},"low",[36,115095,115096],{"class":42},"=-",[36,115098,103734],{"class":73},[36,115100,477],{"class":50},[36,115102,115103],{"class":473},"high",[36,115105,70],{"class":42},[36,115107,103734],{"class":73},[36,115109,477],{"class":50},[36,115111,97294],{"class":473},[36,115113,70],{"class":42},[36,115115,222],{"class":50},[36,115117,1747],{"class":73},[36,115119,115120],{"class":50},",), ",[36,115122,94831],{"class":473},[36,115124,70],{"class":42},[36,115126,115127],{"class":50},"np.float32)\n",[19,115129,115130,115131,115134],{},"表示动作是 2 维数组，每个值都在 ",[33,115132,115133],{},"[-1, 1]"," 范围内。",[26,115136,115138],{"className":31709,"code":115137,"language":31711,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[33,115139,115140],{"__ignoreMap":31},[36,115141,115142,115144,115147,115149,115151,115153,115155,115158,115160,115162,115164,115166,115168,115170,115172,115174,115176,115178],{"class":38,"line":39},[36,115143,32154],{"class":73},[36,115145,115146],{"class":50},".observation_space ",[36,115148,70],{"class":42},[36,115150,115090],{"class":50},[36,115152,115093],{"class":473},[36,115154,115096],{"class":42},[36,115156,115157],{"class":50},"np.inf, ",[36,115159,115103],{"class":473},[36,115161,70],{"class":42},[36,115163,115157],{"class":50},[36,115165,97294],{"class":473},[36,115167,70],{"class":42},[36,115169,222],{"class":50},[36,115171,2113],{"class":73},[36,115173,115120],{"class":50},[36,115175,94831],{"class":473},[36,115177,70],{"class":42},[36,115179,115127],{"class":50},[19,115181,115182],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[1645,115184,115186],{"id":115185},"frame_skip-是什么","frame_skip 是什么",[26,115188,115190],{"className":31709,"code":115189,"language":31711,"meta":31,"style":31},"self.frame_skip = 5\n",[33,115191,115192],{"__ignoreMap":31},[36,115193,115194,115196,115199,115201],{"class":38,"line":39},[36,115195,32154],{"class":73},[36,115197,115198],{"class":50},".frame_skip ",[36,115200,70],{"class":42},[36,115202,55758],{"class":73},[19,115204,115205,115206,115209,115210,115212],{},"表示外部调用一次 ",[33,115207,115208],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[33,115211,102546],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115214,102584],{"id":102583},[26,115216,115218],{"className":31709,"code":115217,"language":31711,"meta":31,"style":31},"import gymnasium as gym\nimport mujoco\nimport numpy as np\nfrom gymnasium import spaces\n\n\nXML = \"\"\"\n\u003Cmujoco model=\"gym_reacher\">\n  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n\n  \u003Cworldbody>\n    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n\n    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n\n      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fbody>\n  \u003C\u002Fworldbody>\n\n  \u003Cactuator>\n    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n  \u003C\u002Factuator>\n\u003C\u002Fmujoco>\n\"\"\"\n\n\nclass ReacherEnv(gym.Env):\n    metadata = {\"render_modes\": []}\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.model = mujoco.MjModel.from_xml_string(XML)\n        self.data = mujoco.MjData(self.model)\n\n        self.tip_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\n        self.target_site_id = mujoco.mj_name2id(self.model, mujoco.mjtObj.mjOBJ_SITE, \"target\")\n        if self.tip_site_id \u003C 0 or self.target_site_id \u003C 0:\n            raise RuntimeError(\"required sites not found\")\n\n        self.frame_skip = 5\n        self.max_steps = 200\n        self.steps = 0\n\n        self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n        self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n\n    def _get_obs(self) -> np.ndarray:\n        tip = self.data.site_xpos[self.tip_site_id].copy()\n        target = self.data.site_xpos[self.target_site_id].copy()\n        obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\n        return obs.astype(np.float32)\n\n    def _get_reward(self) -> float:\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = np.linalg.norm(tip - target)\n        control_cost = 0.01 * np.sum(np.square(self.data.ctrl))\n        return float(-dist - control_cost)\n\n    def reset(self, *, seed: int | None = None, options: dict | None = None):\n        super().reset(seed=seed)\n        mujoco.mj_resetData(self.model, self.data)\n\n        self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n        self.data.qvel[:] = 0.0\n        mujoco.mj_forward(self.model, self.data)\n\n        self.steps = 0\n        return self._get_obs(), {}\n\n    def step(self, action):\n        action = np.asarray(action, dtype=np.float32)\n        action = np.clip(action, self.action_space.low, self.action_space.high)\n\n        self.data.ctrl[:] = action\n        for _ in range(self.frame_skip):\n            mujoco.mj_step(self.model, self.data)\n\n        self.steps += 1\n\n        obs = self._get_obs()\n        reward = self._get_reward()\n\n        tip = self.data.site_xpos[self.tip_site_id]\n        target = self.data.site_xpos[self.target_site_id]\n        dist = float(np.linalg.norm(tip - target))\n\n        terminated = dist \u003C 0.05\n        truncated = self.steps >= self.max_steps\n        info = {\"distance\": dist}\n        return obs, reward, terminated, truncated, info\n\n\ndef main() -> None:\n    env = ReacherEnv()\n    obs, info = env.reset(seed=0)\n    print(\"initial obs shape:\", obs.shape)\n    print(\"initial info:\", info)\n\n    total_reward = 0.0\n    for step in range(20):\n        action = env.action_space.sample()\n        obs, reward, terminated, truncated, info = env.step(action)\n        total_reward += reward\n        print(\"step:\", step, \"reward:\", round(reward, 3), \"distance:\", round(info[\"distance\"], 3))\n        if terminated or truncated:\n            break\n\n    print(\"total_reward:\", round(total_reward, 3))\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,115219,115220,115232,115238,115248,115259,115263,115267,115275,115280,115284,115288,115292,115296,115300,115304,115308,115313,115317,115321,115325,115330,115334,115338,115342,115346,115350,115354,115358,115362,115366,115370,115374,115378,115382,115400,115415,115419,115432,115442,115457,115474,115478,115499,115518,115543,115557,115561,115571,115583,115593,115597,115639,115677,115681,115691,115707,115722,115741,115748,115752,115765,115780,115795,115808,115827,115843,115847,115888,115903,115918,115922,115961,115972,115985,115989,115999,116008,116012,116022,116037,116055,116059,116070,116087,116100,116104,116114,116118,116129,116140,116144,116158,116172,116188,116192,116205,116222,116237,116244,116248,116252,116264,116274,116292,116304,116316,116320,116328,116344,116353,116362,116370,116412,116425,116430,116434,116452,116456,116460,116472],{"__ignoreMap":31},[36,115221,115222,115224,115227,115229],{"class":38,"line":39},[36,115223,31723],{"class":42},[36,115225,115226],{"class":50}," gymnasium ",[36,115228,32714],{"class":42},[36,115230,115231],{"class":50}," gym\n",[36,115233,115234,115236],{"class":38,"line":54},[36,115235,31723],{"class":42},[36,115237,102632],{"class":50},[36,115239,115240,115242,115244,115246],{"class":38,"line":61},[36,115241,31723],{"class":42},[36,115243,32711],{"class":50},[36,115245,32714],{"class":42},[36,115247,32717],{"class":50},[36,115249,115250,115252,115254,115256],{"class":38,"line":80},[36,115251,32068],{"class":42},[36,115253,115226],{"class":50},[36,115255,31723],{"class":42},[36,115257,115258],{"class":50}," spaces\n",[36,115260,115261],{"class":38,"line":96},[36,115262,58],{"emptyLinePlaceholder":57},[36,115264,115265],{"class":38,"line":101},[36,115266,58],{"emptyLinePlaceholder":57},[36,115268,115269,115271,115273],{"class":38,"line":128},[36,115270,102645],{"class":73},[36,115272,14893],{"class":42},[36,115274,102650],{"class":110},[36,115276,115277],{"class":38,"line":149},[36,115278,115279],{"class":110},"\u003Cmujoco model=\"gym_reacher\">\n",[36,115281,115282],{"class":38,"line":154},[36,115283,113069],{"class":110},[36,115285,115286],{"class":38,"line":167},[36,115287,58],{"emptyLinePlaceholder":57},[36,115289,115290],{"class":38,"line":172},[36,115291,102669],{"class":110},[36,115293,115294],{"class":38,"line":192},[36,115295,113087],{"class":110},[36,115297,115298],{"class":38,"line":211},[36,115299,58],{"emptyLinePlaceholder":57},[36,115301,115302],{"class":38,"line":216},[36,115303,113096],{"class":110},[36,115305,115306],{"class":38,"line":231},[36,115307,113101],{"class":110},[36,115309,115310],{"class":38,"line":236},[36,115311,115312],{"class":110},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,115314,115315],{"class":38,"line":247},[36,115316,58],{"emptyLinePlaceholder":57},[36,115318,115319],{"class":38,"line":637},[36,115320,113115],{"class":110},[36,115322,115323],{"class":38,"line":646},[36,115324,113120],{"class":110},[36,115326,115327],{"class":38,"line":655},[36,115328,115329],{"class":110},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,115331,115332],{"class":38,"line":660},[36,115333,113130],{"class":110},[36,115335,115336],{"class":38,"line":665},[36,115337,107769],{"class":110},[36,115339,115340],{"class":38,"line":674},[36,115341,102698],{"class":110},[36,115343,115344],{"class":38,"line":679},[36,115345,102703],{"class":110},[36,115347,115348],{"class":38,"line":692},[36,115349,58],{"emptyLinePlaceholder":57},[36,115351,115352],{"class":38,"line":705},[36,115353,107786],{"class":110},[36,115355,115356],{"class":38,"line":710},[36,115357,113155],{"class":110},[36,115359,115360],{"class":38,"line":722},[36,115361,113160],{"class":110},[36,115363,115364],{"class":38,"line":750},[36,115365,107796],{"class":110},[36,115367,115368],{"class":38,"line":755},[36,115369,102708],{"class":110},[36,115371,115372],{"class":38,"line":777},[36,115373,97029],{"class":110},[36,115375,115376],{"class":38,"line":802},[36,115377,58],{"emptyLinePlaceholder":57},[36,115379,115380],{"class":38,"line":807},[36,115381,58],{"emptyLinePlaceholder":57},[36,115383,115384,115386,115389,115391,115393,115395,115398],{"class":38,"line":818},[36,115385,16023],{"class":42},[36,115387,115388],{"class":46}," ReacherEnv",[36,115390,222],{"class":50},[36,115392,114871],{"class":46},[36,115394,2225],{"class":50},[36,115396,115397],{"class":46},"Env",[36,115399,32117],{"class":50},[36,115401,115402,115405,115407,115409,115412],{"class":38,"line":843},[36,115403,115404],{"class":50},"    metadata ",[36,115406,70],{"class":42},[36,115408,5937],{"class":50},[36,115410,115411],{"class":110},"\"render_modes\"",[36,115413,115414],{"class":50},": []}\n",[36,115416,115417],{"class":38,"line":848},[36,115418,58],{"emptyLinePlaceholder":57},[36,115420,115421,115423,115425,115428,115430],{"class":38,"line":859},[36,115422,32132],{"class":42},[36,115424,32135],{"class":73},[36,115426,115427],{"class":50},"(self) -> ",[36,115429,97017],{"class":73},[36,115431,5230],{"class":50},[36,115433,115434,115436,115438,115440],{"class":38,"line":864},[36,115435,32148],{"class":73},[36,115437,18590],{"class":50},[36,115439,32160],{"class":73},[36,115441,3484],{"class":50},[36,115443,115444,115446,115449,115451,115453,115455],{"class":38,"line":873},[36,115445,32176],{"class":73},[36,115447,115448],{"class":50},".model ",[36,115450,70],{"class":42},[36,115452,102743],{"class":50},[36,115454,102645],{"class":73},[36,115456,1680],{"class":50},[36,115458,115459,115461,115464,115466,115469,115471],{"class":38,"line":9454},[36,115460,32176],{"class":73},[36,115462,115463],{"class":50},".data ",[36,115465,70],{"class":42},[36,115467,115468],{"class":50}," mujoco.MjData(",[36,115470,32154],{"class":73},[36,115472,115473],{"class":50},".model)\n",[36,115475,115476],{"class":38,"line":9481},[36,115477,58],{"emptyLinePlaceholder":57},[36,115479,115480,115482,115485,115487,115490,115492,115495,115497],{"class":38,"line":9486},[36,115481,32176],{"class":73},[36,115483,115484],{"class":50},".tip_site_id ",[36,115486,70],{"class":42},[36,115488,115489],{"class":50}," mujoco.mj_name2id(",[36,115491,32154],{"class":73},[36,115493,115494],{"class":50},".model, mujoco.mjtObj.mjOBJ_SITE, ",[36,115496,112867],{"class":110},[36,115498,1680],{"class":50},[36,115500,115501,115503,115506,115508,115510,115512,115514,115516],{"class":38,"line":9492},[36,115502,32176],{"class":73},[36,115504,115505],{"class":50},".target_site_id ",[36,115507,70],{"class":42},[36,115509,115489],{"class":50},[36,115511,32154],{"class":73},[36,115513,115494],{"class":50},[36,115515,113290],{"class":110},[36,115517,1680],{"class":50},[36,115519,115520,115522,115524,115526,115528,115530,115533,115535,115537,115539,115541],{"class":38,"line":9504},[36,115521,3999],{"class":42},[36,115523,40204],{"class":73},[36,115525,115484],{"class":50},[36,115527,2577],{"class":42},[36,115529,242],{"class":73},[36,115531,115532],{"class":42}," or",[36,115534,40204],{"class":73},[36,115536,115505],{"class":50},[36,115538,2577],{"class":42},[36,115540,242],{"class":73},[36,115542,5230],{"class":50},[36,115544,115545,115548,115550,115552,115555],{"class":38,"line":9516},[36,115546,115547],{"class":42},"            raise",[36,115549,104766],{"class":73},[36,115551,222],{"class":50},[36,115553,115554],{"class":110},"\"required sites not found\"",[36,115556,1680],{"class":50},[36,115558,115559],{"class":38,"line":9528},[36,115560,58],{"emptyLinePlaceholder":57},[36,115562,115563,115565,115567,115569],{"class":38,"line":11184},[36,115564,32176],{"class":73},[36,115566,115198],{"class":50},[36,115568,70],{"class":42},[36,115570,55758],{"class":73},[36,115572,115573,115575,115578,115580],{"class":38,"line":11209},[36,115574,32176],{"class":73},[36,115576,115577],{"class":50},".max_steps ",[36,115579,70],{"class":42},[36,115581,115582],{"class":73}," 200\n",[36,115584,115585,115587,115589,115591],{"class":38,"line":11232},[36,115586,32176],{"class":73},[36,115588,115037],{"class":50},[36,115590,70],{"class":42},[36,115592,48664],{"class":73},[36,115594,115595],{"class":38,"line":11256},[36,115596,58],{"emptyLinePlaceholder":57},[36,115598,115599,115601,115603,115605,115607,115609,115611,115613,115615,115617,115619,115621,115623,115625,115627,115629,115631,115633,115635,115637],{"class":38,"line":11261},[36,115600,32176],{"class":73},[36,115602,115085],{"class":50},[36,115604,70],{"class":42},[36,115606,115090],{"class":50},[36,115608,115093],{"class":473},[36,115610,115096],{"class":42},[36,115612,103734],{"class":73},[36,115614,477],{"class":50},[36,115616,115103],{"class":473},[36,115618,70],{"class":42},[36,115620,103734],{"class":73},[36,115622,477],{"class":50},[36,115624,97294],{"class":473},[36,115626,70],{"class":42},[36,115628,222],{"class":50},[36,115630,1747],{"class":73},[36,115632,115120],{"class":50},[36,115634,94831],{"class":473},[36,115636,70],{"class":42},[36,115638,115127],{"class":50},[36,115640,115641,115643,115645,115647,115649,115651,115653,115655,115657,115659,115661,115663,115665,115667,115669,115671,115673,115675],{"class":38,"line":11266},[36,115642,32176],{"class":73},[36,115644,115146],{"class":50},[36,115646,70],{"class":42},[36,115648,115090],{"class":50},[36,115650,115093],{"class":473},[36,115652,115096],{"class":42},[36,115654,115157],{"class":50},[36,115656,115103],{"class":473},[36,115658,70],{"class":42},[36,115660,115157],{"class":50},[36,115662,97294],{"class":473},[36,115664,70],{"class":42},[36,115666,222],{"class":50},[36,115668,2113],{"class":73},[36,115670,115120],{"class":50},[36,115672,94831],{"class":473},[36,115674,70],{"class":42},[36,115676,115127],{"class":50},[36,115678,115679],{"class":38,"line":11271},[36,115680,58],{"emptyLinePlaceholder":57},[36,115682,115683,115685,115688],{"class":38,"line":11280},[36,115684,32132],{"class":42},[36,115686,115687],{"class":46}," _get_obs",[36,115689,115690],{"class":50},"(self) -> np.ndarray:\n",[36,115692,115693,115695,115697,115699,115702,115704],{"class":38,"line":11285},[36,115694,113468],{"class":50},[36,115696,70],{"class":42},[36,115698,40204],{"class":73},[36,115700,115701],{"class":50},".data.site_xpos[",[36,115703,32154],{"class":73},[36,115705,115706],{"class":50},".tip_site_id].copy()\n",[36,115708,115709,115711,115713,115715,115717,115719],{"class":38,"line":11291},[36,115710,113481],{"class":50},[36,115712,70],{"class":42},[36,115714,40204],{"class":73},[36,115716,115701],{"class":50},[36,115718,32154],{"class":73},[36,115720,115721],{"class":50},".target_site_id].copy()\n",[36,115723,115724,115726,115728,115731,115733,115736,115738],{"class":38,"line":11312},[36,115725,111513],{"class":50},[36,115727,70],{"class":42},[36,115729,115730],{"class":50}," np.concatenate([",[36,115732,32154],{"class":73},[36,115734,115735],{"class":50},".data.qpos.copy(), ",[36,115737,32154],{"class":73},[36,115739,115740],{"class":50},".data.qvel.copy(), tip, target])\n",[36,115742,115743,115745],{"class":38,"line":11318},[36,115744,16081],{"class":42},[36,115746,115747],{"class":50}," obs.astype(np.float32)\n",[36,115749,115750],{"class":38,"line":11332},[36,115751,58],{"emptyLinePlaceholder":57},[36,115753,115754,115756,115759,115761,115763],{"class":38,"line":11338},[36,115755,32132],{"class":42},[36,115757,115758],{"class":46}," _get_reward",[36,115760,115427],{"class":50},[36,115762,1713],{"class":73},[36,115764,5230],{"class":50},[36,115766,115767,115769,115771,115773,115775,115777],{"class":38,"line":11365},[36,115768,113468],{"class":50},[36,115770,70],{"class":42},[36,115772,40204],{"class":73},[36,115774,115701],{"class":50},[36,115776,32154],{"class":73},[36,115778,115779],{"class":50},".tip_site_id]\n",[36,115781,115782,115784,115786,115788,115790,115792],{"class":38,"line":11374},[36,115783,113481],{"class":50},[36,115785,70],{"class":42},[36,115787,40204],{"class":73},[36,115789,115701],{"class":50},[36,115791,32154],{"class":73},[36,115793,115794],{"class":50},".target_site_id]\n",[36,115796,115797,115800,115802,115804,115806],{"class":38,"line":11380},[36,115798,115799],{"class":50},"        dist ",[36,115801,70],{"class":42},[36,115803,112932],{"class":50},[36,115805,2199],{"class":42},[36,115807,112937],{"class":50},[36,115809,115810,115813,115815,115817,115819,115822,115824],{"class":38,"line":11388},[36,115811,115812],{"class":50},"        control_cost ",[36,115814,70],{"class":42},[36,115816,113368],{"class":73},[36,115818,561],{"class":42},[36,115820,115821],{"class":50}," np.sum(np.square(",[36,115823,32154],{"class":73},[36,115825,115826],{"class":50},".data.ctrl))\n",[36,115828,115829,115831,115833,115835,115837,115839,115841],{"class":38,"line":11393},[36,115830,16081],{"class":42},[36,115832,111128],{"class":73},[36,115834,222],{"class":50},[36,115836,2199],{"class":42},[36,115838,112927],{"class":50},[36,115840,2199],{"class":42},[36,115842,113390],{"class":50},[36,115844,115845],{"class":38,"line":17933},[36,115846,58],{"emptyLinePlaceholder":57},[36,115848,115849,115851,115854,115857,115859,115862,115864,115866,115868,115870,115872,115875,115878,115880,115882,115884,115886],{"class":38,"line":17939},[36,115850,32132],{"class":42},[36,115852,115853],{"class":46}," reset",[36,115855,115856],{"class":50},"(self, ",[36,115858,2122],{"class":42},[36,115860,115861],{"class":50},", seed: ",[36,115863,43],{"class":73},[36,115865,26440],{"class":42},[36,115867,40264],{"class":73},[36,115869,14893],{"class":42},[36,115871,40264],{"class":73},[36,115873,115874],{"class":50},", options: ",[36,115876,115877],{"class":73},"dict",[36,115879,26440],{"class":42},[36,115881,40264],{"class":73},[36,115883,14893],{"class":42},[36,115885,40264],{"class":73},[36,115887,32117],{"class":50},[36,115889,115890,115892,115895,115898,115900],{"class":38,"line":17962},[36,115891,32148],{"class":73},[36,115893,115894],{"class":50},"().reset(",[36,115896,115897],{"class":473},"seed",[36,115899,70],{"class":42},[36,115901,115902],{"class":50},"seed)\n",[36,115904,115905,115908,115910,115913,115915],{"class":38,"line":17968},[36,115906,115907],{"class":50},"        mujoco.mj_resetData(",[36,115909,32154],{"class":73},[36,115911,115912],{"class":50},".model, ",[36,115914,32154],{"class":73},[36,115916,115917],{"class":50},".data)\n",[36,115919,115920],{"class":38,"line":17991},[36,115921,58],{"emptyLinePlaceholder":57},[36,115923,115924,115926,115929,115931,115933,115936,115938,115940,115942,115944,115946,115948,115950,115952,115954,115956,115958],{"class":38,"line":18005},[36,115925,32176],{"class":73},[36,115927,115928],{"class":50},".data.qpos[:] ",[36,115930,70],{"class":42},[36,115932,40204],{"class":73},[36,115934,115935],{"class":50},".np_random.uniform(",[36,115937,115093],{"class":473},[36,115939,115096],{"class":42},[36,115941,87541],{"class":73},[36,115943,477],{"class":50},[36,115945,115103],{"class":473},[36,115947,70],{"class":42},[36,115949,87541],{"class":73},[36,115951,477],{"class":50},[36,115953,32827],{"class":473},[36,115955,70],{"class":42},[36,115957,32154],{"class":73},[36,115959,115960],{"class":50},".model.nq)\n",[36,115962,115963,115965,115968,115970],{"class":38,"line":18025},[36,115964,32176],{"class":73},[36,115966,115967],{"class":50},".data.qvel[:] ",[36,115969,70],{"class":42},[36,115971,106092],{"class":73},[36,115973,115974,115977,115979,115981,115983],{"class":38,"line":18031},[36,115975,115976],{"class":50},"        mujoco.mj_forward(",[36,115978,32154],{"class":73},[36,115980,115912],{"class":50},[36,115982,32154],{"class":73},[36,115984,115917],{"class":50},[36,115986,115987],{"class":38,"line":18042},[36,115988,58],{"emptyLinePlaceholder":57},[36,115990,115991,115993,115995,115997],{"class":38,"line":18065},[36,115992,32176],{"class":73},[36,115994,115037],{"class":50},[36,115996,70],{"class":42},[36,115998,48664],{"class":73},[36,116000,116001,116003,116005],{"class":38,"line":18087},[36,116002,16081],{"class":42},[36,116004,40204],{"class":73},[36,116006,116007],{"class":50},"._get_obs(), {}\n",[36,116009,116010],{"class":38,"line":18092},[36,116011,58],{"emptyLinePlaceholder":57},[36,116013,116014,116016,116019],{"class":38,"line":18098},[36,116015,32132],{"class":42},[36,116017,116018],{"class":46}," step",[36,116020,116021],{"class":50},"(self, action):\n",[36,116023,116024,116026,116028,116031,116033,116035],{"class":38,"line":18112},[36,116025,111553],{"class":50},[36,116027,70],{"class":42},[36,116029,116030],{"class":50}," np.asarray(action, ",[36,116032,94831],{"class":473},[36,116034,70],{"class":42},[36,116036,115127],{"class":50},[36,116038,116039,116041,116043,116045,116047,116050,116052],{"class":38,"line":18125},[36,116040,111553],{"class":50},[36,116042,70],{"class":42},[36,116044,108778],{"class":50},[36,116046,32154],{"class":73},[36,116048,116049],{"class":50},".action_space.low, ",[36,116051,32154],{"class":73},[36,116053,116054],{"class":50},".action_space.high)\n",[36,116056,116057],{"class":38,"line":18130},[36,116058,58],{"emptyLinePlaceholder":57},[36,116060,116061,116063,116066,116068],{"class":38,"line":18144},[36,116062,32176],{"class":73},[36,116064,116065],{"class":50},".data.ctrl[:] ",[36,116067,70],{"class":42},[36,116069,108801],{"class":50},[36,116071,116072,116074,116076,116078,116080,116082,116084],{"class":38,"line":18149},[36,116073,4894],{"class":42},[36,116075,102832],{"class":50},[36,116077,27374],{"class":42},[36,116079,33774],{"class":73},[36,116081,222],{"class":50},[36,116083,32154],{"class":73},[36,116085,116086],{"class":50},".frame_skip):\n",[36,116088,116089,116092,116094,116096,116098],{"class":38,"line":18155},[36,116090,116091],{"class":50},"            mujoco.mj_step(",[36,116093,32154],{"class":73},[36,116095,115912],{"class":50},[36,116097,32154],{"class":73},[36,116099,115917],{"class":50},[36,116101,116102],{"class":38,"line":18160},[36,116103,58],{"emptyLinePlaceholder":57},[36,116105,116106,116108,116110,116112],{"class":38,"line":18174},[36,116107,32176],{"class":73},[36,116109,115037],{"class":50},[36,116111,10945],{"class":42},[36,116113,57030],{"class":73},[36,116115,116116],{"class":38,"line":18179},[36,116117,58],{"emptyLinePlaceholder":57},[36,116119,116120,116122,116124,116126],{"class":38,"line":18184},[36,116121,111513],{"class":50},[36,116123,70],{"class":42},[36,116125,40204],{"class":73},[36,116127,116128],{"class":50},"._get_obs()\n",[36,116130,116131,116133,116135,116137],{"class":38,"line":18198},[36,116132,111618],{"class":50},[36,116134,70],{"class":42},[36,116136,40204],{"class":73},[36,116138,116139],{"class":50},"._get_reward()\n",[36,116141,116142],{"class":38,"line":18210},[36,116143,58],{"emptyLinePlaceholder":57},[36,116145,116146,116148,116150,116152,116154,116156],{"class":38,"line":18215},[36,116147,113468],{"class":50},[36,116149,70],{"class":42},[36,116151,40204],{"class":73},[36,116153,115701],{"class":50},[36,116155,32154],{"class":73},[36,116157,115779],{"class":50},[36,116159,116160,116162,116164,116166,116168,116170],{"class":38,"line":18228},[36,116161,113481],{"class":50},[36,116163,70],{"class":42},[36,116165,40204],{"class":73},[36,116167,115701],{"class":50},[36,116169,32154],{"class":73},[36,116171,115794],{"class":50},[36,116173,116174,116176,116178,116180,116183,116185],{"class":38,"line":18233},[36,116175,115799],{"class":50},[36,116177,70],{"class":42},[36,116179,111128],{"class":73},[36,116181,116182],{"class":50},"(np.linalg.norm(tip ",[36,116184,2199],{"class":42},[36,116186,116187],{"class":50}," target))\n",[36,116189,116190],{"class":38,"line":18238},[36,116191,58],{"emptyLinePlaceholder":57},[36,116193,116194,116197,116199,116201,116203],{"class":38,"line":18243},[36,116195,116196],{"class":50},"        terminated ",[36,116198,70],{"class":42},[36,116200,115020],{"class":50},[36,116202,2577],{"class":42},[36,116204,115025],{"class":73},[36,116206,116207,116210,116212,116214,116216,116218,116220],{"class":38,"line":18256},[36,116208,116209],{"class":50},"        truncated ",[36,116211,70],{"class":42},[36,116213,40204],{"class":73},[36,116215,115037],{"class":50},[36,116217,3228],{"class":42},[36,116219,40204],{"class":73},[36,116221,115044],{"class":50},[36,116223,116224,116227,116229,116231,116234],{"class":38,"line":18261},[36,116225,116226],{"class":50},"        info ",[36,116228,70],{"class":42},[36,116230,5937],{"class":50},[36,116232,116233],{"class":110},"\"distance\"",[36,116235,116236],{"class":50},": dist}\n",[36,116238,116239,116241],{"class":38,"line":33964},[36,116240,16081],{"class":42},[36,116242,116243],{"class":50}," obs, reward, terminated, truncated, info\n",[36,116245,116246],{"class":38,"line":33970},[36,116247,58],{"emptyLinePlaceholder":57},[36,116249,116250],{"class":38,"line":33976},[36,116251,58],{"emptyLinePlaceholder":57},[36,116253,116254,116256,116258,116260,116262],{"class":38,"line":33982},[36,116255,33278],{"class":42},[36,116257,47],{"class":46},[36,116259,102729],{"class":50},[36,116261,97017],{"class":73},[36,116263,5230],{"class":50},[36,116265,116266,116269,116271],{"class":38,"line":33988},[36,116267,116268],{"class":50},"    env ",[36,116270,70],{"class":42},[36,116272,116273],{"class":50}," ReacherEnv()\n",[36,116275,116276,116279,116281,116284,116286,116288,116290],{"class":38,"line":33999},[36,116277,116278],{"class":50},"    obs, info ",[36,116280,70],{"class":42},[36,116282,116283],{"class":50}," env.reset(",[36,116285,115897],{"class":473},[36,116287,70],{"class":42},[36,116289,1859],{"class":73},[36,116291,1680],{"class":50},[36,116293,116294,116296,116298,116301],{"class":38,"line":34005},[36,116295,32630],{"class":73},[36,116297,222],{"class":50},[36,116299,116300],{"class":110},"\"initial obs shape:\"",[36,116302,116303],{"class":50},", obs.shape)\n",[36,116305,116306,116308,116310,116313],{"class":38,"line":34025},[36,116307,32630],{"class":73},[36,116309,222],{"class":50},[36,116311,116312],{"class":110},"\"initial info:\"",[36,116314,116315],{"class":50},", info)\n",[36,116317,116318],{"class":38,"line":34031},[36,116319,58],{"emptyLinePlaceholder":57},[36,116321,116322,116324,116326],{"class":38,"line":34042},[36,116323,111484],{"class":50},[36,116325,70],{"class":42},[36,116327,106092],{"class":73},[36,116329,116330,116332,116334,116336,116338,116340,116342],{"class":38,"line":34048},[36,116331,4692],{"class":42},[36,116333,32947],{"class":50},[36,116335,27374],{"class":42},[36,116337,33774],{"class":73},[36,116339,222],{"class":50},[36,116341,2367],{"class":73},[36,116343,32117],{"class":50},[36,116345,116346,116348,116350],{"class":38,"line":34054},[36,116347,111553],{"class":50},[36,116349,70],{"class":42},[36,116351,116352],{"class":50}," env.action_space.sample()\n",[36,116354,116355,116358,116360],{"class":38,"line":34060},[36,116356,116357],{"class":50},"        obs, reward, terminated, truncated, info ",[36,116359,70],{"class":42},[36,116361,114746],{"class":50},[36,116363,116364,116366,116368],{"class":38,"line":34066},[36,116365,111628],{"class":50},[36,116367,10945],{"class":42},[36,116369,111633],{"class":50},[36,116371,116372,116374,116376,116378,116380,116383,116385,116387,116390,116392,116394,116397,116399,116401,116404,116406,116408,116410],{"class":38,"line":34072},[36,116373,33782],{"class":73},[36,116375,222],{"class":50},[36,116377,111662],{"class":110},[36,116379,111665],{"class":50},[36,116381,116382],{"class":110},"\"reward:\"",[36,116384,477],{"class":50},[36,116386,33349],{"class":73},[36,116388,116389],{"class":50},"(reward, ",[36,116391,1741],{"class":73},[36,116393,111676],{"class":50},[36,116395,116396],{"class":110},"\"distance:\"",[36,116398,477],{"class":50},[36,116400,33349],{"class":73},[36,116402,116403],{"class":50},"(info[",[36,116405,116233],{"class":110},[36,116407,113533],{"class":50},[36,116409,1741],{"class":73},[36,116411,31828],{"class":50},[36,116413,116414,116416,116419,116422],{"class":38,"line":34078},[36,116415,3999],{"class":42},[36,116417,116418],{"class":50}," terminated ",[36,116420,116421],{"class":42},"or",[36,116423,116424],{"class":50}," truncated:\n",[36,116426,116427],{"class":38,"line":34084},[36,116428,116429],{"class":42},"            break\n",[36,116431,116432],{"class":38,"line":34104},[36,116433,58],{"emptyLinePlaceholder":57},[36,116435,116436,116438,116440,116442,116444,116446,116448,116450],{"class":38,"line":34110},[36,116437,32630],{"class":73},[36,116439,222],{"class":50},[36,116441,111707],{"class":110},[36,116443,477],{"class":50},[36,116445,33349],{"class":73},[36,116447,111714],{"class":50},[36,116449,1741],{"class":73},[36,116451,31828],{"class":50},[36,116453,116454],{"class":38,"line":34126},[36,116455,58],{"emptyLinePlaceholder":57},[36,116457,116458],{"class":38,"line":34132},[36,116459,58],{"emptyLinePlaceholder":57},[36,116461,116462,116464,116466,116468,116470],{"class":38,"line":34146},[36,116463,3061],{"class":42},[36,116465,32551],{"class":73},[36,116467,102890],{"class":42},[36,116469,102893],{"class":110},[36,116471,5230],{"class":50},[36,116473,116474],{"class":38,"line":34152},[36,116475,102900],{"class":50},[19,116477,104901],{},[26,116479,116481],{"className":25152,"code":116480,"language":25154,"meta":31,"style":31},"touch ch8_gym_env.py\n",[33,116482,116483],{"__ignoreMap":31},[36,116484,116485,116487],{"class":38,"line":39},[36,116486,102614],{"class":46},[36,116488,116489],{"class":110}," ch8_gym_env.py\n",[19,116491,111775],{},[26,116493,116495],{"className":25152,"code":116494,"language":25154,"meta":31,"style":31},"python ch8_gym_env.py\n",[33,116496,116497],{"__ignoreMap":31},[36,116498,116499,116501],{"class":38,"line":39},[36,116500,31711],{"class":46},[36,116502,116489],{"class":110},[1645,116504,102903],{"id":102903},[19,116506,116507],{},"继承 Gymnasium 环境：",[26,116509,116511],{"className":31709,"code":116510,"language":31711,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[33,116512,116513],{"__ignoreMap":31},[36,116514,116515,116517,116519,116521,116523,116525,116527],{"class":38,"line":39},[36,116516,16023],{"class":42},[36,116518,115388],{"class":46},[36,116520,222],{"class":50},[36,116522,114871],{"class":46},[36,116524,2225],{"class":50},[36,116526,115397],{"class":46},[36,116528,32117],{"class":50},[19,116530,116531],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116533,116534],{},"初始化模型：",[26,116536,116538],{"className":31709,"code":116537,"language":31711,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[33,116539,116540,116554],{"__ignoreMap":31},[36,116541,116542,116544,116546,116548,116550,116552],{"class":38,"line":39},[36,116543,32154],{"class":73},[36,116545,115448],{"class":50},[36,116547,70],{"class":42},[36,116549,102743],{"class":50},[36,116551,102645],{"class":73},[36,116553,1680],{"class":50},[36,116555,116556,116558,116560,116562,116564,116566],{"class":38,"line":54},[36,116557,32154],{"class":73},[36,116559,115463],{"class":50},[36,116561,70],{"class":42},[36,116563,115468],{"class":50},[36,116565,32154],{"class":73},[36,116567,115473],{"class":50},[19,116569,116570,116571,116573],{},"这和前面章节一样，只是现在放到了类的 ",[33,116572,32160],{}," 里。",[19,116575,116576],{},"缓存 site ID：",[26,116578,116580],{"className":31709,"code":116579,"language":31711,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[33,116581,116582,116596],{"__ignoreMap":31},[36,116583,116584,116586,116588,116590,116592,116594],{"class":38,"line":39},[36,116585,32154],{"class":73},[36,116587,115484],{"class":50},[36,116589,70],{"class":42},[36,116591,115489],{"class":50},[36,116593,90885],{"class":73},[36,116595,1680],{"class":50},[36,116597,116598,116600,116602,116604,116606,116608],{"class":38,"line":54},[36,116599,32154],{"class":73},[36,116601,115505],{"class":50},[36,116603,70],{"class":42},[36,116605,115489],{"class":50},[36,116607,90885],{"class":73},[36,116609,1680],{"class":50},[19,116611,116612],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116614,116615],{},"reset：",[26,116617,116619],{"className":31709,"code":116618,"language":31711,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[33,116620,116621],{"__ignoreMap":31},[36,116622,116623,116625,116627,116629,116631,116633,116635,116637,116639,116641,116643,116645,116647,116649,116651,116653,116655],{"class":38,"line":39},[36,116624,33278],{"class":42},[36,116626,115853],{"class":46},[36,116628,115856],{"class":50},[36,116630,2122],{"class":42},[36,116632,115861],{"class":50},[36,116634,43],{"class":73},[36,116636,26440],{"class":42},[36,116638,40264],{"class":73},[36,116640,14893],{"class":42},[36,116642,40264],{"class":73},[36,116644,115874],{"class":50},[36,116646,115877],{"class":73},[36,116648,26440],{"class":42},[36,116650,40264],{"class":73},[36,116652,14893],{"class":42},[36,116654,40264],{"class":73},[36,116656,32117],{"class":50},[19,116658,116659,116661],{},[33,116660,71387],{}," 做四件事：",[256,116663,116664,116667,116670,116673],{},[259,116665,116666],{},"设置随机种子。",[259,116668,116669],{},"重置 MuJoCo data。",[259,116671,116672],{},"随机初始化关节角。",[259,116674,116675],{},"返回初始观测和 info。",[19,116677,116678],{},"step：",[26,116680,116682],{"className":31709,"code":116681,"language":31711,"meta":31,"style":31},"def step(self, action):\n",[33,116683,116684],{"__ignoreMap":31},[36,116685,116686,116688,116690],{"class":38,"line":39},[36,116687,33278],{"class":42},[36,116689,116018],{"class":46},[36,116691,116021],{"class":50},[19,116693,116694,116696],{},[33,116695,108465],{}," 做六件事：",[256,116698,116699,116702,116708,116711,116714,116717],{},[259,116700,116701],{},"检查并裁剪 action。",[259,116703,116704,116705,29716],{},"写入 ",[33,116706,116707],{},"self.data.ctrl",[259,116709,116710],{},"连续推进若干个 MuJoCo 物理步。",[259,116712,116713],{},"计算新观测。",[259,116715,116716],{},"计算奖励和结束条件。",[259,116718,116719],{},"返回 Gymnasium 标准五元组。",[1645,116721,103039],{"id":103039},[26,116723,116725],{"className":31709,"code":116724,"language":31711,"meta":31,"style":31},"import gymnasium as gym\n",[33,116726,116727],{"__ignoreMap":31},[36,116728,116729,116731,116733,116735],{"class":38,"line":39},[36,116730,31723],{"class":42},[36,116732,115226],{"class":50},[36,116734,32714],{"class":42},[36,116736,115231],{"class":50},[19,116738,116739,116740,116742,116743,116746],{},"导入 Gymnasium，并起别名 ",[33,116741,114871],{},"。后面写 ",[33,116744,116745],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,116748,116750],{"className":31709,"code":116749,"language":31711,"meta":31,"style":31},"from gymnasium import spaces\n",[33,116751,116752],{"__ignoreMap":31},[36,116753,116754,116756,116758,116760],{"class":38,"line":39},[36,116755,32068],{"class":42},[36,116757,115226],{"class":50},[36,116759,31723],{"class":42},[36,116761,115258],{"class":50},[19,116763,116764,116765,116768],{},"导入空间定义工具。",[33,116766,116767],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,116770,116771],{"className":31709,"code":116510,"language":31711,"meta":31,"style":31},[33,116772,116773],{"__ignoreMap":31},[36,116774,116775,116777,116779,116781,116783,116785,116787],{"class":38,"line":39},[36,116776,16023],{"class":42},[36,116778,115388],{"class":46},[36,116780,222],{"class":50},[36,116782,114871],{"class":46},[36,116784,2225],{"class":50},[36,116786,115397],{"class":46},[36,116788,32117],{"class":50},[19,116790,116791,116792,116795,116796,116798,116799,102349,116801,116803],{},"定义一个类，名字叫 ",[33,116793,116794],{},"ReacherEnv","。括号里的 ",[33,116797,116745],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[33,116800,71387],{},[33,116802,108465],{}," 这两个核心方法。",[26,116805,116807],{"className":31709,"code":116806,"language":31711,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[33,116808,116809],{"__ignoreMap":31},[36,116810,116811,116814,116816,116818,116820],{"class":38,"line":39},[36,116812,116813],{"class":50},"metadata ",[36,116815,70],{"class":42},[36,116817,5937],{"class":50},[36,116819,115411],{"class":110},[36,116821,115414],{"class":50},[19,116823,116824],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,116826,116828],{"className":31709,"code":116827,"language":31711,"meta":31,"style":31},"def __init__(self) -> None:\n",[33,116829,116830],{"__ignoreMap":31},[36,116831,116832,116834,116836,116838,116840],{"class":38,"line":39},[36,116833,33278],{"class":42},[36,116835,32135],{"class":73},[36,116837,115427],{"class":50},[36,116839,97017],{"class":73},[36,116841,5230],{"class":50},[19,116843,116844,116846,116847,29716],{},[33,116845,32160],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[33,116848,116849],{},"env = ReacherEnv()",[26,116851,116853],{"className":31709,"code":116852,"language":31711,"meta":31,"style":31},"super().__init__()\n",[33,116854,116855],{"__ignoreMap":31},[36,116856,116857,116860,116862,116864],{"class":38,"line":39},[36,116858,116859],{"class":73},"super",[36,116861,18590],{"class":50},[36,116863,32160],{"class":73},[36,116865,3484],{"class":50},[19,116867,116868,116869,116871],{},"调用父类 ",[33,116870,116745],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,116873,116874],{"className":31709,"code":116537,"language":31711,"meta":31,"style":31},[33,116875,116876,116890],{"__ignoreMap":31},[36,116877,116878,116880,116882,116884,116886,116888],{"class":38,"line":39},[36,116879,32154],{"class":73},[36,116881,115448],{"class":50},[36,116883,70],{"class":42},[36,116885,102743],{"class":50},[36,116887,102645],{"class":73},[36,116889,1680],{"class":50},[36,116891,116892,116894,116896,116898,116900,116902],{"class":38,"line":54},[36,116893,32154],{"class":73},[36,116895,115463],{"class":50},[36,116897,70],{"class":42},[36,116899,115468],{"class":50},[36,116901,32154],{"class":73},[36,116903,115473],{"class":50},[19,116905,116906,116907,116909,116910,102349,116913,116916],{},"把 MuJoCo 模型和状态保存到 ",[33,116908,32154],{}," 上。",[33,116911,116912],{},"self.model",[33,116914,116915],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,116918,116919],{"className":31709,"code":116579,"language":31711,"meta":31,"style":31},[33,116920,116921,116935],{"__ignoreMap":31},[36,116922,116923,116925,116927,116929,116931,116933],{"class":38,"line":39},[36,116924,32154],{"class":73},[36,116926,115484],{"class":50},[36,116928,70],{"class":42},[36,116930,115489],{"class":50},[36,116932,90885],{"class":73},[36,116934,1680],{"class":50},[36,116936,116937,116939,116941,116943,116945,116947],{"class":38,"line":54},[36,116938,32154],{"class":73},[36,116940,115505],{"class":50},[36,116942,70],{"class":42},[36,116944,115489],{"class":50},[36,116946,90885],{"class":73},[36,116948,1680],{"class":50},[19,116950,116951,116952,102349,116955,116958],{},"提前查好 tip 和 target 的 site ID。这样 ",[33,116953,116954],{},"_get_obs",[33,116956,116957],{},"_get_reward"," 里就不用每次按名字查找。",[26,116960,116962],{"className":31709,"code":116961,"language":31711,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[33,116963,116964,116974,116984],{"__ignoreMap":31},[36,116965,116966,116968,116970,116972],{"class":38,"line":39},[36,116967,32154],{"class":73},[36,116969,115198],{"class":50},[36,116971,70],{"class":42},[36,116973,55758],{"class":73},[36,116975,116976,116978,116980,116982],{"class":38,"line":54},[36,116977,32154],{"class":73},[36,116979,115577],{"class":50},[36,116981,70],{"class":42},[36,116983,115582],{"class":73},[36,116985,116986,116988,116990,116992],{"class":38,"line":61},[36,116987,32154],{"class":73},[36,116989,115037],{"class":50},[36,116991,70],{"class":42},[36,116993,48664],{"class":73},[19,116995,116996,116999,117000,117003,117004,117007],{},[33,116997,116998],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[33,117001,117002],{},"max_steps"," 是一个 episode 最多运行多少步。",[33,117005,117006],{},"steps"," 记录当前 episode 已经走了多少步。",[26,117009,117010],{"className":31709,"code":115076,"language":31711,"meta":31,"style":31},[33,117011,117012],{"__ignoreMap":31},[36,117013,117014,117016,117018,117020,117022,117024,117026,117028,117030,117032,117034,117036,117038,117040,117042,117044,117046,117048,117050,117052],{"class":38,"line":39},[36,117015,32154],{"class":73},[36,117017,115085],{"class":50},[36,117019,70],{"class":42},[36,117021,115090],{"class":50},[36,117023,115093],{"class":473},[36,117025,115096],{"class":42},[36,117027,103734],{"class":73},[36,117029,477],{"class":50},[36,117031,115103],{"class":473},[36,117033,70],{"class":42},[36,117035,103734],{"class":73},[36,117037,477],{"class":50},[36,117039,97294],{"class":473},[36,117041,70],{"class":42},[36,117043,222],{"class":50},[36,117045,1747],{"class":73},[36,117047,115120],{"class":50},[36,117049,94831],{"class":473},[36,117051,70],{"class":42},[36,117053,115127],{"class":50},[19,117055,117056,117057,117060,117061,102349,117064,117067],{},"定义动作空间。",[33,117058,117059],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[33,117062,117063],{},"low=-1.0",[33,117065,117066],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,117069,117070],{"className":31709,"code":115137,"language":31711,"meta":31,"style":31},[33,117071,117072],{"__ignoreMap":31},[36,117073,117074,117076,117078,117080,117082,117084,117086,117088,117090,117092,117094,117096,117098,117100,117102,117104,117106,117108],{"class":38,"line":39},[36,117075,32154],{"class":73},[36,117077,115146],{"class":50},[36,117079,70],{"class":42},[36,117081,115090],{"class":50},[36,117083,115093],{"class":473},[36,117085,115096],{"class":42},[36,117087,115157],{"class":50},[36,117089,115103],{"class":473},[36,117091,70],{"class":42},[36,117093,115157],{"class":50},[36,117095,97294],{"class":473},[36,117097,70],{"class":42},[36,117099,222],{"class":50},[36,117101,2113],{"class":73},[36,117103,115120],{"class":50},[36,117105,94831],{"class":473},[36,117107,70],{"class":42},[36,117109,115127],{"class":50},[19,117111,117112,117113,117116,117117,117120],{},"定义观测空间。",[33,117114,117115],{},"shape=(10,)"," 表示观测是 10 个数。",[33,117118,117119],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,117122,117124],{"className":31709,"code":117123,"language":31711,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[33,117125,117126],{"__ignoreMap":31},[36,117127,117128,117130,117132],{"class":38,"line":39},[36,117129,33278],{"class":42},[36,117131,115687],{"class":46},[36,117133,115690],{"class":50},[19,117135,117136,117137,117139],{},"定义内部函数，用来生成观测。函数名前面的 ",[33,117138,2659],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[26,117141,117143],{"className":31709,"code":117142,"language":31711,"meta":31,"style":31},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[33,117144,117145,117159],{"__ignoreMap":31},[36,117146,117147,117149,117151,117153,117155,117157],{"class":38,"line":39},[36,117148,112899],{"class":50},[36,117150,70],{"class":42},[36,117152,40204],{"class":73},[36,117154,115701],{"class":50},[36,117156,32154],{"class":73},[36,117158,115706],{"class":50},[36,117160,117161,117163,117165,117167,117169,117171],{"class":38,"line":54},[36,117162,112909],{"class":50},[36,117164,70],{"class":42},[36,117166,40204],{"class":73},[36,117168,115701],{"class":50},[36,117170,32154],{"class":73},[36,117172,115721],{"class":50},[19,117174,117175],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,117177,117179],{"className":31709,"code":117178,"language":31711,"meta":31,"style":31},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[33,117180,117181,117197],{"__ignoreMap":31},[36,117182,117183,117185,117187,117189,117191,117193,117195],{"class":38,"line":39},[36,117184,112185],{"class":50},[36,117186,70],{"class":42},[36,117188,115730],{"class":50},[36,117190,32154],{"class":73},[36,117192,115735],{"class":50},[36,117194,32154],{"class":73},[36,117196,115740],{"class":50},[36,117198,117199,117201],{"class":38,"line":54},[36,117200,18375],{"class":42},[36,117202,115747],{"class":50},[19,117204,117205,117206,117209,117210,117212],{},"拼接观测，并转换成 ",[33,117207,117208],{},"float32","。很多强化学习库默认使用 ",[33,117211,117208],{},"，所以这里主动转换。",[26,117214,117215],{"className":31709,"code":116618,"language":31711,"meta":31,"style":31},[33,117216,117217],{"__ignoreMap":31},[36,117218,117219,117221,117223,117225,117227,117229,117231,117233,117235,117237,117239,117241,117243,117245,117247,117249,117251],{"class":38,"line":39},[36,117220,33278],{"class":42},[36,117222,115853],{"class":46},[36,117224,115856],{"class":50},[36,117226,2122],{"class":42},[36,117228,115861],{"class":50},[36,117230,43],{"class":73},[36,117232,26440],{"class":42},[36,117234,40264],{"class":73},[36,117236,14893],{"class":42},[36,117238,40264],{"class":73},[36,117240,115874],{"class":50},[36,117242,115877],{"class":73},[36,117244,26440],{"class":42},[36,117246,40264],{"class":73},[36,117248,14893],{"class":42},[36,117250,40264],{"class":73},[36,117252,32117],{"class":50},[19,117254,117255,117256,117258,117259,117262],{},"定义 reset。",[33,117257,115897],{}," 用来控制随机数，保证实验可以复现。",[33,117260,117261],{},"options"," 用来接收额外配置，本章暂时不用。",[26,117264,117266],{"className":31709,"code":117265,"language":31711,"meta":31,"style":31},"super().reset(seed=seed)\n",[33,117267,117268],{"__ignoreMap":31},[36,117269,117270,117272,117274,117276,117278],{"class":38,"line":39},[36,117271,116859],{"class":73},[36,117273,115894],{"class":50},[36,117275,115897],{"class":473},[36,117277,70],{"class":42},[36,117279,115902],{"class":50},[19,117281,117282,117283,117286],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[33,117284,117285],{},"self.np_random"," 生成可复现的随机数。",[26,117288,117290],{"className":31709,"code":117289,"language":31711,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[33,117291,117292],{"__ignoreMap":31},[36,117293,117294,117297,117299,117301,117303],{"class":38,"line":39},[36,117295,117296],{"class":50},"mujoco.mj_resetData(",[36,117298,32154],{"class":73},[36,117300,115912],{"class":50},[36,117302,32154],{"class":73},[36,117304,115917],{"class":50},[19,117306,117307],{},"把 MuJoCo 状态重置到默认状态。",[26,117309,117311],{"className":31709,"code":117310,"language":31711,"meta":31,"style":31},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[33,117312,117313],{"__ignoreMap":31},[36,117314,117315,117317,117319,117321,117323,117325,117327,117329,117331,117333,117335,117337,117339,117341,117343,117345,117347],{"class":38,"line":39},[36,117316,32154],{"class":73},[36,117318,115928],{"class":50},[36,117320,70],{"class":42},[36,117322,40204],{"class":73},[36,117324,115935],{"class":50},[36,117326,115093],{"class":473},[36,117328,115096],{"class":42},[36,117330,87541],{"class":73},[36,117332,477],{"class":50},[36,117334,115103],{"class":473},[36,117336,70],{"class":42},[36,117338,87541],{"class":73},[36,117340,477],{"class":50},[36,117342,32827],{"class":473},[36,117344,70],{"class":42},[36,117346,32154],{"class":73},[36,117348,115960],{"class":50},[19,117350,116672,117351,117354,117355,117358,117359,117361],{},[33,117352,117353],{},"[:]"," 表示修改整个数组。",[33,117356,117357],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[33,117360,103481],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,117363,117365],{"className":31709,"code":117364,"language":31711,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[33,117366,117367],{"__ignoreMap":31},[36,117368,117369,117371,117373,117375],{"class":38,"line":39},[36,117370,32154],{"class":73},[36,117372,115967],{"class":50},[36,117374,70],{"class":42},[36,117376,106092],{"class":73},[19,117378,117379],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,117381,117383],{"className":31709,"code":117382,"language":31711,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[33,117384,117385,117395],{"__ignoreMap":31},[36,117386,117387,117389,117391,117393],{"class":38,"line":39},[36,117388,32154],{"class":73},[36,117390,115037],{"class":50},[36,117392,70],{"class":42},[36,117394,48664],{"class":73},[36,117396,117397,117399,117401],{"class":38,"line":54},[36,117398,18375],{"class":42},[36,117400,40204],{"class":73},[36,117402,116007],{"class":50},[19,117404,117405],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,117407,117408],{"className":31709,"code":116681,"language":31711,"meta":31,"style":31},[33,117409,117410],{"__ignoreMap":31},[36,117411,117412,117414,117416],{"class":38,"line":39},[36,117413,33278],{"class":42},[36,117415,116018],{"class":46},[36,117417,116021],{"class":50},[19,117419,117420],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,117422,117424],{"className":31709,"code":117423,"language":31711,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[33,117425,117426],{"__ignoreMap":31},[36,117427,117428,117430,117432,117434,117436,117438],{"class":38,"line":39},[36,117429,108773],{"class":50},[36,117431,70],{"class":42},[36,117433,116030],{"class":50},[36,117435,94831],{"class":473},[36,117437,70],{"class":42},[36,117439,115127],{"class":50},[19,117441,117442,117443,29716],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[33,117444,117208],{},[26,117446,117448],{"className":31709,"code":117447,"language":31711,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[33,117449,117450],{"__ignoreMap":31},[36,117451,117452,117454,117456,117458,117460,117462,117464],{"class":38,"line":39},[36,117453,108773],{"class":50},[36,117455,70],{"class":42},[36,117457,108778],{"class":50},[36,117459,32154],{"class":73},[36,117461,116049],{"class":50},[36,117463,32154],{"class":73},[36,117465,116054],{"class":50},[19,117467,117468],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,117470,117472],{"className":31709,"code":117471,"language":31711,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[33,117473,117474],{"__ignoreMap":31},[36,117475,117476,117478,117480,117482],{"class":38,"line":39},[36,117477,32154],{"class":73},[36,117479,116065],{"class":50},[36,117481,70],{"class":42},[36,117483,108801],{"class":50},[19,117485,117486],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,117488,117490],{"className":31709,"code":117489,"language":31711,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[33,117491,117492,117508],{"__ignoreMap":31},[36,117493,117494,117496,117498,117500,117502,117504,117506],{"class":38,"line":39},[36,117495,4516],{"class":42},[36,117497,102832],{"class":50},[36,117499,27374],{"class":42},[36,117501,33774],{"class":73},[36,117503,222],{"class":50},[36,117505,32154],{"class":73},[36,117507,116086],{"class":50},[36,117509,117510,117513,117515,117517,117519],{"class":38,"line":54},[36,117511,117512],{"class":50},"    mujoco.mj_step(",[36,117514,32154],{"class":73},[36,117516,115912],{"class":50},[36,117518,32154],{"class":73},[36,117520,115917],{"class":50},[19,117522,117523,117524,117527,117528,117530,117531,29716],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[33,117525,117526],{},"frame_skip=5","，所以外部调用一次 ",[33,117529,115208],{},"，内部实际执行 5 次 ",[33,117532,102546],{},[26,117534,117536],{"className":31709,"code":117535,"language":31711,"meta":31,"style":31},"self.steps += 1\n",[33,117537,117538],{"__ignoreMap":31},[36,117539,117540,117542,117544,117546],{"class":38,"line":39},[36,117541,32154],{"class":73},[36,117543,115037],{"class":50},[36,117545,10945],{"class":42},[36,117547,57030],{"class":73},[19,117549,117550],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,117552,117554],{"className":31709,"code":117553,"language":31711,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[33,117555,117556,117566],{"__ignoreMap":31},[36,117557,117558,117560,117562,117564],{"class":38,"line":39},[36,117559,112185],{"class":50},[36,117561,70],{"class":42},[36,117563,40204],{"class":73},[36,117565,116128],{"class":50},[36,117567,117568,117570,117572,117574],{"class":38,"line":54},[36,117569,112336],{"class":50},[36,117571,70],{"class":42},[36,117573,40204],{"class":73},[36,117575,116139],{"class":50},[19,117577,117578],{},"计算新的观测和奖励。",[26,117580,117582],{"className":31709,"code":117581,"language":31711,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[33,117583,117584],{"__ignoreMap":31},[36,117585,117586,117588,117590,117592,117594,117596],{"class":38,"line":39},[36,117587,112927],{"class":50},[36,117589,70],{"class":42},[36,117591,111128],{"class":73},[36,117593,116182],{"class":50},[36,117595,2199],{"class":42},[36,117597,116187],{"class":50},[19,117599,117600],{},"计算末端到目标的距离，并转换成 Python float。",[26,117602,117603],{"className":31709,"code":115008,"language":31711,"meta":31,"style":31},[33,117604,117605,117617],{"__ignoreMap":31},[36,117606,117607,117609,117611,117613,117615],{"class":38,"line":39},[36,117608,115015],{"class":50},[36,117610,70],{"class":42},[36,117612,115020],{"class":50},[36,117614,2577],{"class":42},[36,117616,115025],{"class":73},[36,117618,117619,117621,117623,117625,117627,117629,117631],{"class":38,"line":54},[36,117620,115030],{"class":50},[36,117622,70],{"class":42},[36,117624,40204],{"class":73},[36,117626,115037],{"class":50},[36,117628,3228],{"class":42},[36,117630,40204],{"class":73},[36,117632,115044],{"class":50},[19,117634,117635],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,117637,117639],{"className":31709,"code":117638,"language":31711,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[33,117640,117641,117654],{"__ignoreMap":31},[36,117642,117643,117646,117648,117650,117652],{"class":38,"line":39},[36,117644,117645],{"class":50},"info ",[36,117647,70],{"class":42},[36,117649,5937],{"class":50},[36,117651,116233],{"class":110},[36,117653,116236],{"class":50},[36,117655,117656,117658],{"class":38,"line":54},[36,117657,18375],{"class":42},[36,117659,116243],{"class":50},[19,117661,117662,117665],{},[33,117663,117664],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,117667,117669],{"className":31709,"code":117668,"language":31711,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[33,117670,117671,117680],{"__ignoreMap":31},[36,117672,117673,117676,117678],{"class":38,"line":39},[36,117674,117675],{"class":50},"env ",[36,117677,70],{"class":42},[36,117679,116273],{"class":50},[36,117681,117682,117684,117686,117688,117690,117692,117694],{"class":38,"line":54},[36,117683,114731],{"class":50},[36,117685,70],{"class":42},[36,117687,116283],{"class":50},[36,117689,115897],{"class":473},[36,117691,70],{"class":42},[36,117693,1859],{"class":73},[36,117695,1680],{"class":50},[19,117697,117698,117699,117702],{},"创建环境并重置。",[33,117700,117701],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,117704,117706],{"className":31709,"code":117705,"language":31711,"meta":31,"style":31},"action = env.action_space.sample()\n",[33,117707,117708],{"__ignoreMap":31},[36,117709,117710,117712,117714],{"class":38,"line":39},[36,117711,108773],{"class":50},[36,117713,70],{"class":42},[36,117715,116352],{"class":50},[19,117717,117718],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117720,103647],{"id":103646},[19,117722,106815],{},[26,117724,117727],{"className":117725,"code":117726,"language":6676,"meta":31},[6674],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[33,117728,117726],{"__ignoreMap":31},[19,117730,117731],{},"这个环境已经具备强化学习环境的基本结构。",[19,117733,117734],{},"主函数里使用随机动作：",[26,117736,117737],{"className":31709,"code":117705,"language":31711,"meta":31,"style":31},[33,117738,117739],{"__ignoreMap":31},[36,117740,117741,117743,117745],{"class":38,"line":39},[36,117742,108773],{"class":50},[36,117744,70],{"class":42},[36,117746,116352],{"class":50},[19,117748,117749],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117751,103679],{"id":103678},[256,117753,117754,117757,117763,117772,117781,117790,117796],{},[259,117755,117756],{},"运行程序。",[259,117758,117759,117760,29716],{},"确认 ",[33,117761,117762],{},"obs.shape == (10,)",[259,117764,112512,117765,117768,117769,29716],{},[33,117766,117767],{},"env.action_space","，应类似 ",[33,117770,117771],{},"Box(-1.0, 1.0, (2,), float32)",[259,117773,106916,117774,117777,117778,29716],{},[33,117775,117776],{},"self.max_steps = 10","，确认环境会更快 ",[33,117779,117780],{},"truncated=True",[259,117782,103742,117783,103745,117786,117789],{},[33,117784,117785],{},"terminated = dist \u003C 0.05",[33,117787,117788],{},"dist \u003C 0.2","，观察是否更容易结束。",[259,117791,103742,117792,117795],{},[33,117793,117794],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[259,117797,117798,117799,117801,117802,117805],{},"在 ",[33,117800,117664],{}," 里加入 ",[33,117803,117804],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117807,103784],{"id":103783},[1645,117809,117811],{"id":117810},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117813,117814,117815,117817],{},"Gymnasium 的 ",[33,117816,108465],{}," 返回 5 个值:",[26,117819,117821],{"className":31709,"code":117820,"language":31711,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[33,117822,117823],{"__ignoreMap":31},[36,117824,117825],{"class":38,"line":39},[36,117826,117820],{"class":50},[19,117828,117829],{},"不是旧 Gym 的 4 个值。",[1645,117831,117833,117836],{"id":117832},"datactrl-action-维度错误",[33,117834,117835],{},"data.ctrl[:] = action"," 维度错误",[19,117838,103854],{},[26,117840,117842],{"className":31709,"code":117841,"language":31711,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[33,117843,117844,117855],{"__ignoreMap":31},[36,117845,117846,117848,117850,117852],{"class":38,"line":39},[36,117847,31746],{"class":73},[36,117849,222],{"class":50},[36,117851,32154],{"class":73},[36,117853,117854],{"class":50},".model.nu)\n",[36,117856,117857,117859],{"class":38,"line":54},[36,117858,31746],{"class":73},[36,117860,117861],{"class":50},"(action.shape)\n",[19,117863,117864],{},"两者必须匹配。",[1645,117866,117868],{"id":117867},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117870,103793],{},[26,117872,117874],{"className":31709,"code":117873,"language":31711,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[33,117875,117876],{"__ignoreMap":31},[36,117877,117878,117881,117883,117885,117887],{"class":38,"line":39},[36,117879,117880],{"class":50},"mujoco.mj_forward(",[36,117882,32154],{"class":73},[36,117884,115912],{"class":50},[36,117886,32154],{"class":73},[36,117888,115917],{"class":50},[1645,117890,117892,117894],{"id":117891},"observation_space-维度和-obs-不一致",[33,117893,114931],{}," 维度和 obs 不一致",[19,117896,103906],{},[26,117898,117900],{"className":31709,"code":117899,"language":31711,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[33,117901,117902,117912,117919],{"__ignoreMap":31},[36,117903,117904,117906,117908,117910],{"class":38,"line":39},[36,117905,112185],{"class":50},[36,117907,70],{"class":42},[36,117909,40204],{"class":73},[36,117911,116128],{"class":50},[36,117913,117914,117916],{"class":38,"line":54},[36,117915,31746],{"class":73},[36,117917,117918],{"class":50},"(obs.shape)\n",[36,117920,117921,117923,117925,117927],{"class":38,"line":61},[36,117922,31746],{"class":73},[36,117924,222],{"class":50},[36,117926,32154],{"class":73},[36,117928,117929],{"class":50},".observation_space.shape)\n",[19,117931,117932],{},"两者必须一致。本章观测是：",[26,117934,117937],{"className":117935,"code":117936,"language":6676,"meta":31},[6674],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[33,117938,117936],{"__ignoreMap":31},[1645,117940,117942],{"id":117941},"action-超过范围","action 超过范围",[19,117944,117945],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,117947,117948],{"className":31709,"code":117447,"language":31711,"meta":31,"style":31},[33,117949,117950],{"__ignoreMap":31},[36,117951,117952,117954,117956,117958,117960,117962,117964],{"class":38,"line":39},[36,117953,108773],{"class":50},[36,117955,70],{"class":42},[36,117957,108778],{"class":50},[36,117959,32154],{"class":73},[36,117961,116049],{"class":50},[36,117963,32154],{"class":73},[36,117965,116054],{"class":50},[19,117967,117968,117969,29716],{},"这能避免无效动作直接写入 ",[33,117970,102407],{},[1645,117972,117974],{"id":117973},"忘记返回-info","忘记返回 info",[19,117976,117814,117977,102349,117979,117981],{},[33,117978,71387],{},[33,117980,108465],{}," 都会返回 info：",[26,117983,117984],{"className":31709,"code":114724,"language":31711,"meta":31,"style":31},[33,117985,117986,117994],{"__ignoreMap":31},[36,117987,117988,117990,117992],{"class":38,"line":39},[36,117989,114731],{"class":50},[36,117991,70],{"class":42},[36,117993,114736],{"class":50},[36,117995,117996,117998,118000],{"class":38,"line":54},[36,117997,114741],{"class":50},[36,117999,70],{"class":42},[36,118001,114746],{"class":50},[19,118003,118004,118005,29716],{},"即使暂时没有额外信息，也返回 ",[33,118006,33790],{},[14,118008,118010],{"id":118009},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118012,118013],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[256,118015,118016,118019,118022,118025,118028,118031],{},[259,118017,118018],{},"更稳定的 reward。",[259,118020,118021],{},"合理的 episode 长度。",[259,118023,118024],{},"可重复的随机目标采样。",[259,118026,118027],{},"render 接口。",[259,118029,118030],{},"环境注册代码。",[259,118032,118033],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118035,118036],{},"如果只是自己写训练循环，最小形式是：",[26,118038,118040],{"className":31709,"code":118039,"language":31711,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n\nfor _ in range(1000):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n",[33,118041,118042,118050,118066,118070,118086,118095,118104,118114],{"__ignoreMap":31},[36,118043,118044,118046,118048],{"class":38,"line":39},[36,118045,117675],{"class":50},[36,118047,70],{"class":42},[36,118049,116273],{"class":50},[36,118051,118052,118054,118056,118058,118060,118062,118064],{"class":38,"line":54},[36,118053,114731],{"class":50},[36,118055,70],{"class":42},[36,118057,116283],{"class":50},[36,118059,115897],{"class":473},[36,118061,70],{"class":42},[36,118063,1859],{"class":73},[36,118065,1680],{"class":50},[36,118067,118068],{"class":38,"line":61},[36,118069,58],{"emptyLinePlaceholder":57},[36,118071,118072,118074,118076,118078,118080,118082,118084],{"class":38,"line":80},[36,118073,4516],{"class":42},[36,118075,102832],{"class":50},[36,118077,27374],{"class":42},[36,118079,33774],{"class":73},[36,118081,222],{"class":50},[36,118083,7889],{"class":73},[36,118085,32117],{"class":50},[36,118087,118088,118091,118093],{"class":38,"line":96},[36,118089,118090],{"class":50},"    action ",[36,118092,70],{"class":42},[36,118094,116352],{"class":50},[36,118096,118097,118100,118102],{"class":38,"line":101},[36,118098,118099],{"class":50},"    obs, reward, terminated, truncated, info ",[36,118101,70],{"class":42},[36,118103,114746],{"class":50},[36,118105,118106,118108,118110,118112],{"class":38,"line":128},[36,118107,4592],{"class":42},[36,118109,116418],{"class":50},[36,118111,116421],{"class":42},[36,118113,116424],{"class":50},[36,118115,118116,118119,118121],{"class":38,"line":149},[36,118117,118118],{"class":50},"        obs, info ",[36,118120,70],{"class":42},[36,118122,114736],{"class":50},[14,118124,118126],{"id":118125},"_9本章小结","9.本章小结",[19,118128,118129],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,118131,118134],{"className":118132,"code":118133,"language":6676,"meta":31},[6674],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[33,118135,118133],{"__ignoreMap":31},[19,118137,118138],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1592,118140,118141],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":118143},[118144,118145,118146,118153,118157,118158,118159,118169,118170],{"id":101977,"depth":54,"text":101978},{"id":102100,"depth":54,"text":102101},{"id":102375,"depth":54,"text":102376,"children":118147},[118148,118150,118152],{"id":114955,"depth":61,"text":118149},"terminated 和 truncated 的区别",{"id":115058,"depth":61,"text":118151},"observation_space 和 action_space",{"id":115185,"depth":61,"text":115186},{"id":102583,"depth":54,"text":102584,"children":118154},[118155,118156],{"id":102903,"depth":61,"text":102903},{"id":103039,"depth":61,"text":103039},{"id":103646,"depth":54,"text":103647},{"id":103678,"depth":54,"text":103679},{"id":103783,"depth":54,"text":103784,"children":118160},[118161,118162,118164,118165,118167,118168],{"id":117810,"depth":61,"text":117811},{"id":117832,"depth":61,"text":118163},"data.ctrl[:] = action 维度错误",{"id":117867,"depth":61,"text":117868},{"id":117891,"depth":61,"text":118166},"observation_space 维度和 obs 不一致",{"id":117941,"depth":61,"text":117942},{"id":117973,"depth":61,"text":117974},{"id":118009,"depth":54,"text":118010},{"id":118125,"depth":54,"text":118126},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114708,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118177,"title":118178,"body":118179,"description":118602,"extension":1603,"meta":118603,"navigation":57,"path":118604,"seo":118605,"stem":118606,"__hash__":118607},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118180,"toc":118592},[118181,118185,118188,118191,118211,118217,118223,118233,118236,118239,118259,118262,118266,118269,118275,118278,118292,118295,118298,118372,118375,118381,118384,118407,118410,118460,118463,118469,118472,118475,118478,118497,118500,118506,118509,118512,118515,118535,118538,118541,118544,118589],[10,118182,118184],{"id":118183},"mujoco-学习","MuJoCo 学习",[19,118186,118187],{},"初版",[19,118189,118190],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[256,118192,118193,118196,118199,118208],{},[259,118194,118195],{},"MuJoCo 模型文件在描述什么。",[259,118197,118198],{},"Python 代码怎样读取和推进仿真。",[259,118200,118201,1880,118203,1880,118205,118207],{},[33,118202,105361],{},[33,118204,105691],{},[33,118206,105694],{}," 这些数组为什么重要。",[259,118209,118210],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118212,118213,118214,118216],{},"默认环境为 Fedora 44、Python >= 3.10、",[33,118215,102358],{}," 官方 Python bindings。",[19,118218,118219,118220,118222],{},"注意：本文禁止使用 ",[33,118221,102343],{},"。所有示例均使用：",[26,118224,118225],{"className":31709,"code":102909,"language":31711,"meta":31,"style":31},[33,118226,118227],{"__ignoreMap":31},[36,118228,118229,118231],{"class":38,"line":39},[36,118230,31723],{"class":42},[36,118232,102632],{"class":50},[14,118234,118235],{"id":118235},"适合谁阅读",[19,118237,118238],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[256,118240,118241,118244,118247,118250],{},[259,118242,118243],{},"没学过 MuJoCo，只会一点 Python。",[259,118245,118246],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[259,118248,118249],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[259,118251,118252,118253,118255,118256,118258],{},"以前接触过 ",[33,118254,102343],{},"，现在想迁移到官方 ",[33,118257,102352],{}," Python bindings。",[19,118260,118261],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118263,118265],{"id":118264},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118267,118268],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,118270,118273],{"className":118271,"code":118272,"language":6676,"meta":31},[6674],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[33,118274,118272],{"__ignoreMap":31},[19,118276,118277],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[256,118279,118280,118283,118286,118289],{},[259,118281,118282],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[259,118284,118285],{},"快速测试控制算法，不必一开始就上真实机器人。",[259,118287,118288],{},"生成强化学习环境。",[259,118290,118291],{},"采集状态、动作、图像、奖励等训练数据。",[14,118293,118294],{"id":118294},"学习前的心智模型",[19,118296,118297],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1806,118299,118300,118312],{},[1809,118301,118302],{},[1812,118303,118304,118307,118310],{},[1815,118305,118306],{"align":25066},"部分",[1815,118308,118309],{"align":25066},"负责什么",[1815,118311,22516],{"align":25066},[1852,118313,118314,118325,118337,118349,118361],{},[1812,118315,118316,118319,118322],{},[1857,118317,118318],{"align":25066},"MJCF XML",[1857,118320,118321],{"align":25066},"定义世界和机器人结构",[1857,118323,118324],{"align":25066},"地面、盒子、关节、电机、摄像头",[1812,118326,118327,118331,118334],{},[1857,118328,118329],{"align":25066},[33,118330,102040],{},[1857,118332,118333],{"align":25066},"编译后的静态模型",[1857,118335,118336],{"align":25066},"有几个关节、有几个电机、时间步长是多少",[1812,118338,118339,118343,118346],{},[1857,118340,118341],{"align":25066},[33,118342,102050],{},[1857,118344,118345],{"align":25066},"运行中的动态状态",[1857,118347,118348],{"align":25066},"当前时间、位置、速度、电机输入",[1812,118350,118351,118355,118358],{},[1857,118352,118353],{"align":25066},[33,118354,102546],{},[1857,118356,118357],{"align":25066},"推进一步物理仿真",[1857,118359,118360],{"align":25066},"根据重力、力、碰撞更新状态",[1812,118362,118363,118366,118369],{},[1857,118364,118365],{"align":25066},"Viewer \u002F Renderer",[1857,118367,118368],{"align":25066},"把仿真显示出来",[1857,118370,118371],{"align":25066},"打开窗口或保存图片",[19,118373,118374],{},"一句话总结：",[26,118376,118379],{"className":118377,"code":118378,"language":6676,"meta":31},[6674],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[33,118380,118378],{"__ignoreMap":31},[19,118382,118383],{},"参考来源：",[2674,118385,118386,118393,118400],{},[259,118387,118388,118389],{},"MuJoCo Python 官方文档：",[1906,118390,118391],{"href":118391,"rel":118392},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25195],[259,118394,118395,118396],{},"MuJoCo XML Reference：",[1906,118397,118398],{"href":118398,"rel":118399},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25195],[259,118401,118402,118403],{},"MuJoCo Overview：",[1906,118404,118405],{"href":118405,"rel":118406},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25195],[14,118408,118409],{"id":118409},"章节目录",[256,118411,118412,118418,118424,118430,118436,118442,118448,118454],{},[259,118413,118414],{},[1906,118415,118417],{"href":118416},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[259,118419,118420],{},[1906,118421,118423],{"href":118422},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[259,118425,118426],{},[1906,118427,118429],{"href":118428},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[259,118431,118432],{},[1906,118433,118435],{"href":118434},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[259,118437,118438],{},[1906,118439,118441],{"href":118440},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[259,118443,118444],{},[1906,118445,118447],{"href":118446},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[259,118449,118450],{},[1906,118451,118453],{"href":118452},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[259,118455,118456],{},[1906,118457,118459],{"href":118458},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118461,118462],{"id":118462},"推荐学习路线",[26,118464,118467],{"className":118465,"code":118466,"language":6676,"meta":31},[6674],"环境安装\n→ XML \u002F MJCF 建模\n→ MjModel \u002F MjData\n→ mj_step 控制循环\n→ joint \u002F actuator\n→ viewer \u002F renderer\n→ cartpole \u002F reacher\n→ Gymnasium 环境接口\n→ imitation learning \u002F VLA 数据采集\n",[33,118468,118466],{"__ignoreMap":31},[19,118470,118471],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118473,118474],{"id":118474},"建议的目录结构",[19,118476,118477],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,118479,118481],{"className":25152,"code":118480,"language":25154,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[33,118482,118483,118491],{"__ignoreMap":31},[36,118484,118485,118487,118489],{"class":38,"line":39},[36,118486,102597],{"class":46},[36,118488,30547],{"class":73},[36,118490,102602],{"class":110},[36,118492,118493,118495],{"class":38,"line":54},[36,118494,102607],{"class":73},[36,118496,102602],{"class":110},[19,118498,118499],{},"每一章的代码都单独保存：",[26,118501,118504],{"className":118502,"code":118503,"language":6676,"meta":31},[6674],"mujoco_tutorial\u002F\n├── ch1_first_sim.py\n├── ch2_xml_basic.py\n├── ch3_python_state.py\n├── ch4_joint_motor.py\n├── ch5_viewer.py\n├── ch5_renderer.py\n├── ch6_cartpole.py\n├── ch7_reacher.py\n└── ch8_gym_env.py\n",[33,118505,118503],{"__ignoreMap":31},[19,118507,118508],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118510,118511],{"id":118511},"学习方法",[19,118513,118514],{},"每章建议按这个顺序操作：",[256,118516,118517,118520,118523,118526,118529,118532],{},[259,118518,118519],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[259,118521,118522],{},"复制最小可运行代码，保存成指定文件。",[259,118524,118525],{},"运行代码，确认没有报错。",[259,118527,118528],{},"对照“运行结果说明”理解输出。",[259,118530,118531],{},"做“验证步骤”，主动改一两个参数。",[259,118533,118534],{},"遇到报错先看“常见错误与解决方案”。",[19,118536,118537],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118539,118540],{"id":118540},"全局排错顺序",[19,118542,118543],{},"遇到问题时，按下面顺序查：",[256,118545,118546,118552,118558,118563,118566,118569,118576,118586],{},[259,118547,118548,118549],{},"Python 环境是否激活：",[33,118550,118551],{},"which python",[259,118553,118554,118555],{},"MuJoCo 是否能导入：",[33,118556,118557],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[259,118559,118560,118561],{},"是否误装了 ",[33,118562,102343],{},[259,118564,118565],{},"XML 标签是否闭合、属性是否拼写正确",[259,118567,118568],{},"actuator 引用的 joint 名字是否存在",[259,118570,118571,118573,118574],{},[33,118572,102407],{}," 的长度是否等于 ",[33,118575,103489],{},[259,118577,106916,118578,83870,118580,118582,118583],{},[33,118579,105361],{},[33,118581,105691],{}," 后是否调用了 ",[33,118584,118585],{},"mujoco.mj_forward",[259,118587,118588],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1592,118590,118591],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":118593},[118594,118595,118596,118597,118598,118599,118600,118601],{"id":118235,"depth":54,"text":118235},{"id":118264,"depth":54,"text":118265},{"id":118294,"depth":54,"text":118294},{"id":118409,"depth":54,"text":118409},{"id":118462,"depth":54,"text":118462},{"id":118474,"depth":54,"text":118474},{"id":118511,"depth":54,"text":118511},{"id":118540,"depth":54,"text":118540},"仿真搭建。",{"category":24708},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118178,"description":118602},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118609,"title":118610,"body":118611,"description":24706,"extension":1603,"meta":119066,"navigation":57,"path":119067,"seo":119068,"stem":119069,"__hash__":119070},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118612,"toc":119064},[118613,118616,118619,118625,119061],[10,118614,118610],{"id":118615},"_1-最常用的基本操作更新",[19,118617,118618],{},"装linux系统教程：",[19,118620,118621],{},[1906,118622,118623],{"href":118623,"rel":118624},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25195],[26,118626,118630],{"className":118627,"code":118628,"language":118629,"meta":31,"style":31},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash",[33,118631,118632,118637,118642,118651,118656,118665,118670,118690,118695,118706,118711,118720,118725,118753,118758,118777,118782,118801,118805,118810,118826,118830,118835,118865,118869,118874,118890,118894,118899,118914,118918,118923,118939,118943,118948,118960,118972,118976,118981,118998,119002,119007,119025,119029,119034,119043,119047,119052],{"__ignoreMap":31},[36,118633,118634],{"class":38,"line":39},[36,118635,118636],{"class":124},"#更新相关的知识\n",[36,118638,118639],{"class":38,"line":54},[36,118640,118641],{"class":124},"# 更新软件包列表（从服务器获取最新软件信息）\n",[36,118643,118644,118646,118649],{"class":38,"line":61},[36,118645,25907],{"class":46},[36,118647,118648],{"class":110}," apt",[36,118650,27573],{"class":110},[36,118652,118653],{"class":38,"line":80},[36,118654,118655],{"class":124},"# 升级所有可更新的软件包（不删除旧包）\n",[36,118657,118658,118660,118662],{"class":38,"line":96},[36,118659,25907],{"class":46},[36,118661,118648],{"class":110},[36,118663,118664],{"class":110}," upgrade\n",[36,118666,118667],{"class":38,"line":101},[36,118668,118669],{"class":124},"#更新和升级软件包\n",[36,118671,118672,118674,118676,118679,118681,118683,118685,118688],{"class":38,"line":128},[36,118673,25907],{"class":46},[36,118675,118648],{"class":110},[36,118677,118678],{"class":110}," update",[36,118680,27521],{"class":50},[36,118682,25907],{"class":46},[36,118684,118648],{"class":110},[36,118686,118687],{"class":110}," upgrade",[36,118689,102312],{"class":73},[36,118691,118692],{"class":38,"line":149},[36,118693,118694],{"class":124},"#列出可更新的软件包及版本信息\n",[36,118696,118697,118700,118703],{"class":38,"line":154},[36,118698,118699],{"class":46},"apt",[36,118701,118702],{"class":110}," list",[36,118704,118705],{"class":73}," --upgradable\n",[36,118707,118708],{"class":38,"line":167},[36,118709,118710],{"class":124},"#彻底升级（处理依赖关系，可能删除旧包）\n",[36,118712,118713,118715,118717],{"class":38,"line":172},[36,118714,25907],{"class":46},[36,118716,118648],{"class":110},[36,118718,118719],{"class":110}," full-upgrade\n",[36,118721,118722],{"class":38,"line":192},[36,118723,118724],{"class":124},"#设置指定版本\n",[36,118726,118727,118729,118731,118733,118735,118738,118740,118742,118744,118746,118749,118751],{"class":38,"line":211},[36,118728,25907],{"class":46},[36,118730,118648],{"class":110},[36,118732,25164],{"class":110},[36,118734,30233],{"class":42},[36,118736,118737],{"class":110},"package_nam",[36,118739,1744],{"class":50},[36,118741,2627],{"class":42},[36,118743,70],{"class":110},[36,118745,2577],{"class":42},[36,118747,118748],{"class":110},"version_numbe",[36,118750,2337],{"class":50},[36,118752,52638],{"class":42},[36,118754,118755],{"class":38,"line":216},[36,118756,118757],{"class":124},"#只安装软件包不升级\n",[36,118759,118760,118762,118764,118766,118768,118770,118772,118774],{"class":38,"line":231},[36,118761,25907],{"class":46},[36,118763,118648],{"class":110},[36,118765,25164],{"class":110},[36,118767,30233],{"class":42},[36,118769,118737],{"class":110},[36,118771,1744],{"class":50},[36,118773,2627],{"class":42},[36,118775,118776],{"class":73}," --no-upgrade\n",[36,118778,118779],{"class":38,"line":236},[36,118780,118781],{"class":124},"#只升级，不存在就不安装\n",[36,118783,118784,118786,118788,118790,118792,118794,118796,118798],{"class":38,"line":247},[36,118785,25907],{"class":46},[36,118787,118648],{"class":110},[36,118789,25164],{"class":110},[36,118791,30233],{"class":42},[36,118793,118737],{"class":110},[36,118795,1744],{"class":50},[36,118797,2627],{"class":42},[36,118799,118800],{"class":73}," --only-upgrade\n",[36,118802,118803],{"class":38,"line":637},[36,118804,58],{"emptyLinePlaceholder":57},[36,118806,118807],{"class":38,"line":646},[36,118808,118809],{"class":124},"#安装指定的软件命令\n",[36,118811,118812,118814,118816,118818,118820,118822,118824],{"class":38,"line":655},[36,118813,25907],{"class":46},[36,118815,118648],{"class":110},[36,118817,25164],{"class":110},[36,118819,30233],{"class":42},[36,118821,118737],{"class":110},[36,118823,1744],{"class":50},[36,118825,52638],{"class":42},[36,118827,118828],{"class":38,"line":660},[36,118829,58],{"emptyLinePlaceholder":57},[36,118831,118832],{"class":38,"line":665},[36,118833,118834],{"class":124},"#安装多个软件包\n",[36,118836,118837,118839,118841,118843,118845,118848,118851,118853,118855,118858,118860,118862],{"class":38,"line":674},[36,118838,25907],{"class":46},[36,118840,118648],{"class":110},[36,118842,25164],{"class":110},[36,118844,30233],{"class":42},[36,118846,118847],{"class":110},"package_",[36,118849,118850],{"class":42},"1>",[36,118852,30233],{"class":42},[36,118854,118847],{"class":110},[36,118856,118857],{"class":42},"2>",[36,118859,30233],{"class":42},[36,118861,118847],{"class":110},[36,118863,118864],{"class":42},"3>\n",[36,118866,118867],{"class":38,"line":679},[36,118868,58],{"emptyLinePlaceholder":57},[36,118870,118871],{"class":38,"line":692},[36,118872,118873],{"class":124},"#更新指定的软件命令\n",[36,118875,118876,118878,118880,118882,118884,118886,118888],{"class":38,"line":705},[36,118877,25907],{"class":46},[36,118879,118648],{"class":110},[36,118881,118678],{"class":110},[36,118883,30233],{"class":42},[36,118885,118737],{"class":110},[36,118887,1744],{"class":50},[36,118889,52638],{"class":42},[36,118891,118892],{"class":38,"line":710},[36,118893,58],{"emptyLinePlaceholder":57},[36,118895,118896],{"class":38,"line":722},[36,118897,118898],{"class":124},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[36,118900,118901,118903,118906,118908,118910,118912],{"class":38,"line":750},[36,118902,118699],{"class":46},[36,118904,118905],{"class":110}," show",[36,118907,30233],{"class":42},[36,118909,118737],{"class":110},[36,118911,1744],{"class":50},[36,118913,52638],{"class":42},[36,118915,118916],{"class":38,"line":755},[36,118917,58],{"emptyLinePlaceholder":57},[36,118919,118920],{"class":38,"line":777},[36,118921,118922],{"class":124},"#删除软件包命令\n",[36,118924,118925,118927,118929,118931,118933,118935,118937],{"class":38,"line":802},[36,118926,25907],{"class":46},[36,118928,118648],{"class":110},[36,118930,27410],{"class":110},[36,118932,30233],{"class":42},[36,118934,118737],{"class":110},[36,118936,1744],{"class":50},[36,118938,52638],{"class":42},[36,118940,118941],{"class":38,"line":807},[36,118942,58],{"emptyLinePlaceholder":57},[36,118944,118945],{"class":38,"line":818},[36,118946,118947],{"class":124},"# 清理旧版本和缓存（释放磁盘空间）\n",[36,118949,118950,118952,118954,118957],{"class":38,"line":843},[36,118951,25907],{"class":46},[36,118953,118648],{"class":110},[36,118955,118956],{"class":110}," autoremove",[36,118958,118959],{"class":124},"  # 删除不再需要的依赖和库文件\n",[36,118961,118962,118964,118966,118969],{"class":38,"line":848},[36,118963,25907],{"class":46},[36,118965,118648],{"class":110},[36,118967,118968],{"class":110}," clean",[36,118970,118971],{"class":124},"       # 清理下载的缓存包\n",[36,118973,118974],{"class":38,"line":859},[36,118975,58],{"emptyLinePlaceholder":57},[36,118977,118978],{"class":38,"line":864},[36,118979,118980],{"class":124},"#移除软件包及配置文件\n",[36,118982,118983,118985,118987,118990,118992,118994,118996],{"class":38,"line":873},[36,118984,25907],{"class":46},[36,118986,118648],{"class":110},[36,118988,118989],{"class":110}," purge",[36,118991,30233],{"class":42},[36,118993,118737],{"class":110},[36,118995,1744],{"class":50},[36,118997,52638],{"class":42},[36,118999,119000],{"class":38,"line":9454},[36,119001,58],{"emptyLinePlaceholder":57},[36,119003,119004],{"class":38,"line":9481},[36,119005,119006],{"class":124},"#查找软件包命令\n",[36,119008,119009,119011,119013,119016,119018,119021,119023],{"class":38,"line":9486},[36,119010,25907],{"class":46},[36,119012,118648],{"class":110},[36,119014,119015],{"class":110}," search",[36,119017,30233],{"class":42},[36,119019,119020],{"class":110},"keywor",[36,119022,1982],{"class":50},[36,119024,52638],{"class":42},[36,119026,119027],{"class":38,"line":9492},[36,119028,58],{"emptyLinePlaceholder":57},[36,119030,119031],{"class":38,"line":9504},[36,119032,119033],{"class":124},"#列出所有已安装的包\n",[36,119035,119036,119038,119040],{"class":38,"line":9516},[36,119037,118699],{"class":46},[36,119039,118702],{"class":110},[36,119041,119042],{"class":73}," --installed\n",[36,119044,119045],{"class":38,"line":9528},[36,119046,58],{"emptyLinePlaceholder":57},[36,119048,119049],{"class":38,"line":11184},[36,119050,119051],{"class":124},"#列出所有已安装的包的版本信息\n",[36,119053,119054,119056,119058],{"class":38,"line":11209},[36,119055,118699],{"class":46},[36,119057,118702],{"class":110},[36,119059,119060],{"class":73}," --all-versions\n",[1592,119062,119063],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":119065},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118610,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119072,"title":119073,"body":119074,"description":24706,"extension":1603,"meta":119815,"navigation":57,"path":119816,"seo":119817,"stem":119818,"__hash__":119819},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119075,"toc":119802},[119076,119079,119083,119086,119092,119096,119100,119106,119111,119116,119121,119126,119131,119134,119137,119140,119143,119147,119150,119155,119158,119163,119166,119171,119178,119181,119184,119187,119190,119193,119204,119208,119212,119217,119222,119226,119231,119235,119240,119244,119248,119253,119256,119301,119306,119310,119314,119319,119325,119330,119340,119345,119355,119360,119365,119392,119396,119399,119404,119407,119432,119436,119441,119444,119449,119454,119474,119479,119482,119497,119501,119554,119557,119562,119566,119569,119584,119587,119590,119595,119599,119603,119606,119610,119614,119617,119622,119627,119631,119638,119646,119649,119656,119661,119666,119669,119674,119681,119686,119693,119697,119699,119704,119708,119711,119714,119719,119722,119727,119730,119735,119740,119745,119749,119754,119758,119799],[10,119077,119073],{"id":119078},"_2-linux装机教程",[14,119080,119082],{"id":119081},"_21-实体机","2.1 实体机",[19,119084,119085],{},"使用清华源：（Ubuntu24.04）",[19,119087,119088],{},[1906,119089,119090],{"href":119090,"rel":119091},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25195],[14,119093,119095],{"id":119094},"_22-普通虚拟机","2.2 普通虚拟机",[1645,119097,119099],{"id":119098},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119101,119102],{},[1906,119103,119104],{"href":119104,"rel":119105},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25195],[19,119107,119108],{},[2992,119109],{"alt":31,"src":119110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119112,119113],{},[2992,119114],{"alt":31,"src":119115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119117,119118],{},[2992,119119],{"alt":31,"src":119120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119122,119123],{},[2992,119124],{"alt":31,"src":119125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119127,119128],{},[2992,119129],{"alt":31,"src":119130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119132,119133],{},"内存4G（4096MB）；",[19,119135,119136],{},"CPU给4个核；",[19,119138,119139],{},"硬盘动态分配60G；",[19,119141,119142],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[1645,119144,119146],{"id":119145},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119148,119149],{},"按照1.1的步骤下载Ubuntu",[19,119151,119152],{},[2992,119153],{"alt":31,"src":119154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119156,119157],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119159,119160],{},[2992,119161],{"alt":31,"src":119162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119164,119165],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119167,119168],{},[2992,119169],{"alt":31,"src":119170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119172,119173,119174,119177],{},"选择“正常安装”(找不到都用Alt+F7)， ",[887,119175,119176],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119179,119180],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119182,119183],{},"将改动写入磁盘吗 继续",[19,119185,119186],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119188,119189],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119191,119192],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119194,119195,119196,119199,119200,119203],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[887,119197,119198],{},"除了"," 选不发送系统信息与不升级之外， ",[887,119201,119202],{},"其它"," 都跳过或前进）",[1645,119205,119207],{"id":119206},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23327,119209,119211],{"id":119210},"_2231-全屏","2.2.3.1 全屏",[19,119213,119214],{},[2992,119215],{"alt":31,"src":119216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119218,119219],{},[2992,119220],{"alt":31,"src":119221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23327,119223,119225],{"id":119224},"_2232-文件交换","2.2.3.2 文件交换",[19,119227,119228],{},[2992,119229],{"alt":31,"src":119230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23327,119232,119234],{"id":119233},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119236,119237],{},[2992,119238],{"alt":31,"src":119239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119241,119243],{"id":119242},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[1645,119245,119247],{"id":119246},"_231-简介与优缺点","2.3.1 简介与优缺点",[256,119249,119250],{},[259,119251,119252],{},"什么情况下推荐？",[19,119254,119255],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[256,119257,119258],{"start":54},[259,119259,119260,119261],{},"优缺点：",[256,119262,119263,119293],{},[259,119264,119265,119266],{},"优点：",[256,119267,119268,119271,119278,119281,119284,119287,119290],{},[259,119269,119270],{},"WSL2是最好的Linux发行版;(bushi)",[259,119272,119273,119274,119277],{},"性能损耗极低。且比在Windows上跑深度性能 ",[887,119275,119276],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[259,119279,119280],{},"非常方便调用USB设备，可以USB直通;",[259,119282,119283],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[259,119285,119286],{},"非常方便Win与WSL2互相传文件等协同操作;",[259,119288,119289],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[259,119291,119292],{},"非常方便使用Windows的VScode远程开发;",[259,119294,119295,119296],{},"缺点：",[256,119297,119298],{},[259,119299,119300],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119302,119303],{},[2992,119304],{"alt":31,"src":119305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[1645,119307,119309],{"id":119308},"_232-安装教程","2.3.2 安装教程",[23327,119311,119313],{"id":119312},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[256,119315,119316],{},[259,119317,119318],{},"方法一(图形界面)",[19,119320,119321,119322,25949],{},"用Win+R输入",[33,119323,119324],{},"appwiz.cpl",[19,119326,119327],{},[2992,119328],{"alt":31,"src":119329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119331,119332,119333,119336,119337,27804],{},"点击OK进入 ",[887,119334,119335],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[887,119338,119339],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119341,119342],{},[2992,119343],{"alt":31,"src":119344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119346,119347,119348,102349,119351,119354],{},"选择 ",[887,119349,119350],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[887,119352,119353],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119356,119357],{},[2992,119358],{"alt":31,"src":119359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[256,119361,119362],{"start":54},[259,119363,119364],{},"方法二(命令行)",[26,119366,119370],{"className":119367,"code":119368,"language":119369,"meta":31,"style":31},"language-PowerShell shiki shiki-themes github-light github-dark","# 开启 Linux 子系统\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n# 开启虚拟机平台\ndism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n","PowerShell",[33,119371,119372,119377,119382,119387],{"__ignoreMap":31},[36,119373,119374],{"class":38,"line":39},[36,119375,119376],{},"# 开启 Linux 子系统\n",[36,119378,119379],{"class":38,"line":54},[36,119380,119381],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[36,119383,119384],{"class":38,"line":61},[36,119385,119386],{},"# 开启虚拟机平台\n",[36,119388,119389],{"class":38,"line":80},[36,119390,119391],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23327,119393,119395],{"id":119394},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119397,119398],{},"用管理员权限打开powershell",[19,119400,119401],{},[2992,119402],{"alt":31,"src":119403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119405,119406],{},"升级WSL并设置默认版本为WSL2",[26,119408,119410],{"className":119367,"code":119409,"language":119369,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[33,119411,119412,119417,119422,119427],{"__ignoreMap":31},[36,119413,119414],{"class":38,"line":39},[36,119415,119416],{},"# 更新 wsl\n",[36,119418,119419],{"class":38,"line":54},[36,119420,119421],{},"wsl --update\n",[36,119423,119424],{"class":38,"line":61},[36,119425,119426],{},"# 将 wsl 版本设置为 wsl2\n",[36,119428,119429],{"class":38,"line":80},[36,119430,119431],{},"wsl --set-default-version 2\n",[23327,119433,119435],{"id":119434},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[256,119437,119438],{},[259,119439,119440],{},"方式一(商店下载)",[19,119442,119443],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119445,119446],{},[2992,119447],{"alt":31,"src":119448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[256,119450,119451],{"start":54},[259,119452,119453],{},"方式二(命令行安装)",[26,119455,119457],{"className":119367,"code":119456,"language":119369,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[33,119458,119459,119464,119469],{"__ignoreMap":31},[36,119460,119461],{"class":38,"line":39},[36,119462,119463],{},"# 列出可安装的 Linux 版本\n",[36,119465,119466],{"class":38,"line":54},[36,119467,119468],{},"#（需要科学手段）\n",[36,119470,119471],{"class":38,"line":61},[36,119472,119473],{},"wsl --list --online\n",[19,119475,119476],{},[2992,119477],{"alt":31,"src":119478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119480,119481],{},"选择对应发行版并安装",[26,119483,119485],{"className":119367,"code":119484,"language":119369,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[33,119486,119487,119492],{"__ignoreMap":31},[36,119488,119489],{"class":38,"line":39},[36,119490,119491],{},"# Ubuntu安装完毕后需要重启系统\n",[36,119493,119494],{"class":38,"line":54},[36,119495,119496],{},"wsl --install -d Ubuntu-24.04\n",[23327,119498,119500],{"id":119499},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,119502,119504],{"className":119367,"code":119503,"language":119369,"meta":31,"style":31},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[33,119505,119506,119511,119516,119521,119526,119530,119534,119539,119544,119549],{"__ignoreMap":31},[36,119507,119508],{"class":38,"line":39},[36,119509,119510],{},"# 查看 wsl\n",[36,119512,119513],{"class":38,"line":54},[36,119514,119515],{},"wsl -l\n",[36,119517,119518],{"class":38,"line":61},[36,119519,119520],{},"# 查看 wsl 运行版本或模式\n",[36,119522,119523],{"class":38,"line":80},[36,119524,119525],{},"wsl -l -v\n",[36,119527,119528],{"class":38,"line":96},[36,119529,58],{"emptyLinePlaceholder":57},[36,119531,119532],{"class":38,"line":101},[36,119533,58],{"emptyLinePlaceholder":57},[36,119535,119536],{"class":38,"line":128},[36,119537,119538],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[36,119540,119541],{"class":38,"line":149},[36,119542,119543],{},"wsl --set-version \u003Cdistro> 2\n",[36,119545,119546],{"class":38,"line":154},[36,119547,119548],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[36,119550,119551],{"class":38,"line":167},[36,119552,119553],{},"wsl --unregister \u003Cdistro>\n",[19,119555,119556],{},"输出Version为2即正常",[19,119558,119559],{},[2992,119560],{"alt":31,"src":119561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23327,119563,119565],{"id":119564},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119567,119568],{},"直接在Powershell里输入wsl命令进入子系统",[26,119570,119572],{"className":119367,"code":119571,"language":119369,"meta":31,"style":31},"# 进入子系统\nwsl\n",[33,119573,119574,119579],{"__ignoreMap":31},[36,119575,119576],{"class":38,"line":39},[36,119577,119578],{},"# 进入子系统\n",[36,119580,119581],{"class":38,"line":54},[36,119582,119583],{},"wsl\n",[19,119585,119586],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119588,119589],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119591,119592],{},[2992,119593],{"alt":31,"src":119594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[1645,119596,119598],{"id":119597},"_233-配置各种环境","2.3.3 配置各种环境",[23327,119600,119602],{"id":119601},"_2331-换源","2.3.3.1 换源",[19,119604,119605],{},"(同实体机LINUX，往下找教程)",[23327,119607,119609],{"id":119608},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24239,119611,119613],{"id":119612},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119615,119616],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119618,119619],{},[2992,119620],{"alt":31,"src":119621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119623,119624],{},[2992,119625],{"alt":31,"src":119626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24239,119628,119630],{"id":119629},"_23322-cuda","2.3.3.2.2 CUDA",[19,119632,119633,119634],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[1906,119635,119636],{"href":119636,"rel":119637},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25195],[19,119639,119640,119643],{},[2992,119641],{"alt":31,"src":119642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[2992,119644],{"alt":31,"src":119645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119647,119648],{},"在下方的网站，选择合适的版本。",[19,119650,119651,119652],{},"WSL2 专属 CUDA 指南：",[1906,119653,119654],{"href":119654,"rel":119655},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25195],[19,119657,119658],{},[887,119659,119660],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119662,119663],{},[2992,119664],{"alt":31,"src":119665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119667,119668],{},"挨行敲一遍",[19,119670,119671],{},[2992,119672],{"alt":31,"src":119673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119675,119676,119677,119680],{},"敲完后，输入",[33,119678,119679],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119682,119683],{},[2992,119684],{"alt":31,"src":119685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119687,119688,119689,119692],{},"（请详看下方教程的",[887,119690,119691],{},"安装CUDA的配置环境来看","如何配置环境）",[24239,119694,119696],{"id":119695},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119698,119605],{},[19,119700,119701],{},[2992,119702],{"alt":31,"src":119703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23327,119705,119707],{"id":119706},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119709,119710],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119712,119713],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119715,119716],{},[2992,119717],{"alt":31,"src":119718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119720,119721],{},"连接WSL2",[19,119723,119724],{},[2992,119725],{"alt":31,"src":119726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119728,119729],{},"远程开发成功。",[19,119731,119732],{},[2992,119733],{"alt":31,"src":119734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119736,119737],{},[2992,119738],{"alt":31,"src":119739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119741,119742],{},[2992,119743],{"alt":31,"src":119744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23327,119746,119748],{"id":119747},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119750,119751],{},[2992,119752],{"alt":31,"src":119753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23327,119755,119757],{"id":119756},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,119759,119761],{"className":118627,"code":119760,"language":118629,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[33,119762,119763,119771,119779,119790,119794],{"__ignoreMap":31},[36,119764,119765,119767,119769],{"class":38,"line":39},[36,119766,25907],{"class":46},[36,119768,118648],{"class":110},[36,119770,27573],{"class":110},[36,119772,119773,119775,119777],{"class":38,"line":54},[36,119774,25907],{"class":46},[36,119776,118648],{"class":110},[36,119778,118664],{"class":110},[36,119780,119781,119783,119785,119787],{"class":38,"line":61},[36,119782,25907],{"class":46},[36,119784,118648],{"class":110},[36,119786,25164],{"class":110},[36,119788,119789],{"class":110}," mesa-utils\n",[36,119791,119792],{"class":38,"line":80},[36,119793,58],{"emptyLinePlaceholder":57},[36,119795,119796],{"class":38,"line":96},[36,119797,119798],{"class":124},"#然后重启wsl2即可\n",[1592,119800,119801],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":119803},[119804,119805,119810],{"id":119081,"depth":54,"text":119082},{"id":119094,"depth":54,"text":119095,"children":119806},[119807,119808,119809],{"id":119098,"depth":61,"text":119099},{"id":119145,"depth":61,"text":119146},{"id":119206,"depth":61,"text":119207},{"id":119242,"depth":54,"text":119243,"children":119811},[119812,119813,119814],{"id":119246,"depth":61,"text":119247},{"id":119308,"depth":61,"text":119309},{"id":119597,"depth":61,"text":119598},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119073,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119821,"title":119822,"body":119823,"description":24706,"extension":1603,"meta":122759,"navigation":57,"path":122760,"seo":122761,"stem":122762,"__hash__":122763},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119824,"toc":122731},[119825,119828,119832,119838,119842,119848,119852,120040,120043,120048,120052,120056,120059,120062,120068,120073,120076,120079,120084,120117,120122,120126,120203,120206,120211,120215,120218,120257,120260,120269,120287,120292,120299,120416,120421,120424,120451,120456,120460,120469,120519,120526,120530,120533,120547,120554,120588,120593,120597,120620,120623,120628,120632,120635,120638,120641,120683,120687,120690,120693,120734,120738,120742,120745,120750,120755,120758,120781,120784,120792,120797,120800,120805,120810,120813,120818,120822,120827,120850,120855,120917,120925,120930,120935,120938,120943,120946,120951,120956,120974,120979,120985,120990,121004,121008,121011,121014,121017,121060,121063,121068,121169,121172,121177,121181,121185,121222,121226,121230,121234,121280,121284,121329,121333,121340,121348,121403,121406,121483,121486,121509,121513,121516,121521,121526,121534,121537,121542,121547,121552,121555,121560,121569,121572,121577,121580,121651,121656,121659,121664,121667,121672,121675,121680,121683,121688,121693,121696,121771,121774,121787,121792,121795,121809,121812,121841,121846,121875,121878,121883,121887,121892,121901,121904,121909,121912,121917,121920,121923,121928,121931,121936,121941,121944,121949,121952,122077,122082,122112,122115,122120,122125,122142,122145,122188,122191,122218,122223,122236,122379,122383,122388,122402,122405,122456,122459,122489,122492,122508,122513,122527,122530,122597,122602,122611,122616,122619,122631,122636,122643,122667,122670,122675,122678,122697,122702,122709,122721,122728],[10,119826,119822],{"id":119827},"_3-安装必备配置",[14,119829,119831],{"id":119830},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,119833,119836],{"className":119834,"code":119835,"language":6676},[6674],"  打开下方网站（注意，该Ubuntu仓库版本是X86、amd64的仓库，ARM的仓库并非该网站（99.9%的人的电脑是X86的，很多工控机是ARM的，但工控机也有X86的，请看[Vinci机器人队单片机教程](https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fdocx\u002FPRAodvrWvoXTrVxP1EDcMKM7nXb)中讲的了解一下，或者自行百度。）\n\n  下方这俩学校二选一。\n\n1.  清华大学开源软件镜像站：https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\n\n2.  中国科学技术大学镜像站：https:\u002F\u002Fmirrors.ustc.edu.cn\n\n  可以测速，选择出速度最快的源。\n\n```Bash\ncurl https:\u002F\u002Fmirrors.cernet.edu.cn\u002Foh-my-mirrorz.py | python3\n```\n\n  在北方（山东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-036.png)\n\n  在南方（广东）测速如下：\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-037.png)\n\n  在南北都比较快的是`北京外国语大学BFSU`和`南方科技大学SUSTech`，不想测速可以无脑选，也可以测速选择最好的源。\n\n  \n",[33,119837,119835],{"__ignoreMap":31},[1645,119839,119841],{"id":119840},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,119843,119846],{"className":119844,"code":119845,"language":6676},[6674],"  输入以下命令\n\n```Bash\nsudo apt update\nsudo apt install vim\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list\n```\n\n  在以下界面，用键盘按ggdG（注意区分大小写）\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-038.png)\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-039.png)\n\n  选择好Ubuntu版本后，\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-040.png)\n\n  粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-041.png)\n\n  按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-042.png)\n\n  输入以下命令\n\n```Bash\nsudo apt update\n```\n\n  下方出现对应学校源网站则成功\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-043.png)\n\n  至此换源结束\n",[33,119847,119845],{"__ignoreMap":31},[1645,119849,119851],{"id":119850},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,119853,119857],{"className":119854,"code":119855,"language":119856,"meta":31,"style":31},"language-Shell shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install vim\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list\nsudo rm -rf \u002Fetc\u002Fapt\u002Fsources.list.d\u002F**\n\nsudo vim \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n```\n\n\n选择好Ubuntu版本后，复制下方的内容。\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png)\n\n粘贴进去\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png)\n\n按一下ESC，然后英文冒号，输入 `:wq!`然后回车\n\n![](\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png)\n\n输入以下命令\n\n```Bash\nsudo apt update\n","Shell",[33,119858,119859,119867,119878,119890,119904,119908,119918,119923,119927,119931,119936,119940,119952,119956,119961,119965,119976,119980,119996,120000,120011,120015,120020,120024,120032],{"__ignoreMap":31},[36,119860,119861,119863,119865],{"class":38,"line":39},[36,119862,25907],{"class":46},[36,119864,118648],{"class":110},[36,119866,27573],{"class":110},[36,119868,119869,119871,119873,119875],{"class":38,"line":54},[36,119870,25907],{"class":46},[36,119872,118648],{"class":110},[36,119874,25164],{"class":110},[36,119876,119877],{"class":110}," vim\n",[36,119879,119880,119882,119885,119887],{"class":38,"line":61},[36,119881,25907],{"class":46},[36,119883,119884],{"class":110}," rm",[36,119886,26656],{"class":73},[36,119888,119889],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list\n",[36,119891,119892,119894,119896,119898,119901],{"class":38,"line":80},[36,119893,25907],{"class":46},[36,119895,119884],{"class":110},[36,119897,26656],{"class":73},[36,119899,119900],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[36,119902,119903],{"class":73},"**\n",[36,119905,119906],{"class":38,"line":96},[36,119907,58],{"emptyLinePlaceholder":57},[36,119909,119910,119912,119915],{"class":38,"line":101},[36,119911,25907],{"class":46},[36,119913,119914],{"class":110}," vim",[36,119916,119917],{"class":110}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[36,119919,119920],{"class":38,"line":128},[36,119921,119922],{"class":110},"```\n",[36,119924,119925],{"class":38,"line":149},[36,119926,58],{"emptyLinePlaceholder":57},[36,119928,119929],{"class":38,"line":154},[36,119930,58],{"emptyLinePlaceholder":57},[36,119932,119933],{"class":38,"line":167},[36,119934,119935],{"class":46},"选择好Ubuntu版本后，复制下方的内容。\n",[36,119937,119938],{"class":38,"line":172},[36,119939,58],{"emptyLinePlaceholder":57},[36,119941,119942,119944,119947,119950],{"class":38,"line":192},[36,119943,1894],{"class":42},[36,119945,119946],{"class":110},"[](",[36,119948,119949],{"class":46},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[36,119951,1680],{"class":110},[36,119953,119954],{"class":38,"line":211},[36,119955,58],{"emptyLinePlaceholder":57},[36,119957,119958],{"class":38,"line":216},[36,119959,119960],{"class":46},"粘贴进去\n",[36,119962,119963],{"class":38,"line":231},[36,119964,58],{"emptyLinePlaceholder":57},[36,119966,119967,119969,119971,119974],{"class":38,"line":236},[36,119968,1894],{"class":42},[36,119970,119946],{"class":110},[36,119972,119973],{"class":46},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[36,119975,1680],{"class":110},[36,119977,119978],{"class":38,"line":247},[36,119979,58],{"emptyLinePlaceholder":57},[36,119981,119982,119985,119988,119991,119993],{"class":38,"line":637},[36,119983,119984],{"class":46},"按一下ESC，然后英文冒号，输入",[36,119986,119987],{"class":110}," `",[36,119989,119990],{"class":46},":wq!",[36,119992,2639],{"class":110},[36,119994,119995],{"class":46},"然后回车\n",[36,119997,119998],{"class":38,"line":646},[36,119999,58],{"emptyLinePlaceholder":57},[36,120001,120002,120004,120006,120009],{"class":38,"line":655},[36,120003,1894],{"class":42},[36,120005,119946],{"class":110},[36,120007,120008],{"class":46},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[36,120010,1680],{"class":110},[36,120012,120013],{"class":38,"line":660},[36,120014,58],{"emptyLinePlaceholder":57},[36,120016,120017],{"class":38,"line":665},[36,120018,120019],{"class":46},"输入以下命令\n",[36,120021,120022],{"class":38,"line":674},[36,120023,58],{"emptyLinePlaceholder":57},[36,120025,120026,120029],{"class":38,"line":679},[36,120027,120028],{"class":110},"```",[36,120030,120031],{"class":46},"Bash\n",[36,120033,120034,120036,120038],{"class":38,"line":692},[36,120035,25907],{"class":46},[36,120037,118648],{"class":110},[36,120039,27573],{"class":110},[19,120041,120042],{},"这里被替换成对应学校则成功",[19,120044,120045],{},[2992,120046],{"alt":31,"src":120047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120049,120051],{"id":120050},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[1645,120053,120055],{"id":120054},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120057,120058],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120060,120061],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120063,120064],{},[1906,120065,120066],{"href":120066,"rel":120067},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25195],[19,120069,120070],{},[2992,120071],{"alt":31,"src":120072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120074,120075],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120077,120078],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120080,120081],{},[2992,120082],{"alt":31,"src":120083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,120085,120087],{"className":118627,"code":120086,"language":118629,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[33,120088,120089,120094,120101,120106],{"__ignoreMap":31},[36,120090,120091],{"class":38,"line":39},[36,120092,120093],{"class":124},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[36,120095,120096,120098],{"class":38,"line":54},[36,120097,102607],{"class":73},[36,120099,120100],{"class":110}," ~\u002FDownloads\n",[36,120102,120103],{"class":38,"line":61},[36,120104,120105],{"class":124},"#下方chrome安装包名不一定是这个，根据名字来看\n",[36,120107,120108,120110,120112,120114],{"class":38,"line":80},[36,120109,25907],{"class":46},[36,120111,118648],{"class":110},[36,120113,25164],{"class":110},[36,120115,120116],{"class":110}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120118,120119],{},[2992,120120],{"alt":31,"src":120121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[1645,120123,120125],{"id":120124},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,120127,120129],{"className":118627,"code":120128,"language":118629,"meta":31,"style":31},"# 老版\nsudo apt update\nsudo apt install neofetch\nneofetch\n\n# 新版\nsudo add-apt-repository ppa:zhangsongcui3371\u002Ffastfetch\nsudo apt update\nsudo apt install fastfetch\nfastfetch\n",[33,120130,120131,120136,120144,120155,120160,120164,120169,120179,120187,120198],{"__ignoreMap":31},[36,120132,120133],{"class":38,"line":39},[36,120134,120135],{"class":124},"# 老版\n",[36,120137,120138,120140,120142],{"class":38,"line":54},[36,120139,25907],{"class":46},[36,120141,118648],{"class":110},[36,120143,27573],{"class":110},[36,120145,120146,120148,120150,120152],{"class":38,"line":61},[36,120147,25907],{"class":46},[36,120149,118648],{"class":110},[36,120151,25164],{"class":110},[36,120153,120154],{"class":110}," neofetch\n",[36,120156,120157],{"class":38,"line":80},[36,120158,120159],{"class":46},"neofetch\n",[36,120161,120162],{"class":38,"line":96},[36,120163,58],{"emptyLinePlaceholder":57},[36,120165,120166],{"class":38,"line":101},[36,120167,120168],{"class":124},"# 新版\n",[36,120170,120171,120173,120176],{"class":38,"line":128},[36,120172,25907],{"class":46},[36,120174,120175],{"class":110}," add-apt-repository",[36,120177,120178],{"class":110}," ppa:zhangsongcui3371\u002Ffastfetch\n",[36,120180,120181,120183,120185],{"class":38,"line":149},[36,120182,25907],{"class":46},[36,120184,118648],{"class":110},[36,120186,27573],{"class":110},[36,120188,120189,120191,120193,120195],{"class":38,"line":154},[36,120190,25907],{"class":46},[36,120192,118648],{"class":110},[36,120194,25164],{"class":110},[36,120196,120197],{"class":110}," fastfetch\n",[36,120199,120200],{"class":38,"line":167},[36,120201,120202],{"class":46},"fastfetch\n",[19,120204,120205],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120207,120208],{},[2992,120209],{"alt":31,"src":120210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[1645,120212,120214],{"id":120213},"_323-移除snap应用","3.2.3 移除snap应用",[19,120216,120217],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,120219,120221],{"className":118627,"code":120220,"language":118629,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[33,120222,120223,120235,120246],{"__ignoreMap":31},[36,120224,120225,120227,120229,120232],{"class":38,"line":39},[36,120226,25907],{"class":46},[36,120228,27844],{"class":110},[36,120230,120231],{"class":110}," disable",[36,120233,120234],{"class":110}," snapd.service\n",[36,120236,120237,120239,120241,120243],{"class":38,"line":54},[36,120238,25907],{"class":46},[36,120240,27844],{"class":110},[36,120242,120231],{"class":110},[36,120244,120245],{"class":110}," snapd.socket\n",[36,120247,120248,120250,120252,120254],{"class":38,"line":61},[36,120249,25907],{"class":46},[36,120251,27844],{"class":110},[36,120253,120231],{"class":110},[36,120255,120256],{"class":110}," snapd.seeded.service\n",[19,120258,120259],{},"然后查看snap应用列表",[19,120261,120262,120263,120268],{},"根据你安装的选择不同（最小安装或普通安装），有",[1906,120264,120267],{"href":120265,"rel":120266},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25195],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,120270,120272],{"className":118627,"code":120271,"language":118629,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[33,120273,120274,120279],{"__ignoreMap":31},[36,120275,120276],{"class":38,"line":39},[36,120277,120278],{"class":124},"# 查询当前系统上snap安装了哪些app\n",[36,120280,120281,120284],{"class":38,"line":54},[36,120282,120283],{"class":46},"snap",[36,120285,120286],{"class":110}," list\n",[19,120288,120289],{},[2992,120290],{"alt":31,"src":120291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120293,120294,120295,120298],{},"卸载掉图中所有应用，按照 ",[887,120296,120297],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,120300,120302],{"className":118627,"code":120301,"language":118629,"meta":31,"style":31},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\nsudo snap remove snap-store\n#移除firefox浏览器\nsudo snap remove firefox\n#移除gnome-42-2204\nsudo snap remove gnome-42-2204\n#移除gtk-common-themes\nsudo snap remove gtk-common-themes\n#移除其它...\n \n#移除core22,bare以及snapd\nsudo snap remove core22\nsudo snap remove bare\nsudo snap remove snapd\n",[33,120303,120304,120309,120321,120326,120337,120342,120353,120358,120369,120374,120378,120383,120394,120405],{"__ignoreMap":31},[36,120305,120306],{"class":38,"line":39},[36,120307,120308],{"class":124},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[36,120310,120311,120313,120316,120318],{"class":38,"line":54},[36,120312,25907],{"class":46},[36,120314,120315],{"class":110}," snap",[36,120317,27410],{"class":110},[36,120319,120320],{"class":110}," snap-store\n",[36,120322,120323],{"class":38,"line":61},[36,120324,120325],{"class":124},"#移除firefox浏览器\n",[36,120327,120328,120330,120332,120334],{"class":38,"line":80},[36,120329,25907],{"class":46},[36,120331,120315],{"class":110},[36,120333,27410],{"class":110},[36,120335,120336],{"class":110}," firefox\n",[36,120338,120339],{"class":38,"line":96},[36,120340,120341],{"class":124},"#移除gnome-42-2204\n",[36,120343,120344,120346,120348,120350],{"class":38,"line":101},[36,120345,25907],{"class":46},[36,120347,120315],{"class":110},[36,120349,27410],{"class":110},[36,120351,120352],{"class":110}," gnome-42-2204\n",[36,120354,120355],{"class":38,"line":128},[36,120356,120357],{"class":124},"#移除gtk-common-themes\n",[36,120359,120360,120362,120364,120366],{"class":38,"line":149},[36,120361,25907],{"class":46},[36,120363,120315],{"class":110},[36,120365,27410],{"class":110},[36,120367,120368],{"class":110}," gtk-common-themes\n",[36,120370,120371],{"class":38,"line":154},[36,120372,120373],{"class":124},"#移除其它...\n",[36,120375,120376],{"class":38,"line":167},[36,120377,4169],{"class":50},[36,120379,120380],{"class":38,"line":172},[36,120381,120382],{"class":124},"#移除core22,bare以及snapd\n",[36,120384,120385,120387,120389,120391],{"class":38,"line":192},[36,120386,25907],{"class":46},[36,120388,120315],{"class":110},[36,120390,27410],{"class":110},[36,120392,120393],{"class":110}," core22\n",[36,120395,120396,120398,120400,120402],{"class":38,"line":211},[36,120397,25907],{"class":46},[36,120399,120315],{"class":110},[36,120401,27410],{"class":110},[36,120403,120404],{"class":110}," bare\n",[36,120406,120407,120409,120411,120413],{"class":38,"line":216},[36,120408,25907],{"class":46},[36,120410,120315],{"class":110},[36,120412,27410],{"class":110},[36,120414,120415],{"class":110}," snapd\n",[19,120417,120418],{},[2992,120419],{"alt":31,"src":120420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120422,120423],{},"输入以下命令查看是否还有snap包",[26,120425,120427],{"className":118627,"code":120426,"language":118629,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[33,120428,120429,120435,120439,120443,120447],{"__ignoreMap":31},[36,120430,120431,120433],{"class":38,"line":39},[36,120432,120283],{"class":46},[36,120434,120286],{"class":110},[36,120436,120437],{"class":38,"line":54},[36,120438,120135],{"class":124},[36,120440,120441],{"class":38,"line":61},[36,120442,120159],{"class":46},[36,120444,120445],{"class":38,"line":80},[36,120446,120168],{"class":124},[36,120448,120449],{"class":38,"line":96},[36,120450,120202],{"class":46},[19,120452,120453],{},[2992,120454],{"alt":31,"src":120455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[1645,120457,120459],{"id":120458},"_324-移除snap","3.2.4 移除snap",[19,120461,120462,120463,120468],{},"在删除掉",[1906,120464,120467],{"href":120465,"rel":120466},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25195],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,120470,120472],{"className":118627,"code":120471,"language":118629,"meta":31,"style":31}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[33,120473,120474,120479,120492,120497,120508],{"__ignoreMap":31},[36,120475,120476],{"class":38,"line":39},[36,120477,120478],{"class":124}," #使用apt移除掉snap\n",[36,120480,120481,120483,120485,120487,120490],{"class":38,"line":54},[36,120482,25907],{"class":46},[36,120484,118648],{"class":110},[36,120486,118956],{"class":110},[36,120488,120489],{"class":73}," --purge",[36,120491,120415],{"class":110},[36,120493,120494],{"class":38,"line":61},[36,120495,120496],{"class":124},"#移除snapd的一些目录\n",[36,120498,120499,120501,120503,120505],{"class":38,"line":80},[36,120500,25907],{"class":46},[36,120502,119884],{"class":110},[36,120504,26656],{"class":73},[36,120506,120507],{"class":110}," \u002Fvar\u002Fcache\u002Fsnapd\n",[36,120509,120510,120512,120514,120516],{"class":38,"line":96},[36,120511,25907],{"class":46},[36,120513,119884],{"class":110},[36,120515,26656],{"class":73},[36,120517,120518],{"class":110}," ~\u002Fsnap\n",[19,120520,120521,120522,120525],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[33,120523,120524],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[1645,120527,120529],{"id":120528},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120531,120532],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,120534,120536],{"className":118627,"code":120535,"language":118629,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[33,120537,120538],{"__ignoreMap":31},[36,120539,120540,120542,120544],{"class":38,"line":39},[36,120541,25907],{"class":46},[36,120543,119914],{"class":110},[36,120545,120546],{"class":110}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120548,120549,120550,120553],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[33,120551,120552],{},":wq"," 回车",[26,120555,120557],{"className":118627,"code":120556,"language":118629,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[33,120558,120559,120566,120580],{"__ignoreMap":31},[36,120560,120561,120564],{"class":38,"line":39},[36,120562,120563],{"class":46},"Package:",[36,120565,120415],{"class":110},[36,120567,120568,120571,120574,120577],{"class":38,"line":54},[36,120569,120570],{"class":46},"Pin:",[36,120572,120573],{"class":110}," release",[36,120575,120576],{"class":110}," a=",[36,120578,120579],{"class":73},"*\n",[36,120581,120582,120585],{"class":38,"line":61},[36,120583,120584],{"class":46},"Pin-Priority:",[36,120586,120587],{"class":73}," -10\n",[19,120589,120590],{},[2992,120591],{"alt":31,"src":120592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[1645,120594,120596],{"id":120595},"_326-测试是否成功","3.2.6 测试是否成功",[26,120598,120600],{"className":118627,"code":120599,"language":118629,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[33,120601,120602,120610],{"__ignoreMap":31},[36,120603,120604,120606,120608],{"class":38,"line":39},[36,120605,25907],{"class":46},[36,120607,118648],{"class":110},[36,120609,27573],{"class":110},[36,120611,120612,120614,120616,120618],{"class":38,"line":54},[36,120613,25907],{"class":46},[36,120615,118648],{"class":110},[36,120617,25164],{"class":110},[36,120619,120336],{"class":110},[19,120621,120622],{},"这里提示snapd无法被安装，就证明成功了",[19,120624,120625],{},[2992,120626],{"alt":31,"src":120627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[1645,120629,120631],{"id":120630},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120633,120634],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120636,120637],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120639,120640],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,120642,120644],{"className":118627,"code":120643,"language":118629,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[33,120645,120646,120651,120660,120665,120673],{"__ignoreMap":31},[36,120647,120648],{"class":38,"line":39},[36,120649,120650],{"class":124},"# 添加Mozilla提供的源\n",[36,120652,120653,120655,120657],{"class":38,"line":54},[36,120654,25907],{"class":46},[36,120656,120175],{"class":110},[36,120658,120659],{"class":110}," ppa:mozillateam\u002Fppa\n",[36,120661,120662],{"class":38,"line":61},[36,120663,120664],{"class":124},"# 安装Firefox\n",[36,120666,120667,120669,120671],{"class":38,"line":80},[36,120668,25907],{"class":46},[36,120670,118648],{"class":110},[36,120672,27573],{"class":110},[36,120674,120675,120677,120679,120681],{"class":38,"line":96},[36,120676,25907],{"class":46},[36,120678,118648],{"class":110},[36,120680,25164],{"class":110},[36,120682,120336],{"class":110},[1645,120684,120686],{"id":120685},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120688,120689],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120691,120692],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,120694,120696],{"className":118627,"code":120695,"language":118629,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[33,120697,120698,120703,120713,120721,120725],{"__ignoreMap":31},[36,120699,120700],{"class":38,"line":39},[36,120701,120702],{"class":124},"#删掉禁止安装snap的配置文件\n",[36,120704,120705,120707,120709,120711],{"class":38,"line":54},[36,120706,25907],{"class":46},[36,120708,119884],{"class":110},[36,120710,26656],{"class":73},[36,120712,120546],{"class":110},[36,120714,120715,120717,120719],{"class":38,"line":61},[36,120716,25907],{"class":46},[36,120718,118648],{"class":110},[36,120720,27573],{"class":110},[36,120722,120723],{"class":38,"line":80},[36,120724,58],{"emptyLinePlaceholder":57},[36,120726,120727,120729,120731],{"class":38,"line":96},[36,120728,25907],{"class":46},[36,120730,118648],{"class":110},[36,120732,120733],{"class":110}," dist-update\n",[14,120735,120737],{"id":120736},"_33-中文输入法","3.3 中文输入法",[1645,120739,120741],{"id":120740},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120743,120744],{},"官网下载搜狗输入法",[19,120746,120747],{},[2992,120748],{"alt":31,"src":120749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120751,120752],{},[2992,120753],{"alt":31,"src":120754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120756,120757],{},"打开终端输入如下",[26,120759,120761],{"className":118627,"code":120760,"language":118629,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[33,120762,120763,120770],{"__ignoreMap":31},[36,120764,120765,120767],{"class":38,"line":39},[36,120766,102607],{"class":73},[36,120768,120769],{"class":110}," ~\u002FDownloads\u002F\n",[36,120771,120772,120774,120776,120778],{"class":38,"line":54},[36,120773,25907],{"class":46},[36,120775,118648],{"class":110},[36,120777,25164],{"class":110},[36,120779,120780],{"class":110}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120782,120783],{},"打开Fcitx",[19,120785,120786,120789],{},[2992,120787],{"alt":31,"src":120788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[2992,120790],{"alt":31,"src":120791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120793,120794],{},[2992,120795],{"alt":31,"src":120796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120798,120799],{},"添加搜狗输入法",[19,120801,120802],{},[2992,120803],{"alt":31,"src":120804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120806,120807],{},[2992,120808],{"alt":31,"src":120809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120811,120812],{},"将搜狗输入法设置为唯一输入法",[19,120814,120815],{},[2992,120816],{"alt":31,"src":120817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[1645,120819,120821],{"id":120820},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[256,120823,120824],{},[259,120825,120826],{},"卸载旧输入法",[26,120828,120830],{"className":119854,"code":120829,"language":119856,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[33,120831,120832],{"__ignoreMap":31},[36,120833,120834,120836,120838,120840,120843,120845,120848],{"class":38,"line":39},[36,120835,25907],{"class":46},[36,120837,118648],{"class":110},[36,120839,118989],{"class":110},[36,120841,120842],{"class":110}," fcitx",[36,120844,2122],{"class":73},[36,120846,120847],{"class":110}," ibus",[36,120849,120579],{"class":73},[256,120851,120852],{"start":54},[259,120853,120854],{},"安装Fcitx5",[26,120856,120858],{"className":118627,"code":120857,"language":118629,"meta":31,"style":31},"# Ubuntu22.04及以上、Debian12及以上\nsudo apt install fcitx5 fcitx5-chinese-addons\n\n# Ubuntu20.04\nsudo add-apt-repository ppa:zhsj\u002Ffcitx5\nsudo apt update\nsudo apt install fcitx5 fcitx5-chinese-addons\n",[33,120859,120860,120865,120879,120883,120888,120897,120905],{"__ignoreMap":31},[36,120861,120862],{"class":38,"line":39},[36,120863,120864],{"class":124},"# Ubuntu22.04及以上、Debian12及以上\n",[36,120866,120867,120869,120871,120873,120876],{"class":38,"line":54},[36,120868,25907],{"class":46},[36,120870,118648],{"class":110},[36,120872,25164],{"class":110},[36,120874,120875],{"class":110}," fcitx5",[36,120877,120878],{"class":110}," fcitx5-chinese-addons\n",[36,120880,120881],{"class":38,"line":61},[36,120882,58],{"emptyLinePlaceholder":57},[36,120884,120885],{"class":38,"line":80},[36,120886,120887],{"class":124},"# Ubuntu20.04\n",[36,120889,120890,120892,120894],{"class":38,"line":96},[36,120891,25907],{"class":46},[36,120893,120175],{"class":110},[36,120895,120896],{"class":110}," ppa:zhsj\u002Ffcitx5\n",[36,120898,120899,120901,120903],{"class":38,"line":101},[36,120900,25907],{"class":46},[36,120902,118648],{"class":110},[36,120904,27573],{"class":110},[36,120906,120907,120909,120911,120913,120915],{"class":38,"line":128},[36,120908,25907],{"class":46},[36,120910,118648],{"class":110},[36,120912,25164],{"class":110},[36,120914,120875],{"class":110},[36,120916,120878],{"class":110},[256,120918,120919,120922],{"start":61},[259,120920,120921],{},"Reboot System",[259,120923,120924],{},"启动Fcitx5",[19,120926,120927],{},[2992,120928],{"alt":31,"src":120929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[256,120931,120932],{"start":96},[259,120933,120934],{},"修改一些设置",[19,120936,120937],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120939,120940],{},[2992,120941],{"alt":31,"src":120942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120944,120945],{},"添加快捷键以便于更好切换中英文",[19,120947,120948],{},[2992,120949],{"alt":31,"src":120950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[256,120952,120953],{"start":101},[259,120954,120955],{},"重启",[26,120957,120959],{"className":119854,"code":120958,"language":119856,"meta":31,"style":31},"sudo shutdown -r now\n",[33,120960,120961],{"__ignoreMap":31},[36,120962,120963,120965,120968,120971],{"class":38,"line":39},[36,120964,25907],{"class":46},[36,120966,120967],{"class":110}," shutdown",[36,120969,120970],{"class":73}," -r",[36,120972,120973],{"class":110}," now\n",[256,120975,120976],{"start":128},[259,120977,120978],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120980,120981],{},[1906,120982,120983],{"href":120983,"rel":120984},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25195],[256,120986,120987],{"start":149},[259,120988,120989],{},"再重启",[26,120991,120992],{"className":119854,"code":120958,"language":119856,"meta":31,"style":31},[33,120993,120994],{"__ignoreMap":31},[36,120995,120996,120998,121000,121002],{"class":38,"line":39},[36,120997,25907],{"class":46},[36,120999,120967],{"class":110},[36,121001,120970],{"class":73},[36,121003,120973],{"class":110},[14,121005,121007],{"id":121006},"_34-pip3源替换","3.4 pip3源替换",[19,121009,121010],{},"非Debian系发行版需要做。",[19,121012,121013],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121015,121016],{},"使用dnf的系统也可能不用做。",[26,121018,121020],{"className":118627,"code":121019,"language":118629,"meta":31,"style":31},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,121021,121022,121027,121034,121039,121044],{"__ignoreMap":31},[36,121023,121024],{"class":38,"line":39},[36,121025,121026],{"class":124},"# 检查是否已安装 pip\n",[36,121028,121029,121032],{"class":38,"line":54},[36,121030,121031],{"class":46},"pip3",[36,121033,27624],{"class":73},[36,121035,121036],{"class":38,"line":61},[36,121037,121038],{"class":124},"# 如果未安装，先安装 pip3（见下方）\n",[36,121040,121041],{"class":38,"line":80},[36,121042,121043],{"class":124},"# 配置 pip 使用清华源\n",[36,121045,121046,121048,121051,121054,121057],{"class":38,"line":96},[36,121047,121031],{"class":46},[36,121049,121050],{"class":110}," config",[36,121052,121053],{"class":110}," set",[36,121055,121056],{"class":110}," global.index-url",[36,121058,121059],{"class":110}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121061,121062],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121064,121065],{},[2992,121066],{"alt":31,"src":121067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,121069,121071],{"className":118627,"code":121070,"language":118629,"meta":31,"style":31},"#安装pip3\nsudo apt update\nsudo apt-get install python3-pip\n\n#更新pip3\npython3 -m pip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple --upgrade pip\n\n#设置pip源为清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n\n#测试\npython3 -m pip install --upgrade pip\n",[33,121072,121073,121078,121086,121097,121101,121106,121125,121129,121134,121146,121150,121155],{"__ignoreMap":31},[36,121074,121075],{"class":38,"line":39},[36,121076,121077],{"class":124},"#安装pip3\n",[36,121079,121080,121082,121084],{"class":38,"line":54},[36,121081,25907],{"class":46},[36,121083,118648],{"class":110},[36,121085,27573],{"class":110},[36,121087,121088,121090,121092,121094],{"class":38,"line":61},[36,121089,25907],{"class":46},[36,121091,27407],{"class":110},[36,121093,25164],{"class":110},[36,121095,121096],{"class":110}," python3-pip\n",[36,121098,121099],{"class":38,"line":80},[36,121100,58],{"emptyLinePlaceholder":57},[36,121102,121103],{"class":38,"line":96},[36,121104,121105],{"class":124},"#更新pip3\n",[36,121107,121108,121110,121112,121114,121116,121118,121121,121123],{"class":38,"line":101},[36,121109,102210],{"class":46},[36,121111,102213],{"class":73},[36,121113,102236],{"class":110},[36,121115,25164],{"class":110},[36,121117,27761],{"class":73},[36,121119,121120],{"class":110}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[36,121122,102241],{"class":73},[36,121124,102244],{"class":110},[36,121126,121127],{"class":38,"line":128},[36,121128,58],{"emptyLinePlaceholder":57},[36,121130,121131],{"class":38,"line":149},[36,121132,121133],{"class":124},"#设置pip源为清华源\n",[36,121135,121136,121138,121140,121142,121144],{"class":38,"line":154},[36,121137,121031],{"class":46},[36,121139,121050],{"class":110},[36,121141,121053],{"class":110},[36,121143,121056],{"class":110},[36,121145,121059],{"class":110},[36,121147,121148],{"class":38,"line":167},[36,121149,58],{"emptyLinePlaceholder":57},[36,121151,121152],{"class":38,"line":172},[36,121153,121154],{"class":124},"#测试\n",[36,121156,121157,121159,121161,121163,121165,121167],{"class":38,"line":192},[36,121158,102210],{"class":46},[36,121160,102213],{"class":73},[36,121162,102236],{"class":110},[36,121164,25164],{"class":110},[36,121166,102241],{"class":73},[36,121168,102244],{"class":110},[19,121170,121171],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121173,121174],{},[2992,121175],{"alt":31,"src":121176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121178,121180],{"id":121179},"_35-显卡驱动安装","3.5 显卡驱动安装",[1645,121182,121184],{"id":121183},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,121186,121188],{"className":119854,"code":121187,"language":119856,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[33,121189,121190,121195,121210,121215],{"__ignoreMap":31},[36,121191,121192],{"class":38,"line":39},[36,121193,121194],{"class":124},"# 如果是使用apt安装的驱动\n",[36,121196,121197,121199,121201,121203,121205,121208],{"class":38,"line":54},[36,121198,25907],{"class":46},[36,121200,27407],{"class":110},[36,121202,27410],{"class":110},[36,121204,120489],{"class":73},[36,121206,121207],{"class":110}," nvidia",[36,121209,120579],{"class":73},[36,121211,121212],{"class":38,"line":61},[36,121213,121214],{"class":124},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[36,121216,121217,121219],{"class":38,"line":80},[36,121218,25907],{"class":46},[36,121220,121221],{"class":110}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[1645,121223,121225],{"id":121224},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23327,121227,121229],{"id":121228},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24239,121231,121233],{"id":121232},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,121235,121237],{"className":119854,"code":121236,"language":119856,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,121238,121239,121244,121255,121260,121270,121275],{"__ignoreMap":31},[36,121240,121241],{"class":38,"line":39},[36,121242,121243],{"class":124},"# 安装英伟达驱动\n",[36,121245,121246,121248,121250,121252],{"class":38,"line":54},[36,121247,25907],{"class":46},[36,121249,118648],{"class":110},[36,121251,25164],{"class":110},[36,121253,121254],{"class":110}," nvidia-driver-版本号\n",[36,121256,121257],{"class":38,"line":61},[36,121258,121259],{"class":124},"# 重启 \n",[36,121261,121262,121264,121266,121268],{"class":38,"line":80},[36,121263,25907],{"class":46},[36,121265,120967],{"class":110},[36,121267,120970],{"class":73},[36,121269,120973],{"class":110},[36,121271,121272],{"class":38,"line":96},[36,121273,121274],{"class":124},"# 检查驱动是否安装成功\n",[36,121276,121277],{"class":38,"line":101},[36,121278,121279],{"class":46},"nvidia-smi\n",[24239,121281,121283],{"id":121282},"_35212-debian","3.5.2.1.2 Debian",[26,121285,121287],{"className":119854,"code":121286,"language":119856,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,121288,121289,121293,121307,121311,121321,121325],{"__ignoreMap":31},[36,121290,121291],{"class":38,"line":39},[36,121292,121243],{"class":124},[36,121294,121295,121297,121299,121301,121304],{"class":38,"line":54},[36,121296,25907],{"class":46},[36,121298,118648],{"class":110},[36,121300,25164],{"class":110},[36,121302,121303],{"class":110}," nvidia-driver",[36,121305,121306],{"class":110}," nvidia-settings\n",[36,121308,121309],{"class":38,"line":61},[36,121310,121259],{"class":124},[36,121312,121313,121315,121317,121319],{"class":38,"line":80},[36,121314,25907],{"class":46},[36,121316,120967],{"class":110},[36,121318,120970],{"class":73},[36,121320,120973],{"class":110},[36,121322,121323],{"class":38,"line":96},[36,121324,121274],{"class":124},[36,121326,121327],{"class":38,"line":101},[36,121328,121279],{"class":46},[23327,121330,121332],{"id":121331},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121334,121335,121336,121339],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[887,121337,121338],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121341,121342,121343],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24883,121344,121345],{},[887,121346,121347],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,121349,121351],{"className":119854,"code":121350,"language":119856,"meta":31,"style":31},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[33,121352,121353,121358,121368,121373,121386,121391],{"__ignoreMap":31},[36,121354,121355],{"class":38,"line":39},[36,121356,121357],{"class":124},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[36,121359,121360,121362,121365],{"class":38,"line":54},[36,121361,25907],{"class":46},[36,121363,121364],{"class":110}," telinit",[36,121366,121367],{"class":73}," 3\n",[36,121369,121370],{"class":38,"line":61},[36,121371,121372],{"class":124},"# ubuntu 使用下方命令\n",[36,121374,121375,121377,121380,121383],{"class":38,"line":80},[36,121376,25907],{"class":46},[36,121378,121379],{"class":110}," service",[36,121381,121382],{"class":110}," lightdm",[36,121384,121385],{"class":110}," stop\n",[36,121387,121388],{"class":38,"line":96},[36,121389,121390],{"class":124},"# Fedora 使用下方命令\n",[36,121392,121393,121395,121397,121400],{"class":38,"line":101},[36,121394,25907],{"class":46},[36,121396,27844],{"class":110},[36,121398,121399],{"class":110}," isolate",[36,121401,121402],{"class":110}," multi-user.target\n",[19,121404,121405],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,121407,121409],{"className":119854,"code":121408,"language":119856,"meta":31,"style":31},"# 编译环境+准备工作\nsudo apt install build-essential\n# 进入到.run目录中\ncd \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n# 给驱动文件增加可执行权限：\nsudo chmod a+x NVIDIA-Linux-x86_64-550.107.02.run\n# 然后执行安装：\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\nsudo .\u002FNVIDIA-Linux-x86_64-550.107.02.run  --no-opengl-files\n",[33,121410,121411,121416,121427,121432,121439,121444,121456,121461,121468,121473],{"__ignoreMap":31},[36,121412,121413],{"class":38,"line":39},[36,121414,121415],{"class":124},"# 编译环境+准备工作\n",[36,121417,121418,121420,121422,121424],{"class":38,"line":54},[36,121419,25907],{"class":46},[36,121421,118648],{"class":110},[36,121423,25164],{"class":110},[36,121425,121426],{"class":110}," build-essential\n",[36,121428,121429],{"class":38,"line":61},[36,121430,121431],{"class":124},"# 进入到.run目录中\n",[36,121433,121434,121436],{"class":38,"line":80},[36,121435,102607],{"class":73},[36,121437,121438],{"class":110}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[36,121440,121441],{"class":38,"line":96},[36,121442,121443],{"class":124},"# 给驱动文件增加可执行权限：\n",[36,121445,121446,121448,121450,121453],{"class":38,"line":101},[36,121447,25907],{"class":46},[36,121449,25910],{"class":110},[36,121451,121452],{"class":110}," a+x",[36,121454,121455],{"class":110}," NVIDIA-Linux-x86_64-550.107.02.run\n",[36,121457,121458],{"class":38,"line":128},[36,121459,121460],{"class":124},"# 然后执行安装：\n",[36,121462,121463,121465],{"class":38,"line":149},[36,121464,25907],{"class":46},[36,121466,121467],{"class":110}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[36,121469,121470],{"class":38,"line":154},[36,121471,121472],{"class":124},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[36,121474,121475,121477,121480],{"class":38,"line":167},[36,121476,25907],{"class":46},[36,121478,121479],{"class":110}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[36,121481,121482],{"class":73},"  --no-opengl-files\n",[19,121484,121485],{},"安装完毕重启即可",[26,121487,121489],{"className":119854,"code":121488,"language":119856,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,121490,121491,121495,121501,121505],{"__ignoreMap":31},[36,121492,121493],{"class":38,"line":39},[36,121494,121259],{"class":124},[36,121496,121497,121499],{"class":38,"line":54},[36,121498,25907],{"class":46},[36,121500,27978],{"class":110},[36,121502,121503],{"class":38,"line":61},[36,121504,121274],{"class":124},[36,121506,121507],{"class":38,"line":80},[36,121508,121279],{"class":46},[1645,121510,121512],{"id":121511},"_353-安装cuda","3.5.3 安装CUDA",[19,121514,121515],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121517,121518],{},[2992,121519],{"alt":31,"src":121520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[256,121522,121523],{},[259,121524,121525],{},"先查看显卡驱动所支持的最高CUDA版本",[26,121527,121528],{"className":119854,"code":121279,"language":119856,"meta":31,"style":31},[33,121529,121530],{"__ignoreMap":31},[36,121531,121532],{"class":38,"line":39},[36,121533,121279],{"class":46},[19,121535,121536],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121538,121539],{},[2992,121540],{"alt":31,"src":121541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[256,121543,121544],{"start":54},[259,121545,121546],{},"下载CUDA并安装CUDA",[19,121548,119633,121549],{},[1906,121550,119636],{"href":119636,"rel":121551},[25195],[19,121553,121554],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121556,121557],{},[2992,121558],{"alt":31,"src":121559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121561,121562,121563,121568],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[1906,121564,121567],{"href":121565,"rel":121566},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25195],"Vinci机器人队单片机教程","）",[19,121570,121571],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121573,121574],{},[2992,121575],{"alt":31,"src":121576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121578,121579],{},"将最下方框框里的命令敲入终端",[26,121581,121583],{"className":119854,"code":121582,"language":119856,"meta":31,"style":31},"# 在当前文件夹下创建一个ttt的子文件夹\nmkdir -p .\u002Fttt\n# 进入ttt文件夹\ncd ttt\n# 输入复制的第一条命令（用来下载cuda的runfile文件）\nwget https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n# 给予权限\nsudo chmod a+x .\u002Fcuda_12.4.0_550.54.14_linux.run\n# 运行脚本\nsudo .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[33,121584,121585,121590,121599,121604,121611,121616,121624,121629,121640,121645],{"__ignoreMap":31},[36,121586,121587],{"class":38,"line":39},[36,121588,121589],{"class":124},"# 在当前文件夹下创建一个ttt的子文件夹\n",[36,121591,121592,121594,121596],{"class":38,"line":54},[36,121593,102597],{"class":46},[36,121595,30547],{"class":73},[36,121597,121598],{"class":110}," .\u002Fttt\n",[36,121600,121601],{"class":38,"line":61},[36,121602,121603],{"class":124},"# 进入ttt文件夹\n",[36,121605,121606,121608],{"class":38,"line":80},[36,121607,102607],{"class":73},[36,121609,121610],{"class":110}," ttt\n",[36,121612,121613],{"class":38,"line":96},[36,121614,121615],{"class":124},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[36,121617,121618,121621],{"class":38,"line":101},[36,121619,121620],{"class":46},"wget",[36,121622,121623],{"class":110}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,121625,121626],{"class":38,"line":128},[36,121627,121628],{"class":124},"# 给予权限\n",[36,121630,121631,121633,121635,121637],{"class":38,"line":149},[36,121632,25907],{"class":46},[36,121634,25910],{"class":110},[36,121636,121452],{"class":110},[36,121638,121639],{"class":110}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,121641,121642],{"class":38,"line":154},[36,121643,121644],{"class":124},"# 运行脚本\n",[36,121646,121647,121649],{"class":38,"line":167},[36,121648,25907],{"class":46},[36,121650,121639],{"class":110},[19,121652,121653],{},[2992,121654],{"alt":31,"src":121655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121657,121658],{},"正在安装中：",[19,121660,121661],{},[2992,121662],{"alt":31,"src":121663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121665,121666],{},"输入accept接受即可",[19,121668,121669],{},[2992,121670],{"alt":31,"src":121671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121673,121674],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121676,121677],{},[2992,121678],{"alt":31,"src":121679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121681,121682],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121684,121685],{},[2992,121686],{"alt":31,"src":121687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[256,121689,121690],{"start":61},[259,121691,121692],{},"配置环境",[19,121694,121695],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,121697,121699],{"className":119854,"code":121698,"language":119856,"meta":31,"style":31},"Please make sure that \n -   PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin \n -   LD_LIBRARY_PATH includes \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64, or, add \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64 to \u002Fetc\u002Fld.so.conf and run ldconfig as root\n",[33,121700,121701,121717,121732],{"__ignoreMap":31},[36,121702,121703,121706,121709,121712,121715],{"class":38,"line":39},[36,121704,121705],{"class":46},"Please",[36,121707,121708],{"class":110}," make",[36,121710,121711],{"class":110}," sure",[36,121713,121714],{"class":110}," that",[36,121716,4169],{"class":50},[36,121718,121719,121721,121724,121727,121730],{"class":38,"line":54},[36,121720,53602],{"class":46},[36,121722,121723],{"class":110},"   PATH",[36,121725,121726],{"class":110}," includes",[36,121728,121729],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[36,121731,4169],{"class":50},[36,121733,121734,121736,121739,121741,121744,121747,121749,121752,121755,121758,121761,121763,121766,121768],{"class":38,"line":61},[36,121735,53602],{"class":46},[36,121737,121738],{"class":110},"   LD_LIBRARY_PATH",[36,121740,121726],{"class":110},[36,121742,121743],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[36,121745,121746],{"class":110}," or,",[36,121748,6698],{"class":110},[36,121750,121751],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[36,121753,121754],{"class":110}," to",[36,121756,121757],{"class":110}," \u002Fetc\u002Fld.so.conf",[36,121759,121760],{"class":110}," and",[36,121762,28561],{"class":110},[36,121764,121765],{"class":110}," ldconfig",[36,121767,65935],{"class":110},[36,121769,121770],{"class":110}," root\n",[19,121772,121773],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,121775,121777],{"className":119854,"code":121776,"language":119856,"meta":31,"style":31},"which nvcc\n",[33,121778,121779],{"__ignoreMap":31},[36,121780,121781,121784],{"class":38,"line":39},[36,121782,121783],{"class":73},"which",[36,121785,121786],{"class":110}," nvcc\n",[19,121788,121789],{},[2992,121790],{"alt":31,"src":121791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121793,121794],{},"所以我进行以下操作：",[26,121796,121798],{"className":119854,"code":121797,"language":119856,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[33,121799,121800],{"__ignoreMap":31},[36,121801,121802,121804,121806],{"class":38,"line":39},[36,121803,25907],{"class":46},[36,121805,119914],{"class":110},[36,121807,121808],{"class":110}," ~\u002F.bashrc\n",[19,121810,121811],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,121813,121815],{"className":119854,"code":121814,"language":119856,"meta":31,"style":31},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[33,121816,121817,121829],{"__ignoreMap":31},[36,121818,121819,121821,121824,121826],{"class":38,"line":39},[36,121820,26373],{"class":42},[36,121822,121823],{"class":50}," PATH",[36,121825,70],{"class":42},[36,121827,121828],{"class":50},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[36,121830,121831,121833,121836,121838],{"class":38,"line":54},[36,121832,26373],{"class":42},[36,121834,121835],{"class":50}," LD_LIBRARY_PATH",[36,121837,70],{"class":42},[36,121839,121840],{"class":50},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121842,121843],{},[2992,121844],{"alt":31,"src":121845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,121847,121849],{"className":119854,"code":121848,"language":119856,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[33,121850,121851,121856,121862,121867],{"__ignoreMap":31},[36,121852,121853],{"class":38,"line":39},[36,121854,121855],{"class":124},"# 刷新当前终端的环境变量\n",[36,121857,121858,121860],{"class":38,"line":54},[36,121859,102224],{"class":73},[36,121861,121808],{"class":110},[36,121863,121864],{"class":38,"line":61},[36,121865,121866],{"class":124},"# 验证CUDA是否安装成功\n",[36,121868,121869,121872],{"class":38,"line":80},[36,121870,121871],{"class":46},"nvcc",[36,121873,121874],{"class":73}," -V\n",[19,121876,121877],{},"出现下图这种则安装成功。",[19,121879,121880],{},[2992,121881],{"alt":31,"src":121882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[1645,121884,121886],{"id":121885},"_354-安装cudnn","3.5.4 安装cuDNN",[256,121888,121889],{},[259,121890,121891],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121893,121894,121895,121900],{},"前往 NVIDIA cuDNN 下载页面：",[1906,121896,121899],{"href":121897,"rel":121898},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25195],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121902,121903],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121905,121906],{},[2992,121907],{"alt":31,"src":121908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121910,121911],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121913,121914],{},[2992,121915],{"alt":31,"src":121916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121918,121919],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121921,121922],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121924,121925],{},[887,121926,121927],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121929,121930],{},"下载好的：",[19,121932,121933],{},[2992,121934],{"alt":31,"src":121935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[256,121937,121938],{"start":54},[259,121939,121940],{},"安装cuDNN",[19,121942,121943],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121945,121946],{},[2992,121947],{"alt":31,"src":121948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121950,121951],{},"解压文件，并复制到对应位置完成安装",[26,121953,121955],{"className":119854,"code":121954,"language":119856,"meta":31,"style":31},"# 解压cuDNN文件\ntar -xvf .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n# cd进文件夹\ncd .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n# 复制cuDNN文件到CUDA目录\nsudo cp include\u002Fcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude \nsudo cp lib\u002Flibcudnn*    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n# 对比一下有没有缺文件\nls \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn* \nls \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n# 给予权限\nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn*   \nsudo chmod a+r \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn*\n",[33,121956,121957,121962,121973,121978,121985,121990,122006,122020,122025,122036,122045,122049,122065],{"__ignoreMap":31},[36,121958,121959],{"class":38,"line":39},[36,121960,121961],{"class":124},"# 解压cuDNN文件\n",[36,121963,121964,121967,121970],{"class":38,"line":54},[36,121965,121966],{"class":46},"tar",[36,121968,121969],{"class":73}," -xvf",[36,121971,121972],{"class":110}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[36,121974,121975],{"class":38,"line":61},[36,121976,121977],{"class":124},"# cd进文件夹\n",[36,121979,121980,121982],{"class":38,"line":80},[36,121981,102607],{"class":73},[36,121983,121984],{"class":110}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[36,121986,121987],{"class":38,"line":96},[36,121988,121989],{"class":124},"# 复制cuDNN文件到CUDA目录\n",[36,121991,121992,121994,121996,121999,122001,122004],{"class":38,"line":101},[36,121993,25907],{"class":46},[36,121995,29192],{"class":110},[36,121997,121998],{"class":110}," include\u002Fcudnn",[36,122000,2122],{"class":73},[36,122002,122003],{"class":110},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[36,122005,4169],{"class":50},[36,122007,122008,122010,122012,122015,122017],{"class":38,"line":128},[36,122009,25907],{"class":46},[36,122011,29192],{"class":110},[36,122013,122014],{"class":110}," lib\u002Flibcudnn",[36,122016,2122],{"class":73},[36,122018,122019],{"class":110},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[36,122021,122022],{"class":38,"line":149},[36,122023,122024],{"class":124},"# 对比一下有没有缺文件\n",[36,122026,122027,122029,122032,122034],{"class":38,"line":154},[36,122028,28092],{"class":46},[36,122030,122031],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[36,122033,2122],{"class":73},[36,122035,4169],{"class":50},[36,122037,122038,122040,122043],{"class":38,"line":167},[36,122039,28092],{"class":46},[36,122041,122042],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[36,122044,120579],{"class":73},[36,122046,122047],{"class":38,"line":172},[36,122048,121628],{"class":124},[36,122050,122051,122053,122055,122058,122060,122062],{"class":38,"line":192},[36,122052,25907],{"class":46},[36,122054,25910],{"class":110},[36,122056,122057],{"class":110}," a+r",[36,122059,122031],{"class":110},[36,122061,2122],{"class":73},[36,122063,122064],{"class":50},"   \n",[36,122066,122067,122069,122071,122073,122075],{"class":38,"line":211},[36,122068,25907],{"class":46},[36,122070,25910],{"class":110},[36,122072,122057],{"class":110},[36,122074,122042],{"class":110},[36,122076,120579],{"class":73},[256,122078,122079],{"start":61},[259,122080,122081],{},"检查是否安装成功",[26,122083,122085],{"className":119854,"code":122084,"language":119856,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[33,122086,122087,122092],{"__ignoreMap":31},[36,122088,122089],{"class":38,"line":39},[36,122090,122091],{"class":124},"# 检查cuDNN版本命令\n",[36,122093,122094,122097,122100,122102,122104,122107,122110],{"class":38,"line":54},[36,122095,122096],{"class":46},"cat",[36,122098,122099],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[36,122101,26440],{"class":42},[36,122103,31567],{"class":46},[36,122105,122106],{"class":110}," CUDNN_MAJOR",[36,122108,122109],{"class":73}," -A",[36,122111,49054],{"class":73},[19,122113,122114],{},"出现下图这样的就是安装成功了",[19,122116,122117],{},[2992,122118],{"alt":31,"src":122119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[256,122121,122122],{"start":80},[259,122123,122124],{},"软链接(一般不需要)",[26,122126,122128],{"className":119854,"code":122127,"language":119856,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[33,122129,122130,122135],{"__ignoreMap":31},[36,122131,122132],{"class":38,"line":39},[36,122133,122134],{"class":124},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[36,122136,122137,122139],{"class":38,"line":54},[36,122138,25907],{"class":46},[36,122140,122141],{"class":110}," ldconfig\n",[19,122143,122144],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,122146,122151],{"className":122147,"code":122148,"language":122149,"meta":122150,"style":31},"language-Plain shiki shiki-themes github-light github-dark","ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \nldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n","Plain","Text",[33,122152,122153,122158,122163,122168,122173,122178,122183],{"__ignoreMap":31},[36,122154,122155],{"class":38,"line":39},[36,122156,122157],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[36,122159,122160],{"class":38,"line":54},[36,122161,122162],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[36,122164,122165],{"class":38,"line":61},[36,122166,122167],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[36,122169,122170],{"class":38,"line":80},[36,122171,122172],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[36,122174,122175],{"class":38,"line":96},[36,122176,122177],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[36,122179,122180],{"class":38,"line":101},[36,122181,122182],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[36,122184,122185],{"class":38,"line":128},[36,122186,122187],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122189,122190],{},"运行下方的命令",[26,122192,122194],{"className":119854,"code":122193,"language":119856,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[33,122195,122196,122201,122208,122213],{"__ignoreMap":31},[36,122197,122198],{"class":38,"line":39},[36,122199,122200],{"class":124},"# cd进入CUDA路径\n",[36,122202,122203,122205],{"class":38,"line":54},[36,122204,102607],{"class":73},[36,122206,122207],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[36,122209,122210],{"class":38,"line":61},[36,122211,122212],{"class":124}," # 查看本路径下的需要软链接的文件名\n",[36,122214,122215],{"class":38,"line":80},[36,122216,122217],{"class":46}," ls\n",[19,122219,122220],{},[2992,122221],{"alt":31,"src":122222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122224,122225,122226,19739,122229,19739,122232,122235],{},"如上图，我需要将",[33,122227,122228],{},"libcudnn_xxx_xxxxx.so.8.9.7",[33,122230,122231],{},"libcudnn_xxx_xxxxx.so.8",[33,122233,122234],{},"libcudnn_xxx_xxxxx.so","软链接",[26,122237,122239],{"className":119854,"code":122238,"language":119856,"meta":31,"style":31},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\nsudo ln -sf libcudnn_cnn_train.so.8.9.7 libcudnn_cnn_train.so.8\nsudo ln -sf libcudnn_adv_infer.so.8.9.7 libcudnn_adv_infer.so.8\nsudo ln -sf libcudnn_adv_train.so.8.9.7 libcudnn_adv_train.so.8\nsudo ln -sf libcudnn_cnn_infer.so.8.9.7 libcudnn_cnn_infer.so.8\nsudo ln -sf libcudnn.so.8.9.7 libcudnn.so.8\nsudo ln -sf libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8\nsudo ln -sf libcudnn_ops_train.so.8.9.7 libcudnn_ops_train.so.8\n# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\nsudo ldconfig\n# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\nls -l \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_*.so*\n",[33,122240,122241,122246,122262,122276,122290,122304,122318,122332,122346,122351,122357,122362],{"__ignoreMap":31},[36,122242,122243],{"class":38,"line":39},[36,122244,122245],{"class":124},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[36,122247,122248,122250,122253,122256,122259],{"class":38,"line":54},[36,122249,25907],{"class":46},[36,122251,122252],{"class":110}," ln",[36,122254,122255],{"class":73}," -sf",[36,122257,122258],{"class":110}," libcudnn_cnn_train.so.8.9.7",[36,122260,122261],{"class":110}," libcudnn_cnn_train.so.8\n",[36,122263,122264,122266,122268,122270,122273],{"class":38,"line":61},[36,122265,25907],{"class":46},[36,122267,122252],{"class":110},[36,122269,122255],{"class":73},[36,122271,122272],{"class":110}," libcudnn_adv_infer.so.8.9.7",[36,122274,122275],{"class":110}," libcudnn_adv_infer.so.8\n",[36,122277,122278,122280,122282,122284,122287],{"class":38,"line":80},[36,122279,25907],{"class":46},[36,122281,122252],{"class":110},[36,122283,122255],{"class":73},[36,122285,122286],{"class":110}," libcudnn_adv_train.so.8.9.7",[36,122288,122289],{"class":110}," libcudnn_adv_train.so.8\n",[36,122291,122292,122294,122296,122298,122301],{"class":38,"line":96},[36,122293,25907],{"class":46},[36,122295,122252],{"class":110},[36,122297,122255],{"class":73},[36,122299,122300],{"class":110}," libcudnn_cnn_infer.so.8.9.7",[36,122302,122303],{"class":110}," libcudnn_cnn_infer.so.8\n",[36,122305,122306,122308,122310,122312,122315],{"class":38,"line":101},[36,122307,25907],{"class":46},[36,122309,122252],{"class":110},[36,122311,122255],{"class":73},[36,122313,122314],{"class":110}," libcudnn.so.8.9.7",[36,122316,122317],{"class":110}," libcudnn.so.8\n",[36,122319,122320,122322,122324,122326,122329],{"class":38,"line":128},[36,122321,25907],{"class":46},[36,122323,122252],{"class":110},[36,122325,122255],{"class":73},[36,122327,122328],{"class":110}," libcudnn_ops_infer.so.8.9.7",[36,122330,122331],{"class":110}," libcudnn_ops_infer.so.8\n",[36,122333,122334,122336,122338,122340,122343],{"class":38,"line":149},[36,122335,25907],{"class":46},[36,122337,122252],{"class":110},[36,122339,122255],{"class":73},[36,122341,122342],{"class":110}," libcudnn_ops_train.so.8.9.7",[36,122344,122345],{"class":110}," libcudnn_ops_train.so.8\n",[36,122347,122348],{"class":38,"line":154},[36,122349,122350],{"class":124},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[36,122352,122353,122355],{"class":38,"line":167},[36,122354,25907],{"class":46},[36,122356,122141],{"class":110},[36,122358,122359],{"class":38,"line":172},[36,122360,122361],{"class":124},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[36,122363,122364,122366,122369,122372,122374,122377],{"class":38,"line":192},[36,122365,28092],{"class":46},[36,122367,122368],{"class":73}," -l",[36,122370,122371],{"class":110}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[36,122373,2122],{"class":73},[36,122375,122376],{"class":110},".so",[36,122378,120579],{"class":73},[1645,122380,122382],{"id":122381},"_355-常见问题","3.5.5 常见问题",[256,122384,122385],{},[259,122386,122387],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,122389,122391],{"className":119854,"code":122390,"language":119856,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[33,122392,122393],{"__ignoreMap":31},[36,122394,122395,122397,122399],{"class":38,"line":39},[36,122396,25907],{"class":46},[36,122398,119914],{"class":110},[36,122400,122401],{"class":110}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122403,122404],{},"blacklist-nouveau.conf文件内容如下：",[26,122406,122408],{"className":119854,"code":122407,"language":119856,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[33,122409,122410,122418,122425,122437,122447],{"__ignoreMap":31},[36,122411,122412,122415],{"class":38,"line":39},[36,122413,122414],{"class":46},"blacklist",[36,122416,122417],{"class":110}," nouveau\n",[36,122419,122420,122422],{"class":38,"line":54},[36,122421,122414],{"class":46},[36,122423,122424],{"class":110}," lbm-nouveau\n",[36,122426,122427,122429,122432,122435],{"class":38,"line":61},[36,122428,117261],{"class":46},[36,122430,122431],{"class":110}," nouveau",[36,122433,122434],{"class":110}," modeset=",[36,122436,4576],{"class":73},[36,122438,122439,122442,122444],{"class":38,"line":80},[36,122440,122441],{"class":73},"alias",[36,122443,122431],{"class":110},[36,122445,122446],{"class":110}," off\n",[36,122448,122449,122451,122454],{"class":38,"line":96},[36,122450,122441],{"class":73},[36,122452,122453],{"class":110}," lbm-nouveau",[36,122455,122446],{"class":110},[19,122457,122458],{},"接着运行下方命令",[26,122460,122462],{"className":119854,"code":122461,"language":119856,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[33,122463,122464,122474,122479],{"__ignoreMap":31},[36,122465,122466,122468,122471],{"class":38,"line":39},[36,122467,25907],{"class":46},[36,122469,122470],{"class":110}," update-initramfs",[36,122472,122473],{"class":73}," -u\n",[36,122475,122476],{"class":38,"line":54},[36,122477,122478],{"class":46},"或者\n",[36,122480,122481,122483,122486],{"class":38,"line":61},[36,122482,25907],{"class":46},[36,122484,122485],{"class":110}," dracut",[36,122487,122488],{"class":73}," --force\n",[19,122490,122491],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,122493,122495],{"className":119854,"code":122494,"language":119856,"meta":31,"style":31},"lsmod | grep nouveau\n",[33,122496,122497],{"__ignoreMap":31},[36,122498,122499,122502,122504,122506],{"class":38,"line":39},[36,122500,122501],{"class":46},"lsmod",[36,122503,26440],{"class":42},[36,122505,31567],{"class":46},[36,122507,122417],{"class":110},[256,122509,122510],{"start":54},[259,122511,122512],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,122514,122516],{"className":119854,"code":122515,"language":119856,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[33,122517,122518],{"__ignoreMap":31},[36,122519,122520,122522,122524],{"class":38,"line":39},[36,122521,25907],{"class":46},[36,122523,119914],{"class":110},[36,122525,122526],{"class":110}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122528,122529],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,122531,122533],{"className":119854,"code":122532,"language":119856,"meta":31,"style":31},"Section \"OutputClass\"\n   Identifier \"nvidia\"\n   MatchDriver \"nvidia-drm\"\n   Driver \"nvidia\"\n   Option \"AllowEmptyInitialConfiguration\"\n   Option \"PrimaryGPU\" \"yes\"\n   ModulePath \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\nEndSection\n",[33,122534,122535,122543,122551,122559,122566,122574,122584,122592],{"__ignoreMap":31},[36,122536,122537,122540],{"class":38,"line":39},[36,122538,122539],{"class":46},"Section",[36,122541,122542],{"class":110}," \"OutputClass\"\n",[36,122544,122545,122548],{"class":38,"line":54},[36,122546,122547],{"class":46},"   Identifier",[36,122549,122550],{"class":110}," \"nvidia\"\n",[36,122552,122553,122556],{"class":38,"line":61},[36,122554,122555],{"class":46},"   MatchDriver",[36,122557,122558],{"class":110}," \"nvidia-drm\"\n",[36,122560,122561,122564],{"class":38,"line":80},[36,122562,122563],{"class":46},"   Driver",[36,122565,122550],{"class":110},[36,122567,122568,122571],{"class":38,"line":96},[36,122569,122570],{"class":46},"   Option",[36,122572,122573],{"class":110}," \"AllowEmptyInitialConfiguration\"\n",[36,122575,122576,122578,122581],{"class":38,"line":101},[36,122577,122570],{"class":46},[36,122579,122580],{"class":110}," \"PrimaryGPU\"",[36,122582,122583],{"class":110}," \"yes\"\n",[36,122585,122586,122589],{"class":38,"line":128},[36,122587,122588],{"class":46},"   ModulePath",[36,122590,122591],{"class":110}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[36,122593,122594],{"class":38,"line":149},[36,122595,122596],{"class":46},"EndSection\n",[256,122598,122599],{"start":61},[259,122600,122601],{},"安装N卡驱动提示错误",[26,122603,122605],{"className":122147,"code":122604,"language":122149,"meta":122150,"style":31},"Unable to find the kernel source tree for the currently running kernel.  Please make sure you have installed the kernel source files for your kernel and that they are properly configured; on Red Hat Linux systems, for example, be sure you have the 'kernel-source' or 'kernel-devel' RPM installed.If you know the correct kernel source files are installed, you may specify the kernel source path with the '--kernel-source-path' command line option.\n",[33,122606,122607],{"__ignoreMap":31},[36,122608,122609],{"class":38,"line":39},[36,122610,122604],{},[256,122612,122613],{},[259,122614,122615],{},"检查当前运行的内核版本：",[19,122617,122618],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,122620,122622],{"className":118627,"code":122621,"language":118629,"meta":31,"style":31},"uname -r\n",[33,122623,122624],{"__ignoreMap":31},[36,122625,122626,122628],{"class":38,"line":39},[36,122627,71535],{"class":46},[36,122629,122630],{"class":73}," -r\n",[256,122632,122633],{"start":54},[259,122634,122635],{},"安装内核开发文件：",[19,122637,122638,122639,122642],{},"确保你已经安装了与当前内核版本相匹配的 ",[33,122640,122641],{},"kernel-devel"," 包。运行以下命令来安装：",[26,122644,122646],{"className":118627,"code":122645,"language":118629,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[33,122647,122648],{"__ignoreMap":31},[36,122649,122650,122652,122654,122656,122659,122661,122663,122665],{"class":38,"line":39},[36,122651,25907],{"class":46},[36,122653,27646],{"class":110},[36,122655,25164],{"class":110},[36,122657,122658],{"class":110}," kernel-devel-",[36,122660,26430],{"class":50},[36,122662,71535],{"class":46},[36,122664,120970],{"class":73},[36,122666,1680],{"class":50},[19,122668,122669],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[256,122671,122672],{"start":61},[259,122673,122674],{},"安装内核源代码（如果需要）：",[19,122676,122677],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,122679,122681],{"className":118627,"code":122680,"language":118629,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[33,122682,122683],{"__ignoreMap":31},[36,122684,122685,122687,122689,122691,122694],{"class":38,"line":39},[36,122686,25907],{"class":46},[36,122688,27646],{"class":110},[36,122690,25164],{"class":110},[36,122692,122693],{"class":110}," kernel-headers",[36,122695,122696],{"class":110}," kernel-source\n",[256,122698,122699],{"start":80},[259,122700,122701],{},"检查安装：",[19,122703,122704,122705,122708],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[33,122706,122707],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,122710,122712],{"className":118627,"code":122711,"language":118629,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[33,122713,122714],{"__ignoreMap":31},[36,122715,122716,122718],{"class":38,"line":39},[36,122717,28092],{"class":46},[36,122719,122720],{"class":110}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122722,122723,122724,122727],{},"如果仍然遇到问题，可以通过 ",[33,122725,122726],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1592,122729,122730],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":122732},[122733,122737,122747,122751,122752],{"id":119830,"depth":54,"text":119831,"children":122734},[122735,122736],{"id":119840,"depth":61,"text":119841},{"id":119850,"depth":61,"text":119851},{"id":120050,"depth":54,"text":120051,"children":122738},[122739,122740,122741,122742,122743,122744,122745,122746],{"id":120054,"depth":61,"text":120055},{"id":120124,"depth":61,"text":120125},{"id":120213,"depth":61,"text":120214},{"id":120458,"depth":61,"text":120459},{"id":120528,"depth":61,"text":120529},{"id":120595,"depth":61,"text":120596},{"id":120630,"depth":61,"text":120631},{"id":120685,"depth":61,"text":120686},{"id":120736,"depth":54,"text":120737,"children":122748},[122749,122750],{"id":120740,"depth":61,"text":120741},{"id":120820,"depth":61,"text":120821},{"id":121006,"depth":54,"text":121007},{"id":121179,"depth":54,"text":121180,"children":122753},[122754,122755,122756,122757,122758],{"id":121183,"depth":61,"text":121184},{"id":121224,"depth":61,"text":121225},{"id":121511,"depth":61,"text":121512},{"id":121885,"depth":61,"text":121886},{"id":122381,"depth":61,"text":122382},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119822,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122765,"title":122766,"body":122767,"description":24706,"extension":1603,"meta":123107,"navigation":57,"path":123108,"seo":123109,"stem":123110,"__hash__":123111},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122768,"toc":123105},[122769,122772,122777,122780,123026,123031,123034,123070,123073,123102],[10,122770,122766],{"id":122771},"_4-命令教程长期积累",[256,122773,122774],{},[259,122775,122776],{},"大多数命令",[19,122778,122779],{},"常用 Linux 命令速查：",[26,122781,122783],{"className":118627,"code":122782,"language":118629,"meta":31,"style":31},"# 文件与目录\nls        # 列出目录内容\ncd        # 切换目录\npwd       # 显示当前路径\nmkdir     # 创建目录\nrm        # 删除文件或目录\ncp        # 复制文件或目录\nmv        # 移动\u002F重命名文件或目录\ntouch     # 创建空文件\ncat       # 查看文件内容\nhead\u002Ftail # 查看文件头部\u002F尾部\n\n# 权限管理\nchmod     # 修改文件权限\nchown     # 修改文件所有者\nsudo      # 以管理员身份执行\n\n# 系统信息\nuname     # 系统信息\ndf        # 磁盘使用情况\nfree      # 内存使用情况\ntop\u002Fhtop  # 进程监控\nps        # 查看进程\n\n# 网络\nping      # 测试网络连通性\ncurl      # 发送 HTTP 请求\nwget      # 下载文件\nssh       # 远程登录\nscp       # 远程文件传输\n\n# 包管理（Debian\u002FUbuntu）\napt update   # 更新软件源\napt install  # 安装软件包\napt remove   # 卸载软件包\n",[33,122784,122785,122790,122797,122804,122812,122819,122826,122834,122842,122849,122856,122864,122868,122873,122880,122888,122895,122899,122904,122911,122919,122927,122935,122943,122947,122952,122960,122967,122974,122982,122990,122994,122999,123008,123017],{"__ignoreMap":31},[36,122786,122787],{"class":38,"line":39},[36,122788,122789],{"class":124},"# 文件与目录\n",[36,122791,122792,122794],{"class":38,"line":54},[36,122793,28092],{"class":46},[36,122795,122796],{"class":124},"        # 列出目录内容\n",[36,122798,122799,122801],{"class":38,"line":61},[36,122800,102607],{"class":73},[36,122802,122803],{"class":124},"        # 切换目录\n",[36,122805,122806,122809],{"class":38,"line":80},[36,122807,122808],{"class":73},"pwd",[36,122810,122811],{"class":124},"       # 显示当前路径\n",[36,122813,122814,122816],{"class":38,"line":96},[36,122815,102597],{"class":46},[36,122817,122818],{"class":124},"     # 创建目录\n",[36,122820,122821,122823],{"class":38,"line":101},[36,122822,26653],{"class":46},[36,122824,122825],{"class":124},"        # 删除文件或目录\n",[36,122827,122828,122831],{"class":38,"line":128},[36,122829,122830],{"class":46},"cp",[36,122832,122833],{"class":124},"        # 复制文件或目录\n",[36,122835,122836,122839],{"class":38,"line":149},[36,122837,122838],{"class":46},"mv",[36,122840,122841],{"class":124},"        # 移动\u002F重命名文件或目录\n",[36,122843,122844,122846],{"class":38,"line":154},[36,122845,102614],{"class":46},[36,122847,122848],{"class":124},"     # 创建空文件\n",[36,122850,122851,122853],{"class":38,"line":167},[36,122852,122096],{"class":46},[36,122854,122855],{"class":124},"       # 查看文件内容\n",[36,122857,122858,122861],{"class":38,"line":172},[36,122859,122860],{"class":46},"head\u002Ftail",[36,122862,122863],{"class":124}," # 查看文件头部\u002F尾部\n",[36,122865,122866],{"class":38,"line":192},[36,122867,58],{"emptyLinePlaceholder":57},[36,122869,122870],{"class":38,"line":211},[36,122871,122872],{"class":124},"# 权限管理\n",[36,122874,122875,122877],{"class":38,"line":216},[36,122876,25942],{"class":46},[36,122878,122879],{"class":124},"     # 修改文件权限\n",[36,122881,122882,122885],{"class":38,"line":231},[36,122883,122884],{"class":46},"chown",[36,122886,122887],{"class":124},"     # 修改文件所有者\n",[36,122889,122890,122892],{"class":38,"line":236},[36,122891,25907],{"class":46},[36,122893,122894],{"class":124},"      # 以管理员身份执行\n",[36,122896,122897],{"class":38,"line":247},[36,122898,58],{"emptyLinePlaceholder":57},[36,122900,122901],{"class":38,"line":637},[36,122902,122903],{"class":124},"# 系统信息\n",[36,122905,122906,122908],{"class":38,"line":646},[36,122907,71535],{"class":46},[36,122909,122910],{"class":124},"     # 系统信息\n",[36,122912,122913,122916],{"class":38,"line":655},[36,122914,122915],{"class":46},"df",[36,122917,122918],{"class":124},"        # 磁盘使用情况\n",[36,122920,122921,122924],{"class":38,"line":660},[36,122922,122923],{"class":46},"free",[36,122925,122926],{"class":124},"      # 内存使用情况\n",[36,122928,122929,122932],{"class":38,"line":665},[36,122930,122931],{"class":46},"top\u002Fhtop",[36,122933,122934],{"class":124},"  # 进程监控\n",[36,122936,122937,122940],{"class":38,"line":674},[36,122938,122939],{"class":46},"ps",[36,122941,122942],{"class":124},"        # 查看进程\n",[36,122944,122945],{"class":38,"line":679},[36,122946,58],{"emptyLinePlaceholder":57},[36,122948,122949],{"class":38,"line":692},[36,122950,122951],{"class":124},"# 网络\n",[36,122953,122954,122957],{"class":38,"line":705},[36,122955,122956],{"class":46},"ping",[36,122958,122959],{"class":124},"      # 测试网络连通性\n",[36,122961,122962,122964],{"class":38,"line":710},[36,122963,28180],{"class":46},[36,122965,122966],{"class":124},"      # 发送 HTTP 请求\n",[36,122968,122969,122971],{"class":38,"line":722},[36,122970,121620],{"class":46},[36,122972,122973],{"class":124},"      # 下载文件\n",[36,122975,122976,122979],{"class":38,"line":750},[36,122977,122978],{"class":46},"ssh",[36,122980,122981],{"class":124},"       # 远程登录\n",[36,122983,122984,122987],{"class":38,"line":755},[36,122985,122986],{"class":46},"scp",[36,122988,122989],{"class":124},"       # 远程文件传输\n",[36,122991,122992],{"class":38,"line":777},[36,122993,58],{"emptyLinePlaceholder":57},[36,122995,122996],{"class":38,"line":802},[36,122997,122998],{"class":124},"# 包管理（Debian\u002FUbuntu）\n",[36,123000,123001,123003,123005],{"class":38,"line":807},[36,123002,118699],{"class":46},[36,123004,118678],{"class":110},[36,123006,123007],{"class":124},"   # 更新软件源\n",[36,123009,123010,123012,123014],{"class":38,"line":818},[36,123011,118699],{"class":46},[36,123013,25164],{"class":110},[36,123015,123016],{"class":124},"  # 安装软件包\n",[36,123018,123019,123021,123023],{"class":38,"line":843},[36,123020,118699],{"class":46},[36,123022,27410],{"class":110},[36,123024,123025],{"class":124},"   # 卸载软件包\n",[256,123027,123028],{"start":54},[259,123029,123030],{},"KDE Dolphin 以root打开",[19,123032,123033],{},"kde5",[26,123035,123037],{"className":118627,"code":123036,"language":118629,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[33,123038,123039],{"__ignoreMap":31},[36,123040,123041,123044,123047,123050,123052,123054,123057,123060,123062,123065,123067],{"class":38,"line":39},[36,123042,123043],{"class":46},"pkexec",[36,123045,123046],{"class":110}," env",[36,123048,123049],{"class":110}," DISPLAY=",[36,123051,29474],{"class":50},[36,123053,29532],{"class":110},[36,123055,123056],{"class":50},"$XAUTHORITY ",[36,123058,123059],{"class":110},"KDE_SESSION_VERSION=",[36,123061,1987],{"class":73},[36,123063,123064],{"class":110}," KDE_FULL_SESSION=",[36,123066,2895],{"class":73},[36,123068,123069],{"class":110}," dolphin\n",[19,123071,123072],{},"kde6",[26,123074,123076],{"className":118627,"code":123075,"language":118629,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[33,123077,123078],{"__ignoreMap":31},[36,123079,123080,123082,123084,123086,123088,123090,123092,123094,123096,123098,123100],{"class":38,"line":39},[36,123081,123043],{"class":46},[36,123083,123046],{"class":110},[36,123085,123049],{"class":110},[36,123087,29474],{"class":50},[36,123089,29532],{"class":110},[36,123091,123056],{"class":50},[36,123093,123059],{"class":110},[36,123095,2012],{"class":73},[36,123097,123064],{"class":110},[36,123099,2895],{"class":73},[36,123101,123069],{"class":110},[1592,123103,123104],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":31,"searchDepth":54,"depth":54,"links":123106},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122766,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123113,"title":123114,"body":123115,"description":24706,"extension":1603,"meta":123129,"navigation":57,"path":123130,"seo":123131,"stem":123132,"__hash__":123133},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123116,"toc":123127},[123117,123120],[10,123118,123114],{"id":123119},"_5-各种环境配置",[19,123121,123122],{},[1906,123123,123126],{"href":123124,"rel":123125},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25195],"电控组环境搭建大全",{"title":31,"searchDepth":54,"depth":54,"links":123128},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123114,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123135,"title":123136,"body":123137,"description":24706,"extension":1603,"meta":123485,"navigation":57,"path":123486,"seo":123487,"stem":123488,"__hash__":123489},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123138,"toc":123477},[123139,123142,123146,123150,123154,123159,123166,123170,123463,123467,123474],[10,123140,123136],{"id":123141},"_6-拓展功能",[14,123143,123145],{"id":123144},"_61-wine","6.1 Wine",[14,123147,123149],{"id":123148},"_62-android","6.2 Android",[1645,123151,123153],{"id":123152},"_621-i卡a卡","6.2.1 I卡、A卡",[256,123155,123156],{},[259,123157,123158],{},"Wayland-Waydroid(体验超级好)",[19,123160,123161,123162],{},"Waydroid 官网与安装指南：",[1906,123163,123164],{"href":123164,"rel":123165},"https:\u002F\u002Fwaydro.id\u002F",[25195],[1645,123167,123169],{"id":123168},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[256,123171,123172],{},[259,123173,123174,123175,123177,123178,123182,123184,123187,123192,123389],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55047,123176],{},"BlissOS 官网下载：",[1906,123179,123180],{"href":123180,"rel":123181},"https:\u002F\u002Fblissos.org\u002F",[25195],[55047,123183],{},[2992,123185],{"alt":31,"src":123186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[256,123188,123189],{"start":61},[259,123190,123191],{},"比较推荐的配置",[26,123193,123195],{"className":118627,"code":123194,"language":118629,"meta":31,"style":31},"qemu-system-x86_64 \\\n        -M q35,vmport=off \\\n        -accel kvm \\\n        -cpu qemu64,+sse3,+sse4.2 \\\n        -smp 8,cores=4 \\\n        -m 6G \\\n        -usb \\\n        -device virtio-tablet \\\n        -device virtio-keyboard \\\n        -device usb-tablet \\\n        -bios OVMF-pure-efi64.fd \\\n        -net user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022 \\\n        -net nic,model=virtio \\\n        -audio sdl,model=hda \\\n        -display sdl,gl=on,show-cursor=on \\\n        -device virtio-vga-gl,xres=1920,yres=1080 \\\n        -drive file=disk.qcow2,media=disk,if=virtio,cache=writeback \\\n        -drive file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom \\\n        -monitor stdio \\\n        -serial none\n",[33,123196,123197,123204,123214,123224,123234,123246,123256,123263,123273,123282,123291,123301,123311,123320,123330,123340,123352,123362,123371,123381],{"__ignoreMap":31},[36,123198,123199,123202],{"class":38,"line":39},[36,123200,123201],{"class":46},"qemu-system-x86_64",[36,123203,26009],{"class":73},[36,123205,123206,123209,123212],{"class":38,"line":54},[36,123207,123208],{"class":73},"        -M",[36,123210,123211],{"class":110}," q35,vmport=off",[36,123213,26009],{"class":73},[36,123215,123216,123219,123222],{"class":38,"line":61},[36,123217,123218],{"class":73},"        -accel",[36,123220,123221],{"class":110}," kvm",[36,123223,26009],{"class":73},[36,123225,123226,123229,123232],{"class":38,"line":80},[36,123227,123228],{"class":73},"        -cpu",[36,123230,123231],{"class":110}," qemu64,+sse3,+sse4.2",[36,123233,26009],{"class":73},[36,123235,123236,123239,123242,123244],{"class":38,"line":96},[36,123237,123238],{"class":73},"        -smp",[36,123240,123241],{"class":110}," 8,cores=",[36,123243,1961],{"class":73},[36,123245,26009],{"class":73},[36,123247,123248,123251,123254],{"class":38,"line":101},[36,123249,123250],{"class":73},"        -m",[36,123252,123253],{"class":110}," 6G",[36,123255,26009],{"class":73},[36,123257,123258,123261],{"class":38,"line":128},[36,123259,123260],{"class":73},"        -usb",[36,123262,26009],{"class":73},[36,123264,123265,123268,123271],{"class":38,"line":149},[36,123266,123267],{"class":73},"        -device",[36,123269,123270],{"class":110}," virtio-tablet",[36,123272,26009],{"class":73},[36,123274,123275,123277,123280],{"class":38,"line":154},[36,123276,123267],{"class":73},[36,123278,123279],{"class":110}," virtio-keyboard",[36,123281,26009],{"class":73},[36,123283,123284,123286,123289],{"class":38,"line":167},[36,123285,123267],{"class":73},[36,123287,123288],{"class":110}," usb-tablet",[36,123290,26009],{"class":73},[36,123292,123293,123296,123299],{"class":38,"line":172},[36,123294,123295],{"class":73},"        -bios",[36,123297,123298],{"class":110}," OVMF-pure-efi64.fd",[36,123300,26009],{"class":73},[36,123302,123303,123306,123309],{"class":38,"line":192},[36,123304,123305],{"class":73},"        -net",[36,123307,123308],{"class":110}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[36,123310,26009],{"class":73},[36,123312,123313,123315,123318],{"class":38,"line":211},[36,123314,123305],{"class":73},[36,123316,123317],{"class":110}," nic,model=virtio",[36,123319,26009],{"class":73},[36,123321,123322,123325,123328],{"class":38,"line":216},[36,123323,123324],{"class":73},"        -audio",[36,123326,123327],{"class":110}," sdl,model=hda",[36,123329,26009],{"class":73},[36,123331,123332,123335,123338],{"class":38,"line":231},[36,123333,123334],{"class":73},"        -display",[36,123336,123337],{"class":110}," sdl,gl=on,show-cursor=on",[36,123339,26009],{"class":73},[36,123341,123342,123344,123347,123350],{"class":38,"line":236},[36,123343,123267],{"class":73},[36,123345,123346],{"class":110}," virtio-vga-gl,xres=1920,yres=",[36,123348,123349],{"class":73},"1080",[36,123351,26009],{"class":73},[36,123353,123354,123357,123360],{"class":38,"line":247},[36,123355,123356],{"class":73},"        -drive",[36,123358,123359],{"class":110}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[36,123361,26009],{"class":73},[36,123363,123364,123366,123369],{"class":38,"line":637},[36,123365,123356],{"class":73},[36,123367,123368],{"class":110}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[36,123370,26009],{"class":73},[36,123372,123373,123376,123379],{"class":38,"line":646},[36,123374,123375],{"class":73},"        -monitor",[36,123377,123378],{"class":110}," stdio",[36,123380,26009],{"class":73},[36,123382,123383,123386],{"class":38,"line":655},[36,123384,123385],{"class":73},"        -serial",[36,123387,123388],{"class":110}," none\n",[256,123390,123391],{"start":96},[259,123392,123393,123394],{},"常用操作：",[256,123395,123396,123399,123455],{},[259,123397,123398],{},"全屏：Ctrl+Alt+F",[259,123400,123401,123402,123407],{},"adb调试",[256,123403,123404],{},[259,123405,123406],{},"使Linux与Android用ADB连接。",[26,123408,123410],{"className":118627,"code":123409,"language":118629,"meta":31,"style":31},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[33,123411,123412,123417,123428,123433,123445,123450],{"__ignoreMap":31},[36,123413,123414],{"class":38,"line":39},[36,123415,123416],{"class":124},"# 连接安卓\n",[36,123418,123419,123422,123425],{"class":38,"line":54},[36,123420,123421],{"class":46},"adb",[36,123423,123424],{"class":110}," connect",[36,123426,123427],{"class":73}," 127.0.0.1\n",[36,123429,123430],{"class":38,"line":61},[36,123431,123432],{"class":124},"# 打开shell\n",[36,123434,123435,123437,123439,123442],{"class":38,"line":80},[36,123436,123421],{"class":46},[36,123438,28214],{"class":73},[36,123440,123441],{"class":110}," 127.0.0.1:5555",[36,123443,123444],{"class":110}," shell\n",[36,123446,123447],{"class":38,"line":96},[36,123448,123449],{"class":124},"# 使用root权限\n",[36,123451,123452],{"class":38,"line":101},[36,123453,123454],{"class":46},"su\n",[259,123456,123457,123458],{},"中文输入法",[256,123459,123460],{},[259,123461,123462],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123464,123466],{"id":123465},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123468,123469,123470],{},"rEFInd 官网与文档：",[1906,123471,123472],{"href":123472,"rel":123473},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25195],[1592,123475,123476],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":123478},[123479,123480,123484],{"id":123144,"depth":54,"text":123145},{"id":123148,"depth":54,"text":123149,"children":123481},[123482,123483],{"id":123152,"depth":61,"text":123153},{"id":123168,"depth":61,"text":123169},{"id":123465,"depth":54,"text":123466},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123136,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123491,"title":123492,"body":123493,"description":24706,"extension":1603,"meta":126792,"navigation":57,"path":126793,"seo":126794,"stem":126795,"__hash__":126796},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123494,"toc":126766},[123495,123498,123502,123505,123512,123762,123765,123837,123840,123844,123848,123853,123856,123859,123862,123867,123870,123873,123876,123881,123884,123889,123892,123895,123900,123903,123908,123911,123915,123919,123922,123927,123930,123944,123947,123950,123959,123962,123971,123974,123977,123986,123989,123998,124001,124004,124013,124016,124019,124034,124037,124040,124049,124054,124057,124060,124069,124072,124081,124084,124093,124096,124105,124110,124113,124121,124126,124129,124138,124141,124149,124154,124157,124166,124169,124172,124176,124179,124184,124187,124192,124206,124211,124216,124227,124232,124238,124243,124258,124263,124266,124271,124276,124281,124289,124294,124301,124306,124317,124322,124325,124329,124332,124335,124340,124343,124362,124367,124370,124379,124384,124387,124409,124412,124442,124445,124450,124453,124467,124472,124491,124494,124497,124502,124514,124519,124524,124527,124532,124535,124550,124553,124558,124563,124567,124572,124612,124615,124619,124625,124631,124636,124639,124646,124651,124658,124661,124664,124671,124685,124688,124748,124751,124765,124777,124780,124783,124786,124850,124853,124856,124859,124879,124882,124887,124894,124898,124901,124905,124910,124915,124919,124922,124925,124967,124972,124975,124997,125012,125014,125019,125031,125091,125093,125095,125149,125151,125153,125159,125164,125167,125172,125176,125179,125241,125246,125249,125251,125255,125267,125349,125351,125353,125407,125413,125415,125419,125424,125426,125431,125435,125455,125490,125494,125497,125500,125503,125510,125513,125525,125528,125543,125546,125565,125613,125616,125633,125636,125650,125655,125658,125667,125682,125694,125732,125737,125746,125751,125756,125782,125791,125795,125799,125804,125807,125811,125815,125820,125823,125828,125831,125836,125839,125844,125847,125851,125856,125859,125864,125867,125871,125876,125879,125884,125887,125892,125895,125899,125904,125907,125912,125915,125920,125923,125927,125932,125935,125940,125943,125948,125951,125956,125959,125964,125967,125972,125975,125979,125984,125987,125992,125999,126003,126008,126011,126016,126019,126023,126028,126031,126034,126037,126040,126043,126047,126050,126060,126065,126070,126092,126097,126102,126109,126113,126118,126121,126124,126129,126132,126135,126138,126141,126144,126147,126150,126153,126156,126159,126162,126165,126170,126175,126180,126185,126190,126195,126200,126203,126207,126210,126214,126219,126224,126229,126234,126238,126244,126252,126257,126260,126265,126280,126283,126288,126322,126337,126340,126395,126421,126433,126436,126445,126448,126463,126468,126471,126477,126482,126485,126490,126493,126498,126503,126510,126513,126528,126531,126566,126571,126579,126617,126620,126623,126628,126631,126636,126647,126681,126686,126689,126698,126703,126709,126712,126717,126726,126731,126734,126737,126742,126750,126753,126758,126763],[10,123496,123492],{"id":123497},"_7-其他操作",[14,123499,123501],{"id":123500},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123503,123504],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123506,123507,123508,123511],{},"进入工控机的硬盘目录，进入",[33,123509,123510],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,123513,123517],{"className":123514,"code":123515,"language":123516,"meta":31,"style":31},"language-YAML shiki shiki-themes github-light github-dark","network: \n  version: 2 \n  wifis: \n    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96: \n      renderer: NetworkManager \n      match: \n        name: \"wlan0\" \n      dhcp4: true \n      dhcp6: true \n      access-points: \n        \"EMIS_Vinci_Robocon_5G\": \n          auth: \n            key-management: \"psk\" \n            password: \"vinci666\" \n          networkmanager: \n            uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n            name: \"EMIS_Vinci_Robocon_5G\" \n            passthrough: \n              wifi-security.auth-alg: \"open\" \n              ipv6.addr-gen-mode: \"default\" \n              ipv6.ip6-privacy: \"-1\" \n              proxy._: \"\" \n      networkmanager: \n        uuid: \"6f414fe0-2658-48ff-89ee-c7981b87bc96\" \n        name: \"EMIS_Vinci_Robocon_5G\"\n \n","YAML",[33,123518,123519,123527,123538,123545,123552,123564,123571,123583,123594,123605,123612,123619,123626,123638,123650,123657,123669,123681,123688,123700,123712,123724,123735,123742,123753],{"__ignoreMap":31},[36,123520,123521,123524],{"class":38,"line":39},[36,123522,123523],{"class":52631},"network",[36,123525,123526],{"class":50},": \n",[36,123528,123529,123532,123534,123536],{"class":38,"line":54},[36,123530,123531],{"class":52631},"  version",[36,123533,52768],{"class":50},[36,123535,1747],{"class":73},[36,123537,4169],{"class":50},[36,123539,123540,123543],{"class":38,"line":61},[36,123541,123542],{"class":52631},"  wifis",[36,123544,123526],{"class":50},[36,123546,123547,123550],{"class":38,"line":80},[36,123548,123549],{"class":52631},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[36,123551,123526],{"class":50},[36,123553,123554,123557,123559,123562],{"class":38,"line":96},[36,123555,123556],{"class":52631},"      renderer",[36,123558,52768],{"class":50},[36,123560,123561],{"class":110},"NetworkManager",[36,123563,4169],{"class":50},[36,123565,123566,123569],{"class":38,"line":101},[36,123567,123568],{"class":52631},"      match",[36,123570,123526],{"class":50},[36,123572,123573,123576,123578,123581],{"class":38,"line":128},[36,123574,123575],{"class":52631},"        name",[36,123577,52768],{"class":50},[36,123579,123580],{"class":110},"\"wlan0\"",[36,123582,4169],{"class":50},[36,123584,123585,123588,123590,123592],{"class":38,"line":149},[36,123586,123587],{"class":52631},"      dhcp4",[36,123589,52768],{"class":50},[36,123591,2895],{"class":73},[36,123593,4169],{"class":50},[36,123595,123596,123599,123601,123603],{"class":38,"line":154},[36,123597,123598],{"class":52631},"      dhcp6",[36,123600,52768],{"class":50},[36,123602,2895],{"class":73},[36,123604,4169],{"class":50},[36,123606,123607,123610],{"class":38,"line":167},[36,123608,123609],{"class":52631},"      access-points",[36,123611,123526],{"class":50},[36,123613,123614,123617],{"class":38,"line":172},[36,123615,123616],{"class":110},"        \"EMIS_Vinci_Robocon_5G\"",[36,123618,123526],{"class":50},[36,123620,123621,123624],{"class":38,"line":192},[36,123622,123623],{"class":52631},"          auth",[36,123625,123526],{"class":50},[36,123627,123628,123631,123633,123636],{"class":38,"line":211},[36,123629,123630],{"class":52631},"            key-management",[36,123632,52768],{"class":50},[36,123634,123635],{"class":110},"\"psk\"",[36,123637,4169],{"class":50},[36,123639,123640,123643,123645,123648],{"class":38,"line":216},[36,123641,123642],{"class":52631},"            password",[36,123644,52768],{"class":50},[36,123646,123647],{"class":110},"\"vinci666\"",[36,123649,4169],{"class":50},[36,123651,123652,123655],{"class":38,"line":231},[36,123653,123654],{"class":52631},"          networkmanager",[36,123656,123526],{"class":50},[36,123658,123659,123662,123664,123667],{"class":38,"line":236},[36,123660,123661],{"class":52631},"            uuid",[36,123663,52768],{"class":50},[36,123665,123666],{"class":110},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[36,123668,4169],{"class":50},[36,123670,123671,123674,123676,123679],{"class":38,"line":247},[36,123672,123673],{"class":52631},"            name",[36,123675,52768],{"class":50},[36,123677,123678],{"class":110},"\"EMIS_Vinci_Robocon_5G\"",[36,123680,4169],{"class":50},[36,123682,123683,123686],{"class":38,"line":637},[36,123684,123685],{"class":52631},"            passthrough",[36,123687,123526],{"class":50},[36,123689,123690,123693,123695,123698],{"class":38,"line":646},[36,123691,123692],{"class":52631},"              wifi-security.auth-alg",[36,123694,52768],{"class":50},[36,123696,123697],{"class":110},"\"open\"",[36,123699,4169],{"class":50},[36,123701,123702,123705,123707,123710],{"class":38,"line":655},[36,123703,123704],{"class":52631},"              ipv6.addr-gen-mode",[36,123706,52768],{"class":50},[36,123708,123709],{"class":110},"\"default\"",[36,123711,4169],{"class":50},[36,123713,123714,123717,123719,123722],{"class":38,"line":660},[36,123715,123716],{"class":52631},"              ipv6.ip6-privacy",[36,123718,52768],{"class":50},[36,123720,123721],{"class":110},"\"-1\"",[36,123723,4169],{"class":50},[36,123725,123726,123729,123731,123733],{"class":38,"line":665},[36,123727,123728],{"class":52631},"              proxy._",[36,123730,52768],{"class":50},[36,123732,9126],{"class":110},[36,123734,4169],{"class":50},[36,123736,123737,123740],{"class":38,"line":674},[36,123738,123739],{"class":52631},"      networkmanager",[36,123741,123526],{"class":50},[36,123743,123744,123747,123749,123751],{"class":38,"line":679},[36,123745,123746],{"class":52631},"        uuid",[36,123748,52768],{"class":50},[36,123750,123666],{"class":110},[36,123752,4169],{"class":50},[36,123754,123755,123757,123759],{"class":38,"line":692},[36,123756,123575],{"class":52631},[36,123758,52768],{"class":50},[36,123760,123761],{"class":110},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123763,123764],{},"将其改为新wifi的名和密码：",[26,123766,123768],{"className":123514,"code":123767,"language":123516,"meta":31,"style":31},"network:\n  version: 2\n  wifis:\n    wlan0:\n      dhcp4: true\n      dhcp6: true\n      access-points:\n        \"EMIS_Vinci_Robocon_5G\":\n          password: \"vinci666\"\n\n",[33,123769,123770,123776,123785,123791,123798,123807,123815,123821,123827],{"__ignoreMap":31},[36,123771,123772,123774],{"class":38,"line":39},[36,123773,123523],{"class":52631},[36,123775,5230],{"class":50},[36,123777,123778,123780,123782],{"class":38,"line":54},[36,123779,123531],{"class":52631},[36,123781,52768],{"class":50},[36,123783,123784],{"class":73},"2\n",[36,123786,123787,123789],{"class":38,"line":61},[36,123788,123542],{"class":52631},[36,123790,5230],{"class":50},[36,123792,123793,123796],{"class":38,"line":80},[36,123794,123795],{"class":52631},"    wlan0",[36,123797,5230],{"class":50},[36,123799,123800,123802,123804],{"class":38,"line":96},[36,123801,123587],{"class":52631},[36,123803,52768],{"class":50},[36,123805,123806],{"class":73},"true\n",[36,123808,123809,123811,123813],{"class":38,"line":101},[36,123810,123598],{"class":52631},[36,123812,52768],{"class":50},[36,123814,123806],{"class":73},[36,123816,123817,123819],{"class":38,"line":128},[36,123818,123609],{"class":52631},[36,123820,5230],{"class":50},[36,123822,123823,123825],{"class":38,"line":149},[36,123824,123616],{"class":110},[36,123826,5230],{"class":50},[36,123828,123829,123832,123834],{"class":38,"line":154},[36,123830,123831],{"class":52631},"          password",[36,123833,52768],{"class":50},[36,123835,123836],{"class":110},"\"vinci666\"\n",[19,123838,123839],{},"工控机开机即可连上网。",[14,123841,123843],{"id":123842},"_72-ssh远程开发","7.2 SSH远程开发",[1645,123845,123847],{"id":123846},"_721-环境准备","7.2.1 环境准备",[19,123849,123850],{},[887,123851,123852],{},"1.硬件准备",[19,123854,123855],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123857,123858],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123860,123861],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123863,123864],{},[887,123865,123866],{},"2.设置固定IP",[19,123868,123869],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123871,123872],{},"1.进入设置界面",[19,123874,123875],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123877,123878],{},[2992,123879],{"alt":31,"src":123880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123882,123883],{},"2.配置所连接的网络",[19,123885,123886],{},[2992,123887],{"alt":31,"src":123888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123890,123891],{},"3.设置固定IP",[19,123893,123894],{},"查看当前IP地址。",[19,123896,123897],{},[2992,123898],{"alt":31,"src":123899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123901,123902],{},"设置固定IP。",[19,123904,123905],{},[2992,123906],{"alt":31,"src":123907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123909,123910],{},"至此，IP配置完毕。",[1645,123912,123914],{"id":123913},"_722-环境搭建","7.2.2 环境搭建",[19,123916,123917],{},[887,123918,27084],{},[19,123920,123921],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123923,123924],{},[887,123925,123926],{},"实现",[19,123928,123929],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[256,123931,123932,123935,123938,123941],{},[259,123933,123934],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[259,123936,123937],{},"远程主机启动SSH服务；",[259,123939,123940],{},"本地主机登陆远程主机；",[259,123942,123943],{},"实现数据传输。",[19,123945,123946],{},"1.安装SSH客户端与服务端",[19,123948,123949],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,123951,123953],{"className":122147,"code":123952,"language":122149,"meta":122150,"style":31}," sudo apt install openssh-server\n",[33,123954,123955],{"__ignoreMap":31},[36,123956,123957],{"class":38,"line":39},[36,123958,123952],{},[19,123960,123961],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,123963,123965],{"className":122147,"code":123964,"language":122149,"meta":122150,"style":31},"sudo apt install openssh-client\n",[33,123966,123967],{"__ignoreMap":31},[36,123968,123969],{"class":38,"line":39},[36,123970,123964],{},[19,123972,123973],{},"2.远程主机启动SSH服务",[19,123975,123976],{},"远程主机启动 ssh 服务命令如下：",[26,123978,123980],{"className":122147,"code":123979,"language":122149,"meta":122150,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[33,123981,123982],{"__ignoreMap":31},[36,123983,123984],{"class":38,"line":39},[36,123985,123979],{},[19,123987,123988],{},"启动后可使用如下命令查看服务是否正常运行：",[26,123990,123992],{"className":122147,"code":123991,"language":122149,"meta":122150,"style":31},"ps -e | grep ssh\n",[33,123993,123994],{"__ignoreMap":31},[36,123995,123996],{"class":38,"line":39},[36,123997,123991],{},[19,123999,124000],{},"如果启动成功，会包含 sshd 程序。",[19,124002,124003],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,124005,124007],{"className":122147,"code":124006,"language":122149,"meta":122150,"style":31},"sudo systemctl enable ssh\n",[33,124008,124009],{"__ignoreMap":31},[36,124010,124011],{"class":38,"line":39},[36,124012,124006],{},[19,124014,124015],{},"3.本地远程登录",[19,124017,124018],{},"登录远程主机可以调用如下命令:",[26,124020,124022],{"className":118627,"code":124021,"language":118629,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[33,124023,124024],{"__ignoreMap":31},[36,124025,124026,124028,124031],{"class":38,"line":39},[36,124027,122978],{"class":46},[36,124029,124030],{"class":73}," -X",[36,124032,124033],{"class":110}," 用户名@ip地址\n",[19,124035,124036],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124038,124039],{},"如果退出，可以调用exit命令：",[26,124041,124043],{"className":122147,"code":124042,"language":122149,"meta":122150,"style":31},"exit\n",[33,124044,124045],{"__ignoreMap":31},[36,124046,124047],{"class":38,"line":39},[36,124048,124042],{},[19,124050,124051],{},[887,124052,124053],{},"4.实现数据传输",[19,124055,124056],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124058,124059],{},"上传文件指令格式如下：",[26,124061,124063],{"className":122147,"code":124062,"language":122149,"meta":122150,"style":31},"scp 本地文件路径 账号@ip:路径\n",[33,124064,124065],{"__ignoreMap":31},[36,124066,124067],{"class":38,"line":39},[36,124068,124062],{},[19,124070,124071],{},"上传文件夹指令格式如下：",[26,124073,124075],{"className":122147,"code":124074,"language":122149,"meta":122150,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[33,124076,124077],{"__ignoreMap":31},[36,124078,124079],{"class":38,"line":39},[36,124080,124074],{},[19,124082,124083],{},"下载文件指令格式如下：",[26,124085,124087],{"className":122147,"code":124086,"language":122149,"meta":122150,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[33,124088,124089],{"__ignoreMap":31},[36,124090,124091],{"class":38,"line":39},[36,124092,124086],{},[19,124094,124095],{},"下载文件夹指令格式如下：",[26,124097,124099],{"className":122147,"code":124098,"language":122149,"meta":122150,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[33,124100,124101],{"__ignoreMap":31},[36,124102,124103],{"class":38,"line":39},[36,124104,124098],{},[19,124106,124107],{},[887,124108,124109],{},"优化",[19,124111,124112],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[256,124114,124115,124118],{},[259,124116,124117],{},"本地生成密钥对；",[259,124119,124120],{},"将公钥上传至远程主机。",[19,124122,124123],{},[887,124124,124125],{},"1.生成密钥对",[19,124127,124128],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,124130,124132],{"className":122147,"code":124131,"language":122149,"meta":122150,"style":31},"ssh-keygen\n",[33,124133,124134],{"__ignoreMap":31},[36,124135,124136],{"class":38,"line":39},[36,124137,124131],{},[19,124139,124140],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[256,124142,124143,124146],{},[259,124144,124145],{},"id_rsa （私钥）；",[259,124147,124148],{},"id_rsa.pub (公钥)。",[19,124150,124151],{},[887,124152,124153],{},"2.公钥上传",[19,124155,124156],{},"上传指令如下：",[26,124158,124160],{"className":122147,"code":124159,"language":122149,"meta":122150,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[33,124161,124162],{"__ignoreMap":31},[36,124163,124164],{"class":38,"line":39},[36,124165,124159],{},[19,124167,124168],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124170,124171],{},"以后再远程登录就无需录入密码了。",[1645,124173,124175],{"id":124174},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124177,124178],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124180,124181],{},[887,124182,124183],{},"1.准备工作",[19,124185,124186],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124188,124189],{},[887,124190,124191],{},"2.为VScode安装远程开发插件",[19,124193,124194,124195,124198,124199,124202,124203,29716],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[33,124196,124197],{},"扩展：商店","的搜索栏输入",[33,124200,124201],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[33,124204,124205],{},"安装",[19,124207,124208],{},[2992,124209],{"alt":31,"src":124210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124212,124213],{},[887,124214,124215],{},"3.配置远程连接",[19,124217,124218,124219,124222,124223,124226],{},"步骤1：使用快捷键",[33,124220,124221],{},"ctrl + shift + p","打开命令输入窗口，并输入",[33,124224,124225],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124228,124229],{},[2992,124230],{"alt":31,"src":124231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124233,124234,124235,29716],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[33,124236,124237],{},"Add New SSH Host",[19,124239,124240],{},[2992,124241],{"alt":31,"src":124242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124244,124245,124246,124249,124250,124253,124254,124257],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[33,124247,124248],{},"ssh +X ubuntu@192.168.43.164","，其中，",[33,124251,124252],{},"ubuntu","需要替换为你的登录用户名，",[33,124255,124256],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124259,124260],{},[2992,124261],{"alt":31,"src":124262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124264,124265],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124267,124268],{},[2992,124269],{"alt":31,"src":124270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124272,124273],{},[2992,124274],{"alt":31,"src":124275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124277,124278],{},[887,124279,124280],{},"4.使用",[19,124282,124283,124284,124222,124286,124288],{},"步骤1：继续使用快捷键",[33,124285,124221],{},[33,124287,124225],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124290,124291],{},[2992,124292],{"alt":31,"src":124293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124295,124296,124297,124300],{},"或者，也可以点击侧边栏的",[33,124298,124299],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124302,124303],{},[2992,124304],{"alt":31,"src":124305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124307,124308,124309,124312,124313,124316],{},"步骤2：选择菜单栏的",[33,124310,124311],{},"文件","下的",[33,124314,124315],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124318,124319],{},[2992,124320],{"alt":31,"src":124321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124323,124324],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124326,124328],{"id":124327},"_73-远程桌面","7.3 远程桌面",[19,124330,124331],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124333,124334],{},"我们选择使用VNC来看。",[256,124336,124337],{},[259,124338,124339],{},"安装VNC服务器：",[19,124341,124342],{},"这里以TigerVNC为例进行安装：",[26,124344,124346],{"className":118627,"code":124345,"language":118629,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[33,124347,124348],{"__ignoreMap":31},[36,124349,124350,124352,124354,124356,124359],{"class":38,"line":39},[36,124351,25907],{"class":46},[36,124353,118648],{"class":110},[36,124355,25164],{"class":110},[36,124357,124358],{"class":110}," tigervnc-standalone-server",[36,124360,124361],{"class":110}," tigervnc-common\n",[256,124363,124364],{"start":54},[259,124365,124366],{},"设置VNC密码：",[19,124368,124369],{},"为VNC用户设置密码，运行以下命令：",[26,124371,124373],{"className":118627,"code":124372,"language":118629,"meta":31,"style":31},"vncpasswd\n",[33,124374,124375],{"__ignoreMap":31},[36,124376,124377],{"class":38,"line":39},[36,124378,124372],{"class":46},[256,124380,124381],{"start":61},[259,124382,124383],{},"配置VNC启动脚本:",[19,124385,124386],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,124388,124390],{"className":118627,"code":124389,"language":118629,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[33,124391,124392,124401],{"__ignoreMap":31},[36,124393,124394,124396,124398],{"class":38,"line":39},[36,124395,102597],{"class":46},[36,124397,30547],{"class":73},[36,124399,124400],{"class":110}," ~\u002F.vnc\n",[36,124402,124403,124406],{"class":38,"line":54},[36,124404,124405],{"class":46},"nano",[36,124407,124408],{"class":110}," ~\u002F.vnc\u002Fxstartup\n",[19,124410,124411],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,124413,124415],{"className":118627,"code":124414,"language":118629,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[33,124416,124417,124422,124430,124437],{"__ignoreMap":31},[36,124418,124419],{"class":38,"line":39},[36,124420,124421],{"class":124},"#!\u002Fbin\u002Fsh\n",[36,124423,124424,124427],{"class":38,"line":54},[36,124425,124426],{"class":73},"unset",[36,124428,124429],{"class":110}," SESSION_MANAGER\n",[36,124431,124432,124434],{"class":38,"line":61},[36,124433,124426],{"class":73},[36,124435,124436],{"class":110}," DBUS_SESSION_BUS_ADDRESS\n",[36,124438,124439],{"class":38,"line":80},[36,124440,124441],{"class":46},"gnome-session\n",[19,124443,124444],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[256,124446,124447],{"start":80},[259,124448,124449],{},"给予执行权限：",[19,124451,124452],{},"为xstartup文件设置执行权限：",[26,124454,124456],{"className":118627,"code":124455,"language":118629,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[33,124457,124458],{"__ignoreMap":31},[36,124459,124460,124462,124465],{"class":38,"line":39},[36,124461,25942],{"class":46},[36,124463,124464],{"class":110}," +x",[36,124466,124408],{"class":110},[256,124468,124469],{"start":96},[259,124470,124471],{},"启动VNC服务器：",[26,124473,124475],{"className":118627,"code":124474,"language":118629,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[33,124476,124477],{"__ignoreMap":31},[36,124478,124479,124482,124485,124488],{"class":38,"line":39},[36,124480,124481],{"class":46},"vncserver",[36,124483,124484],{"class":73}," -geometry",[36,124486,124487],{"class":110}," 1920x1080",[36,124489,124490],{"class":73}," -localhost=0\n",[19,124492,124493],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124495,124496],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[256,124498,124499],{"start":101},[259,124500,124501],{},"查看已开启的VNC服务器：",[26,124503,124505],{"className":118627,"code":124504,"language":118629,"meta":31,"style":31},"vncserver -list\n",[33,124506,124507],{"__ignoreMap":31},[36,124508,124509,124511],{"class":38,"line":39},[36,124510,124481],{"class":46},[36,124512,124513],{"class":73}," -list\n",[19,124515,124516],{},[2992,124517],{"alt":31,"src":124518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[256,124520,124521],{"start":128},[259,124522,124523],{},"连接到VNC服务器：",[19,124525,124526],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[256,124528,124529],{"start":149},[259,124530,124531],{},"停止VNC服务器：",[19,124533,124534],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,124536,124538],{"className":118627,"code":124537,"language":118629,"meta":31,"style":31},"vncserver -kill :1\n",[33,124539,124540],{"__ignoreMap":31},[36,124541,124542,124544,124547],{"class":38,"line":39},[36,124543,124481],{"class":46},[36,124545,124546],{"class":73}," -kill",[36,124548,124549],{"class":110}," :1\n",[19,124551,124552],{},"将:1替换为你实际使用的显示编号。",[19,124554,124555],{},[2992,124556],{"alt":31,"src":124557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124559,124560],{},[2992,124561],{"alt":31,"src":124562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124564,124566],{"id":124565},"_74-usb端口设置","7.4 USB端口设置",[19,124568,124569],{},[887,124570,124571],{},"首先先配置好权限",[26,124573,124575],{"className":118627,"code":124574,"language":118629,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[33,124576,124577,124582,124595,124602,124607],{"__ignoreMap":31},[36,124578,124579],{"class":38,"line":39},[36,124580,124581],{"class":124},"# 将用户权限提高\n",[36,124583,124584,124586,124588,124590,124593],{"class":38,"line":54},[36,124585,25907],{"class":46},[36,124587,27905],{"class":110},[36,124589,27908],{"class":73},[36,124591,124592],{"class":110}," dialout",[36,124594,27913],{"class":50},[36,124596,124597,124599],{"class":38,"line":61},[36,124598,27932],{"class":46},[36,124600,124601],{"class":110}," dialout\n",[36,124603,124604],{"class":38,"line":80},[36,124605,124606],{"class":124},"# 查看下面命令是否输出dialout（若输出才正常）\n",[36,124608,124609],{"class":38,"line":96},[36,124610,124611],{"class":46},"groups\n",[19,124613,124614],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[1645,124616,124618],{"id":124617},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124620,124621,124624],{},[887,124622,124623],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124626,124627,124630],{},[887,124628,124629],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124632,124633],{},[887,124634,124635],{},"流程如下：",[19,124637,124638],{},"（1）.查找设备idVendor和idProduct",[19,124640,124641,124642,124645],{},"接入两个USB设备，在终端调用指令",[33,124643,124644],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124647,124648],{},[2992,124649],{"alt":31,"src":124650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124652,124653,124654,124657],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[33,124655,124656],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124659,124660],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124662,124663],{},"（2）.编写映射规则",[19,124665,124666,124667,124670],{},"在",[33,124668,124669],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,124672,124674],{"className":118627,"code":124673,"language":118629,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[33,124675,124676],{"__ignoreMap":31},[36,124677,124678,124680,124682],{"class":38,"line":39},[36,124679,25907],{"class":46},[36,124681,119914],{"class":110},[36,124683,124684],{"class":110}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124686,124687],{},"输入如下内容：",[26,124689,124691],{"className":118627,"code":124690,"language":118629,"meta":31,"style":31},"KERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"10c4\", ATTRS{idProduct}==\"ea60\", MODE:=\"0777\", SYMLINK+=\"mylidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"mycar\"\n",[33,124692,124693,124723],{"__ignoreMap":31},[36,124694,124695,124698,124700,124703,124706,124709,124712,124714,124717,124720],{"class":38,"line":39},[36,124696,124697],{"class":50},"KERNEL",[36,124699,70],{"class":42},[36,124701,124702],{"class":110},"=\"ttyUSB*\",",[36,124704,124705],{"class":46}," ATTRS",[36,124707,124708],{"class":110},"{idVendor}==",[36,124710,124711],{"class":46},"\"10c4\"",[36,124713,2045],{"class":46},[36,124715,124716],{"class":110}," ATTRS{idProduct}==\"ea60\",",[36,124718,124719],{"class":110}," MODE:=\"0777\",",[36,124721,124722],{"class":110}," SYMLINK+=\"mylidar\"\n",[36,124724,124725,124727,124729,124731,124733,124735,124738,124740,124743,124745],{"class":38,"line":54},[36,124726,124697],{"class":50},[36,124728,70],{"class":42},[36,124730,124702],{"class":110},[36,124732,124705],{"class":46},[36,124734,124708],{"class":110},[36,124736,124737],{"class":46},"\"1a86\"",[36,124739,2045],{"class":46},[36,124741,124742],{"class":110}," ATTRS{idProduct}==\"7523\",",[36,124744,124719],{"class":110},[36,124746,124747],{"class":110}," SYMLINK+=\"mycar\"\n",[19,124749,124750],{},"代码解释：",[2674,124752,124753,124756,124759,124762],{},[259,124754,124755],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[259,124757,124758],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[259,124760,124761],{},"SYMLINK是符号连接，即绑定的别名；",[259,124763,124764],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124766,124767,124768,124771,124774],{},"***小提示：***",[24883,124769,124770],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[33,124772,124773],{},"\u002Fetc\u002Fudev\u002Frule.d",[24883,124775,124776],{},"目录即可。",[19,124778,124779],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124781,124782],{},"（3）.使规则生效",[19,124784,124785],{},"在终端下输入如下指令：",[26,124787,124789],{"className":118627,"code":124788,"language":118629,"meta":31,"style":31},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[33,124790,124791,124796,124808,124819,124823,124828,124841],{"__ignoreMap":31},[36,124792,124793],{"class":38,"line":39},[36,124794,124795],{"class":124},"# Ubuntu用下方命令\n",[36,124797,124798,124800,124802,124805],{"class":38,"line":54},[36,124799,25907],{"class":46},[36,124801,121379],{"class":110},[36,124803,124804],{"class":110}," udev",[36,124806,124807],{"class":110}," reload\n",[36,124809,124810,124812,124814,124816],{"class":38,"line":61},[36,124811,25907],{"class":46},[36,124813,121379],{"class":110},[36,124815,124804],{"class":110},[36,124817,124818],{"class":110}," restart\n",[36,124820,124821],{"class":38,"line":80},[36,124822,58],{"emptyLinePlaceholder":57},[36,124824,124825],{"class":38,"line":96},[36,124826,124827],{"class":124},"#Fedora用下方命令\n",[36,124829,124830,124832,124835,124838],{"class":38,"line":101},[36,124831,25907],{"class":46},[36,124833,124834],{"class":110}," udevadm",[36,124836,124837],{"class":110}," control",[36,124839,124840],{"class":73}," --reload\n",[36,124842,124843,124845,124847],{"class":38,"line":128},[36,124844,25907],{"class":46},[36,124846,124834],{"class":110},[36,124848,124849],{"class":110}," trigger\n",[19,124851,124852],{},"再重新插拔设备即可。",[19,124854,124855],{},"（4）.测试",[19,124857,124858],{},"终端下输入如下指令",[26,124860,124862],{"className":118627,"code":124861,"language":118629,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[33,124863,124864],{"__ignoreMap":31},[36,124865,124866,124869,124872,124874,124876],{"class":38,"line":39},[36,124867,124868],{"class":46},"ll",[36,124870,124871],{"class":110}," \u002Fdev",[36,124873,26440],{"class":42},[36,124875,31567],{"class":46},[36,124877,124878],{"class":110}," ttyUSB\n",[19,124880,124881],{},"运行结果如下：",[19,124883,124884],{},[2992,124885],{"alt":31,"src":124886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124888,124889,124890,124893],{},"也可以多次插拔USB设备，会发现设备端口",[33,124891,124892],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124895,124896],{},[887,124897,119295],{},[19,124899,124900],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[1645,124902,124904],{"id":124903},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124906,124907,124909],{},[887,124908,124623],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124911,124912,124914],{},[887,124913,124629],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124916,124917],{},[887,124918,124635],{},[19,124920,124921],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124923,124924],{},"调用如下指令查看第一台雷达的USB信息：",[26,124926,124928],{"className":118627,"code":124927,"language":118629,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[33,124929,124930,124950],{"__ignoreMap":31},[36,124931,124932,124935,124937,124940,124943,124945,124947],{"class":38,"line":39},[36,124933,124934],{"class":46},"udevadm",[36,124936,71152],{"class":110},[36,124938,124939],{"class":73}," --attribute-walk",[36,124941,124942],{"class":73}," --name=\u002Fdev\u002FttyUSB0",[36,124944,26440],{"class":42},[36,124946,31567],{"class":46},[36,124948,124949],{"class":110}," KERNELS\n",[36,124951,124952,124954,124956,124958,124961,124963,124965],{"class":38,"line":54},[36,124953,124934],{"class":46},[36,124955,71152],{"class":110},[36,124957,124939],{"class":73},[36,124959,124960],{"class":73}," --name=\u002Fdev\u002FttyACM0",[36,124962,26440],{"class":42},[36,124964,31567],{"class":46},[36,124966,124949],{"class":110},[19,124968,124969],{},[2992,124970],{"alt":31,"src":124971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124973,124974],{},"调用如下指令查看第二台雷达的USB信息：",[26,124976,124978],{"className":118627,"code":124977,"language":118629,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[33,124979,124980],{"__ignoreMap":31},[36,124981,124982,124984,124986,124988,124991,124993,124995],{"class":38,"line":39},[36,124983,124934],{"class":46},[36,124985,71152],{"class":110},[36,124987,124939],{"class":73},[36,124989,124990],{"class":73}," --name=\u002Fdev\u002FttyUSB1",[36,124992,26440],{"class":42},[36,124994,31567],{"class":46},[36,124996,124949],{"class":110},[19,124998,124999,125000,125003,125004,125007,125008,125011],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[33,125001,125002],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[33,125005,125006],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[887,125009,125010],{},"唯一性标识","”。",[19,125013,124663],{},[19,125015,124666,125016,125018],{},[33,125017,124669],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,125020,125021],{"className":118627,"code":124673,"language":118629,"meta":31,"style":31},[33,125022,125023],{"__ignoreMap":31},[36,125024,125025,125027,125029],{"class":38,"line":39},[36,125026,25907],{"class":46},[36,125028,119914],{"class":110},[36,125030,124684],{"class":110},[26,125032,125034],{"className":118627,"code":125033,"language":118629,"meta":31,"style":31},"KERNEL==\"ttyUSB*\", KERNELS==\"1-1.3:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_front\"\nKERNEL==\"ttyUSB*\", KERNELS==\"1-1.4:1.0\", MODE:=\"0777\", SYMLINK+=\"rplidar_back\"\n",[33,125035,125036,125065],{"__ignoreMap":31},[36,125037,125038,125040,125042,125044,125047,125049,125052,125055,125057,125060,125062],{"class":38,"line":39},[36,125039,124697],{"class":50},[36,125041,70],{"class":42},[36,125043,124702],{"class":110},[36,125045,125046],{"class":50}," KERNELS",[36,125048,70],{"class":42},[36,125050,125051],{"class":110},"=\"1-1.3:1.0\",",[36,125053,125054],{"class":46}," MODE:",[36,125056,70],{"class":110},[36,125058,125059],{"class":46},"\"0777\"",[36,125061,2045],{"class":46},[36,125063,125064],{"class":110}," SYMLINK+=\"rplidar_front\"\n",[36,125066,125067,125069,125071,125073,125075,125077,125080,125082,125084,125086,125088],{"class":38,"line":54},[36,125068,124697],{"class":50},[36,125070,70],{"class":42},[36,125072,124702],{"class":110},[36,125074,125046],{"class":50},[36,125076,70],{"class":42},[36,125078,125079],{"class":110},"=\"1-1.4:1.0\",",[36,125081,125054],{"class":46},[36,125083,70],{"class":110},[36,125085,125059],{"class":46},[36,125087,2045],{"class":46},[36,125089,125090],{"class":110}," SYMLINK+=\"rplidar_back\"\n",[19,125092,124782],{},[19,125094,124785],{},[26,125096,125097],{"className":118627,"code":124788,"language":118629,"meta":31,"style":31},[33,125098,125099,125103,125113,125123,125127,125131,125141],{"__ignoreMap":31},[36,125100,125101],{"class":38,"line":39},[36,125102,124795],{"class":124},[36,125104,125105,125107,125109,125111],{"class":38,"line":54},[36,125106,25907],{"class":46},[36,125108,121379],{"class":110},[36,125110,124804],{"class":110},[36,125112,124807],{"class":110},[36,125114,125115,125117,125119,125121],{"class":38,"line":61},[36,125116,25907],{"class":46},[36,125118,121379],{"class":110},[36,125120,124804],{"class":110},[36,125122,124818],{"class":110},[36,125124,125125],{"class":38,"line":80},[36,125126,58],{"emptyLinePlaceholder":57},[36,125128,125129],{"class":38,"line":96},[36,125130,124827],{"class":124},[36,125132,125133,125135,125137,125139],{"class":38,"line":101},[36,125134,25907],{"class":46},[36,125136,124834],{"class":110},[36,125138,124837],{"class":110},[36,125140,124840],{"class":73},[36,125142,125143,125145,125147],{"class":38,"line":128},[36,125144,25907],{"class":46},[36,125146,124834],{"class":110},[36,125148,124849],{"class":110},[19,125150,124852],{},[19,125152,124855],{},[19,125154,124858,125155,125158],{},[33,125156,125157],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125160,125161],{},[2992,125162],{"alt":31,"src":125163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125165,125166],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125168,125169,125171],{},[887,125170,119295],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[1645,125173,125175],{"id":125174},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125177,125178],{},"（1）.查看所连接的主机USB接口的信息",[26,125180,125182],{"className":118627,"code":125181,"language":118629,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[33,125183,125184,125214],{"__ignoreMap":31},[36,125185,125186,125188,125190,125193,125195,125197,125199,125201,125204,125207,125209,125212],{"class":38,"line":39},[36,125187,124934],{"class":46},[36,125189,71152],{"class":110},[36,125191,125192],{"class":73}," -a",[36,125194,30547],{"class":73},[36,125196,29753],{"class":50},[36,125198,124934],{"class":46},[36,125200,71152],{"class":110},[36,125202,125203],{"class":73}," -q",[36,125205,125206],{"class":110}," path",[36,125208,26446],{"class":73},[36,125210,125211],{"class":110}," \u002Fdev\u002FttyACM0",[36,125213,1680],{"class":50},[36,125215,125216,125218,125220,125222,125224,125226,125228,125230,125232,125234,125236,125239],{"class":38,"line":54},[36,125217,124934],{"class":46},[36,125219,71152],{"class":110},[36,125221,125192],{"class":73},[36,125223,30547],{"class":73},[36,125225,29753],{"class":50},[36,125227,124934],{"class":46},[36,125229,71152],{"class":110},[36,125231,125203],{"class":73},[36,125233,125206],{"class":110},[36,125235,26446],{"class":73},[36,125237,125238],{"class":110}," \u002Fdev\u002FttyUSB0",[36,125240,1680],{"class":50},[19,125242,125243],{},[2992,125244],{"alt":31,"src":125245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125247,125248],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125250,124663],{},[19,125252,124666,125253,125018],{},[33,125254,124669],{},[26,125256,125257],{"className":118627,"code":124673,"language":118629,"meta":31,"style":31},[33,125258,125259],{"__ignoreMap":31},[36,125260,125261,125263,125265],{"class":38,"line":39},[36,125262,25907],{"class":46},[36,125264,119914],{"class":110},[36,125266,124684],{"class":110},[26,125268,125270],{"className":118627,"code":125269,"language":118629,"meta":31,"style":31},"KERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0001\", MODE:=\"0777\", SYMLINK+=\"ttyACM_MCU\"\nKERNEL==\"ttyACM*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"55d4\", ATTRS{serial}==\"0002\", MODE:=\"0777\", SYMLINK+=\"ttyACM_Lidar\"\nKERNEL==\"ttyUSB*\", ATTRS{idVendor}==\"1a86\", ATTRS{idProduct}==\"7523\", MODE:=\"0777\", SYMLINK+=\"ttyUSB_IMU\"\n",[33,125271,125272,125300,125326],{"__ignoreMap":31},[36,125273,125274,125276,125278,125281,125283,125285,125287,125289,125292,125295,125297],{"class":38,"line":39},[36,125275,124697],{"class":50},[36,125277,70],{"class":42},[36,125279,125280],{"class":110},"=\"ttyACM*\",",[36,125282,124705],{"class":46},[36,125284,124708],{"class":110},[36,125286,124737],{"class":46},[36,125288,2045],{"class":46},[36,125290,125291],{"class":110}," ATTRS{idProduct}==\"55d4\",",[36,125293,125294],{"class":110}," ATTRS{serial}==\"0001\",",[36,125296,124719],{"class":110},[36,125298,125299],{"class":110}," SYMLINK+=\"ttyACM_MCU\"\n",[36,125301,125302,125304,125306,125308,125310,125312,125314,125316,125318,125321,125323],{"class":38,"line":54},[36,125303,124697],{"class":50},[36,125305,70],{"class":42},[36,125307,125280],{"class":110},[36,125309,124705],{"class":46},[36,125311,124708],{"class":110},[36,125313,124737],{"class":46},[36,125315,2045],{"class":46},[36,125317,125291],{"class":110},[36,125319,125320],{"class":110}," ATTRS{serial}==\"0002\",",[36,125322,124719],{"class":110},[36,125324,125325],{"class":110}," SYMLINK+=\"ttyACM_Lidar\"\n",[36,125327,125328,125330,125332,125334,125336,125338,125340,125342,125344,125346],{"class":38,"line":61},[36,125329,124697],{"class":50},[36,125331,70],{"class":42},[36,125333,124702],{"class":110},[36,125335,124705],{"class":46},[36,125337,124708],{"class":110},[36,125339,124737],{"class":46},[36,125341,2045],{"class":46},[36,125343,124742],{"class":110},[36,125345,124719],{"class":110},[36,125347,125348],{"class":110}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125350,124782],{},[19,125352,124785],{},[26,125354,125355],{"className":118627,"code":124788,"language":118629,"meta":31,"style":31},[33,125356,125357,125361,125371,125381,125385,125389,125399],{"__ignoreMap":31},[36,125358,125359],{"class":38,"line":39},[36,125360,124795],{"class":124},[36,125362,125363,125365,125367,125369],{"class":38,"line":54},[36,125364,25907],{"class":46},[36,125366,121379],{"class":110},[36,125368,124804],{"class":110},[36,125370,124807],{"class":110},[36,125372,125373,125375,125377,125379],{"class":38,"line":61},[36,125374,25907],{"class":46},[36,125376,121379],{"class":110},[36,125378,124804],{"class":110},[36,125380,124818],{"class":110},[36,125382,125383],{"class":38,"line":80},[36,125384,58],{"emptyLinePlaceholder":57},[36,125386,125387],{"class":38,"line":96},[36,125388,124827],{"class":124},[36,125390,125391,125393,125395,125397],{"class":38,"line":101},[36,125392,25907],{"class":46},[36,125394,124834],{"class":110},[36,125396,124837],{"class":110},[36,125398,124840],{"class":73},[36,125400,125401,125403,125405],{"class":38,"line":128},[36,125402,25907],{"class":46},[36,125404,124834],{"class":110},[36,125406,124849],{"class":110},[19,125408,125409,125410],{},"再重新插拔设备即可，或者 ",[887,125411,125412],{},"直接重启系统。",[19,125414,124855],{},[19,125416,124858,125417,125158],{},[33,125418,125157],{},[19,125420,125421],{},[2992,125422],{"alt":31,"src":125423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125425,125166],{},[19,125427,125428,125430],{},[887,125429,119295],{}," 一些设备可能没有串口号等。",[1645,125432,125434],{"id":125433},"_744-其他注意事项","7.4.4 其他注意事项",[19,125436,125437,125438,125440,125441,125444,125445,19739,125448,125451,125452,125454],{},"并非所有的USB设备端口号都是",[33,125439,124892],{},"的格式，比如Arduino的端口号可能是",[33,125442,125443],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[33,125446,125447],{},"videon",[33,125449,125450],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[33,125453,125447],{},"端口，绑定时需要关联的也是该接口。",[19,125456,125457,125458,125461,125462,125465,125466,125468,125469,125472,125473,125476,125477,125480,125481,125480,125484,125480,125487,29716],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[33,125459,125460],{},"KERNEL==\"ttyUSB*\"","修改为",[33,125463,125464],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[33,125467,125460],{},"修改为类似于",[33,125470,125471],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[33,125474,125475],{},"video[0,2,4,6]","表示可以绑定的端口为",[33,125478,125479],{},"video0","或",[33,125482,125483],{},"video2",[33,125485,125486],{},"video4",[33,125488,125489],{},"video6",[14,125491,125493],{"id":125492},"_75-挂载内网网页","7.5 挂载内网网页",[19,125495,125496],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125498,125499],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125501,125502],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125504,125505,125506],{},"Termux 下载地址（F-Droid）：",[1906,125507,125508],{"href":125508,"rel":125509},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25195],[19,125511,125512],{},"首先打开app后，先更新软件缓存：",[26,125514,125516],{"className":118627,"code":125515,"language":118629,"meta":31,"style":31},"pkg update\n",[33,125517,125518],{"__ignoreMap":31},[36,125519,125520,125523],{"class":38,"line":39},[36,125521,125522],{"class":46},"pkg",[36,125524,27573],{"class":110},[19,125526,125527],{},"然后换源",[26,125529,125531],{"className":118627,"code":125530,"language":118629,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[33,125532,125533],{"__ignoreMap":31},[36,125534,125535,125537,125540],{"class":38,"line":39},[36,125536,124405],{"class":46},[36,125538,125539],{"class":50}," $PREFIX",[36,125541,125542],{"class":110},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125544,125545],{},"将该文件内容替换为下面：",[26,125547,125549],{"className":118627,"code":125548,"language":118629,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[33,125550,125551],{"__ignoreMap":31},[36,125552,125553,125556,125559,125562],{"class":38,"line":39},[36,125554,125555],{"class":46},"deb",[36,125557,125558],{"class":110}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[36,125560,125561],{"class":110}," stable",[36,125563,125564],{"class":110}," main\n",[2674,125566,125567,125594],{},[259,125568,125569,125570,125572,125573],{},"如果你使用的是",[33,125571,124405],{},"编辑器：",[2674,125574,125575,125582,125588],{},[259,125576,125577,125578,125581],{},"按 ",[33,125579,125580],{},"Ctrl+O"," 保存文件。",[259,125583,125577,125584,125587],{},[33,125585,125586],{},"Enter"," 确认文件名。",[259,125589,125577,125590,125593],{},[33,125591,125592],{},"Ctrl+X"," 退出编辑器。",[259,125595,125569,125596,125572,125599],{},[33,125597,125598],{},"vim",[2674,125600,125601,125607],{},[259,125602,125577,125603,125606],{},[33,125604,125605],{},"Esc"," 退出编辑模式。",[259,125608,125609,125610,125612],{},"输入 ",[33,125611,120552],{}," 保存并退出。",[19,125614,125615],{},"接下来重新更新软件源：",[26,125617,125619],{"className":118627,"code":125618,"language":118629,"meta":31,"style":31},"pkg update && pkg upgrade\n",[33,125620,125621],{"__ignoreMap":31},[36,125622,125623,125625,125627,125629,125631],{"class":38,"line":39},[36,125624,125522],{"class":46},[36,125626,118678],{"class":110},[36,125628,27521],{"class":50},[36,125630,125522],{"class":46},[36,125632,118664],{"class":110},[19,125634,125635],{},"安装python：",[26,125637,125639],{"className":118627,"code":125638,"language":118629,"meta":31,"style":31},"pkg install python\n",[33,125640,125641],{"__ignoreMap":31},[36,125642,125643,125645,125647],{"class":38,"line":39},[36,125644,125522],{"class":46},[36,125646,25164],{"class":110},[36,125648,125649],{"class":110}," python\n",[19,125651,125652,27804],{},[887,125653,125654],{},"通过Termux访问设备存储",[19,125656,125657],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,125659,125661],{"className":118627,"code":125660,"language":118629,"meta":31,"style":31},"termux-setup-storage\n",[33,125662,125663],{"__ignoreMap":31},[36,125664,125665],{"class":38,"line":39},[36,125666,125660],{"class":46},[256,125668,125669],{},[259,125670,125671,27804,125674],{},[887,125672,125673],{},"进入HTML文件所在的目录",[256,125675,125676],{},[259,125677,125678,125679,125681],{},"使用",[33,125680,102607],{},"命令进入HTML文件所在的目录：",[26,125683,125685],{"className":118627,"code":125684,"language":118629,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[33,125686,125687],{"__ignoreMap":31},[36,125688,125689,125691],{"class":38,"line":39},[36,125690,102607],{"class":73},[36,125692,125693],{"class":110}," ~\u002Fyour_html_folder\n",[256,125695,125696],{"start":54},[259,125697,125698,27804,125701,125706,125723],{},[887,125699,125700],{},"启动Python HTTP服务器",[256,125702,125703],{},[259,125704,125705],{},"运行以下命令启动一个简单的HTTP服务器：",[26,125707,125709],{"className":118627,"code":125708,"language":118629,"meta":31,"style":31},"python -m http.server 8000\n",[33,125710,125711],{"__ignoreMap":31},[36,125712,125713,125715,125717,125720],{"class":38,"line":39},[36,125714,31711],{"class":46},[36,125716,102213],{"class":73},[36,125718,125719],{"class":110}," http.server",[36,125721,125722],{"class":73}," 8000\n",[256,125724,125725],{"start":61},[259,125726,125727,125728,125731],{},"这会在端口",[33,125729,125730],{},"8000","上启动一个Web服务器。",[2674,125733,125734],{},[259,125735,125736],{},"启动服务器后，Termux会显示日志信息，例如：",[26,125738,125740],{"className":122147,"code":125739,"language":122149,"meta":122150,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[33,125741,125742],{"__ignoreMap":31},[36,125743,125744],{"class":38,"line":39},[36,125745,125739],{},[2674,125747,125748],{},[259,125749,125750],{},"这表示服务器已成功启动。",[19,125752,125753],{},[887,125754,125755],{},"在浏览器中访问HTML文件",[256,125757,125758],{},[259,125759,125760,27804,125763,125768],{},[887,125761,125762],{},"在同一设备上访问",[256,125764,125765],{},[259,125766,125767],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,125769,125772],{"className":125770,"code":125771,"language":72995,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[33,125773,125774],{"__ignoreMap":31},[36,125775,125776,125779],{"class":38,"line":39},[36,125777,125778],{"class":50},"http:",[36,125780,125781],{"class":124},"\u002F\u002Flocalhost:8000\n",[2674,125783,125784],{},[259,125785,125786,125787,125790],{},"如果HTML文件中有",[33,125788,125789],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125792,125794],{"id":125793},"_76-linux重点知识","7.6 Linux重点知识",[1645,125796,125798],{"id":125797},"_761-关于点的说明","7.6.1 关于点的说明",[19,125800,125801],{},[2992,125802],{"alt":31,"src":125803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125805,125806],{},"一点本目录，两点上目录",[1645,125808,125810],{"id":125809},"_762-目录","7.6.2 目录",[23327,125812,125814],{"id":125813},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125816,125817],{},[887,125818,125819],{},"\u002Fboot:",[19,125821,125822],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125824,125825],{},[887,125826,125827],{},"\u002Fetc:",[19,125829,125830],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125832,125833],{},[887,125834,125835],{},"\u002Flib：",[19,125837,125838],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125840,125841],{},[887,125842,125843],{},"\u002Fsys:",[19,125845,125846],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23327,125848,125850],{"id":125849},"_7622-指令集合","7.6.2.2 指令集合",[19,125852,125853],{},[887,125854,125855],{},"\u002Fbin:",[19,125857,125858],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125860,125861],{},[887,125862,125863],{},"\u002Fsbin:",[19,125865,125866],{},"只有系统管理员才能使用的程序和指令",[23327,125868,125870],{"id":125869},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125872,125873],{},[887,125874,125875],{},"\u002Fdev:",[19,125877,125878],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125880,125881],{},[887,125882,125883],{},"\u002Fmedia:",[19,125885,125886],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125888,125889],{},[887,125890,125891],{},"\u002Fmnt:",[19,125893,125894],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23327,125896,125898],{"id":125897},"_7624-临时文件","7.6.2.4 临时文件",[19,125900,125901],{},[887,125902,125903],{},"\u002Frun:",[19,125905,125906],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125908,125909],{},[887,125910,125911],{},"\u002Flost+found:",[19,125913,125914],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125916,125917],{},[887,125918,125919],{},"\u002Ftmp:",[19,125921,125922],{},"这个目录是用来存放一些临时文件的",[23327,125924,125926],{"id":125925},"_7625-账户","7.6.2.5 账户",[19,125928,125929],{},[887,125930,125931],{},"\u002Froot：",[19,125933,125934],{},"系统管理员的用户主目录",[19,125936,125937,27804],{},[887,125938,125939],{},"\u002Fhome",[19,125941,125942],{},"用户的主目录，以用户的账号命名的",[19,125944,125945,27804],{},[887,125946,125947],{},"\u002Fusr",[19,125949,125950],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125952,125953],{},[887,125954,125955],{},"\u002Fusr\u002Fbin：",[19,125957,125958],{},"系统用户使用的应用程序与指令",[19,125960,125961],{},[887,125962,125963],{},"\u002Fusr\u002Fsbin：",[19,125965,125966],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125968,125969],{},[887,125970,125971],{},"\u002Fusr\u002Fsrc：",[19,125973,125974],{},"内核源代码默认的放置目录",[23327,125976,125978],{"id":125977},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125980,125981],{},[887,125982,125983],{},"\u002Fvar：",[19,125985,125986],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125988,125989],{},[887,125990,125991],{},"\u002Fproc:",[19,125993,125994,125995,125998],{},"管理 ",[887,125996,125997],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23327,126000,126002],{"id":126001},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126004,126005],{},[887,126006,126007],{},"\u002Fopt:",[19,126009,126010],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126012,126013],{},[887,126014,126015],{},"\u002Fsrv:",[19,126017,126018],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[1645,126020,126022],{"id":126021},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126024,126025],{},[2992,126026],{"alt":31,"src":126027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126029,126030],{},"windows-->linux:",[19,126032,126033],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126035,126036],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126038,126039],{},"linux传输文件到windows",[19,126041,126042],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[1645,126044,126046],{"id":126045},"_764-易忘知识","7.6.4 易忘知识",[19,126048,126049],{},"操作系统内核查看",[26,126051,126052],{"className":118627,"code":122621,"language":118629,"meta":31,"style":31},[33,126053,126054],{"__ignoreMap":31},[36,126055,126056,126058],{"class":38,"line":39},[36,126057,71535],{"class":46},[36,126059,122630],{"class":73},[19,126061,126062],{},[2992,126063],{"alt":31,"src":126064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126066,126067],{},[2992,126068],{"alt":31,"src":126069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,126071,126073],{"className":118627,"code":126072,"language":118629,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[33,126074,126075,126087],{"__ignoreMap":31},[36,126076,126077,126079,126082,126085],{"class":38,"line":39},[36,126078,122838],{"class":46},[36,126080,126081],{"class":110}," mvtest",[36,126083,126084],{"class":110}," mvtest2",[36,126086,4169],{"class":50},[36,126088,126089],{"class":38,"line":54},[36,126090,126091],{"class":46},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126093,126094],{},[2992,126095],{"alt":31,"src":126096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126098,126099],{},[2992,126100],{"alt":31,"src":126101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126103,126104,126105,126108],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[33,126106,126107],{},"du -a"," 可以快速查看磁盘使用细节。",[1645,126110,126112],{"id":126111},"_765-vim","7.6.5 Vim",[19,126114,126115],{},[2992,126116],{"alt":31,"src":126117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126119,126120],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126122,126123],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126125,126126],{},[887,126127,126128],{},"1.命令模式：",[19,126130,126131],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126133,126134],{},"x 删除当前光标所在处的字符",[19,126136,126137],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126139,126140],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126142,126143],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126145,126146],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126148,126149],{},"dd 剪切当前行",[19,126151,126152],{},"yy 复制当前行",[19,126154,126155],{},"p 粘贴剪贴板内容到光标下方",[19,126157,126158],{},"P 粘贴剪贴板内容到光标上方",[19,126160,126161],{},"u 撤销上一次操作",[19,126163,126164],{},"ctrl+r 重做上一次操作",[19,126166,126167,126169],{},[2462,126168],{}," 保存文件",[19,126171,126172,126174],{},[2312,126173],{}," 退出Vim编辑器",[19,126176,126177,126179],{},[2312,126178],{},"! 强制退出Vim编辑器，不保存修改",[19,126181,126182],{},[887,126183,126184],{},"2.输入模式：",[19,126186,126187],{},[2992,126188],{"alt":31,"src":126189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126191,126192],{},[887,126193,126194],{},"3.底线命令模式：",[19,126196,126197],{},[2992,126198],{"alt":31,"src":126199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126201,126202],{},"按下esc可以退出底线命令模式",[1645,126204,126206],{"id":126205},"_766-apt","7.6.6 apt",[19,126208,126209],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[1645,126211,126213],{"id":126212},"_767-home与root的区别","7.6.7 home与root的区别",[19,126215,126216],{},[2992,126217],{"alt":31,"src":126218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126220,126221],{},[2992,126222],{"alt":31,"src":126223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126225,126226],{},[2992,126227],{"alt":31,"src":126228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126230,126231],{},[2992,126232],{"alt":31,"src":126233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[1645,126235,126237],{"id":126236},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126239,126240],{},[1906,126241,126242],{"href":126242,"rel":126243},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25195],[256,126245,126246,126249],{},[259,126247,126248],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[259,126250,126251],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126253,126254],{},[2992,126255],{"alt":31,"src":126256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126258,126259],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126261,126262],{},[2992,126263],{"alt":31,"src":126264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,126266,126268],{"className":122147,"code":126267,"language":122149,"meta":122150,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[33,126269,126270,126275],{"__ignoreMap":31},[36,126271,126272],{"class":38,"line":39},[36,126273,126274],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[36,126276,126277],{"class":38,"line":54},[36,126278,126279],{},".\u002Fpycharm.sh\n",[19,126281,126282],{},"3️⃣创建.desktop文件",[19,126284,126285],{},[887,126286,126287],{},"原理：",[2674,126289,126290,126300],{},[259,126291,126292,126293,126299],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[887,126294,126295,126298],{},[33,126296,126297],{},".desktop"," 文件"," 来识别应用。",[259,126301,126302,126304,126305],{},[33,126303,126297],{}," 文件相当于一个“应用注册表”，告诉系统：",[2674,126306,126307,126310,126313,126316,126319],{},[259,126308,126309],{},"应用名字（Name）",[259,126311,126312],{},"图标（Icon）",[259,126314,126315],{},"执行命令（Exec）",[259,126317,126318],{},"分类（Categories）",[259,126320,126321],{},"是否需要终端（Terminal）",[26,126323,126325],{"className":122147,"code":126324,"language":122149,"meta":122150,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[33,126326,126327,126332],{"__ignoreMap":31},[36,126328,126329],{"class":38,"line":39},[36,126330,126331],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[36,126333,126334],{"class":38,"line":54},[36,126335,126336],{},"nano pycharm.desktop\n",[19,126338,126339],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,126341,126343],{"className":122147,"code":126342,"language":122149,"meta":122150,"style":31},"[Desktop Entry]\nVersion=1.0\nType=Application\nName=PyCharm\nIcon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\nExec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\nComment=JetBrains PyCharm IDE\nCategories=Development;IDE;\nTerminal=false\nStartupWMClass=jetbrains-pycharm\n",[33,126344,126345,126350,126355,126360,126365,126370,126375,126380,126385,126390],{"__ignoreMap":31},[36,126346,126347],{"class":38,"line":39},[36,126348,126349],{},"[Desktop Entry]\n",[36,126351,126352],{"class":38,"line":54},[36,126353,126354],{},"Version=1.0\n",[36,126356,126357],{"class":38,"line":61},[36,126358,126359],{},"Type=Application\n",[36,126361,126362],{"class":38,"line":80},[36,126363,126364],{},"Name=PyCharm\n",[36,126366,126367],{"class":38,"line":96},[36,126368,126369],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[36,126371,126372],{"class":38,"line":101},[36,126373,126374],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[36,126376,126377],{"class":38,"line":128},[36,126378,126379],{},"Comment=JetBrains PyCharm IDE\n",[36,126381,126382],{"class":38,"line":149},[36,126383,126384],{},"Categories=Development;IDE;\n",[36,126386,126387],{"class":38,"line":154},[36,126388,126389],{},"Terminal=false\n",[36,126391,126392],{"class":38,"line":167},[36,126393,126394],{},"StartupWMClass=jetbrains-pycharm\n",[2674,126396,126397,126403,126409,126415],{},[259,126398,126399,126402],{},[33,126400,126401],{},"Exec"," → 点击图标时执行的命令",[259,126404,126405,126408],{},[33,126406,126407],{},"Icon"," → 显示在菜单和桌面上的图标",[259,126410,126411,126414],{},[33,126412,126413],{},"Terminal=false"," → 不打开终端",[259,126416,126417,126420],{},[33,126418,126419],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126422,126423,126424],"blockquote",{},[19,126425,126426,126427,126429,126430],{},"可以理解成 ",[33,126428,126297],{}," 文件是 Linux 的 ",[887,126431,126432],{},"快捷方式配置文件",[19,126434,126435],{},"4️⃣设置可执行权限",[26,126437,126439],{"className":122147,"code":126438,"language":122149,"meta":122150,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[33,126440,126441],{"__ignoreMap":31},[36,126442,126443],{"class":38,"line":39},[36,126444,126438],{},[19,126446,126447],{},"5️⃣桌面图标启动的话如下：",[26,126449,126451],{"className":122147,"code":126450,"language":122149,"meta":122150,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[33,126452,126453,126458],{"__ignoreMap":31},[36,126454,126455],{"class":38,"line":39},[36,126456,126457],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[36,126459,126460],{"class":38,"line":54},[36,126461,126462],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[256,126464,126465],{"start":61},[259,126466,126467],{},"下载Appimage文件实现软件的安装",[19,126469,126470],{},"1️⃣先下载appimage",[19,126472,126473],{},[1906,126474,126475],{"href":126475,"rel":126476},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25195],[19,126478,126479],{},[2992,126480],{"alt":31,"src":126481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126483,126484],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126486,126487],{},[2992,126488],{"alt":31,"src":126489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126491,126492],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126494,126495],{},[2992,126496],{"alt":31,"src":126497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126499,126500],{},[2992,126501],{"alt":31,"src":126502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126504,126505,126506,126509],{},"3️⃣给他们放在",[33,126507,126508],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126511,126512],{},"4️⃣给软件执行权限",[26,126514,126516],{"className":122147,"code":126515,"language":122149,"meta":122150,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[33,126517,126518,126523],{"__ignoreMap":31},[36,126519,126520],{"class":38,"line":39},[36,126521,126522],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[36,126524,126525],{"class":38,"line":54},[36,126526,126527],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126529,126530],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,126532,126534],{"className":118627,"code":126533,"language":118629,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[33,126535,126536,126543,126550,126556],{"__ignoreMap":31},[36,126537,126538,126540],{"class":38,"line":39},[36,126539,102607],{"class":73},[36,126541,126542],{"class":110}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[36,126544,126545,126547],{"class":38,"line":54},[36,126546,102614],{"class":46},[36,126548,126549],{"class":110}," .\u002Fqqmusic.desktop\n",[36,126551,126552,126554],{"class":38,"line":61},[36,126553,125598],{"class":46},[36,126555,126549],{"class":110},[36,126557,126558,126560,126562,126564],{"class":38,"line":80},[36,126559,25907],{"class":46},[36,126561,25910],{"class":110},[36,126563,124464],{"class":110},[36,126565,126549],{"class":110},[19,126567,126568,126570],{},[33,126569,102614],{},"：一个 Linux 命令，主要功能是：",[2674,126572,126573,126576],{},[259,126574,126575],{},"如果文件不存在，就创建一个新的空文件",[259,126577,126578],{},"如果文件已存在，就更新该文件的最后修改时间",[26,126580,126582],{"className":122147,"code":126581,"language":122149,"meta":122150,"style":31},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[33,126583,126584,126588,126593,126598,126603,126607,126612],{"__ignoreMap":31},[36,126585,126586],{"class":38,"line":39},[36,126587,126349],{},[36,126589,126590],{"class":38,"line":54},[36,126591,126592],{},"Name=QQ音乐\n",[36,126594,126595],{"class":38,"line":61},[36,126596,126597],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[36,126599,126600],{"class":38,"line":80},[36,126601,126602],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[36,126604,126605],{"class":38,"line":96},[36,126606,126359],{},[36,126608,126609],{"class":38,"line":101},[36,126610,126611],{},"Categories=Audio;Music;Player;\n",[36,126613,126614],{"class":38,"line":128},[36,126615,126616],{},"Comment=QQ Music Client for Linux\n",[19,126618,126619],{},"将文件复制进去",[19,126621,126622],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126624,126625],{},[2992,126626],{"alt":31,"src":126627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126629,126630],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126632,126633],{},[2992,126634],{"alt":31,"src":126635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126637,126638,126639,126642,126643,126646],{},"如果你用的不是KDE，那么也可以直接修改",[33,126640,126641],{},"qqmuic.desktop","：在exec的末尾加上",[33,126644,126645],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,126648,126650],{"className":122147,"code":126649,"language":122149,"meta":122150,"style":31},"[Desktop Entry]\nName=QQ音乐\nExec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\nIcon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\nType=Application\nCategories=Audio;Music;Player;\nComment=QQ Music Client for Linux\n",[33,126651,126652,126656,126660,126665,126669,126673,126677],{"__ignoreMap":31},[36,126653,126654],{"class":38,"line":39},[36,126655,126349],{},[36,126657,126658],{"class":38,"line":54},[36,126659,126592],{},[36,126661,126662],{"class":38,"line":61},[36,126663,126664],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[36,126666,126667],{"class":38,"line":80},[36,126668,126602],{},[36,126670,126671],{"class":38,"line":96},[36,126672,126359],{},[36,126674,126675],{"class":38,"line":101},[36,126676,126611],{},[36,126678,126679],{"class":38,"line":128},[36,126680,126616],{},[19,126682,126683],{},[2992,126684],{"alt":31,"src":126685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126687,126688],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,126690,126692],{"className":122147,"code":126691,"language":122149,"meta":122150,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[33,126693,126694],{"__ignoreMap":31},[36,126695,126696],{"class":38,"line":39},[36,126697,126691],{},[256,126699,126700],{"start":80},[259,126701,126702],{},"去Flathub上安装软件",[19,126704,126705],{},[1906,126706,126707],{"href":126707,"rel":126708},"https:\u002F\u002Fflathub.org\u002F",[25195],[19,126710,126711],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126713,126714],{},[2992,126715],{"alt":31,"src":126716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,126718,126720],{"className":122147,"code":126719,"language":122149,"meta":122150,"style":31},"flatpak install flathub com.obsproject.Studio\n",[33,126721,126722],{"__ignoreMap":31},[36,126723,126724],{"class":38,"line":39},[36,126725,126719],{},[19,126727,126728],{},[2992,126729],{"alt":31,"src":126730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126732,126733],{},"2️⃣运行软件",[19,126735,126736],{},"a.官方方式：",[19,126738,126739],{},[2992,126740],{"alt":31,"src":126741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,126743,126744],{"className":122147,"code":126719,"language":122149,"meta":122150,"style":31},[33,126745,126746],{"__ignoreMap":31},[36,126747,126748],{"class":38,"line":39},[36,126749,126719],{},[19,126751,126752],{},"b.当普通软件运行：",[19,126754,126755],{},[2992,126756],{"alt":31,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126759,126760],{},[2992,126761],{"alt":31,"src":126762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1592,126764,126765],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":126767},[126768,126769,126774,126775,126781,126782],{"id":123500,"depth":54,"text":123501},{"id":123842,"depth":54,"text":123843,"children":126770},[126771,126772,126773],{"id":123846,"depth":61,"text":123847},{"id":123913,"depth":61,"text":123914},{"id":124174,"depth":61,"text":124175},{"id":124327,"depth":54,"text":124328},{"id":124565,"depth":54,"text":124566,"children":126776},[126777,126778,126779,126780],{"id":124617,"depth":61,"text":124618},{"id":124903,"depth":61,"text":124904},{"id":125174,"depth":61,"text":125175},{"id":125433,"depth":61,"text":125434},{"id":125492,"depth":54,"text":125493},{"id":125793,"depth":54,"text":125794,"children":126783},[126784,126785,126786,126787,126788,126789,126790,126791],{"id":125797,"depth":61,"text":125798},{"id":125809,"depth":61,"text":125810},{"id":126021,"depth":61,"text":126022},{"id":126045,"depth":61,"text":126046},{"id":126111,"depth":61,"text":126112},{"id":126205,"depth":61,"text":126206},{"id":126212,"depth":61,"text":126213},{"id":126236,"depth":61,"text":126237},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123492,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126798,"title":126799,"body":126800,"description":24706,"extension":1603,"meta":126804,"navigation":57,"path":126805,"seo":126806,"stem":126807,"__hash__":126808},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126801,"toc":126802},[],{"title":31,"searchDepth":54,"depth":54,"links":126803},[],{"category":31594},"\u002Fwiki\u002F2025-01-27-linux",{"title":126799,"description":24706},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126810,"title":126811,"body":126812,"description":126816,"extension":1603,"meta":127207,"navigation":57,"path":127208,"seo":127209,"stem":127210,"__hash__":127211},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126813,"toc":127205},[126814,126817,126821,126838,126841,126894,126898,126900,126940,126949,126953,126956,127197,127202],[19,126815,126816],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126818,126820],{"id":126819},"_1ubuntu环境配置","1.Ubuntu环境配置",[256,126822,126823,126826,126829,126832,126835],{},[259,126824,126825],{},"ubuntu环境换源",[259,126827,126828],{},"安装cuda",[259,126830,126831],{},"安装miniconda",[259,126833,126834],{},"安装pytorch",[259,126836,126837],{},"安装genesis",[19,126839,126840],{},"参考链接：",[26,126842,126844],{"className":25152,"code":126843,"language":25154,"meta":31,"style":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[33,126845,126846],{"__ignoreMap":31},[36,126847,126848,126851,126854,126857,126859,126862,126865,126867,126870,126873,126875,126878,126881,126883,126886,126889,126891],{"class":38,"line":39},[36,126849,126850],{"class":46},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[36,126852,126853],{"class":110},"=blogdetail",[36,126855,126856],{"class":50},"&sharetype",[36,126858,70],{"class":42},[36,126860,126861],{"class":110},"blogdetail",[36,126863,126864],{"class":50},"&sharerId",[36,126866,70],{"class":42},[36,126868,126869],{"class":110},"144728092",[36,126871,126872],{"class":50},"&sharerefer",[36,126874,70],{"class":42},[36,126876,126877],{"class":110},"PC",[36,126879,126880],{"class":50},"&sharesource",[36,126882,70],{"class":42},[36,126884,126885],{"class":110},"qq_69379513",[36,126887,126888],{"class":50},"&sharefrom",[36,126890,70],{"class":42},[36,126892,126893],{"class":110},"from_link\n",[10,126895,126897],{"id":126896},"_2genesis-报错issue","2.Genesis 报错issue",[19,126899,126840],{},[26,126901,126902],{"className":25152,"code":126843,"language":25154,"meta":31,"style":31},[33,126903,126904],{"__ignoreMap":31},[36,126905,126906,126908,126910,126912,126914,126916,126918,126920,126922,126924,126926,126928,126930,126932,126934,126936,126938],{"class":38,"line":39},[36,126907,126850],{"class":46},[36,126909,126853],{"class":110},[36,126911,126856],{"class":50},[36,126913,70],{"class":42},[36,126915,126861],{"class":110},[36,126917,126864],{"class":50},[36,126919,70],{"class":42},[36,126921,126869],{"class":110},[36,126923,126872],{"class":50},[36,126925,70],{"class":42},[36,126927,126877],{"class":110},[36,126929,126880],{"class":50},[36,126931,70],{"class":42},[36,126933,126885],{"class":110},[36,126935,126888],{"class":50},[36,126937,70],{"class":42},[36,126939,126893],{"class":110},[26,126941,126943],{"className":25152,"code":126942,"language":25154,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[33,126944,126945],{"__ignoreMap":31},[36,126946,126947],{"class":38,"line":39},[36,126948,126942],{"class":46},[10,126950,126952],{"id":126951},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126954,126955],{},"hello_robot.py",[26,126957,126959],{"className":31709,"code":126958,"language":31711,"meta":31,"style":31},"import os\nos.environ['PYOPENGL_PLATFORM'] = 'glx'\n\nimport genesis as gs\nfrom pynput import keyboard\n\ngs.init(backend=gs.gpu)\n\nscene = gs.Scene(show_viewer=True)\nplane = scene.add_entity(gs.morphs.Plane())\nfranka = scene.add_entity(\n    gs.morphs.MJCF(file='xml\u002Ffranka_emika_panda\u002Fpanda.xml'),\n)\n\nscene.build()\n\ndef on_press(key):\n    try:\n        if key.char == 'q':\n            return False\n    except AttributeError:\n        pass\n\nlistener = keyboard.Listener(on_press=on_press)\nlistener.start()\n\nwhile listener.running:\n    scene.step()\n",[33,126960,126961,126967,126982,126986,126998,127010,127014,127027,127031,127050,127060,127070,127084,127088,127092,127097,127101,127111,127118,127132,127139,127149,127154,127158,127176,127181,127185,127192],{"__ignoreMap":31},[36,126962,126963,126965],{"class":38,"line":39},[36,126964,31723],{"class":42},[36,126966,46636],{"class":50},[36,126968,126969,126972,126975,126977,126979],{"class":38,"line":54},[36,126970,126971],{"class":50},"os.environ[",[36,126973,126974],{"class":110},"'PYOPENGL_PLATFORM'",[36,126976,5932],{"class":50},[36,126978,70],{"class":42},[36,126980,126981],{"class":110}," 'glx'\n",[36,126983,126984],{"class":38,"line":61},[36,126985,58],{"emptyLinePlaceholder":57},[36,126987,126988,126990,126993,126995],{"class":38,"line":80},[36,126989,31723],{"class":42},[36,126991,126992],{"class":50}," genesis ",[36,126994,32714],{"class":42},[36,126996,126997],{"class":50}," gs\n",[36,126999,127000,127002,127005,127007],{"class":38,"line":96},[36,127001,32068],{"class":42},[36,127003,127004],{"class":50}," pynput ",[36,127006,31723],{"class":42},[36,127008,127009],{"class":50}," keyboard\n",[36,127011,127012],{"class":38,"line":101},[36,127013,58],{"emptyLinePlaceholder":57},[36,127015,127016,127019,127022,127024],{"class":38,"line":128},[36,127017,127018],{"class":50},"gs.init(",[36,127020,127021],{"class":473},"backend",[36,127023,70],{"class":42},[36,127025,127026],{"class":50},"gs.gpu)\n",[36,127028,127029],{"class":38,"line":149},[36,127030,58],{"emptyLinePlaceholder":57},[36,127032,127033,127036,127038,127041,127044,127046,127048],{"class":38,"line":154},[36,127034,127035],{"class":50},"scene ",[36,127037,70],{"class":42},[36,127039,127040],{"class":50}," gs.Scene(",[36,127042,127043],{"class":473},"show_viewer",[36,127045,70],{"class":42},[36,127047,32807],{"class":73},[36,127049,1680],{"class":50},[36,127051,127052,127055,127057],{"class":38,"line":167},[36,127053,127054],{"class":50},"plane ",[36,127056,70],{"class":42},[36,127058,127059],{"class":50}," scene.add_entity(gs.morphs.Plane())\n",[36,127061,127062,127065,127067],{"class":38,"line":172},[36,127063,127064],{"class":50},"franka ",[36,127066,70],{"class":42},[36,127068,127069],{"class":50}," scene.add_entity(\n",[36,127071,127072,127075,127077,127079,127082],{"class":38,"line":192},[36,127073,127074],{"class":50},"    gs.morphs.MJCF(",[36,127076,46685],{"class":473},[36,127078,70],{"class":42},[36,127080,127081],{"class":110},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[36,127083,39378],{"class":50},[36,127085,127086],{"class":38,"line":211},[36,127087,1680],{"class":50},[36,127089,127090],{"class":38,"line":216},[36,127091,58],{"emptyLinePlaceholder":57},[36,127093,127094],{"class":38,"line":231},[36,127095,127096],{"class":50},"scene.build()\n",[36,127098,127099],{"class":38,"line":236},[36,127100,58],{"emptyLinePlaceholder":57},[36,127102,127103,127105,127108],{"class":38,"line":247},[36,127104,33278],{"class":42},[36,127106,127107],{"class":46}," on_press",[36,127109,127110],{"class":50},"(key):\n",[36,127112,127113,127116],{"class":38,"line":637},[36,127114,127115],{"class":42},"    try",[36,127117,5230],{"class":50},[36,127119,127120,127122,127125,127127,127130],{"class":38,"line":646},[36,127121,3999],{"class":42},[36,127123,127124],{"class":50}," key.char ",[36,127126,4441],{"class":42},[36,127128,127129],{"class":110}," 'q'",[36,127131,5230],{"class":50},[36,127133,127134,127136],{"class":38,"line":655},[36,127135,17061],{"class":42},[36,127137,127138],{"class":73}," False\n",[36,127140,127141,127144,127147],{"class":38,"line":660},[36,127142,127143],{"class":42},"    except",[36,127145,127146],{"class":73}," AttributeError",[36,127148,5230],{"class":50},[36,127150,127151],{"class":38,"line":665},[36,127152,127153],{"class":42},"        pass\n",[36,127155,127156],{"class":38,"line":674},[36,127157,58],{"emptyLinePlaceholder":57},[36,127159,127160,127163,127165,127168,127171,127173],{"class":38,"line":679},[36,127161,127162],{"class":50},"listener ",[36,127164,70],{"class":42},[36,127166,127167],{"class":50}," keyboard.Listener(",[36,127169,127170],{"class":473},"on_press",[36,127172,70],{"class":42},[36,127174,127175],{"class":50},"on_press)\n",[36,127177,127178],{"class":38,"line":692},[36,127179,127180],{"class":50},"listener.start()\n",[36,127182,127183],{"class":38,"line":705},[36,127184,58],{"emptyLinePlaceholder":57},[36,127186,127187,127189],{"class":38,"line":710},[36,127188,109994],{"class":42},[36,127190,127191],{"class":50}," listener.running:\n",[36,127193,127194],{"class":38,"line":722},[36,127195,127196],{"class":50},"    scene.step()\n",[19,127198,127199],{},[2992,127200],{"alt":31,"src":127201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1592,127203,127204],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":31,"searchDepth":54,"depth":54,"links":127206},[],{"category":24708},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126811,"description":126816},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127213,"title":127214,"body":127215,"description":24706,"extension":1603,"meta":127230,"navigation":57,"path":127231,"seo":127232,"stem":127233,"__hash__":127234},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127216,"toc":127227},[127217,127220,127224],[10,127218,127214],{"id":127219},"_1-基础知识",[14,127221,127223],{"id":127222},"_11-js的组成","1.1 js的组成",[19,127225,127226],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":54,"depth":54,"links":127228},[127229],{"id":127222,"depth":54,"text":127223},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127214,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127236,"title":127237,"body":127238,"description":24706,"extension":1603,"meta":127377,"navigation":57,"path":127378,"seo":127379,"stem":127380,"__hash__":127381},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127239,"toc":127365},[127240,127243,127247,127250,127254,127264,127268,127271,127274,127277,127281,127288,127294,127298,127304,127315,127319,127322,127326,127329,127333,127336,127340,127343,127347,127350,127353,127356,127359,127362],[10,127241,127237],{"id":127242},"_2-vscode必备内容",[14,127244,127246],{"id":127245},"_21-标签分类","2.1 标签分类",[19,127248,127249],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127251,127253],{"id":127252},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127255,127256,127257,127259,127260,127263],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[33,127258,1894],{}," 然后按 ",[33,127261,127262],{},"Tab","，快速自动生成基本结构。",[14,127265,127267],{"id":127266},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127269,127270],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127272,127273],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127275,127276],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127278,127280],{"id":127279},"_24-视图缩放","2.4 视图缩放",[19,127282,127283,127284,127287],{},"缩放视图 ",[33,127285,127286],{},"ctrl+"," 可实现代码增大。",[19,127289,127290,127293],{},[33,127291,127292],{},"ctrl-"," 可实现代码减小。",[14,127295,127297],{"id":127296},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127299,127300,127301,29716],{},"VSCode 新建文件快捷键为 ",[33,127302,127303],{},"ctrl+N",[19,127305,127306,127307,127310,127311,127314],{},"保存快捷键为 ",[33,127308,127309],{},"ctrl+S","，将文本保存为 ",[33,127312,127313],{},".html"," 文件。",[14,127316,127318],{"id":127317},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127320,127321],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127323,127325],{"id":127324},"_27-vscode-icons","2.7 vscode-icons",[19,127327,127328],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127330,127332],{"id":127331},"_28-easy-less","2.8 Easy LESS",[19,127334,127335],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127337,127339],{"id":127338},"_29-会了吧插件","2.9 会了吧插件",[19,127341,127342],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127344,127346],{"id":127345},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127348,127349],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127351,127352],{},"②选定多个相同的单词:ctrl+D",[19,127354,127355],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127357,127358],{},"④全局替换某些单词:ctrl+h",[19,127360,127361],{},"⑤快速定位到某一行:ctrl+g",[19,127363,127364],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":54,"depth":54,"links":127366},[127367,127368,127369,127370,127371,127372,127373,127374,127375,127376],{"id":127245,"depth":54,"text":127246},{"id":127252,"depth":54,"text":127253},{"id":127266,"depth":54,"text":127267},{"id":127279,"depth":54,"text":127280},{"id":127296,"depth":54,"text":127297},{"id":127317,"depth":54,"text":127318},{"id":127324,"depth":54,"text":127325},{"id":127331,"depth":54,"text":127332},{"id":127338,"depth":54,"text":127339},{"id":127345,"depth":54,"text":127346},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127237,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127383,"title":127384,"body":127385,"description":24706,"extension":1603,"meta":127544,"navigation":57,"path":127545,"seo":127546,"stem":127547,"__hash__":127548},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127386,"toc":127536},[127387,127390,127394,127404,127410,127416,127420,127429,127433,127438,127441,127444,127448,127451,127461,127470,127479,127488,127498,127505,127510,127515,127528],[10,127388,127384],{"id":127389},"_3-html文本与容器标签",[14,127391,127393],{"id":127392},"_31-标题标签","3.1 标题标签",[19,127395,127396,127399,127400,127403],{},[33,127397,127398],{},"\u003Ch1>","我是一级标签",[33,127401,127402],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127405,127406,127399,127408],{},[33,127407,127398],{},[33,127409,127402],{},[19,127411,124666,127412,127415],{},[33,127413,127414],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127417,127419],{"id":127418},"_32-段落标签","3.2 段落标签",[19,127421,127422,127425,127426],{},[33,127423,127424],{},"\u003Cp>","....",[33,127427,127428],{},"\u003C\u002Fp>",[14,127430,127432],{"id":127431},"_33-换行标签","3.3 换行标签",[19,127434,127435],{},[33,127436,127437],{},"\u003Cbr \u002F>",[19,127439,127440],{},"具有强制换行的作用",[19,127442,127443],{},"单标签",[14,127445,127447],{"id":127446},"_34-文本格式化标签","3.4 文本格式化标签",[19,127449,127450],{},"提供粗体、斜体和下划线等效果",[19,127452,127453,127454,83870,127457,127460],{},"加粗：",[33,127455,127456],{},"\u003Cstrong>...\u003C\u002Fstrong>",[33,127458,127459],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127462,127463,127464,83870,127467,127460],{},"斜体：",[33,127465,127466],{},"\u003Cem>...\u003C\u002Fem>",[33,127468,127469],{},"\u003Ci>...\u003C\u002Fi>",[19,127471,127472,127473,83870,127476,127460],{},"删除线：",[33,127474,127475],{},"\u003Cdel>...\u003C\u002Fdel>",[33,127477,127478],{},"\u003Cs>...\u003C\u002Fs>",[19,127480,127481,127482,83870,127485,127460],{},"下划线：",[33,127483,127484],{},"\u003Cins>...\u003C\u002Fins>",[33,127486,127487],{},"\u003Cu>...\u003C\u002Fu>",[14,127489,127491,127492,19739,127495,104024],{"id":127490},"_35-div和span标签","3.5 ",[33,127493,127494],{},"\u003Cdiv>",[33,127496,127497],{},"\u003Cspan>",[19,127499,127500,102349,127502,127504],{},[33,127501,127494],{},[33,127503,127497],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127506,127507],{},[33,127508,127509],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127511,127512],{},[33,127513,127514],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127516,127517,127518,127520,127521,127523,127524,127527],{},"两者特点：①",[33,127519,127494],{}," 标签用来布局，但一行通常只放一个 ",[33,127522,127494],{},"。可以理解为一个大盒子，独占一行，在 ",[33,127525,127526],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127529,78580,127530,127532,127533,127535],{},[33,127531,127497],{}," 标签也可用于布局，一行可以放多个 ",[33,127534,127497],{},"，可理解为小盒子。",{"title":31,"searchDepth":54,"depth":54,"links":127537},[127538,127539,127540,127541,127542],{"id":127392,"depth":54,"text":127393},{"id":127418,"depth":54,"text":127419},{"id":127431,"depth":54,"text":127432},{"id":127446,"depth":54,"text":127447},{"id":127490,"depth":54,"text":127543},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127384,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127550,"title":127551,"body":127552,"description":24706,"extension":1603,"meta":127749,"navigation":57,"path":127750,"seo":127751,"stem":127752,"__hash__":127753},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127553,"toc":127741},[127554,127557,127561,127564,127570,127577,127583,127589,127592,127595,127598,127601,127604,127607,127610,127614,127617,127620,127623,127629,127635,127641,127648,127652,127658,127664,127667,127670,127676,127682,127688,127691,127694,127698,127701,127711,127717,127721,127730,127734,127737],[10,127555,127551],{"id":127556},"_4-html图像与链接",[14,127558,127560],{"id":127559},"_41-图像标签","4.1 图像标签",[19,127562,127563],{},"（1）标签",[19,127565,127566,127569],{},[33,127567,127568],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127571,127572,127573,127576],{},"src是",[33,127574,127575],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127578,127579,127580],{},"alt:文本，替换文本。图像不能显示的文字 ",[33,127581,127582],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127584,127585,127586],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[33,127587,127588],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127590,127591],{},"width:像素，设置图像的宽度",[19,127593,127594],{},"height:像素，设置图像的高度",[19,127596,127597],{},"border：像素，设置图像的边框粗细",[19,127599,127600],{},"（2）图像标签属性的注意点：",[19,127602,127603],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127605,127606],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127608,127609],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127611,127613],{"id":127612},"_42-路径注意要点","4.2 路径注意要点：",[19,127615,127616],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127618,127619],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127621,127622],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127624,127625,127626],{},"①同一级路径：图像文件位于HTML文件同一级，如",[33,127627,127628],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127630,127631,127632],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[33,127633,127634],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127636,127637,127638],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[33,127639,127640],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127642,127643,127644,1919],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[1906,127645,127646],{"href":127646,"rel":127647},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25195],[14,127649,127651],{"id":127650},"_43-超链接标签","4.3 超链接标签",[19,127653,127654,127657],{},[33,127655,127656],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127659,127660,127661],{},"①语法格式：",[33,127662,127663],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127665,127666],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127668,127669],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127671,127672,127673],{},"③链接分类：外部链接：",[33,127674,127675],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127677,127678,127679],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[33,127680,127681],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127683,127684,127685],{},"空链接：如果当时没有确定链接目标时，",[33,127686,127687],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127689,127690],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127692,127693],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127695,127697],{"id":127696},"_44-锚点链接","4.4 锚点链接",[19,127699,127700],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127702,127703,127704,127707,127708],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[33,127705,127706],{},"\u003Ca href=\"#two\">","第二级",[33,127709,127710],{},"\u003C\u002Fa>",[19,127712,127713,127714],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[33,127715,127716],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127718,127720],{"id":127719},"_45-注释标签","4.5 注释标签",[19,127722,127723,127726,127727],{},[33,127724,127725],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[33,127728,127729],{},"ctrl+\u002F",[14,127731,127733],{"id":127732},"_46-特殊字符","4.6 特殊字符",[19,127735,127736],{},"可以实现添加多个空格",[2992,127738],{"style":127739,"src":127740},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":54,"depth":54,"links":127742},[127743,127744,127745,127746,127747,127748],{"id":127559,"depth":54,"text":127560},{"id":127612,"depth":54,"text":127613},{"id":127650,"depth":54,"text":127651},{"id":127696,"depth":54,"text":127697},{"id":127719,"depth":54,"text":127720},{"id":127732,"depth":54,"text":127733},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127551,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127755,"title":127756,"body":127757,"description":24706,"extension":1603,"meta":128050,"navigation":57,"path":128051,"seo":128052,"stem":128053,"__hash__":128054},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127758,"toc":128041},[127759,127762,127766,127769,127772,127775,127778,127781,127784,127787,127790,127793,127813,127819,127823,127826,127829,127832,127835,127838,127841,127845,127848,127851,127854,127857,127870,127875,127878,127881,127896,127899,127902,127905,127908,127911,127915,127918,127925,127928,127931,127934,127937,127940,127946,127949,127952,127958,127961,127964,127967,127973,127976,127979,127993,128000,128003,128006,128013,128022,128025,128028,128031,128035,128038],[10,127760,127756],{"id":127761},"_5-html表格列表与表单",[14,127763,127765],{"id":127764},"_51-表格标签","5.1 表格标签",[19,127767,127768],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127770,127771],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127773,127774],{},"②表格基本语法：",[2992,127776],{"style":127739,"src":127777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127779,127780],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[2992,127782],{"style":127739,"src":127783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127785,127786],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[2992,127788],{"style":127739,"src":127789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127791,127792],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127794,127795,127798,127799,127801,127802,127805,127806,127808,127809,127812],{},[33,127796,127797],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[33,127800,127797],{},"内部必须拥有",[33,127803,127804],{},"\u003Ctr>","标签，一般位于第一行，",[33,127807,127797],{},"比",[33,127810,127811],{},"\u003Cth>","范围广",[19,127814,127815,127818],{},[33,127816,127817],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127820,127822],{"id":127821},"_52-合并单元格","5.2 合并单元格",[19,127824,127825],{},"（1）合并单元格方式：",[19,127827,127828],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127830,127831],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127833,127834],{},"（2）目标单元格：",[19,127836,127837],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127839,127840],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127842,127844],{"id":127843},"_53-列表标签","5.3 列表标签",[19,127846,127847],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127849,127850],{},"①无序列表：",[2992,127852],{"style":127739,"src":127853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127855,127856],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127858,127859,127862,127863,127866,127867,127869],{},[33,127860,127861],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[33,127864,127865],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[33,127868,127861],{},"中输入其他标签或文字是不对的",[19,127871,127872,127874],{},[33,127873,127865],{},"之间相当于一个容器，可以容纳所有元素",[19,127876,127877],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127879,127880],{},"在css中去除前边的小圆点采用如下代码:",[26,127882,127886],{"className":127883,"code":127884,"language":127885,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[33,127887,127888],{"__ignoreMap":31},[36,127889,127890,127893],{"class":38,"line":39},[36,127891,127892],{"class":52631},"list-style",[36,127894,127895],{"class":50},": none;\n",[19,127897,127898],{},"②有序列表：",[2992,127900],{"style":127739,"src":127901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127903,127904],{},"③自定义列表：",[2992,127906],{"style":127739,"src":127907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[2992,127909],{"style":127739,"src":127910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127912,127914],{"id":127913},"_54-表单标签","5.4 表单标签",[19,127916,127917],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127919,127920,127921,127924],{},"（1）表单域：包含单元素的区域，",[33,127922,127923],{},"\u003Cform>","标签可以实现信息的收集和传递。",[2992,127926],{"style":127739,"src":127927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127929,127930],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127932,127933],{},"表单元素提交必须有name属性",[19,127935,127936],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127938,127939],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127941,78557,127942,127945],{},[33,127943,127944],{},"\u003Cinput>","输入表单元素",[2992,127947],{"style":127739,"src":127948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[2992,127950],{"style":127739,"src":127951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127953,127954,127955],{},"单选按钮：",[33,127956,127957],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[2992,127959],{"style":127739,"src":127960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127962,127963],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[2992,127965],{"style":127739,"src":127966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127968,127969,127972],{},[887,127970,127971],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127974,127975],{},"②select下拉表单元素：可以节约页面控件",[2992,127977],{"style":127739,"src":127978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127980,127981,15124,127983,127986,127987,127989,127990,127992],{},[887,127982,1703],{},[33,127984,127985],{},"\u003Cselect>","中至少包含一对",[33,127988,104045],{},"；在",[33,127991,104045],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127994,127995,127996,127999],{},"③",[33,127997,127998],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[2992,128001],{"style":127739,"src":128002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128004,128005],{},"3行20列",[14,128007,128009,128010,104024],{"id":128008},"_55-lable标签","5.5 ",[33,128011,128012],{},"\u003Clable>",[19,128014,128015,128016,128018,128019,128021],{},"它不是表单标签，但常常与表单标签搭配使用，",[33,128017,128012],{},"标签用于绑定一个表单标签，当点击",[33,128020,128012],{},"标签内的文本",[19,128023,128024],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[2992,128026],{"style":127739,"src":128027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[2992,128029],{"style":127739,"src":128030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128032,128034],{"id":128033},"_56-实例","5.6 实例",[2992,128036],{"style":127739,"src":128037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1592,128039,128040],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":128042},[128043,128044,128045,128046,128047,128049],{"id":127764,"depth":54,"text":127765},{"id":127821,"depth":54,"text":127822},{"id":127843,"depth":54,"text":127844},{"id":127913,"depth":54,"text":127914},{"id":128008,"depth":54,"text":128048},"5.5 \u003Clable>标签",{"id":128033,"depth":54,"text":128034},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127756,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128056,"title":128057,"body":128058,"description":24706,"extension":1603,"meta":128607,"navigation":57,"path":128608,"seo":128609,"stem":128610,"__hash__":128611},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128059,"toc":128582},[128060,128063,128067,128070,128073,128077,128080,128083,128086,128089,128092,128095,128098,128102,128105,128109,128112,128115,128118,128122,128125,128128,128131,128137,128140,128143,128146,128149,128152,128155,128158,128191,128195,128198,128201,128204,128208,128211,128214,128217,128220,128223,128227,128230,128233,128236,128240,128243,128247,128250,128254,128257,128262,128266,128269,128273,128276,128279,128282,128285,128312,128315,128319,128322,128325,128330,128333,128336,128340,128343,128348,128351,128354,128357,128361,128364,128367,128370,128374,128377,128380,128383,128387,128391,128394,128434,128437,128441,128448,128451,128455,128458,128504,128508,128511,128514,128517,128545,128549,128552,128579],[10,128061,128057],{"id":128062},"_6-css语法与文本样式",[14,128064,128066],{"id":128065},"_61-css语法规范","6.1 css语法规范",[19,128068,128069],{},"由两部分组成，选择器及一条或多条声明",[2992,128071],{"style":127739,"src":128072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128074,128075],{},[887,128076,1703],{},[19,128078,128079],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128081,128082],{},"②属性与属性值以“键值对”的形式出现",[19,128084,128085],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128087,128088],{},"④属性和属性值之间用英文“;”分开",[2992,128090],{"style":127739,"src":128091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[2992,128093],{"style":127739,"src":128094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[2992,128096],{"style":127739,"src":128097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128099,128101],{"id":128100},"_62-css选择器","6.2 css选择器",[19,128103,128104],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[1645,128106,128108],{"id":128107},"_621-标签选择器","6.2.1 标签选择器",[19,128110,128111],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128113,128114],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[2992,128116],{"style":127739,"src":128117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[1645,128119,128121],{"id":128120},"_622-类选择器","6.2.2 类选择器",[19,128123,128124],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128126,128127],{},"②样例",[2992,128129],{"style":127739,"src":128130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128132,128133,128134,128136],{},"③ ",[887,128135,127971],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128138,128139],{},"可以理解为给这个标签起了个名字，来表示；",[19,128141,128142],{},"长名称或词组可以使用横线来为选择器命名；",[19,128144,128145],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128147,128148],{},"命名要有意义；",[2992,128150],{"style":127739,"src":128151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128153,128154],{},"类选择器也可以指定特殊的元素p.center{}",[19,128156,128157],{},"p.center和.center都对",[26,128159,128161],{"className":127883,"code":128160,"language":127885,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[33,128162,128163,128168,128177,128187],{"__ignoreMap":31},[36,128164,128165],{"class":38,"line":39},[36,128166,128167],{"class":124},"\u002F* 类选择器指定特殊元素 *\u002F\n",[36,128169,128170,128172,128175],{"class":38,"line":54},[36,128171,19],{"class":52631},[36,128173,128174],{"class":46},".center",[36,128176,16901],{"class":50},[36,128178,128179,128181,128183,128185],{"class":38,"line":61},[36,128180,71857],{"class":73},[36,128182,52768],{"class":50},[36,128184,52923],{"class":73},[36,128186,77],{"class":50},[36,128188,128189],{"class":38,"line":80},[36,128190,250],{"class":50},[1645,128192,128194],{"id":128193},"_623-多类名使用","6.2.3 多类名使用",[19,128196,128197],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[2992,128199],{"style":127739,"src":128200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128202,128203],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[1645,128205,128207],{"id":128206},"_624-id选择器","6.2.4 id选择器",[19,128209,128210],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128212,128213],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[2992,128215],{"style":127739,"src":128216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128218,128219],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128221,128222],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[1645,128224,128226],{"id":128225},"_625-通配符选择器","6.2.5 通配符选择器",[19,128228,128229],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128231,128232],{},"* {",[19,128234,128235],{},"color=\"red\"}",[1645,128237,128239],{"id":128238},"_626-总结","6.2.6 总结",[2992,128241],{"style":127739,"src":128242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128244,128246],{"id":128245},"_63-css字体属性","6.3 css字体属性",[19,128248,128249],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[1645,128251,128253],{"id":128252},"_631-字体系列","6.3.1 字体系列",[19,128255,128256],{},"font-family: '宋体';",[19,128258,128259,128261],{},[887,128260,1703],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[1645,128263,128265],{"id":128264},"_632-字体大小","6.3.2 字体大小",[19,128267,128268],{},"font-size: 20px",[19,128270,128271,27804],{},[887,128272,127971],{},[19,128274,128275],{},"①px（像素）大小是网页的最常用单位",[19,128277,128278],{},"②谷歌浏览器默认为16px",[19,128280,128281],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128283,128284],{},"④可以给body指定整个页面的大小：会自动引用",[26,128286,128288],{"className":127883,"code":128287,"language":127885,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[33,128289,128290,128296,128308],{"__ignoreMap":31},[36,128291,128292,128294],{"class":38,"line":39},[36,128293,53131],{"class":52631},[36,128295,16901],{"class":50},[36,128297,128298,128300,128302,128304,128306],{"class":38,"line":54},[36,128299,71957],{"class":73},[36,128301,52768],{"class":50},[36,128303,2268],{"class":73},[36,128305,52823],{"class":42},[36,128307,77],{"class":50},[36,128309,128310],{"class":38,"line":61},[36,128311,250],{"class":50},[19,128313,128314],{},"⑤标题标签比较特殊，需要单独指定大小",[1645,128316,128318],{"id":128317},"_633-字体粗细","6.3.3 字体粗细",[19,128320,128321],{},"font-weight: bold;",[19,128323,128324],{},"font-weight: 100；",[19,128326,128327,128329],{},[887,128328,1703],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128331,128332],{},"font-weight= 400;",[19,128334,128335],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[1645,128337,128339],{"id":128338},"_634-文字样式","6.3.4 文字样式",[19,128341,128342],{},"font-style: normal；",[19,128344,128345,27804],{},[887,128346,128347],{},"属性值",[19,128349,128350],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128352,128353],{},"②italic：浏览器会显示斜体的字体样式",[2992,128355],{"style":127739,"src":128356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[1645,128358,128360],{"id":128359},"_635-字体符合属性","6.3.5 字体符合属性",[2992,128362],{"style":127739,"src":128363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[2992,128365],{"style":127739,"src":128366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128368,128369],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128371,128372,27804],{},[887,128373,127971],{},[19,128375,128376],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128378,128379],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128381,128382],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128384,128386],{"id":128385},"_64-css-test文本属性","6.4 css test文本属性",[1645,128388,128390],{"id":128389},"_641-文本颜色","6.4.1 文本颜色",[19,128392,128393],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,128395,128397],{"className":127883,"code":128396,"language":127885,"meta":31,"style":31},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[33,128398,128399,128404,128410,128420,128425,128430],{"__ignoreMap":31},[36,128400,128401],{"class":38,"line":39},[36,128402,128403],{"class":124},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[36,128405,128406,128408],{"class":38,"line":54},[36,128407,19],{"class":52631},[36,128409,16901],{"class":50},[36,128411,128412,128414,128416,128418],{"class":38,"line":61},[36,128413,72236],{"class":73},[36,128415,52768],{"class":50},[36,128417,58752],{"class":73},[36,128419,77],{"class":50},[36,128421,128422],{"class":38,"line":80},[36,128423,128424],{"class":124},"  \u002F* color: #ff0000; *\u002F\n",[36,128426,128427],{"class":38,"line":96},[36,128428,128429],{"class":124},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[36,128431,128432],{"class":38,"line":101},[36,128433,250],{"class":50},[2992,128435],{"style":127739,"src":128436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[1645,128438,128440],{"id":128439},"_642-对齐文本","6.4.2 对齐文本",[19,128442,128443,128444,128447],{},"text-align属于用于设置元素内文本内容的 ",[887,128445,128446],{},"水平对齐"," 方式",[19,128449,128450],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[1645,128452,128454],{"id":128453},"_643-装饰文本","6.4.3 装饰文本",[19,128456,128457],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,128459,128461],{"className":127883,"code":128460,"language":127885,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[33,128462,128463,128469,128479,128483,128489,128500],{"__ignoreMap":31},[36,128464,128465,128467],{"class":38,"line":39},[36,128466,1906],{"class":52631},[36,128468,16901],{"class":50},[36,128470,128471,128473,128475,128477],{"class":38,"line":54},[36,128472,71833],{"class":73},[36,128474,52768],{"class":50},[36,128476,56068],{"class":73},[36,128478,77],{"class":50},[36,128480,128481],{"class":38,"line":61},[36,128482,250],{"class":50},[36,128484,128485,128487],{"class":38,"line":80},[36,128486,19],{"class":52631},[36,128488,16901],{"class":50},[36,128490,128491,128493,128495,128498],{"class":38,"line":96},[36,128492,71833],{"class":73},[36,128494,52768],{"class":50},[36,128496,128497],{"class":73},"underline",[36,128499,77],{"class":50},[36,128501,128502],{"class":38,"line":101},[36,128503,250],{"class":50},[1645,128505,128507],{"id":128506},"_644-文本缩进","6.4.4 文本缩进",[19,128509,128510],{},"实现文本的第一行首行缩进自己指定的距离",[19,128512,128513],{},"20px往右边走；-20px往左边走",[19,128515,128516],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,128518,128520],{"className":127883,"code":128519,"language":127885,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[33,128521,128522,128528,128541],{"__ignoreMap":31},[36,128523,128524,128526],{"class":38,"line":39},[36,128525,19],{"class":52631},[36,128527,16901],{"class":50},[36,128529,128530,128533,128535,128537,128539],{"class":38,"line":54},[36,128531,128532],{"class":73},"  text-indent",[36,128534,52768],{"class":50},[36,128536,1747],{"class":73},[36,128538,24883],{"class":42},[36,128540,77],{"class":50},[36,128542,128543],{"class":38,"line":61},[36,128544,250],{"class":50},[1645,128546,128548],{"id":128547},"_645-行间距","6.4.5 行间距",[19,128550,128551],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,128553,128555],{"className":127883,"code":128554,"language":127885,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[33,128556,128557,128563,128575],{"__ignoreMap":31},[36,128558,128559,128561],{"class":38,"line":39},[36,128560,19],{"class":52631},[36,128562,16901],{"class":50},[36,128564,128565,128568,128570,128573],{"class":38,"line":54},[36,128566,128567],{"class":73},"  line-height",[36,128569,52768],{"class":50},[36,128571,128572],{"class":73},"1.6",[36,128574,77],{"class":50},[36,128576,128577],{"class":38,"line":61},[36,128578,250],{"class":50},[1592,128580,128581],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":128583},[128584,128585,128593,128600],{"id":128065,"depth":54,"text":128066},{"id":128100,"depth":54,"text":128101,"children":128586},[128587,128588,128589,128590,128591,128592],{"id":128107,"depth":61,"text":128108},{"id":128120,"depth":61,"text":128121},{"id":128193,"depth":61,"text":128194},{"id":128206,"depth":61,"text":128207},{"id":128225,"depth":61,"text":128226},{"id":128238,"depth":61,"text":128239},{"id":128245,"depth":54,"text":128246,"children":128594},[128595,128596,128597,128598,128599],{"id":128252,"depth":61,"text":128253},{"id":128264,"depth":61,"text":128265},{"id":128317,"depth":61,"text":128318},{"id":128338,"depth":61,"text":128339},{"id":128359,"depth":61,"text":128360},{"id":128385,"depth":54,"text":128386,"children":128601},[128602,128603,128604,128605,128606],{"id":128389,"depth":61,"text":128390},{"id":128439,"depth":61,"text":128440},{"id":128453,"depth":61,"text":128454},{"id":128506,"depth":61,"text":128507},{"id":128547,"depth":61,"text":128548},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128057,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128613,"title":128614,"body":128615,"description":24706,"extension":1603,"meta":129264,"navigation":57,"path":129265,"seo":129266,"stem":129267,"__hash__":129268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128616,"toc":129245},[128617,128620,128624,128628,128688,128692,128702,128705,128708,128712,128737,128741,128744,128747,128750,128753,128756,128760,128763,128766,128808,128811,128837,128843,128846,128850,128854,128860,128863,128866,128869,128872,128875,128878,128923,128927,128930,128933,128937,128941,128970,128973,128978,128981,128984,128987,128990,128994,128998,129001,129003,129006,129010,129013,129017,129020,129023,129026,129030,129034,129040,129050,129053,129056,129059,129062,129065,129188,129196,129204,129242],[10,128618,128614],{"id":128619},"_7-css引入方式与选择器进阶",[14,128621,128623],{"id":128622},"_71-css引入方式","7.1 css引入方式",[1645,128625,128627],{"id":128626},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,128629,128633],{"className":128630,"code":128631,"language":128632,"meta":31,"style":31},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[33,128634,128635,128643,128650,128662,128675,128680],{"__ignoreMap":31},[36,128636,128637,128639,128641],{"class":38,"line":39},[36,128638,2577],{"class":50},[36,128640,1592],{"class":52631},[36,128642,52638],{"class":50},[36,128644,128645,128648],{"class":38,"line":54},[36,128646,128647],{"class":52631},"  h1",[36,128649,16901],{"class":50},[36,128651,128652,128655,128657,128660],{"class":38,"line":61},[36,128653,128654],{"class":73},"    color",[36,128656,52768],{"class":50},[36,128658,128659],{"class":73},"blue",[36,128661,77],{"class":50},[36,128663,128664,128667,128669,128671,128673],{"class":38,"line":80},[36,128665,128666],{"class":73},"    font-size",[36,128668,52768],{"class":50},[36,128670,2467],{"class":73},[36,128672,52823],{"class":42},[36,128674,77],{"class":50},[36,128676,128677],{"class":38,"line":96},[36,128678,128679],{"class":50},"  }\n",[36,128681,128682,128684,128686],{"class":38,"line":101},[36,128683,53116],{"class":50},[36,128685,1592],{"class":52631},[36,128687,52638],{"class":50},[19,128689,128690,27804],{},[887,128691,127971],{},[19,128693,78557,128694,128697,128698,128701],{},[33,128695,128696],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[33,128699,128700],{},"\u003Chead>","标签中",[19,128703,128704],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128706,128707],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[1645,128709,128711],{"id":128710},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,128713,128715],{"className":128630,"code":128714,"language":128632,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[33,128716,128717],{"__ignoreMap":31},[36,128718,128719,128721,128723,128725,128727,128730,128733,128735],{"class":38,"line":39},[36,128720,2577],{"class":50},[36,128722,19],{"class":52631},[36,128724,63957],{"class":46},[36,128726,70],{"class":50},[36,128728,128729],{"class":110},"\"color: red; font-size: 16px;\"",[36,128731,128732],{"class":50},">这是一个段落\u003C\u002F",[36,128734,19],{"class":52631},[36,128736,52638],{"class":50},[19,128738,128739,27804],{},[887,128740,127971],{},[19,128742,128743],{},"①style其实就是标签的属性",[19,128745,128746],{},"②在双引号中间，写法要符合css规范",[19,128748,128749],{},"③可以控制当前的标签设置样式",[19,128751,128752],{},"④书写繁琐，简单时才用",[19,128754,128755],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[1645,128757,128759],{"id":128758},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128761,128762],{},"使用最多，单独建一个css文件，然后html引用",[19,128764,128765],{},"①css文件部分： style.css",[26,128767,128769],{"className":127883,"code":128768,"language":127885,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[33,128770,128771,128776,128782,128792,128804],{"__ignoreMap":31},[36,128772,128773],{"class":38,"line":39},[36,128774,128775],{"class":124},"\u002F* style.css *\u002F\n",[36,128777,128778,128780],{"class":38,"line":54},[36,128779,10],{"class":52631},[36,128781,16901],{"class":50},[36,128783,128784,128786,128788,128790],{"class":38,"line":61},[36,128785,72236],{"class":73},[36,128787,52768],{"class":50},[36,128789,128659],{"class":73},[36,128791,77],{"class":50},[36,128793,128794,128796,128798,128800,128802],{"class":38,"line":80},[36,128795,71957],{"class":73},[36,128797,52768],{"class":50},[36,128799,2467],{"class":73},[36,128801,52823],{"class":42},[36,128803,77],{"class":50},[36,128805,128806],{"class":38,"line":96},[36,128807,250],{"class":50},[19,128809,128810],{},"②html部分",[26,128812,128814],{"className":128630,"code":128813,"language":128632,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[33,128815,128816],{"__ignoreMap":31},[36,128817,128818,128820,128822,128824,128826,128828,128830,128832,128835],{"class":38,"line":39},[36,128819,2577],{"class":50},[36,128821,70336],{"class":52631},[36,128823,70339],{"class":46},[36,128825,70],{"class":50},[36,128827,70344],{"class":110},[36,128829,62388],{"class":46},[36,128831,70],{"class":50},[36,128833,128834],{"class":110},"\"style.css\"",[36,128836,52638],{"class":50},[19,128838,128839,128842],{},[33,128840,128841],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128844,128845],{},"ctrl+0回到页面原来大小",[14,128847,128849],{"id":128848},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[1645,128851,128853],{"id":128852},"_721-快速生成html","7.2.1 快速生成html",[19,128855,128856,128857],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[33,128858,128859],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128861,128862],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128864,128865],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128867,128868],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128870,128871],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128873,128874],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128876,128877],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,128879,128881],{"className":128630,"code":128880,"language":128632,"meta":31,"style":31},"\u003C!-- Emmet 语法示例 -->\n\u003C!-- div*3        → 生成3个div -->\n\u003C!-- ul>li*5      → ul下生成5个li -->\n\u003C!-- div+p        → 兄弟div和p -->\n\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[33,128882,128883,128888,128893,128898,128903,128908,128913,128918],{"__ignoreMap":31},[36,128884,128885],{"class":38,"line":39},[36,128886,128887],{"class":124},"\u003C!-- Emmet 语法示例 -->\n",[36,128889,128890],{"class":38,"line":54},[36,128891,128892],{"class":124},"\u003C!-- div*3        → 生成3个div -->\n",[36,128894,128895],{"class":38,"line":61},[36,128896,128897],{"class":124},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[36,128899,128900],{"class":38,"line":80},[36,128901,128902],{"class":124},"\u003C!-- div+p        → 兄弟div和p -->\n",[36,128904,128905],{"class":38,"line":96},[36,128906,128907],{"class":124},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[36,128909,128910],{"class":38,"line":101},[36,128911,128912],{"class":124},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[36,128914,128915],{"class":38,"line":128},[36,128916,128917],{"class":124},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[36,128919,128920],{"class":38,"line":149},[36,128921,128922],{"class":124},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[1645,128924,128926],{"id":128925},"_722-快速生成css","7.2.2 快速生成css",[19,128928,128929],{},"简写开头",[19,128931,128932],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128934,128936],{"id":128935},"_73-css复合选择器","7.3 css复合选择器",[1645,128938,128940],{"id":128939},"_731-后代选择器","7.3.1 后代选择器",[26,128942,128944],{"className":127883,"code":128943,"language":127885,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[33,128945,128946,128956,128966],{"__ignoreMap":31},[36,128947,128948,128951,128954],{"class":38,"line":39},[36,128949,128950],{"class":46},".parent",[36,128952,128953],{"class":46}," .child",[36,128955,16901],{"class":50},[36,128957,128958,128960,128962,128964],{"class":38,"line":54},[36,128959,72236],{"class":73},[36,128961,52768],{"class":50},[36,128963,128659],{"class":73},[36,128965,77],{"class":50},[36,128967,128968],{"class":38,"line":61},[36,128969,250],{"class":50},[19,128971,128972],{},"元素1 元素2 {样式声明}",[19,128974,128975],{},[887,128976,128977],{},"注意点:",[19,128979,128980],{},"①元素1和元素2中间用空格隔开",[19,128982,128983],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128985,128986],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128988,128989],{},"④元素1和元素2可以是任意基础选择器",[1645,128991,128993],{"id":128992},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128995,128996],{},[887,128997,128977],{},[19,128999,129000],{},"①元素1和元素2中间用大于号隔开",[19,129002,128983],{},[19,129004,129005],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[1645,129007,129009],{"id":129008},"_733-并集选择器","7.3.3 并集选择器",[19,129011,129012],{},"元素1，元素2 {样式声明}",[19,129014,129015],{},[887,129016,128977],{},[19,129018,129019],{},"①元素1和元素2中间用逗号隔开",[19,129021,129022],{},"②逗号可以理解为和的意思",[19,129024,129025],{},"③并集选择器通常用于集体声明",[1645,129027,129029],{"id":129028},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129031,129032],{},[887,129033,128977],{},[19,129035,129036,129037,129039],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70336,129038],{},"－:visited－:hover－:active。",[19,129041,129042,129043,129046,129047,27071],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129044,129045],"hover",{}," 、 ",[129048,129049],"first-child",{},[19,129051,129052],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129054,129055],{},"link对没访问的进行设置",[19,129057,129058],{},"vistied对已访问的进行改变",[19,129060,129061],{},"hover鼠标经过就会变",[19,129063,129064],{},"active常按(点)就会变",[26,129066,129068],{"className":127883,"code":129067,"language":127885,"meta":31,"style":31},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\na:link {\n  color: #333;\n  text-decoration: none;\n}\na:visited {\n  color: purple;\n}\na:hover {\n  color: skyblue;\n  text-decoration: underline;\n}\na:active {\n  color: green;\n}\n",[33,129069,129070,129075,129084,129094,129104,129108,129117,129128,129132,129140,129150,129160,129164,129173,129184],{"__ignoreMap":31},[36,129071,129072],{"class":38,"line":39},[36,129073,129074],{"class":124},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[36,129076,129077,129079,129082],{"class":38,"line":54},[36,129078,1906],{"class":52631},[36,129080,129081],{"class":46},":link",[36,129083,16901],{"class":50},[36,129085,129086,129088,129090,129092],{"class":38,"line":61},[36,129087,72236],{"class":73},[36,129089,52768],{"class":50},[36,129091,63700],{"class":73},[36,129093,77],{"class":50},[36,129095,129096,129098,129100,129102],{"class":38,"line":80},[36,129097,71833],{"class":73},[36,129099,52768],{"class":50},[36,129101,56068],{"class":73},[36,129103,77],{"class":50},[36,129105,129106],{"class":38,"line":96},[36,129107,250],{"class":50},[36,129109,129110,129112,129115],{"class":38,"line":101},[36,129111,1906],{"class":52631},[36,129113,129114],{"class":46},":visited",[36,129116,16901],{"class":50},[36,129118,129119,129121,129123,129126],{"class":38,"line":128},[36,129120,72236],{"class":73},[36,129122,52768],{"class":50},[36,129124,129125],{"class":73},"purple",[36,129127,77],{"class":50},[36,129129,129130],{"class":38,"line":149},[36,129131,250],{"class":50},[36,129133,129134,129136,129138],{"class":38,"line":154},[36,129135,1906],{"class":52631},[36,129137,62271],{"class":46},[36,129139,16901],{"class":50},[36,129141,129142,129144,129146,129148],{"class":38,"line":167},[36,129143,72236],{"class":73},[36,129145,52768],{"class":50},[36,129147,56220],{"class":73},[36,129149,77],{"class":50},[36,129151,129152,129154,129156,129158],{"class":38,"line":172},[36,129153,71833],{"class":73},[36,129155,52768],{"class":50},[36,129157,128497],{"class":73},[36,129159,77],{"class":50},[36,129161,129162],{"class":38,"line":192},[36,129163,250],{"class":50},[36,129165,129166,129168,129171],{"class":38,"line":211},[36,129167,1906],{"class":52631},[36,129169,129170],{"class":46},":active",[36,129172,16901],{"class":50},[36,129174,129175,129177,129179,129182],{"class":38,"line":216},[36,129176,72236],{"class":73},[36,129178,52768],{"class":50},[36,129180,129181],{"class":73},"green",[36,129183,77],{"class":50},[36,129185,129186],{"class":38,"line":231},[36,129187,250],{"class":50},[1645,129189,129191,129192,129195],{"id":129190},"_735-伪类选择器","7.3.5 ",[129193,129194],"focus",{},"伪类选择器",[19,129197,129198,129200,129201,129203],{},[129193,129199],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[33,129202,127944],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,129205,129207],{"className":127883,"code":129206,"language":127885,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[33,129208,129209,129217,129228,129238],{"__ignoreMap":31},[36,129210,129211,129213,129215],{"class":38,"line":39},[36,129212,55152],{"class":52631},[36,129214,63231],{"class":46},[36,129216,16901],{"class":50},[36,129218,129219,129222,129224,129226],{"class":38,"line":54},[36,129220,129221],{"class":73},"  border-color",[36,129223,52768],{"class":50},[36,129225,56220],{"class":73},[36,129227,77],{"class":50},[36,129229,129230,129232,129234,129236],{"class":38,"line":61},[36,129231,72129],{"class":73},[36,129233,52768],{"class":50},[36,129235,56068],{"class":73},[36,129237,77],{"class":50},[36,129239,129240],{"class":38,"line":80},[36,129241,250],{"class":50},[1592,129243,129244],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":129246},[129247,129252,129256],{"id":128622,"depth":54,"text":128623,"children":129248},[129249,129250,129251],{"id":128626,"depth":61,"text":128627},{"id":128710,"depth":61,"text":128711},{"id":128758,"depth":61,"text":128759},{"id":128848,"depth":54,"text":128849,"children":129253},[129254,129255],{"id":128852,"depth":61,"text":128853},{"id":128925,"depth":61,"text":128926},{"id":128935,"depth":54,"text":128936,"children":129257},[129258,129259,129260,129261,129262],{"id":128939,"depth":61,"text":128940},{"id":128992,"depth":61,"text":128993},{"id":129008,"depth":61,"text":129009},{"id":129028,"depth":61,"text":129029},{"id":129190,"depth":61,"text":129263},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128614,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129270,"title":129271,"body":129272,"description":24706,"extension":1603,"meta":131195,"navigation":57,"path":131196,"seo":131197,"stem":131198,"__hash__":131199},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129273,"toc":131169},[129274,129277,129281,129290,129294,129320,129325,129328,129331,129334,129337,129341,129344,129354,129362,129366,129401,129406,129409,129412,129415,129418,129422,129425,129434,129438,129451,129456,129459,129462,129465,129469,129472,129476,129479,129534,129537,129568,129571,129625,129629,129632,129798,129921,129924,129927,129930,129933,129937,129940,129944,129947,129950,129954,129957,129988,130015,130043,130046,130050,130076,130119,130123,130217,130220,130247,130250,130253,130256,130259,130262,130265,130268,130271,130274,130278,130335,130362,130366,130414,130418,130459,130461,130464,130467,130470,130473,130477,130569,130572,130575,130578,130582,130705,130906,130910,130914,130917,130920,130923,130927,130930,130933,130958,130961,130964,130967,130970,130973,130977,130985,131047,131050,131108,131111,131114,131117,131120,131123,131126,131129,131166],[10,129275,129271],{"id":129276},"_8-css显示模式与背景特性",[14,129278,129280],{"id":129279},"_81-css元素显示模式","8.1 css元素显示模式",[19,129282,129283,129284,129286,129287,129289],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[33,129285,127494],{},"自己占一行，比如一行可以放多个",[33,129288,127497],{},"，HTML 元素一般分为块元素和行内元素两种类型",[1645,129291,129293],{"id":129292},"_811-块元素","8.1.1 块元素",[19,129295,129296,129297,129299,129300,1880,129303,1880,129305,1880,129307,1880,129310,1880,129313,129316,129317,129319],{},"常见的块元素有",[33,129298,127398],{},"~",[33,129301,129302],{},"\u003Ch6>",[33,129304,127424],{},[33,129306,127494],{},[33,129308,129309],{},"\u003Cul>",[33,129311,129312],{},"\u003Col>",[33,129314,129315],{},"\u003Cli>","等，其中 ",[33,129318,127494],{}," 标签是最典型的块元素",[19,129321,129322],{},[887,129323,129324],{},"块级元素的特点：",[19,129326,129327],{},"① 比较霸道，自己独占一行。",[19,129329,129330],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129332,129333],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129335,129336],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129338,129339],{},[887,129340,1703],{},[19,129342,129343],{},"①文字类的元素内不能使用块级元素",[19,129345,78580,129346,129348,129349,129351,129352],{},[33,129347,127424],{}," 标签主要用于存放文字，因此 ",[33,129350,127424],{}," 里面不能放块级元素，特别是不能放",[33,129353,127494],{},[19,129355,129356,129357,129299,129359,129361],{},"⑥同理， ",[33,129358,127398],{},[33,129360,129302],{},"等都是文字类块级标签，里面也不能放其他块级元素",[1645,129363,129365],{"id":129364},"_812-行内元素","8.1.2 行内元素",[19,129367,129368,129369,1880,129371,1880,129374,1880,129377,1880,129380,1880,129383,1880,129386,1880,129389,1880,129392,1880,129395,129397,129398,129400],{},"常见的行内元素有 ",[33,129370,127656],{},[33,129372,129373],{},"\u003Cstrong>",[33,129375,129376],{},"\u003Cb>",[33,129378,129379],{},"\u003Cem>",[33,129381,129382],{},"\u003Ci>",[33,129384,129385],{},"\u003Cdel>",[33,129387,129388],{},"\u003Cs>",[33,129390,129391],{},"\u003Cins>",[33,129393,129394],{},"\u003Cu>",[33,129396,127497],{}," 等，其中 ",[33,129399,127497],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129402,129403],{},[887,129404,129405],{},"特点：",[19,129407,129408],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129410,129411],{},"② 高、宽直接设置是无效的。",[19,129413,129414],{},"③ 默认宽度就是它本身内容的宽度。",[19,129416,129417],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129419,129420],{},[887,129421,1703],{},[19,129423,129424],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129426,129427,129428,129430,129431,129433],{},"②特殊情况链接 ",[33,129429,127656],{}," 里面可以放块级元素，但是给 ",[33,129432,127656],{}," 转换一下块级模式最安全",[1645,129435,129437],{"id":129436},"_813-行内块元素","8.1.3 行内块元素",[19,129439,129440,129441,1880,129444,1880,129447,129450],{},"在行内元素中有几个特殊的标签 —— ",[33,129442,129443],{},"\u003Cimg \u002F>",[33,129445,129446],{},"\u003Cinput \u002F>",[33,129448,129449],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129452,129453],{},[887,129454,129455],{},"行内块元素的特点：",[19,129457,129458],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129460,129461],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129463,129464],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[1645,129466,129468],{"id":129467},"_814-总结","8.1.4 总结",[2992,129470],{"style":127739,"src":129471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[1645,129473,129475],{"id":129474},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129477,129478],{},"①转换为块元素：display:block;",[26,129480,129482],{"className":127883,"code":129481,"language":127885,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[33,129483,129484,129489,129495,129506,129518,129530],{"__ignoreMap":31},[36,129485,129486],{"class":38,"line":39},[36,129487,129488],{"class":124},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[36,129490,129491,129493],{"class":38,"line":54},[36,129492,1906],{"class":52631},[36,129494,16901],{"class":50},[36,129496,129497,129500,129502,129504],{"class":38,"line":61},[36,129498,129499],{"class":73},"  display",[36,129501,52768],{"class":50},[36,129503,62200],{"class":73},[36,129505,77],{"class":50},[36,129507,129508,129510,129512,129514,129516],{"class":38,"line":80},[36,129509,71899],{"class":73},[36,129511,52768],{"class":50},[36,129513,1979],{"class":73},[36,129515,52823],{"class":42},[36,129517,77],{"class":50},[36,129519,129520,129522,129524,129526,129528],{"class":38,"line":96},[36,129521,72119],{"class":73},[36,129523,52768],{"class":50},[36,129525,2068],{"class":73},[36,129527,52823],{"class":42},[36,129529,77],{"class":50},[36,129531,129532],{"class":38,"line":101},[36,129533,250],{"class":50},[19,129535,129536],{},"②转换为行内元素：display:inline;",[26,129538,129540],{"className":127883,"code":129539,"language":127885,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[33,129541,129542,129547,129553,129564],{"__ignoreMap":31},[36,129543,129544],{"class":38,"line":39},[36,129545,129546],{"class":124},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[36,129548,129549,129551],{"class":38,"line":54},[36,129550,52942],{"class":52631},[36,129552,16901],{"class":50},[36,129554,129555,129557,129559,129562],{"class":38,"line":61},[36,129556,129499],{"class":73},[36,129558,52768],{"class":50},[36,129560,129561],{"class":73},"inline",[36,129563,77],{"class":50},[36,129565,129566],{"class":38,"line":80},[36,129567,250],{"class":50},[19,129569,129570],{},"③转换为行内块：display:inline-block;",[26,129572,129574],{"className":127883,"code":129573,"language":127885,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[33,129575,129576,129581,129587,129597,129609,129621],{"__ignoreMap":31},[36,129577,129578],{"class":38,"line":39},[36,129579,129580],{"class":124},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[36,129582,129583,129585],{"class":38,"line":54},[36,129584,36],{"class":52631},[36,129586,16901],{"class":50},[36,129588,129589,129591,129593,129595],{"class":38,"line":61},[36,129590,129499],{"class":73},[36,129592,52768],{"class":50},[36,129594,73714],{"class":73},[36,129596,77],{"class":50},[36,129598,129599,129601,129603,129605,129607],{"class":38,"line":80},[36,129600,71899],{"class":73},[36,129602,52768],{"class":50},[36,129604,2279],{"class":73},[36,129606,52823],{"class":42},[36,129608,77],{"class":50},[36,129610,129611,129613,129615,129617,129619],{"class":38,"line":96},[36,129612,72119],{"class":73},[36,129614,52768],{"class":50},[36,129616,2618],{"class":73},[36,129618,52823],{"class":42},[36,129620,77],{"class":50},[36,129622,129623],{"class":38,"line":101},[36,129624,250],{"class":50},[1645,129626,129628],{"id":129627},"_816-小米侧边栏","8.1.6 小米侧边栏",[2992,129630],{"style":127739,"src":129631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,129633,129635],{"className":128630,"code":129634,"language":128632,"meta":31,"style":31},"\u003C!-- 小米侧边栏案例 -->\n\u003Cdiv class=\"sidebar\">\n  \u003Ca href=\"#\">手机 电话卡\u003C\u002Fa>\n  \u003Ca href=\"#\">电视 盒子\u003C\u002Fa>\n  \u003Ca href=\"#\">笔记本 平板\u003C\u002Fa>\n  \u003Ca href=\"#\">出行 穿戴\u003C\u002Fa>\n  \u003Ca href=\"#\">智能 路由器\u003C\u002Fa>\n  \u003Ca href=\"#\">健康 儿童\u003C\u002Fa>\n  \u003Ca href=\"#\">耳机 音响\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[33,129636,129637,129642,129657,129676,129695,129714,129733,129752,129771,129790],{"__ignoreMap":31},[36,129638,129639],{"class":38,"line":39},[36,129640,129641],{"class":124},"\u003C!-- 小米侧边栏案例 -->\n",[36,129643,129644,129646,129648,129650,129652,129655],{"class":38,"line":54},[36,129645,2577],{"class":50},[36,129647,52942],{"class":52631},[36,129649,54817],{"class":46},[36,129651,70],{"class":50},[36,129653,129654],{"class":110},"\"sidebar\"",[36,129656,52638],{"class":50},[36,129658,129659,129661,129663,129665,129667,129669,129672,129674],{"class":38,"line":61},[36,129660,53475],{"class":50},[36,129662,1906],{"class":52631},[36,129664,62388],{"class":46},[36,129666,70],{"class":50},[36,129668,62393],{"class":110},[36,129670,129671],{"class":50},">手机 电话卡\u003C\u002F",[36,129673,1906],{"class":52631},[36,129675,52638],{"class":50},[36,129677,129678,129680,129682,129684,129686,129688,129691,129693],{"class":38,"line":80},[36,129679,53475],{"class":50},[36,129681,1906],{"class":52631},[36,129683,62388],{"class":46},[36,129685,70],{"class":50},[36,129687,62393],{"class":110},[36,129689,129690],{"class":50},">电视 盒子\u003C\u002F",[36,129692,1906],{"class":52631},[36,129694,52638],{"class":50},[36,129696,129697,129699,129701,129703,129705,129707,129710,129712],{"class":38,"line":96},[36,129698,53475],{"class":50},[36,129700,1906],{"class":52631},[36,129702,62388],{"class":46},[36,129704,70],{"class":50},[36,129706,62393],{"class":110},[36,129708,129709],{"class":50},">笔记本 平板\u003C\u002F",[36,129711,1906],{"class":52631},[36,129713,52638],{"class":50},[36,129715,129716,129718,129720,129722,129724,129726,129729,129731],{"class":38,"line":101},[36,129717,53475],{"class":50},[36,129719,1906],{"class":52631},[36,129721,62388],{"class":46},[36,129723,70],{"class":50},[36,129725,62393],{"class":110},[36,129727,129728],{"class":50},">出行 穿戴\u003C\u002F",[36,129730,1906],{"class":52631},[36,129732,52638],{"class":50},[36,129734,129735,129737,129739,129741,129743,129745,129748,129750],{"class":38,"line":128},[36,129736,53475],{"class":50},[36,129738,1906],{"class":52631},[36,129740,62388],{"class":46},[36,129742,70],{"class":50},[36,129744,62393],{"class":110},[36,129746,129747],{"class":50},">智能 路由器\u003C\u002F",[36,129749,1906],{"class":52631},[36,129751,52638],{"class":50},[36,129753,129754,129756,129758,129760,129762,129764,129767,129769],{"class":38,"line":149},[36,129755,53475],{"class":50},[36,129757,1906],{"class":52631},[36,129759,62388],{"class":46},[36,129761,70],{"class":50},[36,129763,62393],{"class":110},[36,129765,129766],{"class":50},">健康 儿童\u003C\u002F",[36,129768,1906],{"class":52631},[36,129770,52638],{"class":50},[36,129772,129773,129775,129777,129779,129781,129783,129786,129788],{"class":38,"line":154},[36,129774,53475],{"class":50},[36,129776,1906],{"class":52631},[36,129778,62388],{"class":46},[36,129780,70],{"class":50},[36,129782,62393],{"class":110},[36,129784,129785],{"class":50},">耳机 音响\u003C\u002F",[36,129787,1906],{"class":52631},[36,129789,52638],{"class":50},[36,129791,129792,129794,129796],{"class":38,"line":167},[36,129793,53116],{"class":50},[36,129795,52942],{"class":52631},[36,129797,52638],{"class":50},[26,129799,129801],{"className":127883,"code":129800,"language":127885,"meta":31,"style":31},".sidebar a {\n  display: block;\n  width: 234px;\n  height: 42px;\n  line-height: 42px;\n  padding-left: 30px;\n  color: #fff;\n  background-color: #55585a;\n}\n.sidebar a:hover {\n  background-color: #ff6700;\n}\n",[33,129802,129803,129812,129822,129835,129847,129859,129871,129881,129892,129896,129906,129917],{"__ignoreMap":31},[36,129804,129805,129808,129810],{"class":38,"line":39},[36,129806,129807],{"class":46},".sidebar",[36,129809,474],{"class":52631},[36,129811,16901],{"class":50},[36,129813,129814,129816,129818,129820],{"class":38,"line":54},[36,129815,129499],{"class":73},[36,129817,52768],{"class":50},[36,129819,62200],{"class":73},[36,129821,77],{"class":50},[36,129823,129824,129826,129828,129831,129833],{"class":38,"line":61},[36,129825,71899],{"class":73},[36,129827,52768],{"class":50},[36,129829,129830],{"class":73},"234",[36,129832,52823],{"class":42},[36,129834,77],{"class":50},[36,129836,129837,129839,129841,129843,129845],{"class":38,"line":80},[36,129838,72119],{"class":73},[36,129840,52768],{"class":50},[36,129842,2119],{"class":73},[36,129844,52823],{"class":42},[36,129846,77],{"class":50},[36,129848,129849,129851,129853,129855,129857],{"class":38,"line":96},[36,129850,128567],{"class":73},[36,129852,52768],{"class":50},[36,129854,2119],{"class":73},[36,129856,52823],{"class":42},[36,129858,77],{"class":50},[36,129860,129861,129863,129865,129867,129869],{"class":38,"line":101},[36,129862,72154],{"class":73},[36,129864,52768],{"class":50},[36,129866,2618],{"class":73},[36,129868,52823],{"class":42},[36,129870,77],{"class":50},[36,129872,129873,129875,129877,129879],{"class":38,"line":128},[36,129874,72236],{"class":73},[36,129876,52768],{"class":50},[36,129878,62173],{"class":73},[36,129880,77],{"class":50},[36,129882,129883,129885,129887,129890],{"class":38,"line":149},[36,129884,72209],{"class":73},[36,129886,52768],{"class":50},[36,129888,129889],{"class":73},"#55585a",[36,129891,77],{"class":50},[36,129893,129894],{"class":38,"line":154},[36,129895,250],{"class":50},[36,129897,129898,129900,129902,129904],{"class":38,"line":167},[36,129899,129807],{"class":46},[36,129901,474],{"class":52631},[36,129903,62271],{"class":46},[36,129905,16901],{"class":50},[36,129907,129908,129910,129912,129915],{"class":38,"line":172},[36,129909,72209],{"class":73},[36,129911,52768],{"class":50},[36,129913,129914],{"class":73},"#ff6700",[36,129916,77],{"class":50},[36,129918,129919],{"class":38,"line":192},[36,129920,250],{"class":50},[2992,129922],{"style":127739,"src":129923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129925,129926],{},"行高=盒子高度：实现文字的垂直居中",[19,129928,129929],{},"原理讲解：",[2992,129931],{"style":127739,"src":129932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129934,129936],{"id":129935},"_82-css背景","8.2 css背景",[19,129938,129939],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[1645,129941,129943],{"id":129942},"_821-背景颜色","8.2.1 背景颜色",[19,129945,129946],{},"background-color:颜色值;",[19,129948,129949],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[1645,129951,129953],{"id":129952},"_822-背景图片","8.2.2 背景图片",[19,129955,129956],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,129958,129960],{"className":127883,"code":129959,"language":127885,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[33,129961,129962,129968,129984],{"__ignoreMap":31},[36,129963,129964,129966],{"class":38,"line":39},[36,129965,52942],{"class":52631},[36,129967,16901],{"class":50},[36,129969,129970,129973,129975,129977,129979,129982],{"class":38,"line":54},[36,129971,129972],{"class":73},"  background-image",[36,129974,52768],{"class":50},[36,129976,63057],{"class":73},[36,129978,222],{"class":50},[36,129980,129981],{"class":473},"images\u002Fbg.png",[36,129983,228],{"class":50},[36,129985,129986],{"class":38,"line":61},[36,129987,250],{"class":50},[1806,129989,129990,129999],{},[1809,129991,129992],{},[1812,129993,129994,129997],{},[1815,129995,129996],{"align":25066},"参数值",[1815,129998,104027],{"align":25066},[1852,130000,130001,130008],{},[1812,130002,130003,130005],{},[1857,130004,56068],{"align":25066},[1857,130006,130007],{"align":25066},"无背景图（默认的）",[1812,130009,130010,130012],{},[1857,130011,63057],{"align":25066},[1857,130013,130014],{"align":25066},"使用绝对或相对地址指定背景图像",[26,130016,130017],{"className":127883,"code":129959,"language":127885,"meta":31,"style":31},[33,130018,130019,130025,130039],{"__ignoreMap":31},[36,130020,130021,130023],{"class":38,"line":39},[36,130022,52942],{"class":52631},[36,130024,16901],{"class":50},[36,130026,130027,130029,130031,130033,130035,130037],{"class":38,"line":54},[36,130028,129972],{"class":73},[36,130030,52768],{"class":50},[36,130032,63057],{"class":73},[36,130034,222],{"class":50},[36,130036,129981],{"class":473},[36,130038,228],{"class":50},[36,130040,130041],{"class":38,"line":61},[36,130042,250],{"class":50},[19,130044,130045],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[1645,130047,130049],{"id":130048},"_823-背景平铺","8.2.3 背景平铺",[26,130051,130053],{"className":127883,"code":130052,"language":127885,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[33,130054,130055,130061,130072],{"__ignoreMap":31},[36,130056,130057,130059],{"class":38,"line":39},[36,130058,52942],{"class":52631},[36,130060,16901],{"class":50},[36,130062,130063,130066,130068,130070],{"class":38,"line":54},[36,130064,130065],{"class":73},"  background-repeat",[36,130067,52768],{"class":50},[36,130069,63067],{"class":73},[36,130071,77],{"class":50},[36,130073,130074],{"class":38,"line":61},[36,130075,250],{"class":50},[1806,130077,130078,130086],{},[1809,130079,130080],{},[1812,130081,130082,130084],{},[1815,130083,129996],{"align":25066},[1815,130085,104027],{"align":25066},[1852,130087,130088,130096,130103,130111],{},[1812,130089,130090,130093],{},[1857,130091,130092],{"align":25066},"repeat",[1857,130094,130095],{"align":25066},"背景图像在纵向和横向上平铺（默认的）",[1812,130097,130098,130100],{},[1857,130099,63067],{"align":25066},[1857,130101,130102],{"align":25066},"背景图像不平铺",[1812,130104,130105,130108],{},[1857,130106,130107],{"align":25066},"repeat-x",[1857,130109,130110],{"align":25066},"背景图像在横向上平铺",[1812,130112,130113,130116],{},[1857,130114,130115],{"align":25066},"repeat-y",[1857,130117,130118],{"align":25066},"背景图像在纵向平铺",[1645,130120,130122],{"id":130121},"_824-背景图片位置","8.2.4 背景图片位置",[26,130124,130126],{"className":127883,"code":130125,"language":127885,"meta":31,"style":31},"\u002F* 方位名词 *\u002F\ndiv {\n  background-position: center top;\n}\n\u002F* 精确单位 *\u002F\ndiv {\n  background-position: 20px 50px;\n}\n\u002F* 混合单位 *\u002F\ndiv {\n  background-position: 20px center;\n}\n",[33,130127,130128,130133,130139,130153,130157,130162,130168,130184,130188,130193,130199,130213],{"__ignoreMap":31},[36,130129,130130],{"class":38,"line":39},[36,130131,130132],{"class":124},"\u002F* 方位名词 *\u002F\n",[36,130134,130135,130137],{"class":38,"line":54},[36,130136,52942],{"class":52631},[36,130138,16901],{"class":50},[36,130140,130141,130144,130146,130148,130151],{"class":38,"line":61},[36,130142,130143],{"class":73},"  background-position",[36,130145,52768],{"class":50},[36,130147,52923],{"class":73},[36,130149,130150],{"class":73}," top",[36,130152,77],{"class":50},[36,130154,130155],{"class":38,"line":80},[36,130156,250],{"class":50},[36,130158,130159],{"class":38,"line":96},[36,130160,130161],{"class":124},"\u002F* 精确单位 *\u002F\n",[36,130163,130164,130166],{"class":38,"line":101},[36,130165,52942],{"class":52631},[36,130167,16901],{"class":50},[36,130169,130170,130172,130174,130176,130178,130180,130182],{"class":38,"line":128},[36,130171,130143],{"class":73},[36,130173,52768],{"class":50},[36,130175,2367],{"class":73},[36,130177,52823],{"class":42},[36,130179,58835],{"class":73},[36,130181,52823],{"class":42},[36,130183,77],{"class":50},[36,130185,130186],{"class":38,"line":149},[36,130187,250],{"class":50},[36,130189,130190],{"class":38,"line":154},[36,130191,130192],{"class":124},"\u002F* 混合单位 *\u002F\n",[36,130194,130195,130197],{"class":38,"line":167},[36,130196,52942],{"class":52631},[36,130198,16901],{"class":50},[36,130200,130201,130203,130205,130207,130209,130211],{"class":38,"line":172},[36,130202,130143],{"class":73},[36,130204,52768],{"class":50},[36,130206,2367],{"class":73},[36,130208,52823],{"class":42},[36,130210,18473],{"class":73},[36,130212,77],{"class":50},[36,130214,130215],{"class":38,"line":192},[36,130216,250],{"class":50},[19,130218,130219],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1806,130221,130222,130230],{},[1809,130223,130224],{},[1812,130225,130226,130228],{},[1815,130227,129996],{"align":25066},[1815,130229,27200],{"align":25066},[1852,130231,130232,130239],{},[1812,130233,130234,130236],{},[1857,130235,53299],{"align":25066},[1857,130237,130238],{"align":25066},"百分数|由浮点数和单位标识符组成的长度值",[1812,130240,130241,130244],{},[1857,130242,130243],{"align":25066},"position",[1857,130245,130246],{"align":25066},"top|center|bottom|left|center|right 方位名词",[19,130248,130249],{},"其他说明：",[19,130251,130252],{},"①参数是方位名词",[19,130254,130255],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130257,130258],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130260,130261],{},"②参数是精确单位",[19,130263,130264],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130266,130267],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130269,130270],{},"③参数是混合单位",[19,130272,130273],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[1645,130275,130277],{"id":130276},"_825-背景图片固定","8.2.5 背景图片固定",[26,130279,130281],{"className":127883,"code":130280,"language":127885,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[33,130282,130283,130288,130294,130306,130310,130315,130321,130331],{"__ignoreMap":31},[36,130284,130285],{"class":38,"line":39},[36,130286,130287],{"class":124},"\u002F* 背景滚动（默认） *\u002F\n",[36,130289,130290,130292],{"class":38,"line":54},[36,130291,52942],{"class":52631},[36,130293,16901],{"class":50},[36,130295,130296,130299,130301,130304],{"class":38,"line":61},[36,130297,130298],{"class":73},"  background-attachment",[36,130300,52768],{"class":50},[36,130302,130303],{"class":73},"scroll",[36,130305,77],{"class":50},[36,130307,130308],{"class":38,"line":80},[36,130309,250],{"class":50},[36,130311,130312],{"class":38,"line":96},[36,130313,130314],{"class":124},"\u002F* 背景固定 *\u002F\n",[36,130316,130317,130319],{"class":38,"line":101},[36,130318,52942],{"class":52631},[36,130320,16901],{"class":50},[36,130322,130323,130325,130327,130329],{"class":38,"line":128},[36,130324,130298],{"class":73},[36,130326,52768],{"class":50},[36,130328,87564],{"class":73},[36,130330,77],{"class":50},[36,130332,130333],{"class":38,"line":149},[36,130334,250],{"class":50},[1806,130336,130337,130346],{},[1809,130338,130339],{},[1812,130340,130341,130344],{},[1815,130342,130343],{"align":25066},"参数",[1815,130345,104027],{"align":25066},[1852,130347,130348,130355],{},[1812,130349,130350,130352],{},[1857,130351,130303],{"align":25066},[1857,130353,130354],{"align":25066},"背景图像是随对象内容滚动",[1812,130356,130357,130359],{},[1857,130358,87564],{"align":25066},[1857,130360,130361],{"align":25066},"背景图像固定",[1645,130363,130365],{"id":130364},"_826-背景样式合写","8.2.6 背景样式合写",[26,130367,130369],{"className":127883,"code":130368,"language":127885,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[33,130370,130371,130376,130382,130410],{"__ignoreMap":31},[36,130372,130373],{"class":38,"line":39},[36,130374,130375],{"class":124},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[36,130377,130378,130380],{"class":38,"line":54},[36,130379,52942],{"class":52631},[36,130381,16901],{"class":50},[36,130383,130384,130386,130388,130390,130393,130395,130397,130399,130401,130404,130406,130408],{"class":38,"line":61},[36,130385,71942],{"class":73},[36,130387,52768],{"class":50},[36,130389,62173],{"class":73},[36,130391,130392],{"class":73}," url",[36,130394,222],{"class":50},[36,130396,129981],{"class":473},[36,130398,15043],{"class":50},[36,130400,63067],{"class":73},[36,130402,130403],{"class":73}," fixed",[36,130405,18473],{"class":73},[36,130407,130150],{"class":73},[36,130409,77],{"class":50},[36,130411,130412],{"class":38,"line":80},[36,130413,250],{"class":50},[1645,130415,130417],{"id":130416},"_827-背景色半透明","8.2.7 背景色半透明",[26,130419,130421],{"className":127883,"code":130420,"language":127885,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[33,130422,130423,130429,130455],{"__ignoreMap":31},[36,130424,130425,130427],{"class":38,"line":39},[36,130426,52942],{"class":52631},[36,130428,16901],{"class":50},[36,130430,130431,130433,130435,130437,130439,130441,130443,130445,130447,130449,130451,130453],{"class":38,"line":54},[36,130432,71942],{"class":73},[36,130434,52768],{"class":50},[36,130436,56441],{"class":73},[36,130438,222],{"class":50},[36,130440,1859],{"class":73},[36,130442,477],{"class":50},[36,130444,1859],{"class":73},[36,130446,477],{"class":50},[36,130448,1859],{"class":73},[36,130450,477],{"class":50},[36,130452,101852],{"class":73},[36,130454,228],{"class":50},[36,130456,130457],{"class":38,"line":61},[36,130458,250],{"class":50},[19,130460,100727],{},[19,130462,130463],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130465,130466],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130468,130469],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130471,130472],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[1645,130474,130476],{"id":130475},"_828-总结","8.2.8 总结",[1806,130478,130479,130490],{},[1809,130480,130481],{},[1812,130482,130483,130486,130488],{},[1815,130484,130485],{"align":25066},"属性",[1815,130487,104027],{"align":25066},[1815,130489,1820],{"align":25066},[1852,130491,130492,130503,130514,130525,130536,130547,130558],{},[1812,130493,130494,130497,130500],{},[1857,130495,130496],{"align":25066},"background-color",[1857,130498,130499],{"align":25066},"背景颜色",[1857,130501,130502],{"align":25066},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1812,130504,130505,130508,130511],{},[1857,130506,130507],{"align":25066},"background-image",[1857,130509,130510],{"align":25066},"背景图片",[1857,130512,130513],{"align":25066},"url(图片路径)",[1812,130515,130516,130519,130522],{},[1857,130517,130518],{"align":25066},"background-repeat",[1857,130520,130521],{"align":25066},"是否平铺",[1857,130523,130524],{"align":25066},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1812,130526,130527,130530,130533],{},[1857,130528,130529],{"align":25066},"background-position",[1857,130531,130532],{"align":25066},"背景位置",[1857,130534,130535],{"align":25066},"length\u002Fposition 分别是x和y坐标",[1812,130537,130538,130541,130544],{},[1857,130539,130540],{"align":25066},"background-attachment",[1857,130542,130543],{"align":25066},"背景附着",[1857,130545,130546],{"align":25066},"scroll(背景滚动) \u002Ffixed (背景固定)",[1812,130548,130549,130552,130555],{},[1857,130550,130551],{"align":25066},"背景简写",[1857,130553,130554],{"align":25066},"书写更简单",[1857,130556,130557],{"align":25066},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1812,130559,130560,130563,130566],{},[1857,130561,130562],{"align":25066},"背景半透明",[1857,130564,130565],{"align":25066},"背景颜色半透明",[1857,130567,130568],{"align":25066},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130570,130571],{},"颜色渐变：",[2992,130573],{"style":127739,"src":130574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[2992,130576],{"style":127739,"src":130577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[1645,130579,130581],{"id":130580},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,130583,130585],{"className":128630,"code":130584,"language":128632,"meta":31,"style":31},"\u003Cdiv class=\"nav\">\n  \u003Ca href=\"#\">五彩导航1\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航2\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航3\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航4\u003C\u002Fa>\n  \u003Ca href=\"#\">五彩导航5\u003C\u002Fa>\n\u003C\u002Fdiv>\n",[33,130586,130587,130602,130621,130640,130659,130678,130697],{"__ignoreMap":31},[36,130588,130589,130591,130593,130595,130597,130600],{"class":38,"line":39},[36,130590,2577],{"class":50},[36,130592,52942],{"class":52631},[36,130594,54817],{"class":46},[36,130596,70],{"class":50},[36,130598,130599],{"class":110},"\"nav\"",[36,130601,52638],{"class":50},[36,130603,130604,130606,130608,130610,130612,130614,130617,130619],{"class":38,"line":54},[36,130605,53475],{"class":50},[36,130607,1906],{"class":52631},[36,130609,62388],{"class":46},[36,130611,70],{"class":50},[36,130613,62393],{"class":110},[36,130615,130616],{"class":50},">五彩导航1\u003C\u002F",[36,130618,1906],{"class":52631},[36,130620,52638],{"class":50},[36,130622,130623,130625,130627,130629,130631,130633,130636,130638],{"class":38,"line":61},[36,130624,53475],{"class":50},[36,130626,1906],{"class":52631},[36,130628,62388],{"class":46},[36,130630,70],{"class":50},[36,130632,62393],{"class":110},[36,130634,130635],{"class":50},">五彩导航2\u003C\u002F",[36,130637,1906],{"class":52631},[36,130639,52638],{"class":50},[36,130641,130642,130644,130646,130648,130650,130652,130655,130657],{"class":38,"line":80},[36,130643,53475],{"class":50},[36,130645,1906],{"class":52631},[36,130647,62388],{"class":46},[36,130649,70],{"class":50},[36,130651,62393],{"class":110},[36,130653,130654],{"class":50},">五彩导航3\u003C\u002F",[36,130656,1906],{"class":52631},[36,130658,52638],{"class":50},[36,130660,130661,130663,130665,130667,130669,130671,130674,130676],{"class":38,"line":96},[36,130662,53475],{"class":50},[36,130664,1906],{"class":52631},[36,130666,62388],{"class":46},[36,130668,70],{"class":50},[36,130670,62393],{"class":110},[36,130672,130673],{"class":50},">五彩导航4\u003C\u002F",[36,130675,1906],{"class":52631},[36,130677,52638],{"class":50},[36,130679,130680,130682,130684,130686,130688,130690,130693,130695],{"class":38,"line":101},[36,130681,53475],{"class":50},[36,130683,1906],{"class":52631},[36,130685,62388],{"class":46},[36,130687,70],{"class":50},[36,130689,62393],{"class":110},[36,130691,130692],{"class":50},">五彩导航5\u003C\u002F",[36,130694,1906],{"class":52631},[36,130696,52638],{"class":50},[36,130698,130699,130701,130703],{"class":38,"line":128},[36,130700,53116],{"class":50},[36,130702,52942],{"class":52631},[36,130704,52638],{"class":50},[26,130706,130708],{"className":127883,"code":130707,"language":127885,"meta":31,"style":31},".nav a {\n  display: inline-block;\n  width: 120px;\n  height: 58px;\n  text-align: center;\n  line-height: 58px;\n  color: #fff;\n}\n.nav a:nth-child(1) { background-color: #ff6700; }\n.nav a:nth-child(2) { background-color: #ff0000; }\n.nav a:nth-child(3) { background-color: #00a4ff; }\n.nav a:nth-child(4) { background-color: #ff00ff; }\n.nav a:nth-child(5) { background-color: #00ff00; }\n",[33,130709,130710,130719,130729,130741,130753,130763,130775,130785,130789,130814,130837,130860,130883],{"__ignoreMap":31},[36,130711,130712,130715,130717],{"class":38,"line":39},[36,130713,130714],{"class":46},".nav",[36,130716,474],{"class":52631},[36,130718,16901],{"class":50},[36,130720,130721,130723,130725,130727],{"class":38,"line":54},[36,130722,129499],{"class":73},[36,130724,52768],{"class":50},[36,130726,73714],{"class":73},[36,130728,77],{"class":50},[36,130730,130731,130733,130735,130737,130739],{"class":38,"line":61},[36,130732,71899],{"class":73},[36,130734,52768],{"class":50},[36,130736,2484],{"class":73},[36,130738,52823],{"class":42},[36,130740,77],{"class":50},[36,130742,130743,130745,130747,130749,130751],{"class":38,"line":80},[36,130744,72119],{"class":73},[36,130746,52768],{"class":50},[36,130748,2523],{"class":73},[36,130750,52823],{"class":42},[36,130752,77],{"class":50},[36,130754,130755,130757,130759,130761],{"class":38,"line":96},[36,130756,71857],{"class":73},[36,130758,52768],{"class":50},[36,130760,52923],{"class":73},[36,130762,77],{"class":50},[36,130764,130765,130767,130769,130771,130773],{"class":38,"line":101},[36,130766,128567],{"class":73},[36,130768,52768],{"class":50},[36,130770,2523],{"class":73},[36,130772,52823],{"class":42},[36,130774,77],{"class":50},[36,130776,130777,130779,130781,130783],{"class":38,"line":128},[36,130778,72236],{"class":73},[36,130780,52768],{"class":50},[36,130782,62173],{"class":73},[36,130784,77],{"class":50},[36,130786,130787],{"class":38,"line":149},[36,130788,250],{"class":50},[36,130790,130791,130793,130795,130798,130800,130802,130805,130807,130809,130811],{"class":38,"line":154},[36,130792,130714],{"class":46},[36,130794,474],{"class":52631},[36,130796,130797],{"class":46},":nth-child",[36,130799,222],{"class":50},[36,130801,1885],{"class":73},[36,130803,130804],{"class":50},") { ",[36,130806,130496],{"class":73},[36,130808,52768],{"class":50},[36,130810,129914],{"class":73},[36,130812,130813],{"class":50},"; }\n",[36,130815,130816,130818,130820,130822,130824,130826,130828,130830,130832,130835],{"class":38,"line":167},[36,130817,130714],{"class":46},[36,130819,474],{"class":52631},[36,130821,130797],{"class":46},[36,130823,222],{"class":50},[36,130825,1747],{"class":73},[36,130827,130804],{"class":50},[36,130829,130496],{"class":73},[36,130831,52768],{"class":50},[36,130833,130834],{"class":73},"#ff0000",[36,130836,130813],{"class":50},[36,130838,130839,130841,130843,130845,130847,130849,130851,130853,130855,130858],{"class":38,"line":172},[36,130840,130714],{"class":46},[36,130842,474],{"class":52631},[36,130844,130797],{"class":46},[36,130846,222],{"class":50},[36,130848,1741],{"class":73},[36,130850,130804],{"class":50},[36,130852,130496],{"class":73},[36,130854,52768],{"class":50},[36,130856,130857],{"class":73},"#00a4ff",[36,130859,130813],{"class":50},[36,130861,130862,130864,130866,130868,130870,130872,130874,130876,130878,130881],{"class":38,"line":192},[36,130863,130714],{"class":46},[36,130865,474],{"class":52631},[36,130867,130797],{"class":46},[36,130869,222],{"class":50},[36,130871,1961],{"class":73},[36,130873,130804],{"class":50},[36,130875,130496],{"class":73},[36,130877,52768],{"class":50},[36,130879,130880],{"class":73},"#ff00ff",[36,130882,130813],{"class":50},[36,130884,130885,130887,130889,130891,130893,130895,130897,130899,130901,130904],{"class":38,"line":211},[36,130886,130714],{"class":46},[36,130888,474],{"class":52631},[36,130890,130797],{"class":46},[36,130892,222],{"class":50},[36,130894,1987],{"class":73},[36,130896,130804],{"class":50},[36,130898,130496],{"class":73},[36,130900,52768],{"class":50},[36,130902,130903],{"class":73},"#00ff00",[36,130905,130813],{"class":50},[14,130907,130909],{"id":130908},"_83-css三大特性","8.3 css三大特性",[1645,130911,130913],{"id":130912},"_831-层叠性","8.3.1 层叠性",[19,130915,130916],{},"为了解决样式冲突问题",[19,130918,130919],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130921,130922],{},"   ②样式不冲突，不会层叠",[1645,130924,130926],{"id":130925},"_832-继承性","8.3.2 继承性",[19,130928,130929],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130931,130932],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,130934,130936],{"className":127883,"code":130935,"language":127885,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[33,130937,130938,130944,130954],{"__ignoreMap":31},[36,130939,130940,130942],{"class":38,"line":39},[36,130941,19],{"class":52631},[36,130943,16901],{"class":50},[36,130945,130946,130948,130950,130952],{"class":38,"line":54},[36,130947,72236],{"class":73},[36,130949,52768],{"class":50},[36,130951,63700],{"class":73},[36,130953,77],{"class":50},[36,130955,130956],{"class":38,"line":61},[36,130957,250],{"class":50},[2992,130959],{"style":127739,"src":130960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130962,130963],{},"解释：①行高可以跟单位也可以不跟单位",[19,130965,130966],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130968,130969],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130971,130972],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[1645,130974,130976],{"id":130975},"_833-优先级","8.3.3 优先级",[256,130978,130979,130982],{},[259,130980,130981],{},"选择器相同，则执行层叠性",[259,130983,130984],{},"选择器不同，则根据选择器权重执行",[1806,130986,130987,130997],{},[1809,130988,130989],{},[1812,130990,130991,130994],{},[1815,130992,130993],{"align":25066},"选择器",[1815,130995,130996],{"align":25066},"选择器权重",[1852,130998,130999,131007,131015,131023,131031,131039],{},[1812,131000,131001,131004],{},[1857,131002,131003],{"align":25066},"继承 或者*",[1857,131005,131006],{"align":25066},"0，0，0，0",[1812,131008,131009,131012],{},[1857,131010,131011],{"align":25066},"标签选择器",[1857,131013,131014],{"align":25066},"0，0，0，1",[1812,131016,131017,131020],{},[1857,131018,131019],{"align":25066},"类选择器，伪类选择器",[1857,131021,131022],{"align":25066},"0，0，1，0",[1812,131024,131025,131028],{},[1857,131026,131027],{"align":25066},"ID选择器",[1857,131029,131030],{"align":25066},"0，1，0，0",[1812,131032,131033,131036],{},[1857,131034,131035],{"align":25066},"行内样式",[1857,131037,131038],{"align":25066},"1，0，0，0",[1812,131040,131041,131044],{},[1857,131042,131043],{"align":25066},"！important",[1857,131045,131046],{"align":25066},"无穷大",[19,131048,131049],{},"! important用法：",[26,131051,131053],{"className":127883,"code":131052,"language":127885,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[33,131054,131055,131060,131066,131079,131083,131088,131094,131104],{"__ignoreMap":31},[36,131056,131057],{"class":38,"line":39},[36,131058,131059],{"class":124},"\u002F* !important 拥有最高优先级 *\u002F\n",[36,131061,131062,131064],{"class":38,"line":54},[36,131063,52942],{"class":52631},[36,131065,16901],{"class":50},[36,131067,131068,131070,131072,131074,131077],{"class":38,"line":61},[36,131069,72236],{"class":73},[36,131071,52768],{"class":50},[36,131073,52976],{"class":73},[36,131075,131076],{"class":42}," !important",[36,131078,77],{"class":50},[36,131080,131081],{"class":38,"line":80},[36,131082,250],{"class":50},[36,131084,131085],{"class":38,"line":96},[36,131086,131087],{"class":124},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[36,131089,131090,131092],{"class":38,"line":101},[36,131091,52942],{"class":52631},[36,131093,16901],{"class":50},[36,131095,131096,131098,131100,131102],{"class":38,"line":128},[36,131097,72236],{"class":73},[36,131099,52768],{"class":50},[36,131101,58752],{"class":73},[36,131103,77],{"class":50},[36,131105,131106],{"class":38,"line":149},[36,131107,250],{"class":50},[19,131109,131110],{},"优先级注意点：",[19,131112,131113],{},"①权重是有4组数字组成,但是不会有进位",[19,131115,131116],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131118,131119],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131121,131122],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131124,131125],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131127,131128],{},"⑥复合选择器",[1806,131130,131131,131141],{},[1809,131132,131133],{},[1812,131134,131135,131138],{},[1815,131136,131137],{"align":25066},"div ul li",[1815,131139,131140],{"align":25066},"0,0,0,3",[1852,131142,131143,131151,131159],{},[1812,131144,131145,131148],{},[1857,131146,131147],{"align":25066},".nav ul li",[1857,131149,131150],{"align":25066},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1812,131152,131153,131156],{},[1857,131154,131155],{"align":25066},"a:hover",[1857,131157,131158],{"align":25066},"0,0,1,1",[1812,131160,131161,131164],{},[1857,131162,131163],{"align":25066},".nav a",[1857,131165,131158],{"align":25066},[1592,131167,131168],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":131170},[131171,131179,131190],{"id":129279,"depth":54,"text":129280,"children":131172},[131173,131174,131175,131176,131177,131178],{"id":129292,"depth":61,"text":129293},{"id":129364,"depth":61,"text":129365},{"id":129436,"depth":61,"text":129437},{"id":129467,"depth":61,"text":129468},{"id":129474,"depth":61,"text":129475},{"id":129627,"depth":61,"text":129628},{"id":129935,"depth":54,"text":129936,"children":131180},[131181,131182,131183,131184,131185,131186,131187,131188,131189],{"id":129942,"depth":61,"text":129943},{"id":129952,"depth":61,"text":129953},{"id":130048,"depth":61,"text":130049},{"id":130121,"depth":61,"text":130122},{"id":130276,"depth":61,"text":130277},{"id":130364,"depth":61,"text":130365},{"id":130416,"depth":61,"text":130417},{"id":130475,"depth":61,"text":130476},{"id":130580,"depth":61,"text":130581},{"id":130908,"depth":54,"text":130909,"children":131191},[131192,131193,131194],{"id":130912,"depth":61,"text":130913},{"id":130925,"depth":61,"text":130926},{"id":130975,"depth":61,"text":130976},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129271,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131201,"title":131202,"body":131203,"description":24706,"extension":1603,"meta":132793,"navigation":57,"path":132794,"seo":132795,"stem":132796,"__hash__":132797},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131204,"toc":132772},[131205,131208,131212,131215,131218,131221,131224,131227,131230,131233,131237,131245,131282,131318,131321,131335,131340,131374,131377,131470,131475,131478,131508,131511,131516,131524,131528,131535,131581,131625,131630,131633,131636,131639,131642,131645,131648,131650,131653,131657,131662,131706,131711,131714,131717,131754,131759,131762,131765,131768,131771,131803,131806,131809,131812,131844,131847,131850,131853,131857,131860,131892,131895,131899,131919,131922,131930,131933,131937,131942,131945,131977,131982,131985,132023,132027,132032,132035,132038,132069,132072,132089,132094,132146,132206,132211,132265,132303,132307,132311,132314,132318,132326,132329,132331,132342,132347,132395,132429,132432,132435,132438,132441,132485,132488,132491,132494,132497,132500,132503,132547,132550,132553,132556,132559,132562,132565,132571,132574,132618,132621,132624,132627,132630,132633,132677,132680,132682,132685,132689,132693,132731,132735,132738,132741,132745,132753,132757,132760,132763,132766,132769],[10,131206,131202],{"id":131207},"_9-css盒模型浮动与切图",[14,131209,131211],{"id":131210},"_91-盒子模型","9.1 盒子模型",[19,131213,131214],{},"利用盒子来设计网页",[19,131216,131217],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131219,131220],{},"网页布局设置：",[19,131222,131223],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131225,131226],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131228,131229],{},"③往盒子里装内容",[2992,131231],{"style":127739,"src":131232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[1645,131234,131236],{"id":131235},"_911-边框border","9.1.1 边框（border）",[256,131238,131239,131242],{},[259,131240,131241],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[259,131243,131244],{},"语法",[26,131246,131248],{"className":127883,"code":131247,"language":127885,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[33,131249,131250,131255,131261,131278],{"__ignoreMap":31},[36,131251,131252],{"class":38,"line":39},[36,131253,131254],{"class":124},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[36,131256,131257,131259],{"class":38,"line":54},[36,131258,52942],{"class":52631},[36,131260,16901],{"class":50},[36,131262,131263,131265,131267,131269,131271,131273,131276],{"class":38,"line":61},[36,131264,72227],{"class":73},[36,131266,52768],{"class":50},[36,131268,1885],{"class":73},[36,131270,52823],{"class":42},[36,131272,52852],{"class":73},[36,131274,131275],{"class":73}," #ccc",[36,131277,77],{"class":50},[36,131279,131280],{"class":38,"line":80},[36,131281,250],{"class":50},[1806,131283,131284,131292],{},[1809,131285,131286],{},[1812,131287,131288,131290],{},[1815,131289,130485],{"align":25066},[1815,131291,104027],{"align":25066},[1852,131293,131294,131302,131310],{},[1812,131295,131296,131299],{},[1857,131297,131298],{"align":25066},"border-width",[1857,131300,131301],{"align":25066},"定义边框粗细，单位是px",[1812,131303,131304,131307],{},[1857,131305,131306],{"align":25066},"border-style",[1857,131308,131309],{"align":25066},"边框的样式",[1812,131311,131312,131315],{},[1857,131313,131314],{"align":25066},"border-color",[1857,131316,131317],{"align":25066},"边框的颜色",[19,131319,131320],{},"边框样式 border-style 可以设置如下值：",[2674,131322,131323,131326,131329,131332],{},[259,131324,131325],{},"none：没有边框即忽略所有边框的宽度（默认值）",[259,131327,131328],{},"solid：边框为单实线(最为常用的)",[259,131330,131331],{},"dashed：边框为虚线",[259,131333,131334],{},"dotted：边框为点线",[256,131336,131337],{"start":61},[259,131338,131339],{},"边框的合写分写",[26,131341,131342],{"className":127883,"code":131247,"language":127885,"meta":31,"style":31},[33,131343,131344,131348,131354,131370],{"__ignoreMap":31},[36,131345,131346],{"class":38,"line":39},[36,131347,131254],{"class":124},[36,131349,131350,131352],{"class":38,"line":54},[36,131351,52942],{"class":52631},[36,131353,16901],{"class":50},[36,131355,131356,131358,131360,131362,131364,131366,131368],{"class":38,"line":61},[36,131357,72227],{"class":73},[36,131359,52768],{"class":50},[36,131361,1885],{"class":73},[36,131363,52823],{"class":42},[36,131365,52852],{"class":73},[36,131367,131275],{"class":73},[36,131369,77],{"class":50},[36,131371,131372],{"class":38,"line":80},[36,131373,250],{"class":50},[19,131375,131376],{},"边框分开写法：",[26,131378,131380],{"className":127883,"code":131379,"language":127885,"meta":31,"style":31},"\u002F* 边框分开写法 *\u002F\ndiv {\n  border-top: 1px solid #000;\n  border-right: 2px dashed #333;\n  border-bottom: 3px dotted #666;\n  border-left: 1px solid #999;\n}\n",[33,131381,131382,131387,131393,131411,131429,131448,131466],{"__ignoreMap":31},[36,131383,131384],{"class":38,"line":39},[36,131385,131386],{"class":124},"\u002F* 边框分开写法 *\u002F\n",[36,131388,131389,131391],{"class":38,"line":54},[36,131390,52942],{"class":52631},[36,131392,16901],{"class":50},[36,131394,131395,131398,131400,131402,131404,131406,131409],{"class":38,"line":61},[36,131396,131397],{"class":73},"  border-top",[36,131399,52768],{"class":50},[36,131401,1885],{"class":73},[36,131403,52823],{"class":42},[36,131405,52852],{"class":73},[36,131407,131408],{"class":73}," #000",[36,131410,77],{"class":50},[36,131412,131413,131416,131418,131420,131422,131424,131427],{"class":38,"line":80},[36,131414,131415],{"class":73},"  border-right",[36,131417,52768],{"class":50},[36,131419,1747],{"class":73},[36,131421,52823],{"class":42},[36,131423,63572],{"class":73},[36,131425,131426],{"class":73}," #333",[36,131428,77],{"class":50},[36,131430,131431,131434,131436,131438,131440,131443,131446],{"class":38,"line":96},[36,131432,131433],{"class":73},"  border-bottom",[36,131435,52768],{"class":50},[36,131437,1741],{"class":73},[36,131439,52823],{"class":42},[36,131441,131442],{"class":73}," dotted",[36,131444,131445],{"class":73}," #666",[36,131447,77],{"class":50},[36,131449,131450,131453,131455,131457,131459,131461,131464],{"class":38,"line":101},[36,131451,131452],{"class":73},"  border-left",[36,131454,52768],{"class":50},[36,131456,1885],{"class":73},[36,131458,52823],{"class":42},[36,131460,52852],{"class":73},[36,131462,131463],{"class":73}," #999",[36,131465,77],{"class":50},[36,131467,131468],{"class":38,"line":128},[36,131469,250],{"class":50},[256,131471,131472],{"start":80},[259,131473,131474],{},"表格的细线边框",[19,131476,131477],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,131479,131481],{"className":127883,"code":131480,"language":127885,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[33,131482,131483,131488,131494,131504],{"__ignoreMap":31},[36,131484,131485],{"class":38,"line":39},[36,131486,131487],{"class":124},"\u002F* 表格细线边框合并 *\u002F\n",[36,131489,131490,131492],{"class":38,"line":54},[36,131491,1806],{"class":52631},[36,131493,16901],{"class":50},[36,131495,131496,131498,131500,131502],{"class":38,"line":61},[36,131497,71909],{"class":73},[36,131499,52768],{"class":50},[36,131501,66366],{"class":73},[36,131503,77],{"class":50},[36,131505,131506],{"class":38,"line":80},[36,131507,250],{"class":50},[19,131509,131510],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[256,131512,131513],{"start":96},[259,131514,131515],{},"解决边框额外增加盒子的实际大小的方法：",[2674,131517,131518,131521],{},[259,131519,131520],{},"测量盒子大小的时候,不量边框",[259,131522,131523],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[1645,131525,131527],{"id":131526},"_912-内边距","9.1.2 内边距",[256,131529,131530,131533],{},[259,131531,131532],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[259,131534,131244],{},[1806,131536,131537,131547],{},[1809,131538,131539],{},[1812,131540,131541,131544],{},[1815,131542,131543],{"align":25066},"值的个数",[1815,131545,131546],{"align":25066},"表达意思",[1852,131548,131549,131557,131565,131573],{},[1812,131550,131551,131554],{},[1857,131552,131553],{"align":25066},"padding: 5px;",[1857,131555,131556],{"align":25066},"1个值，代表上下左右都有5个元素",[1812,131558,131559,131562],{},[1857,131560,131561],{"align":25066},"padding: 5px 10px;",[1857,131563,131564],{"align":25066},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1812,131566,131567,131570],{},[1857,131568,131569],{"align":25066},"padding: 5px 10px 20px;",[1857,131571,131572],{"align":25066},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1812,131574,131575,131578],{},[1857,131576,131577],{"align":25066},"padding: 5px 10px 20px 30px;",[1857,131579,131580],{"align":25066},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1806,131582,131583,131591],{},[1809,131584,131585],{},[1812,131586,131587,131589],{},[1815,131588,130485],{"align":25066},[1815,131590,104027],{"align":25066},[1852,131592,131593,131601,131609,131617],{},[1812,131594,131595,131598],{},[1857,131596,131597],{"align":25066},"padding-left",[1857,131599,131600],{"align":25066},"左内边距",[1812,131602,131603,131606],{},[1857,131604,131605],{"align":25066},"padding-right",[1857,131607,131608],{"align":25066},"右内边距",[1812,131610,131611,131614],{},[1857,131612,131613],{"align":25066},"padding-top",[1857,131615,131616],{"align":25066},"上内边距",[1812,131618,131619,131622],{},[1857,131620,131621],{"align":25066},"padding-bottom",[1857,131623,131624],{"align":25066},"下内边距",[256,131626,131627],{"start":61},[259,131628,131629],{},"内边距会影响盒子的实际大小",[19,131631,131632],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131634,131635],{},"①内容和边框有了距离，添加了内边距",[19,131637,131638],{},"②padding影响了盒子实际大小",[19,131640,131641],{},"内边距对盒子大小的影响：",[19,131643,131644],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131646,131647],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131649,96551],{},[19,131651,131652],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[1645,131654,131656],{"id":131655},"_913-外边距","9.1.3 外边距",[256,131658,131659],{},[259,131660,131661],{},"控制盒子与盒子之间的距离",[1806,131663,131664,131672],{},[1809,131665,131666],{},[1812,131667,131668,131670],{},[1815,131669,130485],{"align":25066},[1815,131671,104027],{"align":25066},[1852,131673,131674,131682,131690,131698],{},[1812,131675,131676,131679],{},[1857,131677,131678],{"align":25066},"margin-left",[1857,131680,131681],{"align":25066},"左外边距",[1812,131683,131684,131687],{},[1857,131685,131686],{"align":25066},"margin-right",[1857,131688,131689],{"align":25066},"右外边距",[1812,131691,131692,131695],{},[1857,131693,131694],{"align":25066},"margin-top",[1857,131696,131697],{"align":25066},"上外边距",[1812,131699,131700,131703],{},[1857,131701,131702],{"align":25066},"margin-bottom",[1857,131704,131705],{"align":25066},"下外边距",[256,131707,131708],{"start":54},[259,131709,131710],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131712,131713],{},"①盒子必须指定了宽度（width）",[19,131715,131716],{},"②盒子左右的外边距都设置为 auto",[26,131718,131720],{"className":127883,"code":131719,"language":127885,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,131721,131722,131727,131734,131750],{"__ignoreMap":31},[36,131723,131724],{"class":38,"line":39},[36,131725,131726],{"class":124},"\u002F* margin 复合写法（同上） *\u002F\n",[36,131728,131729,131732],{"class":38,"line":54},[36,131730,131731],{"class":46},".box",[36,131733,16901],{"class":50},[36,131735,131736,131738,131740,131742,131744,131747],{"class":38,"line":61},[36,131737,71801],{"class":73},[36,131739,52768],{"class":50},[36,131741,1859],{"class":73},[36,131743,52887],{"class":73},[36,131745,131746],{"class":50},";  ",[36,131748,131749],{"class":124},"\u002F* 块级盒子水平居中 *\u002F\n",[36,131751,131752],{"class":38,"line":80},[36,131753,250],{"class":50},[256,131755,131756],{"start":61},[259,131757,131758],{},"外边距塌陷问题",[19,131760,131761],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[2992,131763],{"style":127739,"src":131764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131766,131767],{},"解决方案：",[19,131769,131770],{},"①可以为父亲元素定义上边距",[26,131772,131773],{"className":127883,"code":131719,"language":127885,"meta":31,"style":31},[33,131774,131775,131779,131785,131799],{"__ignoreMap":31},[36,131776,131777],{"class":38,"line":39},[36,131778,131726],{"class":124},[36,131780,131781,131783],{"class":38,"line":54},[36,131782,131731],{"class":46},[36,131784,16901],{"class":50},[36,131786,131787,131789,131791,131793,131795,131797],{"class":38,"line":61},[36,131788,71801],{"class":73},[36,131790,52768],{"class":50},[36,131792,1859],{"class":73},[36,131794,52887],{"class":73},[36,131796,131746],{"class":50},[36,131798,131749],{"class":124},[36,131800,131801],{"class":38,"line":80},[36,131802,250],{"class":50},[19,131804,131805],{},"②可以为父亲元素定义上内边距",[19,131807,131808],{},"③可以为父亲元素添加overflow:hidden",[2992,131810],{"style":127739,"src":131811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,131813,131814],{"className":127883,"code":131719,"language":127885,"meta":31,"style":31},[33,131815,131816,131820,131826,131840],{"__ignoreMap":31},[36,131817,131818],{"class":38,"line":39},[36,131819,131726],{"class":124},[36,131821,131822,131824],{"class":38,"line":54},[36,131823,131731],{"class":46},[36,131825,16901],{"class":50},[36,131827,131828,131830,131832,131834,131836,131838],{"class":38,"line":61},[36,131829,71801],{"class":73},[36,131831,52768],{"class":50},[36,131833,1859],{"class":73},[36,131835,52887],{"class":73},[36,131837,131746],{"class":50},[36,131839,131749],{"class":124},[36,131841,131842],{"class":38,"line":80},[36,131843,250],{"class":50},[2992,131845],{"style":127739,"src":131846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131848,131849],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131851,131852],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[1645,131854,131856],{"id":131855},"_914-清除内外边距","9.1.4 清除内外边距",[19,131858,131859],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,131861,131862],{"className":127883,"code":131719,"language":127885,"meta":31,"style":31},[33,131863,131864,131868,131874,131888],{"__ignoreMap":31},[36,131865,131866],{"class":38,"line":39},[36,131867,131726],{"class":124},[36,131869,131870,131872],{"class":38,"line":54},[36,131871,131731],{"class":46},[36,131873,16901],{"class":50},[36,131875,131876,131878,131880,131882,131884,131886],{"class":38,"line":61},[36,131877,71801],{"class":73},[36,131879,52768],{"class":50},[36,131881,1859],{"class":73},[36,131883,52887],{"class":73},[36,131885,131746],{"class":50},[36,131887,131749],{"class":124},[36,131889,131890],{"class":38,"line":80},[36,131891,250],{"class":50},[19,131893,131894],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[1645,131896,131898],{"id":131897},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2674,131900,131901,131904,131907,131910,131913,131916],{},[259,131902,131903],{},"文件→打开 ：可以打开我们要测量的图片",[259,131905,131906],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[259,131908,131909],{},"右击标尺，把里面的单位改为像素",[259,131911,131912],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[259,131914,131915],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[259,131917,131918],{},"用选区拖动 可以测量大小",[2992,131920],{"style":127739,"src":131921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2674,131923,131924,131927],{},[259,131925,131926],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[259,131928,131929],{},"吸管取色工具",[2992,131931],{"style":127739,"src":131932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[1645,131934,131936],{"id":131935},"_916-案例","9.1.6 案例",[256,131938,131939],{},[259,131940,131941],{},"小米商品",[2992,131943],{"style":127739,"src":131944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,131946,131947],{"className":127883,"code":131719,"language":127885,"meta":31,"style":31},[33,131948,131949,131953,131959,131973],{"__ignoreMap":31},[36,131950,131951],{"class":38,"line":39},[36,131952,131726],{"class":124},[36,131954,131955,131957],{"class":38,"line":54},[36,131956,131731],{"class":46},[36,131958,16901],{"class":50},[36,131960,131961,131963,131965,131967,131969,131971],{"class":38,"line":61},[36,131962,71801],{"class":73},[36,131964,52768],{"class":50},[36,131966,1859],{"class":73},[36,131968,52887],{"class":73},[36,131970,131746],{"class":50},[36,131972,131749],{"class":124},[36,131974,131975],{"class":38,"line":80},[36,131976,250],{"class":50},[256,131978,131979],{"start":54},[259,131980,131981],{},"快报模块",[2992,131983],{"style":127739,"src":131984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,131986,131988],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[33,131989,131990,131995,132010,132015],{"__ignoreMap":31},[36,131991,131992],{"class":38,"line":39},[36,131993,131994],{"class":124},"\u003C!-- HTML 代码示例 -->\n",[36,131996,131997,131999,132001,132003,132005,132008],{"class":38,"line":54},[36,131998,2577],{"class":50},[36,132000,52942],{"class":52631},[36,132002,54817],{"class":46},[36,132004,70],{"class":50},[36,132006,132007],{"class":110},"\"example\"",[36,132009,52638],{"class":50},[36,132011,132012],{"class":38,"line":61},[36,132013,132014],{"class":50},"  示例内容\n",[36,132016,132017,132019,132021],{"class":38,"line":80},[36,132018,53116],{"class":50},[36,132020,52942],{"class":52631},[36,132022,52638],{"class":50},[1645,132024,132026],{"id":132025},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[256,132028,132029],{},[259,132030,132031],{},"圆角边框",[19,132033,132034],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[2992,132036],{"style":127739,"src":132037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,132039,132041],{"className":127883,"code":132040,"language":127885,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[33,132042,132043,132049,132065],{"__ignoreMap":31},[36,132044,132045,132047],{"class":38,"line":39},[36,132046,52942],{"class":52631},[36,132048,16901],{"class":50},[36,132050,132051,132053,132055,132057,132059,132061,132063],{"class":38,"line":54},[36,132052,72227],{"class":73},[36,132054,52768],{"class":50},[36,132056,1885],{"class":73},[36,132058,52823],{"class":42},[36,132060,52852],{"class":73},[36,132062,131275],{"class":73},[36,132064,77],{"class":50},[36,132066,132067],{"class":38,"line":61},[36,132068,250],{"class":50},[19,132070,132071],{},"解释:",[2674,132073,132074,132077,132080,132083,132086],{},[259,132075,132076],{},"参数值可以为数值或百分比的形式",[259,132078,132079],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[259,132081,132082],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[259,132084,132085],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[259,132087,132088],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[256,132090,132091],{"start":54},[259,132092,132093],{},"盒子阴影",[26,132095,132097],{"className":127883,"code":132096,"language":127885,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[33,132098,132099,132105,132142],{"__ignoreMap":31},[36,132100,132101,132103],{"class":38,"line":39},[36,132102,52942],{"class":52631},[36,132104,16901],{"class":50},[36,132106,132107,132110,132112,132114,132116,132118,132120,132122,132124,132126,132128,132130,132132,132134,132136,132138,132140],{"class":38,"line":54},[36,132108,132109],{"class":73},"  box-shadow",[36,132111,52768],{"class":50},[36,132113,1859],{"class":73},[36,132115,16084],{"class":73},[36,132117,52823],{"class":42},[36,132119,74],{"class":73},[36,132121,52823],{"class":42},[36,132123,80098],{"class":73},[36,132125,222],{"class":50},[36,132127,1859],{"class":73},[36,132129,477],{"class":50},[36,132131,1859],{"class":73},[36,132133,477],{"class":50},[36,132135,1859],{"class":73},[36,132137,477],{"class":50},[36,132139,87541],{"class":73},[36,132141,228],{"class":50},[36,132143,132144],{"class":38,"line":61},[36,132145,250],{"class":50},[1806,132147,132148,132156],{},[1809,132149,132150],{},[1812,132151,132152,132154],{},[1815,132153,1820],{"align":25066},[1815,132155,28820],{"align":25066},[1852,132157,132158,132166,132174,132182,132190,132198],{},[1812,132159,132160,132163],{},[1857,132161,132162],{"align":25066},"h-shadow",[1857,132164,132165],{"align":25066},"必需,水平阴影的位置,允许负值",[1812,132167,132168,132171],{},[1857,132169,132170],{"align":25066},"v-shadow",[1857,132172,132173],{"align":25066},"必需,垂直阴影的位置,允许负值",[1812,132175,132176,132179],{},[1857,132177,132178],{"align":25066},"blur",[1857,132180,132181],{"align":25066},"可选,模糊距离,就是影子的虚实",[1812,132183,132184,132187],{},[1857,132185,132186],{"align":25066},"spread",[1857,132188,132189],{"align":25066},"可选,阴影尺寸",[1812,132191,132192,132195],{},[1857,132193,132194],{"align":25066},"color",[1857,132196,132197],{"align":25066},"可选,阴影的颜色",[1812,132199,132200,132203],{},[1857,132201,132202],{"align":25066},"inset",[1857,132204,132205],{"align":25066},"可选,将外部阴影(outset)改为内部阴影",[256,132207,132208],{"start":61},[259,132209,132210],{},"文字阴影",[26,132212,132214],{"className":127883,"code":132213,"language":127885,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[33,132215,132216,132222,132261],{"__ignoreMap":31},[36,132217,132218,132220],{"class":38,"line":39},[36,132219,19],{"class":52631},[36,132221,16901],{"class":50},[36,132223,132224,132227,132229,132231,132233,132235,132237,132239,132241,132243,132245,132247,132249,132251,132253,132255,132257,132259],{"class":38,"line":54},[36,132225,132226],{"class":73},"  text-shadow",[36,132228,52768],{"class":50},[36,132230,1885],{"class":73},[36,132232,52823],{"class":42},[36,132234,26449],{"class":73},[36,132236,52823],{"class":42},[36,132238,16084],{"class":73},[36,132240,52823],{"class":42},[36,132242,80098],{"class":73},[36,132244,222],{"class":50},[36,132246,1859],{"class":73},[36,132248,477],{"class":50},[36,132250,1859],{"class":73},[36,132252,477],{"class":50},[36,132254,1859],{"class":73},[36,132256,477],{"class":50},[36,132258,101852],{"class":73},[36,132260,228],{"class":50},[36,132262,132263],{"class":38,"line":61},[36,132264,250],{"class":50},[1806,132266,132267,132275],{},[1809,132268,132269],{},[1812,132270,132271,132273],{},[1815,132272,1820],{"align":25066},[1815,132274,28820],{"align":25066},[1852,132276,132277,132283,132290,132297],{},[1812,132278,132279,132281],{},[1857,132280,132162],{"align":25066},[1857,132282,132165],{"align":25066},[1812,132284,132285,132287],{},[1857,132286,132170],{"align":25066},[1857,132288,132289],{"align":25066},"必需,垂直阴影位置,允许负值",[1812,132291,132292,132294],{},[1857,132293,132178],{"align":25066},[1857,132295,132296],{"align":25066},"可选,模糊的距离",[1812,132298,132299,132301],{},[1857,132300,132194],{"align":25066},[1857,132302,132197],{"align":25066},[14,132304,132306],{"id":132305},"_92-浮动","9.2 浮动",[1645,132308,132310],{"id":132309},"_921-浮动介绍","9.2.1 浮动介绍",[19,132312,132313],{},"在16.2中详细介绍",[1645,132315,132317],{"id":132316},"_922-清除浮动","9.2.2 清除浮动",[256,132319,132320,132323],{},[259,132321,132322],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[259,132324,132325],{},"清除浮动的本质",[19,132327,132328],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132330,885],{},[2674,132332,132333,132336,132339],{},[259,132334,132335],{},"如果父盒子本身有高度，则不需要清除浮动",[259,132337,132338],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[259,132340,132341],{},"父级有了高度，就不会影响下面的标准流了",[256,132343,132344],{"start":61},[259,132345,132346],{},"清除浮动样式",[26,132348,132350],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[33,132351,132352,132359,132370,132374,132381,132391],{"__ignoreMap":31},[36,132353,132354,132357],{"class":38,"line":39},[36,132355,132356],{"class":46},".left",[36,132358,16901],{"class":50},[36,132360,132361,132364,132366,132368],{"class":38,"line":54},[36,132362,132363],{"class":73},"  float",[36,132365,52768],{"class":50},[36,132367,25066],{"class":73},[36,132369,77],{"class":50},[36,132371,132372],{"class":38,"line":61},[36,132373,250],{"class":50},[36,132375,132376,132379],{"class":38,"line":80},[36,132377,132378],{"class":46},".right",[36,132380,16901],{"class":50},[36,132382,132383,132385,132387,132389],{"class":38,"line":96},[36,132384,132363],{"class":73},[36,132386,52768],{"class":50},[36,132388,73853],{"class":73},[36,132390,77],{"class":50},[36,132392,132393],{"class":38,"line":101},[36,132394,250],{"class":50},[1806,132396,132397,132405],{},[1809,132398,132399],{},[1812,132400,132401,132403],{},[1815,132402,128347],{"align":25066},[1815,132404,28820],{"align":25066},[1852,132406,132407,132414,132421],{},[1812,132408,132409,132411],{},[1857,132410,25066],{"align":25066},[1857,132412,132413],{"align":25066},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1812,132415,132416,132418],{},[1857,132417,73853],{"align":25066},[1857,132419,132420],{"align":25066},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1812,132422,132423,132426],{},[1857,132424,132425],{"align":25066},"both",[1857,132427,132428],{"align":25066},"同时清除左右侧浮动的影响",[19,132430,132431],{},"法一",[19,132433,132434],{},"额外标签法也称为隔墙法",[19,132436,132437],{},"使用方式：",[19,132439,132440],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,132442,132443],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,132444,132445,132451,132461,132465,132471,132481],{"__ignoreMap":31},[36,132446,132447,132449],{"class":38,"line":39},[36,132448,132356],{"class":46},[36,132450,16901],{"class":50},[36,132452,132453,132455,132457,132459],{"class":38,"line":54},[36,132454,132363],{"class":73},[36,132456,52768],{"class":50},[36,132458,25066],{"class":73},[36,132460,77],{"class":50},[36,132462,132463],{"class":38,"line":61},[36,132464,250],{"class":50},[36,132466,132467,132469],{"class":38,"line":80},[36,132468,132378],{"class":46},[36,132470,16901],{"class":50},[36,132472,132473,132475,132477,132479],{"class":38,"line":96},[36,132474,132363],{"class":73},[36,132476,52768],{"class":50},[36,132478,73853],{"class":73},[36,132480,77],{"class":50},[36,132482,132483],{"class":38,"line":101},[36,132484,250],{"class":50},[19,132486,132487],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132489,132490],{},"优点： 通俗易懂，书写方便",[19,132492,132493],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132495,132496],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132498,132499],{},"法二",[19,132501,132502],{},"父级添加overflow属性",[26,132504,132505],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,132506,132507,132513,132523,132527,132533,132543],{"__ignoreMap":31},[36,132508,132509,132511],{"class":38,"line":39},[36,132510,132356],{"class":46},[36,132512,16901],{"class":50},[36,132514,132515,132517,132519,132521],{"class":38,"line":54},[36,132516,132363],{"class":73},[36,132518,52768],{"class":50},[36,132520,25066],{"class":73},[36,132522,77],{"class":50},[36,132524,132525],{"class":38,"line":61},[36,132526,250],{"class":50},[36,132528,132529,132531],{"class":38,"line":80},[36,132530,132378],{"class":46},[36,132532,16901],{"class":50},[36,132534,132535,132537,132539,132541],{"class":38,"line":96},[36,132536,132363],{"class":73},[36,132538,52768],{"class":50},[36,132540,73853],{"class":73},[36,132542,77],{"class":50},[36,132544,132545],{"class":38,"line":101},[36,132546,250],{"class":50},[19,132548,132549],{},"overflow: hidden;",[19,132551,132552],{},"优点：代码简洁",[19,132554,132555],{},"缺点：无法显示溢出的部分",[19,132557,132558],{},"注意：是给父元素添加代码",[19,132560,132561],{},"法三",[19,132563,132564],{},"父级添加after伪元素",[19,132566,132567,132570],{},[132568,132569],"after",{}," 方式是额外标签法的升级版",[19,132572,132573],{},"使用的时候复制就可以",[26,132575,132576],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,132577,132578,132584,132594,132598,132604,132614],{"__ignoreMap":31},[36,132579,132580,132582],{"class":38,"line":39},[36,132581,132356],{"class":46},[36,132583,16901],{"class":50},[36,132585,132586,132588,132590,132592],{"class":38,"line":54},[36,132587,132363],{"class":73},[36,132589,52768],{"class":50},[36,132591,25066],{"class":73},[36,132593,77],{"class":50},[36,132595,132596],{"class":38,"line":61},[36,132597,250],{"class":50},[36,132599,132600,132602],{"class":38,"line":80},[36,132601,132378],{"class":46},[36,132603,16901],{"class":50},[36,132605,132606,132608,132610,132612],{"class":38,"line":96},[36,132607,132363],{"class":73},[36,132609,52768],{"class":50},[36,132611,73853],{"class":73},[36,132613,77],{"class":50},[36,132615,132616],{"class":38,"line":101},[36,132617,250],{"class":50},[19,132619,132620],{},"优点：没有增加标签，结构更简单",[19,132622,132623],{},"缺点：照顾低版本浏览器",[19,132625,132626],{},"代表网站： 百度、淘宝网、网易等",[19,132628,132629],{},"法四",[19,132631,132632],{},"父级添加双伪元素",[26,132634,132635],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,132636,132637,132643,132653,132657,132663,132673],{"__ignoreMap":31},[36,132638,132639,132641],{"class":38,"line":39},[36,132640,132356],{"class":46},[36,132642,16901],{"class":50},[36,132644,132645,132647,132649,132651],{"class":38,"line":54},[36,132646,132363],{"class":73},[36,132648,52768],{"class":50},[36,132650,25066],{"class":73},[36,132652,77],{"class":50},[36,132654,132655],{"class":38,"line":61},[36,132656,250],{"class":50},[36,132658,132659,132661],{"class":38,"line":80},[36,132660,132378],{"class":46},[36,132662,16901],{"class":50},[36,132664,132665,132667,132669,132671],{"class":38,"line":96},[36,132666,132363],{"class":73},[36,132668,52768],{"class":50},[36,132670,73853],{"class":73},[36,132672,77],{"class":50},[36,132674,132675],{"class":38,"line":101},[36,132676,250],{"class":50},[19,132678,132679],{},"优点：代码更简洁",[19,132681,132623],{},[19,132683,132684],{},"代表网站：小米、腾讯等",[14,132686,132688],{"id":132687},"_93-ps切图","9.3 PS切图",[1645,132690,132692],{"id":132691},"_931-常见图片格式","9.3.1 常见图片格式",[1806,132694,132695,132705],{},[1809,132696,132697],{},[1812,132698,132699,132702],{},[1815,132700,132701],{"align":25066},"jpg图像格式",[1815,132703,132704],{"align":25066},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1852,132706,132707,132715,132723],{},[1812,132708,132709,132712],{},[1857,132710,132711],{"align":25066},"gif图像格式",[1857,132713,132714],{"align":25066},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1812,132716,132717,132720],{},[1857,132718,132719],{"align":25066},"png图像格式",[1857,132721,132722],{"align":25066},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1812,132724,132725,132728],{},[1857,132726,132727],{"align":25066},"PSD图像格式",[1857,132729,132730],{"align":25066},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[1645,132732,132734],{"id":132733},"_932-图层切图","9.3.2 图层切图",[19,132736,132737],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132739,132740],{},"按住shift选中两个图层->图层菜单->合并图层",[1645,132742,132744],{"id":132743},"_933-切片切图","9.3.3 切片切图",[2674,132746,132747,132750],{},[259,132748,132749],{},"利用切片工具手动划出",[259,132751,132752],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[1645,132754,132756],{"id":132755},"_934-切图步骤","9.3.4 切图步骤",[19,132758,132759],{},"用切片工具选中：",[2992,132761],{"style":127739,"src":132762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132764,132765],{},"文件 -> 导出",[2992,132767],{"style":127739,"src":132768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1592,132770,132771],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":132773},[132774,132783,132787],{"id":131210,"depth":54,"text":131211,"children":132775},[132776,132777,132778,132779,132780,132781,132782],{"id":131235,"depth":61,"text":131236},{"id":131526,"depth":61,"text":131527},{"id":131655,"depth":61,"text":131656},{"id":131855,"depth":61,"text":131856},{"id":131897,"depth":61,"text":131898},{"id":131935,"depth":61,"text":131936},{"id":132025,"depth":61,"text":132026},{"id":132305,"depth":54,"text":132306,"children":132784},[132785,132786],{"id":132309,"depth":61,"text":132310},{"id":132316,"depth":61,"text":132317},{"id":132687,"depth":54,"text":132688,"children":132788},[132789,132790,132791,132792],{"id":132691,"depth":61,"text":132692},{"id":132733,"depth":61,"text":132734},{"id":132743,"depth":61,"text":132744},{"id":132755,"depth":61,"text":132756},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131202,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132799,"title":132800,"body":132801,"description":24706,"extension":1603,"meta":133442,"navigation":57,"path":133443,"seo":133444,"stem":133445,"__hash__":133446},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132802,"toc":133430},[132803,132806,132810,132836,132870,132874,132878,132881,132923,132930,132940,132948,132950,132953,132956,132959,132966,132980,132984,132987,133016,133020,133023,133037,133041,133044,133072,133076,133079,133105,133109,133114,133147,133152,133180,133184,133201,133247,133252,133296,133313,133420,133428],[10,132804,132800],{"id":132805},"_10-css规范与学成在线案例",[14,132807,132809],{"id":132808},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[256,132811,132812,132818,132824,132830],{},[259,132813,132814,132817],{},[887,132815,132816],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[259,132819,132820,132823],{},[887,132821,132822],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[259,132825,132826,132829],{},[887,132827,132828],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[259,132831,132832,132835],{},[887,132833,132834],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,132837,132838],{"className":127883,"code":131247,"language":127885,"meta":31,"style":31},[33,132839,132840,132844,132850,132866],{"__ignoreMap":31},[36,132841,132842],{"class":38,"line":39},[36,132843,131254],{"class":124},[36,132845,132846,132848],{"class":38,"line":54},[36,132847,52942],{"class":52631},[36,132849,16901],{"class":50},[36,132851,132852,132854,132856,132858,132860,132862,132864],{"class":38,"line":61},[36,132853,72227],{"class":73},[36,132855,52768],{"class":50},[36,132857,1885],{"class":73},[36,132859,52823],{"class":42},[36,132861,52852],{"class":73},[36,132863,131275],{"class":73},[36,132865,77],{"class":50},[36,132867,132868],{"class":38,"line":80},[36,132869,250],{"class":50},[14,132871,132873],{"id":132872},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[1645,132875,132877],{"id":132876},"_1021-header头部制作","10.2.1 header头部制作",[2992,132879],{"style":127739,"src":132880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2674,132882,132883,132890,132897,132903,132910,132917],{},[259,132884,132885,132886,132889],{},"1号是版心盒子 ",[887,132887,132888],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[259,132891,132892,132893,132896],{},"版心盒子 里面包含 2号盒子 ",[887,132894,132895],{},"logo"," 图标",[259,132898,132899,132900,132902],{},"版心盒子 里面包含 3号盒子 ",[887,132901,55044],{}," 导航栏",[259,132904,132905,132906,132909],{},"版心盒子 里面包含 4号盒子 ",[887,132907,132908],{},"search"," 搜索框",[259,132911,132912,132913,132916],{},"版心盒子 里面包含 5号盒子 ",[887,132914,132915],{},"user"," 个人信息",[259,132918,132919,132920],{},"注意，要求里面的 ",[887,132921,132922],{},"4个子盒子 必须都浮动",[256,132924,132925],{},[259,132926,132927],{},[887,132928,132929],{},"导航栏注意点:",[19,132931,132932,132933,132936,132937],{},"实际开发中， ",[887,132934,132935],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[887,132938,132939],{},"用 li 包含链接(li+a)的做法",[2674,132941,132942,132945],{},[259,132943,132944],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[259,132946,132947],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132949,885],{},[19,132951,132952],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132954,132955],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132957,132958],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[256,132960,132961],{"start":54},[259,132962,132963],{},[887,132964,132965],{},"4号盒子search的细节：",[2674,132967,132968,132971,132974],{},[259,132969,132970],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[259,132972,132973],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[259,132975,132976,132979],{},[33,132977,132978],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[1645,132981,132983],{"id":132982},"_1022-banner制作","10.2.2 banner制作",[2992,132985],{"style":127739,"src":132986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2674,132988,132989,132996,133002,133009],{},[259,132990,132991,132992,132995],{},"1号盒子是通栏的大盒子 ",[887,132993,132994],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[259,132997,132998,132999,133001],{},"2号盒子是版心 ",[887,133000,2462],{}," ， 要水平居中对齐",[259,133003,133004,133005,133008],{},"3号盒子版心内，左对齐 ",[887,133006,133007],{},"subnav"," 侧导航栏",[259,133010,133011,133012,133015],{},"4号盒子版心内，右对齐 ",[887,133013,133014],{},"course"," 课程",[1645,133017,133019],{"id":133018},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[2992,133021],{"style":127739,"src":133022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2674,133024,133025,133028,133031,133034],{},[259,133026,133027],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[259,133029,133030],{},"1号盒子是标题 H3 左侧浮动",[259,133032,133033],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[259,133035,133036],{},"3号盒子 右浮动 mod 修改",[1645,133038,133040],{"id":133039},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[2992,133042],{"style":127739,"src":133043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2674,133045,133046,133052,133059,133066,133069],{},[259,133047,133048,133049,133051],{},"1号盒子为最大的盒子 ",[887,133050,55045],{}," 版心水平居中对齐",[259,133053,133054,133055,133058],{},"2号盒子为上面部分 ",[887,133056,133057],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[259,133060,133061,133062,133065],{},"3号盒子为底下部分 ",[887,133063,133064],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[259,133067,133068],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[259,133070,133071],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[1645,133073,133075],{"id":133074},"_1025-底部模块制作","10.2.5 底部模块制作",[2992,133077],{"style":127739,"src":133078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2674,133080,133081,133088,133091,133098],{},[259,133082,133083,133084,133087],{},"1号盒子通栏大盒子 底部 ",[887,133085,133086],{},"footer"," 给高度 底色是白色",[259,133089,133090],{},"2号盒子版心水平居中",[259,133092,133093,133094,133097],{},"3号盒子版权 ",[887,133095,133096],{},"copyright"," 左对齐",[259,133099,133100,133101,133104],{},"4号盒子 链接组 ",[887,133102,133103],{},"links"," 右对齐",[1645,133106,133108],{"id":133107},"_1026-代码模块","10.2.6 代码模块",[256,133110,133111],{},[259,133112,133113],{},"html部分",[26,133115,133117],{"className":128630,"code":133116,"language":128632,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[33,133118,133119],{"__ignoreMap":31},[36,133120,133121,133123,133125,133127,133129,133132,133135,133137,133140,133143,133145],{"class":38,"line":39},[36,133122,2577],{"class":50},[36,133124,1906],{"class":52631},[36,133126,62388],{"class":46},[36,133128,70],{"class":50},[36,133130,133131],{"class":110},"\"https:\u002F\u002Fexample.com\"",[36,133133,133134],{"class":46}," target",[36,133136,70],{"class":50},[36,133138,133139],{"class":110},"\"_blank\"",[36,133141,133142],{"class":50},">链接文字\u003C\u002F",[36,133144,1906],{"class":52631},[36,133146,52638],{"class":50},[256,133148,133149],{"start":54},[259,133150,133151],{},"css部分",[26,133153,133154],{"className":128630,"code":133116,"language":128632,"meta":31,"style":31},[33,133155,133156],{"__ignoreMap":31},[36,133157,133158,133160,133162,133164,133166,133168,133170,133172,133174,133176,133178],{"class":38,"line":39},[36,133159,2577],{"class":50},[36,133161,1906],{"class":52631},[36,133163,62388],{"class":46},[36,133165,70],{"class":50},[36,133167,133131],{"class":110},[36,133169,133134],{"class":46},[36,133171,70],{"class":50},[36,133173,133139],{"class":110},[36,133175,133142],{"class":50},[36,133177,1906],{"class":52631},[36,133179,52638],{"class":50},[1645,133181,133183],{"id":133182},"_1027-收获","10.2.7 收获",[256,133185,133186,133189,133192,133195,133198],{},[259,133187,133188],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[259,133190,133191],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[259,133193,133194],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[259,133196,133197],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[259,133199,133200],{},"遗忘代码",[26,133202,133204],{"className":127883,"code":133203,"language":127885,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[33,133205,133206,133228,133233,133243],{"__ignoreMap":31},[36,133207,133208,133210,133212,133214,133216,133218,133220,133222,133224,133226],{"class":38,"line":39},[36,133209,52942],{"class":52631},[36,133211,477],{"class":50},[36,133213,19],{"class":52631},[36,133215,477],{"class":50},[36,133217,10],{"class":52631},[36,133219,477],{"class":50},[36,133221,2674],{"class":52631},[36,133223,477],{"class":50},[36,133225,259],{"class":52631},[36,133227,16901],{"class":50},[36,133229,133230],{"class":38,"line":54},[36,133231,133232],{"class":124},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[36,133234,133235,133237,133239,133241],{"class":38,"line":61},[36,133236,129499],{"class":73},[36,133238,52768],{"class":50},[36,133240,62200],{"class":73},[36,133242,77],{"class":50},[36,133244,133245],{"class":38,"line":80},[36,133246,250],{"class":50},[256,133248,133249],{"start":101},[259,133250,133251],{},"html引css的程序",[26,133253,133254],{"className":127883,"code":133203,"language":127885,"meta":31,"style":31},[33,133255,133256,133278,133282,133292],{"__ignoreMap":31},[36,133257,133258,133260,133262,133264,133266,133268,133270,133272,133274,133276],{"class":38,"line":39},[36,133259,52942],{"class":52631},[36,133261,477],{"class":50},[36,133263,19],{"class":52631},[36,133265,477],{"class":50},[36,133267,10],{"class":52631},[36,133269,477],{"class":50},[36,133271,2674],{"class":52631},[36,133273,477],{"class":50},[36,133275,259],{"class":52631},[36,133277,16901],{"class":50},[36,133279,133280],{"class":38,"line":54},[36,133281,133232],{"class":124},[36,133283,133284,133286,133288,133290],{"class":38,"line":61},[36,133285,129499],{"class":73},[36,133287,52768],{"class":50},[36,133289,62200],{"class":73},[36,133291,77],{"class":50},[36,133293,133294],{"class":38,"line":80},[36,133295,250],{"class":50},[256,133297,133298,133301,133304,133307,133310],{"start":128},[259,133299,133300],{},"浮动的盒子不会有外边距合并问题",[259,133302,133303],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[259,133305,133306],{},"ctrl+g快速定位行；shift+alt多个光标",[259,133308,133309],{},"学习上方各个模块的选择器起名方法，以后就这样用",[259,133311,133312],{},"在写选择器时尽量写全一些，例如",[26,133314,133316],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},"\u002F* 静态定位（默认） *\u002F\n.static { position: static; }\n\u002F* 相对定位 *\u002F\n.relative { position: relative; }\n\u002F* 绝对定位 *\u002F\n.absolute { position: absolute; }\n\u002F* 固定定位 *\u002F\n.fixed { position: fixed; }\n\u002F* 粘性定位 *\u002F\n.sticky { position: sticky; }\n",[33,133317,133318,133323,133339,133344,133359,133364,133379,133384,133399,133404],{"__ignoreMap":31},[36,133319,133320],{"class":38,"line":39},[36,133321,133322],{"class":124},"\u002F* 静态定位（默认） *\u002F\n",[36,133324,133325,133328,133330,133332,133334,133337],{"class":38,"line":54},[36,133326,133327],{"class":46},".static",[36,133329,81138],{"class":50},[36,133331,130243],{"class":73},[36,133333,52768],{"class":50},[36,133335,133336],{"class":73},"static",[36,133338,130813],{"class":50},[36,133340,133341],{"class":38,"line":61},[36,133342,133343],{"class":124},"\u002F* 相对定位 *\u002F\n",[36,133345,133346,133349,133351,133353,133355,133357],{"class":38,"line":80},[36,133347,133348],{"class":46},".relative",[36,133350,81138],{"class":50},[36,133352,130243],{"class":73},[36,133354,52768],{"class":50},[36,133356,56095],{"class":73},[36,133358,130813],{"class":50},[36,133360,133361],{"class":38,"line":96},[36,133362,133363],{"class":124},"\u002F* 绝对定位 *\u002F\n",[36,133365,133366,133369,133371,133373,133375,133377],{"class":38,"line":101},[36,133367,133368],{"class":46},".absolute",[36,133370,81138],{"class":50},[36,133372,130243],{"class":73},[36,133374,52768],{"class":50},[36,133376,56162],{"class":73},[36,133378,130813],{"class":50},[36,133380,133381],{"class":38,"line":128},[36,133382,133383],{"class":124},"\u002F* 固定定位 *\u002F\n",[36,133385,133386,133389,133391,133393,133395,133397],{"class":38,"line":149},[36,133387,133388],{"class":46},".fixed",[36,133390,81138],{"class":50},[36,133392,130243],{"class":73},[36,133394,52768],{"class":50},[36,133396,87564],{"class":73},[36,133398,130813],{"class":50},[36,133400,133401],{"class":38,"line":154},[36,133402,133403],{"class":124},"\u002F* 粘性定位 *\u002F\n",[36,133405,133406,133409,133411,133413,133415,133418],{"class":38,"line":167},[36,133407,133408],{"class":46},".sticky",[36,133410,81138],{"class":50},[36,133412,130243],{"class":73},[36,133414,52768],{"class":50},[36,133416,133417],{"class":73},"sticky",[36,133419,130813],{"class":50},[256,133421,133422,133425],{"start":192},[259,133423,133424],{},"一定要用好注释",[259,133426,133427],{},"浮动的盒子不会有外边距合并的问题",[1592,133429,132771],{},{"title":31,"searchDepth":54,"depth":54,"links":133431},[133432,133433],{"id":132808,"depth":54,"text":132809},{"id":132872,"depth":54,"text":132873,"children":133434},[133435,133436,133437,133438,133439,133440,133441],{"id":132876,"depth":61,"text":132877},{"id":132982,"depth":61,"text":132983},{"id":133018,"depth":61,"text":133019},{"id":133039,"depth":61,"text":133040},{"id":133074,"depth":61,"text":133075},{"id":133107,"depth":61,"text":133108},{"id":133182,"depth":61,"text":133183},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132800,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133448,"title":133449,"body":133450,"description":24706,"extension":1603,"meta":134936,"navigation":57,"path":134937,"seo":134938,"stem":134939,"__hash__":134940},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133451,"toc":134928},[133452,133455,133459,133463,133474,133478,133495,133539,133572,133575,133592,133595,133598,133642,133646,133650,133653,133656,133660,133663,133674,133737,133778,133781,133796,133850,133858,133861,133872,133926,133952,133955,133968,134022,134054,134108,134131,134185,134188,134191,134198,134252,134273,134327,134330,134333,134418,134426,134483,134506,134510,134513,134531,134535,134554,134608,134646,134650,134653,134656,134678,134682,134690,134693,134698,134709,134712,134716,134730,134774,134777,134781,134784,134789,134815,134820,134897,134900,134904,134907,134910,134913,134916,134919,134922,134925],[10,133453,133449],{"id":133454},"_11-传统布局与定位体系",[14,133456,133458],{"id":133457},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[1645,133460,133462],{"id":133461},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2674,133464,133465,133468,133471],{},[259,133466,133467],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[259,133469,133470],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[259,133472,133473],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[1645,133475,133477],{"id":133476},"_1112-浮动","11.1.2 浮动",[2674,133479,133480,133483,133486,133489,133492],{},[259,133481,133482],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[259,133484,133485],{},"浮动可以改变元素标签默认的排列方式",[259,133487,133488],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[259,133490,133491],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[259,133493,133494],{},"在使用行内块转换时盒子之间是有空隙的",[26,133496,133497],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,133498,133499,133505,133515,133519,133525,133535],{"__ignoreMap":31},[36,133500,133501,133503],{"class":38,"line":39},[36,133502,132356],{"class":46},[36,133504,16901],{"class":50},[36,133506,133507,133509,133511,133513],{"class":38,"line":54},[36,133508,132363],{"class":73},[36,133510,52768],{"class":50},[36,133512,25066],{"class":73},[36,133514,77],{"class":50},[36,133516,133517],{"class":38,"line":61},[36,133518,250],{"class":50},[36,133520,133521,133523],{"class":38,"line":80},[36,133522,132378],{"class":46},[36,133524,16901],{"class":50},[36,133526,133527,133529,133531,133533],{"class":38,"line":96},[36,133528,132363],{"class":73},[36,133530,52768],{"class":50},[36,133532,73853],{"class":73},[36,133534,77],{"class":50},[36,133536,133537],{"class":38,"line":101},[36,133538,250],{"class":50},[1806,133540,133541,133549],{},[1809,133542,133543],{},[1812,133544,133545,133547],{},[1815,133546,128347],{"align":25066},[1815,133548,28820],{"align":25066},[1852,133550,133551,133558,133565],{},[1812,133552,133553,133555],{},[1857,133554,56068],{"align":25066},[1857,133556,133557],{"align":25066},"元素不浮动（默认值）",[1812,133559,133560,133562],{},[1857,133561,25066],{"align":25066},[1857,133563,133564],{"align":25066},"元素向左浮动",[1812,133566,133567,133569],{},[1857,133568,73853],{"align":25066},[1857,133570,133571],{"align":25066},"元素向右浮动",[19,133573,133574],{},"浮动重点：",[2674,133576,133577,133580,133583,133586,133589],{},[259,133578,133579],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[259,133581,133582],{},"浮动的元素会一行内显示并且元素顶部对齐",[259,133584,133585],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[259,133587,133588],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[259,133590,133591],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133593,133594],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133596,133597],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,133599,133600],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,133601,133602,133608,133618,133622,133628,133638],{"__ignoreMap":31},[36,133603,133604,133606],{"class":38,"line":39},[36,133605,132356],{"class":46},[36,133607,16901],{"class":50},[36,133609,133610,133612,133614,133616],{"class":38,"line":54},[36,133611,132363],{"class":73},[36,133613,52768],{"class":50},[36,133615,25066],{"class":73},[36,133617,77],{"class":50},[36,133619,133620],{"class":38,"line":61},[36,133621,250],{"class":50},[36,133623,133624,133626],{"class":38,"line":80},[36,133625,132378],{"class":46},[36,133627,16901],{"class":50},[36,133629,133630,133632,133634,133636],{"class":38,"line":96},[36,133631,132363],{"class":73},[36,133633,52768],{"class":50},[36,133635,73853],{"class":73},[36,133637,77],{"class":50},[36,133639,133640],{"class":38,"line":101},[36,133641,250],{"class":50},[1645,133643,133645],{"id":133644},"_1113-定位","11.1.3 定位",[23327,133647,133649],{"id":133648},"_11131-使用场景","11.1.3.1 使用场景",[19,133651,133652],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133654,133655],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23327,133657,133659],{"id":133658},"_11132-定位组成","11.1.3.2 定位组成",[19,133661,133662],{},"定位 = 定位模式 + 边偏移",[256,133664,133665],{},[259,133666,133667,133670,133671],{},[887,133668,133669],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[887,133672,133673],{},"定位模式",[26,133675,133677],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[33,133678,133679,133685,133699,133716,133733],{"__ignoreMap":31},[36,133680,133681,133683],{"class":38,"line":39},[36,133682,131731],{"class":46},[36,133684,16901],{"class":50},[36,133686,133687,133690,133692,133694,133696],{"class":38,"line":54},[36,133688,133689],{"class":73},"  position",[36,133691,52768],{"class":50},[36,133693,56095],{"class":73},[36,133695,131746],{"class":50},[36,133697,133698],{"class":124},"\u002F* 定位模式 *\u002F\n",[36,133700,133701,133704,133706,133708,133710,133713],{"class":38,"line":61},[36,133702,133703],{"class":73},"  top",[36,133705,52768],{"class":50},[36,133707,2113],{"class":73},[36,133709,52823],{"class":42},[36,133711,133712],{"class":50},";           ",[36,133714,133715],{"class":124},"\u002F* 边偏移：上 *\u002F\n",[36,133717,133718,133721,133723,133725,133727,133730],{"class":38,"line":80},[36,133719,133720],{"class":73},"  left",[36,133722,52768],{"class":50},[36,133724,2367],{"class":73},[36,133726,52823],{"class":42},[36,133728,133729],{"class":50},";          ",[36,133731,133732],{"class":124},"\u002F* 边偏移：左 *\u002F\n",[36,133734,133735],{"class":38,"line":96},[36,133736,250],{"class":50},[1806,133738,133739,133748],{},[1809,133740,133741],{},[1812,133742,133743,133745],{},[1815,133744,1820],{"align":25066},[1815,133746,133747],{"align":25066},"语义",[1852,133749,133750,133757,133764,133771],{},[1812,133751,133752,133754],{},[1857,133753,133336],{"align":25066},[1857,133755,133756],{"align":25066},"静态定位",[1812,133758,133759,133761],{},[1857,133760,56095],{"align":25066},[1857,133762,133763],{"align":25066},"相对定位",[1812,133765,133766,133768],{},[1857,133767,56162],{"align":25066},[1857,133769,133770],{"align":25066},"绝对定位",[1812,133772,133773,133775],{},[1857,133774,87564],{"align":25066},[1857,133776,133777],{"align":25066},"固定定位",[19,133779,133780],{},"（1）静态定位：",[2674,133782,133783,133794],{},[259,133784,133785,133786,133789,133790,133793],{},"静态定位是元素的 ",[887,133787,133788],{},"默认定位方式"," ， ",[887,133791,133792],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[259,133795,6670],{},[26,133797,133798],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,133799,133800,133806,133818,133832,133846],{"__ignoreMap":31},[36,133801,133802,133804],{"class":38,"line":39},[36,133803,131731],{"class":46},[36,133805,16901],{"class":50},[36,133807,133808,133810,133812,133814,133816],{"class":38,"line":54},[36,133809,133689],{"class":73},[36,133811,52768],{"class":50},[36,133813,56095],{"class":73},[36,133815,131746],{"class":50},[36,133817,133698],{"class":124},[36,133819,133820,133822,133824,133826,133828,133830],{"class":38,"line":61},[36,133821,133703],{"class":73},[36,133823,52768],{"class":50},[36,133825,2113],{"class":73},[36,133827,52823],{"class":42},[36,133829,133712],{"class":50},[36,133831,133715],{"class":124},[36,133833,133834,133836,133838,133840,133842,133844],{"class":38,"line":80},[36,133835,133720],{"class":73},[36,133837,52768],{"class":50},[36,133839,2367],{"class":73},[36,133841,52823],{"class":42},[36,133843,133729],{"class":50},[36,133845,133732],{"class":124},[36,133847,133848],{"class":38,"line":96},[36,133849,250],{"class":50},[2674,133851,133852,133855],{},[259,133853,133854],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[259,133856,133857],{},"静态定位在布局时我们几乎不用的",[19,133859,133860],{},"（2）相对定位",[2674,133862,133863,133870],{},[259,133864,133865,133866,133869],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[887,133867,133868],{},"原来的位置"," 来说的（自恋型）",[259,133871,6670],{},[26,133873,133874],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,133875,133876,133882,133894,133908,133922],{"__ignoreMap":31},[36,133877,133878,133880],{"class":38,"line":39},[36,133879,131731],{"class":46},[36,133881,16901],{"class":50},[36,133883,133884,133886,133888,133890,133892],{"class":38,"line":54},[36,133885,133689],{"class":73},[36,133887,52768],{"class":50},[36,133889,56095],{"class":73},[36,133891,131746],{"class":50},[36,133893,133698],{"class":124},[36,133895,133896,133898,133900,133902,133904,133906],{"class":38,"line":61},[36,133897,133703],{"class":73},[36,133899,52768],{"class":50},[36,133901,2113],{"class":73},[36,133903,52823],{"class":42},[36,133905,133712],{"class":50},[36,133907,133715],{"class":124},[36,133909,133910,133912,133914,133916,133918,133920],{"class":38,"line":80},[36,133911,133720],{"class":73},[36,133913,52768],{"class":50},[36,133915,2367],{"class":73},[36,133917,52823],{"class":42},[36,133919,133729],{"class":50},[36,133921,133732],{"class":124},[36,133923,133924],{"class":38,"line":96},[36,133925,250],{"class":50},[2674,133927,133928],{},[259,133929,133930,133931,133933,133934,133936,133937,133940,133941,133944,133945,133947,133948,133951],{},"相对定位的特点：",[55047,133932],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55047,133935],{},"  ② ",[887,133938,133939],{},"原来"," 在标准流的 ",[887,133942,133943],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55047,133946],{},"  ③因此， ",[887,133949,133950],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133953,133954],{},"（3）绝对定位",[2674,133956,133957,133966],{},[259,133958,133959,133961,133962,133965],{},[887,133960,133770],{}," 是元素在移动位置的时候，是相对于它 ",[887,133963,133964],{},"祖先元素"," 来说的（拼爹型）",[259,133967,6670],{},[26,133969,133970],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,133971,133972,133978,133990,134004,134018],{"__ignoreMap":31},[36,133973,133974,133976],{"class":38,"line":39},[36,133975,131731],{"class":46},[36,133977,16901],{"class":50},[36,133979,133980,133982,133984,133986,133988],{"class":38,"line":54},[36,133981,133689],{"class":73},[36,133983,52768],{"class":50},[36,133985,56095],{"class":73},[36,133987,131746],{"class":50},[36,133989,133698],{"class":124},[36,133991,133992,133994,133996,133998,134000,134002],{"class":38,"line":61},[36,133993,133703],{"class":73},[36,133995,52768],{"class":50},[36,133997,2113],{"class":73},[36,133999,52823],{"class":42},[36,134001,133712],{"class":50},[36,134003,133715],{"class":124},[36,134005,134006,134008,134010,134012,134014,134016],{"class":38,"line":80},[36,134007,133720],{"class":73},[36,134009,52768],{"class":50},[36,134011,2367],{"class":73},[36,134013,52823],{"class":42},[36,134015,133729],{"class":50},[36,134017,133732],{"class":124},[36,134019,134020],{"class":38,"line":96},[36,134021,250],{"class":50},[2674,134023,134024,134039,134048,134051],{},[259,134025,134026,134027,134029,134030,134032,134033,134035,134036,134038],{},"绝对定位的特点：",[55047,134028],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55047,134031],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55047,134034],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55047,134037],{},"  (4)固定定位",[259,134040,134041,134043,134044,134047],{},[887,134042,133777],{}," 是元素 ",[887,134045,134046],{},"固定于浏览器可视区的位置"," 。（认死理型）",[259,134049,134050],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[259,134052,134053],{},"语法:",[26,134055,134056],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,134057,134058,134064,134076,134090,134104],{"__ignoreMap":31},[36,134059,134060,134062],{"class":38,"line":39},[36,134061,131731],{"class":46},[36,134063,16901],{"class":50},[36,134065,134066,134068,134070,134072,134074],{"class":38,"line":54},[36,134067,133689],{"class":73},[36,134069,52768],{"class":50},[36,134071,56095],{"class":73},[36,134073,131746],{"class":50},[36,134075,133698],{"class":124},[36,134077,134078,134080,134082,134084,134086,134088],{"class":38,"line":61},[36,134079,133703],{"class":73},[36,134081,52768],{"class":50},[36,134083,2113],{"class":73},[36,134085,52823],{"class":42},[36,134087,133712],{"class":50},[36,134089,133715],{"class":124},[36,134091,134092,134094,134096,134098,134100,134102],{"class":38,"line":80},[36,134093,133720],{"class":73},[36,134095,52768],{"class":50},[36,134097,2367],{"class":73},[36,134099,52823],{"class":42},[36,134101,133729],{"class":50},[36,134103,133732],{"class":124},[36,134105,134106],{"class":38,"line":96},[36,134107,250],{"class":50},[2674,134109,134110,134119],{},[259,134111,134112,134113,134115,134116,134118],{},"特点:",[55047,134114],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55047,134117],{},"  ②固定定位不再占有原先的位置,完全脱标",[259,134120,134121,134122,134124,134125,134127,134128,134130],{},"固定在版心位置的方法:",[55047,134123],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55047,134126],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55047,134129],{},"  实例：",[26,134132,134133],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,134134,134135,134141,134153,134167,134181],{"__ignoreMap":31},[36,134136,134137,134139],{"class":38,"line":39},[36,134138,131731],{"class":46},[36,134140,16901],{"class":50},[36,134142,134143,134145,134147,134149,134151],{"class":38,"line":54},[36,134144,133689],{"class":73},[36,134146,52768],{"class":50},[36,134148,56095],{"class":73},[36,134150,131746],{"class":50},[36,134152,133698],{"class":124},[36,134154,134155,134157,134159,134161,134163,134165],{"class":38,"line":61},[36,134156,133703],{"class":73},[36,134158,52768],{"class":50},[36,134160,2113],{"class":73},[36,134162,52823],{"class":42},[36,134164,133712],{"class":50},[36,134166,133715],{"class":124},[36,134168,134169,134171,134173,134175,134177,134179],{"class":38,"line":80},[36,134170,133720],{"class":73},[36,134172,52768],{"class":50},[36,134174,2367],{"class":73},[36,134176,52823],{"class":42},[36,134178,133729],{"class":50},[36,134180,133732],{"class":124},[36,134182,134183],{"class":38,"line":96},[36,134184,250],{"class":50},[2992,134186],{"style":127739,"src":134187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134189,134190],{},"(5)粘性定位",[2674,134192,134193,134196],{},[259,134194,134195],{},"粘性定位可以被认为是相对定位和固定定位的混合",[259,134197,6670],{},[26,134199,134200],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,134201,134202,134208,134220,134234,134248],{"__ignoreMap":31},[36,134203,134204,134206],{"class":38,"line":39},[36,134205,131731],{"class":46},[36,134207,16901],{"class":50},[36,134209,134210,134212,134214,134216,134218],{"class":38,"line":54},[36,134211,133689],{"class":73},[36,134213,52768],{"class":50},[36,134215,56095],{"class":73},[36,134217,131746],{"class":50},[36,134219,133698],{"class":124},[36,134221,134222,134224,134226,134228,134230,134232],{"class":38,"line":61},[36,134223,133703],{"class":73},[36,134225,52768],{"class":50},[36,134227,2113],{"class":73},[36,134229,52823],{"class":42},[36,134231,133712],{"class":50},[36,134233,133715],{"class":124},[36,134235,134236,134238,134240,134242,134244,134246],{"class":38,"line":80},[36,134237,133720],{"class":73},[36,134239,52768],{"class":50},[36,134241,2367],{"class":73},[36,134243,52823],{"class":42},[36,134245,133729],{"class":50},[36,134247,133732],{"class":124},[36,134249,134250],{"class":38,"line":96},[36,134251,250],{"class":50},[2674,134253,134254],{},[259,134255,134256,134257,134259,134260,134262,134263,134265,134266,134269,134270,134272],{},"粘性定位的特点：",[55047,134258],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55047,134261],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55047,134264],{},"  ③必须添加 top 、left、right、bottom ",[887,134267,134268],{},"其中一个"," 才有效",[55047,134271],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,134274,134275],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,134276,134277,134283,134295,134309,134323],{"__ignoreMap":31},[36,134278,134279,134281],{"class":38,"line":39},[36,134280,131731],{"class":46},[36,134282,16901],{"class":50},[36,134284,134285,134287,134289,134291,134293],{"class":38,"line":54},[36,134286,133689],{"class":73},[36,134288,52768],{"class":50},[36,134290,56095],{"class":73},[36,134292,131746],{"class":50},[36,134294,133698],{"class":124},[36,134296,134297,134299,134301,134303,134305,134307],{"class":38,"line":61},[36,134298,133703],{"class":73},[36,134300,52768],{"class":50},[36,134302,2113],{"class":73},[36,134304,52823],{"class":42},[36,134306,133712],{"class":50},[36,134308,133715],{"class":124},[36,134310,134311,134313,134315,134317,134319,134321],{"class":38,"line":80},[36,134312,133720],{"class":73},[36,134314,52768],{"class":50},[36,134316,2367],{"class":73},[36,134318,52823],{"class":42},[36,134320,133729],{"class":50},[36,134322,133732],{"class":124},[36,134324,134325],{"class":38,"line":96},[36,134326,250],{"class":50},[2992,134328],{"style":127739,"src":134329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134331,134332],{},"(6)总结",[1806,134334,134335,134350],{},[1809,134336,134337],{},[1812,134338,134339,134341,134344,134347],{},[1815,134340,133673],{"align":25066},[1815,134342,134343],{"align":25066},"是否脱标",[1815,134345,134346],{"align":25066},"移动位置",[1815,134348,134349],{"align":25066},"是否常用",[1852,134351,134352,134365,134379,134393,134406],{},[1812,134353,134354,134357,134359,134362],{},[1857,134355,134356],{"align":25066},"Static 静态定位",[1857,134358,106009],{"align":25066},[1857,134360,134361],{"align":25066},"不能使用边偏移",[1857,134363,134364],{"align":25066},"很少",[1812,134366,134367,134370,134373,134376],{},[1857,134368,134369],{"align":25066},"Relative 相对定位",[1857,134371,134372],{"align":25066},"否(占有位置)",[1857,134374,134375],{"align":25066},"相对于自身位置移动",[1857,134377,134378],{"align":25066},"基本单独使用",[1812,134380,134381,134384,134387,134390],{},[1857,134382,134383],{"align":25066},"Absolute 绝对定位",[1857,134385,134386],{"align":25066},"是(不占有位置)",[1857,134388,134389],{"align":25066},"带有定位的父级",[1857,134391,134392],{"align":25066},"要和定位父级元素搭配使用",[1812,134394,134395,134398,134400,134403],{},[1857,134396,134397],{"align":25066},"Fixed 固定定位",[1857,134399,134386],{"align":25066},[1857,134401,134402],{"align":25066},"浏览器可视区",[1857,134404,134405],{"align":25066},"单独使用,不需要父级",[1812,134407,134408,134411,134413,134415],{},[1857,134409,134410],{"align":25066},"Sticky 粘性定位",[1857,134412,134372],{"align":25066},[1857,134414,134402],{"align":25066},[1857,134416,134417],{"align":25066},"当前阶段少",[256,134419,134420],{"start":54},[259,134421,134422,134425],{},[887,134423,134424],{},"边偏移"," 则决定了该元素的最终位置",[1806,134427,134428,134439],{},[1809,134429,134430],{},[1812,134431,134432,134435,134437],{},[1815,134433,134434],{"align":25066},"边偏移属性",[1815,134436,28823],{"align":25066},[1815,134438,28820],{"align":25066},[1852,134440,134441,134452,134463,134473],{},[1812,134442,134443,134446,134449],{},[1857,134444,134445],{"align":25066},"top",[1857,134447,134448],{"align":25066},"top: 80px;",[1857,134450,134451],{"align":25066},"顶端偏移量，定义元素相对于父元素上边线的距离",[1812,134453,134454,134457,134460],{},[1857,134455,134456],{"align":25066},"bottom",[1857,134458,134459],{"align":25066},"bottom: 80px ;",[1857,134461,134462],{"align":25066},"底部偏移量，定义元素相对于其父元素下边线的距离",[1812,134464,134465,134467,134470],{},[1857,134466,25066],{"align":25066},[1857,134468,134469],{"align":25066},"left: 80px ;",[1857,134471,134472],{"align":25066},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1812,134474,134475,134477,134480],{},[1857,134476,73853],{"align":25066},[1857,134478,134479],{"align":25066},"right: 80px ;",[1857,134481,134482],{"align":25066},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2674,134484,134485],{},[259,134486,885,134487,134489,134490,134492,134493,134495,134496,134499,134500,134502,134503,134505],{},[55047,134488],{},"  ① ",[887,134491,134424],{}," 需要和 ",[887,134494,133673],{}," 联合使用， ",[887,134497,134498],{},"单独使用无效"," ；",[55047,134501],{},"  ②top和bottom不要同时使用",[55047,134504],{},"  ③left和right不要同时使用",[23327,134507,134509],{"id":134508},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134511,134512],{},"子级是绝对定位的话，父级要用相对定位",[2674,134514,134515,134518,134521,134524],{},[259,134516,134517],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[259,134519,134520],{},"父盒子需要加定位限制子盒子在父盒子内显示",[259,134522,134523],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[259,134525,134526,134527,134530],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[887,134528,134529],{},"子绝父绝"," 也会遇到",[23327,134532,134534],{"id":134533},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2674,134536,134537,134552],{},[259,134538,134539,134540,134543,134544,134547,134548,134551],{},"在使用 ",[887,134541,134542],{},"定位"," 布局时，可能会 ",[887,134545,134546],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[887,134549,134550],{},"z-index"," 来控制盒子的前后次序 (z轴)",[259,134553,6670],{},[26,134555,134556],{"className":127883,"code":133676,"language":127885,"meta":31,"style":31},[33,134557,134558,134564,134576,134590,134604],{"__ignoreMap":31},[36,134559,134560,134562],{"class":38,"line":39},[36,134561,131731],{"class":46},[36,134563,16901],{"class":50},[36,134565,134566,134568,134570,134572,134574],{"class":38,"line":54},[36,134567,133689],{"class":73},[36,134569,52768],{"class":50},[36,134571,56095],{"class":73},[36,134573,131746],{"class":50},[36,134575,133698],{"class":124},[36,134577,134578,134580,134582,134584,134586,134588],{"class":38,"line":61},[36,134579,133703],{"class":73},[36,134581,52768],{"class":50},[36,134583,2113],{"class":73},[36,134585,52823],{"class":42},[36,134587,133712],{"class":50},[36,134589,133715],{"class":124},[36,134591,134592,134594,134596,134598,134600,134602],{"class":38,"line":80},[36,134593,133720],{"class":73},[36,134595,52768],{"class":50},[36,134597,2367],{"class":73},[36,134599,52823],{"class":42},[36,134601,133729],{"class":50},[36,134603,133732],{"class":124},[36,134605,134606],{"class":38,"line":96},[36,134607,250],{"class":50},[2674,134609,134610],{},[259,134611,134612,134613,134489,134615,134617,134618,129046,134621,83870,134624,134626,134627,134629,134630,134633,134634,134499,134637,134639,134640,134643,134645],{},"z-index的特性",[55047,134614],{},[887,134616,128347],{}," ： ",[887,134619,134620],{},"正整数",[887,134622,134623],{},"负整数",[887,134625,1859],{}," ，默认值是 0，数值越大，盒子越靠上；",[55047,134628],{},"  ②如果 ",[887,134631,134632],{},"属性值相同"," ，则按照书写顺序， ",[887,134635,134636],{},"后来居上",[55047,134638],{},"  ③数字后面 ",[887,134641,134642],{},"不能加单位",[55047,134644],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23327,134647,134649],{"id":134648},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134651,134652],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134654,134655],{},"方法:",[2674,134657,134658,134668],{},[259,134659,134660,134661,134664,134665],{},"left: 50%; 让 ",[887,134662,134663],{},"盒子的左侧"," 移动到 ",[887,134666,134667],{},"父级元素的水平中心位置",[259,134669,134670,134671,134674,134675],{},"margin-left: -100px; 让盒子 ",[887,134672,134673],{},"向左"," 移动 ",[887,134676,134677],{},"自身宽度的一半",[23327,134679,134681],{"id":134680},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[256,134683,134684,134687],{},[259,134685,134686],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[259,134688,134689],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134691,134692],{},"也就是说绝对定位和固定定位和浮动类似",[256,134694,134695],{"start":61},[259,134696,134697],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2674,134699,134700,134703,134706],{},[259,134701,134702],{},"可以用inline-block 转换为行内块",[259,134704,134705],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[259,134707,134708],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134710,134711],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23327,134713,134715],{"id":134714},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[256,134717,134718,134721,134724,134727],{},[259,134719,134720],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[259,134722,134723],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[259,134725,134726],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[259,134728,134729],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,134731,134732],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,134733,134734,134740,134750,134754,134760,134770],{"__ignoreMap":31},[36,134735,134736,134738],{"class":38,"line":39},[36,134737,132356],{"class":46},[36,134739,16901],{"class":50},[36,134741,134742,134744,134746,134748],{"class":38,"line":54},[36,134743,132363],{"class":73},[36,134745,52768],{"class":50},[36,134747,25066],{"class":73},[36,134749,77],{"class":50},[36,134751,134752],{"class":38,"line":61},[36,134753,250],{"class":50},[36,134755,134756,134758],{"class":38,"line":80},[36,134757,132378],{"class":46},[36,134759,16901],{"class":50},[36,134761,134762,134764,134766,134768],{"class":38,"line":96},[36,134763,132363],{"class":73},[36,134765,52768],{"class":50},[36,134767,73853],{"class":73},[36,134769,77],{"class":50},[36,134771,134772],{"class":38,"line":101},[36,134773,250],{"class":50},[2992,134775],{"style":127739,"src":134776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23327,134778,134780],{"id":134779},"_11138-轮播图","11.1.3.8 轮播图",[2992,134782],{"style":127739,"src":134783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[256,134785,134786],{},[259,134787,134788],{},"制作顺序:",[2674,134790,134791,134794,134797,134806],{},[259,134792,134793],{},"大盒子我们类名为： tb-promo 淘宝广告",[259,134795,134796],{},"里面先放一张图片",[259,134798,134799,134800,134802,134803,134805],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55047,134801],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55047,134804],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[259,134807,134808,134809,134811,134812,134814],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55047,134810],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55047,134813],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[256,134816,134817],{"start":54},[259,134818,134819],{},"代码模块",[26,134821,134823],{"className":127883,"code":134822,"language":127885,"meta":31,"style":31},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n.son {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\u002F* 父元素需要加 relative（子绝父相） *\u002F\n.father {\n  position: relative;\n}\n",[33,134824,134825,134830,134837,134847,134857,134867,134871,134876,134883,134893],{"__ignoreMap":31},[36,134826,134827],{"class":38,"line":39},[36,134828,134829],{"class":124},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[36,134831,134832,134835],{"class":38,"line":54},[36,134833,134834],{"class":46},".son",[36,134836,16901],{"class":50},[36,134838,134839,134841,134843,134845],{"class":38,"line":61},[36,134840,133689],{"class":73},[36,134842,52768],{"class":50},[36,134844,56162],{"class":73},[36,134846,77],{"class":50},[36,134848,134849,134851,134853,134855],{"class":38,"line":80},[36,134850,133703],{"class":73},[36,134852,52768],{"class":50},[36,134854,1859],{"class":73},[36,134856,77],{"class":50},[36,134858,134859,134861,134863,134865],{"class":38,"line":96},[36,134860,133720],{"class":73},[36,134862,52768],{"class":50},[36,134864,1859],{"class":73},[36,134866,77],{"class":50},[36,134868,134869],{"class":38,"line":101},[36,134870,250],{"class":50},[36,134872,134873],{"class":38,"line":128},[36,134874,134875],{"class":124},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[36,134877,134878,134881],{"class":38,"line":149},[36,134879,134880],{"class":46},".father",[36,134882,16901],{"class":50},[36,134884,134885,134887,134889,134891],{"class":38,"line":154},[36,134886,133689],{"class":73},[36,134888,52768],{"class":50},[36,134890,56095],{"class":73},[36,134892,77],{"class":50},[36,134894,134895],{"class":38,"line":167},[36,134896,250],{"class":50},[19,134898,134899],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[1645,134901,134903],{"id":134902},"_1114-定位数值的移动","11.1.4 定位数值的移动",[2992,134905],{"style":127739,"src":134906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134908,134909],{},"✨ 黄金口诀：",[19,134911,134912],{},"\"TOP正下负上，LEFT正右负左\"",[19,134914,134915],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134917,134918],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134920,134921],{},"✨ 简单记：",[19,134923,134924],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1592,134926,134927],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":134929},[134930],{"id":133457,"depth":54,"text":133458,"children":134931},[134932,134933,134934,134935],{"id":133461,"depth":61,"text":133462},{"id":133476,"depth":61,"text":133477},{"id":133644,"depth":61,"text":133645},{"id":134902,"depth":61,"text":134903},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133449,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134942,"title":134943,"body":134944,"description":24706,"extension":1603,"meta":136367,"navigation":57,"path":136368,"seo":136369,"stem":136370,"__hash__":136371},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134945,"toc":136346},[134946,134949,134953,134961,134965,134970,134978,134990,134994,134999,135007,135018,135022,135027,135068,135076,135080,135083,135086,135089,135183,135186,135280,135283,135377,135380,135383,135418,135421,135424,135454,135457,135460,135463,135466,135469,135472,135475,135545,135548,135552,135556,135597,135601,135607,135610,135613,135617,135620,135623,135626,135707,135710,135713,135717,135721,135724,135727,135730,135733,135736,135742,135751,135755,135774,135778,135788,135791,135794,135797,135800,135803,135806,135809,135812,135821,135825,135834,135837,135842,135895,135900,136066,136069,136072,136077,136080,136083,136086,136089,136094,136242,136245,136248,136253,136256,136261,136295,136298,136301,136305,136308,136315,136318,136321,136324,136327,136330,136333,136336,136340,136343],[10,134947,134943],{"id":134948},"_12-显示隐藏与图形资源",[14,134950,134952],{"id":134951},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2674,134954,134955,134958],{},[259,134956,134957],{},"目的:让一个元素在页面中消失或者显示出来",[259,134959,134960],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[1645,134962,134964],{"id":134963},"_1211-display-显示","12.1.1 display 显示",[256,134966,134967],{},[259,134968,134969],{},"display 设置或检索对象是否及如何显示",[2674,134971,134972,134975],{},[259,134973,134974],{},"display: none;隐藏对象",[259,134976,134977],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[256,134979,134980,134987],{"start":54},[259,134981,134982,134983,134986],{},"特点： display 隐藏元素后， ",[887,134984,134985],{},"不再占"," 有原来的位置",[259,134988,134989],{},"在js中使用非常的广泛",[1645,134991,134993],{"id":134992},"_1212-visibility可见性","12.1.2 visibility可见性",[256,134995,134996],{},[259,134997,134998],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2674,135000,135001,135004],{},[259,135002,135003],{},"visibility： visible；元素可见",[259,135005,135006],{},"visibility：hidden；元素隐藏",[256,135008,135009,135012,135015],{"start":54},[259,135010,135011],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[259,135013,135014],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[259,135016,135017],{},"隐藏后继续占有原有位置",[1645,135019,135021],{"id":135020},"_1213-overflow溢出","12.1.3 overflow溢出",[2674,135023,135024],{},[259,135025,135026],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1806,135028,135029,135037],{},[1809,135030,135031],{},[1812,135032,135033,135035],{},[1815,135034,128347],{"align":25066},[1815,135036,28820],{"align":25066},[1852,135038,135039,135047,135054,135061],{},[1812,135040,135041,135044],{},[1857,135042,135043],{"align":25066},"visible",[1857,135045,135046],{"align":25066},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1812,135048,135049,135051],{},[1857,135050,63045],{"align":25066},[1857,135052,135053],{"align":25066},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1812,135055,135056,135058],{},[1857,135057,130303],{"align":25066},[1857,135059,135060],{"align":25066},"不管超出内容否，总是显示滚动条",[1812,135062,135063,135065],{},[1857,135064,73994],{"align":25066},[1857,135066,135067],{"align":25066},"超出自动显示滚动条，不超出不显示滚动条",[2674,135069,135070,135073],{},[259,135071,135072],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[259,135074,135075],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[1645,135077,135079],{"id":135078},"_1214-案例收获","12.1.4 案例收获",[2992,135081],{"style":127739,"src":135082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135084,135085],{},"问题：没做出来动态效果，使用hover没实现",[19,135087,135088],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,135090,135091],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},[33,135092,135093,135097,135111,135115,135129,135133,135147,135151,135165,135169],{"__ignoreMap":31},[36,135094,135095],{"class":38,"line":39},[36,135096,133322],{"class":124},[36,135098,135099,135101,135103,135105,135107,135109],{"class":38,"line":54},[36,135100,133327],{"class":46},[36,135102,81138],{"class":50},[36,135104,130243],{"class":73},[36,135106,52768],{"class":50},[36,135108,133336],{"class":73},[36,135110,130813],{"class":50},[36,135112,135113],{"class":38,"line":61},[36,135114,133343],{"class":124},[36,135116,135117,135119,135121,135123,135125,135127],{"class":38,"line":80},[36,135118,133348],{"class":46},[36,135120,81138],{"class":50},[36,135122,130243],{"class":73},[36,135124,52768],{"class":50},[36,135126,56095],{"class":73},[36,135128,130813],{"class":50},[36,135130,135131],{"class":38,"line":96},[36,135132,133363],{"class":124},[36,135134,135135,135137,135139,135141,135143,135145],{"class":38,"line":101},[36,135136,133368],{"class":46},[36,135138,81138],{"class":50},[36,135140,130243],{"class":73},[36,135142,52768],{"class":50},[36,135144,56162],{"class":73},[36,135146,130813],{"class":50},[36,135148,135149],{"class":38,"line":128},[36,135150,133383],{"class":124},[36,135152,135153,135155,135157,135159,135161,135163],{"class":38,"line":149},[36,135154,133388],{"class":46},[36,135156,81138],{"class":50},[36,135158,130243],{"class":73},[36,135160,52768],{"class":50},[36,135162,87564],{"class":73},[36,135164,130813],{"class":50},[36,135166,135167],{"class":38,"line":154},[36,135168,133403],{"class":124},[36,135170,135171,135173,135175,135177,135179,135181],{"class":38,"line":167},[36,135172,133408],{"class":46},[36,135174,81138],{"class":50},[36,135176,130243],{"class":73},[36,135178,52768],{"class":50},[36,135180,133417],{"class":73},[36,135182,130813],{"class":50},[19,135184,135185],{},"完整代码：",[26,135187,135188],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},[33,135189,135190,135194,135208,135212,135226,135230,135244,135248,135262,135266],{"__ignoreMap":31},[36,135191,135192],{"class":38,"line":39},[36,135193,133322],{"class":124},[36,135195,135196,135198,135200,135202,135204,135206],{"class":38,"line":54},[36,135197,133327],{"class":46},[36,135199,81138],{"class":50},[36,135201,130243],{"class":73},[36,135203,52768],{"class":50},[36,135205,133336],{"class":73},[36,135207,130813],{"class":50},[36,135209,135210],{"class":38,"line":61},[36,135211,133343],{"class":124},[36,135213,135214,135216,135218,135220,135222,135224],{"class":38,"line":80},[36,135215,133348],{"class":46},[36,135217,81138],{"class":50},[36,135219,130243],{"class":73},[36,135221,52768],{"class":50},[36,135223,56095],{"class":73},[36,135225,130813],{"class":50},[36,135227,135228],{"class":38,"line":96},[36,135229,133363],{"class":124},[36,135231,135232,135234,135236,135238,135240,135242],{"class":38,"line":101},[36,135233,133368],{"class":46},[36,135235,81138],{"class":50},[36,135237,130243],{"class":73},[36,135239,52768],{"class":50},[36,135241,56162],{"class":73},[36,135243,130813],{"class":50},[36,135245,135246],{"class":38,"line":128},[36,135247,133383],{"class":124},[36,135249,135250,135252,135254,135256,135258,135260],{"class":38,"line":149},[36,135251,133388],{"class":46},[36,135253,81138],{"class":50},[36,135255,130243],{"class":73},[36,135257,52768],{"class":50},[36,135259,87564],{"class":73},[36,135261,130813],{"class":50},[36,135263,135264],{"class":38,"line":154},[36,135265,133403],{"class":124},[36,135267,135268,135270,135272,135274,135276,135278],{"class":38,"line":167},[36,135269,133408],{"class":46},[36,135271,81138],{"class":50},[36,135273,130243],{"class":73},[36,135275,52768],{"class":50},[36,135277,133417],{"class":73},[36,135279,130813],{"class":50},[19,135281,135282],{},"分布思路重点详解：",[26,135284,135285],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},[33,135286,135287,135291,135305,135309,135323,135327,135341,135345,135359,135363],{"__ignoreMap":31},[36,135288,135289],{"class":38,"line":39},[36,135290,133322],{"class":124},[36,135292,135293,135295,135297,135299,135301,135303],{"class":38,"line":54},[36,135294,133327],{"class":46},[36,135296,81138],{"class":50},[36,135298,130243],{"class":73},[36,135300,52768],{"class":50},[36,135302,133336],{"class":73},[36,135304,130813],{"class":50},[36,135306,135307],{"class":38,"line":61},[36,135308,133343],{"class":124},[36,135310,135311,135313,135315,135317,135319,135321],{"class":38,"line":80},[36,135312,133348],{"class":46},[36,135314,81138],{"class":50},[36,135316,130243],{"class":73},[36,135318,52768],{"class":50},[36,135320,56095],{"class":73},[36,135322,130813],{"class":50},[36,135324,135325],{"class":38,"line":96},[36,135326,133363],{"class":124},[36,135328,135329,135331,135333,135335,135337,135339],{"class":38,"line":101},[36,135330,133368],{"class":46},[36,135332,81138],{"class":50},[36,135334,130243],{"class":73},[36,135336,52768],{"class":50},[36,135338,56162],{"class":73},[36,135340,130813],{"class":50},[36,135342,135343],{"class":38,"line":128},[36,135344,133383],{"class":124},[36,135346,135347,135349,135351,135353,135355,135357],{"class":38,"line":149},[36,135348,133388],{"class":46},[36,135350,81138],{"class":50},[36,135352,130243],{"class":73},[36,135354,52768],{"class":50},[36,135356,87564],{"class":73},[36,135358,130813],{"class":50},[36,135360,135361],{"class":38,"line":154},[36,135362,133403],{"class":124},[36,135364,135365,135367,135369,135371,135373,135375],{"class":38,"line":167},[36,135366,133408],{"class":46},[36,135368,81138],{"class":50},[36,135370,130243],{"class":73},[36,135372,52768],{"class":50},[36,135374,133417],{"class":73},[36,135376,130813],{"class":50},[2992,135378],{"style":127739,"src":135379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135381,135382],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,135384,135386],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[33,135387,135388],{"__ignoreMap":31},[36,135389,135390,135392,135394,135396,135398,135401,135403,135405,135408,135411,135413,135416],{"class":38,"line":39},[36,135391,2577],{"class":50},[36,135393,2992],{"class":52631},[36,135395,56570],{"class":46},[36,135397,70],{"class":50},[36,135399,135400],{"class":110},"\"images\u002Fpic.jpg\"",[36,135402,56578],{"class":46},[36,135404,70],{"class":50},[36,135406,135407],{"class":110},"\"描述文字\"",[36,135409,135410],{"class":46}," title",[36,135412,70],{"class":50},[36,135414,135415],{"class":110},"\"悬停提示\"",[36,135417,52638],{"class":50},[2992,135419],{"style":127739,"src":135420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135422,135423],{},"制造遮罩层",[26,135425,135426],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,135427,135428],{"__ignoreMap":31},[36,135429,135430,135432,135434,135436,135438,135440,135442,135444,135446,135448,135450,135452],{"class":38,"line":39},[36,135431,2577],{"class":50},[36,135433,2992],{"class":52631},[36,135435,56570],{"class":46},[36,135437,70],{"class":50},[36,135439,135400],{"class":110},[36,135441,56578],{"class":46},[36,135443,70],{"class":50},[36,135445,135407],{"class":110},[36,135447,135410],{"class":46},[36,135449,70],{"class":50},[36,135451,135415],{"class":110},[36,135453,52638],{"class":50},[19,135455,135456],{},"此时是这样的为标准流",[2992,135458],{"style":127739,"src":135459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135461,135462],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135464,135465],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135467,135468],{},"让他在中间，用center(background-position)",[19,135470,135471],{},"将需要变的尽可能放到一个盒子中",[19,135473,135474],{},"放大盒子上内部盒子发生变化",[26,135476,135478],{"className":127883,"code":135477,"language":127885,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[33,135479,135480,135486,135496,135500,135507,135517,135529,135541],{"__ignoreMap":31},[36,135481,135482,135484],{"class":38,"line":39},[36,135483,128950],{"class":46},[36,135485,16901],{"class":50},[36,135487,135488,135490,135492,135494],{"class":38,"line":54},[36,135489,133689],{"class":73},[36,135491,52768],{"class":50},[36,135493,56095],{"class":73},[36,135495,77],{"class":50},[36,135497,135498],{"class":38,"line":61},[36,135499,250],{"class":50},[36,135501,135502,135505],{"class":38,"line":80},[36,135503,135504],{"class":46},".child",[36,135506,16901],{"class":50},[36,135508,135509,135511,135513,135515],{"class":38,"line":96},[36,135510,133689],{"class":73},[36,135512,52768],{"class":50},[36,135514,56162],{"class":73},[36,135516,77],{"class":50},[36,135518,135519,135521,135523,135525,135527],{"class":38,"line":101},[36,135520,133703],{"class":73},[36,135522,52768],{"class":50},[36,135524,2323],{"class":73},[36,135526,1996],{"class":42},[36,135528,77],{"class":50},[36,135530,135531,135533,135535,135537,135539],{"class":38,"line":128},[36,135532,133720],{"class":73},[36,135534,52768],{"class":50},[36,135536,2323],{"class":73},[36,135538,1996],{"class":42},[36,135540,77],{"class":50},[36,135542,135543],{"class":38,"line":149},[36,135544,250],{"class":50},[19,135546,135547],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135549,135551],{"id":135550},"_122-精灵图","12.2 精灵图",[1645,135553,135555],{"id":135554},"_1221-理解","12.2.1 理解",[256,135557,135558,135576],{},[259,135559,135560,135561,133789,135564,135567,135568,135571,135572,135575],{},"目的： ",[887,135562,135563],{},"为了有效地减少服务器接收和发送请求的次数",[887,135565,135566],{},"提高"," 页面的 ",[887,135569,135570],{},"加载速度"," ，出现了 ",[887,135573,135574],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[259,135577,135578,135579,135581,135582,135584,135585,135587,135588,135590,135591,135593,135594,135596],{},"使用精灵图核心：",[55047,135580],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55047,135583],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55047,135586],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55047,135589],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55047,135592],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55047,135595],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[1645,135598,135600],{"id":135599},"_1222-扒图","12.2.2 扒图",[26,135602,135605],{"className":135603,"code":135604,"language":6676},[6674],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[33,135606,135604],{"__ignoreMap":31},[2992,135608],{"style":127739,"src":135609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[2992,135611],{"style":127739,"src":135612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[1645,135614,135616],{"id":135615},"_1223-精灵图的实现","12.2.3 精灵图的实现",[2992,135618],{"style":127739,"src":135619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135621,135622],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[2992,135624],{"style":127739,"src":135625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,135627,135629],{"className":127883,"code":135628,"language":127885,"meta":31,"style":31},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n.icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat;\n  background-position: -10px -20px;\n}\n",[33,135630,135631,135636,135643,135655,135667,135686,135703],{"__ignoreMap":31},[36,135632,135633],{"class":38,"line":39},[36,135634,135635],{"class":124},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[36,135637,135638,135641],{"class":38,"line":54},[36,135639,135640],{"class":46},".icon",[36,135642,16901],{"class":50},[36,135644,135645,135647,135649,135651,135653],{"class":38,"line":61},[36,135646,71899],{"class":73},[36,135648,52768],{"class":50},[36,135650,2367],{"class":73},[36,135652,52823],{"class":42},[36,135654,77],{"class":50},[36,135656,135657,135659,135661,135663,135665],{"class":38,"line":80},[36,135658,72119],{"class":73},[36,135660,52768],{"class":50},[36,135662,2367],{"class":73},[36,135664,52823],{"class":42},[36,135666,77],{"class":50},[36,135668,135669,135671,135673,135675,135677,135680,135682,135684],{"class":38,"line":96},[36,135670,71942],{"class":73},[36,135672,52768],{"class":50},[36,135674,63057],{"class":73},[36,135676,222],{"class":50},[36,135678,135679],{"class":473},"sprites.png",[36,135681,15043],{"class":50},[36,135683,63067],{"class":73},[36,135685,77],{"class":50},[36,135687,135688,135690,135692,135694,135696,135699,135701],{"class":38,"line":101},[36,135689,130143],{"class":73},[36,135691,52768],{"class":50},[36,135693,53094],{"class":73},[36,135695,52823],{"class":42},[36,135697,135698],{"class":73}," -20",[36,135700,52823],{"class":42},[36,135702,77],{"class":50},[36,135704,135705],{"class":38,"line":128},[36,135706,250],{"class":50},[2992,135708],{"style":127739,"src":135709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135711,135712],{},"在前端中坐标轴的正方向是右和下",[14,135714,135716],{"id":135715},"_123-字体图标","12.3 字体图标",[1645,135718,135720],{"id":135719},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135722,135723],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135725,135726],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135728,135729],{},"1.图片文件还是比较大的。",[19,135731,135732],{},"2.图片本身放大和缩小会失真。",[19,135734,135735],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135737,135738,135739,27071],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[887,135740,135741],{},"字体图标 iconfont",[19,135743,135744,135747,135748,29716],{},[887,135745,135746],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[887,135749,135750],{},"展示的是图标，本质属于字体",[1645,135752,135754],{"id":135753},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2674,135756,135757,135762,135765,135768,135771],{},[259,135758,135759,135761],{},[887,135760,27207],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[259,135763,135764],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[259,135766,135767],{},"兼容性：几乎支持所有的浏览器，请放心使用",[259,135769,135770],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[259,135772,135773],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[1645,135775,135777],{"id":135776},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2674,135779,135780],{},[259,135781,135782,135783],{},"icomoon字体库：",[1906,135784,135787],{"href":135785,"rel":135786},"http:\u002F\u002Ficomoon.io\u002F",[25195],"http:\u002F\u002Ficomoon.io",[19,135789,135790],{},"进去之后点icomoon app",[2992,135792],{"style":127739,"src":135793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135795,135796],{},"可以对其编辑：",[2992,135798],{"style":127739,"src":135799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135801,135802],{},"生成字体：",[2992,135804],{"style":127739,"src":135805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135807,135808],{},"下载：",[2992,135810],{"style":127739,"src":135811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2674,135813,135814],{},[259,135815,135816,135817],{},"阿里iconfont字体库： ",[1906,135818,135819],{"href":135819,"rel":135820},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25195],[1645,135822,135824],{"id":135823},"_1234-字体图标的引入","12.3.4 字体图标的引入",[256,135826,135827],{},[259,135828,135829,135830,135833],{},"把下载包里面的 ",[887,135831,135832],{},"fonts"," 文件夹放入页面根目录下",[2992,135835],{"style":127739,"src":135836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[256,135838,135839],{"start":54},[259,135840,135841],{},"字体文件格式",[1806,135843,135844,135853],{},[1809,135845,135846],{},[1812,135847,135848,135851],{},[1815,135849,135850],{"align":25066},"格式",[1815,135852,25070],{"align":25066},[1852,135854,135855,135865,135875,135885],{},[1812,135856,135857,135862],{},[1857,135858,135859],{"align":25066},[887,135860,135861],{},".ttf",[1857,135863,135864],{"align":25066},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1812,135866,135867,135872],{},[1857,135868,135869],{"align":25066},[887,135870,135871],{},".woff",[1857,135873,135874],{"align":25066},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1812,135876,135877,135882],{},[1857,135878,135879],{"align":25066},[887,135880,135881],{},".eot",[1857,135883,135884],{"align":25066},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1812,135886,135887,135892],{},[1857,135888,135889],{"align":25066},[887,135890,135891],{},"svg",[1857,135893,135894],{"align":25066},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[256,135896,135897],{"start":61},[259,135898,135899],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,135901,135903],{"className":127883,"code":135902,"language":127885,"meta":31,"style":31},"\u002F* 引入字体图标 *\u002F\n@font-face {\n  font-family: 'icomoon';\n  src: url('fonts\u002Ficomoon.eot');\n  src: url('fonts\u002Ficomoon.eot?#iefix') format('embedded-opentype'),\n       url('fonts\u002Ficomoon.woff') format('woff'),\n       url('fonts\u002Ficomoon.ttf') format('truetype'),\n       url('fonts\u002Ficomoon.svg#icomoon') format('svg');\n}\n.icon {\n  font-family: 'icomoon';\n  font-style: normal;\n}\n",[33,135904,135905,135910,135917,135929,135945,135970,135991,136011,136031,136035,136041,136051,136062],{"__ignoreMap":31},[36,135906,135907],{"class":38,"line":39},[36,135908,135909],{"class":124},"\u002F* 引入字体图标 *\u002F\n",[36,135911,135912,135915],{"class":38,"line":54},[36,135913,135914],{"class":42},"@font-face",[36,135916,16901],{"class":50},[36,135918,135919,135922,135924,135927],{"class":38,"line":61},[36,135920,135921],{"class":73},"  font-family",[36,135923,52768],{"class":50},[36,135925,135926],{"class":110},"'icomoon'",[36,135928,77],{"class":50},[36,135930,135931,135934,135936,135938,135940,135943],{"class":38,"line":80},[36,135932,135933],{"class":73},"  src",[36,135935,52768],{"class":50},[36,135937,63057],{"class":73},[36,135939,222],{"class":50},[36,135941,135942],{"class":110},"'fonts\u002Ficomoon.eot'",[36,135944,228],{"class":50},[36,135946,135947,135949,135951,135953,135955,135958,135960,135963,135965,135968],{"class":38,"line":96},[36,135948,135933],{"class":73},[36,135950,52768],{"class":50},[36,135952,63057],{"class":73},[36,135954,222],{"class":50},[36,135956,135957],{"class":110},"'fonts\u002Ficomoon.eot?#iefix'",[36,135959,15043],{"class":50},[36,135961,135962],{"class":73},"format",[36,135964,222],{"class":50},[36,135966,135967],{"class":110},"'embedded-opentype'",[36,135969,39378],{"class":50},[36,135971,135972,135975,135977,135980,135982,135984,135986,135989],{"class":38,"line":101},[36,135973,135974],{"class":73},"       url",[36,135976,222],{"class":50},[36,135978,135979],{"class":110},"'fonts\u002Ficomoon.woff'",[36,135981,15043],{"class":50},[36,135983,135962],{"class":73},[36,135985,222],{"class":50},[36,135987,135988],{"class":110},"'woff'",[36,135990,39378],{"class":50},[36,135992,135993,135995,135997,136000,136002,136004,136006,136009],{"class":38,"line":128},[36,135994,135974],{"class":73},[36,135996,222],{"class":50},[36,135998,135999],{"class":110},"'fonts\u002Ficomoon.ttf'",[36,136001,15043],{"class":50},[36,136003,135962],{"class":73},[36,136005,222],{"class":50},[36,136007,136008],{"class":110},"'truetype'",[36,136010,39378],{"class":50},[36,136012,136013,136015,136017,136020,136022,136024,136026,136029],{"class":38,"line":149},[36,136014,135974],{"class":73},[36,136016,222],{"class":50},[36,136018,136019],{"class":110},"'fonts\u002Ficomoon.svg#icomoon'",[36,136021,15043],{"class":50},[36,136023,135962],{"class":73},[36,136025,222],{"class":50},[36,136027,136028],{"class":110},"'svg'",[36,136030,228],{"class":50},[36,136032,136033],{"class":38,"line":154},[36,136034,250],{"class":50},[36,136036,136037,136039],{"class":38,"line":167},[36,136038,135640],{"class":46},[36,136040,16901],{"class":50},[36,136042,136043,136045,136047,136049],{"class":38,"line":172},[36,136044,135921],{"class":73},[36,136046,52768],{"class":50},[36,136048,135926],{"class":110},[36,136050,77],{"class":50},[36,136052,136053,136056,136058,136060],{"class":38,"line":192},[36,136054,136055],{"class":73},"  font-style",[36,136057,52768],{"class":50},[36,136059,65172],{"class":73},[36,136061,77],{"class":50},[36,136063,136064],{"class":38,"line":211},[36,136065,250],{"class":50},[19,136067,136068],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[2992,136070],{"style":127739,"src":136071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[256,136073,136074],{"start":80},[259,136075,136076],{},"添加字体",[2992,136078],{"style":127739,"src":136079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136081,136082],{},"复制：",[2992,136084],{"style":127739,"src":136085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136087,136088],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[256,136090,136091],{"start":96},[259,136092,136093],{},"代码展示：",[26,136095,136096],{"className":127883,"code":135902,"language":127885,"meta":31,"style":31},[33,136097,136098,136102,136108,136118,136132,136154,136172,136190,136208,136212,136218,136228,136238],{"__ignoreMap":31},[36,136099,136100],{"class":38,"line":39},[36,136101,135909],{"class":124},[36,136103,136104,136106],{"class":38,"line":54},[36,136105,135914],{"class":42},[36,136107,16901],{"class":50},[36,136109,136110,136112,136114,136116],{"class":38,"line":61},[36,136111,135921],{"class":73},[36,136113,52768],{"class":50},[36,136115,135926],{"class":110},[36,136117,77],{"class":50},[36,136119,136120,136122,136124,136126,136128,136130],{"class":38,"line":80},[36,136121,135933],{"class":73},[36,136123,52768],{"class":50},[36,136125,63057],{"class":73},[36,136127,222],{"class":50},[36,136129,135942],{"class":110},[36,136131,228],{"class":50},[36,136133,136134,136136,136138,136140,136142,136144,136146,136148,136150,136152],{"class":38,"line":96},[36,136135,135933],{"class":73},[36,136137,52768],{"class":50},[36,136139,63057],{"class":73},[36,136141,222],{"class":50},[36,136143,135957],{"class":110},[36,136145,15043],{"class":50},[36,136147,135962],{"class":73},[36,136149,222],{"class":50},[36,136151,135967],{"class":110},[36,136153,39378],{"class":50},[36,136155,136156,136158,136160,136162,136164,136166,136168,136170],{"class":38,"line":101},[36,136157,135974],{"class":73},[36,136159,222],{"class":50},[36,136161,135979],{"class":110},[36,136163,15043],{"class":50},[36,136165,135962],{"class":73},[36,136167,222],{"class":50},[36,136169,135988],{"class":110},[36,136171,39378],{"class":50},[36,136173,136174,136176,136178,136180,136182,136184,136186,136188],{"class":38,"line":128},[36,136175,135974],{"class":73},[36,136177,222],{"class":50},[36,136179,135999],{"class":110},[36,136181,15043],{"class":50},[36,136183,135962],{"class":73},[36,136185,222],{"class":50},[36,136187,136008],{"class":110},[36,136189,39378],{"class":50},[36,136191,136192,136194,136196,136198,136200,136202,136204,136206],{"class":38,"line":149},[36,136193,135974],{"class":73},[36,136195,222],{"class":50},[36,136197,136019],{"class":110},[36,136199,15043],{"class":50},[36,136201,135962],{"class":73},[36,136203,222],{"class":50},[36,136205,136028],{"class":110},[36,136207,228],{"class":50},[36,136209,136210],{"class":38,"line":154},[36,136211,250],{"class":50},[36,136213,136214,136216],{"class":38,"line":167},[36,136215,135640],{"class":46},[36,136217,16901],{"class":50},[36,136219,136220,136222,136224,136226],{"class":38,"line":172},[36,136221,135921],{"class":73},[36,136223,52768],{"class":50},[36,136225,135926],{"class":110},[36,136227,77],{"class":50},[36,136229,136230,136232,136234,136236],{"class":38,"line":192},[36,136231,136055],{"class":73},[36,136233,52768],{"class":50},[36,136235,65172],{"class":73},[36,136237,77],{"class":50},[36,136239,136240],{"class":38,"line":211},[36,136241,250],{"class":50},[2992,136243],{"style":127739,"src":136244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136246,136247],{},"更加细节展示：",[256,136249,136250],{},[259,136251,136252],{},"html 标签内添加小图标",[2992,136254],{"style":127739,"src":136255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[256,136257,136258],{"start":54},[259,136259,136260],{},"给标签定义字体",[26,136262,136263],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,136264,136265,136269,136283,136287],{"__ignoreMap":31},[36,136266,136267],{"class":38,"line":39},[36,136268,131994],{"class":124},[36,136270,136271,136273,136275,136277,136279,136281],{"class":38,"line":54},[36,136272,2577],{"class":50},[36,136274,52942],{"class":52631},[36,136276,54817],{"class":46},[36,136278,70],{"class":50},[36,136280,132007],{"class":110},[36,136282,52638],{"class":50},[36,136284,136285],{"class":38,"line":61},[36,136286,132014],{"class":50},[36,136288,136289,136291,136293],{"class":38,"line":80},[36,136290,53116],{"class":50},[36,136292,52942],{"class":52631},[36,136294,52638],{"class":50},[19,136296,136297],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[2992,136299],{"style":127739,"src":136300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[1645,136302,136304],{"id":136303},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136306,136307],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136309,136310,136311,136314],{},"把压缩包里面的 ",[887,136312,136313],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136316,136317],{},"打开网站，点下方：",[2992,136319],{"style":127739,"src":136320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[2992,136322],{"style":127739,"src":136323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[2992,136325],{"style":127739,"src":136326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136328,136329],{},"点yes重新加载",[19,136331,136332],{},"然后重复之前的操作就可以实现了",[19,136334,136335],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[1645,136337,136339],{"id":136338},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[2992,136341],{"style":127739,"src":136342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1592,136344,136345],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":136347},[136348,136354,136359],{"id":134951,"depth":54,"text":134952,"children":136349},[136350,136351,136352,136353],{"id":134963,"depth":61,"text":134964},{"id":134992,"depth":61,"text":134993},{"id":135020,"depth":61,"text":135021},{"id":135078,"depth":61,"text":135079},{"id":135550,"depth":54,"text":135551,"children":136355},[136356,136357,136358],{"id":135554,"depth":61,"text":135555},{"id":135599,"depth":61,"text":135600},{"id":135615,"depth":61,"text":135616},{"id":135715,"depth":54,"text":135716,"children":136360},[136361,136362,136363,136364,136365,136366],{"id":135719,"depth":61,"text":135720},{"id":135753,"depth":61,"text":135754},{"id":135776,"depth":61,"text":135777},{"id":135823,"depth":61,"text":135824},{"id":136303,"depth":61,"text":136304},{"id":136338,"depth":61,"text":136339},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134943,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136373,"title":136374,"body":136375,"description":24706,"extension":1603,"meta":137602,"navigation":57,"path":137603,"seo":137604,"stem":137605,"__hash__":137606},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136376,"toc":137583},[136377,136380,136384,136387,136401,136469,136499,136502,136506,136510,136612,136659,136663,136666,136669,136703,136706,136709,136712,136715,136718,136721,136724,136726,136729,136732,136735,136738,136741,136744,136747,136775,136778,136782,136785,136792,136795,136798,136824,136827,136831,136834,136837,136844,136848,136851,136853,136885,136888,136891,136903,136909,136912,136915,136918,136920,136924,136927,136930,136933,136978,136982,136984,136987,136994,137036,137039,137043,137048,137062,137066,137069,137072,137075,137078,137081,137115,137118,137121,137175,137178,137181,137184,137187,137239,137242,137245,137294,137298,137300,137303,137306,137309,137312,137315,137373,137376,137382,137385,137388,137420,137423,137427,137431,137434,137466,137470,137473,137517,137521,137524,137527,137530,137533,137536,137539,137542,137544,137547,137549,137552,137555,137558,137561,137566,137569,137571,137574,137577,137580],[10,136378,136374],{"id":136379},"_13-界面样式与布局技巧",[14,136381,136383],{"id":136382},"_131-css三角","13.1 css三角",[19,136385,136386],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2674,136388,136389,136392,136395,136398],{},[259,136390,136391],{},"用css 边框可以模拟三角效果",[259,136393,136394],{},"宽度高度为0",[259,136396,136397],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[259,136399,136400],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,136402,136404],{"className":127883,"code":136403,"language":127885,"meta":31,"style":31},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[33,136405,136406,136411,136418,136428,136438,136454,136465],{"__ignoreMap":31},[36,136407,136408],{"class":38,"line":39},[36,136409,136410],{"class":124},"\u002F* CSS 实现三角形 *\u002F\n",[36,136412,136413,136416],{"class":38,"line":54},[36,136414,136415],{"class":46},".triangle",[36,136417,16901],{"class":50},[36,136419,136420,136422,136424,136426],{"class":38,"line":61},[36,136421,71899],{"class":73},[36,136423,52768],{"class":50},[36,136425,1859],{"class":73},[36,136427,77],{"class":50},[36,136429,136430,136432,136434,136436],{"class":38,"line":80},[36,136431,72119],{"class":73},[36,136433,52768],{"class":50},[36,136435,1859],{"class":73},[36,136437,77],{"class":50},[36,136439,136440,136442,136444,136446,136448,136450,136452],{"class":38,"line":96},[36,136441,72227],{"class":73},[36,136443,52768],{"class":50},[36,136445,2113],{"class":73},[36,136447,52823],{"class":42},[36,136449,52852],{"class":73},[36,136451,65322],{"class":73},[36,136453,77],{"class":50},[36,136455,136456,136459,136461,136463],{"class":38,"line":101},[36,136457,136458],{"class":73},"  border-bottom-color",[36,136460,52768],{"class":50},[36,136462,63700],{"class":73},[36,136464,77],{"class":50},[36,136466,136467],{"class":38,"line":128},[36,136468,250],{"class":50},[26,136470,136471],{"className":127883,"code":132040,"language":127885,"meta":31,"style":31},[33,136472,136473,136479,136495],{"__ignoreMap":31},[36,136474,136475,136477],{"class":38,"line":39},[36,136476,52942],{"class":52631},[36,136478,16901],{"class":50},[36,136480,136481,136483,136485,136487,136489,136491,136493],{"class":38,"line":54},[36,136482,72227],{"class":73},[36,136484,52768],{"class":50},[36,136486,1885],{"class":73},[36,136488,52823],{"class":42},[36,136490,52852],{"class":73},[36,136492,131275],{"class":73},[36,136494,77],{"class":50},[36,136496,136497],{"class":38,"line":61},[36,136498,250],{"class":50},[2992,136500],{"style":127739,"src":136501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136503,136505],{"id":136504},"_132-css用户界面样式","13.2 css用户界面样式",[1645,136507,136509],{"id":136508},"_1321-鼠标样式","13.2.1 鼠标样式",[26,136511,136513],{"className":127883,"code":136512,"language":127885,"meta":31,"style":31},"\u002F* 鼠标样式 *\u002F\ndiv { cursor: pointer; }   \u002F* 手型 *\u002F\ndiv { cursor: default; }   \u002F* 默认 *\u002F\ndiv { cursor: move; }      \u002F* 移动 *\u002F\ndiv { cursor: text; }      \u002F* 文本 *\u002F\ndiv { cursor: not-allowed; } \u002F* 禁止 *\u002F\n",[33,136514,136515,136520,136539,136557,136576,136593],{"__ignoreMap":31},[36,136516,136517],{"class":38,"line":39},[36,136518,136519],{"class":124},"\u002F* 鼠标样式 *\u002F\n",[36,136521,136522,136524,136526,136529,136531,136533,136536],{"class":38,"line":54},[36,136523,52942],{"class":52631},[36,136525,81138],{"class":50},[36,136527,136528],{"class":73},"cursor",[36,136530,52768],{"class":50},[36,136532,63361],{"class":73},[36,136534,136535],{"class":50},"; }   ",[36,136537,136538],{"class":124},"\u002F* 手型 *\u002F\n",[36,136540,136541,136543,136545,136547,136549,136552,136554],{"class":38,"line":61},[36,136542,52942],{"class":52631},[36,136544,81138],{"class":50},[36,136546,136528],{"class":73},[36,136548,52768],{"class":50},[36,136550,136551],{"class":73},"default",[36,136553,136535],{"class":50},[36,136555,136556],{"class":124},"\u002F* 默认 *\u002F\n",[36,136558,136559,136561,136563,136565,136567,136570,136573],{"class":38,"line":80},[36,136560,52942],{"class":52631},[36,136562,81138],{"class":50},[36,136564,136528],{"class":73},[36,136566,52768],{"class":50},[36,136568,136569],{"class":73},"move",[36,136571,136572],{"class":50},"; }      ",[36,136574,136575],{"class":124},"\u002F* 移动 *\u002F\n",[36,136577,136578,136580,136582,136584,136586,136588,136590],{"class":38,"line":96},[36,136579,52942],{"class":52631},[36,136581,81138],{"class":50},[36,136583,136528],{"class":73},[36,136585,52768],{"class":50},[36,136587,6676],{"class":73},[36,136589,136572],{"class":50},[36,136591,136592],{"class":124},"\u002F* 文本 *\u002F\n",[36,136594,136595,136597,136599,136601,136603,136606,136609],{"class":38,"line":101},[36,136596,52942],{"class":52631},[36,136598,81138],{"class":50},[36,136600,136528],{"class":73},[36,136602,52768],{"class":50},[36,136604,136605],{"class":73},"not-allowed",[36,136607,136608],{"class":50},"; } ",[36,136610,136611],{"class":124},"\u002F* 禁止 *\u002F\n",[1806,136613,136614,136622],{},[1809,136615,136616],{},[1812,136617,136618,136620],{},[1815,136619,128347],{"align":25066},[1815,136621,28820],{"align":25066},[1852,136623,136624,136631,136638,136645,136652],{},[1812,136625,136626,136628],{},[1857,136627,136551],{"align":25066},[1857,136629,136630],{"align":25066},"小白 默认",[1812,136632,136633,136635],{},[1857,136634,63361],{"align":25066},[1857,136636,136637],{"align":25066},"小手",[1812,136639,136640,136642],{},[1857,136641,136569],{"align":25066},[1857,136643,136644],{"align":25066},"移动",[1812,136646,136647,136649],{},[1857,136648,6676],{"align":25066},[1857,136650,136651],{"align":25066},"文本",[1812,136653,136654,136656],{},[1857,136655,136605],{"align":25066},[1857,136657,136658],{"align":25066},"禁止",[1645,136660,136662],{"id":136661},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136664,136665],{},"去除表单轮廓线",[19,136667,136668],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,136670,136671],{"className":127883,"code":131247,"language":127885,"meta":31,"style":31},[33,136672,136673,136677,136683,136699],{"__ignoreMap":31},[36,136674,136675],{"class":38,"line":39},[36,136676,131254],{"class":124},[36,136678,136679,136681],{"class":38,"line":54},[36,136680,52942],{"class":52631},[36,136682,16901],{"class":50},[36,136684,136685,136687,136689,136691,136693,136695,136697],{"class":38,"line":61},[36,136686,72227],{"class":73},[36,136688,52768],{"class":50},[36,136690,1885],{"class":73},[36,136692,52823],{"class":42},[36,136694,52852],{"class":73},[36,136696,131275],{"class":73},[36,136698,77],{"class":50},[36,136700,136701],{"class":38,"line":80},[36,136702,250],{"class":50},[19,136704,136705],{},"文本域：",[2992,136707],{"style":127739,"src":136708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136710,136711],{},"此时会有一个空白区域",[2992,136713],{"style":127739,"src":136714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136716,136717],{},"写在同一行就不会出现这个问题",[2992,136719],{"style":127739,"src":136720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136722,136723],{},"文本域是行内块元素，一定记住！！！",[19,136725,99564],{},[2992,136727],{"style":127739,"src":136728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136730,136731],{},"文本域尽量放在一行",[19,136733,136734],{},"知识回顾：cols是列，rols是行",[2992,136736],{"style":127739,"src":136737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136739,136740],{},"它可以进行拖动，显然这是我们不愿意看到的",[2992,136742],{"style":127739,"src":136743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136745,136746],{},"使用resize进行解决",[26,136748,136750],{"className":127883,"code":136749,"language":127885,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[33,136751,136752,136758,136771],{"__ignoreMap":31},[36,136753,136754,136756],{"class":38,"line":39},[36,136755,55152],{"class":52631},[36,136757,16901],{"class":50},[36,136759,136760,136762,136764,136766,136768],{"class":38,"line":54},[36,136761,72129],{"class":73},[36,136763,52768],{"class":50},[36,136765,56068],{"class":73},[36,136767,131746],{"class":50},[36,136769,136770],{"class":124},"\u002F* 取消表单轮廓线 *\u002F\n",[36,136772,136773],{"class":38,"line":61},[36,136774,250],{"class":50},[19,136776,136777],{},"此时就无法通过右下方实现拖动了",[1645,136779,136781],{"id":136780},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136783,136784],{},"实现一个盒子中的文字和图片对齐",[19,136786,136787,136788,136791],{},"用于设置一个元素的 ",[887,136789,136790],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136793,136794],{},"图片和文字默认是基线对齐",[2992,136796],{"style":127739,"src":136797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,136799,136800],{"className":127883,"code":136749,"language":127885,"meta":31,"style":31},[33,136801,136802,136808,136820],{"__ignoreMap":31},[36,136803,136804,136806],{"class":38,"line":39},[36,136805,55152],{"class":52631},[36,136807,16901],{"class":50},[36,136809,136810,136812,136814,136816,136818],{"class":38,"line":54},[36,136811,72129],{"class":73},[36,136813,52768],{"class":50},[36,136815,56068],{"class":73},[36,136817,131746],{"class":50},[36,136819,136770],{"class":124},[36,136821,136822],{"class":38,"line":61},[36,136823,250],{"class":50},[2992,136825],{"style":127739,"src":136826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23327,136828,136830],{"id":136829},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136832,136833],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[2992,136835],{"style":127739,"src":136836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136838,136839,136840,136843],{},"此时可以给图片、表单这些行内块元素的 ",[887,136841,136842],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23327,136845,136847],{"id":136846},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136849,136850],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136852,15962],{},[26,136854,136856],{"className":127883,"code":136855,"language":127885,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[33,136857,136858,136863,136869,136881],{"__ignoreMap":31},[36,136859,136860],{"class":38,"line":39},[36,136861,136862],{"class":124},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[36,136864,136865,136867],{"class":38,"line":54},[36,136866,2992],{"class":52631},[36,136868,16901],{"class":50},[36,136870,136871,136874,136876,136879],{"class":38,"line":61},[36,136872,136873],{"class":73},"  vertical-align",[36,136875,52768],{"class":50},[36,136877,136878],{"class":73},"middle",[36,136880,77],{"class":50},[36,136882,136883],{"class":38,"line":80},[36,136884,250],{"class":50},[2992,136886],{"style":127739,"src":136887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136889,136890],{},"主要解决方法有两种：",[256,136892,136893],{},[259,136894,136895,136898,136899,136902],{},[887,136896,136897],{},"给图片"," 添加 ",[887,136900,136901],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136904,136905,136906],{},"2.把图片转换为块级元素 ",[887,136907,136908],{},"display: block",[19,136910,136911],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136913,136914],{},"img {",[19,136916,136917],{},"vertical-align:middle;",[19,136919,2613],{},[1645,136921,136923],{"id":136922},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136925,136926],{},"效果：",[2992,136928],{"style":127739,"src":136929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136931,136932],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,136934,136936],{"className":127883,"code":136935,"language":127885,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[33,136937,136938,136943,136949,136959,136964,136974],{"__ignoreMap":31},[36,136939,136940],{"class":38,"line":39},[36,136941,136942],{"class":124},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[36,136944,136945,136947],{"class":38,"line":54},[36,136946,2992],{"class":52631},[36,136948,16901],{"class":50},[36,136950,136951,136953,136955,136957],{"class":38,"line":61},[36,136952,136873],{"class":73},[36,136954,52768],{"class":50},[36,136956,136878],{"class":73},[36,136958,77],{"class":50},[36,136960,136961],{"class":38,"line":80},[36,136962,136963],{"class":124},"  \u002F* 或 *\u002F\n",[36,136965,136966,136968,136970,136972],{"class":38,"line":96},[36,136967,129499],{"class":73},[36,136969,52768],{"class":50},[36,136971,62200],{"class":73},[36,136973,77],{"class":50},[36,136975,136976],{"class":38,"line":101},[36,136977,250],{"class":50},[1645,136979,136981],{"id":136980},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136983,136926],{},[2992,136985],{"style":127739,"src":136986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136988,136989,136990,136993],{},"多行文本溢出显示省略号， ",[887,136991,136992],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,136995,136996],{"className":127883,"code":136935,"language":127885,"meta":31,"style":31},[33,136997,136998,137002,137008,137018,137022,137032],{"__ignoreMap":31},[36,136999,137000],{"class":38,"line":39},[36,137001,136942],{"class":124},[36,137003,137004,137006],{"class":38,"line":54},[36,137005,2992],{"class":52631},[36,137007,16901],{"class":50},[36,137009,137010,137012,137014,137016],{"class":38,"line":61},[36,137011,136873],{"class":73},[36,137013,52768],{"class":50},[36,137015,136878],{"class":73},[36,137017,77],{"class":50},[36,137019,137020],{"class":38,"line":80},[36,137021,136963],{"class":124},[36,137023,137024,137026,137028,137030],{"class":38,"line":96},[36,137025,129499],{"class":73},[36,137027,52768],{"class":50},[36,137029,62200],{"class":73},[36,137031,77],{"class":50},[36,137033,137034],{"class":38,"line":101},[36,137035,250],{"class":50},[19,137037,137038],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137040,137042],{"id":137041},"_133-常见布局技巧","13.3 常见布局技巧",[19,137044,137045],{},[887,137046,137047],{},"巧妙利用一个技术更快更好的布局：",[256,137049,137050,137053,137056,137059],{},[259,137051,137052],{},"margin负值的运用",[259,137054,137055],{},"文字围绕浮动元素",[259,137057,137058],{},"行内块的巧妙运用",[259,137060,137061],{},"CSS三角强化",[1645,137063,137065],{"id":137064},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137067,137068],{},"应用场景：",[2992,137070],{"style":127739,"src":137071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[2992,137073],{"style":127739,"src":137074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137076,137077],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137079,137080],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,137082,137083],{"className":127883,"code":131247,"language":127885,"meta":31,"style":31},[33,137084,137085,137089,137095,137111],{"__ignoreMap":31},[36,137086,137087],{"class":38,"line":39},[36,137088,131254],{"class":124},[36,137090,137091,137093],{"class":38,"line":54},[36,137092,52942],{"class":52631},[36,137094,16901],{"class":50},[36,137096,137097,137099,137101,137103,137105,137107,137109],{"class":38,"line":61},[36,137098,72227],{"class":73},[36,137100,52768],{"class":50},[36,137102,1885],{"class":73},[36,137104,52823],{"class":42},[36,137106,52852],{"class":73},[36,137108,131275],{"class":73},[36,137110,77],{"class":50},[36,137112,137113],{"class":38,"line":80},[36,137114,250],{"class":50},[2992,137116],{"style":127739,"src":137117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137119,137120],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,137122,137124],{"className":127883,"code":137123,"language":127885,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,137125,137126,137131,137137,137147,137159,137171],{"__ignoreMap":31},[36,137127,137128],{"class":38,"line":39},[36,137129,137130],{"class":124},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[36,137132,137133,137135],{"class":38,"line":54},[36,137134,131731],{"class":46},[36,137136,16901],{"class":50},[36,137138,137139,137141,137143,137145],{"class":38,"line":61},[36,137140,133689],{"class":73},[36,137142,52768],{"class":50},[36,137144,56095],{"class":73},[36,137146,77],{"class":50},[36,137148,137149,137151,137153,137155,137157],{"class":38,"line":80},[36,137150,133703],{"class":73},[36,137152,52768],{"class":50},[36,137154,2113],{"class":73},[36,137156,52823],{"class":42},[36,137158,77],{"class":50},[36,137160,137161,137163,137165,137167,137169],{"class":38,"line":96},[36,137162,133720],{"class":73},[36,137164,52768],{"class":50},[36,137166,2367],{"class":73},[36,137168,52823],{"class":42},[36,137170,77],{"class":50},[36,137172,137173],{"class":38,"line":101},[36,137174,250],{"class":50},[19,137176,137177],{},"加上上述代码会发现：",[2992,137179],{"style":127739,"src":137180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137182,137183],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137185,137186],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,137188,137189],{"className":127883,"code":137123,"language":127885,"meta":31,"style":31},[33,137190,137191,137195,137201,137211,137223,137235],{"__ignoreMap":31},[36,137192,137193],{"class":38,"line":39},[36,137194,137130],{"class":124},[36,137196,137197,137199],{"class":38,"line":54},[36,137198,131731],{"class":46},[36,137200,16901],{"class":50},[36,137202,137203,137205,137207,137209],{"class":38,"line":61},[36,137204,133689],{"class":73},[36,137206,52768],{"class":50},[36,137208,56095],{"class":73},[36,137210,77],{"class":50},[36,137212,137213,137215,137217,137219,137221],{"class":38,"line":80},[36,137214,133703],{"class":73},[36,137216,52768],{"class":50},[36,137218,2113],{"class":73},[36,137220,52823],{"class":42},[36,137222,77],{"class":50},[36,137224,137225,137227,137229,137231,137233],{"class":38,"line":96},[36,137226,133720],{"class":73},[36,137228,52768],{"class":50},[36,137230,2367],{"class":73},[36,137232,52823],{"class":42},[36,137234,77],{"class":50},[36,137236,137237],{"class":38,"line":101},[36,137238,250],{"class":50},[19,137240,137241],{},"解决方式2：",[19,137243,137244],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,137246,137248],{"className":127883,"code":137247,"language":127885,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,137249,137250,137256,137266,137278,137290],{"__ignoreMap":31},[36,137251,137252,137254],{"class":38,"line":39},[36,137253,52942],{"class":52631},[36,137255,16901],{"class":50},[36,137257,137258,137260,137262,137264],{"class":38,"line":54},[36,137259,133689],{"class":73},[36,137261,52768],{"class":50},[36,137263,56095],{"class":73},[36,137265,77],{"class":50},[36,137267,137268,137270,137272,137274,137276],{"class":38,"line":61},[36,137269,133703],{"class":73},[36,137271,52768],{"class":50},[36,137273,2113],{"class":73},[36,137275,52823],{"class":42},[36,137277,77],{"class":50},[36,137279,137280,137282,137284,137286,137288],{"class":38,"line":80},[36,137281,133720],{"class":73},[36,137283,52768],{"class":50},[36,137285,2367],{"class":73},[36,137287,52823],{"class":42},[36,137289,77],{"class":50},[36,137291,137292],{"class":38,"line":96},[36,137293,250],{"class":50},[1645,137295,137297],{"id":137296},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137299,137068],{},[2992,137301],{"style":127739,"src":137302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137304,137305],{},"实现结构图：",[2992,137307],{"style":127739,"src":137308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137310,137311],{},"巧妙运用浮动元素不会压住文字的特性",[19,137313,137314],{},"代码显示：",[26,137316,137318],{"className":127883,"code":137317,"language":127885,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,137319,137320,137326,137336,137340,137345,137349,137355,137369],{"__ignoreMap":31},[36,137321,137322,137324],{"class":38,"line":39},[36,137323,131731],{"class":46},[36,137325,16901],{"class":50},[36,137327,137328,137330,137332,137334],{"class":38,"line":54},[36,137329,132363],{"class":73},[36,137331,52768],{"class":50},[36,137333,25066],{"class":73},[36,137335,77],{"class":50},[36,137337,137338],{"class":38,"line":61},[36,137339,250],{"class":50},[36,137341,137342],{"class":38,"line":80},[36,137343,137344],{"class":50},"```Css\n",[36,137346,137347],{"class":38,"line":96},[36,137348,131726],{"class":124},[36,137350,137351,137353],{"class":38,"line":101},[36,137352,131731],{"class":46},[36,137354,16901],{"class":50},[36,137356,137357,137359,137361,137363,137365,137367],{"class":38,"line":128},[36,137358,71801],{"class":73},[36,137360,52768],{"class":50},[36,137362,1859],{"class":73},[36,137364,52887],{"class":73},[36,137366,131746],{"class":50},[36,137368,131749],{"class":124},[36,137370,137371],{"class":38,"line":149},[36,137372,250],{"class":50},[19,137374,137375],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,137377,137380],{"className":137378,"code":137379,"language":6676},[6674],"\n对行内元素转换为行内块元素之后，就可以设置宽和高了\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-107.png\">\n\n此时要实现整体居中可以使用text-align:center\n\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,137381,137379],{"__ignoreMap":31},[2992,137383],{"style":127739,"src":137384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137386,137387],{},"最终展示结果：",[26,137389,137390],{"className":127883,"code":131719,"language":127885,"meta":31,"style":31},[33,137391,137392,137396,137402,137416],{"__ignoreMap":31},[36,137393,137394],{"class":38,"line":39},[36,137395,131726],{"class":124},[36,137397,137398,137400],{"class":38,"line":54},[36,137399,131731],{"class":46},[36,137401,16901],{"class":50},[36,137403,137404,137406,137408,137410,137412,137414],{"class":38,"line":61},[36,137405,71801],{"class":73},[36,137407,52768],{"class":50},[36,137409,1859],{"class":73},[36,137411,52887],{"class":73},[36,137413,131746],{"class":50},[36,137415,131749],{"class":124},[36,137417,137418],{"class":38,"line":80},[36,137419,250],{"class":50},[2992,137421],{"style":127739,"src":137422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137424,137426],{"id":137425},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[1645,137428,137430],{"id":137429},"_1341-原理","13.4.1 原理",[2992,137432],{"style":127739,"src":137433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,137435,137436],{"className":127883,"code":131719,"language":127885,"meta":31,"style":31},[33,137437,137438,137442,137448,137462],{"__ignoreMap":31},[36,137439,137440],{"class":38,"line":39},[36,137441,131726],{"class":124},[36,137443,137444,137446],{"class":38,"line":54},[36,137445,131731],{"class":46},[36,137447,16901],{"class":50},[36,137449,137450,137452,137454,137456,137458,137460],{"class":38,"line":61},[36,137451,71801],{"class":73},[36,137453,52768],{"class":50},[36,137455,1859],{"class":73},[36,137457,52887],{"class":73},[36,137459,131746],{"class":50},[36,137461,131749],{"class":124},[36,137463,137464],{"class":38,"line":80},[36,137465,250],{"class":50},[1645,137467,137469],{"id":137468},"_1342-实例","13.4.2 实例",[2992,137471],{"style":127739,"src":137472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,137474,137475],{"className":127883,"code":132349,"language":127885,"meta":31,"style":31},[33,137476,137477,137483,137493,137497,137503,137513],{"__ignoreMap":31},[36,137478,137479,137481],{"class":38,"line":39},[36,137480,132356],{"class":46},[36,137482,16901],{"class":50},[36,137484,137485,137487,137489,137491],{"class":38,"line":54},[36,137486,132363],{"class":73},[36,137488,52768],{"class":50},[36,137490,25066],{"class":73},[36,137492,77],{"class":50},[36,137494,137495],{"class":38,"line":61},[36,137496,250],{"class":50},[36,137498,137499,137501],{"class":38,"line":80},[36,137500,132378],{"class":46},[36,137502,16901],{"class":50},[36,137504,137505,137507,137509,137511],{"class":38,"line":96},[36,137506,132363],{"class":73},[36,137508,52768],{"class":50},[36,137510,73853],{"class":73},[36,137512,77],{"class":50},[36,137514,137515],{"class":38,"line":101},[36,137516,250],{"class":50},[14,137518,137520],{"id":137519},"_135-css的初始化","13.5 css的初始化",[19,137522,137523],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137525,137526],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137528,137529],{},"每个网页都必须首先进行 CSS初始化。",[19,137531,137532],{},"这里我们以 京东CSS初始化代码为例。",[19,137534,137535],{},"在网页右键查看网页源代码",[19,137537,137538],{},"找到css的link引入语句",[19,137540,137541],{},"然后ctrl+f 输入body",[19,137543,78557],{},[2992,137545],{"style":127739,"src":137546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137548,78580],{},[2992,137550],{"style":127739,"src":137551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137553,137554],{},"③打开了网页上传压缩的代码",[2992,137556],{"style":127739,"src":137557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137559,137560],{},"④从body前可以查看这个网页的初始化代码",[19,137562,137563],{},[887,137564,137565],{},"Unicode编码字体：",[19,137567,137568],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137570,84538],{},[19,137572,137573],{},"黑体 \\9ED1\\4F53",[19,137575,137576],{},"宋体 \\5B8B\\4F53",[19,137578,137579],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1592,137581,137582],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":31,"searchDepth":54,"depth":54,"links":137584},[137585,137586,137593,137597,137601],{"id":136382,"depth":54,"text":136383},{"id":136504,"depth":54,"text":136505,"children":137587},[137588,137589,137590,137591,137592],{"id":136508,"depth":61,"text":136509},{"id":136661,"depth":61,"text":136662},{"id":136780,"depth":61,"text":136781},{"id":136922,"depth":61,"text":136923},{"id":136980,"depth":61,"text":136981},{"id":137041,"depth":54,"text":137042,"children":137594},[137595,137596],{"id":137064,"depth":61,"text":137065},{"id":137296,"depth":61,"text":137297},{"id":137425,"depth":54,"text":137426,"children":137598},[137599,137600],{"id":137429,"depth":61,"text":137430},{"id":137468,"depth":61,"text":137469},{"id":137519,"depth":54,"text":137520},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136374,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137608,"title":137609,"body":137610,"description":24706,"extension":1603,"meta":139296,"navigation":57,"path":139297,"seo":139298,"stem":139299,"__hash__":139300},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137611,"toc":139285},[137612,137615,137619,137623,137626,137633,137636,137639,137677,137680,137682,137696,137700,137709,137713,137718,137721,137724,137727,137762,137767,137770,137800,137803,137808,137811,137814,137844,137847,137901,137904,137908,137913,137925,137928,137932,137962,137965,137970,137973,138003,138006,138010,138027,138031,138035,138038,138071,138074,138078,138081,138084,138087,138090,138093,138204,138207,138210,138213,138315,138318,138322,138326,138330,138333,138373,138376,138378,138394,138398,138401,138406,138487,138490,138493,138619,138624,138627,138635,138638,138643,138728,138731,138735,138738,138741,138745,138765,138770,138854,138857,138862,138865,138868,138946,138949,138952,138955,138958,138961,138966,138969,138972,139044,139047,139052,139055,139152,139155,139161,139164,139167,139170,139173,139176,139179,139182,139185,139189,139194,139197,139230,139235,139238,139279,139282],[10,137613,137609],{"id":137614},"_14-html5与css3新特性",[14,137616,137618],{"id":137617},"_141-html5的新特性","14.1 HTML5的新特性",[1645,137620,137622],{"id":137621},"_1411-基本标签","14.1.1 基本标签",[19,137624,137625],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137627,137628,137629,137632],{},"这些新特性都有兼容性问题，基本是 ",[887,137630,137631],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137634,137635],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137637,137638],{},"现在使用的是新特性：",[2674,137640,137641,137647,137653,137659,137665,137671],{},[259,137642,137643,137646],{},[33,137644,137645],{},"\u003Cheader>"," 头部标签",[259,137648,137649,137652],{},[33,137650,137651],{},"\u003Cnav>"," 导航标签",[259,137654,137655,137658],{},[33,137656,137657],{},"\u003Carticle>"," 内容标签",[259,137660,137661,137664],{},[33,137662,137663],{},"\u003Csection>"," 定义文档某个区域",[259,137666,137667,137670],{},[33,137668,137669],{},"\u003Caside>"," 侧边栏标签",[259,137672,137673,137676],{},[33,137674,137675],{},"\u003Cfooter>"," 尾部标签",[2992,137678],{"style":127739,"src":137679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137681,1703],{},[2674,137683,137684,137687,137690,137693],{},[259,137685,137686],{},"这种语义化标准主要是针对搜索引擎的",[259,137688,137689],{},"这些标签页面中可以经常使用",[259,137691,137692],{},"在IE9中，需要把这些元素转换为块级元素",[259,137694,137695],{},"移动端更喜欢使用这些标签",[1645,137697,137699],{"id":137698},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137701,137702,137703,137705,137706,137708],{},"音频 ",[887,137704,29505],{}," 和视频 ",[887,137707,29514],{}," 两个标签",[23327,137710,137712],{"id":137711},"_14121-视频标签-video","14.1.2.1 视频标签- video",[256,137714,137715],{},[259,137716,137717],{},"支持格式：",[2992,137719],{"style":127739,"src":137720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137722,137723],{},"尽量使用MP4，兼容性好",[19,137725,137726],{},"用MP4就可以",[26,137728,137730],{"className":128630,"code":137729,"language":128632,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[33,137731,137732],{"__ignoreMap":31},[36,137733,137734,137736,137738,137740,137742,137745,137747,137750,137753,137756,137758,137760],{"class":38,"line":39},[36,137735,2577],{"class":50},[36,137737,29514],{"class":52631},[36,137739,56570],{"class":46},[36,137741,70],{"class":50},[36,137743,137744],{"class":110},"\"movie.mp4\"",[36,137746,93754],{"class":46},[36,137748,137749],{"class":46}," autoplay",[36,137751,137752],{"class":46}," muted",[36,137754,137755],{"class":46}," loop",[36,137757,56645],{"class":50},[36,137759,29514],{"class":52631},[36,137761,52638],{"class":50},[256,137763,137764],{"start":54},[259,137765,137766],{},"兼容写法",[19,137768,137769],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,137771,137772],{"className":128630,"code":137729,"language":128632,"meta":31,"style":31},[33,137773,137774],{"__ignoreMap":31},[36,137775,137776,137778,137780,137782,137784,137786,137788,137790,137792,137794,137796,137798],{"class":38,"line":39},[36,137777,2577],{"class":50},[36,137779,29514],{"class":52631},[36,137781,56570],{"class":46},[36,137783,70],{"class":50},[36,137785,137744],{"class":110},[36,137787,93754],{"class":46},[36,137789,137749],{"class":46},[36,137791,137752],{"class":46},[36,137793,137755],{"class":46},[36,137795,56645],{"class":50},[36,137797,29514],{"class":52631},[36,137799,52638],{"class":50},[19,137801,137802],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[256,137804,137805],{"start":61},[259,137806,137807],{},"video常用属性",[2992,137809],{"style":127739,"src":137810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137812,137813],{},"poster属性后面是跟的等待加载图片的地址",[26,137815,137816],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,137817,137818],{"__ignoreMap":31},[36,137819,137820,137822,137824,137826,137828,137830,137832,137834,137836,137838,137840,137842],{"class":38,"line":39},[36,137821,2577],{"class":50},[36,137823,2992],{"class":52631},[36,137825,56570],{"class":46},[36,137827,70],{"class":50},[36,137829,135400],{"class":110},[36,137831,56578],{"class":46},[36,137833,70],{"class":50},[36,137835,135407],{"class":110},[36,137837,135410],{"class":46},[36,137839,70],{"class":50},[36,137841,135415],{"class":110},[36,137843,52638],{"class":50},[19,137845,137846],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,137848,137850],{"className":127883,"code":137849,"language":127885,"meta":31,"style":31},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[33,137851,137852,137857,137863,137887,137892,137897],{"__ignoreMap":31},[36,137853,137854],{"class":38,"line":39},[36,137855,137856],{"class":124},"\u002F* 2D 位移 *\u002F\n",[36,137858,137859,137861],{"class":38,"line":54},[36,137860,52942],{"class":52631},[36,137862,16901],{"class":50},[36,137864,137865,137868,137870,137873,137875,137877,137879,137881,137883,137885],{"class":38,"line":61},[36,137866,137867],{"class":73},"  transform",[36,137869,52768],{"class":50},[36,137871,137872],{"class":73},"translate",[36,137874,222],{"class":50},[36,137876,1979],{"class":73},[36,137878,52823],{"class":42},[36,137880,477],{"class":50},[36,137882,2323],{"class":73},[36,137884,52823],{"class":42},[36,137886,228],{"class":50},[36,137888,137889],{"class":38,"line":80},[36,137890,137891],{"class":124},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[36,137893,137894],{"class":38,"line":96},[36,137895,137896],{"class":124},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[36,137898,137899],{"class":38,"line":101},[36,137900,250],{"class":50},[19,137902,137903],{},"muted:自动静音属性",[23327,137905,137907],{"id":137906},"_14122-音频标签audio","14.1.2.2 音频标签audio",[256,137909,137910],{},[259,137911,137912],{},"基本使用",[19,137914,137915,137916,137921,137922],{},"当前 ",[887,137917,137918],{},[33,137919,137920],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[887,137923,137924],{},"mp3格式",[2992,137926],{"style":127739,"src":137927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[256,137929,137930],{"start":54},[259,137931,137766],{},[26,137933,137934],{"className":128630,"code":137729,"language":128632,"meta":31,"style":31},[33,137935,137936],{"__ignoreMap":31},[36,137937,137938,137940,137942,137944,137946,137948,137950,137952,137954,137956,137958,137960],{"class":38,"line":39},[36,137939,2577],{"class":50},[36,137941,29514],{"class":52631},[36,137943,56570],{"class":46},[36,137945,70],{"class":50},[36,137947,137744],{"class":110},[36,137949,93754],{"class":46},[36,137951,137749],{"class":46},[36,137953,137752],{"class":46},[36,137955,137755],{"class":46},[36,137957,56645],{"class":50},[36,137959,29514],{"class":52631},[36,137961,52638],{"class":50},[19,137963,137964],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[256,137966,137967],{"start":61},[259,137968,137969],{},"常用属性",[2992,137971],{"style":127739,"src":137972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,137974,137975],{"className":128630,"code":137729,"language":128632,"meta":31,"style":31},[33,137976,137977],{"__ignoreMap":31},[36,137978,137979,137981,137983,137985,137987,137989,137991,137993,137995,137997,137999,138001],{"class":38,"line":39},[36,137980,2577],{"class":50},[36,137982,29514],{"class":52631},[36,137984,56570],{"class":46},[36,137986,70],{"class":50},[36,137988,137744],{"class":110},[36,137990,93754],{"class":46},[36,137992,137749],{"class":46},[36,137994,137752],{"class":46},[36,137996,137755],{"class":46},[36,137998,56645],{"class":50},[36,138000,29514],{"class":52631},[36,138002,52638],{"class":50},[19,138004,138005],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23327,138007,138009],{"id":138008},"_14123-总结","14.1.2.3 总结",[2674,138011,138012,138015,138018,138021,138024],{},[259,138013,138014],{},"音频标签和视频标签使用方式基本一致",[259,138016,138017],{},"浏览器支持情况不同",[259,138019,138020],{},"谷歌浏览器把音频和视频自动播放禁止了",[259,138022,138023],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[259,138025,138026],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[1645,138028,138030],{"id":138029},"_1413-表单元素","14.1.3 表单元素",[23327,138032,138034],{"id":138033},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[2992,138036],{"style":127739,"src":138037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,138039,138041],{"className":128630,"code":138040,"language":128632,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[33,138042,138043],{"__ignoreMap":31},[36,138044,138045,138047,138049,138051,138053,138055,138057,138059,138062,138064,138066,138069],{"class":38,"line":39},[36,138046,2577],{"class":50},[36,138048,55152],{"class":52631},[36,138050,55155],{"class":46},[36,138052,70],{"class":50},[36,138054,64030],{"class":110},[36,138056,16249],{"class":46},[36,138058,70],{"class":50},[36,138060,138061],{"class":110},"\"username\"",[36,138063,62351],{"class":46},[36,138065,70],{"class":50},[36,138067,138068],{"class":110},"\"请输入用户名\"",[36,138070,52638],{"class":50},[2992,138072],{"style":127739,"src":138073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23327,138075,138077],{"id":138076},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[2992,138079],{"style":127739,"src":138080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138082,138083],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138085,138086],{},"快捷操作：",[2992,138088],{"style":127739,"src":138089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138091,138092],{},"例子1：",[26,138094,138096],{"className":128630,"code":138095,"language":128632,"meta":31,"style":31},"\u003Cform action=\"\u002Fsubmit\" method=\"post\">\n  \u003Cinput type=\"text\" name=\"username\" placeholder=\"用户名\">\n  \u003Cinput type=\"password\" name=\"pwd\" placeholder=\"密码\">\n  \u003Cbutton type=\"submit\">提交\u003C\u002Fbutton>\n\u003C\u002Fform>\n",[33,138097,138098,138121,138148,138177,138196],{"__ignoreMap":31},[36,138099,138100,138102,138104,138106,138108,138111,138114,138116,138119],{"class":38,"line":39},[36,138101,2577],{"class":50},[36,138103,67956],{"class":52631},[36,138105,67959],{"class":46},[36,138107,70],{"class":50},[36,138109,138110],{"class":110},"\"\u002Fsubmit\"",[36,138112,138113],{"class":46}," method",[36,138115,70],{"class":50},[36,138117,138118],{"class":110},"\"post\"",[36,138120,52638],{"class":50},[36,138122,138123,138125,138127,138129,138131,138133,138135,138137,138139,138141,138143,138146],{"class":38,"line":54},[36,138124,53475],{"class":50},[36,138126,55152],{"class":52631},[36,138128,55155],{"class":46},[36,138130,70],{"class":50},[36,138132,64030],{"class":110},[36,138134,16249],{"class":46},[36,138136,70],{"class":50},[36,138138,138061],{"class":110},[36,138140,62351],{"class":46},[36,138142,70],{"class":50},[36,138144,138145],{"class":110},"\"用户名\"",[36,138147,52638],{"class":50},[36,138149,138150,138152,138154,138156,138158,138161,138163,138165,138168,138170,138172,138175],{"class":38,"line":61},[36,138151,53475],{"class":50},[36,138153,55152],{"class":52631},[36,138155,55155],{"class":46},[36,138157,70],{"class":50},[36,138159,138160],{"class":110},"\"password\"",[36,138162,16249],{"class":46},[36,138164,70],{"class":50},[36,138166,138167],{"class":110},"\"pwd\"",[36,138169,62351],{"class":46},[36,138171,70],{"class":50},[36,138173,138174],{"class":110},"\"密码\"",[36,138176,52638],{"class":50},[36,138178,138179,138181,138183,138185,138187,138189,138192,138194],{"class":38,"line":80},[36,138180,53475],{"class":50},[36,138182,55218],{"class":52631},[36,138184,55155],{"class":46},[36,138186,70],{"class":50},[36,138188,67979],{"class":110},[36,138190,138191],{"class":50},">提交\u003C\u002F",[36,138193,55218],{"class":52631},[36,138195,52638],{"class":50},[36,138197,138198,138200,138202],{"class":38,"line":96},[36,138199,53116],{"class":50},[36,138201,67956],{"class":52631},[36,138203,52638],{"class":50},[2992,138205],{"style":127739,"src":138206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138208,138209],{},"value是表单域的内容",[19,138211,138212],{},"例子2：",[26,138214,138215],{"className":128630,"code":138095,"language":128632,"meta":31,"style":31},[33,138216,138217,138237,138263,138289,138307],{"__ignoreMap":31},[36,138218,138219,138221,138223,138225,138227,138229,138231,138233,138235],{"class":38,"line":39},[36,138220,2577],{"class":50},[36,138222,67956],{"class":52631},[36,138224,67959],{"class":46},[36,138226,70],{"class":50},[36,138228,138110],{"class":110},[36,138230,138113],{"class":46},[36,138232,70],{"class":50},[36,138234,138118],{"class":110},[36,138236,52638],{"class":50},[36,138238,138239,138241,138243,138245,138247,138249,138251,138253,138255,138257,138259,138261],{"class":38,"line":54},[36,138240,53475],{"class":50},[36,138242,55152],{"class":52631},[36,138244,55155],{"class":46},[36,138246,70],{"class":50},[36,138248,64030],{"class":110},[36,138250,16249],{"class":46},[36,138252,70],{"class":50},[36,138254,138061],{"class":110},[36,138256,62351],{"class":46},[36,138258,70],{"class":50},[36,138260,138145],{"class":110},[36,138262,52638],{"class":50},[36,138264,138265,138267,138269,138271,138273,138275,138277,138279,138281,138283,138285,138287],{"class":38,"line":61},[36,138266,53475],{"class":50},[36,138268,55152],{"class":52631},[36,138270,55155],{"class":46},[36,138272,70],{"class":50},[36,138274,138160],{"class":110},[36,138276,16249],{"class":46},[36,138278,70],{"class":50},[36,138280,138167],{"class":110},[36,138282,62351],{"class":46},[36,138284,70],{"class":50},[36,138286,138174],{"class":110},[36,138288,52638],{"class":50},[36,138290,138291,138293,138295,138297,138299,138301,138303,138305],{"class":38,"line":80},[36,138292,53475],{"class":50},[36,138294,55218],{"class":52631},[36,138296,55155],{"class":46},[36,138298,70],{"class":50},[36,138300,67979],{"class":110},[36,138302,138191],{"class":50},[36,138304,55218],{"class":52631},[36,138306,52638],{"class":50},[36,138308,138309,138311,138313],{"class":38,"line":96},[36,138310,53116],{"class":50},[36,138312,67956],{"class":52631},[36,138314,52638],{"class":50},[2992,138316],{"style":127739,"src":138317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138319,138321],{"id":138320},"_142-css新特性","14.2 CSS新特性",[1645,138323,138325],{"id":138324},"_1421-新增选择器","14.2.1 新增选择器",[23327,138327,138329],{"id":138328},"_14211-属性选择器","14.2.1.1 属性选择器",[2992,138331],{"style":127739,"src":138332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,138334,138336],{"className":127883,"code":138335,"language":127885,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[33,138337,138338,138353,138369],{"__ignoreMap":31},[36,138339,138340,138342,138344,138346,138348,138350],{"class":38,"line":39},[36,138341,55152],{"class":52631},[36,138343,2557],{"class":50},[36,138345,104438],{"class":46},[36,138347,70],{"class":42},[36,138349,64030],{"class":110},[36,138351,138352],{"class":50},"] {\n",[36,138354,138355,138357,138359,138361,138363,138365,138367],{"class":38,"line":54},[36,138356,72227],{"class":73},[36,138358,52768],{"class":50},[36,138360,1885],{"class":73},[36,138362,52823],{"class":42},[36,138364,52852],{"class":73},[36,138366,131463],{"class":73},[36,138368,77],{"class":50},[36,138370,138371],{"class":38,"line":61},[36,138372,250],{"class":50},[2992,138374],{"style":127739,"src":138375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138377,1703],{},[2674,138379,138380,138383,138386,138389],{},[259,138381,138382],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[259,138384,138385],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[259,138387,138388],{},"属性选择器也可以选择出来自定义的属性",[259,138390,138391,138393],{},[887,138392,885],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23327,138395,138397],{"id":138396},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[2992,138399],{"style":127739,"src":138400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[256,138402,138403],{},[259,138404,138405],{},"fist-child",[26,138407,138409],{"className":127883,"code":138408,"language":127885,"meta":31,"style":31},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[33,138410,138411,138416,138431,138451,138469],{"__ignoreMap":31},[36,138412,138413],{"class":38,"line":39},[36,138414,138415],{"class":124},"\u002F* 属性选择器 *\u002F\n",[36,138417,138418,138420,138422,138424,138426,138428],{"class":38,"line":54},[36,138419,55152],{"class":52631},[36,138421,2557],{"class":50},[36,138423,104438],{"class":46},[36,138425,70],{"class":42},[36,138427,64030],{"class":110},[36,138429,138430],{"class":50},"] { }\n",[36,138432,138433,138435,138437,138439,138442,138445,138448],{"class":38,"line":61},[36,138434,55152],{"class":52631},[36,138436,2557],{"class":50},[36,138438,16023],{"class":46},[36,138440,138441],{"class":42},"^=",[36,138443,138444],{"class":110},"\"icon\"",[36,138446,138447],{"class":50},"] { }  ",[36,138449,138450],{"class":124},"\u002F* 以 icon 开头 *\u002F\n",[36,138452,138453,138455,138457,138459,138462,138464,138466],{"class":38,"line":80},[36,138454,55152],{"class":52631},[36,138456,2557],{"class":50},[36,138458,16023],{"class":46},[36,138460,138461],{"class":42},"$=",[36,138463,138444],{"class":110},[36,138465,138447],{"class":50},[36,138467,138468],{"class":124},"\u002F* 以 icon 结尾 *\u002F\n",[36,138470,138471,138473,138475,138477,138480,138482,138484],{"class":38,"line":96},[36,138472,55152],{"class":52631},[36,138474,2557],{"class":50},[36,138476,16023],{"class":46},[36,138478,138479],{"class":42},"*=",[36,138481,138444],{"class":110},[36,138483,138447],{"class":50},[36,138485,138486],{"class":124},"\u002F* 包含 icon *\u002F\n",[19,138488,138489],{},"ul的第一个儿子文本为红色",[19,138491,138492],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,138494,138496],{"className":127883,"code":138495,"language":127885,"meta":31,"style":31},".center {\n  color: red;\n}\n```Css\n\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[33,138497,138498,138504,138514,138518,138522,138527,138540,138553,138569,138586,138603],{"__ignoreMap":31},[36,138499,138500,138502],{"class":38,"line":39},[36,138501,128174],{"class":46},[36,138503,16901],{"class":50},[36,138505,138506,138508,138510,138512],{"class":38,"line":54},[36,138507,72236],{"class":73},[36,138509,52768],{"class":50},[36,138511,58752],{"class":73},[36,138513,77],{"class":50},[36,138515,138516],{"class":38,"line":61},[36,138517,250],{"class":50},[36,138519,138520],{"class":38,"line":80},[36,138521,137344],{"class":50},[36,138523,138524],{"class":38,"line":96},[36,138525,138526],{"class":124},"\u002F* 结构伪类选择器 *\u002F\n",[36,138528,138529,138531,138534,138537],{"class":38,"line":101},[36,138530,259],{"class":52631},[36,138532,138533],{"class":46},":first-child",[36,138535,138536],{"class":50}," { }           ",[36,138538,138539],{"class":124},"\u002F* 第一个 *\u002F\n",[36,138541,138542,138544,138547,138550],{"class":38,"line":128},[36,138543,259],{"class":52631},[36,138545,138546],{"class":46},":last-child",[36,138548,138549],{"class":50}," { }            ",[36,138551,138552],{"class":124},"\u002F* 最后一个 *\u002F\n",[36,138554,138555,138557,138559,138561,138563,138566],{"class":38,"line":149},[36,138556,259],{"class":52631},[36,138558,130797],{"class":46},[36,138560,222],{"class":50},[36,138562,1747],{"class":73},[36,138564,138565],{"class":50},") { }          ",[36,138567,138568],{"class":124},"\u002F* 第2个 *\u002F\n",[36,138570,138571,138573,138575,138577,138580,138583],{"class":38,"line":154},[36,138572,259],{"class":52631},[36,138574,130797],{"class":46},[36,138576,222],{"class":50},[36,138578,138579],{"class":73},"2n",[36,138581,138582],{"class":50},") { }         ",[36,138584,138585],{"class":124},"\u002F* 偶数 *\u002F\n",[36,138587,138588,138590,138592,138594,138597,138600],{"class":38,"line":167},[36,138589,259],{"class":52631},[36,138591,130797],{"class":46},[36,138593,222],{"class":50},[36,138595,138596],{"class":73},"2n+1",[36,138598,138599],{"class":50},") { }       ",[36,138601,138602],{"class":124},"\u002F* 奇数 *\u002F\n",[36,138604,138605,138607,138609,138611,138614,138616],{"class":38,"line":172},[36,138606,259],{"class":52631},[36,138608,130797],{"class":46},[36,138610,222],{"class":50},[36,138612,138613],{"class":73},"-n+3",[36,138615,138599],{"class":50},[36,138617,138618],{"class":124},"\u002F* 前3个 *\u002F\n",[52942,138620,138623],{"className":138621},[138622],"example","\n  示例内容\n",[19,138625,138626],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2674,138628,138629],{},[259,138630,138631,138634],{},[33,138632,138633],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138636,138637],{},"也就是说它选择的是熊大",[256,138639,138640],{"start":101},[259,138641,138642],{},"权重",[26,138644,138646],{"className":127883,"code":138645,"language":127885,"meta":31,"style":31},"\u002F* 结构伪类选择器 *\u002F\nli:first-child { }           \u002F* 第一个 *\u002F\nli:last-child { }            \u002F* 最后一个 *\u002F\nli:nth-child(2) { }          \u002F* 第2个 *\u002F\nli:nth-child(2n) { }         \u002F* 偶数 *\u002F\nli:nth-child(2n+1) { }       \u002F* 奇数 *\u002F\nli:nth-child(-n+3) { }       \u002F* 前3个 *\u002F\n",[33,138647,138648,138652,138662,138672,138686,138700,138714],{"__ignoreMap":31},[36,138649,138650],{"class":38,"line":39},[36,138651,138526],{"class":124},[36,138653,138654,138656,138658,138660],{"class":38,"line":54},[36,138655,259],{"class":52631},[36,138657,138533],{"class":46},[36,138659,138536],{"class":50},[36,138661,138539],{"class":124},[36,138663,138664,138666,138668,138670],{"class":38,"line":61},[36,138665,259],{"class":52631},[36,138667,138546],{"class":46},[36,138669,138549],{"class":50},[36,138671,138552],{"class":124},[36,138673,138674,138676,138678,138680,138682,138684],{"class":38,"line":80},[36,138675,259],{"class":52631},[36,138677,130797],{"class":46},[36,138679,222],{"class":50},[36,138681,1747],{"class":73},[36,138683,138565],{"class":50},[36,138685,138568],{"class":124},[36,138687,138688,138690,138692,138694,138696,138698],{"class":38,"line":96},[36,138689,259],{"class":52631},[36,138691,130797],{"class":46},[36,138693,222],{"class":50},[36,138695,138579],{"class":73},[36,138697,138582],{"class":50},[36,138699,138585],{"class":124},[36,138701,138702,138704,138706,138708,138710,138712],{"class":38,"line":101},[36,138703,259],{"class":52631},[36,138705,130797],{"class":46},[36,138707,222],{"class":50},[36,138709,138596],{"class":73},[36,138711,138599],{"class":50},[36,138713,138602],{"class":124},[36,138715,138716,138718,138720,138722,138724,138726],{"class":38,"line":128},[36,138717,259],{"class":52631},[36,138719,130797],{"class":46},[36,138721,222],{"class":50},[36,138723,138613],{"class":73},[36,138725,138599],{"class":50},[36,138727,138618],{"class":124},[19,138729,138730],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23327,138732,138734],{"id":138733},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138736,138737],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[2992,138739],{"style":127739,"src":138740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[256,138742,138743],{},[259,138744,1703],{},[2674,138746,138747,138750,138753,138756,138759,138762],{},[259,138748,138749],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[259,138751,138752],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[259,138754,138755],{},"语法： element::before {}",[259,138757,138758],{},"before 和 after 必须有 content 属性",[259,138760,138761],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[259,138763,138764],{},"伪元素选择器和标签选择器一样，权重为 1",[256,138766,138767],{"start":54},[259,138768,138769],{},"实例",[26,138771,138772],{"className":127883,"code":138645,"language":127885,"meta":31,"style":31},[33,138773,138774,138778,138788,138798,138812,138826,138840],{"__ignoreMap":31},[36,138775,138776],{"class":38,"line":39},[36,138777,138526],{"class":124},[36,138779,138780,138782,138784,138786],{"class":38,"line":54},[36,138781,259],{"class":52631},[36,138783,138533],{"class":46},[36,138785,138536],{"class":50},[36,138787,138539],{"class":124},[36,138789,138790,138792,138794,138796],{"class":38,"line":61},[36,138791,259],{"class":52631},[36,138793,138546],{"class":46},[36,138795,138549],{"class":50},[36,138797,138552],{"class":124},[36,138799,138800,138802,138804,138806,138808,138810],{"class":38,"line":80},[36,138801,259],{"class":52631},[36,138803,130797],{"class":46},[36,138805,222],{"class":50},[36,138807,1747],{"class":73},[36,138809,138565],{"class":50},[36,138811,138568],{"class":124},[36,138813,138814,138816,138818,138820,138822,138824],{"class":38,"line":96},[36,138815,259],{"class":52631},[36,138817,130797],{"class":46},[36,138819,222],{"class":50},[36,138821,138579],{"class":73},[36,138823,138582],{"class":50},[36,138825,138585],{"class":124},[36,138827,138828,138830,138832,138834,138836,138838],{"class":38,"line":101},[36,138829,259],{"class":52631},[36,138831,130797],{"class":46},[36,138833,222],{"class":50},[36,138835,138596],{"class":73},[36,138837,138599],{"class":50},[36,138839,138602],{"class":124},[36,138841,138842,138844,138846,138848,138850,138852],{"class":38,"line":128},[36,138843,259],{"class":52631},[36,138845,130797],{"class":46},[36,138847,222],{"class":50},[36,138849,138613],{"class":73},[36,138851,138599],{"class":50},[36,138853,138618],{"class":124},[2992,138855],{"style":127739,"src":138856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[256,138858,138859],{"start":61},[259,138860,138861],{},"使用场景1",[2992,138863],{"style":127739,"src":138864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138866,138867],{},"不需要再加盒子来整红色那部分了",[26,138869,138871],{"className":127883,"code":138870,"language":127885,"meta":31,"style":31},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,138872,138873,138878,138887,138898,138908,138912,138921,138932,138942],{"__ignoreMap":31},[36,138874,138875],{"class":38,"line":39},[36,138876,138877],{"class":124},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[36,138879,138880,138882,138885],{"class":38,"line":54},[36,138881,52942],{"class":52631},[36,138883,138884],{"class":46},"::before",[36,138886,16901],{"class":50},[36,138888,138889,138892,138894,138896],{"class":38,"line":61},[36,138890,138891],{"class":73},"  content",[36,138893,52768],{"class":50},[36,138895,9126],{"class":110},[36,138897,77],{"class":50},[36,138899,138900,138902,138904,138906],{"class":38,"line":80},[36,138901,129499],{"class":73},[36,138903,52768],{"class":50},[36,138905,62200],{"class":73},[36,138907,77],{"class":50},[36,138909,138910],{"class":38,"line":96},[36,138911,250],{"class":50},[36,138913,138914,138916,138919],{"class":38,"line":101},[36,138915,52942],{"class":52631},[36,138917,138918],{"class":46},"::after",[36,138920,16901],{"class":50},[36,138922,138923,138925,138927,138930],{"class":38,"line":128},[36,138924,138891],{"class":73},[36,138926,52768],{"class":50},[36,138928,138929],{"class":110},"\"→\"",[36,138931,77],{"class":50},[36,138933,138934,138936,138938,138940],{"class":38,"line":149},[36,138935,72236],{"class":73},[36,138937,52768],{"class":50},[36,138939,63401],{"class":73},[36,138941,77],{"class":50},[36,138943,138944],{"class":38,"line":154},[36,138945,250],{"class":50},[2992,138947],{"style":127739,"src":138948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138950,138951],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[2992,138953],{"style":127739,"src":138954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138956,138957],{},"但是在引用时需要先转义一下",[19,138959,138960],{},"content='\\e930'",[256,138962,138963],{"start":80},[259,138964,138965],{},"使用场景2",[19,138967,138968],{},"仿土豆效果",[19,138970,138971],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,138973,138974],{"className":127883,"code":138870,"language":127885,"meta":31,"style":31},[33,138975,138976,138980,138988,138998,139008,139012,139020,139030,139040],{"__ignoreMap":31},[36,138977,138978],{"class":38,"line":39},[36,138979,138877],{"class":124},[36,138981,138982,138984,138986],{"class":38,"line":54},[36,138983,52942],{"class":52631},[36,138985,138884],{"class":46},[36,138987,16901],{"class":50},[36,138989,138990,138992,138994,138996],{"class":38,"line":61},[36,138991,138891],{"class":73},[36,138993,52768],{"class":50},[36,138995,9126],{"class":110},[36,138997,77],{"class":50},[36,138999,139000,139002,139004,139006],{"class":38,"line":80},[36,139001,129499],{"class":73},[36,139003,52768],{"class":50},[36,139005,62200],{"class":73},[36,139007,77],{"class":50},[36,139009,139010],{"class":38,"line":96},[36,139011,250],{"class":50},[36,139013,139014,139016,139018],{"class":38,"line":101},[36,139015,52942],{"class":52631},[36,139017,138918],{"class":46},[36,139019,16901],{"class":50},[36,139021,139022,139024,139026,139028],{"class":38,"line":128},[36,139023,138891],{"class":73},[36,139025,52768],{"class":50},[36,139027,138929],{"class":110},[36,139029,77],{"class":50},[36,139031,139032,139034,139036,139038],{"class":38,"line":149},[36,139033,72236],{"class":73},[36,139035,52768],{"class":50},[36,139037,63401],{"class":73},[36,139039,77],{"class":50},[36,139041,139042],{"class":38,"line":154},[36,139043,250],{"class":50},[2992,139045],{"style":127739,"src":139046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[256,139048,139049],{"start":96},[259,139050,139051],{},"使用场景3",[19,139053,139054],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,139056,139058],{"className":127883,"code":139057,"language":127885,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,139059,139060,139066,139076,139080,139084,139088,139096,139106,139116,139120,139128,139138,139148],{"__ignoreMap":31},[36,139061,139062,139064],{"class":38,"line":39},[36,139063,131731],{"class":46},[36,139065,16901],{"class":50},[36,139067,139068,139070,139072,139074],{"class":38,"line":54},[36,139069,132363],{"class":73},[36,139071,52768],{"class":50},[36,139073,25066],{"class":73},[36,139075,77],{"class":50},[36,139077,139078],{"class":38,"line":61},[36,139079,250],{"class":50},[36,139081,139082],{"class":38,"line":80},[36,139083,137344],{"class":50},[36,139085,139086],{"class":38,"line":96},[36,139087,138877],{"class":124},[36,139089,139090,139092,139094],{"class":38,"line":101},[36,139091,52942],{"class":52631},[36,139093,138884],{"class":46},[36,139095,16901],{"class":50},[36,139097,139098,139100,139102,139104],{"class":38,"line":128},[36,139099,138891],{"class":73},[36,139101,52768],{"class":50},[36,139103,9126],{"class":110},[36,139105,77],{"class":50},[36,139107,139108,139110,139112,139114],{"class":38,"line":149},[36,139109,129499],{"class":73},[36,139111,52768],{"class":50},[36,139113,62200],{"class":73},[36,139115,77],{"class":50},[36,139117,139118],{"class":38,"line":154},[36,139119,250],{"class":50},[36,139121,139122,139124,139126],{"class":38,"line":167},[36,139123,52942],{"class":52631},[36,139125,138918],{"class":46},[36,139127,16901],{"class":50},[36,139129,139130,139132,139134,139136],{"class":38,"line":172},[36,139131,138891],{"class":73},[36,139133,52768],{"class":50},[36,139135,138929],{"class":110},[36,139137,77],{"class":50},[36,139139,139140,139142,139144,139146],{"class":38,"line":192},[36,139141,72236],{"class":73},[36,139143,52768],{"class":50},[36,139145,63401],{"class":73},[36,139147,77],{"class":50},[36,139149,139150],{"class":38,"line":211},[36,139151,250],{"class":50},[19,139153,139154],{},"div {\nmargin: 0 auto;\n}",[26,139156,139159],{"className":139157,"code":139158,"language":6676},[6674],"\n### 14.2.3 CSS3图片变模糊\n\nfilter CSS属性将模糊或颜色偏移等图形效果应用于元素\n\n`filter: 函数();`，例如：`filter: blur(5px);`，`blur` 表示模糊处理，数值越大越模糊。\n\n### 14.2.4 计算盒子宽度\n\ncalc() 此CSS函数让你在声明CSS属性值时执行一些计算\n\nwidth: calc(100% - 80px);\n\n括号里面可以使用 + - \\* \u002F 来进行计算\n\n运算符前后要加空格，不然显示不出来\n\n要求子盒子宽度永远比父盒子小30像素\n\n### 14.2.5 CSS3 过渡\n\n过渡（transition)是CSS3中具有颠覆性的特征之一，我们可以在不使用 Flash 动画或 JavaScript 的情况下，当元素从一种样式变换为另一种样式时为元素添加效果\n\n**过渡动画：** 是从一个状态 渐渐的过渡到另外一个状态\n\n可以让我们页面更好看，更动感十足，虽然 低版本浏览器不支持（ie9以下版本） 但是不会影响页面布局。\n\n我们现在经常和 :hover 一起 搭配使用\n\n语法：\n\ntransition: 要过渡的属性 花费时间 运动曲线 何时开始;\n\n*   属性 ： 想要变化的 css 属性， 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡， 写一个all 就可以\n    \n*   花费时间： 单位是 秒（必须写单位） 比如 0.5s\n    \n*   运动曲线： 默认是 ease （可以省略）\n    \n*   何时开始：单位是 秒（必须写单位）可以设置延迟触发时间 默认是 0s （可以省略）\n    \n*   **后面两个属性可以省略**\n    \n*   **记住过渡的使用口诀： 谁做过渡给谁加**\n    \n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-140.png\">\n\n代码案例\n\n```Css\ndiv {\n  transition: all 0.3s ease;\n}\n",[33,139160,139158],{"__ignoreMap":31},[19,139162,139163],{},"如果想让多个元素都发生变化",[19,139165,139166],{},"不能如下操作：",[19,139168,139169],{},"transition: width 2s ease 0.5s;",[19,139171,139172],{},"transition: height 2s ease 0.5s;不对！！！",[19,139174,139175],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139177,139178],{},"使用如下：加逗号隔开",[19,139180,139181],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139183,139184],{},"transition all 2s ease;",[1645,139186,139188],{"id":139187},"_1426-过渡练习","14.2.6 过渡练习",[256,139190,139191],{},[259,139192,139193],{},"进度条",[2992,139195],{"style":127739,"src":139196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,139198,139200],{"className":127883,"code":139199,"language":127885,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[33,139201,139202,139208,139226],{"__ignoreMap":31},[36,139203,139204,139206],{"class":38,"line":39},[36,139205,52942],{"class":52631},[36,139207,16901],{"class":50},[36,139209,139210,139213,139215,139217,139220,139222,139224],{"class":38,"line":54},[36,139211,139212],{"class":73},"  transition",[36,139214,52768],{"class":50},[36,139216,29452],{"class":73},[36,139218,139219],{"class":73}," 0.3",[36,139221,2362],{"class":42},[36,139223,80011],{"class":73},[36,139225,77],{"class":50},[36,139227,139228],{"class":38,"line":61},[36,139229,250],{"class":50},[256,139231,139232],{"start":54},[259,139233,139234],{},"小米logo",[19,139236,139237],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,139239,139241],{"className":127883,"code":139240,"language":127885,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[33,139242,139243,139248,139254,139270,139275],{"__ignoreMap":31},[36,139244,139245],{"class":38,"line":39},[36,139246,139247],{"class":124},"\u002F* CSS3 过渡 *\u002F\n",[36,139249,139250,139252],{"class":38,"line":54},[36,139251,52942],{"class":52631},[36,139253,16901],{"class":50},[36,139255,139256,139258,139260,139262,139264,139266,139268],{"class":38,"line":61},[36,139257,139212],{"class":73},[36,139259,52768],{"class":50},[36,139261,29452],{"class":73},[36,139263,139219],{"class":73},[36,139265,2362],{"class":42},[36,139267,80011],{"class":73},[36,139269,77],{"class":50},[36,139271,139272],{"class":38,"line":80},[36,139273,139274],{"class":124},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[36,139276,139277],{"class":38,"line":96},[36,139278,250],{"class":50},[19,139280,139281],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1592,139283,139284],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":139286},[139287,139292],{"id":137617,"depth":54,"text":137618,"children":139288},[139289,139290,139291],{"id":137621,"depth":61,"text":137622},{"id":137698,"depth":61,"text":137699},{"id":138029,"depth":61,"text":138030},{"id":138320,"depth":54,"text":138321,"children":139293},[139294,139295],{"id":138324,"depth":61,"text":138325},{"id":139187,"depth":61,"text":139188},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137609,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139302,"title":139303,"body":139304,"description":24706,"extension":1603,"meta":141048,"navigation":57,"path":141049,"seo":141050,"stem":141051,"__hash__":141052},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139305,"toc":141029},[139306,139309,139313,139316,139322,139328,139332,139334,139337,139340,139343,139346,139349,139352,139355,139359,139363,139366,139369,139372,139376,139379,139382,139387,139390,139393,139396,139400,139403,139412,139415,139418,139422,139425,139428,139433,139440,139454,139462,139469,139474,139477,139480,139483,139490,139494,139500,139506,139509,139512,139517,139523,139525,139533,139538,139541,139547,139549,139554,139559,139562,139564,139569,139572,139577,139582,139616,139620,139624,139627,139631,139634,139720,139723,139760,139763,139799,139803,139808,139821,139875,139877,139905,139907,139935,139941,139955,139957,140001,140003,140047,140050,140057,140068,140070,140097,140099,140125,140132,140148,140150,140244,140246,140340,140347,140350,140355,140361,140435,140438,140440,140476,140478,140514,140517,140524,140543,140546,140549,140551,140576,140578,140602,140605,140608,140638,140642,140645,140708,140710,140776,140778,140842,140845,140877,140879,140905,140907,140933,140936,140967,140969,140995,140997,141023,141026],[10,139307,139303],{"id":139308},"_15-品优购项目上篇-搭建与公共模块",[14,139310,139312],{"id":139311},"_151-项目规划","15.1 项目规划",[2992,139314],{"style":127739,"src":139315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139317,139318,139321],{},[887,139319,139320],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139323,139324,139327],{},[887,139325,139326],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139329,139331],{"id":139330},"_152-项目介绍","15.2 项目介绍",[19,139333,139320],{},[2992,139335],{"style":127739,"src":139336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139338,139339],{},"主页：",[2992,139341],{"style":127739,"src":139342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139344,139345],{},"列表页：",[2992,139347],{"style":127739,"src":139348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139350,139351],{},"注册页：",[2992,139353],{"style":127739,"src":139354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139356,139358],{"id":139357},"_153-项目搭建工作","15.3 项目搭建工作",[1645,139360,139362],{"id":139361},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[2992,139364],{"style":127739,"src":139365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139367,139368],{},"经常更换的图片要放到upload文件夹中",[19,139370,139371],{},"不经常换的放到images文件夹中",[1645,139373,139375],{"id":139374},"_1532-创建文件如下","15.3.2 创建文件如下",[2992,139377],{"style":127739,"src":139378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[2992,139380],{"style":127739,"src":139381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139383,139384],{},[887,139385,139386],{},"初始化样式：",[19,139388,139389],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139391,139392],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139394,139395],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[1645,139397,139399],{"id":139398},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139401,139402],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139404,139405,139406,139411],{},"这里最典型的应用就是 ",[887,139407,139408],{},[33,139409,139410],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[2992,139413],{"style":127739,"src":139414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139416,139417],{},"通过link方法来引入",[1645,139419,139421],{"id":139420},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[2992,139423],{"style":127739,"src":139424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139426,139427],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[256,139429,139430],{},[259,139431,139432],{},"制作favicon图标",[19,139434,139435,139436,139439],{},"①把品优购图标切成 ",[33,139437,139438],{},"png"," 图片",[19,139441,139442,139443,139445,139446,139449,139450],{},"②把 ",[33,139444,139438],{}," 图片转换为 ",[33,139447,139448],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[1906,139451,139452],{"href":139452,"rel":139453},"http:\u002F\u002Fwww.bitbug.net\u002F",[25195],[256,139455,139456,139459],{"start":54},[259,139457,139458],{},"favicon图标放到网站根目录下",[259,139460,139461],{},"HTML页面引入favicon",[19,139463,139464,139465,139468],{},"在html 页面里面的 ",[33,139466,139467],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139470,139471],{},[33,139472,139473],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139475,139476],{},"复制这行代码或者在生成这个的网站进行复制",[2992,139478],{"style":127739,"src":139479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139481,139482],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139484,139485,139486],{},"例如:",[1906,139487,139488],{"href":139488,"rel":139489},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25195],[1645,139491,139493],{"id":139492},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139495,139496,139499],{},[887,139497,139498],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139501,139502,139505],{},[887,139503,139504],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139507,139508],{},"页面必须有三个标签用来符合 SEO 优化",[2992,139510],{"style":127739,"src":139511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[256,139513,139514],{},[259,139515,139516],{},"title网站标题",[19,139518,139519,139522],{},[887,139520,139521],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139524,70121],{},[2674,139526,139527,139530],{},[259,139528,139529],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[259,139531,139532],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[256,139534,139535],{"start":54},[259,139536,139537],{},"description网站描述",[19,139539,139540],{},"简要说明我们网站主要是做什么的",[19,139542,139543,139546],{},[887,139544,139545],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139548,70121],{},[19,139550,139551],{},[33,139552,139553],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[256,139555,139556],{"start":61},[259,139557,139558],{},"keywords关键词",[19,139560,139561],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139563,70121],{},[19,139565,139566],{},[33,139567,139568],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139570,139571],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139573,139574],{},[887,139575,139576],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[256,139578,139579],{"start":80},[259,139580,139581],{},"代码总结",[26,139583,139584],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,139585,139586,139590,139604,139608],{"__ignoreMap":31},[36,139587,139588],{"class":38,"line":39},[36,139589,131994],{"class":124},[36,139591,139592,139594,139596,139598,139600,139602],{"class":38,"line":54},[36,139593,2577],{"class":50},[36,139595,52942],{"class":52631},[36,139597,54817],{"class":46},[36,139599,70],{"class":50},[36,139601,132007],{"class":110},[36,139603,52638],{"class":50},[36,139605,139606],{"class":38,"line":61},[36,139607,132014],{"class":50},[36,139609,139610,139612,139614],{"class":38,"line":80},[36,139611,53116],{"class":50},[36,139613,52942],{"class":52631},[36,139615,52638],{"class":50},[14,139617,139619],{"id":139618},"_154-项目公共部分制作","15.4 项目公共部分制作",[1645,139621,139623],{"id":139622},"_1541-常用模块类命名","15.4.1 常用模块类命名",[2992,139625],{"style":127739,"src":139626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[1645,139628,139630],{"id":139629},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139632,139633],{},"布局思路：",[2674,139635,139636,139639,139642,139664,139697],{},[259,139637,139638],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[259,139640,139641],{},"里面包含版心的盒子",[259,139643,139644,139645],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2674,139646,139647,139655,139661],{},[259,139648,139649,139650,22829,139652,139654],{},"1 号盒子 里面包含一个",[33,139651,2674],{},[33,139653,2674],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[259,139656,139657,139658,139660],{},"里面的内容是水平排列，所以需要给",[33,139659,259],{},"设置浮动",[259,139662,139663],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[259,139665,139666,139667],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2674,139668,139669,139683,139688],{},[259,139670,139671,139672,22829,139674,139676,139677,139679,139680,139682],{},"2 号盒子 里面包含一个",[33,139673,2674],{},[33,139675,2674],{},"包裹",[33,139678,259],{},"，中间的",[33,139681,2588],{},"可以用样式去设置，也可以用字符 |",[259,139684,139685,139686,139660],{},"里面内容水平排列，给",[33,139687,259],{},[259,139689,139690,139691,139693,139694,139696],{},"找到里面所有偶数的 ",[33,139692,259],{}," 设置样式（偶数的 ",[33,139695,259],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[259,139698,139699,139700],{},"需要用到字体图标",[2674,139701,139702,139708,139711,139714,139717],{},[259,139703,139704,139705],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[33,139706,139707],{},"arrow-icon",[259,139709,139710],{},"先要引入字体图片的资源",[259,139712,139713],{},"在样式里面利用 font-face 来进行声明",[259,139715,139716],{},"在伪元素的 content属性设置 图标的编码",[259,139718,139719],{},"给伪元素设置font-family属性",[19,139721,139722],{},"结构实例代码：",[26,139724,139726],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[33,139727,139728,139736,139746,139756],{"__ignoreMap":31},[36,139729,139730,139732,139734],{"class":38,"line":39},[36,139731,52942],{"class":52631},[36,139733,138884],{"class":46},[36,139735,16901],{"class":50},[36,139737,139738,139740,139742,139744],{"class":38,"line":54},[36,139739,138891],{"class":73},[36,139741,52768],{"class":50},[36,139743,9126],{"class":110},[36,139745,77],{"class":50},[36,139747,139748,139750,139752,139754],{"class":38,"line":61},[36,139749,129499],{"class":73},[36,139751,52768],{"class":50},[36,139753,62200],{"class":73},[36,139755,77],{"class":50},[36,139757,139758],{"class":38,"line":80},[36,139759,250],{"class":50},[19,139761,139762],{},"样式实例代码：",[26,139764,139765],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},[33,139766,139767,139775,139785,139795],{"__ignoreMap":31},[36,139768,139769,139771,139773],{"class":38,"line":39},[36,139770,52942],{"class":52631},[36,139772,138884],{"class":46},[36,139774,16901],{"class":50},[36,139776,139777,139779,139781,139783],{"class":38,"line":54},[36,139778,138891],{"class":73},[36,139780,52768],{"class":50},[36,139782,9126],{"class":110},[36,139784,77],{"class":50},[36,139786,139787,139789,139791,139793],{"class":38,"line":61},[36,139788,129499],{"class":73},[36,139790,52768],{"class":50},[36,139792,62200],{"class":73},[36,139794,77],{"class":50},[36,139796,139797],{"class":38,"line":80},[36,139798,250],{"class":50},[1645,139800,139802],{"id":139801},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2674,139804,139805],{},[259,139806,139807],{},"header 盒子必须要有高度",[19,139809,139810,139811,139813,139814],{},"1 号盒子是 ",[33,139812,132895],{}," 标志定位，在正常开发过程中， ",[887,139815,139816,139817,139820],{},"logo的布局其实是有讲究的，需要进行 ",[33,139818,139819],{},"logoSEO","的优化 （★★★）",[2674,139822,139823,139831,139839,139866],{},[259,139824,139825,139827,139828,139830],{},[33,139826,132895],{}," 里面首先放一个 ",[33,139829,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[259,139832,139833,139835,139836,139838],{},[33,139834,10],{}," 里面再放一个链接，可以返回首页的，把 ",[33,139837,132895],{}," 的背景图片给链接即可",[259,139840,139841,139842],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2674,139843,139844,139859],{},[259,139845,139846,139847,139850,139851,139854,139855,139858],{},"方法1：",[33,139848,139849],{},"text-indent"," 移到盒子外面（",[33,139852,139853],{},"text-indent: -9999px",") ，然后 ",[33,139856,139857],{},"overflow:hidden"," ，淘宝的做法",[259,139860,139861,139862,139865],{},"方法2：直接给 ",[33,139863,139864],{},"font-size: 0;"," 就看不到文字了，京东的做法",[259,139867,139868,139869,139871,139872,139874],{},"最后给链接一个 ",[33,139870,52738],{}," 属性，这样鼠标放到 ",[33,139873,132895],{}," 上就可以看到提示文字了",[19,139876,139722],{},[26,139878,139879],{"className":128630,"code":133116,"language":128632,"meta":31,"style":31},[33,139880,139881],{"__ignoreMap":31},[36,139882,139883,139885,139887,139889,139891,139893,139895,139897,139899,139901,139903],{"class":38,"line":39},[36,139884,2577],{"class":50},[36,139886,1906],{"class":52631},[36,139888,62388],{"class":46},[36,139890,70],{"class":50},[36,139892,133131],{"class":110},[36,139894,133134],{"class":46},[36,139896,70],{"class":50},[36,139898,133139],{"class":110},[36,139900,133142],{"class":50},[36,139902,1906],{"class":52631},[36,139904,52638],{"class":50},[19,139906,139762],{},[26,139908,139909],{"className":128630,"code":133116,"language":128632,"meta":31,"style":31},[33,139910,139911],{"__ignoreMap":31},[36,139912,139913,139915,139917,139919,139921,139923,139925,139927,139929,139931,139933],{"class":38,"line":39},[36,139914,2577],{"class":50},[36,139916,1906],{"class":52631},[36,139918,62388],{"class":46},[36,139920,70],{"class":50},[36,139922,133131],{"class":110},[36,139924,133134],{"class":46},[36,139926,70],{"class":50},[36,139928,133139],{"class":110},[36,139930,133142],{"class":50},[36,139932,1906],{"class":52631},[36,139934,52638],{"class":50},[19,139936,139937,139938,139940],{},"2 号盒子是 ",[33,139939,132908],{}," 搜索模块定位",[2674,139942,139943,139946,139949,139952],{},[259,139944,139945],{},"search盒子利用定位的方式放在对应的位置",[259,139947,139948],{},"search盒子设置绝对定位，header盒子设置相对定位",[259,139950,139951],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[259,139953,139954],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139956,139722],{},[26,139958,139959],{"className":127883,"code":133203,"language":127885,"meta":31,"style":31},[33,139960,139961,139983,139987,139997],{"__ignoreMap":31},[36,139962,139963,139965,139967,139969,139971,139973,139975,139977,139979,139981],{"class":38,"line":39},[36,139964,52942],{"class":52631},[36,139966,477],{"class":50},[36,139968,19],{"class":52631},[36,139970,477],{"class":50},[36,139972,10],{"class":52631},[36,139974,477],{"class":50},[36,139976,2674],{"class":52631},[36,139978,477],{"class":50},[36,139980,259],{"class":52631},[36,139982,16901],{"class":50},[36,139984,139985],{"class":38,"line":54},[36,139986,133232],{"class":124},[36,139988,139989,139991,139993,139995],{"class":38,"line":61},[36,139990,129499],{"class":73},[36,139992,52768],{"class":50},[36,139994,62200],{"class":73},[36,139996,77],{"class":50},[36,139998,139999],{"class":38,"line":80},[36,140000,250],{"class":50},[19,140002,139762],{},[26,140004,140005],{"className":127883,"code":133203,"language":127885,"meta":31,"style":31},[33,140006,140007,140029,140033,140043],{"__ignoreMap":31},[36,140008,140009,140011,140013,140015,140017,140019,140021,140023,140025,140027],{"class":38,"line":39},[36,140010,52942],{"class":52631},[36,140012,477],{"class":50},[36,140014,19],{"class":52631},[36,140016,477],{"class":50},[36,140018,10],{"class":52631},[36,140020,477],{"class":50},[36,140022,2674],{"class":52631},[36,140024,477],{"class":50},[36,140026,259],{"class":52631},[36,140028,16901],{"class":50},[36,140030,140031],{"class":38,"line":54},[36,140032,133232],{"class":124},[36,140034,140035,140037,140039,140041],{"class":38,"line":61},[36,140036,129499],{"class":73},[36,140038,52768],{"class":50},[36,140040,62200],{"class":73},[36,140042,77],{"class":50},[36,140044,140045],{"class":38,"line":80},[36,140046,250],{"class":50},[19,140048,140049],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140051,140052,140053,140056],{},"3 号盒子是 ",[33,140054,140055],{},"hotwords"," 热词模块定位",[2674,140058,140059,140062,140065],{},[259,140060,140061],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[259,140063,140064],{},"给里面所有的a标签设置 左右10px的外边距",[259,140066,140067],{},"给第一个a标签设置文字变红色（#c81623）",[19,140069,139722],{},[26,140071,140073],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[33,140074,140075,140081,140093],{"__ignoreMap":31},[36,140076,140077,140079],{"class":38,"line":39},[36,140078,52942],{"class":52631},[36,140080,16901],{"class":50},[36,140082,140083,140085,140087,140089,140091],{"class":38,"line":54},[36,140084,71801],{"class":73},[36,140086,52768],{"class":50},[36,140088,1859],{"class":73},[36,140090,52887],{"class":73},[36,140092,77],{"class":50},[36,140094,140095],{"class":38,"line":61},[36,140096,250],{"class":50},[19,140098,139762],{},[26,140100,140101],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,140102,140103,140109,140121],{"__ignoreMap":31},[36,140104,140105,140107],{"class":38,"line":39},[36,140106,52942],{"class":52631},[36,140108,16901],{"class":50},[36,140110,140111,140113,140115,140117,140119],{"class":38,"line":54},[36,140112,71801],{"class":73},[36,140114,52768],{"class":50},[36,140116,1859],{"class":73},[36,140118,52887],{"class":73},[36,140120,77],{"class":50},[36,140122,140123],{"class":38,"line":61},[36,140124,250],{"class":50},[19,140126,140127,140128,140131],{},"4 号盒子是 ",[33,140129,140130],{},"shopcar"," 购物车模块",[2674,140133,140134,140139,140142,140145],{},[259,140135,124666,140136,140138],{},[33,140137,140130],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[259,140140,140141],{},"count 统计部分用绝对定位做",[259,140143,140144],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[259,140146,140147],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140149,139722],{},[26,140151,140152],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},[33,140153,140154,140158,140172,140176,140190,140194,140208,140212,140226,140230],{"__ignoreMap":31},[36,140155,140156],{"class":38,"line":39},[36,140157,133322],{"class":124},[36,140159,140160,140162,140164,140166,140168,140170],{"class":38,"line":54},[36,140161,133327],{"class":46},[36,140163,81138],{"class":50},[36,140165,130243],{"class":73},[36,140167,52768],{"class":50},[36,140169,133336],{"class":73},[36,140171,130813],{"class":50},[36,140173,140174],{"class":38,"line":61},[36,140175,133343],{"class":124},[36,140177,140178,140180,140182,140184,140186,140188],{"class":38,"line":80},[36,140179,133348],{"class":46},[36,140181,81138],{"class":50},[36,140183,130243],{"class":73},[36,140185,52768],{"class":50},[36,140187,56095],{"class":73},[36,140189,130813],{"class":50},[36,140191,140192],{"class":38,"line":96},[36,140193,133363],{"class":124},[36,140195,140196,140198,140200,140202,140204,140206],{"class":38,"line":101},[36,140197,133368],{"class":46},[36,140199,81138],{"class":50},[36,140201,130243],{"class":73},[36,140203,52768],{"class":50},[36,140205,56162],{"class":73},[36,140207,130813],{"class":50},[36,140209,140210],{"class":38,"line":128},[36,140211,133383],{"class":124},[36,140213,140214,140216,140218,140220,140222,140224],{"class":38,"line":149},[36,140215,133388],{"class":46},[36,140217,81138],{"class":50},[36,140219,130243],{"class":73},[36,140221,52768],{"class":50},[36,140223,87564],{"class":73},[36,140225,130813],{"class":50},[36,140227,140228],{"class":38,"line":154},[36,140229,133403],{"class":124},[36,140231,140232,140234,140236,140238,140240,140242],{"class":38,"line":167},[36,140233,133408],{"class":46},[36,140235,81138],{"class":50},[36,140237,130243],{"class":73},[36,140239,52768],{"class":50},[36,140241,133417],{"class":73},[36,140243,130813],{"class":50},[19,140245,139762],{},[26,140247,140248],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},[33,140249,140250,140254,140268,140272,140286,140290,140304,140308,140322,140326],{"__ignoreMap":31},[36,140251,140252],{"class":38,"line":39},[36,140253,133322],{"class":124},[36,140255,140256,140258,140260,140262,140264,140266],{"class":38,"line":54},[36,140257,133327],{"class":46},[36,140259,81138],{"class":50},[36,140261,130243],{"class":73},[36,140263,52768],{"class":50},[36,140265,133336],{"class":73},[36,140267,130813],{"class":50},[36,140269,140270],{"class":38,"line":61},[36,140271,133343],{"class":124},[36,140273,140274,140276,140278,140280,140282,140284],{"class":38,"line":80},[36,140275,133348],{"class":46},[36,140277,81138],{"class":50},[36,140279,130243],{"class":73},[36,140281,52768],{"class":50},[36,140283,56095],{"class":73},[36,140285,130813],{"class":50},[36,140287,140288],{"class":38,"line":96},[36,140289,133363],{"class":124},[36,140291,140292,140294,140296,140298,140300,140302],{"class":38,"line":101},[36,140293,133368],{"class":46},[36,140295,81138],{"class":50},[36,140297,130243],{"class":73},[36,140299,52768],{"class":50},[36,140301,56162],{"class":73},[36,140303,130813],{"class":50},[36,140305,140306],{"class":38,"line":128},[36,140307,133383],{"class":124},[36,140309,140310,140312,140314,140316,140318,140320],{"class":38,"line":149},[36,140311,133388],{"class":46},[36,140313,81138],{"class":50},[36,140315,130243],{"class":73},[36,140317,52768],{"class":50},[36,140319,87564],{"class":73},[36,140321,130813],{"class":50},[36,140323,140324],{"class":38,"line":154},[36,140325,133403],{"class":124},[36,140327,140328,140330,140332,140334,140336,140338],{"class":38,"line":167},[36,140329,133408],{"class":46},[36,140331,81138],{"class":50},[36,140333,130243],{"class":73},[36,140335,52768],{"class":50},[36,140337,133417],{"class":73},[36,140339,130813],{"class":50},[1645,140341,140343,140344,140346],{"id":140342},"_1544-nav导航模块制作","15.4.4 ",[33,140345,55044],{},"导航模块制作",[2992,140348],{"style":127739,"src":140349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140351,140352,140354],{},[33,140353,55044],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140356,140357,140358],{},"1 号盒子左侧浮动，",[33,140359,140360],{},"dropdown",[2674,140362,140363,140373,140381,140387,140395,140405,140413,140424],{},[259,140364,140365,140366,102349,140369,140372],{},"1号盒子有讲究，根据相关性 里面包含 ",[33,140367,140368],{},".dt",[33,140370,140371],{},".dd"," 两个盒子",[259,140374,140375,140377,140378,140380],{},[33,140376,140368],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[33,140379,140371],{}," 挤到下面去了",[259,140382,140383,140384,140386],{},"给 ",[33,140385,140371],{}," 盒子设置宽度 和 高度，以及背景颜色",[259,140388,140383,140389,140391,140392,121568],{},[33,140390,140371],{}," 盒子里面定义 无序列表 （",[33,140393,140394],{},"ul > li > a",[259,140396,140397,140398,140400,140401,140404],{},"每个 ",[33,140399,259],{}," 都有一个高度（",[33,140402,140403],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[259,140406,140383,140407,140409,140410,121568],{},[33,140408,259],{}," 里面的a设置文字大小（",[33,140411,140412],{},"14px",[259,140414,140383,140415,140417,140418,140420,140421,140423],{},[33,140416,259],{}," 设置 ",[33,140419,129044],{},"，当鼠标移入的时候，让",[33,140422,259],{},"的背景变成白色，让里面的文字变成红色",[259,140425,140426,140428,140429,140431,140432,140434],{},[33,140427,259],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[33,140430,259],{},"的右侧，那么给",[33,140433,259],{},"设置相对定位",[19,140436,140437],{},"一定要注意相关性",[19,140439,139722],{},[26,140441,140442],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},[33,140443,140444,140452,140462,140472],{"__ignoreMap":31},[36,140445,140446,140448,140450],{"class":38,"line":39},[36,140447,52942],{"class":52631},[36,140449,138884],{"class":46},[36,140451,16901],{"class":50},[36,140453,140454,140456,140458,140460],{"class":38,"line":54},[36,140455,138891],{"class":73},[36,140457,52768],{"class":50},[36,140459,9126],{"class":110},[36,140461,77],{"class":50},[36,140463,140464,140466,140468,140470],{"class":38,"line":61},[36,140465,129499],{"class":73},[36,140467,52768],{"class":50},[36,140469,62200],{"class":73},[36,140471,77],{"class":50},[36,140473,140474],{"class":38,"line":80},[36,140475,250],{"class":50},[19,140477,139762],{},[26,140479,140480],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},[33,140481,140482,140490,140500,140510],{"__ignoreMap":31},[36,140483,140484,140486,140488],{"class":38,"line":39},[36,140485,52942],{"class":52631},[36,140487,138884],{"class":46},[36,140489,16901],{"class":50},[36,140491,140492,140494,140496,140498],{"class":38,"line":54},[36,140493,138891],{"class":73},[36,140495,52768],{"class":50},[36,140497,9126],{"class":110},[36,140499,77],{"class":50},[36,140501,140502,140504,140506,140508],{"class":38,"line":61},[36,140503,129499],{"class":73},[36,140505,52768],{"class":50},[36,140507,62200],{"class":73},[36,140509,77],{"class":50},[36,140511,140512],{"class":38,"line":80},[36,140513,250],{"class":50},[19,140515,140516],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140518,140519,140520,140523],{},"2 号盒子左侧浮动，",[33,140521,140522],{},"navitems"," 导航栏组",[2674,140525,140526,140531,140540],{},[259,140527,140528,140529],{},"里面结构是 ",[33,140530,140394],{},[259,140532,140533,140534,140536,140537,140539],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[33,140535,1906],{},"左右的",[33,140538,32214],{},"把两侧撑开",[259,140541,140542],{},"让文字垂直居中（行高等于高度）",[2992,140544],{"style":127739,"src":140545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140547,140548],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140550,139722],{},[26,140552,140554],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},".box {\n  float: left;\n}\n",[33,140555,140556,140562,140572],{"__ignoreMap":31},[36,140557,140558,140560],{"class":38,"line":39},[36,140559,131731],{"class":46},[36,140561,16901],{"class":50},[36,140563,140564,140566,140568,140570],{"class":38,"line":54},[36,140565,132363],{"class":73},[36,140567,52768],{"class":50},[36,140569,25066],{"class":73},[36,140571,77],{"class":50},[36,140573,140574],{"class":38,"line":61},[36,140575,250],{"class":50},[19,140577,139762],{},[26,140579,140580],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,140581,140582,140588,140598],{"__ignoreMap":31},[36,140583,140584,140586],{"class":38,"line":39},[36,140585,131731],{"class":46},[36,140587,16901],{"class":50},[36,140589,140590,140592,140594,140596],{"class":38,"line":54},[36,140591,132363],{"class":73},[36,140593,52768],{"class":50},[36,140595,25066],{"class":73},[36,140597,77],{"class":50},[36,140599,140600],{"class":38,"line":61},[36,140601,250],{"class":50},[19,140603,140604],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[2992,140606],{"style":127739,"src":140607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,140609,140610],{"className":127883,"code":132040,"language":127885,"meta":31,"style":31},[33,140611,140612,140618,140634],{"__ignoreMap":31},[36,140613,140614,140616],{"class":38,"line":39},[36,140615,52942],{"class":52631},[36,140617,16901],{"class":50},[36,140619,140620,140622,140624,140626,140628,140630,140632],{"class":38,"line":54},[36,140621,72227],{"class":73},[36,140623,52768],{"class":50},[36,140625,1885],{"class":73},[36,140627,52823],{"class":42},[36,140629,52852],{"class":73},[36,140631,131275],{"class":73},[36,140633,77],{"class":50},[36,140635,140636],{"class":38,"line":61},[36,140637,250],{"class":50},[1645,140639,140641],{"id":140640},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[2992,140643],{"style":127739,"src":140644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2674,140646,140647,140652,140657],{},[259,140648,140649,140651],{},[33,140650,133086],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[259,140653,140654,140656],{},[33,140655,133086],{}," 里面有一个大的版心",[259,140658,140659,140660,140663,140664],{},"版心里面包含 1 号盒子，",[33,140661,140662],{},"mod_service"," 是服务模块，mod 是模块的意思",[2674,140665,140666,140671,140684,140700,140705],{},[259,140667,140383,140668,140670],{},[33,140669,140662],{}," 设置高度（80px）和下边框",[259,140672,140673,140674,140677,140678,140680,140681,140683],{},"在里面定义 ",[33,140675,140676],{},"ul > li"," ,每个",[33,140679,259],{}," 宽度是300px 高度是 50px，给每个",[33,140682,259],{},"设置35px的左内边距",[259,140685,140686,140687,140689,140690,140692,140693,140695,140696,19739,140698,121568],{},"在每个",[33,140688,259],{},"里面，放一个 ",[33,140691,24239],{},"（里面放图标），一个",[33,140694,52942],{},"（里面放",[33,140697,52942],{},[33,140699,19],{},[259,140701,140383,140702,140704],{},[33,140703,24239],{},"设置浮动，让h5与这个div左右排列",[259,140706,140707],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140709,139722],{},[26,140711,140713],{"className":127883,"code":140712,"language":127885,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[33,140714,140715,140721,140733,140745,140772],{"__ignoreMap":31},[36,140716,140717,140719],{"class":38,"line":39},[36,140718,135640],{"class":46},[36,140720,16901],{"class":50},[36,140722,140723,140725,140727,140729,140731],{"class":38,"line":54},[36,140724,71899],{"class":73},[36,140726,52768],{"class":50},[36,140728,2367],{"class":73},[36,140730,52823],{"class":42},[36,140732,77],{"class":50},[36,140734,140735,140737,140739,140741,140743],{"class":38,"line":61},[36,140736,72119],{"class":73},[36,140738,52768],{"class":50},[36,140740,2367],{"class":73},[36,140742,52823],{"class":42},[36,140744,77],{"class":50},[36,140746,140747,140749,140751,140753,140755,140757,140759,140761,140764,140766,140768,140770],{"class":38,"line":80},[36,140748,71942],{"class":73},[36,140750,52768],{"class":50},[36,140752,63057],{"class":73},[36,140754,222],{"class":50},[36,140756,135679],{"class":473},[36,140758,15043],{"class":50},[36,140760,63067],{"class":73},[36,140762,140763],{"class":73}," -10",[36,140765,52823],{"class":42},[36,140767,135698],{"class":73},[36,140769,52823],{"class":42},[36,140771,77],{"class":50},[36,140773,140774],{"class":38,"line":96},[36,140775,250],{"class":50},[19,140777,139762],{},[26,140779,140780],{"className":127883,"code":140712,"language":127885,"meta":31,"style":31},[33,140781,140782,140788,140800,140812,140838],{"__ignoreMap":31},[36,140783,140784,140786],{"class":38,"line":39},[36,140785,135640],{"class":46},[36,140787,16901],{"class":50},[36,140789,140790,140792,140794,140796,140798],{"class":38,"line":54},[36,140791,71899],{"class":73},[36,140793,52768],{"class":50},[36,140795,2367],{"class":73},[36,140797,52823],{"class":42},[36,140799,77],{"class":50},[36,140801,140802,140804,140806,140808,140810],{"class":38,"line":61},[36,140803,72119],{"class":73},[36,140805,52768],{"class":50},[36,140807,2367],{"class":73},[36,140809,52823],{"class":42},[36,140811,77],{"class":50},[36,140813,140814,140816,140818,140820,140822,140824,140826,140828,140830,140832,140834,140836],{"class":38,"line":80},[36,140815,71942],{"class":73},[36,140817,52768],{"class":50},[36,140819,63057],{"class":73},[36,140821,222],{"class":50},[36,140823,135679],{"class":473},[36,140825,15043],{"class":50},[36,140827,63067],{"class":73},[36,140829,140763],{"class":73},[36,140831,52823],{"class":42},[36,140833,135698],{"class":73},[36,140835,52823],{"class":42},[36,140837,77],{"class":50},[36,140839,140840],{"class":38,"line":96},[36,140841,250],{"class":50},[19,140843,140844],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2674,140846,140847,140850,140856,140862,140874],{},[259,140848,140849],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[259,140851,140852,140853,121568],{},"里面的布局利用 自定义列表来实现（",[33,140854,140855],{},"dl > dt + dd",[259,140857,140383,140858,140861],{},[33,140859,140860],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[259,140863,140383,140864,140867,140868,19739,140870,140873],{},[33,140865,140866],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[33,140869,140866],{},[33,140871,140872],{},"dd","之间有些距离",[259,140875,140876],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140878,139722],{},[26,140880,140881],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,140882,140883,140889,140901],{"__ignoreMap":31},[36,140884,140885,140887],{"class":38,"line":39},[36,140886,52942],{"class":52631},[36,140888,16901],{"class":50},[36,140890,140891,140893,140895,140897,140899],{"class":38,"line":54},[36,140892,71801],{"class":73},[36,140894,52768],{"class":50},[36,140896,1859],{"class":73},[36,140898,52887],{"class":73},[36,140900,77],{"class":50},[36,140902,140903],{"class":38,"line":61},[36,140904,250],{"class":50},[19,140906,139762],{},[26,140908,140909],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,140910,140911,140917,140929],{"__ignoreMap":31},[36,140912,140913,140915],{"class":38,"line":39},[36,140914,52942],{"class":52631},[36,140916,16901],{"class":50},[36,140918,140919,140921,140923,140925,140927],{"class":38,"line":54},[36,140920,71801],{"class":73},[36,140922,52768],{"class":50},[36,140924,1859],{"class":73},[36,140926,52887],{"class":73},[36,140928,77],{"class":50},[36,140930,140931],{"class":38,"line":61},[36,140932,250],{"class":50},[19,140934,140935],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2674,140937,140938,140947,140950,140961],{},[259,140939,140940,140941,140943,140944,140946],{},"分为上下两块，上面是 ",[33,140942,133103],{}," 友情链接，下面是 ",[33,140945,133096],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[259,140948,140949],{},"把内容分别复制到相应模块中",[259,140951,140383,140952,140954,140955,140957,140958,140960],{},[33,140953,133103],{}," 设置 15px 的下外边距，给",[33,140956,133103],{}," 里面 的 ",[33,140959,1906],{}," 标签设置 左右 3px 的外边距",[259,140962,140963,140964,140966],{},"给",[33,140965,133096],{}," 设置 20px 的行高",[19,140968,139722],{},[26,140970,140971],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,140972,140973,140979,140991],{"__ignoreMap":31},[36,140974,140975,140977],{"class":38,"line":39},[36,140976,52942],{"class":52631},[36,140978,16901],{"class":50},[36,140980,140981,140983,140985,140987,140989],{"class":38,"line":54},[36,140982,71801],{"class":73},[36,140984,52768],{"class":50},[36,140986,1859],{"class":73},[36,140988,52887],{"class":73},[36,140990,77],{"class":50},[36,140992,140993],{"class":38,"line":61},[36,140994,250],{"class":50},[19,140996,139762],{},[26,140998,140999],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,141000,141001,141007,141019],{"__ignoreMap":31},[36,141002,141003,141005],{"class":38,"line":39},[36,141004,52942],{"class":52631},[36,141006,16901],{"class":50},[36,141008,141009,141011,141013,141015,141017],{"class":38,"line":54},[36,141010,71801],{"class":73},[36,141012,52768],{"class":50},[36,141014,1859],{"class":73},[36,141016,52887],{"class":73},[36,141018,77],{"class":50},[36,141020,141021],{"class":38,"line":61},[36,141022,250],{"class":50},[19,141024,141025],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1592,141027,141028],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":141030},[141031,141032,141033,141040],{"id":139311,"depth":54,"text":139312},{"id":139330,"depth":54,"text":139331},{"id":139357,"depth":54,"text":139358,"children":141034},[141035,141036,141037,141038,141039],{"id":139361,"depth":61,"text":139362},{"id":139374,"depth":61,"text":139375},{"id":139398,"depth":61,"text":139399},{"id":139420,"depth":61,"text":139421},{"id":139492,"depth":61,"text":139493},{"id":139618,"depth":54,"text":139619,"children":141041},[141042,141043,141044,141045,141047],{"id":139622,"depth":61,"text":139623},{"id":139629,"depth":61,"text":139630},{"id":139801,"depth":61,"text":139802},{"id":140342,"depth":61,"text":141046},"15.4.4 nav导航模块制作",{"id":140640,"depth":61,"text":140641},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139303,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141054,"title":141055,"body":141056,"description":24706,"extension":1603,"meta":143458,"navigation":57,"path":143459,"seo":143460,"stem":143461,"__hash__":143462},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141057,"toc":143435},[141058,141061,141065,141069,141081,141084,141087,141090,141101,141103,141127,141129,141153,141158,141161,141163,141199,141201,141237,141240,141245,141248,141251,141254,141284,141291,141294,141304,141306,141340,141343,141377,141383,141400,141402,141438,141440,141476,141481,141506,141508,141534,141536,141560,141567,141570,141634,141636,141678,141680,141720,141727,141732,141734,141764,141766,141796,141800,141803,141810,141822,141824,141850,141852,141876,141879,141881,141905,141911,141921,141923,141953,141955,141985,141992,142033,142035,142071,142073,142109,142113,142116,142119,142122,142128,142133,142136,142159,142162,142186,142189,142213,142218,142221,142224,142227,142230,142233,142307,142309,142339,142341,142371,142374,142377,142409,142413,142417,142431,142440,142443,142448,142450,142544,142546,142640,142663,142665,142689,142691,142715,142722,142725,142735,142737,142761,142766,142774,142776,142806,142811,142851,142853,142879,142881,142907,142911,142914,142919,142922,142926,142934,142941,142949,142951,142981,142983,143013,143021,143024,143027,143029,143059,143061,143091,143094,143099,143101,143125,143127,143151,143154,143239,143241,143265,143267,143291,143295,143297,143321,143323,143357,143361,143375,143378,143383,143386,143391,143394,143424,143432],[10,141059,141055],{"id":141060},"_16-品优购项目下篇-主体与页面开发",[14,141062,141064],{"id":141063},"_161-项目主体模块制作","16.1 项目主体模块制作",[1645,141066,141068],{"id":141067},"_1611-首页制作","16.1.1 首页制作",[19,141070,141071,141073,141074,141076,141077,141080],{},[887,141072,103389],{}," 主体模块是 ",[887,141075,75389],{}," 里面专有的，注意需要新的样式文件 ",[887,141078,141079],{},"index.css，"," 就不要写在common.css中了",[2992,141082],{"style":127739,"src":141083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[2992,141085],{"style":127739,"src":141086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141088,141089],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2674,141091,141092,141095,141098],{},[259,141093,141094],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[259,141096,141097],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[259,141099,141100],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141102,139722],{},[26,141104,141105],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,141106,141107,141113,141123],{"__ignoreMap":31},[36,141108,141109,141111],{"class":38,"line":39},[36,141110,131731],{"class":46},[36,141112,16901],{"class":50},[36,141114,141115,141117,141119,141121],{"class":38,"line":54},[36,141116,132363],{"class":73},[36,141118,52768],{"class":50},[36,141120,25066],{"class":73},[36,141122,77],{"class":50},[36,141124,141125],{"class":38,"line":61},[36,141126,250],{"class":50},[19,141128,139762],{},[26,141130,141131],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,141132,141133,141139,141149],{"__ignoreMap":31},[36,141134,141135,141137],{"class":38,"line":39},[36,141136,131731],{"class":46},[36,141138,16901],{"class":50},[36,141140,141141,141143,141145,141147],{"class":38,"line":54},[36,141142,132363],{"class":73},[36,141144,52768],{"class":50},[36,141146,25066],{"class":73},[36,141148,77],{"class":50},[36,141150,141151],{"class":38,"line":61},[36,141152,250],{"class":50},[256,141154,141155],{},[259,141156,141157],{},"左侧focus模块制作",[2992,141159],{"style":127739,"src":141160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141162,139722],{},[26,141164,141165],{"className":127883,"code":129206,"language":127885,"meta":31,"style":31},[33,141166,141167,141175,141185,141195],{"__ignoreMap":31},[36,141168,141169,141171,141173],{"class":38,"line":39},[36,141170,55152],{"class":52631},[36,141172,63231],{"class":46},[36,141174,16901],{"class":50},[36,141176,141177,141179,141181,141183],{"class":38,"line":54},[36,141178,129221],{"class":73},[36,141180,52768],{"class":50},[36,141182,56220],{"class":73},[36,141184,77],{"class":50},[36,141186,141187,141189,141191,141193],{"class":38,"line":61},[36,141188,72129],{"class":73},[36,141190,52768],{"class":50},[36,141192,56068],{"class":73},[36,141194,77],{"class":50},[36,141196,141197],{"class":38,"line":80},[36,141198,250],{"class":50},[19,141200,139762],{},[26,141202,141203],{"className":127883,"code":129206,"language":127885,"meta":31,"style":31},[33,141204,141205,141213,141223,141233],{"__ignoreMap":31},[36,141206,141207,141209,141211],{"class":38,"line":39},[36,141208,55152],{"class":52631},[36,141210,63231],{"class":46},[36,141212,16901],{"class":50},[36,141214,141215,141217,141219,141221],{"class":38,"line":54},[36,141216,129221],{"class":73},[36,141218,52768],{"class":50},[36,141220,56220],{"class":73},[36,141222,77],{"class":50},[36,141224,141225,141227,141229,141231],{"class":38,"line":61},[36,141226,72129],{"class":73},[36,141228,52768],{"class":50},[36,141230,56068],{"class":73},[36,141232,77],{"class":50},[36,141234,141235],{"class":38,"line":80},[36,141236,250],{"class":50},[19,141238,141239],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[256,141241,141242],{"start":54},[259,141243,141244],{},"右侧newsflash模块制作",[2992,141246],{"style":127739,"src":141247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141249,141250],{},"右侧的模块 分为上中下三个盒子",[19,141252,141253],{},"结构代码：",[26,141255,141256],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,141257,141258],{"__ignoreMap":31},[36,141259,141260,141262,141264,141266,141268,141270,141272,141274,141276,141278,141280,141282],{"class":38,"line":39},[36,141261,2577],{"class":50},[36,141263,2992],{"class":52631},[36,141265,56570],{"class":46},[36,141267,70],{"class":50},[36,141269,135400],{"class":110},[36,141271,56578],{"class":46},[36,141273,70],{"class":50},[36,141275,135407],{"class":110},[36,141277,135410],{"class":46},[36,141279,70],{"class":50},[36,141281,135415],{"class":110},[36,141283,52638],{"class":50},[19,141285,141286,141287,141290],{},"1 号盒子为 ",[33,141288,141289],{},"news"," 新闻模块 高度为 165px",[2992,141292],{"style":127739,"src":141293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141295,141296,141297,141300,141301],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[33,141298,141299],{},"news-hd","，下面是 ",[33,141302,141303],{},"news-bd",[19,141305,141253],{},[26,141307,141308],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,141309,141310,141314,141328,141332],{"__ignoreMap":31},[36,141311,141312],{"class":38,"line":39},[36,141313,131994],{"class":124},[36,141315,141316,141318,141320,141322,141324,141326],{"class":38,"line":54},[36,141317,2577],{"class":50},[36,141319,52942],{"class":52631},[36,141321,54817],{"class":46},[36,141323,70],{"class":50},[36,141325,132007],{"class":110},[36,141327,52638],{"class":50},[36,141329,141330],{"class":38,"line":61},[36,141331,132014],{"class":50},[36,141333,141334,141336,141338],{"class":38,"line":80},[36,141335,53116],{"class":50},[36,141337,52942],{"class":52631},[36,141339,52638],{"class":50},[19,141341,141342],{},"样式代码：",[26,141344,141345],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,141346,141347,141351,141365,141369],{"__ignoreMap":31},[36,141348,141349],{"class":38,"line":39},[36,141350,131994],{"class":124},[36,141352,141353,141355,141357,141359,141361,141363],{"class":38,"line":54},[36,141354,2577],{"class":50},[36,141356,52942],{"class":52631},[36,141358,54817],{"class":46},[36,141360,70],{"class":50},[36,141362,132007],{"class":110},[36,141364,52638],{"class":50},[36,141366,141367],{"class":38,"line":61},[36,141368,132014],{"class":50},[36,141370,141371,141373,141375],{"class":38,"line":80},[36,141372,53116],{"class":50},[36,141374,52942],{"class":52631},[36,141376,52638],{"class":50},[19,141378,141379,141380,141382],{},"上面是",[33,141381,141299],{},"，设置高度是 33px，设置下边框",[2674,141384,141385,141391],{},[259,141386,141387,141388,141390],{},"里面放一个",[33,141389,24239],{}," 标题",[259,141392,141393,141394,141396,141397,141399],{},"放一个a",[33,141395,104024],{},"，内容是 更多，然后让 ",[33,141398,1906],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141401,141253],{},[26,141403,141404],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},[33,141405,141406,141414,141424,141434],{"__ignoreMap":31},[36,141407,141408,141410,141412],{"class":38,"line":39},[36,141409,52942],{"class":52631},[36,141411,138884],{"class":46},[36,141413,16901],{"class":50},[36,141415,141416,141418,141420,141422],{"class":38,"line":54},[36,141417,138891],{"class":73},[36,141419,52768],{"class":50},[36,141421,9126],{"class":110},[36,141423,77],{"class":50},[36,141425,141426,141428,141430,141432],{"class":38,"line":61},[36,141427,129499],{"class":73},[36,141429,52768],{"class":50},[36,141431,62200],{"class":73},[36,141433,77],{"class":50},[36,141435,141436],{"class":38,"line":80},[36,141437,250],{"class":50},[19,141439,141342],{},[26,141441,141442],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},[33,141443,141444,141452,141462,141472],{"__ignoreMap":31},[36,141445,141446,141448,141450],{"class":38,"line":39},[36,141447,52942],{"class":52631},[36,141449,138884],{"class":46},[36,141451,16901],{"class":50},[36,141453,141454,141456,141458,141460],{"class":38,"line":54},[36,141455,138891],{"class":73},[36,141457,52768],{"class":50},[36,141459,9126],{"class":110},[36,141461,77],{"class":50},[36,141463,141464,141466,141468,141470],{"class":38,"line":61},[36,141465,129499],{"class":73},[36,141467,52768],{"class":50},[36,141469,62200],{"class":73},[36,141471,77],{"class":50},[36,141473,141474],{"class":38,"line":80},[36,141475,250],{"class":50},[19,141477,141478,141479],{},"下面是",[33,141480,141303],{},[2674,141482,141483,141491],{},[259,141484,141485,141486,102349,141488,141490],{},"里面包含 ",[33,141487,2674],{},[33,141489,259],{}," 还有链接",[259,141492,140963,141493,141495,141496,141498,141499,141502,141503],{},[33,141494,259],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[33,141497,132549],{}," 2.设置 ",[33,141500,141501],{},"white-space: nowrap;"," 3. 设置 ",[33,141504,141505],{},"text-overflow: ellipsis;",[19,141507,141253],{},[26,141509,141511],{"className":127883,"code":141510,"language":127885,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[33,141512,141513,141519,141530],{"__ignoreMap":31},[36,141514,141515,141517],{"class":38,"line":39},[36,141516,52942],{"class":52631},[36,141518,16901],{"class":50},[36,141520,141521,141524,141526,141528],{"class":38,"line":54},[36,141522,141523],{"class":73},"  overflow",[36,141525,52768],{"class":50},[36,141527,63045],{"class":73},[36,141529,77],{"class":50},[36,141531,141532],{"class":38,"line":61},[36,141533,250],{"class":50},[19,141535,141342],{},[26,141537,141538],{"className":127883,"code":141510,"language":127885,"meta":31,"style":31},[33,141539,141540,141546,141556],{"__ignoreMap":31},[36,141541,141542,141544],{"class":38,"line":39},[36,141543,52942],{"class":52631},[36,141545,16901],{"class":50},[36,141547,141548,141550,141552,141554],{"class":38,"line":54},[36,141549,141523],{"class":73},[36,141551,52768],{"class":50},[36,141553,63045],{"class":73},[36,141555,77],{"class":50},[36,141557,141558],{"class":38,"line":61},[36,141559,250],{"class":50},[19,141561,141562,141563,141566],{},"2 号盒子为 ",[33,141564,141565],{},"lifeservice"," 生活服务模块 高度为 209px",[2992,141568],{"style":127739,"src":141569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2674,141571,141572,141575,141585,141609,141620],{},[259,141573,141574],{},"设置边框（左右下边框）",[259,141576,141577,141578,141581,141582,141584],{},"里面的内容 是 ",[33,141579,141580],{},"ul > 12*li","，给",[33,141583,259],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[259,141586,141587,141588],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2674,141589,141590,141595,141604],{},[259,141591,141592,141594],{},[33,141593,141565],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[259,141596,141597,141598,141600,141601,141603],{},"可以让 ",[33,141599,141565],{}," 里面的 ",[33,141602,2674],{}," 宽度为 252，就可以装的下 4 个 小 li",[259,141605,141606,141608],{},[33,141607,141565],{}," 盒子 overflow 隐藏多余的部分就可以了",[259,141610,117798,141611,141613,141614,141616,141617,141619],{},[33,141612,259],{}," 里面放一个 ",[33,141615,2108],{},"（里面放图标），下面的文本用 ",[33,141618,19],{}," 标签包裹",[259,141621,140383,141622,141624,141625,141627,141628,140417,141630,141633],{},[33,141623,2108],{}," 设置 24px宽和28px的高（注意 ",[33,141626,2108],{}," 是行内元素， 转成行内块），给 ",[33,141629,259],{},[33,141631,141632],{},"text-align:center"," 让里面内容居中显示",[19,141635,141253],{},[26,141637,141639],{"className":127883,"code":141638,"language":127885,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[33,141640,141641,141659,141664,141674],{"__ignoreMap":31},[36,141642,141643,141645,141647,141649,141651,141653,141655,141657],{"class":38,"line":39},[36,141644,36],{"class":52631},[36,141646,477],{"class":50},[36,141648,1906],{"class":52631},[36,141650,477],{"class":50},[36,141652,24883],{"class":52631},[36,141654,477],{"class":50},[36,141656,887],{"class":52631},[36,141658,16901],{"class":50},[36,141660,141661],{"class":38,"line":54},[36,141662,141663],{"class":124},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[36,141665,141666,141668,141670,141672],{"class":38,"line":61},[36,141667,129499],{"class":73},[36,141669,52768],{"class":50},[36,141671,129561],{"class":73},[36,141673,77],{"class":50},[36,141675,141676],{"class":38,"line":80},[36,141677,250],{"class":50},[19,141679,141342],{},[26,141681,141682],{"className":127883,"code":141638,"language":127885,"meta":31,"style":31},[33,141683,141684,141702,141706,141716],{"__ignoreMap":31},[36,141685,141686,141688,141690,141692,141694,141696,141698,141700],{"class":38,"line":39},[36,141687,36],{"class":52631},[36,141689,477],{"class":50},[36,141691,1906],{"class":52631},[36,141693,477],{"class":50},[36,141695,24883],{"class":52631},[36,141697,477],{"class":50},[36,141699,887],{"class":52631},[36,141701,16901],{"class":50},[36,141703,141704],{"class":38,"line":54},[36,141705,141663],{"class":124},[36,141707,141708,141710,141712,141714],{"class":38,"line":61},[36,141709,129499],{"class":73},[36,141711,52768],{"class":50},[36,141713,129561],{"class":73},[36,141715,77],{"class":50},[36,141717,141718],{"class":38,"line":80},[36,141719,250],{"class":50},[19,141721,141722,141723,141726],{},"3 号盒子为 ",[33,141724,141725],{},"bargain"," 特价商品",[2674,141728,141729],{},[259,141730,141731],{},"这个比较简单，直接插入一张图片即可",[19,141733,141253],{},[26,141735,141736],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,141737,141738],{"__ignoreMap":31},[36,141739,141740,141742,141744,141746,141748,141750,141752,141754,141756,141758,141760,141762],{"class":38,"line":39},[36,141741,2577],{"class":50},[36,141743,2992],{"class":52631},[36,141745,56570],{"class":46},[36,141747,70],{"class":50},[36,141749,135400],{"class":110},[36,141751,56578],{"class":46},[36,141753,70],{"class":50},[36,141755,135407],{"class":110},[36,141757,135410],{"class":46},[36,141759,70],{"class":50},[36,141761,135415],{"class":110},[36,141763,52638],{"class":50},[19,141765,141342],{},[26,141767,141768],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,141769,141770],{"__ignoreMap":31},[36,141771,141772,141774,141776,141778,141780,141782,141784,141786,141788,141790,141792,141794],{"class":38,"line":39},[36,141773,2577],{"class":50},[36,141775,2992],{"class":52631},[36,141777,56570],{"class":46},[36,141779,70],{"class":50},[36,141781,135400],{"class":110},[36,141783,56578],{"class":46},[36,141785,70],{"class":50},[36,141787,135407],{"class":110},[36,141789,135410],{"class":46},[36,141791,70],{"class":50},[36,141793,135415],{"class":110},[36,141795,52638],{"class":50},[1645,141797,141799],{"id":141798},"_1612-推荐模块制作","16.1.2 推荐模块制作",[2992,141801],{"style":127739,"src":141802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141804,141805,141806,141809],{},"大盒子 ",[33,141807,141808],{},"recom"," 推荐模块 recommend",[2674,141811,141812],{},[259,141813,141814,141815,141817,141818,141821],{},"给这个 ",[33,141816,141808],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[33,141819,141820],{},"#ebebeb","），设置距离上边 12px",[19,141823,141253],{},[26,141825,141827],{"className":127883,"code":141826,"language":127885,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[33,141828,141829,141835,141846],{"__ignoreMap":31},[36,141830,141831,141833],{"class":38,"line":39},[36,141832,52942],{"class":52631},[36,141834,16901],{"class":50},[36,141836,141837,141839,141841,141844],{"class":38,"line":54},[36,141838,72209],{"class":73},[36,141840,52768],{"class":50},[36,141842,141843],{"class":73},"#f0f0f0",[36,141845,77],{"class":50},[36,141847,141848],{"class":38,"line":61},[36,141849,250],{"class":50},[19,141851,141342],{},[26,141853,141854],{"className":127883,"code":141826,"language":127885,"meta":31,"style":31},[33,141855,141856,141862,141872],{"__ignoreMap":31},[36,141857,141858,141860],{"class":38,"line":39},[36,141859,52942],{"class":52631},[36,141861,16901],{"class":50},[36,141863,141864,141866,141868,141870],{"class":38,"line":54},[36,141865,72209],{"class":73},[36,141867,52768],{"class":50},[36,141869,141843],{"class":73},[36,141871,77],{"class":50},[36,141873,141874],{"class":38,"line":61},[36,141875,250],{"class":50},[19,141877,141878],{},"里面包含 2 个盒子， 浮动即可",[19,141880,141253],{},[26,141882,141883],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,141884,141885,141891,141901],{"__ignoreMap":31},[36,141886,141887,141889],{"class":38,"line":39},[36,141888,131731],{"class":46},[36,141890,16901],{"class":50},[36,141892,141893,141895,141897,141899],{"class":38,"line":54},[36,141894,132363],{"class":73},[36,141896,52768],{"class":50},[36,141898,25066],{"class":73},[36,141900,77],{"class":50},[36,141902,141903],{"class":38,"line":61},[36,141904,250],{"class":50},[19,141906,141907,141908],{},"1 号盒子 ",[33,141909,141910],{},"recom_hd",[2674,141912,141913,141916],{},[259,141914,141915],{},"设置宽度205px，高度163px",[259,141917,141387,141918,141920],{},[33,141919,2992],{},"标签，插入图片即可",[19,141922,141253],{},[26,141924,141925],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,141926,141927],{"__ignoreMap":31},[36,141928,141929,141931,141933,141935,141937,141939,141941,141943,141945,141947,141949,141951],{"class":38,"line":39},[36,141930,2577],{"class":50},[36,141932,2992],{"class":52631},[36,141934,56570],{"class":46},[36,141936,70],{"class":50},[36,141938,135400],{"class":110},[36,141940,56578],{"class":46},[36,141942,70],{"class":50},[36,141944,135407],{"class":110},[36,141946,135410],{"class":46},[36,141948,70],{"class":50},[36,141950,135415],{"class":110},[36,141952,52638],{"class":50},[19,141954,141342],{},[26,141956,141957],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,141958,141959],{"__ignoreMap":31},[36,141960,141961,141963,141965,141967,141969,141971,141973,141975,141977,141979,141981,141983],{"class":38,"line":39},[36,141962,2577],{"class":50},[36,141964,2992],{"class":52631},[36,141966,56570],{"class":46},[36,141968,70],{"class":50},[36,141970,135400],{"class":110},[36,141972,56578],{"class":46},[36,141974,70],{"class":50},[36,141976,135407],{"class":110},[36,141978,135410],{"class":46},[36,141980,70],{"class":50},[36,141982,135415],{"class":110},[36,141984,52638],{"class":50},[19,141986,141987,141988,141991],{},"2 号盒子 ",[33,141989,141990],{},"recom_bd"," ，注意里面的小竖线",[2674,141993,141994,142005,142008,142013,142018],{},[259,141995,141996,141997,141999,142000,142002,142003],{},"右侧结构里面放 ",[33,141998,2674],{}," 包含 4个 ",[33,142001,259],{},"，每个li里面包含一个",[33,142004,2992],{},[259,142006,142007],{},"直接利用切片工具把里面的内容当成一张图片",[259,142009,140383,142010,142012],{},[33,142011,259],{}," 设置浮动",[259,142014,140383,142015,142017],{},[33,142016,2992],{}," 设置宽高，宽度 248px，高度 163px",[259,142019,142020,142021,141581,142024,142026,142027,142029,142030],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[33,142022,142023],{},"top 10px",[33,142025,259],{},"设置相对定位（注意，最后一个",[33,142028,259],{},"不用设置伪元素），可以利用 ",[33,142031,142032],{},"nth-child(-n+3){...}",[19,142034,141253],{},[26,142036,142037],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},[33,142038,142039,142047,142057,142067],{"__ignoreMap":31},[36,142040,142041,142043,142045],{"class":38,"line":39},[36,142042,52942],{"class":52631},[36,142044,138884],{"class":46},[36,142046,16901],{"class":50},[36,142048,142049,142051,142053,142055],{"class":38,"line":54},[36,142050,138891],{"class":73},[36,142052,52768],{"class":50},[36,142054,9126],{"class":110},[36,142056,77],{"class":50},[36,142058,142059,142061,142063,142065],{"class":38,"line":61},[36,142060,129499],{"class":73},[36,142062,52768],{"class":50},[36,142064,62200],{"class":73},[36,142066,77],{"class":50},[36,142068,142069],{"class":38,"line":80},[36,142070,250],{"class":50},[19,142072,141342],{},[26,142074,142075],{"className":127883,"code":139725,"language":127885,"meta":31,"style":31},[33,142076,142077,142085,142095,142105],{"__ignoreMap":31},[36,142078,142079,142081,142083],{"class":38,"line":39},[36,142080,52942],{"class":52631},[36,142082,138884],{"class":46},[36,142084,16901],{"class":50},[36,142086,142087,142089,142091,142093],{"class":38,"line":54},[36,142088,138891],{"class":73},[36,142090,52768],{"class":50},[36,142092,9126],{"class":110},[36,142094,77],{"class":50},[36,142096,142097,142099,142101,142103],{"class":38,"line":61},[36,142098,129499],{"class":73},[36,142100,52768],{"class":50},[36,142102,62200],{"class":73},[36,142104,77],{"class":50},[36,142106,142107],{"class":38,"line":80},[36,142108,250],{"class":50},[1645,142110,142112],{"id":142111},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[2992,142114],{"style":127739,"src":142115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142117,142118],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142120,142121],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142123,142124,142127],{},[33,142125,142126],{},"box_hd"," 制作",[19,142129,141907,142130,142132],{},[33,142131,142126],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[2992,142134],{"style":127739,"src":142135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2674,142137,142138,142143,142148,142151],{},[259,142139,142140,142142],{},[33,142141,142126],{}," 给 30px 的高度，2个像素的下边框",[259,142144,142145,142146],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[33,142147,140394],{},[259,142149,142150],{},"左侧盒左浮动，右侧盒子右浮动",[259,142152,142153,142155,142156,142158],{},[33,142154,1906],{},"标签之间的距离用左右的",[33,142157,32214],{},"撑开即可",[19,142160,142161],{},"结构代码",[26,142163,142164],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,142165,142166,142172,142182],{"__ignoreMap":31},[36,142167,142168,142170],{"class":38,"line":39},[36,142169,131731],{"class":46},[36,142171,16901],{"class":50},[36,142173,142174,142176,142178,142180],{"class":38,"line":54},[36,142175,132363],{"class":73},[36,142177,52768],{"class":50},[36,142179,25066],{"class":73},[36,142181,77],{"class":50},[36,142183,142184],{"class":38,"line":61},[36,142185,250],{"class":50},[19,142187,142188],{},"样式代码",[26,142190,142191],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,142192,142193,142199,142209],{"__ignoreMap":31},[36,142194,142195,142197],{"class":38,"line":39},[36,142196,131731],{"class":46},[36,142198,16901],{"class":50},[36,142200,142201,142203,142205,142207],{"class":38,"line":54},[36,142202,132363],{"class":73},[36,142204,52768],{"class":50},[36,142206,25066],{"class":73},[36,142208,77],{"class":50},[36,142210,142211],{"class":38,"line":61},[36,142212,250],{"class":50},[19,142214,142215,142127],{},[33,142216,142217],{},"box_bd",[19,142219,142220],{},"2 号盒子 box_bd，不要给高度",[2992,142222],{"style":127739,"src":142223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142225,142226],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142228,142229],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142231,142232],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2674,142234,142235,142247,142263],{},[259,142236,142237,142239,142240,142243,142244,142246],{},[33,142238,142217],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[33,142241,142242],{},"tab_content","，在",[33,142245,142242],{}," 里面包裹tab选项卡对应的内容",[259,142248,142249,142250,142253,142254,142256,142257,142259,142260,142262],{},"内容被一个大盒子包裹（",[33,142251,142252],{},"tab_list_item","），里面是 ",[33,142255,2674],{}," 包裹 5个 ",[33,142258,259],{},"，每个",[33,142261,259],{},"设置对应的宽度，然后设置浮动",[259,142264,142265,142266,142268,142269,142271,142272],{},"而这5个",[33,142267,259],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[33,142270,259],{},"设置",[2674,142273,142274,142292,142295],{},[259,142275,142276,142277,142279,142280,142282,142283,142285,142286,142288,142289,142291],{},"第一个小 ",[33,142278,259],{}," 分为上下结构，上面是 ",[33,142281,2674],{}," 包裹 ",[33,142284,259],{}," ，",[33,142287,259],{},"里面包裹 ",[33,142290,1906],{},"，下面插入一张图片",[259,142293,142294],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[259,142296,142297,142298,142300,142301,142303,142304,142306],{},"后面的小 ",[33,142299,259],{}," 里面先放一个",[33,142302,1906],{},"标签，然后在",[33,142305,1906],{},"标签里面插入图片即可",[19,142308,142161],{},[26,142310,142311],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,142312,142313],{"__ignoreMap":31},[36,142314,142315,142317,142319,142321,142323,142325,142327,142329,142331,142333,142335,142337],{"class":38,"line":39},[36,142316,2577],{"class":50},[36,142318,2992],{"class":52631},[36,142320,56570],{"class":46},[36,142322,70],{"class":50},[36,142324,135400],{"class":110},[36,142326,56578],{"class":46},[36,142328,70],{"class":50},[36,142330,135407],{"class":110},[36,142332,135410],{"class":46},[36,142334,70],{"class":50},[36,142336,135415],{"class":110},[36,142338,52638],{"class":50},[19,142340,142188],{},[26,142342,142343],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,142344,142345],{"__ignoreMap":31},[36,142346,142347,142349,142351,142353,142355,142357,142359,142361,142363,142365,142367,142369],{"class":38,"line":39},[36,142348,2577],{"class":50},[36,142350,2992],{"class":52631},[36,142352,56570],{"class":46},[36,142354,70],{"class":50},[36,142356,135400],{"class":110},[36,142358,56578],{"class":46},[36,142360,70],{"class":50},[36,142362,135407],{"class":110},[36,142364,135410],{"class":46},[36,142366,70],{"class":50},[36,142368,135415],{"class":110},[36,142370,52638],{"class":50},[19,142372,142373],{},"tab栏切换需求！！！！！！介绍：",[2992,142375],{"style":127739,"src":142376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2674,142378,142379,142387,142393,142396],{},[259,142380,142381,142384,142385],{},[33,142382,142383],{},"tab","栏的布局是 ",[33,142386,140394],{},[259,142388,142389,142390,142392],{},"有多少个",[33,142391,142383],{},"选项卡，那么对应就有多少个内容",[259,142394,142395],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[259,142397,142398,142399,142402,142403,142405,142406,142408],{},"等后面我们学习了",[33,142400,142401],{},"js","之后，我们就会配合",[33,142404,142401],{},"来实现，",[33,142407,142383],{},"栏的切换",[14,142410,142412],{"id":142411},"_162-列表制作","16.2 列表制作",[1645,142414,142416],{"id":142415},"_1621-准备工作","16.2.1 准备工作",[2674,142418,142419,142422,142425,142428],{},[259,142420,142421],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[259,142423,142424],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[259,142426,142427],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[259,142429,142430],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[1645,142432,142434,142435,102349,142437,142439],{"id":142433},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[33,142436,132888],{},[33,142438,55044],{}," 修改",[2992,142441],{"style":127739,"src":142442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2674,142444,142445],{},[259,142446,142447],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142449,141253],{},[26,142451,142452],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},[33,142453,142454,142458,142472,142476,142490,142494,142508,142512,142526,142530],{"__ignoreMap":31},[36,142455,142456],{"class":38,"line":39},[36,142457,133322],{"class":124},[36,142459,142460,142462,142464,142466,142468,142470],{"class":38,"line":54},[36,142461,133327],{"class":46},[36,142463,81138],{"class":50},[36,142465,130243],{"class":73},[36,142467,52768],{"class":50},[36,142469,133336],{"class":73},[36,142471,130813],{"class":50},[36,142473,142474],{"class":38,"line":61},[36,142475,133343],{"class":124},[36,142477,142478,142480,142482,142484,142486,142488],{"class":38,"line":80},[36,142479,133348],{"class":46},[36,142481,81138],{"class":50},[36,142483,130243],{"class":73},[36,142485,52768],{"class":50},[36,142487,56095],{"class":73},[36,142489,130813],{"class":50},[36,142491,142492],{"class":38,"line":96},[36,142493,133363],{"class":124},[36,142495,142496,142498,142500,142502,142504,142506],{"class":38,"line":101},[36,142497,133368],{"class":46},[36,142499,81138],{"class":50},[36,142501,130243],{"class":73},[36,142503,52768],{"class":50},[36,142505,56162],{"class":73},[36,142507,130813],{"class":50},[36,142509,142510],{"class":38,"line":128},[36,142511,133383],{"class":124},[36,142513,142514,142516,142518,142520,142522,142524],{"class":38,"line":149},[36,142515,133388],{"class":46},[36,142517,81138],{"class":50},[36,142519,130243],{"class":73},[36,142521,52768],{"class":50},[36,142523,87564],{"class":73},[36,142525,130813],{"class":50},[36,142527,142528],{"class":38,"line":154},[36,142529,133403],{"class":124},[36,142531,142532,142534,142536,142538,142540,142542],{"class":38,"line":167},[36,142533,133408],{"class":46},[36,142535,81138],{"class":50},[36,142537,130243],{"class":73},[36,142539,52768],{"class":50},[36,142541,133417],{"class":73},[36,142543,130813],{"class":50},[19,142545,141342],{},[26,142547,142548],{"className":127883,"code":133315,"language":127885,"meta":31,"style":31},[33,142549,142550,142554,142568,142572,142586,142590,142604,142608,142622,142626],{"__ignoreMap":31},[36,142551,142552],{"class":38,"line":39},[36,142553,133322],{"class":124},[36,142555,142556,142558,142560,142562,142564,142566],{"class":38,"line":54},[36,142557,133327],{"class":46},[36,142559,81138],{"class":50},[36,142561,130243],{"class":73},[36,142563,52768],{"class":50},[36,142565,133336],{"class":73},[36,142567,130813],{"class":50},[36,142569,142570],{"class":38,"line":61},[36,142571,133343],{"class":124},[36,142573,142574,142576,142578,142580,142582,142584],{"class":38,"line":80},[36,142575,133348],{"class":46},[36,142577,81138],{"class":50},[36,142579,130243],{"class":73},[36,142581,52768],{"class":50},[36,142583,56095],{"class":73},[36,142585,130813],{"class":50},[36,142587,142588],{"class":38,"line":96},[36,142589,133363],{"class":124},[36,142591,142592,142594,142596,142598,142600,142602],{"class":38,"line":101},[36,142593,133368],{"class":46},[36,142595,81138],{"class":50},[36,142597,130243],{"class":73},[36,142599,52768],{"class":50},[36,142601,56162],{"class":73},[36,142603,130813],{"class":50},[36,142605,142606],{"class":38,"line":128},[36,142607,133383],{"class":124},[36,142609,142610,142612,142614,142616,142618,142620],{"class":38,"line":149},[36,142611,133388],{"class":46},[36,142613,81138],{"class":50},[36,142615,130243],{"class":73},[36,142617,52768],{"class":50},[36,142619,87564],{"class":73},[36,142621,130813],{"class":50},[36,142623,142624],{"class":38,"line":154},[36,142625,133403],{"class":124},[36,142627,142628,142630,142632,142634,142636,142638],{"class":38,"line":167},[36,142629,133408],{"class":46},[36,142631,81138],{"class":50},[36,142633,130243],{"class":73},[36,142635,52768],{"class":50},[36,142637,133417],{"class":73},[36,142639,130813],{"class":50},[2674,142641,142642,142653],{},[259,142643,142644,142645,142648,142649,102349,142651],{},"1 号盒子左侧浮动 ",[33,142646,142647],{},"sk_list"," 里面包含 ",[33,142650,2674],{},[33,142652,259],{},[259,142654,142655,142656,142648,142659,102349,142661],{},"2 号盒子左侧浮动 ",[33,142657,142658],{},"sk_con",[33,142660,2674],{},[33,142662,259],{},[19,142664,141253],{},[26,142666,142667],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,142668,142669,142675,142685],{"__ignoreMap":31},[36,142670,142671,142673],{"class":38,"line":39},[36,142672,131731],{"class":46},[36,142674,16901],{"class":50},[36,142676,142677,142679,142681,142683],{"class":38,"line":54},[36,142678,132363],{"class":73},[36,142680,52768],{"class":50},[36,142682,25066],{"class":73},[36,142684,77],{"class":50},[36,142686,142687],{"class":38,"line":61},[36,142688,250],{"class":50},[19,142690,141342],{},[26,142692,142693],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,142694,142695,142701,142711],{"__ignoreMap":31},[36,142696,142697,142699],{"class":38,"line":39},[36,142698,131731],{"class":46},[36,142700,16901],{"class":50},[36,142702,142703,142705,142707,142709],{"class":38,"line":54},[36,142704,132363],{"class":73},[36,142706,52768],{"class":50},[36,142708,25066],{"class":73},[36,142710,77],{"class":50},[36,142712,142713],{"class":38,"line":61},[36,142714,250],{"class":50},[1645,142716,142718,142719],{"id":142717},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[33,142720,142721],{},"sk_container",[2992,142723],{"style":127739,"src":142724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2674,142726,142727,142732],{},[259,142728,141907,142729,142731],{},[33,142730,142721],{}," 给宽度 1200，不要给高度",[259,142733,142734],{},"一定不要忘记清除浮动",[19,142736,141253],{},[26,142738,142739],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,142740,142741,142747,142757],{"__ignoreMap":31},[36,142742,142743,142745],{"class":38,"line":39},[36,142744,131731],{"class":46},[36,142746,16901],{"class":50},[36,142748,142749,142751,142753,142755],{"class":38,"line":54},[36,142750,132363],{"class":73},[36,142752,52768],{"class":50},[36,142754,25066],{"class":73},[36,142756,77],{"class":50},[36,142758,142759],{"class":38,"line":61},[36,142760,250],{"class":50},[256,142762,142763],{},[259,142764,142765],{},"sk_hd制作",[2674,142767,142768],{},[259,142769,141987,142770,142773],{},[33,142771,142772],{},"sk_hd"," ，插入图片即可",[19,142775,141253],{},[26,142777,142778],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,142779,142780],{"__ignoreMap":31},[36,142781,142782,142784,142786,142788,142790,142792,142794,142796,142798,142800,142802,142804],{"class":38,"line":39},[36,142783,2577],{"class":50},[36,142785,2992],{"class":52631},[36,142787,56570],{"class":46},[36,142789,70],{"class":50},[36,142791,135400],{"class":110},[36,142793,56578],{"class":46},[36,142795,70],{"class":50},[36,142797,135407],{"class":110},[36,142799,135410],{"class":46},[36,142801,70],{"class":50},[36,142803,135415],{"class":110},[36,142805,52638],{"class":50},[256,142807,142808],{"start":54},[259,142809,142810],{},"sk_bd制作",[2674,142812,142813],{},[259,142814,142815,142816,142819,142820,102349,142822,142824],{},"3 号盒子 ",[33,142817,142818],{},"sk_bd"," ，里面包含很多的 ",[33,142821,2674],{},[33,142823,259],{},[2674,142825,142826,142835],{},[259,142827,142828,142829,142831,142832,142834],{},"当鼠标移入到 ",[33,142830,259],{}," 上面的时候显示红色的边框，在这里先给 ",[33,142833,259],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[259,142836,142837,142838,142840,142841,142843,142844,142847,142848,142850],{},"由于给每个 ",[33,142839,259],{}," 都设置了外边距，导致一行的最后一个 ",[33,142842,259],{}," 掉了下来，在这里我们利用 ",[33,142845,142846],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[33,142849,259],{},"，去掉外边距就好了",[19,142852,141253],{},[26,142854,142855],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,142856,142857,142863,142875],{"__ignoreMap":31},[36,142858,142859,142861],{"class":38,"line":39},[36,142860,52942],{"class":52631},[36,142862,16901],{"class":50},[36,142864,142865,142867,142869,142871,142873],{"class":38,"line":54},[36,142866,71801],{"class":73},[36,142868,52768],{"class":50},[36,142870,1859],{"class":73},[36,142872,52887],{"class":73},[36,142874,77],{"class":50},[36,142876,142877],{"class":38,"line":61},[36,142878,250],{"class":50},[19,142880,141342],{},[26,142882,142883],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,142884,142885,142891,142903],{"__ignoreMap":31},[36,142886,142887,142889],{"class":38,"line":39},[36,142888,52942],{"class":52631},[36,142890,16901],{"class":50},[36,142892,142893,142895,142897,142899,142901],{"class":38,"line":54},[36,142894,71801],{"class":73},[36,142896,52768],{"class":50},[36,142898,1859],{"class":73},[36,142900,52887],{"class":73},[36,142902,77],{"class":50},[36,142904,142905],{"class":38,"line":61},[36,142906,250],{"class":50},[14,142908,142910],{"id":142909},"_163-注册页面制作","16.3 注册页面制作",[2992,142912],{"style":127739,"src":142913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142915,142916,142918],{},[887,142917,885],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[2992,142920],{"style":127739,"src":142921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[1645,142923,142925],{"id":142924},"_1631-准备工作","16.3.1 准备工作",[2674,142927,142928,142931],{},[259,142929,142930],{},"创建register.html，引入 base.css，引入favicon图标",[259,142932,142933],{},"创建register.css ，在html页面进行引入",[1645,142935,142937,142938,142940],{"id":142936},"_1632-header-头部实现","16.3.2 ",[33,142939,132888],{}," 头部实现",[2674,142942,142943,142946],{},[259,142944,142945],{},"整个内容用 版心 进行包裹",[259,142947,142948],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142950,141253],{},[26,142952,142953],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,142954,142955],{"__ignoreMap":31},[36,142956,142957,142959,142961,142963,142965,142967,142969,142971,142973,142975,142977,142979],{"class":38,"line":39},[36,142958,2577],{"class":50},[36,142960,2992],{"class":52631},[36,142962,56570],{"class":46},[36,142964,70],{"class":50},[36,142966,135400],{"class":110},[36,142968,56578],{"class":46},[36,142970,70],{"class":50},[36,142972,135407],{"class":110},[36,142974,135410],{"class":46},[36,142976,70],{"class":50},[36,142978,135415],{"class":110},[36,142980,52638],{"class":50},[19,142982,141342],{},[26,142984,142985],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,142986,142987],{"__ignoreMap":31},[36,142988,142989,142991,142993,142995,142997,142999,143001,143003,143005,143007,143009,143011],{"class":38,"line":39},[36,142990,2577],{"class":50},[36,142992,2992],{"class":52631},[36,142994,56570],{"class":46},[36,142996,70],{"class":50},[36,142998,135400],{"class":110},[36,143000,56578],{"class":46},[36,143002,70],{"class":50},[36,143004,135407],{"class":110},[36,143006,135410],{"class":46},[36,143008,70],{"class":50},[36,143010,135415],{"class":110},[36,143012,52638],{"class":50},[1645,143014,143016,143017,143020],{"id":143015},"_1633-registerarea-主体模块实现","16.3.3 ",[33,143018,143019],{},"registerarea"," 主体模块实现",[2992,143022],{"style":127739,"src":143023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143025,143026],{},"整个大盒子 高度为 522px，设置4个边框",[19,143028,141253],{},[26,143030,143031],{"className":127883,"code":132040,"language":127885,"meta":31,"style":31},[33,143032,143033,143039,143055],{"__ignoreMap":31},[36,143034,143035,143037],{"class":38,"line":39},[36,143036,52942],{"class":52631},[36,143038,16901],{"class":50},[36,143040,143041,143043,143045,143047,143049,143051,143053],{"class":38,"line":54},[36,143042,72227],{"class":73},[36,143044,52768],{"class":50},[36,143046,1885],{"class":73},[36,143048,52823],{"class":42},[36,143050,52852],{"class":73},[36,143052,131275],{"class":73},[36,143054,77],{"class":50},[36,143056,143057],{"class":38,"line":61},[36,143058,250],{"class":50},[19,143060,141342],{},[26,143062,143063],{"className":127883,"code":132040,"language":127885,"meta":31,"style":31},[33,143064,143065,143071,143087],{"__ignoreMap":31},[36,143066,143067,143069],{"class":38,"line":39},[36,143068,52942],{"class":52631},[36,143070,16901],{"class":50},[36,143072,143073,143075,143077,143079,143081,143083,143085],{"class":38,"line":54},[36,143074,72227],{"class":73},[36,143076,52768],{"class":50},[36,143078,1885],{"class":73},[36,143080,52823],{"class":42},[36,143082,52852],{"class":73},[36,143084,131275],{"class":73},[36,143086,77],{"class":50},[36,143088,143089],{"class":38,"line":61},[36,143090,250],{"class":50},[19,143092,143093],{},"1号盒子 是一个 h3 标签，放标题",[2674,143095,143096],{},[259,143097,143098],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143100,141253],{},[26,143102,143103],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,143104,143105,143111,143121],{"__ignoreMap":31},[36,143106,143107,143109],{"class":38,"line":39},[36,143108,131731],{"class":46},[36,143110,16901],{"class":50},[36,143112,143113,143115,143117,143119],{"class":38,"line":54},[36,143114,132363],{"class":73},[36,143116,52768],{"class":50},[36,143118,25066],{"class":73},[36,143120,77],{"class":50},[36,143122,143123],{"class":38,"line":61},[36,143124,250],{"class":50},[19,143126,141342],{},[26,143128,143129],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,143130,143131,143137,143147],{"__ignoreMap":31},[36,143132,143133,143135],{"class":38,"line":39},[36,143134,131731],{"class":46},[36,143136,16901],{"class":50},[36,143138,143139,143141,143143,143145],{"class":38,"line":54},[36,143140,132363],{"class":73},[36,143142,52768],{"class":50},[36,143144,25066],{"class":73},[36,143146,77],{"class":50},[36,143148,143149],{"class":38,"line":61},[36,143150,250],{"class":50},[19,143152,143153],{},"2号盒子 里面放注册的内容",[2674,143155,143156,143159,143168,143182,143195,143198,143201,143219,143233],{},[259,143157,143158],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[259,143160,143161,143162,143164,143165,143167],{},"里面的内容利用 ",[33,143163,2674],{}," 包含 ",[33,143166,259],{}," 来实现的（不需要用表格）",[259,143169,140397,143170,143172,143173,143175,143176,143178,143179,143181],{},[33,143171,259],{}," 里面，左侧放 ",[33,143174,34939],{}," 标签， 中间放",[33,143177,55152],{}," 标签， 右侧放 ",[33,143180,36],{}," 提示信息",[259,143183,143184,143185,143187,143188,143190,143191,143194],{},"左侧 ",[33,143186,34939],{},"里面的文字都是右对齐，我们可以给",[33,143189,34939],{},"设置一个宽度（88px），然后利用",[33,143192,143193],{},"text-align"," 来设置右对齐",[259,143196,143197],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[259,143199,143200],{},"右侧 span修饰一下文字颜色",[259,143202,143203,143204],{},"提示信息的样式优化",[2674,143205,143206,143209,143212],{},[259,143207,143208],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[259,143210,143211],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[259,143213,143214,143215,143218],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[33,143216,143217],{},"vertical-algin"," 来设置 图片与文字对齐方式",[259,143220,143221,143222],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2674,143223,143224,143230],{},[259,143225,143226,143227,143229],{},"设置 ",[33,143228,24883],{}," 的 左右 12px 的内边距，设置一下文字颜色",[259,143231,143232],{},"分别设置 背景颜色",[259,143234,143235,143236,143238],{},"同意协议 和 完成注册 都是用 ",[33,143237,259],{}," 进行包裹",[19,143240,141253],{},[26,143242,143243],{"className":127883,"code":141826,"language":127885,"meta":31,"style":31},[33,143244,143245,143251,143261],{"__ignoreMap":31},[36,143246,143247,143249],{"class":38,"line":39},[36,143248,52942],{"class":52631},[36,143250,16901],{"class":50},[36,143252,143253,143255,143257,143259],{"class":38,"line":54},[36,143254,72209],{"class":73},[36,143256,52768],{"class":50},[36,143258,141843],{"class":73},[36,143260,77],{"class":50},[36,143262,143263],{"class":38,"line":61},[36,143264,250],{"class":50},[19,143266,141342],{},[26,143268,143269],{"className":127883,"code":141826,"language":127885,"meta":31,"style":31},[33,143270,143271,143277,143287],{"__ignoreMap":31},[36,143272,143273,143275],{"class":38,"line":39},[36,143274,52942],{"class":52631},[36,143276,16901],{"class":50},[36,143278,143279,143281,143283,143285],{"class":38,"line":54},[36,143280,72209],{"class":73},[36,143282,52768],{"class":50},[36,143284,141843],{"class":73},[36,143286,77],{"class":50},[36,143288,143289],{"class":38,"line":61},[36,143290,250],{"class":50},[1645,143292,143294],{"id":143293},"_1634-底部实现","16.3.4 底部实现",[19,143296,141253],{},[26,143298,143299],{"className":127883,"code":141826,"language":127885,"meta":31,"style":31},[33,143300,143301,143307,143317],{"__ignoreMap":31},[36,143302,143303,143305],{"class":38,"line":39},[36,143304,52942],{"class":52631},[36,143306,16901],{"class":50},[36,143308,143309,143311,143313,143315],{"class":38,"line":54},[36,143310,72209],{"class":73},[36,143312,52768],{"class":50},[36,143314,141843],{"class":73},[36,143316,77],{"class":50},[36,143318,143319],{"class":38,"line":61},[36,143320,250],{"class":50},[19,143322,141342],{},[26,143324,143325],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,143326,143327,143331,143345,143349],{"__ignoreMap":31},[36,143328,143329],{"class":38,"line":39},[36,143330,131994],{"class":124},[36,143332,143333,143335,143337,143339,143341,143343],{"class":38,"line":54},[36,143334,2577],{"class":50},[36,143336,52942],{"class":52631},[36,143338,54817],{"class":46},[36,143340,70],{"class":50},[36,143342,132007],{"class":110},[36,143344,52638],{"class":50},[36,143346,143347],{"class":38,"line":61},[36,143348,132014],{"class":50},[36,143350,143351,143353,143355],{"class":38,"line":80},[36,143352,53116],{"class":50},[36,143354,52942],{"class":52631},[36,143356,52638],{"class":50},[14,143358,143360],{"id":143359},"_164-项目总结","16.4 项目总结",[256,143362,143363,143366,143369,143372],{},[259,143364,143365],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[259,143367,143368],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[259,143370,143371],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[259,143373,143374],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[2992,143376],{"style":127739,"src":143377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[256,143379,143380],{"start":96},[259,143381,143382],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[2992,143384],{"style":127739,"src":143385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[256,143387,143388],{"start":101},[259,143389,143390],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[2992,143392],{"style":127739,"src":143393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,143395,143396],{"className":128630,"code":138040,"language":128632,"meta":31,"style":31},[33,143397,143398],{"__ignoreMap":31},[36,143399,143400,143402,143404,143406,143408,143410,143412,143414,143416,143418,143420,143422],{"class":38,"line":39},[36,143401,2577],{"class":50},[36,143403,55152],{"class":52631},[36,143405,55155],{"class":46},[36,143407,70],{"class":50},[36,143409,64030],{"class":110},[36,143411,16249],{"class":46},[36,143413,70],{"class":50},[36,143415,138061],{"class":110},[36,143417,62351],{"class":46},[36,143419,70],{"class":50},[36,143421,138068],{"class":110},[36,143423,52638],{"class":50},[256,143425,143426,143429],{"start":128},[259,143427,143428],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[259,143430,143431],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1592,143433,143434],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":31,"searchDepth":54,"depth":54,"links":143436},[143437,143442,143449,143457],{"id":141063,"depth":54,"text":141064,"children":143438},[143439,143440,143441],{"id":141067,"depth":61,"text":141068},{"id":141798,"depth":61,"text":141799},{"id":142111,"depth":61,"text":142112},{"id":142411,"depth":54,"text":142412,"children":143443},[143444,143445,143447],{"id":142415,"depth":61,"text":142416},{"id":142433,"depth":61,"text":143446},"16.2.2 列表页 header 和 nav 修改",{"id":142717,"depth":61,"text":143448},"16.2.3 列表页主体 sk_container",{"id":142909,"depth":54,"text":142910,"children":143450},[143451,143452,143454,143456],{"id":142924,"depth":61,"text":142925},{"id":142936,"depth":61,"text":143453},"16.3.2 header 头部实现",{"id":143015,"depth":61,"text":143455},"16.3.3 registerarea 主体模块实现",{"id":143293,"depth":61,"text":143294},{"id":143359,"depth":54,"text":143360},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141055,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143464,"title":143465,"body":143466,"description":24706,"extension":1603,"meta":143574,"navigation":57,"path":143575,"seo":143576,"stem":143577,"__hash__":143578},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143467,"toc":143569},[143468,143471,143475,143478,143481,143490,143499,143503,143508,143515,143533,143536,143539,143542,143545,143548,143551,143554,143557,143560,143563,143566],[10,143469,143465],{"id":143470},"_17-web服务器与网站发布",[14,143472,143474],{"id":143473},"_171-web服务器","17.1 Web服务器",[19,143476,143477],{},"把自己网站上传到服务器上，可以让其他人访问",[2992,143479],{"style":127739,"src":143480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143482,143483,143486,143487],{},[887,143484,143485],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[887,143488,143489],{},"Web 服务器等",[19,143491,143492,143493,102349,143496,27071],{},"根据服务器在网络中所在的位置不同，又可分为 ",[887,143494,143495],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[887,143497,143498],{},"远程服务器",[1645,143500,143502],{"id":143501},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143504,143505],{},[887,143506,143507],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143509,143510,143511],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[1906,143512,143513],{"href":143513,"rel":143514},"http:\u002F\u002Ffree.3v.do\u002F",[25195],[2674,143516,143517,143520,143523,143530],{},[259,143518,143519],{},"去免费空间网站注册账号。",[259,143521,143522],{},"记录下主机名、用户名、密码、域名。",[259,143524,143525,143526,143529],{},"利用 ",[33,143527,143528],{},"utftp"," 软件 上传网站到远程服务器",[259,143531,143532],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143534,143535],{},"使用软件上传，对上传软件文件进行解压",[2992,143537],{"style":127739,"src":143538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[2992,143540],{"style":127739,"src":143541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143543,143544],{},"输入刚刚申请的服务器账号信息：",[2992,143546],{"style":127739,"src":143547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[2992,143549],{"style":127739,"src":143550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[2992,143552],{"style":127739,"src":143553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[2992,143555],{"style":127739,"src":143556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143558,143559],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[2992,143561],{"style":127739,"src":143562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143564,143565],{},"浏览器输入域名即可访问",[19,143567,143568],{},"首页一定必须是index",{"title":31,"searchDepth":54,"depth":54,"links":143570},[143571],{"id":143473,"depth":54,"text":143474,"children":143572},[143573],{"id":143501,"depth":61,"text":143502},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143465,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143580,"title":143581,"body":143582,"description":24706,"extension":1603,"meta":144509,"navigation":57,"path":144510,"seo":144511,"stem":144512,"__hash__":144513},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143583,"toc":144492},[143584,143587,143591,143594,143597,143608,143611,143615,143619,143624,143627,143630,143633,143636,143640,143666,143670,143674,143677,143680,143684,143717,143721,143724,143727,143791,143795,143799,143802,143805,143808,143812,143857,143861,143864,143894,143898,143902,143905,143908,143912,143915,143984,143987,144095,144097,144103,144107,144110,144113,144209,144212,144216,144240,144244,144247,144251,144254,144258,144261,144264,144267,144270,144274,144277,144280,144284,144288,144291,144294,144297,144300,144304,144307,144311,144314,144317,144362,144366,144370,144373,144376,144379,144411,144415,144418,144452,144456,144459,144489],[10,143585,143581],{"id":143586},"_18-2d动画与3d转换",[14,143588,143590],{"id":143589},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143592,143593],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143595,143596],{},"转换（transform）你可以简单理解为变形",[2674,143598,143599,143602,143605],{},[259,143600,143601],{},"移动：translate",[259,143603,143604],{},"旋转：rotate",[259,143606,143607],{},"缩放：scale",[2992,143609],{"style":127739,"src":143610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[1645,143612,143614],{"id":143613},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23327,143616,143618],{"id":143617},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143620,143621,143622],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[887,143623,134542],{},[2992,143625],{"style":127739,"src":143626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143628,143629],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143631,143632],{},"对于行内元素无效",[19,143634,143635],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23327,143637,143639],{"id":143638},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,143641,143642],{"className":127883,"code":140072,"language":127885,"meta":31,"style":31},[33,143643,143644,143650,143662],{"__ignoreMap":31},[36,143645,143646,143648],{"class":38,"line":39},[36,143647,52942],{"class":52631},[36,143649,16901],{"class":50},[36,143651,143652,143654,143656,143658,143660],{"class":38,"line":54},[36,143653,71801],{"class":73},[36,143655,52768],{"class":50},[36,143657,1859],{"class":73},[36,143659,52887],{"class":73},[36,143661,77],{"class":50},[36,143663,143664],{"class":38,"line":61},[36,143665,250],{"class":50},[1645,143667,143669],{"id":143668},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23327,143671,143673],{"id":143672},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143675,143676],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[2992,143678],{"style":127739,"src":143679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23327,143681,143683],{"id":143682},"_18122-旋转效果","18.1.2.2 旋转效果",[26,143685,143687],{"className":127883,"code":143686,"language":127885,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[33,143688,143689,143695,143713],{"__ignoreMap":31},[36,143690,143691,143693],{"class":38,"line":39},[36,143692,52942],{"class":52631},[36,143694,16901],{"class":50},[36,143696,143697,143699,143701,143704,143706,143708,143711],{"class":38,"line":54},[36,143698,137867],{"class":73},[36,143700,52768],{"class":50},[36,143702,143703],{"class":73},"rotate",[36,143705,222],{"class":50},[36,143707,2196],{"class":73},[36,143709,143710],{"class":42},"deg",[36,143712,228],{"class":50},[36,143714,143715],{"class":38,"line":61},[36,143716,250],{"class":50},[23327,143718,143720],{"id":143719},"_18123-三角做法","18.1.2.3 三角做法",[19,143722,143723],{},"该下标当经过最外层大盒子时会实现向上反转",[2992,143725],{"style":127739,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,143728,143729],{"className":127883,"code":136403,"language":127885,"meta":31,"style":31},[33,143730,143731,143735,143741,143751,143761,143777,143787],{"__ignoreMap":31},[36,143732,143733],{"class":38,"line":39},[36,143734,136410],{"class":124},[36,143736,143737,143739],{"class":38,"line":54},[36,143738,136415],{"class":46},[36,143740,16901],{"class":50},[36,143742,143743,143745,143747,143749],{"class":38,"line":61},[36,143744,71899],{"class":73},[36,143746,52768],{"class":50},[36,143748,1859],{"class":73},[36,143750,77],{"class":50},[36,143752,143753,143755,143757,143759],{"class":38,"line":80},[36,143754,72119],{"class":73},[36,143756,52768],{"class":50},[36,143758,1859],{"class":73},[36,143760,77],{"class":50},[36,143762,143763,143765,143767,143769,143771,143773,143775],{"class":38,"line":96},[36,143764,72227],{"class":73},[36,143766,52768],{"class":50},[36,143768,2113],{"class":73},[36,143770,52823],{"class":42},[36,143772,52852],{"class":73},[36,143774,65322],{"class":73},[36,143776,77],{"class":50},[36,143778,143779,143781,143783,143785],{"class":38,"line":101},[36,143780,136458],{"class":73},[36,143782,52768],{"class":50},[36,143784,63700],{"class":73},[36,143786,77],{"class":50},[36,143788,143789],{"class":38,"line":128},[36,143790,250],{"class":50},[1645,143792,143794],{"id":143793},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23327,143796,143798],{"id":143797},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143800,143801],{},"设置中心点",[2992,143803],{"style":127739,"src":143804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143806,143807],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23327,143809,143811],{"id":143810},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,143813,143815],{"className":127883,"code":143814,"language":127885,"meta":31,"style":31},"\u002F* 转换中心点 *\u002F\ndiv {\n  transform-origin: center center;  \u002F* 默认 *\u002F\n  \u002F* transform-origin: 50% 50%; *\u002F\n  \u002F* transform-origin: left top; *\u002F\n}\n",[33,143816,143817,143822,143828,143843,143848,143853],{"__ignoreMap":31},[36,143818,143819],{"class":38,"line":39},[36,143820,143821],{"class":124},"\u002F* 转换中心点 *\u002F\n",[36,143823,143824,143826],{"class":38,"line":54},[36,143825,52942],{"class":52631},[36,143827,16901],{"class":50},[36,143829,143830,143833,143835,143837,143839,143841],{"class":38,"line":61},[36,143831,143832],{"class":73},"  transform-origin",[36,143834,52768],{"class":50},[36,143836,52923],{"class":73},[36,143838,18473],{"class":73},[36,143840,131746],{"class":50},[36,143842,136556],{"class":124},[36,143844,143845],{"class":38,"line":80},[36,143846,143847],{"class":124},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[36,143849,143850],{"class":38,"line":96},[36,143851,143852],{"class":124},"  \u002F* transform-origin: left top; *\u002F\n",[36,143854,143855],{"class":38,"line":101},[36,143856,250],{"class":50},[23327,143858,143860],{"id":143859},"_18133-旋转案例","18.1.3.3 旋转案例",[2992,143862],{"style":127739,"src":143863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,143865,143866],{"className":127883,"code":143686,"language":127885,"meta":31,"style":31},[33,143867,143868,143874,143890],{"__ignoreMap":31},[36,143869,143870,143872],{"class":38,"line":39},[36,143871,52942],{"class":52631},[36,143873,16901],{"class":50},[36,143875,143876,143878,143880,143882,143884,143886,143888],{"class":38,"line":54},[36,143877,137867],{"class":73},[36,143879,52768],{"class":50},[36,143881,143703],{"class":73},[36,143883,222],{"class":50},[36,143885,2196],{"class":73},[36,143887,143710],{"class":42},[36,143889,228],{"class":50},[36,143891,143892],{"class":38,"line":61},[36,143893,250],{"class":50},[1645,143895,143897],{"id":143896},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23327,143899,143901],{"id":143900},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143903,143904],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[2992,143906],{"style":127739,"src":143907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23327,143909,143911],{"id":143910},"_18142-分页按钮","18.1.4.2 分页按钮",[2992,143913],{"style":127739,"src":143914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,143916,143918],{"className":127883,"code":143917,"language":127885,"meta":31,"style":31},"div {\n  transform: scale(1.2);\n}\n```Css\n\u002F* 2D 缩放 *\u002F\ndiv {\n  transform: scale(1.2);\n  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n}\n",[33,143919,143920,143926,143942,143946,143950,143955,143961,143975,143980],{"__ignoreMap":31},[36,143921,143922,143924],{"class":38,"line":39},[36,143923,52942],{"class":52631},[36,143925,16901],{"class":50},[36,143927,143928,143930,143932,143935,143937,143940],{"class":38,"line":54},[36,143929,137867],{"class":73},[36,143931,52768],{"class":50},[36,143933,143934],{"class":73},"scale",[36,143936,222],{"class":50},[36,143938,143939],{"class":73},"1.2",[36,143941,228],{"class":50},[36,143943,143944],{"class":38,"line":61},[36,143945,250],{"class":50},[36,143947,143948],{"class":38,"line":80},[36,143949,137344],{"class":50},[36,143951,143952],{"class":38,"line":96},[36,143953,143954],{"class":124},"\u002F* 2D 缩放 *\u002F\n",[36,143956,143957,143959],{"class":38,"line":101},[36,143958,52942],{"class":52631},[36,143960,16901],{"class":50},[36,143962,143963,143965,143967,143969,143971,143973],{"class":38,"line":128},[36,143964,137867],{"class":73},[36,143966,52768],{"class":50},[36,143968,143934],{"class":73},[36,143970,222],{"class":50},[36,143972,143939],{"class":73},[36,143974,228],{"class":50},[36,143976,143977],{"class":38,"line":149},[36,143978,143979],{"class":124},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[36,143981,143982],{"class":38,"line":154},[36,143983,250],{"class":50},[19,143985,143986],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,143988,143990],{"className":127883,"code":143989,"language":127885,"meta":31,"style":31},"\u002F* 定义动画 *\u002F\n@keyframes move {\n  0% { transform: translateX(0); }\n  100% { transform: translateX(100px); }\n}\n\u002F* 调用动画 *\u002F\ndiv {\n  animation: move 1s ease 0s infinite alternate;\n}\n",[33,143991,143992,143997,144007,144028,144049,144053,144058,144064,144091],{"__ignoreMap":31},[36,143993,143994],{"class":38,"line":39},[36,143995,143996],{"class":124},"\u002F* 定义动画 *\u002F\n",[36,143998,143999,144002,144005],{"class":38,"line":54},[36,144000,144001],{"class":42},"@keyframes",[36,144003,144004],{"class":473}," move",[36,144006,16901],{"class":50},[36,144008,144009,144012,144014,144016,144018,144021,144023,144025],{"class":38,"line":61},[36,144010,144011],{"class":46},"  0%",[36,144013,81138],{"class":50},[36,144015,49465],{"class":73},[36,144017,52768],{"class":50},[36,144019,144020],{"class":73},"translateX",[36,144022,222],{"class":50},[36,144024,1859],{"class":73},[36,144026,144027],{"class":50},"); }\n",[36,144029,144030,144033,144035,144037,144039,144041,144043,144045,144047],{"class":38,"line":80},[36,144031,144032],{"class":46},"  100%",[36,144034,81138],{"class":50},[36,144036,49465],{"class":73},[36,144038,52768],{"class":50},[36,144040,144020],{"class":73},[36,144042,222],{"class":50},[36,144044,1979],{"class":73},[36,144046,52823],{"class":42},[36,144048,144027],{"class":50},[36,144050,144051],{"class":38,"line":96},[36,144052,250],{"class":50},[36,144054,144055],{"class":38,"line":101},[36,144056,144057],{"class":124},"\u002F* 调用动画 *\u002F\n",[36,144059,144060,144062],{"class":38,"line":128},[36,144061,52942],{"class":52631},[36,144063,16901],{"class":50},[36,144065,144066,144069,144071,144073,144075,144077,144079,144081,144083,144086,144089],{"class":38,"line":149},[36,144067,144068],{"class":73},"  animation",[36,144070,52768],{"class":50},[36,144072,136569],{"class":73},[36,144074,26449],{"class":73},[36,144076,2362],{"class":42},[36,144078,80011],{"class":73},[36,144080,242],{"class":73},[36,144082,2362],{"class":42},[36,144084,144085],{"class":73}," infinite",[36,144087,144088],{"class":73}," alternate",[36,144090,77],{"class":50},[36,144092,144093],{"class":38,"line":154},[36,144094,250],{"class":50},[19,144096,143986],{},[26,144098,144101],{"className":144099,"code":144100,"language":6676},[6674],"\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-200.png\">\n\n#### 18.2.1.5 动画简写\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-201.png\">\n\nname,duration这两个属性必须写！\n\n### 18.2.2 案例\n\n#### 18.2.2.1 热点图\n\n\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-202.png\">\n\n```Css\n@keyframes slide {\n  from { transform: translateX(0); }\n  to { transform: translateX(100px); }\n}\ndiv {\n  animation: slide 1s ease infinite;\n}\n",[33,144102,144100],{"__ignoreMap":31},[23327,144104,144106],{"id":144105},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144108,144109],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[2992,144111],{"style":127739,"src":144112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,144114,144115],{"className":127883,"code":143989,"language":127885,"meta":31,"style":31},[33,144116,144117,144121,144129,144147,144167,144171,144175,144181,144205],{"__ignoreMap":31},[36,144118,144119],{"class":38,"line":39},[36,144120,143996],{"class":124},[36,144122,144123,144125,144127],{"class":38,"line":54},[36,144124,144001],{"class":42},[36,144126,144004],{"class":473},[36,144128,16901],{"class":50},[36,144130,144131,144133,144135,144137,144139,144141,144143,144145],{"class":38,"line":61},[36,144132,144011],{"class":46},[36,144134,81138],{"class":50},[36,144136,49465],{"class":73},[36,144138,52768],{"class":50},[36,144140,144020],{"class":73},[36,144142,222],{"class":50},[36,144144,1859],{"class":73},[36,144146,144027],{"class":50},[36,144148,144149,144151,144153,144155,144157,144159,144161,144163,144165],{"class":38,"line":80},[36,144150,144032],{"class":46},[36,144152,81138],{"class":50},[36,144154,49465],{"class":73},[36,144156,52768],{"class":50},[36,144158,144020],{"class":73},[36,144160,222],{"class":50},[36,144162,1979],{"class":73},[36,144164,52823],{"class":42},[36,144166,144027],{"class":50},[36,144168,144169],{"class":38,"line":96},[36,144170,250],{"class":50},[36,144172,144173],{"class":38,"line":101},[36,144174,144057],{"class":124},[36,144176,144177,144179],{"class":38,"line":128},[36,144178,52942],{"class":52631},[36,144180,16901],{"class":50},[36,144182,144183,144185,144187,144189,144191,144193,144195,144197,144199,144201,144203],{"class":38,"line":149},[36,144184,144068],{"class":73},[36,144186,52768],{"class":50},[36,144188,136569],{"class":73},[36,144190,26449],{"class":73},[36,144192,2362],{"class":42},[36,144194,80011],{"class":73},[36,144196,242],{"class":73},[36,144198,2362],{"class":42},[36,144200,144085],{"class":73},[36,144202,144088],{"class":73},[36,144204,77],{"class":50},[36,144206,144207],{"class":38,"line":154},[36,144208,250],{"class":50},[19,144210,144211],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[1645,144213,144215],{"id":144214},"_1823-知识点回顾","18.2.3 知识点回顾",[26,144217,144218],{"className":127883,"code":130052,"language":127885,"meta":31,"style":31},[33,144219,144220,144226,144236],{"__ignoreMap":31},[36,144221,144222,144224],{"class":38,"line":39},[36,144223,52942],{"class":52631},[36,144225,16901],{"class":50},[36,144227,144228,144230,144232,144234],{"class":38,"line":54},[36,144229,130065],{"class":73},[36,144231,52768],{"class":50},[36,144233,63067],{"class":73},[36,144235,77],{"class":50},[36,144237,144238],{"class":38,"line":61},[36,144239,250],{"class":50},[14,144241,144243],{"id":144242},"_183-3d-转换","18.3 3D 转换",[19,144245,144246],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[1645,144248,144250],{"id":144249},"_1831-坐标轴认识","18.3.1 坐标轴认识",[2992,144252],{"style":127739,"src":144253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[1645,144255,144257],{"id":144256},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[2992,144259],{"style":127739,"src":144260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144262,144263],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144265,144266],{},"translate3d的效果需要搭配透视perspective来使用",[2992,144268],{"style":127739,"src":144269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[1645,144271,144273],{"id":144272},"_1833-透视-perspective","18.3.3 透视 perspective",[2992,144275],{"style":127739,"src":144276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144278,144279],{},"透视写在父盒子上，单位为像素",[1645,144281,144283],{"id":144282},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23327,144285,144287],{"id":144286},"_18341-分开解释","18.3.4.1 分开解释",[2992,144289],{"style":127739,"src":144290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[2992,144292],{"style":127739,"src":144293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[2992,144295],{"style":127739,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144298,144299],{},"总结来说就是左手原则",[23327,144301,144303],{"id":144302},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[2992,144305],{"style":127739,"src":144306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[1645,144308,144310],{"id":144309},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[2992,144312],{"style":127739,"src":144313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[2992,144315],{"style":127739,"src":144316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,144318,144320],{"className":127883,"code":144319,"language":127885,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[33,144321,144322,144328,144341,144358],{"__ignoreMap":31},[36,144323,144324,144326],{"class":38,"line":39},[36,144325,52942],{"class":52631},[36,144327,16901],{"class":50},[36,144329,144330,144333,144335,144337,144339],{"class":38,"line":54},[36,144331,144332],{"class":73},"  perspective",[36,144334,52768],{"class":50},[36,144336,66405],{"class":73},[36,144338,52823],{"class":42},[36,144340,77],{"class":50},[36,144342,144343,144345,144347,144350,144352,144354,144356],{"class":38,"line":61},[36,144344,137867],{"class":73},[36,144346,52768],{"class":50},[36,144348,144349],{"class":73},"rotateX",[36,144351,222],{"class":50},[36,144353,2196],{"class":73},[36,144355,143710],{"class":42},[36,144357,228],{"class":50},[36,144359,144360],{"class":38,"line":80},[36,144361,250],{"class":50},[1645,144363,144365],{"id":144364},"_1836-案例","18.3.6 案例",[23327,144367,144369],{"id":144368},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[2992,144371],{"style":127739,"src":144372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[2992,144374],{"style":127739,"src":144375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[2992,144377],{"style":127739,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,144380,144382],{"className":127883,"code":144381,"language":127885,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[33,144383,144384,144389,144395,144407],{"__ignoreMap":31},[36,144385,144386],{"class":38,"line":39},[36,144387,144388],{"class":124},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[36,144390,144391,144393],{"class":38,"line":54},[36,144392,134880],{"class":46},[36,144394,16901],{"class":50},[36,144396,144397,144399,144401,144403,144405],{"class":38,"line":61},[36,144398,144332],{"class":73},[36,144400,52768],{"class":50},[36,144402,66405],{"class":73},[36,144404,52823],{"class":42},[36,144406,77],{"class":50},[36,144408,144409],{"class":38,"line":80},[36,144410,250],{"class":50},[23327,144412,144414],{"id":144413},"_18362-3d导航栏","18.3.6.2 3D导航栏",[2992,144416],{"style":127739,"src":144417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,144419,144420],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,144421,144422,144426,144440,144444],{"__ignoreMap":31},[36,144423,144424],{"class":38,"line":39},[36,144425,131994],{"class":124},[36,144427,144428,144430,144432,144434,144436,144438],{"class":38,"line":54},[36,144429,2577],{"class":50},[36,144431,52942],{"class":52631},[36,144433,54817],{"class":46},[36,144435,70],{"class":50},[36,144437,132007],{"class":110},[36,144439,52638],{"class":50},[36,144441,144442],{"class":38,"line":61},[36,144443,132014],{"class":50},[36,144445,144446,144448,144450],{"class":38,"line":80},[36,144447,53116],{"class":50},[36,144449,52942],{"class":52631},[36,144451,52638],{"class":50},[23327,144453,144455],{"id":144454},"_18363-旋转木马","18.3.6.3 旋转木马",[2992,144457],{"style":127739,"src":144458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,144460,144461],{"className":127883,"code":143686,"language":127885,"meta":31,"style":31},[33,144462,144463,144469,144485],{"__ignoreMap":31},[36,144464,144465,144467],{"class":38,"line":39},[36,144466,52942],{"class":52631},[36,144468,16901],{"class":50},[36,144470,144471,144473,144475,144477,144479,144481,144483],{"class":38,"line":54},[36,144472,137867],{"class":73},[36,144474,52768],{"class":50},[36,144476,143703],{"class":73},[36,144478,222],{"class":50},[36,144480,2196],{"class":73},[36,144482,143710],{"class":42},[36,144484,228],{"class":50},[36,144486,144487],{"class":38,"line":61},[36,144488,250],{"class":50},[1592,144490,144491],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":144493},[144494,144501],{"id":143589,"depth":54,"text":143590,"children":144495},[144496,144497,144498,144499,144500],{"id":143613,"depth":61,"text":143614},{"id":143668,"depth":61,"text":143669},{"id":143793,"depth":61,"text":143794},{"id":143896,"depth":61,"text":143897},{"id":144214,"depth":61,"text":144215},{"id":144242,"depth":54,"text":144243,"children":144502},[144503,144504,144505,144506,144507,144508],{"id":144249,"depth":61,"text":144250},{"id":144256,"depth":61,"text":144257},{"id":144272,"depth":61,"text":144273},{"id":144282,"depth":61,"text":144283},{"id":144309,"depth":61,"text":144310},{"id":144364,"depth":61,"text":144365},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143581,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144515,"title":144516,"body":144517,"description":24706,"extension":1603,"meta":144720,"navigation":57,"path":144721,"seo":144722,"stem":144723,"__hash__":144724},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144518,"toc":144709},[144519,144522,144526,144529,144532,144536,144539,144542,144545,144549,144552,144556,144559,144563,144566,144570,144584,144588,144613,144616,144619,144636,144640,144644,144647,144650,144654,144657,144660,144678,144682,144685,144699,144703,144706],[10,144520,144516],{"id":144521},"_19-移动端基础-前缀现状与视口",[14,144523,144525],{"id":144524},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[2992,144527],{"style":127739,"src":144528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144530,144531],{},"意思就是加个前缀，增加兼容性",[14,144533,144535],{"id":144534},"_192-移动端现状认识","19.2 移动端现状认识",[2992,144537],{"style":127739,"src":144538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144540,144541],{},"调试方法：",[2992,144543],{"style":127739,"src":144544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144546,144548],{"id":144547},"_193-视口","19.3 视口",[19,144550,144551],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[1645,144553,144555],{"id":144554},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[2992,144557],{"style":127739,"src":144558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[1645,144560,144562],{"id":144561},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[2992,144564],{"style":127739,"src":144565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[1645,144567,144569],{"id":144568},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2674,144571,144572,144575,144578,144581],{},[259,144573,144574],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[259,144576,144577],{},"理想视口，对设备来讲，是最理想的视口尺寸",[259,144579,144580],{},"需要手动添写meta视口标签通知浏览器操作",[259,144582,144583],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[1645,144585,144587],{"id":144586},"_1934-meta视口标签","19.3.4 meta视口标签",[26,144589,144591],{"className":128630,"code":144590,"language":128632,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[33,144592,144593],{"__ignoreMap":31},[36,144594,144595,144597,144599,144601,144603,144605,144607,144609,144611],{"class":38,"line":39},[36,144596,2577],{"class":50},[36,144598,52675],{"class":52631},[36,144600,16249],{"class":46},[36,144602,70],{"class":50},[36,144604,52722],{"class":110},[36,144606,52702],{"class":46},[36,144608,70],{"class":50},[36,144610,52729],{"class":110},[36,144612,52638],{"class":50},[2992,144614],{"style":127739,"src":144615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144617,144618],{},"标准视口设置：",[256,144620,144621,144624,144627,144630,144633],{},[259,144622,144623],{},"视口宽度和设备保持一致",[259,144625,144626],{},"视口的默认缩放比例1.0",[259,144628,144629],{},"不允许用户自行缩放",[259,144631,144632],{},"最大允许的缩放比例1.0",[259,144634,144635],{},"最小允许的缩放比例1.0",[1645,144637,144639],{"id":144638},"_1935-二倍图","19.3.5 二倍图",[23327,144641,144643],{"id":144642},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[2992,144645],{"style":127739,"src":144646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[2992,144648],{"style":127739,"src":144649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23327,144651,144653],{"id":144652},"_19352-多倍图","19.3.5.2 多倍图",[2992,144655],{"style":127739,"src":144656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144658,144659],{},"二倍图法，代码如下：",[26,144661,144663],{"className":127883,"code":144662,"language":127885,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[33,144664,144665,144670],{"__ignoreMap":31},[36,144666,144667],{"class":38,"line":39},[36,144668,144669],{"class":124},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[36,144671,144672,144675],{"class":38,"line":54},[36,144673,144674],{"class":52631},"background-size",[36,144676,144677],{"class":50},": 50% 50%;\n",[23327,144679,144681],{"id":144680},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[2992,144683],{"style":127739,"src":144684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[256,144686,144687,144690,144693,144696],{},[259,144688,144689],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[259,144691,144692],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[259,144694,144695],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[259,144697,144698],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23327,144700,144702],{"id":144701},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[2992,144704],{"style":127739,"src":144705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1592,144707,144708],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":144710},[144711,144712,144713],{"id":144524,"depth":54,"text":144525},{"id":144534,"depth":54,"text":144535},{"id":144547,"depth":54,"text":144548,"children":144714},[144715,144716,144717,144718,144719],{"id":144554,"depth":61,"text":144555},{"id":144561,"depth":61,"text":144562},{"id":144568,"depth":61,"text":144569},{"id":144586,"depth":61,"text":144587},{"id":144638,"depth":61,"text":144639},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144516,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144726,"title":144727,"body":144728,"description":24706,"extension":1603,"meta":145605,"navigation":57,"path":145606,"seo":145607,"stem":145608,"__hash__":145609},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144729,"toc":145589},[144730,144733,144737,144744,144747,144754,144757,144762,144765,144769,144773,144780,144783,144786,144790,144793,144796,144799,144802,144805,144809,144812,144816,144818,144821,144824,144827,144830,144832,144835,144837,144867,144869,144899,144903,144906,144910,144913,144930,144933,144936,145012,145014,145017,145020,145023,145026,145028,145031,145034,145038,145060,145063,145066,145070,145073,145079,145082,145086,145089,145092,145096,145099,145102,145105,145109,145112,145115,145118,145121,145125,145128,145132,145139,145142,145145,145148,145151,145161,145164,145167,145174,145177,145181,145184,145187,145191,145194,145197,145200,145245,145248,145251,145254,145256,145385,145387,145425,145428,145431,145433,145551,145553,145587],[10,144731,144727],{"id":144732},"_20-移动端布局实战上篇",[14,144734,144736],{"id":144735},"_201-移动端主流方案","20.1 移动端主流方案",[256,144738,144739],{},[259,144740,144741],{},[887,144742,144743],{},"单独移动端页面（主流）",[2992,144745],{"style":127739,"src":144746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[256,144748,144749],{"start":54},[259,144750,144751],{},[887,144752,144753],{},"响应式兼容PC移动端",[2992,144755],{"style":127739,"src":144756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[256,144758,144759],{"start":61},[259,144760,144761],{},"两种页面选型布局方式",[2992,144763],{"style":127739,"src":144764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144766,144768],{"id":144767},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[1645,144770,144772],{"id":144771},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144774,144775,144776],{},"官网地址： ",[1906,144777,144778],{"href":144778,"rel":144779},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25195],[2992,144781],{"style":127739,"src":144782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[2992,144784],{"style":127739,"src":144785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[1645,144787,144789],{"id":144788},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[2992,144791],{"style":127739,"src":144792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[2992,144794],{"style":127739,"src":144795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144797,144798],{},"去除高亮：",[19,144800,144801],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144803,144804],{},"-webkit- tap-highlight-color: transparent;",[14,144806,144808],{"id":144807},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[2992,144810],{"style":127739,"src":144811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144813,144815],{"id":144814},"_204-流式布局案例","20.4 流式布局案例",[19,144817,1703],{},[19,144819,144820],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144822,144823],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144825,144826],{},"图片格式：",[2992,144828],{"style":127739,"src":144829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144831,136926],{},[2992,144833],{"style":127739,"src":144834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144836,141253],{},[26,144838,144839],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,144840,144841],{"__ignoreMap":31},[36,144842,144843,144845,144847,144849,144851,144853,144855,144857,144859,144861,144863,144865],{"class":38,"line":39},[36,144844,2577],{"class":50},[36,144846,2992],{"class":52631},[36,144848,56570],{"class":46},[36,144850,70],{"class":50},[36,144852,135400],{"class":110},[36,144854,56578],{"class":46},[36,144856,70],{"class":50},[36,144858,135407],{"class":110},[36,144860,135410],{"class":46},[36,144862,70],{"class":50},[36,144864,135415],{"class":110},[36,144866,52638],{"class":50},[19,144868,141342],{},[26,144870,144871],{"className":128630,"code":135385,"language":128632,"meta":31,"style":31},[33,144872,144873],{"__ignoreMap":31},[36,144874,144875,144877,144879,144881,144883,144885,144887,144889,144891,144893,144895,144897],{"class":38,"line":39},[36,144876,2577],{"class":50},[36,144878,2992],{"class":52631},[36,144880,56570],{"class":46},[36,144882,70],{"class":50},[36,144884,135400],{"class":110},[36,144886,56578],{"class":46},[36,144888,70],{"class":50},[36,144890,135407],{"class":110},[36,144892,135410],{"class":46},[36,144894,70],{"class":50},[36,144896,135415],{"class":110},[36,144898,52638],{"class":50},[14,144900,144902],{"id":144901},"_205-flex布局","20.5 flex布局",[2992,144904],{"style":127739,"src":144905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[1645,144907,144909],{"id":144908},"_2051-布局原理","20.5.1 布局原理",[19,144911,144912],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2674,144914,144915,144918,144921,144924,144927],{},[259,144916,144917],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[259,144919,144920],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[259,144922,144923],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[259,144925,144926],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[259,144928,144929],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144931,144932],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144934,144935],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,144937,144939],{"className":127883,"code":144938,"language":127885,"meta":31,"style":31},"\u002F* Flex 弹性布局 *\u002F\n.container {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: center;\n  flex-wrap: wrap;\n}\n",[33,144940,144941,144946,144953,144963,144975,144986,144997,145008],{"__ignoreMap":31},[36,144942,144943],{"class":38,"line":39},[36,144944,144945],{"class":124},"\u002F* Flex 弹性布局 *\u002F\n",[36,144947,144948,144951],{"class":38,"line":54},[36,144949,144950],{"class":46},".container",[36,144952,16901],{"class":50},[36,144954,144955,144957,144959,144961],{"class":38,"line":61},[36,144956,129499],{"class":73},[36,144958,52768],{"class":50},[36,144960,52808],{"class":73},[36,144962,77],{"class":50},[36,144964,144965,144968,144970,144973],{"class":38,"line":80},[36,144966,144967],{"class":73},"  flex-direction",[36,144969,52768],{"class":50},[36,144971,144972],{"class":73},"row",[36,144974,77],{"class":50},[36,144976,144977,144980,144982,144984],{"class":38,"line":96},[36,144978,144979],{"class":73},"  justify-content",[36,144981,52768],{"class":50},[36,144983,52999],{"class":73},[36,144985,77],{"class":50},[36,144987,144988,144991,144993,144995],{"class":38,"line":101},[36,144989,144990],{"class":73},"  align-items",[36,144992,52768],{"class":50},[36,144994,52923],{"class":73},[36,144996,77],{"class":50},[36,144998,144999,145002,145004,145006],{"class":38,"line":128},[36,145000,145001],{"class":73},"  flex-wrap",[36,145003,52768],{"class":50},[36,145005,79941],{"class":73},[36,145007,77],{"class":50},[36,145009,145010],{"class":38,"line":149},[36,145011,250],{"class":50},[19,145013,71784],{},[19,145015,145016],{},".form-item .male-label {",[19,145018,145019],{},"   margin-right: 20px;",[19,145021,145022],{},"   display: inline-flex;",[19,145024,145025],{},"   align-items: center;",[19,145027,2613],{},[2992,145029],{"style":127739,"src":145030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[2992,145032],{"style":127739,"src":145033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[1645,145035,145037],{"id":145036},"_2052-常见父项属性","20.5.2 常见父项属性",[256,145039,145040,145043,145046,145049,145052,145055,145058],{},[259,145041,145042],{},"flex-direction：设置主轴的方向",[259,145044,145045],{},"justify-content：设置主轴上的子元素排列方式",[259,145047,145048],{},"flex-wrap：设置子元素是否换行",[259,145050,145051],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[259,145053,145054],{},"align-items：设置侧轴上的子元素排列方式（单行）",[259,145056,145057],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[259,145059,145042],{},[2992,145061],{"style":127739,"src":145062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[2992,145064],{"style":127739,"src":145065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[256,145067,145068],{"start":54},[259,145069,145045],{},[2992,145071],{"style":127739,"src":145072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145074,145075,145078],{},[33,145076,145077],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145080,145081],{},"跟着主轴走",[256,145083,145084],{"start":61},[259,145085,145048],{},[2992,145087],{"style":127739,"src":145088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145090,145091],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[256,145093,145094],{"start":80},[259,145095,145051],{},[2992,145097],{"style":127739,"src":145098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145100,145101],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145103,145104],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[256,145106,145107],{"start":96},[259,145108,145054],{},[2992,145110],{"style":127739,"src":145111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145113,145114],{},"align-items与align-content之间的区别：",[19,145116,145117],{},"单找items，多找content",[2992,145119],{"style":127739,"src":145120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[256,145122,145123],{"start":101},[259,145124,145057],{},[2992,145126],{"style":127739,"src":145127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[1645,145129,145131],{"id":145130},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[256,145133,145134],{},[259,145135,145136],{},[887,145137,145138],{},"flex 属性",[19,145140,145141],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[2992,145143],{"style":127739,"src":145144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145146,145147],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145149,145150],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[256,145152,145153],{"start":54},[259,145154,145155,15124,145158],{},[887,145156,145157],{},"align-self",[887,145159,145160],{},"控制子项自己在侧轴上的排列方式",[2992,145162],{"style":127739,"src":145163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145165,145166],{},"单个子盒子在父盒子侧轴上的排列方式",[256,145168,145169],{"start":61},[259,145170,145171,145173],{},[887,145172,96628],{}," 属性定义项目的排列顺序",[2992,145175],{"style":127739,"src":145176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[1645,145178,145180],{"id":145179},"_2054-背景线性渐变","20.5.4 背景线性渐变",[2992,145182],{"style":127739,"src":145183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145185,145186],{},"必须要添加浏览器的私有前缀",[1645,145188,145190],{"id":145189},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145192,145193],{},"学到最重要的知识：",[19,145195,145196],{},"flex处理这样的布局思路",[2992,145198],{"style":127739,"src":145199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,145201,145203],{"className":127883,"code":145202,"language":127885,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[33,145204,145205,145211,145221,145231,145241],{"__ignoreMap":31},[36,145206,145207,145209],{"class":38,"line":39},[36,145208,144950],{"class":46},[36,145210,16901],{"class":50},[36,145212,145213,145215,145217,145219],{"class":38,"line":54},[36,145214,129499],{"class":73},[36,145216,52768],{"class":50},[36,145218,52808],{"class":73},[36,145220,77],{"class":50},[36,145222,145223,145225,145227,145229],{"class":38,"line":61},[36,145224,144979],{"class":73},[36,145226,52768],{"class":50},[36,145228,52923],{"class":73},[36,145230,77],{"class":50},[36,145232,145233,145235,145237,145239],{"class":38,"line":80},[36,145234,144990],{"class":73},[36,145236,52768],{"class":50},[36,145238,52923],{"class":73},[36,145240,77],{"class":50},[36,145242,145243],{"class":38,"line":96},[36,145244,250],{"class":50},[19,145246,145247],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145249,145250],{},"使用属性选择器",[2992,145252],{"style":127739,"src":145253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145255,70220],{},[26,145257,145259],{"className":128630,"code":145258,"language":128632,"meta":31,"style":31},"\u003C!-- 携程网移动端案例结构 -->\n\u003Cdiv class=\"container\">\n  \u003C!-- 搜索栏 -->\n  \u003Cdiv class=\"search-index\">...\u003C\u002Fdiv>\n  \u003C!-- 焦点图 -->\n  \u003Cdiv class=\"focus\">...\u003C\u002Fdiv>\n  \u003C!-- 主导航 -->\n  \u003Cdiv class=\"local-nav\">...\u003C\u002Fdiv>\n  \u003C!-- 子导航 -->\n  \u003Cdiv class=\"nav-common\">...\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n",[33,145260,145261,145266,145280,145285,145305,145310,145329,145334,145353,145358,145377],{"__ignoreMap":31},[36,145262,145263],{"class":38,"line":39},[36,145264,145265],{"class":124},"\u003C!-- 携程网移动端案例结构 -->\n",[36,145267,145268,145270,145272,145274,145276,145278],{"class":38,"line":54},[36,145269,2577],{"class":50},[36,145271,52942],{"class":52631},[36,145273,54817],{"class":46},[36,145275,70],{"class":50},[36,145277,93654],{"class":110},[36,145279,52638],{"class":50},[36,145281,145282],{"class":38,"line":61},[36,145283,145284],{"class":124},"  \u003C!-- 搜索栏 -->\n",[36,145286,145287,145289,145291,145293,145295,145298,145301,145303],{"class":38,"line":80},[36,145288,53475],{"class":50},[36,145290,52942],{"class":52631},[36,145292,54817],{"class":46},[36,145294,70],{"class":50},[36,145296,145297],{"class":110},"\"search-index\"",[36,145299,145300],{"class":50},">...\u003C\u002F",[36,145302,52942],{"class":52631},[36,145304,52638],{"class":50},[36,145306,145307],{"class":38,"line":96},[36,145308,145309],{"class":124},"  \u003C!-- 焦点图 -->\n",[36,145311,145312,145314,145316,145318,145320,145323,145325,145327],{"class":38,"line":101},[36,145313,53475],{"class":50},[36,145315,52942],{"class":52631},[36,145317,54817],{"class":46},[36,145319,70],{"class":50},[36,145321,145322],{"class":110},"\"focus\"",[36,145324,145300],{"class":50},[36,145326,52942],{"class":52631},[36,145328,52638],{"class":50},[36,145330,145331],{"class":38,"line":128},[36,145332,145333],{"class":124},"  \u003C!-- 主导航 -->\n",[36,145335,145336,145338,145340,145342,145344,145347,145349,145351],{"class":38,"line":149},[36,145337,53475],{"class":50},[36,145339,52942],{"class":52631},[36,145341,54817],{"class":46},[36,145343,70],{"class":50},[36,145345,145346],{"class":110},"\"local-nav\"",[36,145348,145300],{"class":50},[36,145350,52942],{"class":52631},[36,145352,52638],{"class":50},[36,145354,145355],{"class":38,"line":154},[36,145356,145357],{"class":124},"  \u003C!-- 子导航 -->\n",[36,145359,145360,145362,145364,145366,145368,145371,145373,145375],{"class":38,"line":167},[36,145361,53475],{"class":50},[36,145363,52942],{"class":52631},[36,145365,54817],{"class":46},[36,145367,70],{"class":50},[36,145369,145370],{"class":110},"\"nav-common\"",[36,145372,145300],{"class":50},[36,145374,52942],{"class":52631},[36,145376,52638],{"class":50},[36,145378,145379,145381,145383],{"class":38,"line":172},[36,145380,53116],{"class":50},[36,145382,52942],{"class":52631},[36,145384,52638],{"class":50},[19,145386,71784],{},[26,145388,145389],{"className":127883,"code":138335,"language":127885,"meta":31,"style":31},[33,145390,145391,145405,145421],{"__ignoreMap":31},[36,145392,145393,145395,145397,145399,145401,145403],{"class":38,"line":39},[36,145394,55152],{"class":52631},[36,145396,2557],{"class":50},[36,145398,104438],{"class":46},[36,145400,70],{"class":42},[36,145402,64030],{"class":110},[36,145404,138352],{"class":50},[36,145406,145407,145409,145411,145413,145415,145417,145419],{"class":38,"line":54},[36,145408,72227],{"class":73},[36,145410,52768],{"class":50},[36,145412,1885],{"class":73},[36,145414,52823],{"class":42},[36,145416,52852],{"class":73},[36,145418,131463],{"class":73},[36,145420,77],{"class":50},[36,145422,145423],{"class":38,"line":61},[36,145424,250],{"class":50},[19,145426,145427],{},"总代码和效果展示：",[2992,145429],{"style":127739,"src":145430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145432,70220],{},[26,145434,145435],{"className":128630,"code":145258,"language":128632,"meta":31,"style":31},[33,145436,145437,145441,145455,145459,145477,145481,145499,145503,145521,145525,145543],{"__ignoreMap":31},[36,145438,145439],{"class":38,"line":39},[36,145440,145265],{"class":124},[36,145442,145443,145445,145447,145449,145451,145453],{"class":38,"line":54},[36,145444,2577],{"class":50},[36,145446,52942],{"class":52631},[36,145448,54817],{"class":46},[36,145450,70],{"class":50},[36,145452,93654],{"class":110},[36,145454,52638],{"class":50},[36,145456,145457],{"class":38,"line":61},[36,145458,145284],{"class":124},[36,145460,145461,145463,145465,145467,145469,145471,145473,145475],{"class":38,"line":80},[36,145462,53475],{"class":50},[36,145464,52942],{"class":52631},[36,145466,54817],{"class":46},[36,145468,70],{"class":50},[36,145470,145297],{"class":110},[36,145472,145300],{"class":50},[36,145474,52942],{"class":52631},[36,145476,52638],{"class":50},[36,145478,145479],{"class":38,"line":96},[36,145480,145309],{"class":124},[36,145482,145483,145485,145487,145489,145491,145493,145495,145497],{"class":38,"line":101},[36,145484,53475],{"class":50},[36,145486,52942],{"class":52631},[36,145488,54817],{"class":46},[36,145490,70],{"class":50},[36,145492,145322],{"class":110},[36,145494,145300],{"class":50},[36,145496,52942],{"class":52631},[36,145498,52638],{"class":50},[36,145500,145501],{"class":38,"line":128},[36,145502,145333],{"class":124},[36,145504,145505,145507,145509,145511,145513,145515,145517,145519],{"class":38,"line":149},[36,145506,53475],{"class":50},[36,145508,52942],{"class":52631},[36,145510,54817],{"class":46},[36,145512,70],{"class":50},[36,145514,145346],{"class":110},[36,145516,145300],{"class":50},[36,145518,52942],{"class":52631},[36,145520,52638],{"class":50},[36,145522,145523],{"class":38,"line":154},[36,145524,145357],{"class":124},[36,145526,145527,145529,145531,145533,145535,145537,145539,145541],{"class":38,"line":167},[36,145528,53475],{"class":50},[36,145530,52942],{"class":52631},[36,145532,54817],{"class":46},[36,145534,70],{"class":50},[36,145536,145370],{"class":110},[36,145538,145300],{"class":50},[36,145540,52942],{"class":52631},[36,145542,52638],{"class":50},[36,145544,145545,145547,145549],{"class":38,"line":172},[36,145546,53116],{"class":50},[36,145548,52942],{"class":52631},[36,145550,52638],{"class":50},[19,145552,71784],{},[26,145554,145555],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,145556,145557,145561,145575,145579],{"__ignoreMap":31},[36,145558,145559],{"class":38,"line":39},[36,145560,131994],{"class":124},[36,145562,145563,145565,145567,145569,145571,145573],{"class":38,"line":54},[36,145564,2577],{"class":50},[36,145566,52942],{"class":52631},[36,145568,54817],{"class":46},[36,145570,70],{"class":50},[36,145572,132007],{"class":110},[36,145574,52638],{"class":50},[36,145576,145577],{"class":38,"line":61},[36,145578,132014],{"class":50},[36,145580,145581,145583,145585],{"class":38,"line":80},[36,145582,53116],{"class":50},[36,145584,52942],{"class":52631},[36,145586,52638],{"class":50},[1592,145588,139284],{},{"title":31,"searchDepth":54,"depth":54,"links":145590},[145591,145592,145596,145597,145598],{"id":144735,"depth":54,"text":144736},{"id":144767,"depth":54,"text":144768,"children":145593},[145594,145595],{"id":144771,"depth":61,"text":144772},{"id":144788,"depth":61,"text":144789},{"id":144807,"depth":54,"text":144808},{"id":144814,"depth":54,"text":144815},{"id":144901,"depth":54,"text":144902,"children":145599},[145600,145601,145602,145603,145604],{"id":144908,"depth":61,"text":144909},{"id":145036,"depth":61,"text":145037},{"id":145130,"depth":61,"text":145131},{"id":145179,"depth":61,"text":145180},{"id":145189,"depth":61,"text":145190},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144727,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145611,"title":145612,"body":145613,"description":24706,"extension":1603,"meta":146840,"navigation":57,"path":146841,"seo":146842,"stem":146843,"__hash__":146844},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145614,"toc":146818},[145615,145618,145622,145626,145629,145632,145636,145641,145644,145647,145650,145653,145656,145713,145716,145721,145724,145727,145731,145742,145746,145749,145752,145759,145764,145768,145771,145777,145780,145784,145787,145794,145797,145800,145807,145810,145817,145820,145823,145830,145833,145836,145838,145855,145859,145862,145865,145868,145872,145875,145878,145881,145884,145887,145890,145892,145895,145898,145960,145963,146073,146080,146086,146089,146092,146096,146099,146103,146108,146111,146118,146121,146127,146132,146135,146138,146141,146144,146147,146150,146153,146156,146212,146214,146240,146244,146247,146250,146253,146261,146264,146267,146271,146327,146330,146334,146340,146351,146354,146359,146362,146365,146371,146374,146377,146380,146383,146386,146389,146392,146395,146420,146426,146429,146432,146435,146438,146441,146444,146449,146452,146455,146458,146466,146469,146476,146479,146482,146484,146508,146510,146513,146516,146519,146522,146525,146528,146531,146565,146568,146571,146605,146612,146615,146618,146621,146624,146627,146630,146637,146640,146643,146646,146649,146656,146659,146662,146669,146672,146675,146679,146682,146685,146688,146691,146694,146697,146700,146703,146705,146729,146731,146755,146759,146770,146773,146776,146779,146782,146785,146788,146791,146794,146797,146800,146803,146806,146809,146812,146815],[10,145616,145612],{"id":145617},"_21-移动端布局实战下篇",[14,145619,145621],{"id":145620},"_211-rem适配布局","21.1 rem适配布局",[1645,145623,145625],{"id":145624},"_2111-rem单位","21.1.1 rem单位",[2992,145627],{"style":127739,"src":145628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145630,145631],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[1645,145633,145635],{"id":145634},"_2112-媒体查询","21.1.2 媒体查询",[256,145637,145638],{},[259,145639,145640],{},"参数介绍",[2992,145642],{"style":127739,"src":145643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[2992,145645],{"style":127739,"src":145646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[2992,145648],{"style":127739,"src":145649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[2992,145651],{"style":127739,"src":145652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[2992,145654],{"style":127739,"src":145655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,145657,145659],{"className":127883,"code":145658,"language":127885,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[33,145660,145661,145666,145685,145692,145705,145709],{"__ignoreMap":31},[36,145662,145663],{"class":38,"line":39},[36,145664,145665],{"class":124},"\u002F* 媒体查询 *\u002F\n",[36,145667,145668,145671,145673,145676,145678,145681,145683],{"class":38,"line":54},[36,145669,145670],{"class":42},"@media",[36,145672,3180],{"class":50},[36,145674,145675],{"class":73},"max-width",[36,145677,52768],{"class":50},[36,145679,145680],{"class":73},"768",[36,145682,52823],{"class":42},[36,145684,485],{"class":50},[36,145686,145687,145690],{"class":38,"line":61},[36,145688,145689],{"class":46},"  .container",[36,145691,16901],{"class":50},[36,145693,145694,145697,145699,145701,145703],{"class":38,"line":80},[36,145695,145696],{"class":73},"    width",[36,145698,52768],{"class":50},[36,145700,1979],{"class":73},[36,145702,1996],{"class":42},[36,145704,77],{"class":50},[36,145706,145707],{"class":38,"line":96},[36,145708,128679],{"class":50},[36,145710,145711],{"class":38,"line":101},[36,145712,250],{"class":50},[19,145714,145715],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[256,145717,145718],{"start":54},[259,145719,145720],{},"引入资源",[2992,145722],{"style":127739,"src":145723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145725,145726],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[1645,145728,145730],{"id":145729},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2674,145732,145733,145736,145739],{},[259,145734,145735],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[259,145737,145738],{},"媒体查询可以根据不同设备宽度来修改样式",[259,145740,145741],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145743,145745],{"id":145744},"_212-less基础","21.2 Less基础",[19,145747,145748],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145750,145751],{},"Less可以解决该问题，它是css的扩展语言",[19,145753,145754,145755],{},"Less中文网址： ",[1906,145756,145757],{"href":145757,"rel":145758},"http:\u002F\u002Flesscss.cn\u002F",[25195],[19,145760,145761],{},[887,145762,145763],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[1645,145765,145767],{"id":145766},"_2121-less安装","21.2.1 less安装",[19,145769,145770],{},"如果使用vscode，则无需进行下方安装步骤",[19,145772,145773],{},[1906,145774,145775],{"href":145775,"rel":145776},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25195],[2992,145778],{"style":127739,"src":145779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[1645,145781,145783],{"id":145782},"_2122-less使用","21.2.2 less使用",[19,145785,145786],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[256,145788,145789],{},[259,145790,145791],{},[887,145792,145793],{},"Less 变量",[2992,145795],{"style":127739,"src":145796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[2992,145798],{"style":127739,"src":145799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[256,145801,145802],{"start":54},[259,145803,145804],{},[887,145805,145806],{},"Less 编译",[2992,145808],{"style":127739,"src":145809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[256,145811,145812],{"start":61},[259,145813,145814],{},[887,145815,145816],{},"Less 嵌套",[2992,145818],{"style":127739,"src":145819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[2992,145821],{"style":127739,"src":145822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[256,145824,145825],{"start":80},[259,145826,145827],{},[887,145828,145829],{},"Less 运算",[2992,145831],{"style":127739,"src":145832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145834,145835],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145837,1703],{},[2674,145839,145840,145843,145846,145849,145852],{},[259,145841,145842],{},"乘号（*）和除号（\u002F）的写法",[259,145844,145845],{},"运算符中间左右有个空格隔开 1px + 5",[259,145847,145848],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[259,145850,145851],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[259,145853,145854],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145856,145858],{"id":145857},"_213-rem-适配方案","21.3 rem 适配方案",[19,145860,145861],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145863,145864],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[2992,145866],{"style":127739,"src":145867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[1645,145869,145871],{"id":145870},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145873,145874],{},"rem + 媒体查询 + less 技术",[2992,145876],{"style":127739,"src":145877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145879,145880],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145882,145883],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[2992,145885],{"style":127739,"src":145886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145888,145889],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145891,15962],{},[2992,145893],{"style":127739,"src":145894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145896,145897],{},"index.html:",[26,145899,145901],{"className":127883,"code":145900,"language":127885,"meta":31,"style":31},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,145902,145903,145908,145914,145930,145934,145940,145956],{"__ignoreMap":31},[36,145904,145905],{"class":38,"line":39},[36,145906,145907],{"class":124},"\u002F* rem 适配方案 *\u002F\n",[36,145909,145910,145912],{"class":38,"line":54},[36,145911,51966],{"class":52631},[36,145913,16901],{"class":50},[36,145915,145916,145918,145920,145923,145925,145927],{"class":38,"line":61},[36,145917,71957],{"class":73},[36,145919,52768],{"class":50},[36,145921,145922],{"class":73},"62.5",[36,145924,1996],{"class":42},[36,145926,131746],{"class":50},[36,145928,145929],{"class":124},"\u002F* 1rem = 10px *\u002F\n",[36,145931,145932],{"class":38,"line":80},[36,145933,250],{"class":50},[36,145935,145936,145938],{"class":38,"line":96},[36,145937,131731],{"class":46},[36,145939,16901],{"class":50},[36,145941,145942,145944,145946,145948,145951,145953],{"class":38,"line":101},[36,145943,71899],{"class":73},[36,145945,52768],{"class":50},[36,145947,2113],{"class":73},[36,145949,145950],{"class":42},"rem",[36,145952,131746],{"class":50},[36,145954,145955],{"class":124},"\u002F* 100px *\u002F\n",[36,145957,145958],{"class":38,"line":128},[36,145959,250],{"class":50},[19,145961,145962],{},"common.less",[26,145964,145966],{"className":127883,"code":145965,"language":127885,"meta":31,"style":31},"html {\n  font-size: 62.5%; \u002F* 10px *\u002F\n}\ndiv {\n  width: 10rem; \u002F* 100px *\u002F\n}\n```Css\n\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,145967,145968,145974,145989,145993,145999,146013,146017,146021,146025,146031,146045,146049,146055,146069],{"__ignoreMap":31},[36,145969,145970,145972],{"class":38,"line":39},[36,145971,51966],{"class":52631},[36,145973,16901],{"class":50},[36,145975,145976,145978,145980,145982,145984,145986],{"class":38,"line":54},[36,145977,71957],{"class":73},[36,145979,52768],{"class":50},[36,145981,145922],{"class":73},[36,145983,1996],{"class":42},[36,145985,27398],{"class":50},[36,145987,145988],{"class":124},"\u002F* 10px *\u002F\n",[36,145990,145991],{"class":38,"line":61},[36,145992,250],{"class":50},[36,145994,145995,145997],{"class":38,"line":80},[36,145996,52942],{"class":52631},[36,145998,16901],{"class":50},[36,146000,146001,146003,146005,146007,146009,146011],{"class":38,"line":96},[36,146002,71899],{"class":73},[36,146004,52768],{"class":50},[36,146006,2113],{"class":73},[36,146008,145950],{"class":42},[36,146010,27398],{"class":50},[36,146012,145955],{"class":124},[36,146014,146015],{"class":38,"line":101},[36,146016,250],{"class":50},[36,146018,146019],{"class":38,"line":128},[36,146020,137344],{"class":50},[36,146022,146023],{"class":38,"line":149},[36,146024,145907],{"class":124},[36,146026,146027,146029],{"class":38,"line":154},[36,146028,51966],{"class":52631},[36,146030,16901],{"class":50},[36,146032,146033,146035,146037,146039,146041,146043],{"class":38,"line":167},[36,146034,71957],{"class":73},[36,146036,52768],{"class":50},[36,146038,145922],{"class":73},[36,146040,1996],{"class":42},[36,146042,131746],{"class":50},[36,146044,145929],{"class":124},[36,146046,146047],{"class":38,"line":172},[36,146048,250],{"class":50},[36,146050,146051,146053],{"class":38,"line":192},[36,146052,131731],{"class":46},[36,146054,16901],{"class":50},[36,146056,146057,146059,146061,146063,146065,146067],{"class":38,"line":211},[36,146058,71899],{"class":73},[36,146060,52768],{"class":50},[36,146062,2113],{"class":73},[36,146064,145950],{"class":42},[36,146066,131746],{"class":50},[36,146068,145955],{"class":124},[36,146070,146071],{"class":38,"line":216},[36,146072,250],{"class":50},[19,146074,146075,146076,146079],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24883,146077,146078],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,146081,146084],{"className":146082,"code":146083,"language":6676},[6674],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[33,146085,146083],{"__ignoreMap":31},[19,146087,146088],{},"less保存时会自动变成.css文件",[19,146090,146091],{},"好好搞懂上述代码写法",[1645,146093,146095],{"id":146094},"_2132-样式导入样式","21.3.2 样式导入样式",[2992,146097],{"style":127739,"src":146098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[1645,146100,146102],{"id":146101},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[256,146104,146105],{},[259,146106,146107],{},"准备工作",[2992,146109],{"style":127739,"src":146110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146112,146113,146114],{},"github地址：",[1906,146115,146116],{"href":146116,"rel":146117},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25195],[19,146119,146120],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146122,146123,146124],{},"js文件引入到index.html中使用的是",[33,146125,146126],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[256,146128,146129],{"start":54},[259,146130,146131],{},"vscode插件",[2992,146133],{"style":127739,"src":146134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146136,146137],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146139,146140],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[2992,146142],{"style":127739,"src":146143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146145,146146],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[2992,146148],{"style":127739,"src":146149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146151,146152],{},"修改成75就可以，alt+z为快捷键",[19,146154,146155],{},"index.css：",[26,146157,146158],{"className":127883,"code":145900,"language":127885,"meta":31,"style":31},[33,146159,146160,146164,146170,146184,146188,146194,146208],{"__ignoreMap":31},[36,146161,146162],{"class":38,"line":39},[36,146163,145907],{"class":124},[36,146165,146166,146168],{"class":38,"line":54},[36,146167,51966],{"class":52631},[36,146169,16901],{"class":50},[36,146171,146172,146174,146176,146178,146180,146182],{"class":38,"line":61},[36,146173,71957],{"class":73},[36,146175,52768],{"class":50},[36,146177,145922],{"class":73},[36,146179,1996],{"class":42},[36,146181,131746],{"class":50},[36,146183,145929],{"class":124},[36,146185,146186],{"class":38,"line":80},[36,146187,250],{"class":50},[36,146189,146190,146192],{"class":38,"line":96},[36,146191,131731],{"class":46},[36,146193,16901],{"class":50},[36,146195,146196,146198,146200,146202,146204,146206],{"class":38,"line":101},[36,146197,71899],{"class":73},[36,146199,52768],{"class":50},[36,146201,2113],{"class":73},[36,146203,145950],{"class":42},[36,146205,131746],{"class":50},[36,146207,145955],{"class":124},[36,146209,146210],{"class":38,"line":128},[36,146211,250],{"class":50},[19,146213,145897],{},[26,146215,146216],{"className":127883,"code":128287,"language":127885,"meta":31,"style":31},[33,146217,146218,146224,146236],{"__ignoreMap":31},[36,146219,146220,146222],{"class":38,"line":39},[36,146221,53131],{"class":52631},[36,146223,16901],{"class":50},[36,146225,146226,146228,146230,146232,146234],{"class":38,"line":54},[36,146227,71957],{"class":73},[36,146229,52768],{"class":50},[36,146231,2268],{"class":73},[36,146233,52823],{"class":42},[36,146235,77],{"class":50},[36,146237,146238],{"class":38,"line":61},[36,146239,250],{"class":50},[14,146241,146243],{"id":146242},"_214-响应式开发","21.4 响应式开发",[19,146245,146246],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[2992,146248],{"style":127739,"src":146249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146251,146252],{},"做法：",[2674,146254,146255,146258],{},[259,146256,146257],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[259,146259,146260],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[2992,146262],{"style":127739,"src":146263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146265,146266],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[1645,146268,146270],{"id":146269},"_2141-简单代码示范","21.4.1 简单代码示范",[26,146272,146273],{"className":127883,"code":145900,"language":127885,"meta":31,"style":31},[33,146274,146275,146279,146285,146299,146303,146309,146323],{"__ignoreMap":31},[36,146276,146277],{"class":38,"line":39},[36,146278,145907],{"class":124},[36,146280,146281,146283],{"class":38,"line":54},[36,146282,51966],{"class":52631},[36,146284,16901],{"class":50},[36,146286,146287,146289,146291,146293,146295,146297],{"class":38,"line":61},[36,146288,71957],{"class":73},[36,146290,52768],{"class":50},[36,146292,145922],{"class":73},[36,146294,1996],{"class":42},[36,146296,131746],{"class":50},[36,146298,145929],{"class":124},[36,146300,146301],{"class":38,"line":80},[36,146302,250],{"class":50},[36,146304,146305,146307],{"class":38,"line":96},[36,146306,131731],{"class":46},[36,146308,16901],{"class":50},[36,146310,146311,146313,146315,146317,146319,146321],{"class":38,"line":101},[36,146312,71899],{"class":73},[36,146314,52768],{"class":50},[36,146316,2113],{"class":73},[36,146318,145950],{"class":42},[36,146320,131746],{"class":50},[36,146322,145955],{"class":124},[36,146324,146325],{"class":38,"line":128},[36,146326,250],{"class":50},[19,146328,146329],{},"父盒子一般命名为container",[1645,146331,146333],{"id":146332},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146335,146336,146337],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[887,146338,146339],{},"使得 Web 开发更加快捷",[2674,146341,146342],{},[259,146343,146344,146345],{},"官网：",[887,146346,146347],{},[1906,146348,146349],{"href":146349,"rel":146350},"http:\u002F\u002Fgetbootstrap.com\u002F",[25195],[19,146352,146353],{},"可以直接去官网拿现成的东西",[256,146355,146356],{},[259,146357,146358],{},"Bootstrap的使用",[19,146360,146361],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146363,146364],{},"Bootstrap 使用四步曲：",[19,146366,146367,146370],{},[887,146368,146369],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[2992,146372],{"style":127739,"src":146373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146375,146376],{},"打开Bootstrap官网，然后下载",[2992,146378],{"style":127739,"src":146379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[2992,146381],{"style":127739,"src":146382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146384,146385],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146387,146388],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146390,146391],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[2992,146393],{"style":127739,"src":146394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,146396,146398],{"className":127883,"code":146397,"language":127885,"meta":31,"style":31},".center {\n  color: red;\n}\n",[33,146399,146400,146406,146416],{"__ignoreMap":31},[36,146401,146402,146404],{"class":38,"line":39},[36,146403,128174],{"class":46},[36,146405,16901],{"class":50},[36,146407,146408,146410,146412,146414],{"class":38,"line":54},[36,146409,72236],{"class":73},[36,146411,52768],{"class":50},[36,146413,58752],{"class":73},[36,146415,77],{"class":50},[36,146417,146418],{"class":38,"line":61},[36,146419,250],{"class":50},[19,146421,146422,146425],{},[33,146423,146424],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[2992,146427],{"style":127739,"src":146428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[2992,146430],{"style":127739,"src":146431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[2992,146433],{"style":127739,"src":146434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146436,146437],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[2992,146439],{"style":127739,"src":146440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146442,146443],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[256,146445,146446],{"start":54},[259,146447,146448],{},"布局容器",[2992,146450],{"style":127739,"src":146451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146453,146454],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146456,146457],{},"container-fluid用于移动式布局比较方便",[256,146459,146460],{"start":61},[259,146461,146462,146463],{},"bootstrap ",[887,146464,146465],{},"栅格系统原理",[2992,146467],{"style":127739,"src":146468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[256,146470,146471],{"start":80},[259,146472,146473],{},[887,146474,146475],{},"栅格选项参数",[2992,146477],{"style":127739,"src":146478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146480,146481],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146483,15962],{},[26,146485,146486],{"className":127883,"code":146397,"language":127885,"meta":31,"style":31},[33,146487,146488,146494,146504],{"__ignoreMap":31},[36,146489,146490,146492],{"class":38,"line":39},[36,146491,128174],{"class":46},[36,146493,16901],{"class":50},[36,146495,146496,146498,146500,146502],{"class":38,"line":54},[36,146497,72236],{"class":73},[36,146499,52768],{"class":50},[36,146501,58752],{"class":73},[36,146503,77],{"class":50},[36,146505,146506],{"class":38,"line":61},[36,146507,250],{"class":50},[19,146509,136926],{},[2992,146511],{"style":127739,"src":146512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146514,146515],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146517,146518],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146520,146521],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146523,146524],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146526,146527],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146529,146530],{},"汇总展示说明：",[26,146532,146533],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,146534,146535,146539,146553,146557],{"__ignoreMap":31},[36,146536,146537],{"class":38,"line":39},[36,146538,131994],{"class":124},[36,146540,146541,146543,146545,146547,146549,146551],{"class":38,"line":54},[36,146542,2577],{"class":50},[36,146544,52942],{"class":52631},[36,146546,54817],{"class":46},[36,146548,70],{"class":50},[36,146550,132007],{"class":110},[36,146552,52638],{"class":50},[36,146554,146555],{"class":38,"line":61},[36,146556,132014],{"class":50},[36,146558,146559,146561,146563],{"class":38,"line":80},[36,146560,53116],{"class":50},[36,146562,52942],{"class":52631},[36,146564,52638],{"class":50},[2992,146566],{"style":127739,"src":146567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146569,146570],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,146572,146573],{"className":128630,"code":131987,"language":128632,"meta":31,"style":31},[33,146574,146575,146579,146593,146597],{"__ignoreMap":31},[36,146576,146577],{"class":38,"line":39},[36,146578,131994],{"class":124},[36,146580,146581,146583,146585,146587,146589,146591],{"class":38,"line":54},[36,146582,2577],{"class":50},[36,146584,52942],{"class":52631},[36,146586,54817],{"class":46},[36,146588,70],{"class":50},[36,146590,132007],{"class":110},[36,146592,52638],{"class":50},[36,146594,146595],{"class":38,"line":61},[36,146596,132014],{"class":50},[36,146598,146599,146601,146603],{"class":38,"line":80},[36,146600,53116],{"class":50},[36,146602,52942],{"class":52631},[36,146604,52638],{"class":50},[256,146606,146607],{"start":96},[259,146608,146609],{},[887,146610,146611],{},"列嵌套",[2992,146613],{"style":127739,"src":146614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146616,146617],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146619,146620],{},"没加row内部这样：",[2992,146622],{"style":127739,"src":146623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146625,146626],{},"加上row之后内部为：",[2992,146628],{"style":127739,"src":146629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[256,146631,146632],{"start":101},[259,146633,146634],{},[887,146635,146636],{},"列偏移",[2992,146638],{"style":127739,"src":146639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146641,146642],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146644,146645],{},"要加偏移量，即偏移份数",[19,146647,146648],{},"偏移的份数=12-两个盒子的份数",[256,146650,146651],{"start":128},[259,146652,146653],{},[887,146654,146655],{},"列排序",[2992,146657],{"style":127739,"src":146658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146660,146661],{},"pull拉左；push推右",[256,146663,146664],{"start":149},[259,146665,146666],{},[887,146667,146668],{},"响应式工具",[2992,146670],{"style":127739,"src":146671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146673,146674],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[1645,146676,146678],{"id":146677},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146680,146681],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146683,146684],{},"ul {",[19,146686,146687],{},"list-style: none;",[19,146689,146690],{},"margin:0;",[19,146692,146693],{},"padding:0; }",[2992,146695],{"style":127739,"src":146696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[2992,146698],{"style":127739,"src":146699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146701,146702],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146704,70220],{},[26,146706,146707],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,146708,146709,146715,146725],{"__ignoreMap":31},[36,146710,146711,146713],{"class":38,"line":39},[36,146712,131731],{"class":46},[36,146714,16901],{"class":50},[36,146716,146717,146719,146721,146723],{"class":38,"line":54},[36,146718,132363],{"class":73},[36,146720,52768],{"class":50},[36,146722,25066],{"class":73},[36,146724,77],{"class":50},[36,146726,146727],{"class":38,"line":61},[36,146728,250],{"class":50},[19,146730,71784],{},[26,146732,146733],{"className":127883,"code":140553,"language":127885,"meta":31,"style":31},[33,146734,146735,146741,146751],{"__ignoreMap":31},[36,146736,146737,146739],{"class":38,"line":39},[36,146738,131731],{"class":46},[36,146740,16901],{"class":50},[36,146742,146743,146745,146747,146749],{"class":38,"line":54},[36,146744,132363],{"class":73},[36,146746,52768],{"class":50},[36,146748,25066],{"class":73},[36,146750,77],{"class":50},[36,146752,146753],{"class":38,"line":61},[36,146754,250],{"class":50},[14,146756,146758],{"id":146757},"_215-swiper-插件使用","21.5 swiper 插件使用",[2674,146760,146761,146764,146767],{},[259,146762,146763],{},"下载需要的css和js文件html页面中 引入相关文件",[259,146765,146766],{},"官网找到类似案例，复制html结构，css样式 js 语法",[259,146768,146769],{},"根据需求定制修改模块",[2992,146771],{"style":127739,"src":146772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146774,146775],{},"解压后将这两部分放到项目中",[2992,146777],{"style":127739,"src":146778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146780,146781],{},"这个插件可以帮助我们实现轮播图效果",[19,146783,146784],{},"用法：",[2992,146786],{"style":127739,"src":146787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146789,146790],{},"找到自己喜欢的",[2992,146792],{"style":127739,"src":146793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146795,146796],{},"右键，查看网页源代码",[2992,146798],{"style":127739,"src":146799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146801,146802],{},"复制人家的结构内容",[19,146804,146805],{},"然后去看API文档：",[2992,146807],{"style":127739,"src":146808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146810,146811],{},"可以看看如何修改样式",[19,146813,146814],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1592,146816,146817],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":146819},[146820,146825,146829,146834,146839],{"id":145620,"depth":54,"text":145621,"children":146821},[146822,146823,146824],{"id":145624,"depth":61,"text":145625},{"id":145634,"depth":61,"text":145635},{"id":145729,"depth":61,"text":145730},{"id":145744,"depth":54,"text":145745,"children":146826},[146827,146828],{"id":145766,"depth":61,"text":145767},{"id":145782,"depth":61,"text":145783},{"id":145857,"depth":54,"text":145858,"children":146830},[146831,146832,146833],{"id":145870,"depth":61,"text":145871},{"id":146094,"depth":61,"text":146095},{"id":146101,"depth":61,"text":146102},{"id":146242,"depth":54,"text":146243,"children":146835},[146836,146837,146838],{"id":146269,"depth":61,"text":146270},{"id":146332,"depth":61,"text":146333},{"id":146677,"depth":61,"text":146678},{"id":146757,"depth":54,"text":146758},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145612,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146846,"title":146847,"body":146848,"description":24706,"extension":1603,"meta":147068,"navigation":57,"path":147069,"seo":147070,"stem":147071,"__hash__":147072},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146849,"toc":147064},[146850,146853,146857,146860,146875,146880,146883,146888,146923,146928,146940,146945,146958,146963,146980,146985,147005,147010,147028,147031,147034,147037,147040,147044,147047,147050,147053,147056,147059,147062],[10,146851,146847],{"id":146852},"_22-代码提交与新型相对单位",[14,146854,146856],{"id":146855},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146858,146859],{},"法1：",[256,146861,146862,146869,146872],{},[259,146863,146864,146865],{},"登录网站注册：",[1906,146866,146867],{"href":146867,"rel":146868},"https:\u002F\u002Fgitee.com\u002F",[25195],[259,146870,146871],{},"码云创建新的仓库",[259,146873,146874],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2674,146876,146877],{},[259,146878,146879],{},"在网站根目录右键-- Git Bash Here",[2992,146881],{"style":127739,"src":146882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2674,146884,146885],{},[259,146886,146887],{},"如果是第一次利用git提交，请配置好全局选项",[26,146889,146891],{"className":118627,"code":146890,"language":118629,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[33,146892,146893,146909],{"__ignoreMap":31},[36,146894,146895,146898,146900,146903,146906],{"class":38,"line":39},[36,146896,146897],{"class":46},"git",[36,146899,121050],{"class":110},[36,146901,146902],{"class":73}," --global",[36,146904,146905],{"class":110}," user.name",[36,146907,146908],{"class":110}," \"你的名字\"\n",[36,146910,146911,146913,146915,146917,146920],{"class":38,"line":54},[36,146912,146897],{"class":46},[36,146914,121050],{"class":110},[36,146916,146902],{"class":73},[36,146918,146919],{"class":110}," user.email",[36,146921,146922],{"class":110}," \"你的邮箱\"\n",[2674,146924,146925],{},[259,146926,146927],{},"初始化仓库",[26,146929,146931],{"className":118627,"code":146930,"language":118629,"meta":31,"style":31},"git init\n",[33,146932,146933],{"__ignoreMap":31},[36,146934,146935,146937],{"class":38,"line":39},[36,146936,146897],{"class":46},[36,146938,146939],{"class":110}," init\n",[2674,146941,146942],{},[259,146943,146944],{},"把本地文件放到暂存区",[26,146946,146948],{"className":118627,"code":146947,"language":118629,"meta":31,"style":31},"git add .\n",[33,146949,146950],{"__ignoreMap":31},[36,146951,146952,146954,146956],{"class":38,"line":39},[36,146953,146897],{"class":46},[36,146955,6698],{"class":110},[36,146957,30072],{"class":110},[2674,146959,146960],{},[259,146961,146962],{},"把本地文件放到本地仓库里面",[26,146964,146966],{"className":118627,"code":146965,"language":118629,"meta":31,"style":31},"git commit -m \"first commit\"\n",[33,146967,146968],{"__ignoreMap":31},[36,146969,146970,146972,146975,146977],{"class":38,"line":39},[36,146971,146897],{"class":46},[36,146973,146974],{"class":110}," commit",[36,146976,102213],{"class":73},[36,146978,146979],{"class":110}," \"first commit\"\n",[2674,146981,146982],{},[259,146983,146984],{},"链接远程仓库",[26,146986,146988],{"className":118627,"code":146987,"language":118629,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[33,146989,146990],{"__ignoreMap":31},[36,146991,146992,146994,146997,146999,147002],{"class":38,"line":39},[36,146993,146897],{"class":46},[36,146995,146996],{"class":110}," remote",[36,146998,6698],{"class":110},[36,147000,147001],{"class":110}," origin",[36,147003,147004],{"class":110}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2674,147006,147007],{},[259,147008,147009],{},"把本地仓库的文件推送到远程仓库 push",[26,147011,147013],{"className":118627,"code":147012,"language":118629,"meta":31,"style":31},"git push -u origin master\n",[33,147014,147015],{"__ignoreMap":31},[36,147016,147017,147019,147021,147023,147025],{"class":38,"line":39},[36,147018,146897],{"class":46},[36,147020,30347],{"class":110},[36,147022,29621],{"class":73},[36,147024,147001],{"class":110},[36,147026,147027],{"class":110}," master\n",[2992,147029],{"style":127739,"src":147030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147032,147033],{},"上方方法暂未实现，后边学完git后在整",[19,147035,147036],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[2992,147038],{"style":127739,"src":147039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147041,147043],{"id":147042},"_222-新型相对单位","22.2 新型相对单位",[2992,147045],{"style":127739,"src":147046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[2992,147048],{"style":127739,"src":147049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147051,147052],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147054,147055],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[2992,147057],{"style":127739,"src":147058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147060,147061],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1592,147063,25288],{},{"title":31,"searchDepth":54,"depth":54,"links":147065},[147066,147067],{"id":146855,"depth":54,"text":146856},{"id":147042,"depth":54,"text":147043},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146847,"description":24706},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147074,"title":147075,"body":147076,"description":147080,"extension":1603,"meta":147081,"navigation":57,"path":147082,"seo":147083,"stem":147084,"__hash__":147085},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147077,"toc":147078},[],{"title":31,"searchDepth":54,"depth":54,"links":147079},[],"自己正经开始学编程的第一门语言！",{"category":94170},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147075,"description":147080},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147087,"title":147088,"body":147089,"description":24706,"extension":1603,"meta":148236,"navigation":57,"path":148237,"seo":148238,"stem":148239,"__hash__":148240},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147090,"toc":148212},[147091,147094,147098,147101,147104,147129,147132,147138,147142,147145,147172,147175,147215,147218,147230,147233,147239,147243,147247,147274,147291,147298,147302,147305,147331,147334,147338,147341,147381,147384,147401,147407,147411,147416,147460,147463,147481,147484,147552,147556,147563,147566,147581,147584,147593,147596,147607,147610,147619,147622,147639,147642,147657,147661,147665,147668,147670,147690,147694,147697,147700,147711,147714,147720,147724,147730,147757,147760,147772,147775,147786,147789,147795,147799,147805,147855,147858,147900,147903,147936,147939,147973,147977,147980,148000,148003,148039,148042,148055,148059,148063,148069,148072,148085,148089,148092,148098,148101,148105,148108,148111,148160,148164,148180,148186,148193,148199,148209],[10,147092,147088],{"id":147093},"_1-python环境与第一个程序",[14,147095,147097],{"id":147096},"_11-什么是python","1.1 什么是Python",[19,147099,147100],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147102,147103],{},"理解 Python 时抓住三个关键词：",[256,147105,147106,147109,147112],{},[259,147107,147108],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[259,147110,147111],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[259,147113,147114,147115,1880,147118,1880,147121,1880,147124,1880,147126,29716],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[33,147116,147117],{},"os",[33,147119,147120],{},"sys",[33,147122,147123],{},"json",[33,147125,59191],{},[33,147127,147128],{},"datetime",[19,147130,147131],{},"Python 程序的运行链路：",[26,147133,147136],{"className":147134,"code":147135,"language":6676,"meta":31},[6674],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[33,147137,147135],{"__ignoreMap":31},[14,147139,147141],{"id":147140},"_12-python解释器","1.2 Python解释器",[19,147143,147144],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,147146,147148],{"className":25152,"code":147147,"language":25154,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[33,147149,147150,147156,147162,147167],{"__ignoreMap":31},[36,147151,147152,147154],{"class":38,"line":39},[36,147153,31711],{"class":46},[36,147155,27624],{"class":73},[36,147157,147158,147160],{"class":38,"line":54},[36,147159,102210],{"class":46},[36,147161,27624],{"class":73},[36,147163,147164],{"class":38,"line":61},[36,147165,147166],{"class":46},"python\n",[36,147168,147169],{"class":38,"line":80},[36,147170,147171],{"class":46},"python3\n",[19,147173,147174],{},"进入交互模式后，可以直接输入表达式：",[26,147176,147178],{"className":31709,"code":147177,"language":31711,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[33,147179,147180,147191,147196,147210],{"__ignoreMap":31},[36,147181,147182,147185,147187,147189],{"class":38,"line":39},[36,147183,147184],{"class":42},">>>",[36,147186,26449],{"class":73},[36,147188,46897],{"class":42},[36,147190,49054],{"class":73},[36,147192,147193],{"class":38,"line":54},[36,147194,147195],{"class":73},"3\n",[36,147197,147198,147200,147203,147205,147208],{"class":38,"line":61},[36,147199,147184],{"class":42},[36,147201,147202],{"class":73}," print",[36,147204,222],{"class":50},[36,147206,147207],{"class":110},"\"hello python\"",[36,147209,1680],{"class":50},[36,147211,147212],{"class":38,"line":80},[36,147213,147214],{"class":50},"hello python\n",[19,147216,147217],{},"退出交互模式：",[26,147219,147221],{"className":31709,"code":147220,"language":31711,"meta":31,"style":31},"exit()\n",[33,147222,147223],{"__ignoreMap":31},[36,147224,147225,147228],{"class":38,"line":39},[36,147226,147227],{"class":73},"exit",[36,147229,3484],{"class":50},[19,147231,147232],{},"或使用快捷键：",[26,147234,147237],{"className":147235,"code":147236,"language":6676,"meta":31},[6674],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[33,147238,147236],{"__ignoreMap":31},[14,147240,147242],{"id":147241},"_13-安装python","1.3 安装Python",[1645,147244,147246],{"id":147245},"_131-windows安装","1.3.1 Windows安装",[256,147248,147249,147256,147259,147265,147271],{},[259,147250,147251,147252],{},"打开 Python 官网：",[1906,147253,147254],{"href":147254,"rel":147255},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25195],[259,147257,147258],{},"下载 Windows Installer。",[259,147260,147261,147262,29716],{},"安装时勾选 ",[33,147263,147264],{},"Add Python to PATH",[259,147266,147267,147268,29716],{},"点击 ",[33,147269,147270],{},"Install Now",[259,147272,147273],{},"安装完成后打开命令提示符验证：",[26,147275,147277],{"className":25152,"code":147276,"language":25154,"meta":31,"style":31},"python --version\npip --version\n",[33,147278,147279,147285],{"__ignoreMap":31},[36,147280,147281,147283],{"class":38,"line":39},[36,147282,31711],{"class":46},[36,147284,27624],{"class":73},[36,147286,147287,147289],{"class":38,"line":54},[36,147288,25161],{"class":46},[36,147290,27624],{"class":73},[19,147292,147293,147294,147297],{},"如果提示 ",[33,147295,147296],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[1645,147299,147301],{"id":147300},"_132-macos安装","1.3.2 macOS安装",[19,147303,147304],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,147306,147308],{"className":25152,"code":147307,"language":25154,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[33,147309,147310,147319,147325],{"__ignoreMap":31},[36,147311,147312,147315,147317],{"class":38,"line":39},[36,147313,147314],{"class":46},"brew",[36,147316,25164],{"class":110},[36,147318,125649],{"class":110},[36,147320,147321,147323],{"class":38,"line":54},[36,147322,102210],{"class":46},[36,147324,27624],{"class":73},[36,147326,147327,147329],{"class":38,"line":61},[36,147328,121031],{"class":46},[36,147330,27624],{"class":73},[19,147332,147333],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[1645,147335,147337],{"id":147336},"_133-linux安装","1.3.3 Linux安装",[19,147339,147340],{},"Ubuntu\u002FDebian：",[26,147342,147344],{"className":25152,"code":147343,"language":25154,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[33,147345,147346,147354,147369,147375],{"__ignoreMap":31},[36,147347,147348,147350,147352],{"class":38,"line":39},[36,147349,25907],{"class":46},[36,147351,118648],{"class":110},[36,147353,27573],{"class":110},[36,147355,147356,147358,147360,147362,147364,147366],{"class":38,"line":54},[36,147357,25907],{"class":46},[36,147359,118648],{"class":110},[36,147361,25164],{"class":110},[36,147363,105734],{"class":110},[36,147365,102129],{"class":110},[36,147367,147368],{"class":110}," python3-venv\n",[36,147370,147371,147373],{"class":38,"line":61},[36,147372,102210],{"class":46},[36,147374,27624],{"class":73},[36,147376,147377,147379],{"class":38,"line":80},[36,147378,121031],{"class":46},[36,147380,27624],{"class":73},[19,147382,147383],{},"Fedora：",[26,147385,147387],{"className":25152,"code":147386,"language":25154,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[33,147388,147389],{"__ignoreMap":31},[36,147390,147391,147393,147395,147397,147399],{"class":38,"line":39},[36,147392,25907],{"class":46},[36,147394,27646],{"class":110},[36,147396,25164],{"class":110},[36,147398,105734],{"class":110},[36,147400,121096],{"class":110},[19,147402,147403,147404,147406],{},"Linux 上通常使用 ",[33,147405,102210],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147408,147410],{"id":147409},"_14-pip包管理器","1.4 pip包管理器",[19,147412,147413,147415],{},[33,147414,25161],{}," 用来安装第三方库。",[26,147417,147419],{"className":25152,"code":147418,"language":25154,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[33,147420,147421,147430,147439,147447,147453],{"__ignoreMap":31},[36,147422,147423,147425,147427],{"class":38,"line":39},[36,147424,25161],{"class":46},[36,147426,25164],{"class":110},[36,147428,147429],{"class":110}," requests\n",[36,147431,147432,147434,147437],{"class":38,"line":54},[36,147433,25161],{"class":46},[36,147435,147436],{"class":110}," uninstall",[36,147438,147429],{"class":110},[36,147440,147441,147443,147445],{"class":38,"line":61},[36,147442,25161],{"class":46},[36,147444,118905],{"class":110},[36,147446,147429],{"class":110},[36,147448,147449,147451],{"class":38,"line":80},[36,147450,25161],{"class":46},[36,147452,120286],{"class":110},[36,147454,147455,147457],{"class":38,"line":96},[36,147456,25161],{"class":46},[36,147458,147459],{"class":110}," freeze\n",[19,147461,147462],{},"国内网络较慢时可以临时使用镜像：",[26,147464,147466],{"className":25152,"code":147465,"language":25154,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,147467,147468],{"__ignoreMap":31},[36,147469,147470,147472,147474,147477,147479],{"class":38,"line":39},[36,147471,25161],{"class":46},[36,147473,25164],{"class":110},[36,147475,147476],{"class":110}," requests",[36,147478,27761],{"class":73},[36,147480,121059],{"class":110},[19,147482,147483],{},"常见第三方库：",[1806,147485,147486,147495],{},[1809,147487,147488],{},[1812,147489,147490,147493],{},[1815,147491,147492],{},"库",[1815,147494,104027],{},[1852,147496,147497,147505,147512,147520,147528,147536,147544],{},[1812,147498,147499,147502],{},[1857,147500,147501],{},"requests",[1857,147503,147504],{},"网络请求",[1812,147506,147507,147509],{},[1857,147508,101957],{},[1857,147510,147511],{},"数值计算",[1812,147513,147514,147517],{},[1857,147515,147516],{},"pandas",[1857,147518,147519],{},"表格数据处理",[1812,147521,147522,147525],{},[1857,147523,147524],{},"matplotlib",[1857,147526,147527],{},"绘图",[1812,147529,147530,147533],{},[1857,147531,147532],{},"pyecharts",[1857,147534,147535],{},"ECharts 图表",[1812,147537,147538,147541],{},[1857,147539,147540],{},"flask",[1857,147542,147543],{},"Web 后端",[1812,147545,147546,147549],{},[1857,147547,147548],{},"pytest",[1857,147550,147551],{},"自动化测试",[14,147553,147555],{"id":147554},"_15-虚拟环境","1.5 虚拟环境",[19,147557,147558,147559,147562],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[33,147560,147561],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147564,147565],{},"创建虚拟环境：",[26,147567,147569],{"className":25152,"code":147568,"language":25154,"meta":31,"style":31},"python -m venv .venv\n",[33,147570,147571],{"__ignoreMap":31},[36,147572,147573,147575,147577,147579],{"class":38,"line":39},[36,147574,31711],{"class":46},[36,147576,102213],{"class":73},[36,147578,102216],{"class":110},[36,147580,102219],{"class":110},[19,147582,147583],{},"Windows 激活：",[26,147585,147587],{"className":25152,"code":147586,"language":25154,"meta":31,"style":31},".venv\\Scripts\\activate\n",[33,147588,147589],{"__ignoreMap":31},[36,147590,147591],{"class":38,"line":39},[36,147592,147586],{"class":46},[19,147594,147595],{},"macOS\u002FLinux 激活：",[26,147597,147599],{"className":25152,"code":147598,"language":25154,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[33,147600,147601],{"__ignoreMap":31},[36,147602,147603,147605],{"class":38,"line":39},[36,147604,102224],{"class":73},[36,147606,102227],{"class":110},[19,147608,147609],{},"退出虚拟环境：",[26,147611,147613],{"className":25152,"code":147612,"language":25154,"meta":31,"style":31},"deactivate\n",[33,147614,147615],{"__ignoreMap":31},[36,147616,147617],{"class":38,"line":39},[36,147618,147612],{"class":46},[19,147620,147621],{},"保存依赖：",[26,147623,147625],{"className":25152,"code":147624,"language":25154,"meta":31,"style":31},"pip freeze > requirements.txt\n",[33,147626,147627],{"__ignoreMap":31},[36,147628,147629,147631,147634,147636],{"class":38,"line":39},[36,147630,25161],{"class":46},[36,147632,147633],{"class":110}," freeze",[36,147635,27553],{"class":42},[36,147637,147638],{"class":110}," requirements.txt\n",[19,147640,147641],{},"安装依赖：",[26,147643,147645],{"className":25152,"code":147644,"language":25154,"meta":31,"style":31},"pip install -r requirements.txt\n",[33,147646,147647],{"__ignoreMap":31},[36,147648,147649,147651,147653,147655],{"class":38,"line":39},[36,147650,25161],{"class":46},[36,147652,25164],{"class":110},[36,147654,120970],{"class":73},[36,147656,147638],{"class":110},[14,147658,147660],{"id":147659},"_16-开发工具","1.6 开发工具",[1645,147662,147664],{"id":147663},"_161-pycharm","1.6.1 PyCharm",[19,147666,147667],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147669,123393],{},[256,147671,147672,147675,147678,147684,147687],{},[259,147673,147674],{},"New Project：创建项目。",[259,147676,147677],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[259,147679,147680,147681,127314],{},"New Python File：创建 ",[33,147682,147683],{},".py",[259,147685,147686],{},"Run：运行当前文件。",[259,147688,147689],{},"Debug：断点调试。",[1645,147691,147693],{"id":147692},"_162-vs-code","1.6.2 VS Code",[19,147695,147696],{},"VS Code 轻量，适合后续多语言开发。",[19,147698,147699],{},"建议安装插件：",[256,147701,147702,147705,147708],{},[259,147703,147704],{},"Python。",[259,147706,147707],{},"Pylance。",[259,147709,147710],{},"Jupyter。",[19,147712,147713],{},"选择解释器：",[26,147715,147718],{"className":147716,"code":147717,"language":6676,"meta":31},[6674],"Ctrl + Shift + P -> Python: Select Interpreter\n",[33,147719,147717],{"__ignoreMap":31},[14,147721,147723],{"id":147722},"_17-第一个python程序","1.7 第一个Python程序",[19,147725,147726,147727,25949],{},"创建文件 ",[33,147728,147729],{},"hello.py",[26,147731,147733],{"className":31709,"code":147732,"language":31711,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[33,147734,147735,147746],{"__ignoreMap":31},[36,147736,147737,147739,147741,147744],{"class":38,"line":39},[36,147738,31746],{"class":73},[36,147740,222],{"class":50},[36,147742,147743],{"class":110},"\"Hello World\"",[36,147745,1680],{"class":50},[36,147747,147748,147750,147752,147755],{"class":38,"line":54},[36,147749,31746],{"class":73},[36,147751,222],{"class":50},[36,147753,147754],{"class":110},"\"你好，Python\"",[36,147756,1680],{"class":50},[19,147758,147759],{},"在终端运行：",[26,147761,147763],{"className":25152,"code":147762,"language":25154,"meta":31,"style":31},"python hello.py\n",[33,147764,147765],{"__ignoreMap":31},[36,147766,147767,147769],{"class":38,"line":39},[36,147768,31711],{"class":46},[36,147770,147771],{"class":110}," hello.py\n",[19,147773,147774],{},"或：",[26,147776,147778],{"className":25152,"code":147777,"language":25154,"meta":31,"style":31},"python3 hello.py\n",[33,147779,147780],{"__ignoreMap":31},[36,147781,147782,147784],{"class":38,"line":39},[36,147783,102210],{"class":46},[36,147785,147771],{"class":110},[19,147787,147788],{},"输出：",[26,147790,147793],{"className":147791,"code":147792,"language":6676,"meta":31},[6674],"Hello World\n你好，Python\n",[33,147794,147792],{"__ignoreMap":31},[14,147796,147798],{"id":147797},"_18-print函数","1.8 print函数",[19,147800,147801,147804],{},[33,147802,147803],{},"print()"," 用来输出内容。",[26,147806,147808],{"className":31709,"code":147807,"language":31711,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[33,147809,147810,147820,147830,147840],{"__ignoreMap":31},[36,147811,147812,147814,147816,147818],{"class":38,"line":39},[36,147813,31746],{"class":73},[36,147815,222],{"class":50},[36,147817,7326],{"class":110},[36,147819,1680],{"class":50},[36,147821,147822,147824,147826,147828],{"class":38,"line":54},[36,147823,31746],{"class":73},[36,147825,222],{"class":50},[36,147827,1979],{"class":73},[36,147829,1680],{"class":50},[36,147831,147832,147834,147836,147838],{"class":38,"line":61},[36,147833,31746],{"class":73},[36,147835,222],{"class":50},[36,147837,1721],{"class":73},[36,147839,1680],{"class":50},[36,147841,147842,147844,147846,147849,147851,147853],{"class":38,"line":80},[36,147843,31746],{"class":73},[36,147845,222],{"class":50},[36,147847,147848],{"class":110},"\"年龄:\"",[36,147850,477],{"class":50},[36,147852,2317],{"class":73},[36,147854,1680],{"class":50},[19,147856,147857],{},"多个内容用逗号隔开，默认中间加空格：",[26,147859,147861],{"className":31709,"code":147860,"language":31711,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[33,147862,147863,147873,147883],{"__ignoreMap":31},[36,147864,147865,147868,147870],{"class":38,"line":39},[36,147866,147867],{"class":50},"name ",[36,147869,70],{"class":42},[36,147871,147872],{"class":110}," \"张三\"\n",[36,147874,147875,147878,147880],{"class":38,"line":54},[36,147876,147877],{"class":50},"age ",[36,147879,70],{"class":42},[36,147881,147882],{"class":73}," 18\n",[36,147884,147885,147887,147889,147892,147895,147897],{"class":38,"line":61},[36,147886,31746],{"class":73},[36,147888,222],{"class":50},[36,147890,147891],{"class":110},"\"姓名:\"",[36,147893,147894],{"class":50},", name, ",[36,147896,147848],{"class":110},[36,147898,147899],{"class":50},", age)\n",[19,147901,147902],{},"修改分隔符：",[26,147904,147906],{"className":31709,"code":147905,"language":31711,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[33,147907,147908],{"__ignoreMap":31},[36,147909,147910,147912,147914,147917,147919,147921,147923,147925,147927,147930,147932,147934],{"class":38,"line":39},[36,147911,31746],{"class":73},[36,147913,222],{"class":50},[36,147915,147916],{"class":110},"\"2024\"",[36,147918,477],{"class":50},[36,147920,55647],{"class":110},[36,147922,477],{"class":50},[36,147924,55647],{"class":110},[36,147926,477],{"class":50},[36,147928,147929],{"class":473},"sep",[36,147931,70],{"class":42},[36,147933,33814],{"class":110},[36,147935,1680],{"class":50},[19,147937,147938],{},"修改结尾符：",[26,147940,147942],{"className":31709,"code":147941,"language":31711,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[33,147943,147944,147962],{"__ignoreMap":31},[36,147945,147946,147948,147950,147952,147954,147956,147958,147960],{"class":38,"line":39},[36,147947,31746],{"class":73},[36,147949,222],{"class":50},[36,147951,7326],{"class":110},[36,147953,477],{"class":50},[36,147955,47132],{"class":473},[36,147957,70],{"class":42},[36,147959,5848],{"class":110},[36,147961,1680],{"class":50},[36,147963,147964,147966,147968,147971],{"class":38,"line":54},[36,147965,31746],{"class":73},[36,147967,222],{"class":50},[36,147969,147970],{"class":110},"\"python\"",[36,147972,1680],{"class":50},[14,147974,147976],{"id":147975},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147978,147979],{},"交互运行适合临时验证：",[26,147981,147983],{"className":31709,"code":147982,"language":31711,"meta":31,"style":31},">>> 10 * 3\n30\n",[33,147984,147985,147995],{"__ignoreMap":31},[36,147986,147987,147989,147991,147993],{"class":38,"line":39},[36,147988,147184],{"class":42},[36,147990,74],{"class":73},[36,147992,561],{"class":42},[36,147994,121367],{"class":73},[36,147996,147997],{"class":38,"line":54},[36,147998,147999],{"class":73},"30\n",[19,148001,148002],{},"脚本运行适合保存程序：",[26,148004,148006],{"className":31709,"code":148005,"language":31711,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[33,148007,148008,148018,148027],{"__ignoreMap":31},[36,148009,148010,148013,148015],{"class":38,"line":39},[36,148011,148012],{"class":50},"price ",[36,148014,70],{"class":42},[36,148016,148017],{"class":73}," 8\n",[36,148019,148020,148023,148025],{"class":38,"line":54},[36,148021,148022],{"class":50},"count ",[36,148024,70],{"class":42},[36,148026,55758],{"class":73},[36,148028,148029,148031,148034,148036],{"class":38,"line":61},[36,148030,31746],{"class":73},[36,148032,148033],{"class":50},"(price ",[36,148035,2122],{"class":42},[36,148037,148038],{"class":50}," count)\n",[19,148040,148041],{},"实际学习中推荐：",[256,148043,148044,148047,148052],{},[259,148045,148046],{},"临时试一个语法，用交互模式。",[259,148048,148049,148050,127314],{},"写完整练习，用 ",[33,148051,147683],{},[259,148053,148054],{},"写项目，用独立目录和虚拟环境。",[14,148056,148058],{"id":148057},"_110-常见错误","1.10 常见错误",[1645,148060,148062],{"id":148061},"_1101-命令找不到","1.10.1 命令找不到",[26,148064,148067],{"className":148065,"code":148066,"language":6676,"meta":31},[6674],"python: command not found\n",[33,148068,148066],{"__ignoreMap":31},[19,148070,148071],{},"原因：",[256,148073,148074,148077,148080],{},[259,148075,148076],{},"没安装 Python。",[259,148078,148079],{},"PATH 没配置。",[259,148081,148082,148083,29716],{},"Linux\u002FmacOS 应该使用 ",[33,148084,102210],{},[1645,148086,148088],{"id":148087},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148090,148091],{},"不要把文件命名为：",[26,148093,148096],{"className":148094,"code":148095,"language":6676,"meta":31},[6674],"random.py\njson.py\ntime.py\nrequests.py\n",[33,148097,148095],{"__ignoreMap":31},[19,148099,148100],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[1645,148102,148104],{"id":148103},"_1103-中文乱码","1.10.3 中文乱码",[19,148106,148107],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148109,148110],{},"如果读写文件出现乱码，要明确指定编码：",[26,148112,148114],{"className":31709,"code":148113,"language":31711,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[33,148115,148116,148150],{"__ignoreMap":31},[36,148117,148118,148120,148123,148125,148128,148130,148133,148135,148138,148140,148143,148145,148147],{"class":38,"line":39},[36,148119,109164],{"class":42},[36,148121,148122],{"class":73}," open",[36,148124,222],{"class":50},[36,148126,148127],{"class":110},"\"data.txt\"",[36,148129,477],{"class":50},[36,148131,148132],{"class":110},"\"r\"",[36,148134,477],{"class":50},[36,148136,148137],{"class":473},"encoding",[36,148139,70],{"class":42},[36,148141,148142],{"class":110},"\"utf-8\"",[36,148144,15043],{"class":50},[36,148146,32714],{"class":42},[36,148148,148149],{"class":50}," f:\n",[36,148151,148152,148155,148157],{"class":38,"line":54},[36,148153,148154],{"class":50},"    content ",[36,148156,70],{"class":42},[36,148158,148159],{"class":50}," f.read()\n",[14,148161,148163],{"id":148162},"_111-本章练习","1.11 本章练习",[256,148165,148166,148169,148175],{},[259,148167,148168],{},"安装 Python，并在终端输出版本号。",[259,148170,148171,148172,148174],{},"新建 ",[33,148173,147729],{},"，输出自己的姓名、年龄、学习目标。",[259,148176,105697,148177,148179],{},[33,148178,147803],{}," 输出下面格式：",[26,148181,148184],{"className":148182,"code":148183,"language":6676,"meta":31},[6674],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[33,148185,148183],{"__ignoreMap":31},[256,148187,148188],{"start":80},[259,148189,105697,148190,148192],{},[33,148191,147929],{}," 输出日期：",[26,148194,148197],{"className":148195,"code":148196,"language":6676,"meta":31},[6674],"2024-10-10\n",[33,148198,148196],{"__ignoreMap":31},[256,148200,148201],{"start":96},[259,148202,105697,148203,148205,148206,148208],{},[33,148204,47132],{}," 让两次 ",[33,148207,147803],{}," 输出在同一行。",[1592,148210,148211],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":148213},[148214,148215,148216,148221,148222,148223,148227,148228,148229,148230,148235],{"id":147096,"depth":54,"text":147097},{"id":147140,"depth":54,"text":147141},{"id":147241,"depth":54,"text":147242,"children":148217},[148218,148219,148220],{"id":147245,"depth":61,"text":147246},{"id":147300,"depth":61,"text":147301},{"id":147336,"depth":61,"text":147337},{"id":147409,"depth":54,"text":147410},{"id":147554,"depth":54,"text":147555},{"id":147659,"depth":54,"text":147660,"children":148224},[148225,148226],{"id":147663,"depth":61,"text":147664},{"id":147692,"depth":61,"text":147693},{"id":147722,"depth":54,"text":147723},{"id":147797,"depth":54,"text":147798},{"id":147975,"depth":54,"text":147976},{"id":148057,"depth":54,"text":148058,"children":148231},[148232,148233,148234],{"id":148061,"depth":61,"text":148062},{"id":148087,"depth":61,"text":148088},{"id":148103,"depth":61,"text":148104},{"id":148162,"depth":54,"text":148163},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147088,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148242,"title":148243,"body":148244,"description":24706,"extension":1603,"meta":150648,"navigation":57,"path":150649,"seo":150650,"stem":150651,"__hash__":150652},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148245,"toc":150633},[148246,148249,148253,148256,148259,148276,148279,148321,148324,148328,148331,148334,148371,148374,148408,148411,148503,148507,148521,148524,148551,148554,148558,148661,148668,148671,148688,148692,148699,148888,148891,148964,148968,148971,149055,149058,149090,149094,149298,149301,149305,149311,149413,149416,149672,149676,149679,149682,149696,149698,149884,149888,150250,150256,150260,150263,150387,150390,150569,150572,150576,150609,150613,150630],[10,148247,148243],{"id":148248},"_10-json与pyecharts折线图",[14,148250,148252],{"id":148251},"_101-数据可视化","10.1 数据可视化",[19,148254,148255],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148257,148258],{},"常见图表：",[256,148260,148261,148264,148267,148270,148273],{},[259,148262,148263],{},"折线图：看趋势。",[259,148265,148266],{},"柱状图：看分类对比。",[259,148268,148269],{},"饼图：看占比。",[259,148271,148272],{},"地图：看地域分布。",[259,148274,148275],{},"散点图：看两个变量之间的关系。",[19,148277,148278],{},"Python 可视化常用库：",[1806,148280,148281,148289],{},[1809,148282,148283],{},[1812,148284,148285,148287],{},[1815,148286,147492],{},[1815,148288,25070],{},[1852,148290,148291,148298,148306,148313],{},[1812,148292,148293,148295],{},[1857,148294,147524],{},[1857,148296,148297],{},"基础、经典、可定制",[1812,148299,148300,148303],{},[1857,148301,148302],{},"seaborn",[1857,148304,148305],{},"统计图表更美观",[1812,148307,148308,148310],{},[1857,148309,147532],{},[1857,148311,148312],{},"生成交互式网页图表",[1812,148314,148315,148318],{},[1857,148316,148317],{},"plotly",[1857,148319,148320],{},"交互图表能力强",[19,148322,148323],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148325,148327],{"id":148326},"_102-json回顾","10.2 JSON回顾",[19,148329,148330],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148332,148333],{},"Python 字典：",[26,148335,148337],{"className":31709,"code":148336,"language":31711,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[33,148338,148339,148347,148358,148367],{"__ignoreMap":31},[36,148340,148341,148343,148345],{"class":38,"line":39},[36,148342,102989],{"class":50},[36,148344,70],{"class":42},[36,148346,16901],{"class":50},[36,148348,148349,148352,148354,148356],{"class":38,"line":54},[36,148350,148351],{"class":110},"    \"name\"",[36,148353,52768],{"class":50},[36,148355,70600],{"class":110},[36,148357,32797],{"class":50},[36,148359,148360,148363,148365],{"class":38,"line":61},[36,148361,148362],{"class":110},"    \"value\"",[36,148364,52768],{"class":50},[36,148366,98789],{"class":73},[36,148368,148369],{"class":38,"line":80},[36,148370,250],{"class":50},[19,148372,148373],{},"JSON 字符串：",[26,148375,148378],{"className":148376,"code":148377,"language":147123,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[33,148379,148380,148384,148395,148404],{"__ignoreMap":31},[36,148381,148382],{"class":38,"line":39},[36,148383,3076],{"class":50},[36,148385,148386,148389,148391,148393],{"class":38,"line":54},[36,148387,148388],{"class":73},"  \"name\"",[36,148390,52768],{"class":50},[36,148392,70600],{"class":110},[36,148394,32797],{"class":50},[36,148396,148397,148400,148402],{"class":38,"line":61},[36,148398,148399],{"class":73},"  \"value\"",[36,148401,52768],{"class":50},[36,148403,98789],{"class":73},[36,148405,148406],{"class":38,"line":80},[36,148407,250],{"class":50},[19,148409,148410],{},"Python 与 JSON 的转换：",[26,148412,148414],{"className":31709,"code":148413,"language":31711,"meta":31,"style":31},"import json\n\ndata = {\"name\": \"北京\", \"value\": 100}\n\njson_text = json.dumps(data, ensure_ascii=False)\nprint(json_text)\n\nnew_data = json.loads(json_text)\nprint(new_data)\n",[33,148415,148416,148423,148427,148452,148456,148475,148482,148486,148496],{"__ignoreMap":31},[36,148417,148418,148420],{"class":38,"line":39},[36,148419,31723],{"class":42},[36,148421,148422],{"class":50}," json\n",[36,148424,148425],{"class":38,"line":54},[36,148426,58],{"emptyLinePlaceholder":57},[36,148428,148429,148431,148433,148435,148437,148439,148441,148443,148446,148448,148450],{"class":38,"line":61},[36,148430,102989],{"class":50},[36,148432,70],{"class":42},[36,148434,5937],{"class":50},[36,148436,64010],{"class":110},[36,148438,52768],{"class":50},[36,148440,70600],{"class":110},[36,148442,477],{"class":50},[36,148444,148445],{"class":110},"\"value\"",[36,148447,52768],{"class":50},[36,148449,1979],{"class":73},[36,148451,250],{"class":50},[36,148453,148454],{"class":38,"line":80},[36,148455,58],{"emptyLinePlaceholder":57},[36,148457,148458,148461,148463,148466,148469,148471,148473],{"class":38,"line":96},[36,148459,148460],{"class":50},"json_text ",[36,148462,70],{"class":42},[36,148464,148465],{"class":50}," json.dumps(data, ",[36,148467,148468],{"class":473},"ensure_ascii",[36,148470,70],{"class":42},[36,148472,35318],{"class":73},[36,148474,1680],{"class":50},[36,148476,148477,148479],{"class":38,"line":101},[36,148478,31746],{"class":73},[36,148480,148481],{"class":50},"(json_text)\n",[36,148483,148484],{"class":38,"line":128},[36,148485,58],{"emptyLinePlaceholder":57},[36,148487,148488,148491,148493],{"class":38,"line":149},[36,148489,148490],{"class":50},"new_data ",[36,148492,70],{"class":42},[36,148494,148495],{"class":50}," json.loads(json_text)\n",[36,148497,148498,148500],{"class":38,"line":154},[36,148499,31746],{"class":73},[36,148501,148502],{"class":50},"(new_data)\n",[14,148504,148506],{"id":148505},"_103-安装pyecharts","10.3 安装pyecharts",[26,148508,148510],{"className":25152,"code":148509,"language":25154,"meta":31,"style":31},"pip install pyecharts\n",[33,148511,148512],{"__ignoreMap":31},[36,148513,148514,148516,148518],{"class":38,"line":39},[36,148515,25161],{"class":46},[36,148517,25164],{"class":110},[36,148519,148520],{"class":110}," pyecharts\n",[19,148522,148523],{},"验证：",[26,148525,148527],{"className":31709,"code":148526,"language":31711,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[33,148528,148529,148535,148539],{"__ignoreMap":31},[36,148530,148531,148533],{"class":38,"line":39},[36,148532,31723],{"class":42},[36,148534,148520],{"class":50},[36,148536,148537],{"class":38,"line":54},[36,148538,58],{"emptyLinePlaceholder":57},[36,148540,148541,148543,148546,148549],{"class":38,"line":61},[36,148542,31746],{"class":73},[36,148544,148545],{"class":50},"(pyecharts.",[36,148547,148548],{"class":73},"__version__",[36,148550,1680],{"class":50},[19,148552,148553],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148555,148557],{"id":148556},"_104-第一个折线图","10.4 第一个折线图",[26,148559,148561],{"className":31709,"code":148560,"language":31711,"meta":31,"style":31},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[33,148562,148563,148575,148579,148589,148619,148651],{"__ignoreMap":31},[36,148564,148565,148567,148570,148572],{"class":38,"line":39},[36,148566,32068],{"class":42},[36,148568,148569],{"class":50}," pyecharts.charts ",[36,148571,31723],{"class":42},[36,148573,148574],{"class":50}," Line\n",[36,148576,148577],{"class":38,"line":54},[36,148578,58],{"emptyLinePlaceholder":57},[36,148580,148581,148584,148586],{"class":38,"line":61},[36,148582,148583],{"class":50},"line ",[36,148585,70],{"class":42},[36,148587,148588],{"class":50}," Line()\n",[36,148590,148591,148594,148597,148599,148602,148604,148607,148609,148612,148614,148617],{"class":38,"line":80},[36,148592,148593],{"class":50},"line.add_xaxis([",[36,148595,148596],{"class":110},"\"周一\"",[36,148598,477],{"class":50},[36,148600,148601],{"class":110},"\"周二\"",[36,148603,477],{"class":50},[36,148605,148606],{"class":110},"\"周三\"",[36,148608,477],{"class":50},[36,148610,148611],{"class":110},"\"周四\"",[36,148613,477],{"class":50},[36,148615,148616],{"class":110},"\"周五\"",[36,148618,6146],{"class":50},[36,148620,148621,148624,148627,148629,148631,148633,148635,148637,148639,148641,148644,148646,148649],{"class":38,"line":96},[36,148622,148623],{"class":50},"line.add_yaxis(",[36,148625,148626],{"class":110},"\"销售额\"",[36,148628,78849],{"class":50},[36,148630,1979],{"class":73},[36,148632,477],{"class":50},[36,148634,2484],{"class":73},[36,148636,477],{"class":50},[36,148638,2529],{"class":73},[36,148640,477],{"class":50},[36,148642,148643],{"class":73},"150",[36,148645,477],{"class":50},[36,148647,148648],{"class":73},"180",[36,148650,6146],{"class":50},[36,148652,148653,148656,148659],{"class":38,"line":101},[36,148654,148655],{"class":50},"line.render(",[36,148657,148658],{"class":110},"\"line.html\"",[36,148660,1680],{"class":50},[19,148662,148663,148664,148667],{},"运行后会生成 ",[33,148665,148666],{},"line.html","，用浏览器打开即可看到图表。",[19,148669,148670],{},"核心步骤：",[256,148672,148673,148676,148679,148682,148685],{},[259,148674,148675],{},"导入图表类。",[259,148677,148678],{},"创建图表对象。",[259,148680,148681],{},"添加 x 轴数据。",[259,148683,148684],{},"添加 y 轴数据。",[259,148686,148687],{},"渲染为 HTML。",[14,148689,148691],{"id":148690},"_105-全局配置","10.5 全局配置",[19,148693,148694,148695,148698],{},"常用配置在 ",[33,148696,148697],{},"pyecharts.options"," 中。",[26,148700,148702],{"className":31709,"code":148701,"language":31711,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"一周销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"line.html\")\n",[33,148703,148704,148721,148731,148735,148743,148767,148795,148800,148819,148838,148856,148876,148880],{"__ignoreMap":31},[36,148705,148706,148708,148711,148713,148716,148718],{"class":38,"line":39},[36,148707,32068],{"class":42},[36,148709,148710],{"class":50}," pyecharts ",[36,148712,31723],{"class":42},[36,148714,148715],{"class":50}," options ",[36,148717,32714],{"class":42},[36,148719,148720],{"class":50}," opts\n",[36,148722,148723,148725,148727,148729],{"class":38,"line":54},[36,148724,32068],{"class":42},[36,148726,148569],{"class":50},[36,148728,31723],{"class":42},[36,148730,148574],{"class":50},[36,148732,148733],{"class":38,"line":61},[36,148734,58],{"emptyLinePlaceholder":57},[36,148736,148737,148739,148741],{"class":38,"line":80},[36,148738,148583],{"class":50},[36,148740,70],{"class":42},[36,148742,148588],{"class":50},[36,148744,148745,148747,148749,148751,148753,148755,148757,148759,148761,148763,148765],{"class":38,"line":96},[36,148746,148593],{"class":50},[36,148748,148596],{"class":110},[36,148750,477],{"class":50},[36,148752,148601],{"class":110},[36,148754,477],{"class":50},[36,148756,148606],{"class":110},[36,148758,477],{"class":50},[36,148760,148611],{"class":110},[36,148762,477],{"class":50},[36,148764,148616],{"class":110},[36,148766,6146],{"class":50},[36,148768,148769,148771,148773,148775,148777,148779,148781,148783,148785,148787,148789,148791,148793],{"class":38,"line":101},[36,148770,148623],{"class":50},[36,148772,148626],{"class":110},[36,148774,78849],{"class":50},[36,148776,1979],{"class":73},[36,148778,477],{"class":50},[36,148780,2484],{"class":73},[36,148782,477],{"class":50},[36,148784,2529],{"class":73},[36,148786,477],{"class":50},[36,148788,148643],{"class":73},[36,148790,477],{"class":50},[36,148792,148648],{"class":73},[36,148794,6146],{"class":50},[36,148796,148797],{"class":38,"line":128},[36,148798,148799],{"class":50},"line.set_global_opts(\n",[36,148801,148802,148805,148807,148810,148812,148814,148817],{"class":38,"line":149},[36,148803,148804],{"class":473},"    title_opts",[36,148806,70],{"class":42},[36,148808,148809],{"class":50},"opts.TitleOpts(",[36,148811,52738],{"class":473},[36,148813,70],{"class":42},[36,148815,148816],{"class":110},"\"一周销售额\"",[36,148818,39378],{"class":50},[36,148820,148821,148824,148826,148829,148831,148833,148836],{"class":38,"line":154},[36,148822,148823],{"class":473},"    xaxis_opts",[36,148825,70],{"class":42},[36,148827,148828],{"class":50},"opts.AxisOpts(",[36,148830,81141],{"class":473},[36,148832,70],{"class":42},[36,148834,148835],{"class":110},"\"日期\"",[36,148837,39378],{"class":50},[36,148839,148840,148843,148845,148847,148849,148851,148854],{"class":38,"line":167},[36,148841,148842],{"class":473},"    yaxis_opts",[36,148844,70],{"class":42},[36,148846,148828],{"class":50},[36,148848,81141],{"class":473},[36,148850,70],{"class":42},[36,148852,148853],{"class":110},"\"金额\"",[36,148855,39378],{"class":50},[36,148857,148858,148861,148863,148866,148869,148871,148874],{"class":38,"line":172},[36,148859,148860],{"class":473},"    tooltip_opts",[36,148862,70],{"class":42},[36,148864,148865],{"class":50},"opts.TooltipOpts(",[36,148867,148868],{"class":473},"trigger",[36,148870,70],{"class":42},[36,148872,148873],{"class":110},"\"axis\"",[36,148875,39378],{"class":50},[36,148877,148878],{"class":38,"line":192},[36,148879,1680],{"class":50},[36,148881,148882,148884,148886],{"class":38,"line":211},[36,148883,148655],{"class":50},[36,148885,148658],{"class":110},[36,148887,1680],{"class":50},[19,148889,148890],{},"常见全局配置：",[1806,148892,148893,148902],{},[1809,148894,148895],{},[1812,148896,148897,148900],{},[1815,148898,148899],{},"配置",[1815,148901,104027],{},[1852,148903,148904,148914,148924,148934,148944,148954],{},[1812,148905,148906,148911],{},[1857,148907,148908],{},[33,148909,148910],{},"TitleOpts",[1857,148912,148913],{},"标题",[1812,148915,148916,148921],{},[1857,148917,148918],{},[33,148919,148920],{},"LegendOpts",[1857,148922,148923],{},"图例",[1812,148925,148926,148931],{},[1857,148927,148928],{},[33,148929,148930],{},"TooltipOpts",[1857,148932,148933],{},"提示框",[1812,148935,148936,148941],{},[1857,148937,148938],{},[33,148939,148940],{},"AxisOpts",[1857,148942,148943],{},"坐标轴",[1812,148945,148946,148951],{},[1857,148947,148948],{},[33,148949,148950],{},"VisualMapOpts",[1857,148952,148953],{},"视觉映射",[1812,148955,148956,148961],{},[1857,148957,148958],{},[33,148959,148960],{},"DataZoomOpts",[1857,148962,148963],{},"区域缩放",[14,148965,148967],{"id":148966},"_106-系列配置","10.6 系列配置",[19,148969,148970],{},"系列配置作用于某一组数据。",[26,148972,148974],{"className":31709,"code":148973,"language":31711,"meta":31,"style":31},"line.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=[100, 120, 90, 150, 180],\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\n",[33,148975,148976,148981,148992,149021,149032,149051],{"__ignoreMap":31},[36,148977,148978],{"class":38,"line":39},[36,148979,148980],{"class":50},"line.add_yaxis(\n",[36,148982,148983,148986,148988,148990],{"class":38,"line":54},[36,148984,148985],{"class":473},"    series_name",[36,148987,70],{"class":42},[36,148989,148626],{"class":110},[36,148991,32797],{"class":50},[36,148993,148994,148997,148999,149001,149003,149005,149007,149009,149011,149013,149015,149017,149019],{"class":38,"line":61},[36,148995,148996],{"class":473},"    y_axis",[36,148998,70],{"class":42},[36,149000,2557],{"class":50},[36,149002,1979],{"class":73},[36,149004,477],{"class":50},[36,149006,2484],{"class":73},[36,149008,477],{"class":50},[36,149010,2529],{"class":73},[36,149012,477],{"class":50},[36,149014,148643],{"class":73},[36,149016,477],{"class":50},[36,149018,148648],{"class":73},[36,149020,89167],{"class":50},[36,149022,149023,149026,149028,149030],{"class":38,"line":80},[36,149024,149025],{"class":473},"    is_smooth",[36,149027,70],{"class":42},[36,149029,32807],{"class":73},[36,149031,32797],{"class":50},[36,149033,149034,149037,149039,149042,149045,149047,149049],{"class":38,"line":96},[36,149035,149036],{"class":473},"    label_opts",[36,149038,70],{"class":42},[36,149040,149041],{"class":50},"opts.LabelOpts(",[36,149043,149044],{"class":473},"is_show",[36,149046,70],{"class":42},[36,149048,32807],{"class":73},[36,149050,39378],{"class":50},[36,149052,149053],{"class":38,"line":101},[36,149054,1680],{"class":50},[19,149056,149057],{},"常用参数：",[256,149059,149060,149066,149072,149078,149084],{},[259,149061,149062,149065],{},[33,149063,149064],{},"series_name","：系列名称。",[259,149067,149068,149071],{},[33,149069,149070],{},"y_axis","：y 轴数据。",[259,149073,149074,149077],{},[33,149075,149076],{},"is_smooth","：是否平滑曲线。",[259,149079,149080,149083],{},[33,149081,149082],{},"label_opts","：标签配置。",[259,149085,149086,149089],{},[33,149087,149088],{},"symbol_size","：标记点大小。",[14,149091,149093],{"id":149092},"_107-多条折线","10.7 多条折线",[26,149095,149097],{"className":31709,"code":149096,"language":31711,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", [100, 130, 120, 160, 200], is_smooth=True)\nline.add_yaxis(\"线下销售\", [80, 90, 100, 120, 150], is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"线上线下销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[33,149098,149099,149113,149123,149127,149156,149160,149168,149173,149211,149248,149252,149269,149285,149289],{"__ignoreMap":31},[36,149100,149101,149103,149105,149107,149109,149111],{"class":38,"line":39},[36,149102,32068],{"class":42},[36,149104,148710],{"class":50},[36,149106,31723],{"class":42},[36,149108,148715],{"class":50},[36,149110,32714],{"class":42},[36,149112,148720],{"class":50},[36,149114,149115,149117,149119,149121],{"class":38,"line":54},[36,149116,32068],{"class":42},[36,149118,148569],{"class":50},[36,149120,31723],{"class":42},[36,149122,148574],{"class":50},[36,149124,149125],{"class":38,"line":61},[36,149126,58],{"emptyLinePlaceholder":57},[36,149128,149129,149132,149134,149136,149138,149140,149142,149144,149146,149148,149150,149152,149154],{"class":38,"line":80},[36,149130,149131],{"class":50},"dates ",[36,149133,70],{"class":42},[36,149135,53557],{"class":50},[36,149137,148596],{"class":110},[36,149139,477],{"class":50},[36,149141,148601],{"class":110},[36,149143,477],{"class":50},[36,149145,148606],{"class":110},[36,149147,477],{"class":50},[36,149149,148611],{"class":110},[36,149151,477],{"class":50},[36,149153,148616],{"class":110},[36,149155,34577],{"class":50},[36,149157,149158],{"class":38,"line":96},[36,149159,58],{"emptyLinePlaceholder":57},[36,149161,149162,149164,149166],{"class":38,"line":101},[36,149163,148583],{"class":50},[36,149165,70],{"class":42},[36,149167,148588],{"class":50},[36,149169,149170],{"class":38,"line":128},[36,149171,149172],{"class":50},"line.add_xaxis(dates)\n",[36,149174,149175,149177,149180,149182,149184,149186,149189,149191,149193,149195,149197,149199,149201,149203,149205,149207,149209],{"class":38,"line":149},[36,149176,148623],{"class":50},[36,149178,149179],{"class":110},"\"线上销售\"",[36,149181,78849],{"class":50},[36,149183,1979],{"class":73},[36,149185,477],{"class":50},[36,149187,149188],{"class":73},"130",[36,149190,477],{"class":50},[36,149192,2484],{"class":73},[36,149194,477],{"class":50},[36,149196,22377],{"class":73},[36,149198,477],{"class":50},[36,149200,3240],{"class":73},[36,149202,113533],{"class":50},[36,149204,149076],{"class":473},[36,149206,70],{"class":42},[36,149208,32807],{"class":73},[36,149210,1680],{"class":50},[36,149212,149213,149215,149218,149220,149222,149224,149226,149228,149230,149232,149234,149236,149238,149240,149242,149244,149246],{"class":38,"line":154},[36,149214,148623],{"class":50},[36,149216,149217],{"class":110},"\"线下销售\"",[36,149219,78849],{"class":50},[36,149221,2279],{"class":73},[36,149223,477],{"class":50},[36,149225,2529],{"class":73},[36,149227,477],{"class":50},[36,149229,1979],{"class":73},[36,149231,477],{"class":50},[36,149233,2484],{"class":73},[36,149235,477],{"class":50},[36,149237,148643],{"class":73},[36,149239,113533],{"class":50},[36,149241,149076],{"class":473},[36,149243,70],{"class":42},[36,149245,32807],{"class":73},[36,149247,1680],{"class":50},[36,149249,149250],{"class":38,"line":167},[36,149251,148799],{"class":50},[36,149253,149254,149256,149258,149260,149262,149264,149267],{"class":38,"line":172},[36,149255,148804],{"class":473},[36,149257,70],{"class":42},[36,149259,148809],{"class":50},[36,149261,52738],{"class":473},[36,149263,70],{"class":42},[36,149265,149266],{"class":110},"\"线上线下销售趋势\"",[36,149268,39378],{"class":50},[36,149270,149271,149273,149275,149277,149279,149281,149283],{"class":38,"line":192},[36,149272,148860],{"class":473},[36,149274,70],{"class":42},[36,149276,148865],{"class":50},[36,149278,148868],{"class":473},[36,149280,70],{"class":42},[36,149282,148873],{"class":110},[36,149284,39378],{"class":50},[36,149286,149287],{"class":38,"line":211},[36,149288,1680],{"class":50},[36,149290,149291,149293,149296],{"class":38,"line":216},[36,149292,148655],{"class":50},[36,149294,149295],{"class":110},"\"sales.html\"",[36,149297,1680],{"class":50},[19,149299,149300],{},"多条折线适合比较不同指标或不同地区。",[14,149302,149304],{"id":149303},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149306,149307,149308,25949],{},"假设 ",[33,149309,149310],{},"sales.json",[26,149312,149314],{"className":148376,"code":149313,"language":147123,"meta":31,"style":31},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[33,149315,149316,149321,149353,149381,149409],{"__ignoreMap":31},[36,149317,149318],{"class":38,"line":39},[36,149319,149320],{"class":50},"[\n",[36,149322,149323,149326,149329,149331,149333,149335,149338,149340,149342,149344,149347,149349,149351],{"class":38,"line":54},[36,149324,149325],{"class":50},"  {",[36,149327,149328],{"class":73},"\"date\"",[36,149330,52768],{"class":50},[36,149332,148596],{"class":110},[36,149334,477],{"class":50},[36,149336,149337],{"class":73},"\"online\"",[36,149339,52768],{"class":50},[36,149341,1979],{"class":73},[36,149343,477],{"class":50},[36,149345,149346],{"class":73},"\"offline\"",[36,149348,52768],{"class":50},[36,149350,2279],{"class":73},[36,149352,6419],{"class":50},[36,149354,149355,149357,149359,149361,149363,149365,149367,149369,149371,149373,149375,149377,149379],{"class":38,"line":61},[36,149356,149325],{"class":50},[36,149358,149328],{"class":73},[36,149360,52768],{"class":50},[36,149362,148601],{"class":110},[36,149364,477],{"class":50},[36,149366,149337],{"class":73},[36,149368,52768],{"class":50},[36,149370,149188],{"class":73},[36,149372,477],{"class":50},[36,149374,149346],{"class":73},[36,149376,52768],{"class":50},[36,149378,2529],{"class":73},[36,149380,6419],{"class":50},[36,149382,149383,149385,149387,149389,149391,149393,149395,149397,149399,149401,149403,149405,149407],{"class":38,"line":80},[36,149384,149325],{"class":50},[36,149386,149328],{"class":73},[36,149388,52768],{"class":50},[36,149390,148606],{"class":110},[36,149392,477],{"class":50},[36,149394,149337],{"class":73},[36,149396,52768],{"class":50},[36,149398,2484],{"class":73},[36,149400,477],{"class":50},[36,149402,149346],{"class":73},[36,149404,52768],{"class":50},[36,149406,1979],{"class":73},[36,149408,250],{"class":50},[36,149410,149411],{"class":38,"line":96},[36,149412,34577],{"class":50},[19,149414,149415],{},"读取并绘图：",[26,149417,149419],{"className":31709,"code":149418,"language":31711,"meta":31,"style":31},"import json\nfrom pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nwith open(\"sales.json\", \"r\", encoding=\"utf-8\") as file:\n    data = json.load(file)\n\ndates = []\nonline_sales = []\noffline_sales = []\n\nfor item in data:\n    dates.append(item[\"date\"])\n    online_sales.append(item[\"online\"])\n    offline_sales.append(item[\"offline\"])\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\"线上销售\", online_sales, is_smooth=True)\nline.add_yaxis(\"线下销售\", offline_sales, is_smooth=True)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"销售趋势\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"sales.html\")\n",[33,149420,149421,149427,149441,149451,149455,149487,149500,149504,149512,149521,149530,149534,149546,149555,149564,149573,149577,149585,149589,149606,149623,149627,149644,149660,149664],{"__ignoreMap":31},[36,149422,149423,149425],{"class":38,"line":39},[36,149424,31723],{"class":42},[36,149426,148422],{"class":50},[36,149428,149429,149431,149433,149435,149437,149439],{"class":38,"line":54},[36,149430,32068],{"class":42},[36,149432,148710],{"class":50},[36,149434,31723],{"class":42},[36,149436,148715],{"class":50},[36,149438,32714],{"class":42},[36,149440,148720],{"class":50},[36,149442,149443,149445,149447,149449],{"class":38,"line":61},[36,149444,32068],{"class":42},[36,149446,148569],{"class":50},[36,149448,31723],{"class":42},[36,149450,148574],{"class":50},[36,149452,149453],{"class":38,"line":80},[36,149454,58],{"emptyLinePlaceholder":57},[36,149456,149457,149459,149461,149463,149466,149468,149470,149472,149474,149476,149478,149480,149482,149485],{"class":38,"line":96},[36,149458,109164],{"class":42},[36,149460,148122],{"class":73},[36,149462,222],{"class":50},[36,149464,149465],{"class":110},"\"sales.json\"",[36,149467,477],{"class":50},[36,149469,148132],{"class":110},[36,149471,477],{"class":50},[36,149473,148137],{"class":473},[36,149475,70],{"class":42},[36,149477,148142],{"class":110},[36,149479,15043],{"class":50},[36,149481,32714],{"class":42},[36,149483,149484],{"class":473}," file",[36,149486,5230],{"class":50},[36,149488,149489,149491,149493,149496,149498],{"class":38,"line":101},[36,149490,102752],{"class":50},[36,149492,70],{"class":42},[36,149494,149495],{"class":50}," json.load(",[36,149497,46685],{"class":473},[36,149499,1680],{"class":50},[36,149501,149502],{"class":38,"line":128},[36,149503,58],{"emptyLinePlaceholder":57},[36,149505,149506,149508,149510],{"class":38,"line":149},[36,149507,149131],{"class":50},[36,149509,70],{"class":42},[36,149511,53169],{"class":50},[36,149513,149514,149517,149519],{"class":38,"line":154},[36,149515,149516],{"class":50},"online_sales ",[36,149518,70],{"class":42},[36,149520,53169],{"class":50},[36,149522,149523,149526,149528],{"class":38,"line":167},[36,149524,149525],{"class":50},"offline_sales ",[36,149527,70],{"class":42},[36,149529,53169],{"class":50},[36,149531,149532],{"class":38,"line":172},[36,149533,58],{"emptyLinePlaceholder":57},[36,149535,149536,149538,149541,149543],{"class":38,"line":192},[36,149537,4516],{"class":42},[36,149539,149540],{"class":50}," item ",[36,149542,27374],{"class":42},[36,149544,149545],{"class":50}," data:\n",[36,149547,149548,149551,149553],{"class":38,"line":211},[36,149549,149550],{"class":50},"    dates.append(item[",[36,149552,149328],{"class":110},[36,149554,6146],{"class":50},[36,149556,149557,149560,149562],{"class":38,"line":216},[36,149558,149559],{"class":50},"    online_sales.append(item[",[36,149561,149337],{"class":110},[36,149563,6146],{"class":50},[36,149565,149566,149569,149571],{"class":38,"line":231},[36,149567,149568],{"class":50},"    offline_sales.append(item[",[36,149570,149346],{"class":110},[36,149572,6146],{"class":50},[36,149574,149575],{"class":38,"line":236},[36,149576,58],{"emptyLinePlaceholder":57},[36,149578,149579,149581,149583],{"class":38,"line":247},[36,149580,148583],{"class":50},[36,149582,70],{"class":42},[36,149584,148588],{"class":50},[36,149586,149587],{"class":38,"line":637},[36,149588,149172],{"class":50},[36,149590,149591,149593,149595,149598,149600,149602,149604],{"class":38,"line":646},[36,149592,148623],{"class":50},[36,149594,149179],{"class":110},[36,149596,149597],{"class":50},", online_sales, ",[36,149599,149076],{"class":473},[36,149601,70],{"class":42},[36,149603,32807],{"class":73},[36,149605,1680],{"class":50},[36,149607,149608,149610,149612,149615,149617,149619,149621],{"class":38,"line":655},[36,149609,148623],{"class":50},[36,149611,149217],{"class":110},[36,149613,149614],{"class":50},", offline_sales, ",[36,149616,149076],{"class":473},[36,149618,70],{"class":42},[36,149620,32807],{"class":73},[36,149622,1680],{"class":50},[36,149624,149625],{"class":38,"line":660},[36,149626,148799],{"class":50},[36,149628,149629,149631,149633,149635,149637,149639,149642],{"class":38,"line":665},[36,149630,148804],{"class":473},[36,149632,70],{"class":42},[36,149634,148809],{"class":50},[36,149636,52738],{"class":473},[36,149638,70],{"class":42},[36,149640,149641],{"class":110},"\"销售趋势\"",[36,149643,39378],{"class":50},[36,149645,149646,149648,149650,149652,149654,149656,149658],{"class":38,"line":674},[36,149647,148860],{"class":473},[36,149649,70],{"class":42},[36,149651,148865],{"class":50},[36,149653,148868],{"class":473},[36,149655,70],{"class":42},[36,149657,148873],{"class":110},[36,149659,39378],{"class":50},[36,149661,149662],{"class":38,"line":679},[36,149663,1680],{"class":50},[36,149665,149666,149668,149670],{"class":38,"line":692},[36,149667,148655],{"class":50},[36,149669,149295],{"class":110},[36,149671,1680],{"class":50},[14,149673,149675],{"id":149674},"_109-数据清洗","10.9 数据清洗",[19,149677,149678],{},"真实数据经常不整齐，需要清洗。",[19,149680,149681],{},"常见问题：",[256,149683,149684,149687,149690,149693],{},[259,149685,149686],{},"数字是字符串。",[259,149688,149689],{},"字段缺失。",[259,149691,149692],{},"空值。",[259,149694,149695],{},"日期格式不统一。",[19,149697,16464],{},[26,149699,149701],{"className":31709,"code":149700,"language":31711,"meta":31,"style":31},"raw_data = [\n    {\"date\": \"周一\", \"sales\": \"100\"},\n    {\"date\": \"周二\", \"sales\": \"\"},\n    {\"date\": \"周三\", \"sales\": \"120\"},\n]\n\ndates = []\nsales = []\n\nfor item in raw_data:\n    value = item.get(\"sales\")\n    if not value:\n        continue\n\n    dates.append(item[\"date\"])\n    sales.append(int(value))\n\nprint(dates)\nprint(sales)\n",[33,149702,149703,149712,149735,149755,149776,149780,149784,149792,149801,149805,149816,149830,149839,149844,149848,149856,149866,149870,149877],{"__ignoreMap":31},[36,149704,149705,149708,149710],{"class":38,"line":39},[36,149706,149707],{"class":50},"raw_data ",[36,149709,70],{"class":42},[36,149711,56778],{"class":50},[36,149713,149714,149717,149719,149721,149723,149725,149728,149730,149733],{"class":38,"line":54},[36,149715,149716],{"class":50},"    {",[36,149718,149328],{"class":110},[36,149720,52768],{"class":50},[36,149722,148596],{"class":110},[36,149724,477],{"class":50},[36,149726,149727],{"class":110},"\"sales\"",[36,149729,52768],{"class":50},[36,149731,149732],{"class":110},"\"100\"",[36,149734,6419],{"class":50},[36,149736,149737,149739,149741,149743,149745,149747,149749,149751,149753],{"class":38,"line":61},[36,149738,149716],{"class":50},[36,149740,149328],{"class":110},[36,149742,52768],{"class":50},[36,149744,148601],{"class":110},[36,149746,477],{"class":50},[36,149748,149727],{"class":110},[36,149750,52768],{"class":50},[36,149752,9126],{"class":110},[36,149754,6419],{"class":50},[36,149756,149757,149759,149761,149763,149765,149767,149769,149771,149774],{"class":38,"line":80},[36,149758,149716],{"class":50},[36,149760,149328],{"class":110},[36,149762,52768],{"class":50},[36,149764,148606],{"class":110},[36,149766,477],{"class":50},[36,149768,149727],{"class":110},[36,149770,52768],{"class":50},[36,149772,149773],{"class":110},"\"120\"",[36,149775,6419],{"class":50},[36,149777,149778],{"class":38,"line":96},[36,149779,34577],{"class":50},[36,149781,149782],{"class":38,"line":101},[36,149783,58],{"emptyLinePlaceholder":57},[36,149785,149786,149788,149790],{"class":38,"line":128},[36,149787,149131],{"class":50},[36,149789,70],{"class":42},[36,149791,53169],{"class":50},[36,149793,149794,149797,149799],{"class":38,"line":149},[36,149795,149796],{"class":50},"sales ",[36,149798,70],{"class":42},[36,149800,53169],{"class":50},[36,149802,149803],{"class":38,"line":154},[36,149804,58],{"emptyLinePlaceholder":57},[36,149806,149807,149809,149811,149813],{"class":38,"line":167},[36,149808,4516],{"class":42},[36,149810,149540],{"class":50},[36,149812,27374],{"class":42},[36,149814,149815],{"class":50}," raw_data:\n",[36,149817,149818,149821,149823,149826,149828],{"class":38,"line":172},[36,149819,149820],{"class":50},"    value ",[36,149822,70],{"class":42},[36,149824,149825],{"class":50}," item.get(",[36,149827,149727],{"class":110},[36,149829,1680],{"class":50},[36,149831,149832,149834,149836],{"class":38,"line":192},[36,149833,4592],{"class":42},[36,149835,40261],{"class":42},[36,149837,149838],{"class":50}," value:\n",[36,149840,149841],{"class":38,"line":211},[36,149842,149843],{"class":42},"        continue\n",[36,149845,149846],{"class":38,"line":216},[36,149847,58],{"emptyLinePlaceholder":57},[36,149849,149850,149852,149854],{"class":38,"line":231},[36,149851,149550],{"class":50},[36,149853,149328],{"class":110},[36,149855,6146],{"class":50},[36,149857,149858,149861,149863],{"class":38,"line":236},[36,149859,149860],{"class":50},"    sales.append(",[36,149862,43],{"class":73},[36,149864,149865],{"class":50},"(value))\n",[36,149867,149868],{"class":38,"line":247},[36,149869,58],{"emptyLinePlaceholder":57},[36,149871,149872,149874],{"class":38,"line":637},[36,149873,31746],{"class":73},[36,149875,149876],{"class":50},"(dates)\n",[36,149878,149879,149881],{"class":38,"line":646},[36,149880,31746],{"class":73},[36,149882,149883],{"class":50},"(sales)\n",[14,149885,149887],{"id":149886},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,149889,149891],{"className":31709,"code":149890,"language":31711,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\nsales = [\n    {\"date\": \"2024-10-01\", \"amount\": 1200},\n    {\"date\": \"2024-10-02\", \"amount\": 1800},\n    {\"date\": \"2024-10-03\", \"amount\": 1500},\n    {\"date\": \"2024-10-04\", \"amount\": 2100},\n    {\"date\": \"2024-10-05\", \"amount\": 2600},\n]\n\ndates = [item[\"date\"] for item in sales]\namounts = [item[\"amount\"] for item in sales]\n\nline = Line()\nline.add_xaxis(dates)\nline.add_yaxis(\n    series_name=\"销售额\",\n    y_axis=amounts,\n    is_smooth=True,\n    label_opts=opts.LabelOpts(is_show=True),\n)\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"每日销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"日期\"),\n    yaxis_opts=opts.AxisOpts(name=\"金额\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n    datazoom_opts=[opts.DataZoomOpts()],\n)\nline.render(\"daily_sales.html\")\n",[33,149892,149893,149907,149917,149921,149929,149950,149972,149994,150016,150038,150042,150046,150068,150089,150093,150101,150105,150109,150119,150128,150138,150154,150158,150162,150179,150195,150211,150227,150237,150241],{"__ignoreMap":31},[36,149894,149895,149897,149899,149901,149903,149905],{"class":38,"line":39},[36,149896,32068],{"class":42},[36,149898,148710],{"class":50},[36,149900,31723],{"class":42},[36,149902,148715],{"class":50},[36,149904,32714],{"class":42},[36,149906,148720],{"class":50},[36,149908,149909,149911,149913,149915],{"class":38,"line":54},[36,149910,32068],{"class":42},[36,149912,148569],{"class":50},[36,149914,31723],{"class":42},[36,149916,148574],{"class":50},[36,149918,149919],{"class":38,"line":61},[36,149920,58],{"emptyLinePlaceholder":57},[36,149922,149923,149925,149927],{"class":38,"line":80},[36,149924,149796],{"class":50},[36,149926,70],{"class":42},[36,149928,56778],{"class":50},[36,149930,149931,149933,149935,149937,149940,149942,149944,149946,149948],{"class":38,"line":96},[36,149932,149716],{"class":50},[36,149934,149328],{"class":110},[36,149936,52768],{"class":50},[36,149938,149939],{"class":110},"\"2024-10-01\"",[36,149941,477],{"class":50},[36,149943,85415],{"class":110},[36,149945,52768],{"class":50},[36,149947,93354],{"class":73},[36,149949,6419],{"class":50},[36,149951,149952,149954,149956,149958,149961,149963,149965,149967,149970],{"class":38,"line":101},[36,149953,149716],{"class":50},[36,149955,149328],{"class":110},[36,149957,52768],{"class":50},[36,149959,149960],{"class":110},"\"2024-10-02\"",[36,149962,477],{"class":50},[36,149964,85415],{"class":110},[36,149966,52768],{"class":50},[36,149968,149969],{"class":73},"1800",[36,149971,6419],{"class":50},[36,149973,149974,149976,149978,149980,149983,149985,149987,149989,149992],{"class":38,"line":128},[36,149975,149716],{"class":50},[36,149977,149328],{"class":110},[36,149979,52768],{"class":50},[36,149981,149982],{"class":110},"\"2024-10-03\"",[36,149984,477],{"class":50},[36,149986,85415],{"class":110},[36,149988,52768],{"class":50},[36,149990,149991],{"class":73},"1500",[36,149993,6419],{"class":50},[36,149995,149996,149998,150000,150002,150005,150007,150009,150011,150014],{"class":38,"line":149},[36,149997,149716],{"class":50},[36,149999,149328],{"class":110},[36,150001,52768],{"class":50},[36,150003,150004],{"class":110},"\"2024-10-04\"",[36,150006,477],{"class":50},[36,150008,85415],{"class":110},[36,150010,52768],{"class":50},[36,150012,150013],{"class":73},"2100",[36,150015,6419],{"class":50},[36,150017,150018,150020,150022,150024,150027,150029,150031,150033,150036],{"class":38,"line":154},[36,150019,149716],{"class":50},[36,150021,149328],{"class":110},[36,150023,52768],{"class":50},[36,150025,150026],{"class":110},"\"2024-10-05\"",[36,150028,477],{"class":50},[36,150030,85415],{"class":110},[36,150032,52768],{"class":50},[36,150034,150035],{"class":73},"2600",[36,150037,6419],{"class":50},[36,150039,150040],{"class":38,"line":167},[36,150041,34577],{"class":50},[36,150043,150044],{"class":38,"line":172},[36,150045,58],{"emptyLinePlaceholder":57},[36,150047,150048,150050,150052,150055,150057,150059,150061,150063,150065],{"class":38,"line":192},[36,150049,149131],{"class":50},[36,150051,70],{"class":42},[36,150053,150054],{"class":50}," [item[",[36,150056,149328],{"class":110},[36,150058,5932],{"class":50},[36,150060,4516],{"class":42},[36,150062,149540],{"class":50},[36,150064,27374],{"class":42},[36,150066,150067],{"class":50}," sales]\n",[36,150069,150070,150073,150075,150077,150079,150081,150083,150085,150087],{"class":38,"line":211},[36,150071,150072],{"class":50},"amounts ",[36,150074,70],{"class":42},[36,150076,150054],{"class":50},[36,150078,85415],{"class":110},[36,150080,5932],{"class":50},[36,150082,4516],{"class":42},[36,150084,149540],{"class":50},[36,150086,27374],{"class":42},[36,150088,150067],{"class":50},[36,150090,150091],{"class":38,"line":216},[36,150092,58],{"emptyLinePlaceholder":57},[36,150094,150095,150097,150099],{"class":38,"line":231},[36,150096,148583],{"class":50},[36,150098,70],{"class":42},[36,150100,148588],{"class":50},[36,150102,150103],{"class":38,"line":236},[36,150104,149172],{"class":50},[36,150106,150107],{"class":38,"line":247},[36,150108,148980],{"class":50},[36,150110,150111,150113,150115,150117],{"class":38,"line":637},[36,150112,148985],{"class":473},[36,150114,70],{"class":42},[36,150116,148626],{"class":110},[36,150118,32797],{"class":50},[36,150120,150121,150123,150125],{"class":38,"line":646},[36,150122,148996],{"class":473},[36,150124,70],{"class":42},[36,150126,150127],{"class":50},"amounts,\n",[36,150129,150130,150132,150134,150136],{"class":38,"line":655},[36,150131,149025],{"class":473},[36,150133,70],{"class":42},[36,150135,32807],{"class":73},[36,150137,32797],{"class":50},[36,150139,150140,150142,150144,150146,150148,150150,150152],{"class":38,"line":660},[36,150141,149036],{"class":473},[36,150143,70],{"class":42},[36,150145,149041],{"class":50},[36,150147,149044],{"class":473},[36,150149,70],{"class":42},[36,150151,32807],{"class":73},[36,150153,39378],{"class":50},[36,150155,150156],{"class":38,"line":665},[36,150157,1680],{"class":50},[36,150159,150160],{"class":38,"line":674},[36,150161,148799],{"class":50},[36,150163,150164,150166,150168,150170,150172,150174,150177],{"class":38,"line":679},[36,150165,148804],{"class":473},[36,150167,70],{"class":42},[36,150169,148809],{"class":50},[36,150171,52738],{"class":473},[36,150173,70],{"class":42},[36,150175,150176],{"class":110},"\"每日销售额\"",[36,150178,39378],{"class":50},[36,150180,150181,150183,150185,150187,150189,150191,150193],{"class":38,"line":692},[36,150182,148823],{"class":473},[36,150184,70],{"class":42},[36,150186,148828],{"class":50},[36,150188,81141],{"class":473},[36,150190,70],{"class":42},[36,150192,148835],{"class":110},[36,150194,39378],{"class":50},[36,150196,150197,150199,150201,150203,150205,150207,150209],{"class":38,"line":705},[36,150198,148842],{"class":473},[36,150200,70],{"class":42},[36,150202,148828],{"class":50},[36,150204,81141],{"class":473},[36,150206,70],{"class":42},[36,150208,148853],{"class":110},[36,150210,39378],{"class":50},[36,150212,150213,150215,150217,150219,150221,150223,150225],{"class":38,"line":710},[36,150214,148860],{"class":473},[36,150216,70],{"class":42},[36,150218,148865],{"class":50},[36,150220,148868],{"class":473},[36,150222,70],{"class":42},[36,150224,148873],{"class":110},[36,150226,39378],{"class":50},[36,150228,150229,150232,150234],{"class":38,"line":722},[36,150230,150231],{"class":473},"    datazoom_opts",[36,150233,70],{"class":42},[36,150235,150236],{"class":50},"[opts.DataZoomOpts()],\n",[36,150238,150239],{"class":38,"line":750},[36,150240,1680],{"class":50},[36,150242,150243,150245,150248],{"class":38,"line":755},[36,150244,148655],{"class":50},[36,150246,150247],{"class":110},"\"daily_sales.html\"",[36,150249,1680],{"class":50},[19,150251,150252,150255],{},[33,150253,150254],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150257,150259],{"id":150258},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150261,150262],{},"如果数据结构如下：",[26,150264,150266],{"className":31709,"code":150265,"language":31711,"meta":31,"style":31},"data = {\n    \"北京\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 10},\n        {\"date\": \"2024-01-02\", \"confirm\": 12},\n    ],\n    \"上海\": [\n        {\"date\": \"2024-01-01\", \"confirm\": 8},\n        {\"date\": \"2024-01-02\", \"confirm\": 13},\n    ],\n}\n",[33,150267,150268,150276,150284,150306,150327,150332,150339,150359,150379,150383],{"__ignoreMap":31},[36,150269,150270,150272,150274],{"class":38,"line":39},[36,150271,102989],{"class":50},[36,150273,70],{"class":42},[36,150275,16901],{"class":50},[36,150277,150278,150281],{"class":38,"line":54},[36,150279,150280],{"class":110},"    \"北京\"",[36,150282,150283],{"class":50},": [\n",[36,150285,150286,150288,150290,150292,150295,150297,150300,150302,150304],{"class":38,"line":61},[36,150287,6406],{"class":50},[36,150289,149328],{"class":110},[36,150291,52768],{"class":50},[36,150293,150294],{"class":110},"\"2024-01-01\"",[36,150296,477],{"class":50},[36,150298,150299],{"class":110},"\"confirm\"",[36,150301,52768],{"class":50},[36,150303,2113],{"class":73},[36,150305,6419],{"class":50},[36,150307,150308,150310,150312,150314,150317,150319,150321,150323,150325],{"class":38,"line":80},[36,150309,6406],{"class":50},[36,150311,149328],{"class":110},[36,150313,52768],{"class":50},[36,150315,150316],{"class":110},"\"2024-01-02\"",[36,150318,477],{"class":50},[36,150320,150299],{"class":110},[36,150322,52768],{"class":50},[36,150324,2165],{"class":73},[36,150326,6419],{"class":50},[36,150328,150329],{"class":38,"line":96},[36,150330,150331],{"class":50},"    ],\n",[36,150333,150334,150337],{"class":38,"line":101},[36,150335,150336],{"class":110},"    \"上海\"",[36,150338,150283],{"class":50},[36,150340,150341,150343,150345,150347,150349,150351,150353,150355,150357],{"class":38,"line":128},[36,150342,6406],{"class":50},[36,150344,149328],{"class":110},[36,150346,52768],{"class":50},[36,150348,150294],{"class":110},[36,150350,477],{"class":50},[36,150352,150299],{"class":110},[36,150354,52768],{"class":50},[36,150356,2062],{"class":73},[36,150358,6419],{"class":50},[36,150360,150361,150363,150365,150367,150369,150371,150373,150375,150377],{"class":38,"line":149},[36,150362,6406],{"class":50},[36,150364,149328],{"class":110},[36,150366,52768],{"class":50},[36,150368,150316],{"class":110},[36,150370,477],{"class":50},[36,150372,150299],{"class":110},[36,150374,52768],{"class":50},[36,150376,2190],{"class":73},[36,150378,6419],{"class":50},[36,150380,150381],{"class":38,"line":154},[36,150382,150331],{"class":50},[36,150384,150385],{"class":38,"line":167},[36,150386,250],{"class":50},[19,150388,150389],{},"绘制多地区趋势：",[26,150391,150393],{"className":31709,"code":150392,"language":31711,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Line\n\ndates = [item[\"date\"] for item in data[\"北京\"]]\n\nline = Line()\nline.add_xaxis(dates)\n\nfor city, records in data.items():\n    values = [item[\"confirm\"] for item in records]\n    line.add_yaxis(city, values, is_smooth=True)\n\nline.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"多地区趋势图\"),\n    tooltip_opts=opts.TooltipOpts(trigger=\"axis\"),\n)\nline.render(\"trend.html\")\n",[33,150394,150395,150409,150419,150423,150448,150452,150460,150464,150468,150480,150502,150515,150519,150523,150540,150556,150560],{"__ignoreMap":31},[36,150396,150397,150399,150401,150403,150405,150407],{"class":38,"line":39},[36,150398,32068],{"class":42},[36,150400,148710],{"class":50},[36,150402,31723],{"class":42},[36,150404,148715],{"class":50},[36,150406,32714],{"class":42},[36,150408,148720],{"class":50},[36,150410,150411,150413,150415,150417],{"class":38,"line":54},[36,150412,32068],{"class":42},[36,150414,148569],{"class":50},[36,150416,31723],{"class":42},[36,150418,148574],{"class":50},[36,150420,150421],{"class":38,"line":61},[36,150422,58],{"emptyLinePlaceholder":57},[36,150424,150425,150427,150429,150431,150433,150435,150437,150439,150441,150444,150446],{"class":38,"line":80},[36,150426,149131],{"class":50},[36,150428,70],{"class":42},[36,150430,150054],{"class":50},[36,150432,149328],{"class":110},[36,150434,5932],{"class":50},[36,150436,4516],{"class":42},[36,150438,149540],{"class":50},[36,150440,27374],{"class":42},[36,150442,150443],{"class":50}," data[",[36,150445,70600],{"class":110},[36,150447,78858],{"class":50},[36,150449,150450],{"class":38,"line":96},[36,150451,58],{"emptyLinePlaceholder":57},[36,150453,150454,150456,150458],{"class":38,"line":101},[36,150455,148583],{"class":50},[36,150457,70],{"class":42},[36,150459,148588],{"class":50},[36,150461,150462],{"class":38,"line":128},[36,150463,149172],{"class":50},[36,150465,150466],{"class":38,"line":149},[36,150467,58],{"emptyLinePlaceholder":57},[36,150469,150470,150472,150475,150477],{"class":38,"line":154},[36,150471,4516],{"class":42},[36,150473,150474],{"class":50}," city, records ",[36,150476,27374],{"class":42},[36,150478,150479],{"class":50}," data.items():\n",[36,150481,150482,150485,150487,150489,150491,150493,150495,150497,150499],{"class":38,"line":167},[36,150483,150484],{"class":50},"    values ",[36,150486,70],{"class":42},[36,150488,150054],{"class":50},[36,150490,150299],{"class":110},[36,150492,5932],{"class":50},[36,150494,4516],{"class":42},[36,150496,149540],{"class":50},[36,150498,27374],{"class":42},[36,150500,150501],{"class":50}," records]\n",[36,150503,150504,150507,150509,150511,150513],{"class":38,"line":172},[36,150505,150506],{"class":50},"    line.add_yaxis(city, values, ",[36,150508,149076],{"class":473},[36,150510,70],{"class":42},[36,150512,32807],{"class":73},[36,150514,1680],{"class":50},[36,150516,150517],{"class":38,"line":192},[36,150518,58],{"emptyLinePlaceholder":57},[36,150520,150521],{"class":38,"line":211},[36,150522,148799],{"class":50},[36,150524,150525,150527,150529,150531,150533,150535,150538],{"class":38,"line":216},[36,150526,148804],{"class":473},[36,150528,70],{"class":42},[36,150530,148809],{"class":50},[36,150532,52738],{"class":473},[36,150534,70],{"class":42},[36,150536,150537],{"class":110},"\"多地区趋势图\"",[36,150539,39378],{"class":50},[36,150541,150542,150544,150546,150548,150550,150552,150554],{"class":38,"line":231},[36,150543,148860],{"class":473},[36,150545,70],{"class":42},[36,150547,148865],{"class":50},[36,150549,148868],{"class":473},[36,150551,70],{"class":42},[36,150553,148873],{"class":110},[36,150555,39378],{"class":50},[36,150557,150558],{"class":38,"line":236},[36,150559,1680],{"class":50},[36,150561,150562,150564,150567],{"class":38,"line":247},[36,150563,148655],{"class":50},[36,150565,150566],{"class":110},"\"trend.html\"",[36,150568,1680],{"class":50},[19,150570,150571],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150573,150575],{"id":150574},"_1012-易错点","10.12 易错点",[256,150577,150578,150584,150590,150600,150606],{},[259,150579,150580,150583],{},[33,150581,150582],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[259,150585,150586,150589],{},[33,150587,150588],{},"render()"," 生成的是 HTML，不是图片。",[259,150591,150592,150593,150596,150597,29716],{},"JSON 字符串用 ",[33,150594,150595],{},"json.loads()","，JSON 文件用 ",[33,150598,150599],{},"json.load()",[259,150601,150602,150603,29716],{},"中文 JSON 保存时加 ",[33,150604,150605],{},"ensure_ascii=False",[259,150607,150608],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150610,150612],{"id":150611},"_1013-本章练习","10.13 本章练习",[256,150614,150615,150618,150621,150624,150627],{},[259,150616,150617],{},"安装 pyecharts 并生成第一个折线图。",[259,150619,150620],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[259,150622,150623],{},"绘制两条折线，对比线上和线下销售额。",[259,150625,150626],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[259,150628,150629],{},"对含有空值的销售数据进行清洗后再绘图。",[1592,150631,150632],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":31,"searchDepth":54,"depth":54,"links":150634},[150635,150636,150637,150638,150639,150640,150641,150642,150643,150644,150645,150646,150647],{"id":148251,"depth":54,"text":148252},{"id":148326,"depth":54,"text":148327},{"id":148505,"depth":54,"text":148506},{"id":148556,"depth":54,"text":148557},{"id":148690,"depth":54,"text":148691},{"id":148966,"depth":54,"text":148967},{"id":149092,"depth":54,"text":149093},{"id":149303,"depth":54,"text":149304},{"id":149674,"depth":54,"text":149675},{"id":149886,"depth":54,"text":149887},{"id":150258,"depth":54,"text":150259},{"id":150574,"depth":54,"text":150575},{"id":150611,"depth":54,"text":150612},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148243,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150654,"title":150655,"body":150656,"description":24706,"extension":1603,"meta":153016,"navigation":57,"path":153017,"seo":153018,"stem":153019,"__hash__":153020},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150657,"toc":152993},[150658,150661,150665,150668,150671,150747,150750,150841,150844,150848,150851,150895,150908,150912,150915,150982,150985,150989,150992,151076,151084,151088,151093,151234,151237,151248,151254,151260,151374,151378,151381,151384,151637,151640,151644,151647,151751,151754,151758,151909,151913,151920,152033,152037,152040,152146,152149,152153,152156,152187,152190,152295,152298,152302,152306,152316,152384,152388,152395,152459,152462,152466,152472,152568,152577,152581,152905,152914,152918,152946,152950,152990],[10,150659,150655],{"id":150660},"_11-面向对象基础",[14,150662,150664],{"id":150663},"_111-什么是面向对象","11.1 什么是面向对象",[19,150666,150667],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150669,150670],{},"面向过程：",[26,150672,150674],{"className":31709,"code":150673,"language":31711,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[33,150675,150676,150685,150693,150697,150707,150738,150742],{"__ignoreMap":31},[36,150677,150678,150680,150682],{"class":38,"line":39},[36,150679,147867],{"class":50},[36,150681,70],{"class":42},[36,150683,150684],{"class":110}," \"小明\"\n",[36,150686,150687,150689,150691],{"class":38,"line":54},[36,150688,147877],{"class":50},[36,150690,70],{"class":42},[36,150692,147882],{"class":73},[36,150694,150695],{"class":38,"line":61},[36,150696,58],{"emptyLinePlaceholder":57},[36,150698,150699,150701,150704],{"class":38,"line":80},[36,150700,33278],{"class":42},[36,150702,150703],{"class":46}," introduce",[36,150705,150706],{"class":50},"(name, age):\n",[36,150708,150709,150711,150713,150715,150718,150720,150722,150724,150727,150729,150731,150733,150736],{"class":38,"line":96},[36,150710,32630],{"class":73},[36,150712,222],{"class":50},[36,150714,1724],{"class":42},[36,150716,150717],{"class":110},"\"我叫",[36,150719,2563],{"class":73},[36,150721,81141],{"class":50},[36,150723,2613],{"class":73},[36,150725,150726],{"class":110},"，今年",[36,150728,2563],{"class":73},[36,150730,71552],{"class":50},[36,150732,2613],{"class":73},[36,150734,150735],{"class":110},"岁\"",[36,150737,1680],{"class":50},[36,150739,150740],{"class":38,"line":101},[36,150741,58],{"emptyLinePlaceholder":57},[36,150743,150744],{"class":38,"line":128},[36,150745,150746],{"class":50},"introduce(name, age)\n",[19,150748,150749],{},"面向对象：",[26,150751,150753],{"className":31709,"code":150752,"language":31711,"meta":31,"style":31},"class Student:\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁\")\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\nstudent.introduce()\n",[33,150754,150755,150763,150771,150800,150804,150808,150818,150827,150836],{"__ignoreMap":31},[36,150756,150757,150759,150761],{"class":38,"line":39},[36,150758,16023],{"class":42},[36,150760,9372],{"class":46},[36,150762,5230],{"class":50},[36,150764,150765,150767,150769],{"class":38,"line":54},[36,150766,32132],{"class":42},[36,150768,150703],{"class":46},[36,150770,32138],{"class":50},[36,150772,150773,150775,150777,150779,150781,150784,150786,150788,150790,150792,150794,150796,150798],{"class":38,"line":61},[36,150774,33782],{"class":73},[36,150776,222],{"class":50},[36,150778,1724],{"class":42},[36,150780,150717],{"class":110},[36,150782,150783],{"class":73},"{self",[36,150785,81632],{"class":50},[36,150787,2613],{"class":73},[36,150789,150726],{"class":110},[36,150791,150783],{"class":73},[36,150793,81644],{"class":50},[36,150795,2613],{"class":73},[36,150797,150735],{"class":110},[36,150799,1680],{"class":50},[36,150801,150802],{"class":38,"line":80},[36,150803,58],{"emptyLinePlaceholder":57},[36,150805,150806],{"class":38,"line":96},[36,150807,58],{"emptyLinePlaceholder":57},[36,150809,150810,150813,150815],{"class":38,"line":101},[36,150811,150812],{"class":50},"student ",[36,150814,70],{"class":42},[36,150816,150817],{"class":50}," Student()\n",[36,150819,150820,150823,150825],{"class":38,"line":128},[36,150821,150822],{"class":50},"student.name ",[36,150824,70],{"class":42},[36,150826,150684],{"class":110},[36,150828,150829,150832,150834],{"class":38,"line":149},[36,150830,150831],{"class":50},"student.age ",[36,150833,70],{"class":42},[36,150835,147882],{"class":73},[36,150837,150838],{"class":38,"line":154},[36,150839,150840],{"class":50},"student.introduce()\n",[19,150842,150843],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150845,150847],{"id":150846},"_112-类和对象","11.2 类和对象",[19,150849,150850],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,150852,150854],{"className":31709,"code":150853,"language":31711,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[33,150855,150856,150864,150869,150873,150877,150886],{"__ignoreMap":31},[36,150857,150858,150860,150862],{"class":38,"line":39},[36,150859,16023],{"class":42},[36,150861,9372],{"class":46},[36,150863,5230],{"class":50},[36,150865,150866],{"class":38,"line":54},[36,150867,150868],{"class":42},"    pass\n",[36,150870,150871],{"class":38,"line":61},[36,150872,58],{"emptyLinePlaceholder":57},[36,150874,150875],{"class":38,"line":80},[36,150876,58],{"emptyLinePlaceholder":57},[36,150878,150879,150882,150884],{"class":38,"line":96},[36,150880,150881],{"class":50},"student1 ",[36,150883,70],{"class":42},[36,150885,150817],{"class":50},[36,150887,150888,150891,150893],{"class":38,"line":101},[36,150889,150890],{"class":50},"student2 ",[36,150892,70],{"class":42},[36,150894,150817],{"class":50},[19,150896,150897,150900,150901,102349,150904,150907],{},[33,150898,150899],{},"Student"," 是类，",[33,150902,150903],{},"student1",[33,150905,150906],{},"student2"," 是对象。",[14,150909,150911],{"id":150910},"_113-属性","11.3 属性",[19,150913,150914],{},"属性是对象保存的数据。",[26,150916,150918],{"className":31709,"code":150917,"language":31711,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[33,150919,150920,150928,150932,150936,150940,150948,150956,150964,150968,150975],{"__ignoreMap":31},[36,150921,150922,150924,150926],{"class":38,"line":39},[36,150923,16023],{"class":42},[36,150925,9372],{"class":46},[36,150927,5230],{"class":50},[36,150929,150930],{"class":38,"line":54},[36,150931,150868],{"class":42},[36,150933,150934],{"class":38,"line":61},[36,150935,58],{"emptyLinePlaceholder":57},[36,150937,150938],{"class":38,"line":80},[36,150939,58],{"emptyLinePlaceholder":57},[36,150941,150942,150944,150946],{"class":38,"line":96},[36,150943,150812],{"class":50},[36,150945,70],{"class":42},[36,150947,150817],{"class":50},[36,150949,150950,150952,150954],{"class":38,"line":101},[36,150951,150822],{"class":50},[36,150953,70],{"class":42},[36,150955,150684],{"class":110},[36,150957,150958,150960,150962],{"class":38,"line":128},[36,150959,150831],{"class":50},[36,150961,70],{"class":42},[36,150963,147882],{"class":73},[36,150965,150966],{"class":38,"line":149},[36,150967,58],{"emptyLinePlaceholder":57},[36,150969,150970,150972],{"class":38,"line":154},[36,150971,31746],{"class":73},[36,150973,150974],{"class":50},"(student.name)\n",[36,150976,150977,150979],{"class":38,"line":167},[36,150978,31746],{"class":73},[36,150980,150981],{"class":50},"(student.age)\n",[19,150983,150984],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150986,150988],{"id":150987},"_114-方法","11.4 方法",[19,150990,150991],{},"类中的函数叫方法。",[26,150993,150994],{"className":31709,"code":150752,"language":31711,"meta":31,"style":31},[33,150995,150996,151004,151012,151040,151044,151048,151056,151064,151072],{"__ignoreMap":31},[36,150997,150998,151000,151002],{"class":38,"line":39},[36,150999,16023],{"class":42},[36,151001,9372],{"class":46},[36,151003,5230],{"class":50},[36,151005,151006,151008,151010],{"class":38,"line":54},[36,151007,32132],{"class":42},[36,151009,150703],{"class":46},[36,151011,32138],{"class":50},[36,151013,151014,151016,151018,151020,151022,151024,151026,151028,151030,151032,151034,151036,151038],{"class":38,"line":61},[36,151015,33782],{"class":73},[36,151017,222],{"class":50},[36,151019,1724],{"class":42},[36,151021,150717],{"class":110},[36,151023,150783],{"class":73},[36,151025,81632],{"class":50},[36,151027,2613],{"class":73},[36,151029,150726],{"class":110},[36,151031,150783],{"class":73},[36,151033,81644],{"class":50},[36,151035,2613],{"class":73},[36,151037,150735],{"class":110},[36,151039,1680],{"class":50},[36,151041,151042],{"class":38,"line":80},[36,151043,58],{"emptyLinePlaceholder":57},[36,151045,151046],{"class":38,"line":96},[36,151047,58],{"emptyLinePlaceholder":57},[36,151049,151050,151052,151054],{"class":38,"line":101},[36,151051,150812],{"class":50},[36,151053,70],{"class":42},[36,151055,150817],{"class":50},[36,151057,151058,151060,151062],{"class":38,"line":128},[36,151059,150822],{"class":50},[36,151061,70],{"class":42},[36,151063,150684],{"class":110},[36,151065,151066,151068,151070],{"class":38,"line":149},[36,151067,150831],{"class":50},[36,151069,70],{"class":42},[36,151071,147882],{"class":73},[36,151073,151074],{"class":38,"line":154},[36,151075,150840],{"class":50},[19,151077,151078,151080,151081,151083],{},[33,151079,32154],{}," 表示当前对象。调用方法时不需要手动传入 ",[33,151082,32154],{},"，Python 会自动传。",[14,151085,151087],{"id":151086},"_115-构造方法__init__","11.5 构造方法__init__",[19,151089,151090,151092],{},[33,151091,32160],{}," 在对象创建时自动执行，用于初始化属性。",[26,151094,151096],{"className":31709,"code":151095,"language":31711,"meta":31,"style":31},"class Student:\n    def __init__(self, name, age, score):\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def introduce(self):\n        print(f\"我叫{self.name}，今年{self.age}岁，成绩{self.score}\")\n\n\nstudent = Student(\"小明\", 18, 95)\nstudent.introduce()\n",[33,151097,151098,151106,151115,151127,151139,151150,151154,151162,151200,151204,151208,151230],{"__ignoreMap":31},[36,151099,151100,151102,151104],{"class":38,"line":39},[36,151101,16023],{"class":42},[36,151103,9372],{"class":46},[36,151105,5230],{"class":50},[36,151107,151108,151110,151112],{"class":38,"line":54},[36,151109,32132],{"class":42},[36,151111,32135],{"class":73},[36,151113,151114],{"class":50},"(self, name, age, score):\n",[36,151116,151117,151119,151122,151124],{"class":38,"line":61},[36,151118,32176],{"class":73},[36,151120,151121],{"class":50},".name ",[36,151123,70],{"class":42},[36,151125,151126],{"class":50}," name\n",[36,151128,151129,151131,151134,151136],{"class":38,"line":80},[36,151130,32176],{"class":73},[36,151132,151133],{"class":50},".age ",[36,151135,70],{"class":42},[36,151137,151138],{"class":50}," age\n",[36,151140,151141,151143,151146,151148],{"class":38,"line":96},[36,151142,32176],{"class":73},[36,151144,151145],{"class":50},".score ",[36,151147,70],{"class":42},[36,151149,3108],{"class":50},[36,151151,151152],{"class":38,"line":101},[36,151153,58],{"emptyLinePlaceholder":57},[36,151155,151156,151158,151160],{"class":38,"line":128},[36,151157,32132],{"class":42},[36,151159,150703],{"class":46},[36,151161,32138],{"class":50},[36,151163,151164,151166,151168,151170,151172,151174,151176,151178,151180,151182,151184,151186,151189,151191,151194,151196,151198],{"class":38,"line":149},[36,151165,33782],{"class":73},[36,151167,222],{"class":50},[36,151169,1724],{"class":42},[36,151171,150717],{"class":110},[36,151173,150783],{"class":73},[36,151175,81632],{"class":50},[36,151177,2613],{"class":73},[36,151179,150726],{"class":110},[36,151181,150783],{"class":73},[36,151183,81644],{"class":50},[36,151185,2613],{"class":73},[36,151187,151188],{"class":110},"岁，成绩",[36,151190,150783],{"class":73},[36,151192,151193],{"class":50},".score",[36,151195,2613],{"class":73},[36,151197,1919],{"class":110},[36,151199,1680],{"class":50},[36,151201,151202],{"class":38,"line":154},[36,151203,58],{"emptyLinePlaceholder":57},[36,151205,151206],{"class":38,"line":167},[36,151207,58],{"emptyLinePlaceholder":57},[36,151209,151210,151212,151214,151217,151220,151222,151224,151226,151228],{"class":38,"line":172},[36,151211,150812],{"class":50},[36,151213,70],{"class":42},[36,151215,151216],{"class":50}," Student(",[36,151218,151219],{"class":110},"\"小明\"",[36,151221,477],{"class":50},[36,151223,2317],{"class":73},[36,151225,477],{"class":50},[36,151227,2656],{"class":73},[36,151229,1680],{"class":50},[36,151231,151232],{"class":38,"line":192},[36,151233,150840],{"class":50},[19,151235,151236],{},"构造方法的好处：",[256,151238,151239,151242,151245],{},[259,151240,151241],{},"创建对象时必须提供必要数据。",[259,151243,151244],{},"属性初始化集中，不容易漏。",[259,151246,151247],{},"对象状态更完整。",[14,151249,151251,151252],{"id":151250},"_116-str","11.6 ",[887,151253,2835],{},[19,151255,151256,151257,29716],{},"直接打印对象时，默认输出不直观。可以定义 ",[33,151258,151259],{},"__str__",[26,151261,151263],{"className":31709,"code":151262,"language":31711,"meta":31,"style":31},"class Student:\n    def __init__(self, name, age):\n        self.name = name\n        self.age = age\n\n    def __str__(self):\n        return f\"Student(name={self.name}, age={self.age})\"\n\n\nstudent = Student(\"小明\", 18)\nprint(student)\n",[33,151264,151265,151273,151282,151292,151302,151306,151315,151343,151347,151351,151367],{"__ignoreMap":31},[36,151266,151267,151269,151271],{"class":38,"line":39},[36,151268,16023],{"class":42},[36,151270,9372],{"class":46},[36,151272,5230],{"class":50},[36,151274,151275,151277,151279],{"class":38,"line":54},[36,151276,32132],{"class":42},[36,151278,32135],{"class":73},[36,151280,151281],{"class":50},"(self, name, age):\n",[36,151283,151284,151286,151288,151290],{"class":38,"line":61},[36,151285,32176],{"class":73},[36,151287,151121],{"class":50},[36,151289,70],{"class":42},[36,151291,151126],{"class":50},[36,151293,151294,151296,151298,151300],{"class":38,"line":80},[36,151295,32176],{"class":73},[36,151297,151133],{"class":50},[36,151299,70],{"class":42},[36,151301,151138],{"class":50},[36,151303,151304],{"class":38,"line":96},[36,151305,58],{"emptyLinePlaceholder":57},[36,151307,151308,151310,151313],{"class":38,"line":101},[36,151309,32132],{"class":42},[36,151311,151312],{"class":73}," __str__",[36,151314,32138],{"class":50},[36,151316,151317,151319,151322,151325,151327,151329,151331,151334,151336,151338,151340],{"class":38,"line":128},[36,151318,16081],{"class":42},[36,151320,151321],{"class":42}," f",[36,151323,151324],{"class":110},"\"Student(name=",[36,151326,150783],{"class":73},[36,151328,81632],{"class":50},[36,151330,2613],{"class":73},[36,151332,151333],{"class":110},", age=",[36,151335,150783],{"class":73},[36,151337,81644],{"class":50},[36,151339,2613],{"class":73},[36,151341,151342],{"class":110},")\"\n",[36,151344,151345],{"class":38,"line":149},[36,151346,58],{"emptyLinePlaceholder":57},[36,151348,151349],{"class":38,"line":154},[36,151350,58],{"emptyLinePlaceholder":57},[36,151352,151353,151355,151357,151359,151361,151363,151365],{"class":38,"line":167},[36,151354,150812],{"class":50},[36,151356,70],{"class":42},[36,151358,151216],{"class":50},[36,151360,151219],{"class":110},[36,151362,477],{"class":50},[36,151364,2317],{"class":73},[36,151366,1680],{"class":50},[36,151368,151369,151371],{"class":38,"line":172},[36,151370,31746],{"class":73},[36,151372,151373],{"class":50},"(student)\n",[14,151375,151377],{"id":151376},"_117-封装","11.7 封装",[19,151379,151380],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151382,151383],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,151385,151387],{"className":31709,"code":151386,"language":31711,"meta":31,"style":31},"class Account:\n    def __init__(self, owner, balance):\n        self.owner = owner\n        self.__balance = balance\n\n    def get_balance(self):\n        return self.__balance\n\n    def deposit(self, money):\n        if money \u003C= 0:\n            print(\"存款金额必须大于0\")\n            return\n        self.__balance += money\n\n    def withdraw(self, money):\n        if money \u003C= 0:\n            print(\"取款金额必须大于0\")\n            return\n        if money > self.__balance:\n            print(\"余额不足\")\n            return\n        self.__balance -= money\n\n\naccount = Account(\"小明\", 1000)\naccount.deposit(200)\naccount.withdraw(100)\nprint(account.get_balance())\n",[33,151388,151389,151398,151407,151419,151431,151435,151444,151453,151457,151467,151480,151491,151496,151507,151511,151520,151532,151543,151547,151560,151571,151575,151586,151590,151594,151612,151621,151630],{"__ignoreMap":31},[36,151390,151391,151393,151396],{"class":38,"line":39},[36,151392,16023],{"class":42},[36,151394,151395],{"class":46}," Account",[36,151397,5230],{"class":50},[36,151399,151400,151402,151404],{"class":38,"line":54},[36,151401,32132],{"class":42},[36,151403,32135],{"class":73},[36,151405,151406],{"class":50},"(self, owner, balance):\n",[36,151408,151409,151411,151414,151416],{"class":38,"line":61},[36,151410,32176],{"class":73},[36,151412,151413],{"class":50},".owner ",[36,151415,70],{"class":42},[36,151417,151418],{"class":50}," owner\n",[36,151420,151421,151423,151426,151428],{"class":38,"line":80},[36,151422,32176],{"class":73},[36,151424,151425],{"class":50},".__balance ",[36,151427,70],{"class":42},[36,151429,151430],{"class":50}," balance\n",[36,151432,151433],{"class":38,"line":96},[36,151434,58],{"emptyLinePlaceholder":57},[36,151436,151437,151439,151442],{"class":38,"line":101},[36,151438,32132],{"class":42},[36,151440,151441],{"class":46}," get_balance",[36,151443,32138],{"class":50},[36,151445,151446,151448,151450],{"class":38,"line":128},[36,151447,16081],{"class":42},[36,151449,40204],{"class":73},[36,151451,151452],{"class":50},".__balance\n",[36,151454,151455],{"class":38,"line":149},[36,151456,58],{"emptyLinePlaceholder":57},[36,151458,151459,151461,151464],{"class":38,"line":154},[36,151460,32132],{"class":42},[36,151462,151463],{"class":46}," deposit",[36,151465,151466],{"class":50},"(self, money):\n",[36,151468,151469,151471,151474,151476,151478],{"class":38,"line":167},[36,151470,3999],{"class":42},[36,151472,151473],{"class":50}," money ",[36,151475,3117],{"class":42},[36,151477,242],{"class":73},[36,151479,5230],{"class":50},[36,151481,151482,151484,151486,151489],{"class":38,"line":172},[36,151483,35981],{"class":73},[36,151485,222],{"class":50},[36,151487,151488],{"class":110},"\"存款金额必须大于0\"",[36,151490,1680],{"class":50},[36,151492,151493],{"class":38,"line":192},[36,151494,151495],{"class":42},"            return\n",[36,151497,151498,151500,151502,151504],{"class":38,"line":211},[36,151499,32176],{"class":73},[36,151501,151425],{"class":50},[36,151503,10945],{"class":42},[36,151505,151506],{"class":50}," money\n",[36,151508,151509],{"class":38,"line":216},[36,151510,58],{"emptyLinePlaceholder":57},[36,151512,151513,151515,151518],{"class":38,"line":231},[36,151514,32132],{"class":42},[36,151516,151517],{"class":46}," withdraw",[36,151519,151466],{"class":50},[36,151521,151522,151524,151526,151528,151530],{"class":38,"line":236},[36,151523,3999],{"class":42},[36,151525,151473],{"class":50},[36,151527,3117],{"class":42},[36,151529,242],{"class":73},[36,151531,5230],{"class":50},[36,151533,151534,151536,151538,151541],{"class":38,"line":247},[36,151535,35981],{"class":73},[36,151537,222],{"class":50},[36,151539,151540],{"class":110},"\"取款金额必须大于0\"",[36,151542,1680],{"class":50},[36,151544,151545],{"class":38,"line":637},[36,151546,151495],{"class":42},[36,151548,151549,151551,151553,151555,151557],{"class":38,"line":646},[36,151550,3999],{"class":42},[36,151552,151473],{"class":50},[36,151554,2627],{"class":42},[36,151556,40204],{"class":73},[36,151558,151559],{"class":50},".__balance:\n",[36,151561,151562,151564,151566,151569],{"class":38,"line":655},[36,151563,35981],{"class":73},[36,151565,222],{"class":50},[36,151567,151568],{"class":110},"\"余额不足\"",[36,151570,1680],{"class":50},[36,151572,151573],{"class":38,"line":660},[36,151574,151495],{"class":42},[36,151576,151577,151579,151581,151584],{"class":38,"line":665},[36,151578,32176],{"class":73},[36,151580,151425],{"class":50},[36,151582,151583],{"class":42},"-=",[36,151585,151506],{"class":50},[36,151587,151588],{"class":38,"line":674},[36,151589,58],{"emptyLinePlaceholder":57},[36,151591,151592],{"class":38,"line":679},[36,151593,58],{"emptyLinePlaceholder":57},[36,151595,151596,151599,151601,151604,151606,151608,151610],{"class":38,"line":692},[36,151597,151598],{"class":50},"account ",[36,151600,70],{"class":42},[36,151602,151603],{"class":50}," Account(",[36,151605,151219],{"class":110},[36,151607,477],{"class":50},[36,151609,7889],{"class":73},[36,151611,1680],{"class":50},[36,151613,151614,151617,151619],{"class":38,"line":705},[36,151615,151616],{"class":50},"account.deposit(",[36,151618,3240],{"class":73},[36,151620,1680],{"class":50},[36,151622,151623,151626,151628],{"class":38,"line":710},[36,151624,151625],{"class":50},"account.withdraw(",[36,151627,1979],{"class":73},[36,151629,1680],{"class":50},[36,151631,151632,151634],{"class":38,"line":722},[36,151633,31746],{"class":73},[36,151635,151636],{"class":50},"(account.get_balance())\n",[19,151638,151639],{},"封装的意义是避免外部随意修改内部状态。",[14,151641,151643],{"id":151642},"_118-继承","11.8 继承",[19,151645,151646],{},"继承可以让子类复用父类的属性和方法。",[26,151648,151650],{"className":31709,"code":151649,"language":31711,"meta":31,"style":31},"class Animal:\n    def eat(self):\n        print(\"吃东西\")\n\n\nclass Dog(Animal):\n    def bark(self):\n        print(\"汪汪\")\n\n\ndog = Dog()\ndog.eat()\ndog.bark()\n",[33,151651,151652,151661,151670,151681,151685,151689,151703,151712,151723,151727,151731,151741,151746],{"__ignoreMap":31},[36,151653,151654,151656,151659],{"class":38,"line":39},[36,151655,16023],{"class":42},[36,151657,151658],{"class":46}," Animal",[36,151660,5230],{"class":50},[36,151662,151663,151665,151668],{"class":38,"line":54},[36,151664,32132],{"class":42},[36,151666,151667],{"class":46}," eat",[36,151669,32138],{"class":50},[36,151671,151672,151674,151676,151679],{"class":38,"line":61},[36,151673,33782],{"class":73},[36,151675,222],{"class":50},[36,151677,151678],{"class":110},"\"吃东西\"",[36,151680,1680],{"class":50},[36,151682,151683],{"class":38,"line":80},[36,151684,58],{"emptyLinePlaceholder":57},[36,151686,151687],{"class":38,"line":96},[36,151688,58],{"emptyLinePlaceholder":57},[36,151690,151691,151693,151696,151698,151701],{"class":38,"line":101},[36,151692,16023],{"class":42},[36,151694,151695],{"class":46}," Dog",[36,151697,222],{"class":50},[36,151699,151700],{"class":46},"Animal",[36,151702,32117],{"class":50},[36,151704,151705,151707,151710],{"class":38,"line":128},[36,151706,32132],{"class":42},[36,151708,151709],{"class":46}," bark",[36,151711,32138],{"class":50},[36,151713,151714,151716,151718,151721],{"class":38,"line":149},[36,151715,33782],{"class":73},[36,151717,222],{"class":50},[36,151719,151720],{"class":110},"\"汪汪\"",[36,151722,1680],{"class":50},[36,151724,151725],{"class":38,"line":154},[36,151726,58],{"emptyLinePlaceholder":57},[36,151728,151729],{"class":38,"line":167},[36,151730,58],{"emptyLinePlaceholder":57},[36,151732,151733,151736,151738],{"class":38,"line":172},[36,151734,151735],{"class":50},"dog ",[36,151737,70],{"class":42},[36,151739,151740],{"class":50}," Dog()\n",[36,151742,151743],{"class":38,"line":192},[36,151744,151745],{"class":50},"dog.eat()\n",[36,151747,151748],{"class":38,"line":211},[36,151749,151750],{"class":50},"dog.bark()\n",[19,151752,151753],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151755,151757],{"id":151756},"_119-方法重写","11.9 方法重写",[26,151759,151761],{"className":31709,"code":151760,"language":31711,"meta":31,"style":31},"class Animal:\n    def speak(self):\n        print(\"动物叫\")\n\n\nclass Dog(Animal):\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat(Animal):\n    def speak(self):\n        print(\"喵喵\")\n\n\ndog = Dog()\ncat = Cat()\n\ndog.speak()\ncat.speak()\n",[33,151762,151763,151771,151780,151791,151795,151799,151811,151819,151829,151833,151837,151850,151858,151869,151873,151877,151885,151895,151899,151904],{"__ignoreMap":31},[36,151764,151765,151767,151769],{"class":38,"line":39},[36,151766,16023],{"class":42},[36,151768,151658],{"class":46},[36,151770,5230],{"class":50},[36,151772,151773,151775,151778],{"class":38,"line":54},[36,151774,32132],{"class":42},[36,151776,151777],{"class":46}," speak",[36,151779,32138],{"class":50},[36,151781,151782,151784,151786,151789],{"class":38,"line":61},[36,151783,33782],{"class":73},[36,151785,222],{"class":50},[36,151787,151788],{"class":110},"\"动物叫\"",[36,151790,1680],{"class":50},[36,151792,151793],{"class":38,"line":80},[36,151794,58],{"emptyLinePlaceholder":57},[36,151796,151797],{"class":38,"line":96},[36,151798,58],{"emptyLinePlaceholder":57},[36,151800,151801,151803,151805,151807,151809],{"class":38,"line":101},[36,151802,16023],{"class":42},[36,151804,151695],{"class":46},[36,151806,222],{"class":50},[36,151808,151700],{"class":46},[36,151810,32117],{"class":50},[36,151812,151813,151815,151817],{"class":38,"line":128},[36,151814,32132],{"class":42},[36,151816,151777],{"class":46},[36,151818,32138],{"class":50},[36,151820,151821,151823,151825,151827],{"class":38,"line":149},[36,151822,33782],{"class":73},[36,151824,222],{"class":50},[36,151826,151720],{"class":110},[36,151828,1680],{"class":50},[36,151830,151831],{"class":38,"line":154},[36,151832,58],{"emptyLinePlaceholder":57},[36,151834,151835],{"class":38,"line":167},[36,151836,58],{"emptyLinePlaceholder":57},[36,151838,151839,151841,151844,151846,151848],{"class":38,"line":172},[36,151840,16023],{"class":42},[36,151842,151843],{"class":46}," Cat",[36,151845,222],{"class":50},[36,151847,151700],{"class":46},[36,151849,32117],{"class":50},[36,151851,151852,151854,151856],{"class":38,"line":192},[36,151853,32132],{"class":42},[36,151855,151777],{"class":46},[36,151857,32138],{"class":50},[36,151859,151860,151862,151864,151867],{"class":38,"line":211},[36,151861,33782],{"class":73},[36,151863,222],{"class":50},[36,151865,151866],{"class":110},"\"喵喵\"",[36,151868,1680],{"class":50},[36,151870,151871],{"class":38,"line":216},[36,151872,58],{"emptyLinePlaceholder":57},[36,151874,151875],{"class":38,"line":231},[36,151876,58],{"emptyLinePlaceholder":57},[36,151878,151879,151881,151883],{"class":38,"line":236},[36,151880,151735],{"class":50},[36,151882,70],{"class":42},[36,151884,151740],{"class":50},[36,151886,151887,151890,151892],{"class":38,"line":247},[36,151888,151889],{"class":50},"cat ",[36,151891,70],{"class":42},[36,151893,151894],{"class":50}," Cat()\n",[36,151896,151897],{"class":38,"line":637},[36,151898,58],{"emptyLinePlaceholder":57},[36,151900,151901],{"class":38,"line":646},[36,151902,151903],{"class":50},"dog.speak()\n",[36,151905,151906],{"class":38,"line":655},[36,151907,151908],{"class":50},"cat.speak()\n",[14,151910,151912],{"id":151911},"_1110-super","11.10 super",[19,151914,151915,151916,151919],{},"子类可以通过 ",[33,151917,151918],{},"super()"," 调用父类方法。",[26,151921,151923],{"className":31709,"code":151922,"language":31711,"meta":31,"style":31},"class Person:\n    def __init__(self, name):\n        self.name = name\n\n\nclass Student(Person):\n    def __init__(self, name, score):\n        super().__init__(name)\n        self.score = score\n\n\nstudent = Student(\"小明\", 95)\nprint(student.name, student.score)\n",[33,151924,151925,151933,151942,151952,151956,151960,151972,151981,151992,152002,152006,152010,152026],{"__ignoreMap":31},[36,151926,151927,151929,151931],{"class":38,"line":39},[36,151928,16023],{"class":42},[36,151930,16898],{"class":46},[36,151932,5230],{"class":50},[36,151934,151935,151937,151939],{"class":38,"line":54},[36,151936,32132],{"class":42},[36,151938,32135],{"class":73},[36,151940,151941],{"class":50},"(self, name):\n",[36,151943,151944,151946,151948,151950],{"class":38,"line":61},[36,151945,32176],{"class":73},[36,151947,151121],{"class":50},[36,151949,70],{"class":42},[36,151951,151126],{"class":50},[36,151953,151954],{"class":38,"line":80},[36,151955,58],{"emptyLinePlaceholder":57},[36,151957,151958],{"class":38,"line":96},[36,151959,58],{"emptyLinePlaceholder":57},[36,151961,151962,151964,151966,151968,151970],{"class":38,"line":101},[36,151963,16023],{"class":42},[36,151965,9372],{"class":46},[36,151967,222],{"class":50},[36,151969,20375],{"class":46},[36,151971,32117],{"class":50},[36,151973,151974,151976,151978],{"class":38,"line":128},[36,151975,32132],{"class":42},[36,151977,32135],{"class":73},[36,151979,151980],{"class":50},"(self, name, score):\n",[36,151982,151983,151985,151987,151989],{"class":38,"line":149},[36,151984,32148],{"class":73},[36,151986,18590],{"class":50},[36,151988,32160],{"class":73},[36,151990,151991],{"class":50},"(name)\n",[36,151993,151994,151996,151998,152000],{"class":38,"line":154},[36,151995,32176],{"class":73},[36,151997,151145],{"class":50},[36,151999,70],{"class":42},[36,152001,3108],{"class":50},[36,152003,152004],{"class":38,"line":167},[36,152005,58],{"emptyLinePlaceholder":57},[36,152007,152008],{"class":38,"line":172},[36,152009,58],{"emptyLinePlaceholder":57},[36,152011,152012,152014,152016,152018,152020,152022,152024],{"class":38,"line":192},[36,152013,150812],{"class":50},[36,152015,70],{"class":42},[36,152017,151216],{"class":50},[36,152019,151219],{"class":110},[36,152021,477],{"class":50},[36,152023,2656],{"class":73},[36,152025,1680],{"class":50},[36,152027,152028,152030],{"class":38,"line":211},[36,152029,31746],{"class":73},[36,152031,152032],{"class":50},"(student.name, student.score)\n",[14,152034,152036],{"id":152035},"_1111-多态","11.11 多态",[19,152038,152039],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,152041,152043],{"className":31709,"code":152042,"language":31711,"meta":31,"style":31},"class Dog:\n    def speak(self):\n        print(\"汪汪\")\n\n\nclass Cat:\n    def speak(self):\n        print(\"喵喵\")\n\n\ndef make_sound(animal):\n    animal.speak()\n\n\nmake_sound(Dog())\nmake_sound(Cat())\n",[33,152044,152045,152053,152061,152071,152075,152079,152087,152095,152105,152109,152113,152123,152128,152132,152136,152141],{"__ignoreMap":31},[36,152046,152047,152049,152051],{"class":38,"line":39},[36,152048,16023],{"class":42},[36,152050,151695],{"class":46},[36,152052,5230],{"class":50},[36,152054,152055,152057,152059],{"class":38,"line":54},[36,152056,32132],{"class":42},[36,152058,151777],{"class":46},[36,152060,32138],{"class":50},[36,152062,152063,152065,152067,152069],{"class":38,"line":61},[36,152064,33782],{"class":73},[36,152066,222],{"class":50},[36,152068,151720],{"class":110},[36,152070,1680],{"class":50},[36,152072,152073],{"class":38,"line":80},[36,152074,58],{"emptyLinePlaceholder":57},[36,152076,152077],{"class":38,"line":96},[36,152078,58],{"emptyLinePlaceholder":57},[36,152080,152081,152083,152085],{"class":38,"line":101},[36,152082,16023],{"class":42},[36,152084,151843],{"class":46},[36,152086,5230],{"class":50},[36,152088,152089,152091,152093],{"class":38,"line":128},[36,152090,32132],{"class":42},[36,152092,151777],{"class":46},[36,152094,32138],{"class":50},[36,152096,152097,152099,152101,152103],{"class":38,"line":149},[36,152098,33782],{"class":73},[36,152100,222],{"class":50},[36,152102,151866],{"class":110},[36,152104,1680],{"class":50},[36,152106,152107],{"class":38,"line":154},[36,152108,58],{"emptyLinePlaceholder":57},[36,152110,152111],{"class":38,"line":167},[36,152112,58],{"emptyLinePlaceholder":57},[36,152114,152115,152117,152120],{"class":38,"line":172},[36,152116,33278],{"class":42},[36,152118,152119],{"class":46}," make_sound",[36,152121,152122],{"class":50},"(animal):\n",[36,152124,152125],{"class":38,"line":192},[36,152126,152127],{"class":50},"    animal.speak()\n",[36,152129,152130],{"class":38,"line":211},[36,152131,58],{"emptyLinePlaceholder":57},[36,152133,152134],{"class":38,"line":216},[36,152135,58],{"emptyLinePlaceholder":57},[36,152137,152138],{"class":38,"line":231},[36,152139,152140],{"class":50},"make_sound(Dog())\n",[36,152142,152143],{"class":38,"line":236},[36,152144,152145],{"class":50},"make_sound(Cat())\n",[19,152147,152148],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152150,152152],{"id":152151},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152154,152155],{},"实例属性属于对象：",[26,152157,152159],{"className":31709,"code":152158,"language":31711,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[33,152160,152161,152169,152177],{"__ignoreMap":31},[36,152162,152163,152165,152167],{"class":38,"line":39},[36,152164,16023],{"class":42},[36,152166,9372],{"class":46},[36,152168,5230],{"class":50},[36,152170,152171,152173,152175],{"class":38,"line":54},[36,152172,32132],{"class":42},[36,152174,32135],{"class":73},[36,152176,151941],{"class":50},[36,152178,152179,152181,152183,152185],{"class":38,"line":61},[36,152180,32176],{"class":73},[36,152182,151121],{"class":50},[36,152184,70],{"class":42},[36,152186,151126],{"class":50},[19,152188,152189],{},"类属性属于类，所有对象共享：",[26,152191,152193],{"className":31709,"code":152192,"language":31711,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    def __init__(self, name):\n        self.name = name\n\n\ns1 = Student(\"小明\")\ns2 = Student(\"小红\")\n\nprint(s1.school)\nprint(s2.school)\nprint(Student.school)\n",[33,152194,152195,152203,152213,152217,152225,152235,152239,152243,152256,152270,152274,152281,152288],{"__ignoreMap":31},[36,152196,152197,152199,152201],{"class":38,"line":39},[36,152198,16023],{"class":42},[36,152200,9372],{"class":46},[36,152202,5230],{"class":50},[36,152204,152205,152208,152210],{"class":38,"line":54},[36,152206,152207],{"class":50},"    school ",[36,152209,70],{"class":42},[36,152211,152212],{"class":110}," \"黑马学校\"\n",[36,152214,152215],{"class":38,"line":61},[36,152216,58],{"emptyLinePlaceholder":57},[36,152218,152219,152221,152223],{"class":38,"line":80},[36,152220,32132],{"class":42},[36,152222,32135],{"class":73},[36,152224,151941],{"class":50},[36,152226,152227,152229,152231,152233],{"class":38,"line":96},[36,152228,32176],{"class":73},[36,152230,151121],{"class":50},[36,152232,70],{"class":42},[36,152234,151126],{"class":50},[36,152236,152237],{"class":38,"line":101},[36,152238,58],{"emptyLinePlaceholder":57},[36,152240,152241],{"class":38,"line":128},[36,152242,58],{"emptyLinePlaceholder":57},[36,152244,152245,152248,152250,152252,152254],{"class":38,"line":149},[36,152246,152247],{"class":50},"s1 ",[36,152249,70],{"class":42},[36,152251,151216],{"class":50},[36,152253,151219],{"class":110},[36,152255,1680],{"class":50},[36,152257,152258,152261,152263,152265,152268],{"class":38,"line":154},[36,152259,152260],{"class":50},"s2 ",[36,152262,70],{"class":42},[36,152264,151216],{"class":50},[36,152266,152267],{"class":110},"\"小红\"",[36,152269,1680],{"class":50},[36,152271,152272],{"class":38,"line":167},[36,152273,58],{"emptyLinePlaceholder":57},[36,152275,152276,152278],{"class":38,"line":172},[36,152277,31746],{"class":73},[36,152279,152280],{"class":50},"(s1.school)\n",[36,152282,152283,152285],{"class":38,"line":192},[36,152284,31746],{"class":73},[36,152286,152287],{"class":50},"(s2.school)\n",[36,152289,152290,152292],{"class":38,"line":211},[36,152291,31746],{"class":73},[36,152293,152294],{"class":50},"(Student.school)\n",[19,152296,152297],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152299,152301],{"id":152300},"_1113-类方法和静态方法","11.13 类方法和静态方法",[1645,152303,152305],{"id":152304},"_11131-类方法","11.13.1 类方法",[19,152307,152308,152309,152312,152313,29716],{},"类方法使用 ",[33,152310,152311],{},"@classmethod","，第一个参数通常是 ",[33,152314,152315],{},"cls",[26,152317,152319],{"className":31709,"code":152318,"language":31711,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[33,152320,152321,152329,152337,152341,152349,152359,152369,152373,152377],{"__ignoreMap":31},[36,152322,152323,152325,152327],{"class":38,"line":39},[36,152324,16023],{"class":42},[36,152326,9372],{"class":46},[36,152328,5230],{"class":50},[36,152330,152331,152333,152335],{"class":38,"line":54},[36,152332,152207],{"class":50},[36,152334,70],{"class":42},[36,152336,152212],{"class":110},[36,152338,152339],{"class":38,"line":61},[36,152340,58],{"emptyLinePlaceholder":57},[36,152342,152343,152346],{"class":38,"line":80},[36,152344,152345],{"class":46},"    @",[36,152347,152348],{"class":73},"classmethod\n",[36,152350,152351,152353,152356],{"class":38,"line":96},[36,152352,32132],{"class":42},[36,152354,152355],{"class":46}," get_school",[36,152357,152358],{"class":50},"(cls):\n",[36,152360,152361,152363,152366],{"class":38,"line":101},[36,152362,16081],{"class":42},[36,152364,152365],{"class":73}," cls",[36,152367,152368],{"class":50},".school\n",[36,152370,152371],{"class":38,"line":128},[36,152372,58],{"emptyLinePlaceholder":57},[36,152374,152375],{"class":38,"line":149},[36,152376,58],{"emptyLinePlaceholder":57},[36,152378,152379,152381],{"class":38,"line":154},[36,152380,31746],{"class":73},[36,152382,152383],{"class":50},"(Student.get_school())\n",[1645,152385,152387],{"id":152386},"_11132-静态方法","11.13.2 静态方法",[19,152389,152390,152391,152394],{},"静态方法使用 ",[33,152392,152393],{},"@staticmethod","，不需要访问实例和类。",[26,152396,152398],{"className":31709,"code":152397,"language":31711,"meta":31,"style":31},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[33,152399,152400,152409,152416,152425,152436,152440,152444],{"__ignoreMap":31},[36,152401,152402,152404,152407],{"class":38,"line":39},[36,152403,16023],{"class":42},[36,152405,152406],{"class":46}," MathUtils",[36,152408,5230],{"class":50},[36,152410,152411,152413],{"class":38,"line":54},[36,152412,152345],{"class":46},[36,152414,152415],{"class":73},"staticmethod\n",[36,152417,152418,152420,152422],{"class":38,"line":61},[36,152419,32132],{"class":42},[36,152421,6698],{"class":46},[36,152423,152424],{"class":50},"(a, b):\n",[36,152426,152427,152429,152431,152433],{"class":38,"line":80},[36,152428,16081],{"class":42},[36,152430,67],{"class":50},[36,152432,2148],{"class":42},[36,152434,152435],{"class":50}," b\n",[36,152437,152438],{"class":38,"line":96},[36,152439,58],{"emptyLinePlaceholder":57},[36,152441,152442],{"class":38,"line":101},[36,152443,58],{"emptyLinePlaceholder":57},[36,152445,152446,152448,152451,152453,152455,152457],{"class":38,"line":128},[36,152447,31746],{"class":73},[36,152449,152450],{"class":50},"(MathUtils.add(",[36,152452,1885],{"class":73},[36,152454,477],{"class":50},[36,152456,1747],{"class":73},[36,152458,31828],{"class":50},[19,152460,152461],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152463,152465],{"id":152464},"_1114-dataclass","11.14 dataclass",[19,152467,152468,152471],{},[33,152469,152470],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,152473,152475],{"className":31709,"code":152474,"language":31711,"meta":31,"style":31},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    name: str\n    age: int\n    score: float\n\n\nstudent = Student(\"小明\", 18, 95)\nprint(student)\n",[33,152476,152477,152489,152493,152497,152502,152510,152518,152526,152534,152538,152542,152562],{"__ignoreMap":31},[36,152478,152479,152481,152484,152486],{"class":38,"line":39},[36,152480,32068],{"class":42},[36,152482,152483],{"class":50}," dataclasses ",[36,152485,31723],{"class":42},[36,152487,152488],{"class":50}," dataclass\n",[36,152490,152491],{"class":38,"line":54},[36,152492,58],{"emptyLinePlaceholder":57},[36,152494,152495],{"class":38,"line":61},[36,152496,58],{"emptyLinePlaceholder":57},[36,152498,152499],{"class":38,"line":80},[36,152500,152501],{"class":46},"@dataclass\n",[36,152503,152504,152506,152508],{"class":38,"line":96},[36,152505,16023],{"class":42},[36,152507,9372],{"class":46},[36,152509,5230],{"class":50},[36,152511,152512,152515],{"class":38,"line":101},[36,152513,152514],{"class":50},"    name: ",[36,152516,152517],{"class":73},"str\n",[36,152519,152520,152523],{"class":38,"line":128},[36,152521,152522],{"class":50},"    age: ",[36,152524,152525],{"class":73},"int\n",[36,152527,152528,152531],{"class":38,"line":149},[36,152529,152530],{"class":50},"    score: ",[36,152532,152533],{"class":73},"float\n",[36,152535,152536],{"class":38,"line":154},[36,152537,58],{"emptyLinePlaceholder":57},[36,152539,152540],{"class":38,"line":167},[36,152541,58],{"emptyLinePlaceholder":57},[36,152543,152544,152546,152548,152550,152552,152554,152556,152558,152560],{"class":38,"line":172},[36,152545,150812],{"class":50},[36,152547,70],{"class":42},[36,152549,151216],{"class":50},[36,152551,151219],{"class":110},[36,152553,477],{"class":50},[36,152555,2317],{"class":73},[36,152557,477],{"class":50},[36,152559,2656],{"class":73},[36,152561,1680],{"class":50},[36,152563,152564,152566],{"class":38,"line":192},[36,152565,31746],{"class":73},[36,152567,151373],{"class":50},[19,152569,152570,152571,1880,152573,152576],{},"它会自动生成 ",[33,152572,32160],{},[33,152574,152575],{},"__repr__"," 等方法。适合数据模型类。",[14,152578,152580],{"id":152579},"_1115-小案例学生类","11.15 小案例：学生类",[26,152582,152584],{"className":31709,"code":152583,"language":31711,"meta":31,"style":31},"class Student:\n    def __init__(self, student_id, name, age, score):\n        self.student_id = student_id\n        self.name = name\n        self.age = age\n        self.score = score\n\n    def is_passed(self):\n        return self.score >= 60\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n\n    def __str__(self):\n        return f\"{self.student_id} {self.name} {self.age} {self.score}\"\n\n\nstudent = Student(\"001\", \"小明\", 18, 95)\nprint(student.is_passed())\nprint(student.to_dict())\n",[33,152585,152586,152594,152603,152615,152625,152635,152645,152649,152658,152671,152675,152684,152690,152702,152714,152726,152738,152742,152746,152752,152762,152771,152781,152789,152797,152806,152810,152814,152822,152858,152862,152866,152891,152898],{"__ignoreMap":31},[36,152587,152588,152590,152592],{"class":38,"line":39},[36,152589,16023],{"class":42},[36,152591,9372],{"class":46},[36,152593,5230],{"class":50},[36,152595,152596,152598,152600],{"class":38,"line":54},[36,152597,32132],{"class":42},[36,152599,32135],{"class":73},[36,152601,152602],{"class":50},"(self, student_id, name, age, score):\n",[36,152604,152605,152607,152610,152612],{"class":38,"line":61},[36,152606,32176],{"class":73},[36,152608,152609],{"class":50},".student_id ",[36,152611,70],{"class":42},[36,152613,152614],{"class":50}," student_id\n",[36,152616,152617,152619,152621,152623],{"class":38,"line":80},[36,152618,32176],{"class":73},[36,152620,151121],{"class":50},[36,152622,70],{"class":42},[36,152624,151126],{"class":50},[36,152626,152627,152629,152631,152633],{"class":38,"line":96},[36,152628,32176],{"class":73},[36,152630,151133],{"class":50},[36,152632,70],{"class":42},[36,152634,151138],{"class":50},[36,152636,152637,152639,152641,152643],{"class":38,"line":101},[36,152638,32176],{"class":73},[36,152640,151145],{"class":50},[36,152642,70],{"class":42},[36,152644,3108],{"class":50},[36,152646,152647],{"class":38,"line":128},[36,152648,58],{"emptyLinePlaceholder":57},[36,152650,152651,152653,152656],{"class":38,"line":149},[36,152652,32132],{"class":42},[36,152654,152655],{"class":46}," is_passed",[36,152657,32138],{"class":50},[36,152659,152660,152662,152664,152666,152668],{"class":38,"line":154},[36,152661,16081],{"class":42},[36,152663,40204],{"class":73},[36,152665,151145],{"class":50},[36,152667,3228],{"class":42},[36,152669,152670],{"class":73}," 60\n",[36,152672,152673],{"class":38,"line":167},[36,152674,58],{"emptyLinePlaceholder":57},[36,152676,152677,152679,152682],{"class":38,"line":172},[36,152678,32132],{"class":42},[36,152680,152681],{"class":46}," to_dict",[36,152683,32138],{"class":50},[36,152685,152686,152688],{"class":38,"line":192},[36,152687,16081],{"class":42},[36,152689,16901],{"class":50},[36,152691,152692,152695,152697,152699],{"class":38,"line":211},[36,152693,152694],{"class":110},"            \"student_id\"",[36,152696,52768],{"class":50},[36,152698,32154],{"class":73},[36,152700,152701],{"class":50},".student_id,\n",[36,152703,152704,152707,152709,152711],{"class":38,"line":216},[36,152705,152706],{"class":110},"            \"name\"",[36,152708,52768],{"class":50},[36,152710,32154],{"class":73},[36,152712,152713],{"class":50},".name,\n",[36,152715,152716,152719,152721,152723],{"class":38,"line":231},[36,152717,152718],{"class":110},"            \"age\"",[36,152720,52768],{"class":50},[36,152722,32154],{"class":73},[36,152724,152725],{"class":50},".age,\n",[36,152727,152728,152731,152733,152735],{"class":38,"line":236},[36,152729,152730],{"class":110},"            \"score\"",[36,152732,52768],{"class":50},[36,152734,32154],{"class":73},[36,152736,152737],{"class":50},".score,\n",[36,152739,152740],{"class":38,"line":247},[36,152741,4031],{"class":50},[36,152743,152744],{"class":38,"line":637},[36,152745,58],{"emptyLinePlaceholder":57},[36,152747,152748,152750],{"class":38,"line":646},[36,152749,152345],{"class":46},[36,152751,152348],{"class":73},[36,152753,152754,152756,152759],{"class":38,"line":655},[36,152755,32132],{"class":42},[36,152757,152758],{"class":46}," from_dict",[36,152760,152761],{"class":50},"(cls, data):\n",[36,152763,152764,152766,152768],{"class":38,"line":660},[36,152765,16081],{"class":42},[36,152767,152365],{"class":73},[36,152769,152770],{"class":50},"(\n",[36,152772,152773,152776,152779],{"class":38,"line":665},[36,152774,152775],{"class":50},"            data[",[36,152777,152778],{"class":110},"\"student_id\"",[36,152780,89167],{"class":50},[36,152782,152783,152785,152787],{"class":38,"line":674},[36,152784,152775],{"class":50},[36,152786,64010],{"class":110},[36,152788,89167],{"class":50},[36,152790,152791,152793,152795],{"class":38,"line":679},[36,152792,152775],{"class":50},[36,152794,70455],{"class":110},[36,152796,89167],{"class":50},[36,152798,152799,152801,152804],{"class":38,"line":692},[36,152800,152775],{"class":50},[36,152802,152803],{"class":110},"\"score\"",[36,152805,89167],{"class":50},[36,152807,152808],{"class":38,"line":705},[36,152809,39457],{"class":50},[36,152811,152812],{"class":38,"line":710},[36,152813,58],{"emptyLinePlaceholder":57},[36,152815,152816,152818,152820],{"class":38,"line":722},[36,152817,32132],{"class":42},[36,152819,151312],{"class":73},[36,152821,32138],{"class":50},[36,152823,152824,152826,152828,152830,152832,152835,152837,152840,152842,152844,152846,152848,152850,152852,152854,152856],{"class":38,"line":750},[36,152825,16081],{"class":42},[36,152827,151321],{"class":42},[36,152829,1919],{"class":110},[36,152831,150783],{"class":73},[36,152833,152834],{"class":50},".student_id",[36,152836,2613],{"class":73},[36,152838,152839],{"class":73}," {self",[36,152841,81632],{"class":50},[36,152843,2613],{"class":73},[36,152845,152839],{"class":73},[36,152847,81644],{"class":50},[36,152849,2613],{"class":73},[36,152851,152839],{"class":73},[36,152853,151193],{"class":50},[36,152855,2613],{"class":73},[36,152857,26464],{"class":110},[36,152859,152860],{"class":38,"line":755},[36,152861,58],{"emptyLinePlaceholder":57},[36,152863,152864],{"class":38,"line":777},[36,152865,58],{"emptyLinePlaceholder":57},[36,152867,152868,152870,152872,152874,152877,152879,152881,152883,152885,152887,152889],{"class":38,"line":802},[36,152869,150812],{"class":50},[36,152871,70],{"class":42},[36,152873,151216],{"class":50},[36,152875,152876],{"class":110},"\"001\"",[36,152878,477],{"class":50},[36,152880,151219],{"class":110},[36,152882,477],{"class":50},[36,152884,2317],{"class":73},[36,152886,477],{"class":50},[36,152888,2656],{"class":73},[36,152890,1680],{"class":50},[36,152892,152893,152895],{"class":38,"line":807},[36,152894,31746],{"class":73},[36,152896,152897],{"class":50},"(student.is_passed())\n",[36,152899,152900,152902],{"class":38,"line":818},[36,152901,31746],{"class":73},[36,152903,152904],{"class":50},"(student.to_dict())\n",[19,152906,152907,102349,152910,152913],{},[33,152908,152909],{},"to_dict()",[33,152911,152912],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152915,152917],{"id":152916},"_1116-易错点","11.16 易错点",[256,152919,152920,152926,152932,152937,152940,152943],{},[259,152921,152922,152923,29716],{},"类名推荐使用大驼峰，如 ",[33,152924,152925],{},"StudentManager",[259,152927,152928,152929,152931],{},"方法第一个参数必须写 ",[33,152930,32154],{},"，调用时不用传。",[259,152933,152934,152936],{},[33,152935,32160],{}," 不是普通方法，它在创建对象时自动执行。",[259,152938,152939],{},"私有属性不是绝对安全，只是约定和名称改写。",[259,152941,152942],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[259,152944,152945],{},"类中方法太多时，说明职责可能过重。",[14,152947,152949],{"id":152948},"_1117-本章练习","11.17 本章练习",[256,152951,152952,152958,152964,152969,152982],{},[259,152953,152954,152955,152957],{},"定义 ",[33,152956,150899],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[259,152959,152954,152960,152963],{},[33,152961,152962],{},"Account"," 类，实现存款、取款、查询余额。",[259,152965,152954,152966,152968],{},[33,152967,18555],{}," 类，计算圆的周长和面积。",[259,152970,152954,152971,1880,152974,152977,152978,152981],{},[33,152972,152973],{},"Dog",[33,152975,152976],{},"Cat"," 类，并用同一个函数调用它们的 ",[33,152979,152980],{},"speak()"," 方法。",[259,152983,105697,152984,152986,152987,29716],{},[33,152985,152470],{}," 定义一个商品类 ",[33,152988,152989],{},"Product",[1592,152991,152992],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":152994},[152995,152996,152997,152998,152999,153000,153002,153003,153004,153005,153006,153007,153008,153012,153013,153014,153015],{"id":150663,"depth":54,"text":150664},{"id":150846,"depth":54,"text":150847},{"id":150910,"depth":54,"text":150911},{"id":150987,"depth":54,"text":150988},{"id":151086,"depth":54,"text":151087},{"id":151250,"depth":54,"text":153001},"11.6 str",{"id":151376,"depth":54,"text":151377},{"id":151642,"depth":54,"text":151643},{"id":151756,"depth":54,"text":151757},{"id":151911,"depth":54,"text":151912},{"id":152035,"depth":54,"text":152036},{"id":152151,"depth":54,"text":152152},{"id":152300,"depth":54,"text":152301,"children":153009},[153010,153011],{"id":152304,"depth":61,"text":152305},{"id":152386,"depth":61,"text":152387},{"id":152464,"depth":54,"text":152465},{"id":152579,"depth":54,"text":152580},{"id":152916,"depth":54,"text":152917},{"id":152948,"depth":54,"text":152949},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150655,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153022,"title":153023,"body":153024,"description":24706,"extension":1603,"meta":156337,"navigation":57,"path":156338,"seo":156339,"stem":156340,"__hash__":156341},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153025,"toc":156313},[153026,153029,153033,153036,153039,153068,153071,153079,153083,153087,153090,153113,153116,153122,153126,154572,154575,154596,154600,154603,154615,154618,154802,154805,154931,154934,154938,154942,155078,155082,155168,155172,155254,155258,155295,155299,155488,155492,155495,155725,155729,155732,155913,155916,155920,155923,155929,155932,155958,155962,155965,155979,155982,156007,156010,156024,156027,156044,156047,156064,156067,156084,156088,156114,156118,156141,156145,156148,156150,156156,156158,156179,156182,156188,156194,156198,156201,156277,156280,156284,156310],[10,153027,153023],{"id":153028},"_12-综合案例与复习路线",[14,153030,153032],{"id":153031},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153034,153035],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153037,153038],{},"一个合格的入门综合项目最好覆盖：",[256,153040,153041,153044,153047,153050,153053,153056,153059,153062,153065],{},[259,153042,153043],{},"输入输出。",[259,153045,153046],{},"判断和循环。",[259,153048,153049],{},"函数拆分。",[259,153051,153052],{},"列表、字典等容器。",[259,153054,153055],{},"文件持久化。",[259,153057,153058],{},"异常处理。",[259,153060,153061],{},"模块拆分。",[259,153063,153064],{},"可选：面向对象。",[259,153066,153067],{},"可选：数据可视化。",[19,153069,153070],{},"本章整理两个方向：",[256,153072,153073,153076],{},[259,153074,153075],{},"学生管理系统。",[259,153077,153078],{},"销售数据统计和可视化。",[14,153080,153082],{"id":153081},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[1645,153084,153086],{"id":153085},"_1221-需求","12.2.1 需求",[19,153088,153089],{},"实现一个命令行学生管理系统：",[256,153091,153092,153095,153098,153101,153104,153107,153110],{},[259,153093,153094],{},"添加学生。",[259,153096,153097],{},"删除学生。",[259,153099,153100],{},"修改学生。",[259,153102,153103],{},"查询学生。",[259,153105,153106],{},"显示所有学生。",[259,153108,153109],{},"保存到 JSON 文件。",[259,153111,153112],{},"程序启动时自动读取 JSON 文件。",[19,153114,153115],{},"学生字段：",[26,153117,153120],{"className":153118,"code":153119,"language":6676,"meta":31},[6674],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[33,153121,153119],{"__ignoreMap":31},[14,153123,153125],{"id":153124},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,153127,153129],{"className":31709,"code":153128,"language":31711,"meta":31,"style":31},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    try:\n        with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n            return json.load(file)\n    except json.JSONDecodeError:\n        print(\"数据文件格式错误，已使用空数据启动\")\n        return []\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\ndef show_menu():\n    print(\"====== 学生管理系统 ======\")\n    print(\"1. 添加学生\")\n    print(\"2. 删除学生\")\n    print(\"3. 修改学生\")\n    print(\"4. 查询学生\")\n    print(\"5. 显示所有学生\")\n    print(\"0. 退出系统\")\n\n\ndef find_student(students, student_id):\n    for student in students:\n        if student[\"student_id\"] == student_id:\n            return student\n    return None\n\n\ndef input_int(prompt):\n    while True:\n        try:\n            return int(input(prompt))\n        except ValueError:\n            print(\"请输入整数\")\n\n\ndef input_float(prompt):\n    while True:\n        try:\n            return float(input(prompt))\n        except ValueError:\n            print(\"请输入数字\")\n\n\ndef add_student(students):\n    student_id = input(\"请输入学号:\")\n\n    if find_student(students, student_id):\n        print(\"学号已存在\")\n        return\n\n    name = input(\"请输入姓名:\")\n    age = input_int(\"请输入年龄:\")\n    score = input_float(\"请输入成绩:\")\n\n    students.append({\n        \"student_id\": student_id,\n        \"name\": name,\n        \"age\": age,\n        \"score\": score,\n    })\n    save_students(students)\n    print(\"添加成功\")\n\n\ndef delete_student(students):\n    student_id = input(\"请输入要删除的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    students.remove(student)\n    save_students(students)\n    print(\"删除成功\")\n\n\ndef update_student(students):\n    student_id = input(\"请输入要修改的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    name = input(\"请输入新姓名:\")\n    age = input_int(\"请输入新年龄:\")\n    score = input_float(\"请输入新成绩:\")\n\n    student[\"name\"] = name\n    student[\"age\"] = age\n    student[\"score\"] = score\n\n    save_students(students)\n    print(\"修改成功\")\n\n\ndef query_student(students):\n    student_id = input(\"请输入要查询的学号:\")\n    student = find_student(students, student_id)\n\n    if student is None:\n        print(\"学生不存在\")\n        return\n\n    print_student(student)\n\n\ndef print_student(student):\n    print(\n        f\"{student['student_id']}\\t\"\n        f\"{student['name']}\\t\"\n        f\"{student['age']}\\t\"\n        f\"{student['score']}\"\n    )\n\n\ndef show_all_students(students):\n    if not students:\n        print(\"暂无学生\")\n        return\n\n    print(\"学号\\t姓名\\t年龄\\t成绩\")\n    for student in students:\n        print_student(student)\n\n\ndef main():\n    students = load_students()\n\n    while True:\n        show_menu()\n        choice = input(\"请输入操作:\")\n\n        if choice == \"1\":\n            add_student(students)\n        elif choice == \"2\":\n            delete_student(students)\n        elif choice == \"3\":\n            update_student(students)\n        elif choice == \"4\":\n            query_student(students)\n        elif choice == \"5\":\n            show_all_students(students)\n        elif choice == \"0\":\n            print(\"退出系统\")\n            break\n        else:\n            print(\"输入错误\")\n\n\nif __name__ == \"__main__\":\n    main()\n",[33,153130,153131,153137,153147,153151,153165,153169,153173,153182,153194,153200,153204,153210,153241,153251,153258,153269,153275,153279,153283,153293,153324,153350,153354,153358,153367,153378,153389,153400,153411,153422,153433,153444,153448,153452,153462,153474,153490,153497,153504,153508,153512,153522,153530,153537,153550,153560,153571,153575,153579,153588,153596,153602,153614,153622,153633,153637,153641,153650,153666,153670,153677,153688,153693,153697,153713,153728,153743,153747,153752,153760,153768,153776,153784,153788,153793,153804,153808,153812,153821,153836,153846,153850,153862,153873,153877,153881,153886,153890,153901,153905,153909,153918,153933,153941,153945,153957,153967,153971,153975,153990,154003,154016,154020,154033,154045,154057,154061,154065,154076,154080,154084,154093,154108,154116,154120,154132,154142,154146,154150,154155,154159,154163,154173,154179,154201,154220,154239,154258,154263,154267,154271,154280,154288,154299,154303,154307,154333,154343,154348,154352,154356,154364,154374,154378,154386,154391,154407,154411,154425,154430,154444,154449,154462,154467,154480,154485,154498,154503,154516,154527,154531,154537,154548,154552,154556,154568],{"__ignoreMap":31},[36,153132,153133,153135],{"class":38,"line":39},[36,153134,31723],{"class":42},[36,153136,148422],{"class":50},[36,153138,153139,153141,153143,153145],{"class":38,"line":54},[36,153140,32068],{"class":42},[36,153142,109642],{"class":50},[36,153144,31723],{"class":42},[36,153146,109647],{"class":50},[36,153148,153149],{"class":38,"line":61},[36,153150,58],{"emptyLinePlaceholder":57},[36,153152,153153,153156,153158,153160,153163],{"class":38,"line":80},[36,153154,153155],{"class":73},"DATA_FILE",[36,153157,14893],{"class":42},[36,153159,109876],{"class":50},[36,153161,153162],{"class":110},"\"students.json\"",[36,153164,1680],{"class":50},[36,153166,153167],{"class":38,"line":96},[36,153168,58],{"emptyLinePlaceholder":57},[36,153170,153171],{"class":38,"line":101},[36,153172,58],{"emptyLinePlaceholder":57},[36,153174,153175,153177,153180],{"class":38,"line":128},[36,153176,33278],{"class":42},[36,153178,153179],{"class":46}," load_students",[36,153181,33284],{"class":50},[36,153183,153184,153186,153188,153191],{"class":38,"line":149},[36,153185,4592],{"class":42},[36,153187,40261],{"class":42},[36,153189,153190],{"class":73}," DATA_FILE",[36,153192,153193],{"class":50},".exists():\n",[36,153195,153196,153198],{"class":38,"line":154},[36,153197,16081],{"class":42},[36,153199,53169],{"class":50},[36,153201,153202],{"class":38,"line":167},[36,153203,58],{"emptyLinePlaceholder":57},[36,153205,153206,153208],{"class":38,"line":172},[36,153207,127115],{"class":42},[36,153209,5230],{"class":50},[36,153211,153212,153215,153217,153219,153221,153223,153225,153227,153229,153231,153233,153235,153237,153239],{"class":38,"line":192},[36,153213,153214],{"class":42},"        with",[36,153216,148122],{"class":73},[36,153218,222],{"class":50},[36,153220,153155],{"class":73},[36,153222,477],{"class":50},[36,153224,148132],{"class":110},[36,153226,477],{"class":50},[36,153228,148137],{"class":473},[36,153230,70],{"class":42},[36,153232,148142],{"class":110},[36,153234,15043],{"class":50},[36,153236,32714],{"class":42},[36,153238,149484],{"class":473},[36,153240,5230],{"class":50},[36,153242,153243,153245,153247,153249],{"class":38,"line":211},[36,153244,17061],{"class":42},[36,153246,149495],{"class":50},[36,153248,46685],{"class":473},[36,153250,1680],{"class":50},[36,153252,153253,153255],{"class":38,"line":216},[36,153254,127143],{"class":42},[36,153256,153257],{"class":50}," json.JSONDecodeError:\n",[36,153259,153260,153262,153264,153267],{"class":38,"line":231},[36,153261,33782],{"class":73},[36,153263,222],{"class":50},[36,153265,153266],{"class":110},"\"数据文件格式错误，已使用空数据启动\"",[36,153268,1680],{"class":50},[36,153270,153271,153273],{"class":38,"line":236},[36,153272,16081],{"class":42},[36,153274,53169],{"class":50},[36,153276,153277],{"class":38,"line":247},[36,153278,58],{"emptyLinePlaceholder":57},[36,153280,153281],{"class":38,"line":637},[36,153282,58],{"emptyLinePlaceholder":57},[36,153284,153285,153287,153290],{"class":38,"line":646},[36,153286,33278],{"class":42},[36,153288,153289],{"class":46}," save_students",[36,153291,153292],{"class":50},"(students):\n",[36,153294,153295,153297,153299,153301,153303,153305,153308,153310,153312,153314,153316,153318,153320,153322],{"class":38,"line":655},[36,153296,35509],{"class":42},[36,153298,148122],{"class":73},[36,153300,222],{"class":50},[36,153302,153155],{"class":73},[36,153304,477],{"class":50},[36,153306,153307],{"class":110},"\"w\"",[36,153309,477],{"class":50},[36,153311,148137],{"class":473},[36,153313,70],{"class":42},[36,153315,148142],{"class":110},[36,153317,15043],{"class":50},[36,153319,32714],{"class":42},[36,153321,149484],{"class":473},[36,153323,5230],{"class":50},[36,153325,153326,153329,153331,153333,153335,153337,153339,153341,153344,153346,153348],{"class":38,"line":660},[36,153327,153328],{"class":50},"        json.dump(students, ",[36,153330,46685],{"class":473},[36,153332,477],{"class":50},[36,153334,148468],{"class":473},[36,153336,70],{"class":42},[36,153338,35318],{"class":73},[36,153340,477],{"class":50},[36,153342,153343],{"class":473},"indent",[36,153345,70],{"class":42},[36,153347,1747],{"class":73},[36,153349,1680],{"class":50},[36,153351,153352],{"class":38,"line":665},[36,153353,58],{"emptyLinePlaceholder":57},[36,153355,153356],{"class":38,"line":674},[36,153357,58],{"emptyLinePlaceholder":57},[36,153359,153360,153362,153365],{"class":38,"line":679},[36,153361,33278],{"class":42},[36,153363,153364],{"class":46}," show_menu",[36,153366,33284],{"class":50},[36,153368,153369,153371,153373,153376],{"class":38,"line":692},[36,153370,32630],{"class":73},[36,153372,222],{"class":50},[36,153374,153375],{"class":110},"\"====== 学生管理系统 ======\"",[36,153377,1680],{"class":50},[36,153379,153380,153382,153384,153387],{"class":38,"line":705},[36,153381,32630],{"class":73},[36,153383,222],{"class":50},[36,153385,153386],{"class":110},"\"1. 添加学生\"",[36,153388,1680],{"class":50},[36,153390,153391,153393,153395,153398],{"class":38,"line":710},[36,153392,32630],{"class":73},[36,153394,222],{"class":50},[36,153396,153397],{"class":110},"\"2. 删除学生\"",[36,153399,1680],{"class":50},[36,153401,153402,153404,153406,153409],{"class":38,"line":722},[36,153403,32630],{"class":73},[36,153405,222],{"class":50},[36,153407,153408],{"class":110},"\"3. 修改学生\"",[36,153410,1680],{"class":50},[36,153412,153413,153415,153417,153420],{"class":38,"line":750},[36,153414,32630],{"class":73},[36,153416,222],{"class":50},[36,153418,153419],{"class":110},"\"4. 查询学生\"",[36,153421,1680],{"class":50},[36,153423,153424,153426,153428,153431],{"class":38,"line":755},[36,153425,32630],{"class":73},[36,153427,222],{"class":50},[36,153429,153430],{"class":110},"\"5. 显示所有学生\"",[36,153432,1680],{"class":50},[36,153434,153435,153437,153439,153442],{"class":38,"line":777},[36,153436,32630],{"class":73},[36,153438,222],{"class":50},[36,153440,153441],{"class":110},"\"0. 退出系统\"",[36,153443,1680],{"class":50},[36,153445,153446],{"class":38,"line":802},[36,153447,58],{"emptyLinePlaceholder":57},[36,153449,153450],{"class":38,"line":807},[36,153451,58],{"emptyLinePlaceholder":57},[36,153453,153454,153456,153459],{"class":38,"line":818},[36,153455,33278],{"class":42},[36,153457,153458],{"class":46}," find_student",[36,153460,153461],{"class":50},"(students, student_id):\n",[36,153463,153464,153466,153469,153471],{"class":38,"line":843},[36,153465,4692],{"class":42},[36,153467,153468],{"class":50}," student ",[36,153470,27374],{"class":42},[36,153472,153473],{"class":50}," students:\n",[36,153475,153476,153478,153481,153483,153485,153487],{"class":38,"line":848},[36,153477,3999],{"class":42},[36,153479,153480],{"class":50}," student[",[36,153482,152778],{"class":110},[36,153484,5932],{"class":50},[36,153486,4441],{"class":42},[36,153488,153489],{"class":50}," student_id:\n",[36,153491,153492,153494],{"class":38,"line":859},[36,153493,17061],{"class":42},[36,153495,153496],{"class":50}," student\n",[36,153498,153499,153501],{"class":38,"line":864},[36,153500,239],{"class":42},[36,153502,153503],{"class":73}," None\n",[36,153505,153506],{"class":38,"line":873},[36,153507,58],{"emptyLinePlaceholder":57},[36,153509,153510],{"class":38,"line":9454},[36,153511,58],{"emptyLinePlaceholder":57},[36,153513,153514,153516,153519],{"class":38,"line":9481},[36,153515,33278],{"class":42},[36,153517,153518],{"class":46}," input_int",[36,153520,153521],{"class":50},"(prompt):\n",[36,153523,153524,153526,153528],{"class":38,"line":9486},[36,153525,3757],{"class":42},[36,153527,96623],{"class":73},[36,153529,5230],{"class":50},[36,153531,153532,153535],{"class":38,"line":9492},[36,153533,153534],{"class":42},"        try",[36,153536,5230],{"class":50},[36,153538,153539,153541,153543,153545,153547],{"class":38,"line":9504},[36,153540,17061],{"class":42},[36,153542,965],{"class":73},[36,153544,222],{"class":50},[36,153546,55152],{"class":73},[36,153548,153549],{"class":50},"(prompt))\n",[36,153551,153552,153555,153558],{"class":38,"line":9516},[36,153553,153554],{"class":42},"        except",[36,153556,153557],{"class":73}," ValueError",[36,153559,5230],{"class":50},[36,153561,153562,153564,153566,153569],{"class":38,"line":9528},[36,153563,35981],{"class":73},[36,153565,222],{"class":50},[36,153567,153568],{"class":110},"\"请输入整数\"",[36,153570,1680],{"class":50},[36,153572,153573],{"class":38,"line":11184},[36,153574,58],{"emptyLinePlaceholder":57},[36,153576,153577],{"class":38,"line":11209},[36,153578,58],{"emptyLinePlaceholder":57},[36,153580,153581,153583,153586],{"class":38,"line":11232},[36,153582,33278],{"class":42},[36,153584,153585],{"class":46}," input_float",[36,153587,153521],{"class":50},[36,153589,153590,153592,153594],{"class":38,"line":11256},[36,153591,3757],{"class":42},[36,153593,96623],{"class":73},[36,153595,5230],{"class":50},[36,153597,153598,153600],{"class":38,"line":11261},[36,153599,153534],{"class":42},[36,153601,5230],{"class":50},[36,153603,153604,153606,153608,153610,153612],{"class":38,"line":11266},[36,153605,17061],{"class":42},[36,153607,111128],{"class":73},[36,153609,222],{"class":50},[36,153611,55152],{"class":73},[36,153613,153549],{"class":50},[36,153615,153616,153618,153620],{"class":38,"line":11271},[36,153617,153554],{"class":42},[36,153619,153557],{"class":73},[36,153621,5230],{"class":50},[36,153623,153624,153626,153628,153631],{"class":38,"line":11280},[36,153625,35981],{"class":73},[36,153627,222],{"class":50},[36,153629,153630],{"class":110},"\"请输入数字\"",[36,153632,1680],{"class":50},[36,153634,153635],{"class":38,"line":11285},[36,153636,58],{"emptyLinePlaceholder":57},[36,153638,153639],{"class":38,"line":11291},[36,153640,58],{"emptyLinePlaceholder":57},[36,153642,153643,153645,153648],{"class":38,"line":11312},[36,153644,33278],{"class":42},[36,153646,153647],{"class":46}," add_student",[36,153649,153292],{"class":50},[36,153651,153652,153655,153657,153659,153661,153664],{"class":38,"line":11318},[36,153653,153654],{"class":50},"    student_id ",[36,153656,70],{"class":42},[36,153658,61936],{"class":73},[36,153660,222],{"class":50},[36,153662,153663],{"class":110},"\"请输入学号:\"",[36,153665,1680],{"class":50},[36,153667,153668],{"class":38,"line":11332},[36,153669,58],{"emptyLinePlaceholder":57},[36,153671,153672,153674],{"class":38,"line":11338},[36,153673,4592],{"class":42},[36,153675,153676],{"class":50}," find_student(students, student_id):\n",[36,153678,153679,153681,153683,153686],{"class":38,"line":11365},[36,153680,33782],{"class":73},[36,153682,222],{"class":50},[36,153684,153685],{"class":110},"\"学号已存在\"",[36,153687,1680],{"class":50},[36,153689,153690],{"class":38,"line":11374},[36,153691,153692],{"class":42},"        return\n",[36,153694,153695],{"class":38,"line":11380},[36,153696,58],{"emptyLinePlaceholder":57},[36,153698,153699,153702,153704,153706,153708,153711],{"class":38,"line":11388},[36,153700,153701],{"class":50},"    name ",[36,153703,70],{"class":42},[36,153705,61936],{"class":73},[36,153707,222],{"class":50},[36,153709,153710],{"class":110},"\"请输入姓名:\"",[36,153712,1680],{"class":50},[36,153714,153715,153718,153720,153723,153726],{"class":38,"line":11393},[36,153716,153717],{"class":50},"    age ",[36,153719,70],{"class":42},[36,153721,153722],{"class":50}," input_int(",[36,153724,153725],{"class":110},"\"请输入年龄:\"",[36,153727,1680],{"class":50},[36,153729,153730,153733,153735,153738,153741],{"class":38,"line":17933},[36,153731,153732],{"class":50},"    score ",[36,153734,70],{"class":42},[36,153736,153737],{"class":50}," input_float(",[36,153739,153740],{"class":110},"\"请输入成绩:\"",[36,153742,1680],{"class":50},[36,153744,153745],{"class":38,"line":17939},[36,153746,58],{"emptyLinePlaceholder":57},[36,153748,153749],{"class":38,"line":17962},[36,153750,153751],{"class":50},"    students.append({\n",[36,153753,153754,153757],{"class":38,"line":17968},[36,153755,153756],{"class":110},"        \"student_id\"",[36,153758,153759],{"class":50},": student_id,\n",[36,153761,153762,153765],{"class":38,"line":17991},[36,153763,153764],{"class":110},"        \"name\"",[36,153766,153767],{"class":50},": name,\n",[36,153769,153770,153773],{"class":38,"line":18005},[36,153771,153772],{"class":110},"        \"age\"",[36,153774,153775],{"class":50},": age,\n",[36,153777,153778,153781],{"class":38,"line":18025},[36,153779,153780],{"class":110},"        \"score\"",[36,153782,153783],{"class":50},": score,\n",[36,153785,153786],{"class":38,"line":18031},[36,153787,34792],{"class":50},[36,153789,153790],{"class":38,"line":18042},[36,153791,153792],{"class":50},"    save_students(students)\n",[36,153794,153795,153797,153799,153802],{"class":38,"line":18065},[36,153796,32630],{"class":73},[36,153798,222],{"class":50},[36,153800,153801],{"class":110},"\"添加成功\"",[36,153803,1680],{"class":50},[36,153805,153806],{"class":38,"line":18087},[36,153807,58],{"emptyLinePlaceholder":57},[36,153809,153810],{"class":38,"line":18092},[36,153811,58],{"emptyLinePlaceholder":57},[36,153813,153814,153816,153819],{"class":38,"line":18098},[36,153815,33278],{"class":42},[36,153817,153818],{"class":46}," delete_student",[36,153820,153292],{"class":50},[36,153822,153823,153825,153827,153829,153831,153834],{"class":38,"line":18112},[36,153824,153654],{"class":50},[36,153826,70],{"class":42},[36,153828,61936],{"class":73},[36,153830,222],{"class":50},[36,153832,153833],{"class":110},"\"请输入要删除的学号:\"",[36,153835,1680],{"class":50},[36,153837,153838,153841,153843],{"class":38,"line":18125},[36,153839,153840],{"class":50},"    student ",[36,153842,70],{"class":42},[36,153844,153845],{"class":50}," find_student(students, student_id)\n",[36,153847,153848],{"class":38,"line":18130},[36,153849,58],{"emptyLinePlaceholder":57},[36,153851,153852,153854,153856,153858,153860],{"class":38,"line":18144},[36,153853,4592],{"class":42},[36,153855,153468],{"class":50},[36,153857,40258],{"class":42},[36,153859,40264],{"class":73},[36,153861,5230],{"class":50},[36,153863,153864,153866,153868,153871],{"class":38,"line":18149},[36,153865,33782],{"class":73},[36,153867,222],{"class":50},[36,153869,153870],{"class":110},"\"学生不存在\"",[36,153872,1680],{"class":50},[36,153874,153875],{"class":38,"line":18155},[36,153876,153692],{"class":42},[36,153878,153879],{"class":38,"line":18160},[36,153880,58],{"emptyLinePlaceholder":57},[36,153882,153883],{"class":38,"line":18174},[36,153884,153885],{"class":50},"    students.remove(student)\n",[36,153887,153888],{"class":38,"line":18179},[36,153889,153792],{"class":50},[36,153891,153892,153894,153896,153899],{"class":38,"line":18184},[36,153893,32630],{"class":73},[36,153895,222],{"class":50},[36,153897,153898],{"class":110},"\"删除成功\"",[36,153900,1680],{"class":50},[36,153902,153903],{"class":38,"line":18198},[36,153904,58],{"emptyLinePlaceholder":57},[36,153906,153907],{"class":38,"line":18210},[36,153908,58],{"emptyLinePlaceholder":57},[36,153910,153911,153913,153916],{"class":38,"line":18215},[36,153912,33278],{"class":42},[36,153914,153915],{"class":46}," update_student",[36,153917,153292],{"class":50},[36,153919,153920,153922,153924,153926,153928,153931],{"class":38,"line":18228},[36,153921,153654],{"class":50},[36,153923,70],{"class":42},[36,153925,61936],{"class":73},[36,153927,222],{"class":50},[36,153929,153930],{"class":110},"\"请输入要修改的学号:\"",[36,153932,1680],{"class":50},[36,153934,153935,153937,153939],{"class":38,"line":18233},[36,153936,153840],{"class":50},[36,153938,70],{"class":42},[36,153940,153845],{"class":50},[36,153942,153943],{"class":38,"line":18238},[36,153944,58],{"emptyLinePlaceholder":57},[36,153946,153947,153949,153951,153953,153955],{"class":38,"line":18243},[36,153948,4592],{"class":42},[36,153950,153468],{"class":50},[36,153952,40258],{"class":42},[36,153954,40264],{"class":73},[36,153956,5230],{"class":50},[36,153958,153959,153961,153963,153965],{"class":38,"line":18256},[36,153960,33782],{"class":73},[36,153962,222],{"class":50},[36,153964,153870],{"class":110},[36,153966,1680],{"class":50},[36,153968,153969],{"class":38,"line":18261},[36,153970,153692],{"class":42},[36,153972,153973],{"class":38,"line":33964},[36,153974,58],{"emptyLinePlaceholder":57},[36,153976,153977,153979,153981,153983,153985,153988],{"class":38,"line":33970},[36,153978,153701],{"class":50},[36,153980,70],{"class":42},[36,153982,61936],{"class":73},[36,153984,222],{"class":50},[36,153986,153987],{"class":110},"\"请输入新姓名:\"",[36,153989,1680],{"class":50},[36,153991,153992,153994,153996,153998,154001],{"class":38,"line":33976},[36,153993,153717],{"class":50},[36,153995,70],{"class":42},[36,153997,153722],{"class":50},[36,153999,154000],{"class":110},"\"请输入新年龄:\"",[36,154002,1680],{"class":50},[36,154004,154005,154007,154009,154011,154014],{"class":38,"line":33982},[36,154006,153732],{"class":50},[36,154008,70],{"class":42},[36,154010,153737],{"class":50},[36,154012,154013],{"class":110},"\"请输入新成绩:\"",[36,154015,1680],{"class":50},[36,154017,154018],{"class":38,"line":33988},[36,154019,58],{"emptyLinePlaceholder":57},[36,154021,154022,154025,154027,154029,154031],{"class":38,"line":33999},[36,154023,154024],{"class":50},"    student[",[36,154026,64010],{"class":110},[36,154028,5932],{"class":50},[36,154030,70],{"class":42},[36,154032,151126],{"class":50},[36,154034,154035,154037,154039,154041,154043],{"class":38,"line":34005},[36,154036,154024],{"class":50},[36,154038,70455],{"class":110},[36,154040,5932],{"class":50},[36,154042,70],{"class":42},[36,154044,151138],{"class":50},[36,154046,154047,154049,154051,154053,154055],{"class":38,"line":34025},[36,154048,154024],{"class":50},[36,154050,152803],{"class":110},[36,154052,5932],{"class":50},[36,154054,70],{"class":42},[36,154056,3108],{"class":50},[36,154058,154059],{"class":38,"line":34031},[36,154060,58],{"emptyLinePlaceholder":57},[36,154062,154063],{"class":38,"line":34042},[36,154064,153792],{"class":50},[36,154066,154067,154069,154071,154074],{"class":38,"line":34048},[36,154068,32630],{"class":73},[36,154070,222],{"class":50},[36,154072,154073],{"class":110},"\"修改成功\"",[36,154075,1680],{"class":50},[36,154077,154078],{"class":38,"line":34054},[36,154079,58],{"emptyLinePlaceholder":57},[36,154081,154082],{"class":38,"line":34060},[36,154083,58],{"emptyLinePlaceholder":57},[36,154085,154086,154088,154091],{"class":38,"line":34066},[36,154087,33278],{"class":42},[36,154089,154090],{"class":46}," query_student",[36,154092,153292],{"class":50},[36,154094,154095,154097,154099,154101,154103,154106],{"class":38,"line":34072},[36,154096,153654],{"class":50},[36,154098,70],{"class":42},[36,154100,61936],{"class":73},[36,154102,222],{"class":50},[36,154104,154105],{"class":110},"\"请输入要查询的学号:\"",[36,154107,1680],{"class":50},[36,154109,154110,154112,154114],{"class":38,"line":34078},[36,154111,153840],{"class":50},[36,154113,70],{"class":42},[36,154115,153845],{"class":50},[36,154117,154118],{"class":38,"line":34084},[36,154119,58],{"emptyLinePlaceholder":57},[36,154121,154122,154124,154126,154128,154130],{"class":38,"line":34104},[36,154123,4592],{"class":42},[36,154125,153468],{"class":50},[36,154127,40258],{"class":42},[36,154129,40264],{"class":73},[36,154131,5230],{"class":50},[36,154133,154134,154136,154138,154140],{"class":38,"line":34110},[36,154135,33782],{"class":73},[36,154137,222],{"class":50},[36,154139,153870],{"class":110},[36,154141,1680],{"class":50},[36,154143,154144],{"class":38,"line":34126},[36,154145,153692],{"class":42},[36,154147,154148],{"class":38,"line":34132},[36,154149,58],{"emptyLinePlaceholder":57},[36,154151,154152],{"class":38,"line":34146},[36,154153,154154],{"class":50},"    print_student(student)\n",[36,154156,154157],{"class":38,"line":34152},[36,154158,58],{"emptyLinePlaceholder":57},[36,154160,154161],{"class":38,"line":34167},[36,154162,58],{"emptyLinePlaceholder":57},[36,154164,154165,154167,154170],{"class":38,"line":34173},[36,154166,33278],{"class":42},[36,154168,154169],{"class":46}," print_student",[36,154171,154172],{"class":50},"(student):\n",[36,154174,154175,154177],{"class":38,"line":34182},[36,154176,32630],{"class":73},[36,154178,152770],{"class":50},[36,154180,154181,154184,154186,154188,154191,154194,154196,154199],{"class":38,"line":34188},[36,154182,154183],{"class":42},"        f",[36,154185,1919],{"class":110},[36,154187,2563],{"class":73},[36,154189,154190],{"class":50},"student[",[36,154192,154193],{"class":110},"'student_id'",[36,154195,2607],{"class":50},[36,154197,154198],{"class":73},"}\\t",[36,154200,26464],{"class":110},[36,154202,154203,154205,154207,154209,154211,154214,154216,154218],{"class":38,"line":34197},[36,154204,154183],{"class":42},[36,154206,1919],{"class":110},[36,154208,2563],{"class":73},[36,154210,154190],{"class":50},[36,154212,154213],{"class":110},"'name'",[36,154215,2607],{"class":50},[36,154217,154198],{"class":73},[36,154219,26464],{"class":110},[36,154221,154222,154224,154226,154228,154230,154233,154235,154237],{"class":38,"line":34203},[36,154223,154183],{"class":42},[36,154225,1919],{"class":110},[36,154227,2563],{"class":73},[36,154229,154190],{"class":50},[36,154231,154232],{"class":110},"'age'",[36,154234,2607],{"class":50},[36,154236,154198],{"class":73},[36,154238,26464],{"class":110},[36,154240,154241,154243,154245,154247,154249,154252,154254,154256],{"class":38,"line":34209},[36,154242,154183],{"class":42},[36,154244,1919],{"class":110},[36,154246,2563],{"class":73},[36,154248,154190],{"class":50},[36,154250,154251],{"class":110},"'score'",[36,154253,2607],{"class":50},[36,154255,2613],{"class":73},[36,154257,26464],{"class":110},[36,154259,154260],{"class":38,"line":34218},[36,154261,154262],{"class":50},"    )\n",[36,154264,154265],{"class":38,"line":34224},[36,154266,58],{"emptyLinePlaceholder":57},[36,154268,154269],{"class":38,"line":34235},[36,154270,58],{"emptyLinePlaceholder":57},[36,154272,154273,154275,154278],{"class":38,"line":34241},[36,154274,33278],{"class":42},[36,154276,154277],{"class":46}," show_all_students",[36,154279,153292],{"class":50},[36,154281,154282,154284,154286],{"class":38,"line":34260},[36,154283,4592],{"class":42},[36,154285,40261],{"class":42},[36,154287,153473],{"class":50},[36,154289,154290,154292,154294,154297],{"class":38,"line":34266},[36,154291,33782],{"class":73},[36,154293,222],{"class":50},[36,154295,154296],{"class":110},"\"暂无学生\"",[36,154298,1680],{"class":50},[36,154300,154301],{"class":38,"line":34277},[36,154302,153692],{"class":42},[36,154304,154305],{"class":38,"line":34283},[36,154306,58],{"emptyLinePlaceholder":57},[36,154308,154309,154311,154313,154316,154318,154321,154323,154326,154328,154331],{"class":38,"line":34303},[36,154310,32630],{"class":73},[36,154312,222],{"class":50},[36,154314,154315],{"class":110},"\"学号",[36,154317,2767],{"class":73},[36,154319,154320],{"class":110},"姓名",[36,154322,2767],{"class":73},[36,154324,154325],{"class":110},"年龄",[36,154327,2767],{"class":73},[36,154329,154330],{"class":110},"成绩\"",[36,154332,1680],{"class":50},[36,154334,154335,154337,154339,154341],{"class":38,"line":34319},[36,154336,4692],{"class":42},[36,154338,153468],{"class":50},[36,154340,27374],{"class":42},[36,154342,153473],{"class":50},[36,154344,154345],{"class":38,"line":34325},[36,154346,154347],{"class":50},"        print_student(student)\n",[36,154349,154350],{"class":38,"line":34339},[36,154351,58],{"emptyLinePlaceholder":57},[36,154353,154354],{"class":38,"line":34345},[36,154355,58],{"emptyLinePlaceholder":57},[36,154357,154358,154360,154362],{"class":38,"line":34351},[36,154359,33278],{"class":42},[36,154361,47],{"class":46},[36,154363,33284],{"class":50},[36,154365,154366,154369,154371],{"class":38,"line":34362},[36,154367,154368],{"class":50},"    students ",[36,154370,70],{"class":42},[36,154372,154373],{"class":50}," load_students()\n",[36,154375,154376],{"class":38,"line":34368},[36,154377,58],{"emptyLinePlaceholder":57},[36,154379,154380,154382,154384],{"class":38,"line":34374},[36,154381,3757],{"class":42},[36,154383,96623],{"class":73},[36,154385,5230],{"class":50},[36,154387,154388],{"class":38,"line":34384},[36,154389,154390],{"class":50},"        show_menu()\n",[36,154392,154393,154396,154398,154400,154402,154405],{"class":38,"line":34390},[36,154394,154395],{"class":50},"        choice ",[36,154397,70],{"class":42},[36,154399,61936],{"class":73},[36,154401,222],{"class":50},[36,154403,154404],{"class":110},"\"请输入操作:\"",[36,154406,1680],{"class":50},[36,154408,154409],{"class":38,"line":34401},[36,154410,58],{"emptyLinePlaceholder":57},[36,154412,154413,154415,154418,154420,154423],{"class":38,"line":34407},[36,154414,3999],{"class":42},[36,154416,154417],{"class":50}," choice ",[36,154419,4441],{"class":42},[36,154421,154422],{"class":110}," \"1\"",[36,154424,5230],{"class":50},[36,154426,154427],{"class":38,"line":34417},[36,154428,154429],{"class":50},"            add_student(students)\n",[36,154431,154432,154435,154437,154439,154442],{"class":38,"line":34422},[36,154433,154434],{"class":42},"        elif",[36,154436,154417],{"class":50},[36,154438,4441],{"class":42},[36,154440,154441],{"class":110}," \"2\"",[36,154443,5230],{"class":50},[36,154445,154446],{"class":38,"line":34428},[36,154447,154448],{"class":50},"            delete_student(students)\n",[36,154450,154451,154453,154455,154457,154460],{"class":38,"line":34477},[36,154452,154434],{"class":42},[36,154454,154417],{"class":50},[36,154456,4441],{"class":42},[36,154458,154459],{"class":110}," \"3\"",[36,154461,5230],{"class":50},[36,154463,154464],{"class":38,"line":34524},[36,154465,154466],{"class":50},"            update_student(students)\n",[36,154468,154469,154471,154473,154475,154478],{"class":38,"line":34529},[36,154470,154434],{"class":42},[36,154472,154417],{"class":50},[36,154474,4441],{"class":42},[36,154476,154477],{"class":110}," \"4\"",[36,154479,5230],{"class":50},[36,154481,154482],{"class":38,"line":34535},[36,154483,154484],{"class":50},"            query_student(students)\n",[36,154486,154487,154489,154491,154493,154496],{"class":38,"line":34554},[36,154488,154434],{"class":42},[36,154490,154417],{"class":50},[36,154492,4441],{"class":42},[36,154494,154495],{"class":110}," \"5\"",[36,154497,5230],{"class":50},[36,154499,154500],{"class":38,"line":34560},[36,154501,154502],{"class":50},"            show_all_students(students)\n",[36,154504,154505,154507,154509,154511,154514],{"class":38,"line":34580},[36,154506,154434],{"class":42},[36,154508,154417],{"class":50},[36,154510,4441],{"class":42},[36,154512,154513],{"class":110}," \"0\"",[36,154515,5230],{"class":50},[36,154517,154518,154520,154522,154525],{"class":38,"line":34586},[36,154519,35981],{"class":73},[36,154521,222],{"class":50},[36,154523,154524],{"class":110},"\"退出系统\"",[36,154526,1680],{"class":50},[36,154528,154529],{"class":38,"line":34592},[36,154530,116429],{"class":42},[36,154532,154533,154535],{"class":38,"line":34602},[36,154534,4036],{"class":42},[36,154536,5230],{"class":50},[36,154538,154539,154541,154543,154546],{"class":38,"line":34607},[36,154540,35981],{"class":73},[36,154542,222],{"class":50},[36,154544,154545],{"class":110},"\"输入错误\"",[36,154547,1680],{"class":50},[36,154549,154550],{"class":38,"line":34613},[36,154551,58],{"emptyLinePlaceholder":57},[36,154553,154554],{"class":38,"line":34629},[36,154555,58],{"emptyLinePlaceholder":57},[36,154557,154558,154560,154562,154564,154566],{"class":38,"line":34674},[36,154559,3061],{"class":42},[36,154561,32551],{"class":73},[36,154563,102890],{"class":42},[36,154565,102893],{"class":110},[36,154567,5230],{"class":50},[36,154569,154570],{"class":38,"line":34680},[36,154571,102900],{"class":50},[19,154573,154574],{},"这个项目串联了：",[256,154576,154577,154580,154583,154586,154589,154591],{},[259,154578,154579],{},"菜单循环。",[259,154581,154582],{},"函数封装。",[259,154584,154585],{},"列表字典。",[259,154587,154588],{},"JSON 读写。",[259,154590,153058],{},[259,154592,154593,29716],{},[33,154594,154595],{},"if __name__ == \"__main__\"",[14,154597,154599],{"id":154598},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154601,154602],{},"可以进一步拆成两个类：",[256,154604,154605,154610],{},[259,154606,154607,154609],{},[33,154608,150899],{},"：表示单个学生。",[259,154611,154612,154614],{},[33,154613,152925],{},"：负责学生增删改查和文件保存。",[19,154616,154617],{},"示意代码：",[26,154619,154621],{"className":31709,"code":154620,"language":31711,"meta":31,"style":31},"from dataclasses import dataclass\n\n\n@dataclass\nclass Student:\n    student_id: str\n    name: str\n    age: int\n    score: float\n\n    def to_dict(self):\n        return {\n            \"student_id\": self.student_id,\n            \"name\": self.name,\n            \"age\": self.age,\n            \"score\": self.score,\n        }\n\n    @classmethod\n    def from_dict(cls, data):\n        return cls(\n            data[\"student_id\"],\n            data[\"name\"],\n            data[\"age\"],\n            data[\"score\"],\n        )\n",[33,154622,154623,154633,154637,154641,154645,154653,154660,154666,154672,154678,154682,154690,154696,154706,154716,154726,154736,154740,154744,154750,154758,154766,154774,154782,154790,154798],{"__ignoreMap":31},[36,154624,154625,154627,154629,154631],{"class":38,"line":39},[36,154626,32068],{"class":42},[36,154628,152483],{"class":50},[36,154630,31723],{"class":42},[36,154632,152488],{"class":50},[36,154634,154635],{"class":38,"line":54},[36,154636,58],{"emptyLinePlaceholder":57},[36,154638,154639],{"class":38,"line":61},[36,154640,58],{"emptyLinePlaceholder":57},[36,154642,154643],{"class":38,"line":80},[36,154644,152501],{"class":46},[36,154646,154647,154649,154651],{"class":38,"line":96},[36,154648,16023],{"class":42},[36,154650,9372],{"class":46},[36,154652,5230],{"class":50},[36,154654,154655,154658],{"class":38,"line":101},[36,154656,154657],{"class":50},"    student_id: ",[36,154659,152517],{"class":73},[36,154661,154662,154664],{"class":38,"line":128},[36,154663,152514],{"class":50},[36,154665,152517],{"class":73},[36,154667,154668,154670],{"class":38,"line":149},[36,154669,152522],{"class":50},[36,154671,152525],{"class":73},[36,154673,154674,154676],{"class":38,"line":154},[36,154675,152530],{"class":50},[36,154677,152533],{"class":73},[36,154679,154680],{"class":38,"line":167},[36,154681,58],{"emptyLinePlaceholder":57},[36,154683,154684,154686,154688],{"class":38,"line":172},[36,154685,32132],{"class":42},[36,154687,152681],{"class":46},[36,154689,32138],{"class":50},[36,154691,154692,154694],{"class":38,"line":192},[36,154693,16081],{"class":42},[36,154695,16901],{"class":50},[36,154697,154698,154700,154702,154704],{"class":38,"line":211},[36,154699,152694],{"class":110},[36,154701,52768],{"class":50},[36,154703,32154],{"class":73},[36,154705,152701],{"class":50},[36,154707,154708,154710,154712,154714],{"class":38,"line":216},[36,154709,152706],{"class":110},[36,154711,52768],{"class":50},[36,154713,32154],{"class":73},[36,154715,152713],{"class":50},[36,154717,154718,154720,154722,154724],{"class":38,"line":231},[36,154719,152718],{"class":110},[36,154721,52768],{"class":50},[36,154723,32154],{"class":73},[36,154725,152725],{"class":50},[36,154727,154728,154730,154732,154734],{"class":38,"line":236},[36,154729,152730],{"class":110},[36,154731,52768],{"class":50},[36,154733,32154],{"class":73},[36,154735,152737],{"class":50},[36,154737,154738],{"class":38,"line":247},[36,154739,4031],{"class":50},[36,154741,154742],{"class":38,"line":637},[36,154743,58],{"emptyLinePlaceholder":57},[36,154745,154746,154748],{"class":38,"line":646},[36,154747,152345],{"class":46},[36,154749,152348],{"class":73},[36,154751,154752,154754,154756],{"class":38,"line":655},[36,154753,32132],{"class":42},[36,154755,152758],{"class":46},[36,154757,152761],{"class":50},[36,154759,154760,154762,154764],{"class":38,"line":660},[36,154761,16081],{"class":42},[36,154763,152365],{"class":73},[36,154765,152770],{"class":50},[36,154767,154768,154770,154772],{"class":38,"line":665},[36,154769,152775],{"class":50},[36,154771,152778],{"class":110},[36,154773,89167],{"class":50},[36,154775,154776,154778,154780],{"class":38,"line":674},[36,154777,152775],{"class":50},[36,154779,64010],{"class":110},[36,154781,89167],{"class":50},[36,154783,154784,154786,154788],{"class":38,"line":679},[36,154785,152775],{"class":50},[36,154787,70455],{"class":110},[36,154789,89167],{"class":50},[36,154791,154792,154794,154796],{"class":38,"line":692},[36,154793,152775],{"class":50},[36,154795,152803],{"class":110},[36,154797,89167],{"class":50},[36,154799,154800],{"class":38,"line":705},[36,154801,39457],{"class":50},[19,154803,154804],{},"管理器示意：",[26,154806,154808],{"className":31709,"code":154807,"language":31711,"meta":31,"style":31},"class StudentManager:\n    def __init__(self):\n        self.students = []\n\n    def find_by_id(self, student_id):\n        for student in self.students:\n            if student.student_id == student_id:\n                return student\n        return None\n\n    def add(self, student):\n        if self.find_by_id(student.student_id):\n            return False\n        self.students.append(student)\n        return True\n",[33,154809,154810,154819,154827,154838,154842,154852,154865,154876,154883,154889,154893,154902,154911,154917,154924],{"__ignoreMap":31},[36,154811,154812,154814,154817],{"class":38,"line":39},[36,154813,16023],{"class":42},[36,154815,154816],{"class":46}," StudentManager",[36,154818,5230],{"class":50},[36,154820,154821,154823,154825],{"class":38,"line":54},[36,154822,32132],{"class":42},[36,154824,32135],{"class":73},[36,154826,32138],{"class":50},[36,154828,154829,154831,154834,154836],{"class":38,"line":61},[36,154830,32176],{"class":73},[36,154832,154833],{"class":50},".students ",[36,154835,70],{"class":42},[36,154837,53169],{"class":50},[36,154839,154840],{"class":38,"line":80},[36,154841,58],{"emptyLinePlaceholder":57},[36,154843,154844,154846,154849],{"class":38,"line":96},[36,154845,32132],{"class":42},[36,154847,154848],{"class":46}," find_by_id",[36,154850,154851],{"class":50},"(self, student_id):\n",[36,154853,154854,154856,154858,154860,154862],{"class":38,"line":101},[36,154855,4894],{"class":42},[36,154857,153468],{"class":50},[36,154859,27374],{"class":42},[36,154861,40204],{"class":73},[36,154863,154864],{"class":50},".students:\n",[36,154866,154867,154869,154872,154874],{"class":38,"line":128},[36,154868,6131],{"class":42},[36,154870,154871],{"class":50}," student.student_id ",[36,154873,4441],{"class":42},[36,154875,153489],{"class":50},[36,154877,154878,154881],{"class":38,"line":149},[36,154879,154880],{"class":42},"                return",[36,154882,153496],{"class":50},[36,154884,154885,154887],{"class":38,"line":154},[36,154886,16081],{"class":42},[36,154888,153503],{"class":73},[36,154890,154891],{"class":38,"line":167},[36,154892,58],{"emptyLinePlaceholder":57},[36,154894,154895,154897,154899],{"class":38,"line":172},[36,154896,32132],{"class":42},[36,154898,6698],{"class":46},[36,154900,154901],{"class":50},"(self, student):\n",[36,154903,154904,154906,154908],{"class":38,"line":192},[36,154905,3999],{"class":42},[36,154907,40204],{"class":73},[36,154909,154910],{"class":50},".find_by_id(student.student_id):\n",[36,154912,154913,154915],{"class":38,"line":211},[36,154914,17061],{"class":42},[36,154916,127138],{"class":73},[36,154918,154919,154921],{"class":38,"line":216},[36,154920,32176],{"class":73},[36,154922,154923],{"class":50},".students.append(student)\n",[36,154925,154926,154928],{"class":38,"line":231},[36,154927,16081],{"class":42},[36,154929,154930],{"class":73}," True\n",[19,154932,154933],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154935,154937],{"id":154936},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[1645,154939,154941],{"id":154940},"_1251-数据结构","12.5.1 数据结构",[26,154943,154945],{"className":31709,"code":154944,"language":31711,"meta":31,"style":31},"sales = [\n    {\"date\": \"2024-10-01\", \"category\": \"手机\", \"amount\": 12000},\n    {\"date\": \"2024-10-01\", \"category\": \"电脑\", \"amount\": 18000},\n    {\"date\": \"2024-10-02\", \"category\": \"手机\", \"amount\": 15000},\n    {\"date\": \"2024-10-02\", \"category\": \"电脑\", \"amount\": 16000},\n]\n",[33,154946,154947,154955,154986,155016,155045,155074],{"__ignoreMap":31},[36,154948,154949,154951,154953],{"class":38,"line":39},[36,154950,149796],{"class":50},[36,154952,70],{"class":42},[36,154954,56778],{"class":50},[36,154956,154957,154959,154961,154963,154965,154967,154970,154972,154975,154977,154979,154981,154984],{"class":38,"line":54},[36,154958,149716],{"class":50},[36,154960,149328],{"class":110},[36,154962,52768],{"class":50},[36,154964,149939],{"class":110},[36,154966,477],{"class":50},[36,154968,154969],{"class":110},"\"category\"",[36,154971,52768],{"class":50},[36,154973,154974],{"class":110},"\"手机\"",[36,154976,477],{"class":50},[36,154978,85415],{"class":110},[36,154980,52768],{"class":50},[36,154982,154983],{"class":73},"12000",[36,154985,6419],{"class":50},[36,154987,154988,154990,154992,154994,154996,154998,155000,155002,155005,155007,155009,155011,155014],{"class":38,"line":61},[36,154989,149716],{"class":50},[36,154991,149328],{"class":110},[36,154993,52768],{"class":50},[36,154995,149939],{"class":110},[36,154997,477],{"class":50},[36,154999,154969],{"class":110},[36,155001,52768],{"class":50},[36,155003,155004],{"class":110},"\"电脑\"",[36,155006,477],{"class":50},[36,155008,85415],{"class":110},[36,155010,52768],{"class":50},[36,155012,155013],{"class":73},"18000",[36,155015,6419],{"class":50},[36,155017,155018,155020,155022,155024,155026,155028,155030,155032,155034,155036,155038,155040,155043],{"class":38,"line":80},[36,155019,149716],{"class":50},[36,155021,149328],{"class":110},[36,155023,52768],{"class":50},[36,155025,149960],{"class":110},[36,155027,477],{"class":50},[36,155029,154969],{"class":110},[36,155031,52768],{"class":50},[36,155033,154974],{"class":110},[36,155035,477],{"class":50},[36,155037,85415],{"class":110},[36,155039,52768],{"class":50},[36,155041,155042],{"class":73},"15000",[36,155044,6419],{"class":50},[36,155046,155047,155049,155051,155053,155055,155057,155059,155061,155063,155065,155067,155069,155072],{"class":38,"line":96},[36,155048,149716],{"class":50},[36,155050,149328],{"class":110},[36,155052,52768],{"class":50},[36,155054,149960],{"class":110},[36,155056,477],{"class":50},[36,155058,154969],{"class":110},[36,155060,52768],{"class":50},[36,155062,155004],{"class":110},[36,155064,477],{"class":50},[36,155066,85415],{"class":110},[36,155068,52768],{"class":50},[36,155070,155071],{"class":73},"16000",[36,155073,6419],{"class":50},[36,155075,155076],{"class":38,"line":101},[36,155077,34577],{"class":50},[1645,155079,155081],{"id":155080},"_1252-按日期统计","12.5.2 按日期统计",[26,155083,155085],{"className":31709,"code":155084,"language":31711,"meta":31,"style":31},"daily_total = {}\n\nfor item in sales:\n    date = item[\"date\"]\n    amount = item[\"amount\"]\n    daily_total[date] = daily_total.get(date, 0) + amount\n\nprint(daily_total)\n",[33,155086,155087,155096,155100,155111,155125,155138,155157,155161],{"__ignoreMap":31},[36,155088,155089,155092,155094],{"class":38,"line":39},[36,155090,155091],{"class":50},"daily_total ",[36,155093,70],{"class":42},[36,155095,89199],{"class":50},[36,155097,155098],{"class":38,"line":54},[36,155099,58],{"emptyLinePlaceholder":57},[36,155101,155102,155104,155106,155108],{"class":38,"line":61},[36,155103,4516],{"class":42},[36,155105,149540],{"class":50},[36,155107,27374],{"class":42},[36,155109,155110],{"class":50}," sales:\n",[36,155112,155113,155116,155118,155121,155123],{"class":38,"line":80},[36,155114,155115],{"class":50},"    date ",[36,155117,70],{"class":42},[36,155119,155120],{"class":50}," item[",[36,155122,149328],{"class":110},[36,155124,34577],{"class":50},[36,155126,155127,155130,155132,155134,155136],{"class":38,"line":96},[36,155128,155129],{"class":50},"    amount ",[36,155131,70],{"class":42},[36,155133,155120],{"class":50},[36,155135,85415],{"class":110},[36,155137,34577],{"class":50},[36,155139,155140,155143,155145,155148,155150,155152,155154],{"class":38,"line":101},[36,155141,155142],{"class":50},"    daily_total[date] ",[36,155144,70],{"class":42},[36,155146,155147],{"class":50}," daily_total.get(date, ",[36,155149,1859],{"class":73},[36,155151,15043],{"class":50},[36,155153,2148],{"class":42},[36,155155,155156],{"class":50}," amount\n",[36,155158,155159],{"class":38,"line":128},[36,155160,58],{"emptyLinePlaceholder":57},[36,155162,155163,155165],{"class":38,"line":149},[36,155164,31746],{"class":73},[36,155166,155167],{"class":50},"(daily_total)\n",[1645,155169,155171],{"id":155170},"_1253-按类别统计","12.5.3 按类别统计",[26,155173,155175],{"className":31709,"code":155174,"language":31711,"meta":31,"style":31},"category_total = {}\n\nfor item in sales:\n    category = item[\"category\"]\n    amount = item[\"amount\"]\n    category_total[category] = category_total.get(category, 0) + amount\n\nprint(category_total)\n",[33,155176,155177,155186,155190,155200,155213,155225,155243,155247],{"__ignoreMap":31},[36,155178,155179,155182,155184],{"class":38,"line":39},[36,155180,155181],{"class":50},"category_total ",[36,155183,70],{"class":42},[36,155185,89199],{"class":50},[36,155187,155188],{"class":38,"line":54},[36,155189,58],{"emptyLinePlaceholder":57},[36,155191,155192,155194,155196,155198],{"class":38,"line":61},[36,155193,4516],{"class":42},[36,155195,149540],{"class":50},[36,155197,27374],{"class":42},[36,155199,155110],{"class":50},[36,155201,155202,155205,155207,155209,155211],{"class":38,"line":80},[36,155203,155204],{"class":50},"    category ",[36,155206,70],{"class":42},[36,155208,155120],{"class":50},[36,155210,154969],{"class":110},[36,155212,34577],{"class":50},[36,155214,155215,155217,155219,155221,155223],{"class":38,"line":96},[36,155216,155129],{"class":50},[36,155218,70],{"class":42},[36,155220,155120],{"class":50},[36,155222,85415],{"class":110},[36,155224,34577],{"class":50},[36,155226,155227,155230,155232,155235,155237,155239,155241],{"class":38,"line":101},[36,155228,155229],{"class":50},"    category_total[category] ",[36,155231,70],{"class":42},[36,155233,155234],{"class":50}," category_total.get(category, ",[36,155236,1859],{"class":73},[36,155238,15043],{"class":50},[36,155240,2148],{"class":42},[36,155242,155156],{"class":50},[36,155244,155245],{"class":38,"line":128},[36,155246,58],{"emptyLinePlaceholder":57},[36,155248,155249,155251],{"class":38,"line":149},[36,155250,31746],{"class":73},[36,155252,155253],{"class":50},"(category_total)\n",[1645,155255,155257],{"id":155256},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,155259,155261],{"className":31709,"code":155260,"language":31711,"meta":31,"style":31},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[33,155262,155263,155288],{"__ignoreMap":31},[36,155264,155265,155268,155270,155272,155275,155278,155281,155284,155286],{"class":38,"line":39},[36,155266,155267],{"class":50},"top_date, top_amount ",[36,155269,70],{"class":42},[36,155271,7433],{"class":73},[36,155273,155274],{"class":50},"(daily_total.items(), ",[36,155276,155277],{"class":473},"key",[36,155279,155280],{"class":42},"=lambda",[36,155282,155283],{"class":50}," item: item[",[36,155285,1885],{"class":73},[36,155287,6146],{"class":50},[36,155289,155290,155292],{"class":38,"line":54},[36,155291,31746],{"class":73},[36,155293,155294],{"class":50},"(top_date, top_amount)\n",[14,155296,155298],{"id":155297},"_126-绘制柱状图","12.6 绘制柱状图",[26,155300,155302],{"className":31709,"code":155301,"language":31711,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar\n\ncategory_total = {\n    \"手机\": 27000,\n    \"电脑\": 34000,\n    \"耳机\": 8000,\n}\n\nbar = Bar()\nbar.add_xaxis(list(category_total.keys()))\nbar.add_yaxis(\"销售额\", list(category_total.values()))\nbar.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"品类销售额\"),\n    xaxis_opts=opts.AxisOpts(name=\"品类\"),\n    yaxis_opts=opts.AxisOpts(name=\"销售额\"),\n)\nbar.render(\"category_sales.html\")\n",[33,155303,155304,155318,155329,155333,155341,155353,155365,155376,155380,155384,155394,155405,155419,155424,155441,155458,155474,155478],{"__ignoreMap":31},[36,155305,155306,155308,155310,155312,155314,155316],{"class":38,"line":39},[36,155307,32068],{"class":42},[36,155309,148710],{"class":50},[36,155311,31723],{"class":42},[36,155313,148715],{"class":50},[36,155315,32714],{"class":42},[36,155317,148720],{"class":50},[36,155319,155320,155322,155324,155326],{"class":38,"line":54},[36,155321,32068],{"class":42},[36,155323,148569],{"class":50},[36,155325,31723],{"class":42},[36,155327,155328],{"class":50}," Bar\n",[36,155330,155331],{"class":38,"line":61},[36,155332,58],{"emptyLinePlaceholder":57},[36,155334,155335,155337,155339],{"class":38,"line":80},[36,155336,155181],{"class":50},[36,155338,70],{"class":42},[36,155340,16901],{"class":50},[36,155342,155343,155346,155348,155351],{"class":38,"line":96},[36,155344,155345],{"class":110},"    \"手机\"",[36,155347,52768],{"class":50},[36,155349,155350],{"class":73},"27000",[36,155352,32797],{"class":50},[36,155354,155355,155358,155360,155363],{"class":38,"line":101},[36,155356,155357],{"class":110},"    \"电脑\"",[36,155359,52768],{"class":50},[36,155361,155362],{"class":73},"34000",[36,155364,32797],{"class":50},[36,155366,155367,155370,155372,155374],{"class":38,"line":128},[36,155368,155369],{"class":110},"    \"耳机\"",[36,155371,52768],{"class":50},[36,155373,125730],{"class":73},[36,155375,32797],{"class":50},[36,155377,155378],{"class":38,"line":149},[36,155379,250],{"class":50},[36,155381,155382],{"class":38,"line":154},[36,155383,58],{"emptyLinePlaceholder":57},[36,155385,155386,155389,155391],{"class":38,"line":167},[36,155387,155388],{"class":50},"bar ",[36,155390,70],{"class":42},[36,155392,155393],{"class":50}," Bar()\n",[36,155395,155396,155399,155402],{"class":38,"line":172},[36,155397,155398],{"class":50},"bar.add_xaxis(",[36,155400,155401],{"class":73},"list",[36,155403,155404],{"class":50},"(category_total.keys()))\n",[36,155406,155407,155410,155412,155414,155416],{"class":38,"line":192},[36,155408,155409],{"class":50},"bar.add_yaxis(",[36,155411,148626],{"class":110},[36,155413,477],{"class":50},[36,155415,155401],{"class":73},[36,155417,155418],{"class":50},"(category_total.values()))\n",[36,155420,155421],{"class":38,"line":211},[36,155422,155423],{"class":50},"bar.set_global_opts(\n",[36,155425,155426,155428,155430,155432,155434,155436,155439],{"class":38,"line":216},[36,155427,148804],{"class":473},[36,155429,70],{"class":42},[36,155431,148809],{"class":50},[36,155433,52738],{"class":473},[36,155435,70],{"class":42},[36,155437,155438],{"class":110},"\"品类销售额\"",[36,155440,39378],{"class":50},[36,155442,155443,155445,155447,155449,155451,155453,155456],{"class":38,"line":231},[36,155444,148823],{"class":473},[36,155446,70],{"class":42},[36,155448,148828],{"class":50},[36,155450,81141],{"class":473},[36,155452,70],{"class":42},[36,155454,155455],{"class":110},"\"品类\"",[36,155457,39378],{"class":50},[36,155459,155460,155462,155464,155466,155468,155470,155472],{"class":38,"line":236},[36,155461,148842],{"class":473},[36,155463,70],{"class":42},[36,155465,148828],{"class":50},[36,155467,81141],{"class":473},[36,155469,70],{"class":42},[36,155471,148626],{"class":110},[36,155473,39378],{"class":50},[36,155475,155476],{"class":38,"line":247},[36,155477,1680],{"class":50},[36,155479,155480,155483,155486],{"class":38,"line":637},[36,155481,155482],{"class":50},"bar.render(",[36,155484,155485],{"class":110},"\"category_sales.html\"",[36,155487,1680],{"class":50},[14,155489,155491],{"id":155490},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155493,155494],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,155496,155498],{"className":31709,"code":155497,"language":31711,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Bar, Timeline\n\ndata = {\n    \"2024-10-01\": {\"手机\": 12000, \"电脑\": 18000},\n    \"2024-10-02\": {\"手机\": 15000, \"电脑\": 16000},\n    \"2024-10-03\": {\"手机\": 17000, \"电脑\": 19000},\n}\n\ntimeline = Timeline()\n\nfor date, category_data in data.items():\n    bar = Bar()\n    bar.add_xaxis(list(category_data.keys()))\n    bar.add_yaxis(\"销售额\", list(category_data.values()))\n    bar.set_global_opts(title_opts=opts.TitleOpts(title=f\"{date}销售额\"))\n    timeline.add(bar, date)\n\ntimeline.render(\"timeline_sales.html\")\n",[33,155499,155500,155514,155525,155529,155537,155561,155584,155609,155613,155617,155627,155631,155642,155651,155661,155675,155706,155711,155715],{"__ignoreMap":31},[36,155501,155502,155504,155506,155508,155510,155512],{"class":38,"line":39},[36,155503,32068],{"class":42},[36,155505,148710],{"class":50},[36,155507,31723],{"class":42},[36,155509,148715],{"class":50},[36,155511,32714],{"class":42},[36,155513,148720],{"class":50},[36,155515,155516,155518,155520,155522],{"class":38,"line":54},[36,155517,32068],{"class":42},[36,155519,148569],{"class":50},[36,155521,31723],{"class":42},[36,155523,155524],{"class":50}," Bar, Timeline\n",[36,155526,155527],{"class":38,"line":61},[36,155528,58],{"emptyLinePlaceholder":57},[36,155530,155531,155533,155535],{"class":38,"line":80},[36,155532,102989],{"class":50},[36,155534,70],{"class":42},[36,155536,16901],{"class":50},[36,155538,155539,155542,155545,155547,155549,155551,155553,155555,155557,155559],{"class":38,"line":96},[36,155540,155541],{"class":110},"    \"2024-10-01\"",[36,155543,155544],{"class":50},": {",[36,155546,154974],{"class":110},[36,155548,52768],{"class":50},[36,155550,154983],{"class":73},[36,155552,477],{"class":50},[36,155554,155004],{"class":110},[36,155556,52768],{"class":50},[36,155558,155013],{"class":73},[36,155560,6419],{"class":50},[36,155562,155563,155566,155568,155570,155572,155574,155576,155578,155580,155582],{"class":38,"line":101},[36,155564,155565],{"class":110},"    \"2024-10-02\"",[36,155567,155544],{"class":50},[36,155569,154974],{"class":110},[36,155571,52768],{"class":50},[36,155573,155042],{"class":73},[36,155575,477],{"class":50},[36,155577,155004],{"class":110},[36,155579,52768],{"class":50},[36,155581,155071],{"class":73},[36,155583,6419],{"class":50},[36,155585,155586,155589,155591,155593,155595,155598,155600,155602,155604,155607],{"class":38,"line":128},[36,155587,155588],{"class":110},"    \"2024-10-03\"",[36,155590,155544],{"class":50},[36,155592,154974],{"class":110},[36,155594,52768],{"class":50},[36,155596,155597],{"class":73},"17000",[36,155599,477],{"class":50},[36,155601,155004],{"class":110},[36,155603,52768],{"class":50},[36,155605,155606],{"class":73},"19000",[36,155608,6419],{"class":50},[36,155610,155611],{"class":38,"line":149},[36,155612,250],{"class":50},[36,155614,155615],{"class":38,"line":154},[36,155616,58],{"emptyLinePlaceholder":57},[36,155618,155619,155622,155624],{"class":38,"line":167},[36,155620,155621],{"class":50},"timeline ",[36,155623,70],{"class":42},[36,155625,155626],{"class":50}," Timeline()\n",[36,155628,155629],{"class":38,"line":172},[36,155630,58],{"emptyLinePlaceholder":57},[36,155632,155633,155635,155638,155640],{"class":38,"line":192},[36,155634,4516],{"class":42},[36,155636,155637],{"class":50}," date, category_data ",[36,155639,27374],{"class":42},[36,155641,150479],{"class":50},[36,155643,155644,155647,155649],{"class":38,"line":211},[36,155645,155646],{"class":50},"    bar ",[36,155648,70],{"class":42},[36,155650,155393],{"class":50},[36,155652,155653,155656,155658],{"class":38,"line":216},[36,155654,155655],{"class":50},"    bar.add_xaxis(",[36,155657,155401],{"class":73},[36,155659,155660],{"class":50},"(category_data.keys()))\n",[36,155662,155663,155666,155668,155670,155672],{"class":38,"line":231},[36,155664,155665],{"class":50},"    bar.add_yaxis(",[36,155667,148626],{"class":110},[36,155669,477],{"class":50},[36,155671,155401],{"class":73},[36,155673,155674],{"class":50},"(category_data.values()))\n",[36,155676,155677,155680,155683,155685,155687,155689,155691,155693,155695,155697,155699,155701,155704],{"class":38,"line":236},[36,155678,155679],{"class":50},"    bar.set_global_opts(",[36,155681,155682],{"class":473},"title_opts",[36,155684,70],{"class":42},[36,155686,148809],{"class":50},[36,155688,52738],{"class":473},[36,155690,70],{"class":42},[36,155692,1724],{"class":42},[36,155694,1919],{"class":110},[36,155696,2563],{"class":73},[36,155698,75257],{"class":50},[36,155700,2613],{"class":73},[36,155702,155703],{"class":110},"销售额\"",[36,155705,31828],{"class":50},[36,155707,155708],{"class":38,"line":247},[36,155709,155710],{"class":50},"    timeline.add(bar, date)\n",[36,155712,155713],{"class":38,"line":637},[36,155714,58],{"emptyLinePlaceholder":57},[36,155716,155717,155720,155723],{"class":38,"line":646},[36,155718,155719],{"class":50},"timeline.render(",[36,155721,155722],{"class":110},"\"timeline_sales.html\"",[36,155724,1680],{"class":50},[14,155726,155728],{"id":155727},"_128-绘制地图","12.8 绘制地图",[19,155730,155731],{},"地图适合展示地区数据。",[26,155733,155735],{"className":31709,"code":155734,"language":31711,"meta":31,"style":31},"from pyecharts import options as opts\nfrom pyecharts.charts import Map\n\ndata = [\n    (\"北京\", 120),\n    (\"上海\", 150),\n    (\"广东\", 200),\n    (\"浙江\", 180),\n]\n\nmap_chart = Map()\nmap_chart.add(\"销售额\", data, \"china\")\nmap_chart.set_global_opts(\n    title_opts=opts.TitleOpts(title=\"地区销售额\"),\n    visualmap_opts=opts.VisualMapOpts(max_=200),\n)\nmap_chart.render(\"map_sales.html\")\n",[33,155736,155737,155751,155762,155766,155774,155787,155799,155812,155825,155829,155833,155843,155858,155863,155880,155899,155903],{"__ignoreMap":31},[36,155738,155739,155741,155743,155745,155747,155749],{"class":38,"line":39},[36,155740,32068],{"class":42},[36,155742,148710],{"class":50},[36,155744,31723],{"class":42},[36,155746,148715],{"class":50},[36,155748,32714],{"class":42},[36,155750,148720],{"class":50},[36,155752,155753,155755,155757,155759],{"class":38,"line":54},[36,155754,32068],{"class":42},[36,155756,148569],{"class":50},[36,155758,31723],{"class":42},[36,155760,155761],{"class":50}," Map\n",[36,155763,155764],{"class":38,"line":61},[36,155765,58],{"emptyLinePlaceholder":57},[36,155767,155768,155770,155772],{"class":38,"line":80},[36,155769,102989],{"class":50},[36,155771,70],{"class":42},[36,155773,56778],{"class":50},[36,155775,155776,155779,155781,155783,155785],{"class":38,"line":96},[36,155777,155778],{"class":50},"    (",[36,155780,70600],{"class":110},[36,155782,477],{"class":50},[36,155784,2484],{"class":73},[36,155786,39378],{"class":50},[36,155788,155789,155791,155793,155795,155797],{"class":38,"line":101},[36,155790,155778],{"class":50},[36,155792,70620],{"class":110},[36,155794,477],{"class":50},[36,155796,148643],{"class":73},[36,155798,39378],{"class":50},[36,155800,155801,155803,155806,155808,155810],{"class":38,"line":128},[36,155802,155778],{"class":50},[36,155804,155805],{"class":110},"\"广东\"",[36,155807,477],{"class":50},[36,155809,3240],{"class":73},[36,155811,39378],{"class":50},[36,155813,155814,155816,155819,155821,155823],{"class":38,"line":149},[36,155815,155778],{"class":50},[36,155817,155818],{"class":110},"\"浙江\"",[36,155820,477],{"class":50},[36,155822,148648],{"class":73},[36,155824,39378],{"class":50},[36,155826,155827],{"class":38,"line":154},[36,155828,34577],{"class":50},[36,155830,155831],{"class":38,"line":167},[36,155832,58],{"emptyLinePlaceholder":57},[36,155834,155835,155838,155840],{"class":38,"line":172},[36,155836,155837],{"class":50},"map_chart ",[36,155839,70],{"class":42},[36,155841,155842],{"class":50}," Map()\n",[36,155844,155845,155848,155850,155853,155856],{"class":38,"line":192},[36,155846,155847],{"class":50},"map_chart.add(",[36,155849,148626],{"class":110},[36,155851,155852],{"class":50},", data, ",[36,155854,155855],{"class":110},"\"china\"",[36,155857,1680],{"class":50},[36,155859,155860],{"class":38,"line":211},[36,155861,155862],{"class":50},"map_chart.set_global_opts(\n",[36,155864,155865,155867,155869,155871,155873,155875,155878],{"class":38,"line":216},[36,155866,148804],{"class":473},[36,155868,70],{"class":42},[36,155870,148809],{"class":50},[36,155872,52738],{"class":473},[36,155874,70],{"class":42},[36,155876,155877],{"class":110},"\"地区销售额\"",[36,155879,39378],{"class":50},[36,155881,155882,155885,155887,155890,155893,155895,155897],{"class":38,"line":231},[36,155883,155884],{"class":473},"    visualmap_opts",[36,155886,70],{"class":42},[36,155888,155889],{"class":50},"opts.VisualMapOpts(",[36,155891,155892],{"class":473},"max_",[36,155894,70],{"class":42},[36,155896,3240],{"class":73},[36,155898,39378],{"class":50},[36,155900,155901],{"class":38,"line":236},[36,155902,1680],{"class":50},[36,155904,155905,155908,155911],{"class":38,"line":247},[36,155906,155907],{"class":50},"map_chart.render(",[36,155909,155910],{"class":110},"\"map_sales.html\"",[36,155912,1680],{"class":50},[19,155914,155915],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155917,155919],{"id":155918},"_129-项目拆分建议","12.9 项目拆分建议",[19,155921,155922],{},"当代码超过一个文件时，可以这样组织：",[26,155924,155927],{"className":155925,"code":155926,"language":6676,"meta":31},[6674],"sales_project\u002F\n  main.py\n  data\u002F\n    sales.json\n  services\u002F\n    __init__.py\n    sales_service.py\n  charts\u002F\n    __init__.py\n    chart_builder.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[33,155928,155926],{"__ignoreMap":31},[19,155930,155931],{},"职责：",[256,155933,155934,155940,155946,155952],{},[259,155935,155936,155939],{},[33,155937,155938],{},"main.py","：程序入口。",[259,155941,155942,155945],{},[33,155943,155944],{},"file_utils.py","：读写 JSON。",[259,155947,155948,155951],{},[33,155949,155950],{},"sales_service.py","：统计销售数据。",[259,155953,155954,155957],{},[33,155955,155956],{},"chart_builder.py","：生成图表。",[14,155959,155961],{"id":155960},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155963,155964],{},"语法基础：",[256,155966,155967,155970,155973,155976],{},[259,155968,155969],{},"会写变量、注释、输入输出。",[259,155971,155972],{},"会使用 int、float、str、bool。",[259,155974,155975],{},"会做类型转换。",[259,155977,155978],{},"会使用 f-string 格式化输出。",[19,155980,155981],{},"流程控制：",[256,155983,155984,155990,155996,156004],{},[259,155985,155986,155987,29716],{},"会写 ",[33,155988,155989],{},"if elif else",[259,155991,155986,155992,102349,155994,29716],{},[33,155993,109994],{},[33,155995,4516],{},[259,155997,155998,155999,102349,156001,29716],{},"理解 ",[33,156000,3559],{},[33,156002,156003],{},"continue",[259,156005,156006],{},"能写嵌套循环。",[19,156008,156009],{},"函数：",[256,156011,156012,156015,156018,156021],{},[259,156013,156014],{},"会定义和调用函数。",[259,156016,156017],{},"理解参数和返回值。",[259,156019,156020],{},"知道局部变量和全局变量。",[259,156022,156023],{},"会使用默认参数、关键字参数、不定长参数。",[19,156025,156026],{},"容器：",[256,156028,156029,156032,156035,156038,156041],{},[259,156030,156031],{},"会使用列表增删改查。",[259,156033,156034],{},"会遍历列表、字典。",[259,156036,156037],{},"会使用切片。",[259,156039,156040],{},"会用集合去重。",[259,156042,156043],{},"会处理列表嵌套字典。",[19,156045,156046],{},"文件和模块：",[256,156048,156049,156052,156055,156058,156061],{},[259,156050,156051],{},"会读写文本文件。",[259,156053,156054],{},"会读写 JSON。",[259,156056,156057],{},"会捕获常见异常。",[259,156059,156060],{},"会导入模块和第三方包。",[259,156062,156063],{},"会创建简单包结构。",[19,156065,156066],{},"项目能力：",[256,156068,156069,156072,156075,156078,156081],{},[259,156070,156071],{},"能把代码拆成函数。",[259,156073,156074],{},"能把数据保存到文件。",[259,156076,156077],{},"能处理用户输入错误。",[259,156079,156080],{},"能写一个完整菜单程序。",[259,156082,156083],{},"能用 pyecharts 生成图表。",[14,156085,156087],{"id":156086},"_1211-推荐练习顺序","12.11 推荐练习顺序",[256,156089,156090,156093,156096,156099,156102,156105,156108,156111],{},[259,156091,156092],{},"猜数字游戏。",[259,156094,156095],{},"ATM 菜单程序。",[259,156097,156098],{},"学生成绩统计。",[259,156100,156101],{},"学生管理系统函数版。",[259,156103,156104],{},"学生管理系统文件持久化版。",[259,156106,156107],{},"学生管理系统面向对象版。",[259,156109,156110],{},"销售数据统计。",[259,156112,156113],{},"销售数据可视化。",[14,156115,156117],{"id":156116},"_1212-常见学习误区","12.12 常见学习误区",[256,156119,156120,156123,156126,156129,156132,156135,156138],{},[259,156121,156122],{},"只看视频不敲代码。",[259,156124,156125],{},"一报错就复制错误去搜，不先读报错位置。",[259,156127,156128],{},"变量名随便写，后续自己看不懂。",[259,156130,156131],{},"所有代码都写在一个文件一个函数里。",[259,156133,156134],{},"不保存练习代码，复习时没有材料。",[259,156136,156137],{},"还没掌握列表字典就急着学框架。",[259,156139,156140],{},"不会读官方文档，只依赖教程。",[14,156142,156144],{"id":156143},"_1213-如何读报错","12.13 如何读报错",[19,156146,156147],{},"报错通常从下往上看最后几行。",[19,156149,16464],{},[26,156151,156154],{"className":156152,"code":156153,"language":6676,"meta":31},[6674],"ValueError: invalid literal for int() with base 10: 'abc'\n",[33,156155,156153],{"__ignoreMap":31},[19,156157,25930],{},[256,156159,156160,156166,156176],{},[259,156161,156162,156163,29716],{},"异常类型是 ",[33,156164,156165],{},"ValueError",[259,156167,108676,156168,156171,156172,156175],{},[33,156169,156170],{},"int()"," 无法把 ",[33,156173,156174],{},"'abc'"," 转成整数。",[259,156177,156178],{},"应该检查输入内容或增加异常处理。",[19,156180,156181],{},"再看文件名和行号：",[26,156183,156186],{"className":156184,"code":156185,"language":6676,"meta":31},[6674],"File \"main.py\", line 10, in \u003Cmodule>\n",[33,156187,156185],{"__ignoreMap":31},[19,156189,156190,156191,156193],{},"表示错误发生在 ",[33,156192,155938],{}," 第 10 行。",[14,156195,156197],{"id":156196},"_1214-后续学习方向","12.14 后续学习方向",[19,156199,156200],{},"Python 基础完成后，可以按兴趣选择方向：",[256,156202,156203,156215,156224,156236,156247,156256,156266],{},[259,156204,156205,156206,1880,156209,1880,156212,29716],{},"自动化办公：",[33,156207,156208],{},"openpyxl",[33,156210,156211],{},"python-docx",[33,156213,156214],{},"pdfplumber",[259,156216,156217,156218,1880,156220,1880,156222,29716],{},"数据分析：",[33,156219,101957],{},[33,156221,147516],{},[33,156223,147524],{},[259,156225,156226,156227,1880,156230,1880,156233,29716],{},"Web 后端：",[33,156228,156229],{},"Flask",[33,156231,156232],{},"FastAPI",[33,156234,156235],{},"Django",[259,156237,156238,156239,1880,156241,1880,156244,29716],{},"爬虫：",[33,156240,147501],{},[33,156242,156243],{},"BeautifulSoup",[33,156245,156246],{},"Scrapy",[259,156248,156249,156250,1880,156252,156255],{},"测试开发：",[33,156251,147548],{},[33,156253,156254],{},"selenium","、接口测试。",[259,156257,156258,156259,1880,156261,1880,156263,29716],{},"人工智能：",[33,156260,101957],{},[33,156262,147516],{},[33,156264,156265],{},"pytorch",[259,156267,156268,156269,1880,156271,1880,156274,29716],{},"运维脚本：",[33,156270,147117],{},[33,156272,156273],{},"subprocess",[33,156275,156276],{},"paramiko",[19,156278,156279],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156281,156283],{"id":156282},"_1215-结课练习","12.15 结课练习",[256,156285,156286,156289,156292,156295,156298,156301,156304,156307],{},[259,156287,156288],{},"完成函数版学生管理系统。",[259,156290,156291],{},"给学生管理系统增加 JSON 持久化。",[259,156293,156294],{},"给学生管理系统增加异常处理。",[259,156296,156297],{},"把学生管理系统改成面向对象版。",[259,156299,156300],{},"使用 pyecharts 绘制学生成绩柱状图。",[259,156302,156303],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[259,156305,156306],{},"按品类统计销售额并绘制柱状图。",[259,156308,156309],{},"写一份自己的 Python 学习路线图。",[1592,156311,156312],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":54,"depth":54,"links":156314},[156315,156316,156319,156320,156321,156327,156328,156329,156330,156331,156332,156333,156334,156335,156336],{"id":153031,"depth":54,"text":153032},{"id":153081,"depth":54,"text":153082,"children":156317},[156318],{"id":153085,"depth":61,"text":153086},{"id":153124,"depth":54,"text":153125},{"id":154598,"depth":54,"text":154599},{"id":154936,"depth":54,"text":154937,"children":156322},[156323,156324,156325,156326],{"id":154940,"depth":61,"text":154941},{"id":155080,"depth":61,"text":155081},{"id":155170,"depth":61,"text":155171},{"id":155256,"depth":61,"text":155257},{"id":155297,"depth":54,"text":155298},{"id":155490,"depth":54,"text":155491},{"id":155727,"depth":54,"text":155728},{"id":155918,"depth":54,"text":155919},{"id":155960,"depth":54,"text":155961},{"id":156086,"depth":54,"text":156087},{"id":156116,"depth":54,"text":156117},{"id":156143,"depth":54,"text":156144},{"id":156196,"depth":54,"text":156197},{"id":156282,"depth":54,"text":156283},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153023,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156343,"title":156344,"body":156345,"description":24706,"extension":1603,"meta":158814,"navigation":57,"path":158815,"seo":158816,"stem":158817,"__hash__":158818},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156346,"toc":158789},[156347,156350,156354,156357,156360,156380,156383,156406,156409,156412,156434,156437,156459,156463,156466,156506,156509,156630,156634,156637,156677,156680,156704,156707,156711,156714,156728,156761,156764,156799,156802,156825,156828,156861,156864,156866,156872,156947,156950,156956,156973,157013,157017,157020,157066,157068,157106,157109,157144,157147,157182,157185,157217,157220,157239,157243,157247,157360,157362,157437,157441,157487,157490,157516,157525,157529,157532,157595,157603,157631,157635,157675,157740,157744,157747,157786,157789,157834,157837,157898,157902,157929,157932,157960,157963,157967,157971,158036,158039,158077,158080,158112,158116,158215,158219,158222,158295,158298,158346,158350,158356,158396,158399,158446,158449,158498,158502,158504,158518,158520,158701,158705,158732,158752,158759,158763,158780,158786],[10,156348,156344],{"id":156349},"_2-基础语法变量与字符串",[14,156351,156353],{"id":156352},"_21-注释","2.1 注释",[19,156355,156356],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156358,156359],{},"单行注释：",[26,156361,156363],{"className":31709,"code":156362,"language":31711,"meta":31,"style":31},"# 这是单行注释\nprint(\"hello\")\n",[33,156364,156365,156370],{"__ignoreMap":31},[36,156366,156367],{"class":38,"line":39},[36,156368,156369],{"class":124},"# 这是单行注释\n",[36,156371,156372,156374,156376,156378],{"class":38,"line":54},[36,156373,31746],{"class":73},[36,156375,222],{"class":50},[36,156377,7326],{"class":110},[36,156379,1680],{"class":50},[19,156381,156382],{},"多行说明常用三引号：",[26,156384,156386],{"className":31709,"code":156385,"language":31711,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[33,156387,156388,156392,156397,156402],{"__ignoreMap":31},[36,156389,156390],{"class":38,"line":39},[36,156391,97029],{"class":110},[36,156393,156394],{"class":38,"line":54},[36,156395,156396],{"class":110},"这是多行说明。\n",[36,156398,156399],{"class":38,"line":61},[36,156400,156401],{"class":110},"常用于文件顶部说明、函数说明等。\n",[36,156403,156404],{"class":38,"line":80},[36,156405,97029],{"class":110},[19,156407,156408],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156410,156411],{},"不好：",[26,156413,156415],{"className":31709,"code":156414,"language":31711,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[33,156416,156417,156422],{"__ignoreMap":31},[36,156418,156419],{"class":38,"line":39},[36,156420,156421],{"class":124},"# age 加 1\n",[36,156423,156424,156426,156428,156430,156432],{"class":38,"line":54},[36,156425,147877],{"class":50},[36,156427,70],{"class":42},[36,156429,17036],{"class":50},[36,156431,2148],{"class":42},[36,156433,57030],{"class":73},[19,156435,156436],{},"较好：",[26,156438,156440],{"className":31709,"code":156439,"language":31711,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[33,156441,156442,156447],{"__ignoreMap":31},[36,156443,156444],{"class":38,"line":39},[36,156445,156446],{"class":124},"# 用户过完生日后，年龄增加一岁\n",[36,156448,156449,156451,156453,156455,156457],{"class":38,"line":54},[36,156450,147877],{"class":50},[36,156452,70],{"class":42},[36,156454,17036],{"class":50},[36,156456,2148],{"class":42},[36,156458,57030],{"class":73},[14,156460,156462],{"id":156461},"_22-字面量","2.2 字面量",[19,156464,156465],{},"字面量就是代码中直接写出来的数据。",[26,156467,156469],{"className":31709,"code":156468,"language":31711,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[33,156470,156471,156478,156485,156492,156499],{"__ignoreMap":31},[36,156472,156473,156475],{"class":38,"line":39},[36,156474,1979],{"class":73},[36,156476,156477],{"class":124},"          # 整数\n",[36,156479,156480,156482],{"class":38,"line":54},[36,156481,1721],{"class":73},[36,156483,156484],{"class":124},"         # 小数\n",[36,156486,156487,156489],{"class":38,"line":61},[36,156488,7326],{"class":110},[36,156490,156491],{"class":124},"      # 字符串\n",[36,156493,156494,156496],{"class":38,"line":80},[36,156495,32807],{"class":73},[36,156497,156498],{"class":124},"         # 布尔值\n",[36,156500,156501,156503],{"class":38,"line":96},[36,156502,97017],{"class":73},[36,156504,156505],{"class":124},"         # 空值\n",[19,156507,156508],{},"常见字面量类型：",[1806,156510,156511,156521],{},[1809,156512,156513],{},[1812,156514,156515,156517,156519],{},[1815,156516,25067],{},[1815,156518,28823],{},[1815,156520,27200],{},[1852,156522,156523,156534,156545,156556,156568,156580,156592,156605,156617],{},[1812,156524,156525,156527,156531],{},[1857,156526,43],{},[1857,156528,156529],{},[33,156530,1979],{},[1857,156532,156533],{},"整数",[1812,156535,156536,156538,156542],{},[1857,156537,1713],{},[1857,156539,156540],{},[33,156541,1721],{},[1857,156543,156544],{},"浮点数",[1812,156546,156547,156549,156553],{},[1857,156548,2835],{},[1857,156550,156551],{},[33,156552,7326],{},[1857,156554,156555],{},"字符串",[1812,156557,156558,156560,156566],{},[1857,156559,2887],{},[1857,156561,156562,1880,156564],{},[33,156563,32807],{},[33,156565,35318],{},[1857,156567,67346],{},[1812,156569,156570,156573,156577],{},[1857,156571,156572],{},"NoneType",[1857,156574,156575],{},[33,156576,97017],{},[1857,156578,156579],{},"空值",[1812,156581,156582,156584,156589],{},[1857,156583,155401],{},[1857,156585,156586],{},[33,156587,156588],{},"[1, 2, 3]",[1857,156590,156591],{},"列表",[1812,156593,156594,156597,156602],{},[1857,156595,156596],{},"tuple",[1857,156598,156599],{},[33,156600,156601],{},"(1, 2, 3)",[1857,156603,156604],{},"元组",[1812,156606,156607,156609,156614],{},[1857,156608,115877],{},[1857,156610,156611],{},[33,156612,156613],{},"{\"name\": \"张三\"}",[1857,156615,156616],{},"字典",[1812,156618,156619,156622,156627],{},[1857,156620,156621],{},"set",[1857,156623,156624],{},[33,156625,156626],{},"{1, 2, 3}",[1857,156628,156629],{},"集合",[14,156631,156633],{"id":156632},"_23-变量","2.3 变量",[19,156635,156636],{},"变量是保存数据的名字。",[26,156638,156640],{"className":31709,"code":156639,"language":31711,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[33,156641,156642,156650,156658,156668],{"__ignoreMap":31},[36,156643,156644,156646,156648],{"class":38,"line":39},[36,156645,147867],{"class":50},[36,156647,70],{"class":42},[36,156649,150684],{"class":110},[36,156651,156652,156654,156656],{"class":38,"line":54},[36,156653,147877],{"class":50},[36,156655,70],{"class":42},[36,156657,147882],{"class":73},[36,156659,156660,156663,156665],{"class":38,"line":61},[36,156661,156662],{"class":50},"height ",[36,156664,70],{"class":42},[36,156666,156667],{"class":73}," 1.75\n",[36,156669,156670,156673,156675],{"class":38,"line":80},[36,156671,156672],{"class":50},"is_student ",[36,156674,70],{"class":42},[36,156676,154930],{"class":73},[19,156678,156679],{},"Python 的变量不需要提前声明类型：",[26,156681,156683],{"className":31709,"code":156682,"language":31711,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[33,156684,156685,156695],{"__ignoreMap":31},[36,156686,156687,156690,156692],{"class":38,"line":39},[36,156688,156689],{"class":50},"score ",[36,156691,70],{"class":42},[36,156693,156694],{"class":73}," 100\n",[36,156696,156697,156699,156701],{"class":38,"line":54},[36,156698,156689],{"class":50},[36,156700,70],{"class":42},[36,156702,156703],{"class":110}," \"满分\"\n",[19,156705,156706],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156708,156710],{"id":156709},"_24-变量命名规则","2.4 变量命名规则",[19,156712,156713],{},"硬性规则：",[256,156715,156716,156719,156722,156725],{},[259,156717,156718],{},"只能由字母、数字、下划线组成。",[259,156720,156721],{},"不能以数字开头。",[259,156723,156724],{},"不能使用 Python 关键字。",[259,156726,156727],{},"区分大小写。",[26,156729,156731],{"className":31709,"code":156730,"language":31711,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[33,156732,156733,156742,156751],{"__ignoreMap":31},[36,156734,156735,156738,156740],{"class":38,"line":39},[36,156736,156737],{"class":50},"user_name ",[36,156739,70],{"class":42},[36,156741,147872],{"class":110},[36,156743,156744,156747,156749],{"class":38,"line":54},[36,156745,156746],{"class":50},"age2 ",[36,156748,70],{"class":42},[36,156750,147882],{"class":73},[36,156752,156753,156756,156758],{"class":38,"line":61},[36,156754,156755],{"class":50},"_token ",[36,156757,70],{"class":42},[36,156759,156760],{"class":110}," \"abc\"\n",[19,156762,156763],{},"错误写法：",[26,156765,156767],{"className":31709,"code":156766,"language":31711,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[33,156768,156769,156778,156790],{"__ignoreMap":31},[36,156770,156771,156774,156776],{"class":38,"line":39},[36,156772,156773],{"class":78734},"2age",[36,156775,14893],{"class":42},[36,156777,147882],{"class":73},[36,156779,156780,156782,156784,156786,156788],{"class":38,"line":54},[36,156781,132915],{"class":50},[36,156783,2199],{"class":42},[36,156785,147867],{"class":50},[36,156787,70],{"class":42},[36,156789,147872],{"class":110},[36,156791,156792,156794,156796],{"class":38,"line":61},[36,156793,16023],{"class":42},[36,156795,14893],{"class":42},[36,156797,156798],{"class":110}," \"一班\"\n",[19,156800,156801],{},"查看关键字：",[26,156803,156805],{"className":31709,"code":156804,"language":31711,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[33,156806,156807,156814,156818],{"__ignoreMap":31},[36,156808,156809,156811],{"class":38,"line":39},[36,156810,31723],{"class":42},[36,156812,156813],{"class":50}," keyword\n",[36,156815,156816],{"class":38,"line":54},[36,156817,58],{"emptyLinePlaceholder":57},[36,156819,156820,156822],{"class":38,"line":61},[36,156821,31746],{"class":73},[36,156823,156824],{"class":50},"(keyword.kwlist)\n",[19,156826,156827],{},"推荐命名风格：",[26,156829,156831],{"className":31709,"code":156830,"language":31711,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[33,156832,156833,156842,156852],{"__ignoreMap":31},[36,156834,156835,156838,156840],{"class":38,"line":39},[36,156836,156837],{"class":50},"student_name ",[36,156839,70],{"class":42},[36,156841,150684],{"class":110},[36,156843,156844,156847,156849],{"class":38,"line":54},[36,156845,156846],{"class":50},"total_price ",[36,156848,70],{"class":42},[36,156850,156851],{"class":73}," 99.8\n",[36,156853,156854,156857,156859],{"class":38,"line":61},[36,156855,156856],{"class":50},"is_finished ",[36,156858,70],{"class":42},[36,156860,127138],{"class":73},[19,156862,156863],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156865,52063],{"id":52062},[19,156867,105697,156868,156871],{},[33,156869,156870],{},"type()"," 查看数据类型：",[26,156873,156875],{"className":31709,"code":156874,"language":31711,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[33,156876,156877,156891,156905,156919,156933],{"__ignoreMap":31},[36,156878,156879,156881,156883,156885,156887,156889],{"class":38,"line":39},[36,156880,31746],{"class":73},[36,156882,222],{"class":50},[36,156884,104438],{"class":73},[36,156886,222],{"class":50},[36,156888,1979],{"class":73},[36,156890,31828],{"class":50},[36,156892,156893,156895,156897,156899,156901,156903],{"class":38,"line":54},[36,156894,31746],{"class":73},[36,156896,222],{"class":50},[36,156898,104438],{"class":73},[36,156900,222],{"class":50},[36,156902,1721],{"class":73},[36,156904,31828],{"class":50},[36,156906,156907,156909,156911,156913,156915,156917],{"class":38,"line":61},[36,156908,31746],{"class":73},[36,156910,222],{"class":50},[36,156912,104438],{"class":73},[36,156914,222],{"class":50},[36,156916,7326],{"class":110},[36,156918,31828],{"class":50},[36,156920,156921,156923,156925,156927,156929,156931],{"class":38,"line":80},[36,156922,31746],{"class":73},[36,156924,222],{"class":50},[36,156926,104438],{"class":73},[36,156928,222],{"class":50},[36,156930,32807],{"class":73},[36,156932,31828],{"class":50},[36,156934,156935,156937,156939,156941,156943,156945],{"class":38,"line":96},[36,156936,31746],{"class":73},[36,156938,222],{"class":50},[36,156940,104438],{"class":73},[36,156942,222],{"class":50},[36,156944,97017],{"class":73},[36,156946,31828],{"class":50},[19,156948,156949],{},"输出类似：",[26,156951,156954],{"className":156952,"code":156953,"language":6676,"meta":31},[6674],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[33,156955,156953],{"__ignoreMap":31},[19,156957,885,156958,108614,156960,156962,156963,156965,156966,22829,156968,156965,156970,156972],{},[33,156959,2887],{},[33,156961,43],{}," 的子类，",[33,156964,32807],{}," 可以当作 ",[33,156967,1885],{},[33,156969,35318],{},[33,156971,1859],{},"，但业务代码中不要滥用。",[26,156974,156976],{"className":31709,"code":156975,"language":31711,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[33,156977,156978,156996],{"__ignoreMap":31},[36,156979,156980,156982,156984,156986,156988,156990,156993],{"class":38,"line":39},[36,156981,31746],{"class":73},[36,156983,222],{"class":50},[36,156985,32807],{"class":73},[36,156987,46897],{"class":42},[36,156989,26449],{"class":73},[36,156991,156992],{"class":50},")   ",[36,156994,156995],{"class":124},"# 2\n",[36,156997,156998,157000,157002,157004,157006,157008,157010],{"class":38,"line":54},[36,156999,31746],{"class":73},[36,157001,222],{"class":50},[36,157003,35318],{"class":73},[36,157005,46897],{"class":42},[36,157007,26449],{"class":73},[36,157009,47139],{"class":50},[36,157011,157012],{"class":124},"# 1\n",[14,157014,157016],{"id":157015},"_26-类型转换","2.6 类型转换",[19,157018,157019],{},"常用转换函数：",[26,157021,157023],{"className":31709,"code":157022,"language":31711,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[33,157024,157025,157035,157046,157056],{"__ignoreMap":31},[36,157026,157027,157029,157031,157033],{"class":38,"line":39},[36,157028,43],{"class":73},[36,157030,222],{"class":50},[36,157032,55647],{"class":110},[36,157034,1680],{"class":50},[36,157036,157037,157039,157041,157044],{"class":38,"line":54},[36,157038,1713],{"class":73},[36,157040,222],{"class":50},[36,157042,157043],{"class":110},"\"3.14\"",[36,157045,1680],{"class":50},[36,157047,157048,157050,157052,157054],{"class":38,"line":61},[36,157049,2835],{"class":73},[36,157051,222],{"class":50},[36,157053,1979],{"class":73},[36,157055,1680],{"class":50},[36,157057,157058,157060,157062,157064],{"class":38,"line":80},[36,157059,2887],{"class":73},[36,157061,222],{"class":50},[36,157063,1885],{"class":73},[36,157065,1680],{"class":50},[19,157067,16464],{},[26,157069,157071],{"className":31709,"code":157070,"language":31711,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[33,157072,157073,157082,157093],{"__ignoreMap":31},[36,157074,157075,157077,157079],{"class":38,"line":39},[36,157076,147877],{"class":50},[36,157078,70],{"class":42},[36,157080,157081],{"class":110}," \"18\"\n",[36,157083,157084,157086,157088,157090],{"class":38,"line":54},[36,157085,147877],{"class":50},[36,157087,70],{"class":42},[36,157089,965],{"class":73},[36,157091,157092],{"class":50},"(age)\n",[36,157094,157095,157097,157100,157102,157104],{"class":38,"line":61},[36,157096,31746],{"class":73},[36,157098,157099],{"class":50},"(age ",[36,157101,2148],{"class":42},[36,157103,26449],{"class":73},[36,157105,1680],{"class":50},[19,157107,157108],{},"输入得到的内容永远是字符串：",[26,157110,157112],{"className":31709,"code":157111,"language":31711,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[33,157113,157114,157130],{"__ignoreMap":31},[36,157115,157116,157119,157121,157123,157125,157128],{"class":38,"line":39},[36,157117,157118],{"class":50},"num ",[36,157120,70],{"class":42},[36,157122,61936],{"class":73},[36,157124,222],{"class":50},[36,157126,157127],{"class":110},"\"请输入数字:\"",[36,157129,1680],{"class":50},[36,157131,157132,157134,157136,157138,157141],{"class":38,"line":54},[36,157133,31746],{"class":73},[36,157135,222],{"class":50},[36,157137,104438],{"class":73},[36,157139,157140],{"class":50},"(num))  ",[36,157142,157143],{"class":124},"# str\n",[19,157145,157146],{},"如果要做数学运算，必须转换：",[26,157148,157150],{"className":31709,"code":157149,"language":31711,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[33,157151,157152,157170],{"__ignoreMap":31},[36,157153,157154,157156,157158,157160,157162,157164,157166,157168],{"class":38,"line":39},[36,157155,157118],{"class":50},[36,157157,70],{"class":42},[36,157159,965],{"class":73},[36,157161,222],{"class":50},[36,157163,55152],{"class":73},[36,157165,222],{"class":50},[36,157167,157127],{"class":110},[36,157169,31828],{"class":50},[36,157171,157172,157174,157176,157178,157180],{"class":38,"line":54},[36,157173,31746],{"class":73},[36,157175,46950],{"class":50},[36,157177,2148],{"class":42},[36,157179,74],{"class":73},[36,157181,1680],{"class":50},[19,157183,157184],{},"常见错误：",[26,157186,157188],{"className":31709,"code":157187,"language":31711,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[33,157189,157190,157203],{"__ignoreMap":31},[36,157191,157192,157194,157196,157198,157200],{"class":38,"line":39},[36,157193,43],{"class":73},[36,157195,222],{"class":50},[36,157197,157043],{"class":110},[36,157199,156992],{"class":50},[36,157201,157202],{"class":124},"# 错误\n",[36,157204,157205,157207,157209,157212,157215],{"class":38,"line":54},[36,157206,43],{"class":73},[36,157208,222],{"class":50},[36,157210,157211],{"class":110},"\"abc\"",[36,157213,157214],{"class":50},")    ",[36,157216,157202],{"class":124},[19,157218,157219],{},"正确写法：",[26,157221,157223],{"className":31709,"code":157222,"language":31711,"meta":31,"style":31},"num = float(\"3.14\")\n",[33,157224,157225],{"__ignoreMap":31},[36,157226,157227,157229,157231,157233,157235,157237],{"class":38,"line":39},[36,157228,157118],{"class":50},[36,157230,70],{"class":42},[36,157232,111128],{"class":73},[36,157234,222],{"class":50},[36,157236,157043],{"class":110},[36,157238,1680],{"class":50},[14,157240,157242],{"id":157241},"_27-运算符","2.7 运算符",[1645,157244,157246],{"id":157245},"_271-算术运算符","2.7.1 算术运算符",[1806,157248,157249,157260],{},[1809,157250,157251],{},[1812,157252,157253,157256,157258],{},[1815,157254,157255],{},"运算符",[1815,157257,27200],{},[1815,157259,28823],{},[1852,157261,157262,157276,157290,157304,157318,157332,157346],{},[1812,157263,157264,157268,157271],{},[1857,157265,157266],{},[33,157267,2148],{},[1857,157269,157270],{},"加法",[1857,157272,157273],{},[33,157274,157275],{},"1 + 2",[1812,157277,157278,157282,157285],{},[1857,157279,157280],{},[33,157281,2199],{},[1857,157283,157284],{},"减法",[1857,157286,157287],{},[33,157288,157289],{},"5 - 3",[1812,157291,157292,157296,157299],{},[1857,157293,157294],{},[33,157295,2122],{},[1857,157297,157298],{},"乘法",[1857,157300,157301],{},[33,157302,157303],{},"2 * 3",[1812,157305,157306,157310,157313],{},[1857,157307,157308],{},[33,157309,2251],{},[1857,157311,157312],{},"除法，结果是浮点数",[1857,157314,157315],{},[33,157316,157317],{},"5 \u002F 2",[1812,157319,157320,157324,157327],{},[1857,157321,157322],{},[33,157323,34660],{},[1857,157325,157326],{},"整除",[1857,157328,157329],{},[33,157330,157331],{},"5 \u002F\u002F 2",[1812,157333,157334,157338,157341],{},[1857,157335,157336],{},[33,157337,1996],{},[1857,157339,157340],{},"取余",[1857,157342,157343],{},[33,157344,157345],{},"5 % 2",[1812,157347,157348,157352,157355],{},[1857,157349,157350],{},[33,157351,12126],{},[1857,157353,157354],{},"幂运算",[1857,157356,157357],{},[33,157358,157359],{},"2 ** 3",[19,157361,16464],{},[26,157363,157365],{"className":31709,"code":157364,"language":31711,"meta":31,"style":31},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[33,157366,157367,157385,157402,157419],{"__ignoreMap":31},[36,157368,157369,157371,157373,157375,157378,157380,157382],{"class":38,"line":39},[36,157370,31746],{"class":73},[36,157372,222],{"class":50},[36,157374,1987],{"class":73},[36,157376,157377],{"class":42}," \u002F",[36,157379,16084],{"class":73},[36,157381,156992],{"class":50},[36,157383,157384],{"class":124},"# 2.5\n",[36,157386,157387,157389,157391,157393,157396,157398,157400],{"class":38,"line":54},[36,157388,31746],{"class":73},[36,157390,222],{"class":50},[36,157392,1987],{"class":73},[36,157394,157395],{"class":42}," \u002F\u002F",[36,157397,16084],{"class":73},[36,157399,47139],{"class":50},[36,157401,156995],{"class":124},[36,157403,157404,157406,157408,157410,157413,157415,157417],{"class":38,"line":61},[36,157405,31746],{"class":73},[36,157407,222],{"class":50},[36,157409,1987],{"class":73},[36,157411,157412],{"class":42}," %",[36,157414,16084],{"class":73},[36,157416,156992],{"class":50},[36,157418,157012],{"class":124},[36,157420,157421,157423,157425,157427,157430,157432,157434],{"class":38,"line":80},[36,157422,31746],{"class":73},[36,157424,222],{"class":50},[36,157426,1747],{"class":73},[36,157428,157429],{"class":42}," **",[36,157431,79401],{"class":73},[36,157433,47139],{"class":50},[36,157435,157436],{"class":124},"# 8\n",[1645,157438,157440],{"id":157439},"_272-赋值运算符","2.7.2 赋值运算符",[26,157442,157444],{"className":31709,"code":157443,"language":31711,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[33,157445,157446,157454,157462,157470,157478],{"__ignoreMap":31},[36,157447,157448,157450,157452],{"class":38,"line":39},[36,157449,157118],{"class":50},[36,157451,70],{"class":42},[36,157453,59759],{"class":73},[36,157455,157456,157458,157460],{"class":38,"line":54},[36,157457,157118],{"class":50},[36,157459,10945],{"class":42},[36,157461,55758],{"class":73},[36,157463,157464,157466,157468],{"class":38,"line":61},[36,157465,157118],{"class":50},[36,157467,151583],{"class":42},[36,157469,49054],{"class":73},[36,157471,157472,157474,157476],{"class":38,"line":80},[36,157473,157118],{"class":50},[36,157475,138479],{"class":42},[36,157477,121367],{"class":73},[36,157479,157480,157482,157485],{"class":38,"line":96},[36,157481,157118],{"class":50},[36,157483,157484],{"class":42},"\u002F=",[36,157486,49054],{"class":73},[19,157488,157489],{},"等价关系：",[26,157491,157493],{"className":31709,"code":157492,"language":31711,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[33,157494,157495,157503],{"__ignoreMap":31},[36,157496,157497,157499,157501],{"class":38,"line":39},[36,157498,157118],{"class":50},[36,157500,10945],{"class":42},[36,157502,57030],{"class":73},[36,157504,157505,157507,157509,157512,157514],{"class":38,"line":54},[36,157506,157118],{"class":50},[36,157508,70],{"class":42},[36,157510,157511],{"class":50}," num ",[36,157513,2148],{"class":42},[36,157515,57030],{"class":73},[19,157517,157518,157519,102349,157522,29716],{},"Python 没有 ",[33,157520,157521],{},"num++",[33,157523,157524],{},"num--",[1645,157526,157528],{"id":157527},"_273-比较运算符","2.7.3 比较运算符",[19,157530,157531],{},"比较运算结果是布尔值。",[26,157533,157535],{"className":31709,"code":157534,"language":31711,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[33,157536,157537,157551,157566,157580],{"__ignoreMap":31},[36,157538,157539,157541,157543,157545,157547,157549],{"class":38,"line":39},[36,157540,31746],{"class":73},[36,157542,222],{"class":50},[36,157544,2113],{"class":73},[36,157546,27553],{"class":42},[36,157548,3654],{"class":73},[36,157550,1680],{"class":50},[36,157552,157553,157555,157557,157559,157562,157564],{"class":38,"line":54},[36,157554,31746],{"class":73},[36,157556,222],{"class":50},[36,157558,2113],{"class":73},[36,157560,157561],{"class":42}," >=",[36,157563,74],{"class":73},[36,157565,1680],{"class":50},[36,157567,157568,157570,157572,157574,157576,157578],{"class":38,"line":61},[36,157569,31746],{"class":73},[36,157571,222],{"class":50},[36,157573,2113],{"class":73},[36,157575,102890],{"class":42},[36,157577,3589],{"class":73},[36,157579,1680],{"class":50},[36,157581,157582,157584,157586,157588,157591,157593],{"class":38,"line":80},[36,157583,31746],{"class":73},[36,157585,222],{"class":50},[36,157587,2113],{"class":73},[36,157589,157590],{"class":42}," !=",[36,157592,3589],{"class":73},[36,157594,1680],{"class":50},[19,157596,157597,157598,157600,157601,29716],{},"注意：判断相等用 ",[33,157599,4441],{},"，赋值用 ",[33,157602,70],{},[26,157604,157606],{"className":31709,"code":157605,"language":31711,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[33,157607,157608,157620],{"__ignoreMap":31},[36,157609,157610,157612,157614,157617],{"class":38,"line":39},[36,157611,147877],{"class":50},[36,157613,70],{"class":42},[36,157615,157616],{"class":73}," 18",[36,157618,157619],{"class":124},"       # 赋值\n",[36,157621,157622,157624,157626,157628],{"class":38,"line":54},[36,157623,147877],{"class":50},[36,157625,4441],{"class":42},[36,157627,157616],{"class":73},[36,157629,157630],{"class":124},"      # 判断是否相等\n",[1645,157632,157634],{"id":157633},"_274-逻辑运算符","2.7.4 逻辑运算符",[1806,157636,157637,157645],{},[1809,157638,157639],{},[1812,157640,157641,157643],{},[1815,157642,157255],{},[1815,157644,27200],{},[1852,157646,157647,157656,157665],{},[1812,157648,157649,157653],{},[1857,157650,157651],{},[33,157652,31793],{},[1857,157654,157655],{},"并且",[1812,157657,157658,157662],{},[1857,157659,157660],{},[33,157661,116421],{},[1857,157663,157664],{},"或者",[1812,157666,157667,157672],{},[1857,157668,157669],{},[33,157670,157671],{},"not",[1857,157673,157674],{},"取反",[26,157676,157678],{"className":31709,"code":157677,"language":31711,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[33,157679,157680,157688,157697,157701,157716,157730],{"__ignoreMap":31},[36,157681,157682,157684,157686],{"class":38,"line":39},[36,157683,147877],{"class":50},[36,157685,70],{"class":42},[36,157687,89396],{"class":73},[36,157689,157690,157693,157695],{"class":38,"line":54},[36,157691,157692],{"class":50},"has_ticket ",[36,157694,70],{"class":42},[36,157696,154930],{"class":73},[36,157698,157699],{"class":38,"line":61},[36,157700,58],{"emptyLinePlaceholder":57},[36,157702,157703,157705,157707,157709,157711,157713],{"class":38,"line":80},[36,157704,31746],{"class":73},[36,157706,157099],{"class":50},[36,157708,3228],{"class":42},[36,157710,157616],{"class":73},[36,157712,121760],{"class":42},[36,157714,157715],{"class":50}," has_ticket)\n",[36,157717,157718,157720,157722,157724,157726,157728],{"class":38,"line":96},[36,157719,31746],{"class":73},[36,157721,157099],{"class":50},[36,157723,2577],{"class":42},[36,157725,157616],{"class":73},[36,157727,115532],{"class":42},[36,157729,157715],{"class":50},[36,157731,157732,157734,157736,157738],{"class":38,"line":101},[36,157733,31746],{"class":73},[36,157735,222],{"class":50},[36,157737,157671],{"class":42},[36,157739,157715],{"class":50},[14,157741,157743],{"id":157742},"_28-字符串定义","2.8 字符串定义",[19,157745,157746],{},"三种常见写法：",[26,157748,157750],{"className":31709,"code":157749,"language":31711,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[33,157751,157752,157762,157771,157781],{"__ignoreMap":31},[36,157753,157754,157757,157759],{"class":38,"line":39},[36,157755,157756],{"class":50},"name1 ",[36,157758,70],{"class":42},[36,157760,157761],{"class":110}," '小明'\n",[36,157763,157764,157767,157769],{"class":38,"line":54},[36,157765,157766],{"class":50},"name2 ",[36,157768,70],{"class":42},[36,157770,150684],{"class":110},[36,157772,157773,157776,157778],{"class":38,"line":61},[36,157774,157775],{"class":50},"text ",[36,157777,70],{"class":42},[36,157779,157780],{"class":110}," \"\"\"这是多行字符串\n",[36,157782,157783],{"class":38,"line":80},[36,157784,157785],{"class":110},"可以换行\"\"\"\n",[19,157787,157788],{},"字符串中包含引号：",[26,157790,157792],{"className":31709,"code":157791,"language":31711,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[33,157793,157794,157804,157814],{"__ignoreMap":31},[36,157795,157796,157799,157801],{"class":38,"line":39},[36,157797,157798],{"class":50},"msg ",[36,157800,70],{"class":42},[36,157802,157803],{"class":110}," \"他说:'你好'\"\n",[36,157805,157806,157809,157811],{"class":38,"line":54},[36,157807,157808],{"class":50},"msg2 ",[36,157810,70],{"class":42},[36,157812,157813],{"class":110}," '他说:\"你好\"'\n",[36,157815,157816,157819,157821,157824,157827,157830,157832],{"class":38,"line":61},[36,157817,157818],{"class":50},"msg3 ",[36,157820,70],{"class":42},[36,157822,157823],{"class":110}," \"他说:",[36,157825,157826],{"class":73},"\\\"",[36,157828,157829],{"class":110},"你好",[36,157831,157826],{"class":73},[36,157833,26464],{"class":110},[19,157835,157836],{},"常见转义字符：",[1806,157838,157839,157848],{},[1809,157840,157841],{},[1812,157842,157843,157846],{},[1815,157844,157845],{},"写法",[1815,157847,102031],{},[1852,157849,157850,157860,157869,157879,157888],{},[1812,157851,157852,157857],{},[1857,157853,157854],{},[33,157855,157856],{},"\\n",[1857,157858,157859],{},"换行",[1812,157861,157862,157866],{},[1857,157863,157864],{},[33,157865,2767],{},[1857,157867,157868],{},"制表符",[1812,157870,157871,157876],{},[1857,157872,157873],{},[33,157874,157875],{},"\\\\",[1857,157877,157878],{},"反斜杠",[1812,157880,157881,157885],{},[1857,157882,157883],{},[33,157884,157826],{},[1857,157886,157887],{},"双引号",[1812,157889,157890,157895],{},[1857,157891,157892],{},[33,157893,157894],{},"\\'",[1857,157896,157897],{},"单引号",[14,157899,157901],{"id":157900},"_29-字符串拼接","2.9 字符串拼接",[26,157903,157905],{"className":31709,"code":157904,"language":31711,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[33,157906,157907,157915],{"__ignoreMap":31},[36,157908,157909,157911,157913],{"class":38,"line":39},[36,157910,147867],{"class":50},[36,157912,70],{"class":42},[36,157914,150684],{"class":110},[36,157916,157917,157919,157921,157924,157926],{"class":38,"line":54},[36,157918,31746],{"class":73},[36,157920,222],{"class":50},[36,157922,157923],{"class":110},"\"你好，\"",[36,157925,46897],{"class":42},[36,157927,157928],{"class":50}," name)\n",[19,157930,157931],{},"字符串只能和字符串拼接：",[26,157933,157935],{"className":31709,"code":157934,"language":31711,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[33,157936,157937,157945],{"__ignoreMap":31},[36,157938,157939,157941,157943],{"class":38,"line":39},[36,157940,147877],{"class":50},[36,157942,70],{"class":42},[36,157944,147882],{"class":73},[36,157946,157947,157949,157951,157953,157955,157957],{"class":38,"line":54},[36,157948,31746],{"class":73},[36,157950,222],{"class":50},[36,157952,147848],{"class":110},[36,157954,46897],{"class":42},[36,157956,75250],{"class":73},[36,157958,157959],{"class":50},"(age))\n",[19,157961,157962],{},"更推荐使用格式化字符串。",[14,157964,157966],{"id":157965},"_210-字符串格式化","2.10 字符串格式化",[1645,157968,157970],{"id":157969},"_2101-百分号格式化","2.10.1 百分号格式化",[26,157972,157974],{"className":31709,"code":157973,"language":31711,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[33,157975,157976,157984,157992,158001,158005],{"__ignoreMap":31},[36,157977,157978,157980,157982],{"class":38,"line":39},[36,157979,147867],{"class":50},[36,157981,70],{"class":42},[36,157983,150684],{"class":110},[36,157985,157986,157988,157990],{"class":38,"line":54},[36,157987,147877],{"class":50},[36,157989,70],{"class":42},[36,157991,147882],{"class":73},[36,157993,157994,157996,157998],{"class":38,"line":61},[36,157995,156689],{"class":50},[36,157997,70],{"class":42},[36,157999,158000],{"class":73}," 95.5\n",[36,158002,158003],{"class":38,"line":80},[36,158004,58],{"emptyLinePlaceholder":57},[36,158006,158007,158009,158011,158014,158017,158020,158023,158026,158029,158031,158033],{"class":38,"line":96},[36,158008,31746],{"class":73},[36,158010,222],{"class":50},[36,158012,158013],{"class":110},"\"姓名:",[36,158015,158016],{"class":73},"%s",[36,158018,158019],{"class":110}," 年龄:",[36,158021,158022],{"class":73},"%d",[36,158024,158025],{"class":110}," 分数:",[36,158027,158028],{"class":73},"%.1f",[36,158030,1919],{"class":110},[36,158032,157412],{"class":42},[36,158034,158035],{"class":50}," (name, age, score))\n",[19,158037,158038],{},"常用占位符：",[1806,158040,158041,158050],{},[1809,158042,158043],{},[1812,158044,158045,158048],{},[1815,158046,158047],{},"占位符",[1815,158049,27200],{},[1852,158051,158052,158060,158068],{},[1812,158053,158054,158058],{},[1857,158055,158056],{},[33,158057,158016],{},[1857,158059,156555],{},[1812,158061,158062,158066],{},[1857,158063,158064],{},[33,158065,158022],{},[1857,158067,156533],{},[1812,158069,158070,158075],{},[1857,158071,158072],{},[33,158073,158074],{},"%f",[1857,158076,156544],{},[19,158078,158079],{},"精度控制：",[26,158081,158083],{"className":31709,"code":158082,"language":31711,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[33,158084,158085,158094],{"__ignoreMap":31},[36,158086,158087,158089,158091],{"class":38,"line":39},[36,158088,148012],{"class":50},[36,158090,70],{"class":42},[36,158092,158093],{"class":73}," 12.3456\n",[36,158095,158096,158098,158100,158102,158105,158107,158109],{"class":38,"line":54},[36,158097,31746],{"class":73},[36,158099,222],{"class":50},[36,158101,1919],{"class":110},[36,158103,158104],{"class":73},"%.2f",[36,158106,1919],{"class":110},[36,158108,157412],{"class":42},[36,158110,158111],{"class":50}," price)\n",[1645,158113,158115],{"id":158114},"_2102-format方法","2.10.2 format方法",[26,158117,158119],{"className":31709,"code":158118,"language":31711,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[33,158120,158121,158129,158137,158141,158160,158180],{"__ignoreMap":31},[36,158122,158123,158125,158127],{"class":38,"line":39},[36,158124,147867],{"class":50},[36,158126,70],{"class":42},[36,158128,150684],{"class":110},[36,158130,158131,158133,158135],{"class":38,"line":54},[36,158132,147877],{"class":50},[36,158134,70],{"class":42},[36,158136,147882],{"class":73},[36,158138,158139],{"class":38,"line":61},[36,158140,58],{"emptyLinePlaceholder":57},[36,158142,158143,158145,158147,158149,158151,158153,158155,158157],{"class":38,"line":80},[36,158144,31746],{"class":73},[36,158146,222],{"class":50},[36,158148,158013],{"class":110},[36,158150,33790],{"class":73},[36,158152,158019],{"class":110},[36,158154,33790],{"class":73},[36,158156,1919],{"class":110},[36,158158,158159],{"class":50},".format(name, age))\n",[36,158161,158162,158164,158166,158168,158171,158173,158176,158178],{"class":38,"line":96},[36,158163,31746],{"class":73},[36,158165,222],{"class":50},[36,158167,158013],{"class":110},[36,158169,158170],{"class":73},"{0}",[36,158172,158019],{"class":110},[36,158174,158175],{"class":73},"{1}",[36,158177,1919],{"class":110},[36,158179,158159],{"class":50},[36,158181,158182,158184,158186,158188,158191,158193,158196,158198,158201,158203,158205,158208,158210,158212],{"class":38,"line":101},[36,158183,31746],{"class":73},[36,158185,222],{"class":50},[36,158187,158013],{"class":110},[36,158189,158190],{"class":73},"{name}",[36,158192,158019],{"class":110},[36,158194,158195],{"class":73},"{age}",[36,158197,1919],{"class":110},[36,158199,158200],{"class":50},".format(",[36,158202,81141],{"class":473},[36,158204,70],{"class":42},[36,158206,158207],{"class":50},"name, ",[36,158209,71552],{"class":473},[36,158211,70],{"class":42},[36,158213,158214],{"class":50},"age))\n",[1645,158216,158218],{"id":158217},"_2103-f-string","2.10.3 f-string",[19,158220,158221],{},"推荐写法：",[26,158223,158225],{"className":31709,"code":158224,"language":31711,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[33,158226,158227,158235,158243,158251,158255],{"__ignoreMap":31},[36,158228,158229,158231,158233],{"class":38,"line":39},[36,158230,147867],{"class":50},[36,158232,70],{"class":42},[36,158234,150684],{"class":110},[36,158236,158237,158239,158241],{"class":38,"line":54},[36,158238,147877],{"class":50},[36,158240,70],{"class":42},[36,158242,147882],{"class":73},[36,158244,158245,158247,158249],{"class":38,"line":61},[36,158246,156689],{"class":50},[36,158248,70],{"class":42},[36,158250,158000],{"class":73},[36,158252,158253],{"class":38,"line":80},[36,158254,58],{"emptyLinePlaceholder":57},[36,158256,158257,158259,158261,158263,158265,158267,158269,158271,158273,158275,158277,158279,158281,158283,158286,158289,158291,158293],{"class":38,"line":96},[36,158258,31746],{"class":73},[36,158260,222],{"class":50},[36,158262,1724],{"class":42},[36,158264,158013],{"class":110},[36,158266,2563],{"class":73},[36,158268,81141],{"class":50},[36,158270,2613],{"class":73},[36,158272,158019],{"class":110},[36,158274,2563],{"class":73},[36,158276,71552],{"class":50},[36,158278,2613],{"class":73},[36,158280,158025],{"class":110},[36,158282,2563],{"class":73},[36,158284,158285],{"class":50},"score",[36,158287,158288],{"class":42},":.1f",[36,158290,2613],{"class":73},[36,158292,1919],{"class":110},[36,158294,1680],{"class":50},[19,158296,158297],{},"表达式也可以放进去：",[26,158299,158301],{"className":31709,"code":158300,"language":31711,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[33,158302,158303,158311,158319],{"__ignoreMap":31},[36,158304,158305,158307,158309],{"class":38,"line":39},[36,158306,148012],{"class":50},[36,158308,70],{"class":42},[36,158310,148017],{"class":73},[36,158312,158313,158315,158317],{"class":38,"line":54},[36,158314,148022],{"class":50},[36,158316,70],{"class":42},[36,158318,55758],{"class":73},[36,158320,158321,158323,158325,158327,158330,158332,158334,158336,158339,158341,158344],{"class":38,"line":61},[36,158322,31746],{"class":73},[36,158324,222],{"class":50},[36,158326,1724],{"class":42},[36,158328,158329],{"class":110},"\"总价:",[36,158331,2563],{"class":73},[36,158333,148012],{"class":50},[36,158335,2122],{"class":42},[36,158337,158338],{"class":50}," count",[36,158340,2613],{"class":73},[36,158342,158343],{"class":110},"元\"",[36,158345,1680],{"class":50},[14,158347,158349],{"id":158348},"_211-input输入","2.11 input输入",[19,158351,158352,158355],{},[33,158353,158354],{},"input()"," 会暂停程序，等待用户输入。",[26,158357,158359],{"className":31709,"code":158358,"language":31711,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[33,158360,158361,158375],{"__ignoreMap":31},[36,158362,158363,158365,158367,158369,158371,158373],{"class":38,"line":39},[36,158364,147867],{"class":50},[36,158366,70],{"class":42},[36,158368,61936],{"class":73},[36,158370,222],{"class":50},[36,158372,153710],{"class":110},[36,158374,1680],{"class":50},[36,158376,158377,158379,158381,158383,158386,158388,158390,158392,158394],{"class":38,"line":54},[36,158378,31746],{"class":73},[36,158380,222],{"class":50},[36,158382,1724],{"class":42},[36,158384,158385],{"class":110},"\"你好，",[36,158387,2563],{"class":73},[36,158389,81141],{"class":50},[36,158391,2613],{"class":73},[36,158393,1919],{"class":110},[36,158395,1680],{"class":50},[19,158397,158398],{},"输入整数：",[26,158400,158402],{"className":31709,"code":158401,"language":31711,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[33,158403,158404,158422],{"__ignoreMap":31},[36,158405,158406,158408,158410,158412,158414,158416,158418,158420],{"class":38,"line":39},[36,158407,147877],{"class":50},[36,158409,70],{"class":42},[36,158411,965],{"class":73},[36,158413,222],{"class":50},[36,158415,55152],{"class":73},[36,158417,222],{"class":50},[36,158419,153725],{"class":110},[36,158421,31828],{"class":50},[36,158423,158424,158426,158428,158430,158433,158435,158437,158439,158442,158444],{"class":38,"line":54},[36,158425,31746],{"class":73},[36,158427,222],{"class":50},[36,158429,1724],{"class":42},[36,158431,158432],{"class":110},"\"明年你",[36,158434,2563],{"class":73},[36,158436,147877],{"class":50},[36,158438,2148],{"class":42},[36,158440,158441],{"class":73}," 1}",[36,158443,150735],{"class":110},[36,158445,1680],{"class":50},[19,158447,158448],{},"输入小数：",[26,158450,158452],{"className":31709,"code":158451,"language":31711,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[33,158453,158454,158473],{"__ignoreMap":31},[36,158455,158456,158458,158460,158462,158464,158466,158468,158471],{"class":38,"line":39},[36,158457,156662],{"class":50},[36,158459,70],{"class":42},[36,158461,111128],{"class":73},[36,158463,222],{"class":50},[36,158465,55152],{"class":73},[36,158467,222],{"class":50},[36,158469,158470],{"class":110},"\"请输入身高:\"",[36,158472,31828],{"class":50},[36,158474,158475,158477,158479,158481,158484,158486,158488,158491,158493,158496],{"class":38,"line":54},[36,158476,31746],{"class":73},[36,158478,222],{"class":50},[36,158480,1724],{"class":42},[36,158482,158483],{"class":110},"\"身高:",[36,158485,2563],{"class":73},[36,158487,26312],{"class":50},[36,158489,158490],{"class":42},":.2f",[36,158492,2613],{"class":73},[36,158494,158495],{"class":110},"米\"",[36,158497,1680],{"class":50},[14,158499,158501],{"id":158500},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158503,124623],{},[256,158505,158506,158509,158512,158515],{},[259,158507,158508],{},"输入商品单价。",[259,158510,158511],{},"输入购买数量。",[259,158513,158514],{},"输入折扣，例如 0.8 表示八折。",[259,158516,158517],{},"输出最终金额，保留两位小数。",[19,158519,11501],{},[26,158521,158523],{"className":31709,"code":158522,"language":31711,"meta":31,"style":31},"price = float(input(\"请输入商品单价:\"))\ncount = int(input(\"请输入购买数量:\"))\ndiscount = float(input(\"请输入折扣:\"))\n\ntotal = price * count * discount\n\nprint(f\"商品单价:{price:.2f}\")\nprint(f\"购买数量:{count}\")\nprint(f\"折扣:{discount}\")\nprint(f\"应付金额:{total:.2f}元\")\n",[33,158524,158525,158544,158563,158583,158587,158607,158611,158634,158655,158677],{"__ignoreMap":31},[36,158526,158527,158529,158531,158533,158535,158537,158539,158542],{"class":38,"line":39},[36,158528,148012],{"class":50},[36,158530,70],{"class":42},[36,158532,111128],{"class":73},[36,158534,222],{"class":50},[36,158536,55152],{"class":73},[36,158538,222],{"class":50},[36,158540,158541],{"class":110},"\"请输入商品单价:\"",[36,158543,31828],{"class":50},[36,158545,158546,158548,158550,158552,158554,158556,158558,158561],{"class":38,"line":54},[36,158547,148022],{"class":50},[36,158549,70],{"class":42},[36,158551,965],{"class":73},[36,158553,222],{"class":50},[36,158555,55152],{"class":73},[36,158557,222],{"class":50},[36,158559,158560],{"class":110},"\"请输入购买数量:\"",[36,158562,31828],{"class":50},[36,158564,158565,158568,158570,158572,158574,158576,158578,158581],{"class":38,"line":61},[36,158566,158567],{"class":50},"discount ",[36,158569,70],{"class":42},[36,158571,111128],{"class":73},[36,158573,222],{"class":50},[36,158575,55152],{"class":73},[36,158577,222],{"class":50},[36,158579,158580],{"class":110},"\"请输入折扣:\"",[36,158582,31828],{"class":50},[36,158584,158585],{"class":38,"line":80},[36,158586,58],{"emptyLinePlaceholder":57},[36,158588,158589,158592,158594,158597,158599,158602,158604],{"class":38,"line":96},[36,158590,158591],{"class":50},"total ",[36,158593,70],{"class":42},[36,158595,158596],{"class":50}," price ",[36,158598,2122],{"class":42},[36,158600,158601],{"class":50}," count ",[36,158603,2122],{"class":42},[36,158605,158606],{"class":50}," discount\n",[36,158608,158609],{"class":38,"line":101},[36,158610,58],{"emptyLinePlaceholder":57},[36,158612,158613,158615,158617,158619,158622,158624,158626,158628,158630,158632],{"class":38,"line":128},[36,158614,31746],{"class":73},[36,158616,222],{"class":50},[36,158618,1724],{"class":42},[36,158620,158621],{"class":110},"\"商品单价:",[36,158623,2563],{"class":73},[36,158625,81146],{"class":50},[36,158627,158490],{"class":42},[36,158629,2613],{"class":73},[36,158631,1919],{"class":110},[36,158633,1680],{"class":50},[36,158635,158636,158638,158640,158642,158645,158647,158649,158651,158653],{"class":38,"line":149},[36,158637,31746],{"class":73},[36,158639,222],{"class":50},[36,158641,1724],{"class":42},[36,158643,158644],{"class":110},"\"购买数量:",[36,158646,2563],{"class":73},[36,158648,85765],{"class":50},[36,158650,2613],{"class":73},[36,158652,1919],{"class":110},[36,158654,1680],{"class":50},[36,158656,158657,158659,158661,158663,158666,158668,158671,158673,158675],{"class":38,"line":154},[36,158658,31746],{"class":73},[36,158660,222],{"class":50},[36,158662,1724],{"class":42},[36,158664,158665],{"class":110},"\"折扣:",[36,158667,2563],{"class":73},[36,158669,158670],{"class":50},"discount",[36,158672,2613],{"class":73},[36,158674,1919],{"class":110},[36,158676,1680],{"class":50},[36,158678,158679,158681,158683,158685,158688,158690,158693,158695,158697,158699],{"class":38,"line":167},[36,158680,31746],{"class":73},[36,158682,222],{"class":50},[36,158684,1724],{"class":42},[36,158686,158687],{"class":110},"\"应付金额:",[36,158689,2563],{"class":73},[36,158691,158692],{"class":50},"total",[36,158694,158490],{"class":42},[36,158696,2613],{"class":73},[36,158698,158343],{"class":110},[36,158700,1680],{"class":50},[14,158702,158704],{"id":158703},"_213-易错点","2.13 易错点",[256,158706,158707,158712,158718,158726,158729],{},[259,158708,158709,158711],{},[33,158710,158354],{}," 的结果是字符串，做运算前要转换。",[259,158713,158714,158715,29716],{},"字符串拼接时，数字要先 ",[33,158716,158717],{},"str()",[259,158719,158720,158722,158723,158725],{},[33,158721,70],{}," 是赋值，",[33,158724,4441],{}," 是比较。",[259,158727,158728],{},"Python 没有自增自减运算符。",[259,158730,158731],{},"浮点数计算可能有精度误差：",[26,158733,158735],{"className":31709,"code":158734,"language":31711,"meta":31,"style":31},"print(0.1 + 0.2)\n",[33,158736,158737],{"__ignoreMap":31},[36,158738,158739,158741,158743,158745,158747,158750],{"class":38,"line":39},[36,158740,31746],{"class":73},[36,158742,222],{"class":50},[36,158744,87541],{"class":73},[36,158746,46897],{"class":42},[36,158748,158749],{"class":73}," 0.2",[36,158751,1680],{"class":50},[19,158753,158754,158755,158758],{},"金额计算如果要求严格，可以后续学习 ",[33,158756,158757],{},"decimal"," 模块。",[14,158760,158762],{"id":158761},"_214-本章练习","2.14 本章练习",[256,158764,158765,158768,158771,158774,158777],{},[259,158766,158767],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[259,158769,158770],{},"输入圆的半径，计算面积，保留两位小数。",[259,158772,158773],{},"输入工资和奖金，计算总收入。",[259,158775,158776],{},"输入摄氏温度，转换为华氏温度。",[259,158778,158779],{},"写一个 BMI 计算程序：",[26,158781,158784],{"className":158782,"code":158783,"language":6676,"meta":31},[6674],"BMI = 体重kg \u002F 身高m ** 2\n",[33,158785,158783],{"__ignoreMap":31},[1592,158787,158788],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":158790},[158791,158792,158793,158794,158795,158796,158797,158803,158804,158805,158810,158811,158812,158813],{"id":156352,"depth":54,"text":156353},{"id":156461,"depth":54,"text":156462},{"id":156632,"depth":54,"text":156633},{"id":156709,"depth":54,"text":156710},{"id":52062,"depth":54,"text":52063},{"id":157015,"depth":54,"text":157016},{"id":157241,"depth":54,"text":157242,"children":158798},[158799,158800,158801,158802],{"id":157245,"depth":61,"text":157246},{"id":157439,"depth":61,"text":157440},{"id":157527,"depth":61,"text":157528},{"id":157633,"depth":61,"text":157634},{"id":157742,"depth":54,"text":157743},{"id":157900,"depth":54,"text":157901},{"id":157965,"depth":54,"text":157966,"children":158806},[158807,158808,158809],{"id":157969,"depth":61,"text":157970},{"id":158114,"depth":61,"text":158115},{"id":158217,"depth":61,"text":158218},{"id":158348,"depth":54,"text":158349},{"id":158500,"depth":54,"text":158501},{"id":158703,"depth":54,"text":158704},{"id":158761,"depth":54,"text":158762},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156344,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158820,"title":158821,"body":158822,"description":24706,"extension":1603,"meta":160458,"navigation":57,"path":160459,"seo":160460,"stem":160461,"__hash__":160462},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158823,"toc":160439},[158824,158827,158831,158834,158849,158852,158880,158884,158934,158936,158952,158955,158981,158984,158988,159055,159058,159074,159078,159081,159199,159202,159209,159258,159264,159268,159271,159384,159387,159391,159395,159398,159448,159452,159455,159505,159509,159512,159550,159554,159557,159603,159606,159641,159645,159650,159653,159699,159701,159768,159772,159778,159889,159898,159902,159904,159915,159917,160083,160087,160089,160103,160105,160319,160323,160342,160359,160362,160408,160412,160436],[10,158825,158821],{"id":158826},"_3-判断语句",[14,158828,158830],{"id":158829},"_31-布尔值","3.1 布尔值",[19,158832,158833],{},"判断语句依赖布尔值：",[26,158835,158837],{"className":31709,"code":158836,"language":31711,"meta":31,"style":31},"True\nFalse\n",[33,158838,158839,158844],{"__ignoreMap":31},[36,158840,158841],{"class":38,"line":39},[36,158842,158843],{"class":73},"True\n",[36,158845,158846],{"class":38,"line":54},[36,158847,158848],{"class":73},"False\n",[19,158850,158851],{},"比较表达式会产生布尔值：",[26,158853,158855],{"className":31709,"code":158854,"language":31711,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[33,158856,158857,158865],{"__ignoreMap":31},[36,158858,158859,158861,158863],{"class":38,"line":39},[36,158860,147877],{"class":50},[36,158862,70],{"class":42},[36,158864,147882],{"class":73},[36,158866,158867,158869,158871,158873,158875,158877],{"class":38,"line":54},[36,158868,31746],{"class":73},[36,158870,157099],{"class":50},[36,158872,3228],{"class":42},[36,158874,157616],{"class":73},[36,158876,47139],{"class":50},[36,158878,158879],{"class":124},"# True\n",[14,158881,158883],{"id":158882},"_32-if基础语法","3.2 if基础语法",[26,158885,158887],{"className":31709,"code":158886,"language":31711,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[33,158888,158889,158907,158911,158923],{"__ignoreMap":31},[36,158890,158891,158893,158895,158897,158899,158901,158903,158905],{"class":38,"line":39},[36,158892,147877],{"class":50},[36,158894,70],{"class":42},[36,158896,965],{"class":73},[36,158898,222],{"class":50},[36,158900,55152],{"class":73},[36,158902,222],{"class":50},[36,158904,153725],{"class":110},[36,158906,31828],{"class":50},[36,158908,158909],{"class":38,"line":54},[36,158910,58],{"emptyLinePlaceholder":57},[36,158912,158913,158915,158917,158919,158921],{"class":38,"line":61},[36,158914,3061],{"class":42},[36,158916,17036],{"class":50},[36,158918,3228],{"class":42},[36,158920,157616],{"class":73},[36,158922,5230],{"class":50},[36,158924,158925,158927,158929,158932],{"class":38,"line":80},[36,158926,32630],{"class":73},[36,158928,222],{"class":50},[36,158930,158931],{"class":110},"\"可以进入网吧\"",[36,158933,1680],{"class":50},[19,158935,885],{},[256,158937,158938,158943,158946,158949],{},[259,158939,158940,158942],{},[33,158941,3061],{}," 后面是条件表达式。",[259,158944,158945],{},"条件后面必须写冒号。",[259,158947,158948],{},"条件成立时执行缩进代码块。",[259,158950,158951],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158953,158954],{},"错误示例：",[26,158956,158958],{"className":31709,"code":158957,"language":31711,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[33,158959,158960,158970],{"__ignoreMap":31},[36,158961,158962,158964,158966,158968],{"class":38,"line":39},[36,158963,3061],{"class":42},[36,158965,17036],{"class":50},[36,158967,3228],{"class":42},[36,158969,147882],{"class":73},[36,158971,158972,158974,158976,158979],{"class":38,"line":54},[36,158973,32630],{"class":73},[36,158975,222],{"class":50},[36,158977,158978],{"class":110},"\"可以进入\"",[36,158980,1680],{"class":50},[19,158982,158983],{},"缺少冒号。",[14,158985,158987],{"id":158986},"_33-if-else","3.3 if else",[26,158989,158991],{"className":31709,"code":158990,"language":31711,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[33,158992,158993,159011,159015,159027,159038,159044],{"__ignoreMap":31},[36,158994,158995,158997,158999,159001,159003,159005,159007,159009],{"class":38,"line":39},[36,158996,147877],{"class":50},[36,158998,70],{"class":42},[36,159000,965],{"class":73},[36,159002,222],{"class":50},[36,159004,55152],{"class":73},[36,159006,222],{"class":50},[36,159008,153725],{"class":110},[36,159010,31828],{"class":50},[36,159012,159013],{"class":38,"line":54},[36,159014,58],{"emptyLinePlaceholder":57},[36,159016,159017,159019,159021,159023,159025],{"class":38,"line":61},[36,159018,3061],{"class":42},[36,159020,17036],{"class":50},[36,159022,3228],{"class":42},[36,159024,157616],{"class":73},[36,159026,5230],{"class":50},[36,159028,159029,159031,159033,159036],{"class":38,"line":80},[36,159030,32630],{"class":73},[36,159032,222],{"class":50},[36,159034,159035],{"class":110},"\"成年人\"",[36,159037,1680],{"class":50},[36,159039,159040,159042],{"class":38,"line":96},[36,159041,3219],{"class":42},[36,159043,5230],{"class":50},[36,159045,159046,159048,159050,159053],{"class":38,"line":101},[36,159047,32630],{"class":73},[36,159049,222],{"class":50},[36,159051,159052],{"class":110},"\"未成年人\"",[36,159054,1680],{"class":50},[19,159056,159057],{},"执行逻辑：",[256,159059,159060,159066,159071],{},[259,159061,159062,159063,159065],{},"条件成立，执行 ",[33,159064,3061],{}," 代码块。",[259,159067,159068,159069,159065],{},"条件不成立，执行 ",[33,159070,3219],{},[259,159072,159073],{},"两个代码块只会执行其中一个。",[14,159075,159077],{"id":159076},"_34-if-elif-else","3.4 if elif else",[19,159079,159080],{},"多条件判断：",[26,159082,159084],{"className":31709,"code":159083,"language":31711,"meta":31,"style":31},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[33,159085,159086,159104,159108,159122,159133,159147,159158,159171,159182,159188],{"__ignoreMap":31},[36,159087,159088,159090,159092,159094,159096,159098,159100,159102],{"class":38,"line":39},[36,159089,156689],{"class":50},[36,159091,70],{"class":42},[36,159093,965],{"class":73},[36,159095,222],{"class":50},[36,159097,55152],{"class":73},[36,159099,222],{"class":50},[36,159101,153740],{"class":110},[36,159103,31828],{"class":50},[36,159105,159106],{"class":38,"line":54},[36,159107,58],{"emptyLinePlaceholder":57},[36,159109,159110,159112,159115,159117,159120],{"class":38,"line":61},[36,159111,3061],{"class":42},[36,159113,159114],{"class":50}," score ",[36,159116,3228],{"class":42},[36,159118,159119],{"class":73}," 90",[36,159121,5230],{"class":50},[36,159123,159124,159126,159128,159131],{"class":38,"line":80},[36,159125,32630],{"class":73},[36,159127,222],{"class":50},[36,159129,159130],{"class":110},"\"优秀\"",[36,159132,1680],{"class":50},[36,159134,159135,159138,159140,159142,159145],{"class":38,"line":96},[36,159136,159137],{"class":42},"elif",[36,159139,159114],{"class":50},[36,159141,3228],{"class":42},[36,159143,159144],{"class":73}," 80",[36,159146,5230],{"class":50},[36,159148,159149,159151,159153,159156],{"class":38,"line":101},[36,159150,32630],{"class":73},[36,159152,222],{"class":50},[36,159154,159155],{"class":110},"\"良好\"",[36,159157,1680],{"class":50},[36,159159,159160,159162,159164,159166,159169],{"class":38,"line":128},[36,159161,159137],{"class":42},[36,159163,159114],{"class":50},[36,159165,3228],{"class":42},[36,159167,159168],{"class":73}," 60",[36,159170,5230],{"class":50},[36,159172,159173,159175,159177,159180],{"class":38,"line":149},[36,159174,32630],{"class":73},[36,159176,222],{"class":50},[36,159178,159179],{"class":110},"\"及格\"",[36,159181,1680],{"class":50},[36,159183,159184,159186],{"class":38,"line":154},[36,159185,3219],{"class":42},[36,159187,5230],{"class":50},[36,159189,159190,159192,159194,159197],{"class":38,"line":167},[36,159191,32630],{"class":73},[36,159193,222],{"class":50},[36,159195,159196],{"class":110},"\"不及格\"",[36,159198,1680],{"class":50},[19,159200,159201],{},"注意判断顺序很重要。",[19,159203,159204,159205,159208],{},"如果把 ",[33,159206,159207],{},"score >= 60"," 放在最前面：",[26,159210,159212],{"className":31709,"code":159211,"language":31711,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[33,159213,159214,159226,159236,159248],{"__ignoreMap":31},[36,159215,159216,159218,159220,159222,159224],{"class":38,"line":39},[36,159217,3061],{"class":42},[36,159219,159114],{"class":50},[36,159221,3228],{"class":42},[36,159223,159168],{"class":73},[36,159225,5230],{"class":50},[36,159227,159228,159230,159232,159234],{"class":38,"line":54},[36,159229,32630],{"class":73},[36,159231,222],{"class":50},[36,159233,159179],{"class":110},[36,159235,1680],{"class":50},[36,159237,159238,159240,159242,159244,159246],{"class":38,"line":61},[36,159239,159137],{"class":42},[36,159241,159114],{"class":50},[36,159243,3228],{"class":42},[36,159245,159119],{"class":73},[36,159247,5230],{"class":50},[36,159249,159250,159252,159254,159256],{"class":38,"line":80},[36,159251,32630],{"class":73},[36,159253,222],{"class":50},[36,159255,159130],{"class":110},[36,159257,1680],{"class":50},[19,159259,159260,159261,159263],{},"成绩 95 会先满足 ",[33,159262,159207],{},"，后面的优秀分支就不会执行。",[14,159265,159267],{"id":159266},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159269,159270],{},"嵌套判断就是在一个判断内部再写判断。",[26,159272,159274],{"className":31709,"code":159273,"language":31711,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nhas_ticket = input(\"是否有票(y\u002Fn):\")\n\nif age >= 18:\n    if has_ticket == \"y\":\n        print(\"可以进入\")\n    else:\n        print(\"请先买票\")\nelse:\n    print(\"未成年人禁止进入\")\n",[33,159275,159276,159294,159309,159313,159325,159339,159349,159356,159367,159373],{"__ignoreMap":31},[36,159277,159278,159280,159282,159284,159286,159288,159290,159292],{"class":38,"line":39},[36,159279,147877],{"class":50},[36,159281,70],{"class":42},[36,159283,965],{"class":73},[36,159285,222],{"class":50},[36,159287,55152],{"class":73},[36,159289,222],{"class":50},[36,159291,153725],{"class":110},[36,159293,31828],{"class":50},[36,159295,159296,159298,159300,159302,159304,159307],{"class":38,"line":54},[36,159297,157692],{"class":50},[36,159299,70],{"class":42},[36,159301,61936],{"class":73},[36,159303,222],{"class":50},[36,159305,159306],{"class":110},"\"是否有票(y\u002Fn):\"",[36,159308,1680],{"class":50},[36,159310,159311],{"class":38,"line":61},[36,159312,58],{"emptyLinePlaceholder":57},[36,159314,159315,159317,159319,159321,159323],{"class":38,"line":80},[36,159316,3061],{"class":42},[36,159318,17036],{"class":50},[36,159320,3228],{"class":42},[36,159322,157616],{"class":73},[36,159324,5230],{"class":50},[36,159326,159327,159329,159332,159334,159337],{"class":38,"line":96},[36,159328,4592],{"class":42},[36,159330,159331],{"class":50}," has_ticket ",[36,159333,4441],{"class":42},[36,159335,159336],{"class":110}," \"y\"",[36,159338,5230],{"class":50},[36,159340,159341,159343,159345,159347],{"class":38,"line":101},[36,159342,33782],{"class":73},[36,159344,222],{"class":50},[36,159346,158978],{"class":110},[36,159348,1680],{"class":50},[36,159350,159351,159354],{"class":38,"line":128},[36,159352,159353],{"class":42},"    else",[36,159355,5230],{"class":50},[36,159357,159358,159360,159362,159365],{"class":38,"line":149},[36,159359,33782],{"class":73},[36,159361,222],{"class":50},[36,159363,159364],{"class":110},"\"请先买票\"",[36,159366,1680],{"class":50},[36,159368,159369,159371],{"class":38,"line":154},[36,159370,3219],{"class":42},[36,159372,5230],{"class":50},[36,159374,159375,159377,159379,159382],{"class":38,"line":167},[36,159376,32630],{"class":73},[36,159378,222],{"class":50},[36,159380,159381],{"class":110},"\"未成年人禁止进入\"",[36,159383,1680],{"class":50},[19,159385,159386],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159388,159390],{"id":159389},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[1645,159392,159394],{"id":159393},"_361-and","3.6.1 and",[19,159396,159397],{},"两个条件都成立才成立。",[26,159399,159401],{"className":31709,"code":159400,"language":31711,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[33,159402,159403,159411,159419,159423,159438],{"__ignoreMap":31},[36,159404,159405,159407,159409],{"class":38,"line":39},[36,159406,147877],{"class":50},[36,159408,70],{"class":42},[36,159410,89396],{"class":73},[36,159412,159413,159415,159417],{"class":38,"line":54},[36,159414,157692],{"class":50},[36,159416,70],{"class":42},[36,159418,154930],{"class":73},[36,159420,159421],{"class":38,"line":61},[36,159422,58],{"emptyLinePlaceholder":57},[36,159424,159425,159427,159429,159431,159433,159435],{"class":38,"line":80},[36,159426,3061],{"class":42},[36,159428,17036],{"class":50},[36,159430,3228],{"class":42},[36,159432,157616],{"class":73},[36,159434,121760],{"class":42},[36,159436,159437],{"class":50}," has_ticket:\n",[36,159439,159440,159442,159444,159446],{"class":38,"line":96},[36,159441,32630],{"class":73},[36,159443,222],{"class":50},[36,159445,158978],{"class":110},[36,159447,1680],{"class":50},[1645,159449,159451],{"id":159450},"_362-or","3.6.2 or",[19,159453,159454],{},"只要一个条件成立就成立。",[26,159456,159458],{"className":31709,"code":159457,"language":31711,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[33,159459,159460,159469,159478,159482,159494],{"__ignoreMap":31},[36,159461,159462,159465,159467],{"class":38,"line":39},[36,159463,159464],{"class":50},"is_vip ",[36,159466,70],{"class":42},[36,159468,127138],{"class":73},[36,159470,159471,159474,159476],{"class":38,"line":54},[36,159472,159473],{"class":50},"coupon ",[36,159475,70],{"class":42},[36,159477,154930],{"class":73},[36,159479,159480],{"class":38,"line":61},[36,159481,58],{"emptyLinePlaceholder":57},[36,159483,159484,159486,159489,159491],{"class":38,"line":80},[36,159485,3061],{"class":42},[36,159487,159488],{"class":50}," is_vip ",[36,159490,116421],{"class":42},[36,159492,159493],{"class":50}," coupon:\n",[36,159495,159496,159498,159500,159503],{"class":38,"line":96},[36,159497,32630],{"class":73},[36,159499,222],{"class":50},[36,159501,159502],{"class":110},"\"可以享受优惠\"",[36,159504,1680],{"class":50},[1645,159506,159508],{"id":159507},"_363-not","3.6.3 not",[19,159510,159511],{},"取反。",[26,159513,159515],{"className":31709,"code":159514,"language":31711,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[33,159516,159517,159526,159530,159539],{"__ignoreMap":31},[36,159518,159519,159522,159524],{"class":38,"line":39},[36,159520,159521],{"class":50},"is_closed ",[36,159523,70],{"class":42},[36,159525,127138],{"class":73},[36,159527,159528],{"class":38,"line":54},[36,159529,58],{"emptyLinePlaceholder":57},[36,159531,159532,159534,159536],{"class":38,"line":61},[36,159533,3061],{"class":42},[36,159535,40261],{"class":42},[36,159537,159538],{"class":50}," is_closed:\n",[36,159540,159541,159543,159545,159548],{"class":38,"line":80},[36,159542,32630],{"class":73},[36,159544,222],{"class":50},[36,159546,159547],{"class":110},"\"店铺营业中\"",[36,159549,1680],{"class":50},[14,159551,159553],{"id":159552},"_37-链式比较","3.7 链式比较",[19,159555,159556],{},"Python 支持链式比较：",[26,159558,159560],{"className":31709,"code":159559,"language":31711,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[33,159561,159562,159571,159575,159592],{"__ignoreMap":31},[36,159563,159564,159566,159568],{"class":38,"line":39},[36,159565,156689],{"class":50},[36,159567,70],{"class":42},[36,159569,159570],{"class":73}," 85\n",[36,159572,159573],{"class":38,"line":54},[36,159574,58],{"emptyLinePlaceholder":57},[36,159576,159577,159579,159581,159584,159586,159588,159590],{"class":38,"line":61},[36,159578,3061],{"class":42},[36,159580,242],{"class":73},[36,159582,159583],{"class":42}," \u003C=",[36,159585,159114],{"class":50},[36,159587,3117],{"class":42},[36,159589,162],{"class":73},[36,159591,5230],{"class":50},[36,159593,159594,159596,159598,159601],{"class":38,"line":80},[36,159595,32630],{"class":73},[36,159597,222],{"class":50},[36,159599,159600],{"class":110},"\"成绩合法\"",[36,159602,1680],{"class":50},[19,159604,159605],{},"等价于：",[26,159607,159609],{"className":31709,"code":159608,"language":31711,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[33,159610,159611,159631],{"__ignoreMap":31},[36,159612,159613,159615,159617,159619,159621,159623,159625,159627,159629],{"class":38,"line":39},[36,159614,3061],{"class":42},[36,159616,159114],{"class":50},[36,159618,3228],{"class":42},[36,159620,242],{"class":73},[36,159622,121760],{"class":42},[36,159624,159114],{"class":50},[36,159626,3117],{"class":42},[36,159628,162],{"class":73},[36,159630,5230],{"class":50},[36,159632,159633,159635,159637,159639],{"class":38,"line":54},[36,159634,32630],{"class":73},[36,159636,222],{"class":50},[36,159638,159600],{"class":110},[36,159640,1680],{"class":50},[14,159642,159644],{"id":159643},"_38-真值和假值","3.8 真值和假值",[19,159646,117798,159647,159649],{},[33,159648,3061],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159651,159652],{},"假值：",[26,159654,159656],{"className":31709,"code":159655,"language":31711,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[33,159657,159658,159662,159667,159671,159675,159680,159684,159688,159693],{"__ignoreMap":31},[36,159659,159660],{"class":38,"line":39},[36,159661,158848],{"class":73},[36,159663,159664],{"class":38,"line":54},[36,159665,159666],{"class":73},"None\n",[36,159668,159669],{"class":38,"line":61},[36,159670,4576],{"class":73},[36,159672,159673],{"class":38,"line":80},[36,159674,33673],{"class":73},[36,159676,159677],{"class":38,"line":96},[36,159678,159679],{"class":110},"\"\"\n",[36,159681,159682],{"class":38,"line":101},[36,159683,33688],{"class":50},[36,159685,159686],{"class":38,"line":128},[36,159687,3484],{"class":50},[36,159689,159690],{"class":38,"line":149},[36,159691,159692],{"class":50},"{}\n",[36,159694,159695,159697],{"class":38,"line":154},[36,159696,156621],{"class":73},[36,159698,3484],{"class":50},[19,159700,16464],{},[26,159702,159704],{"className":31709,"code":159703,"language":31711,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[33,159705,159706,159720,159724,159731,159751,159757],{"__ignoreMap":31},[36,159707,159708,159710,159712,159714,159716,159718],{"class":38,"line":39},[36,159709,147867],{"class":50},[36,159711,70],{"class":42},[36,159713,61936],{"class":73},[36,159715,222],{"class":50},[36,159717,153710],{"class":110},[36,159719,1680],{"class":50},[36,159721,159722],{"class":38,"line":54},[36,159723,58],{"emptyLinePlaceholder":57},[36,159725,159726,159728],{"class":38,"line":61},[36,159727,3061],{"class":42},[36,159729,159730],{"class":50}," name:\n",[36,159732,159733,159735,159737,159739,159741,159743,159745,159747,159749],{"class":38,"line":80},[36,159734,32630],{"class":73},[36,159736,222],{"class":50},[36,159738,1724],{"class":42},[36,159740,158385],{"class":110},[36,159742,2563],{"class":73},[36,159744,81141],{"class":50},[36,159746,2613],{"class":73},[36,159748,1919],{"class":110},[36,159750,1680],{"class":50},[36,159752,159753,159755],{"class":38,"line":96},[36,159754,3219],{"class":42},[36,159756,5230],{"class":50},[36,159758,159759,159761,159763,159766],{"class":38,"line":101},[36,159760,32630],{"class":73},[36,159762,222],{"class":50},[36,159764,159765],{"class":110},"\"姓名不能为空\"",[36,159767,1680],{"class":50},[14,159769,159771],{"id":159770},"_39-match语句","3.9 match语句",[19,159773,159774,159775,159777],{},"Python 3.10 开始支持 ",[33,159776,72596],{},"。它适合处理固定选项。",[26,159779,159781],{"className":31709,"code":159780,"language":31711,"meta":31,"style":31},"command = input(\"请输入命令:\")\n\nmatch command:\n    case \"start\":\n        print(\"启动\")\n    case \"stop\":\n        print(\"停止\")\n    case \"restart\":\n        print(\"重启\")\n    case _:\n        print(\"未知命令\")\n",[33,159782,159783,159799,159803,159810,159820,159831,159840,159851,159860,159871,159878],{"__ignoreMap":31},[36,159784,159785,159788,159790,159792,159794,159797],{"class":38,"line":39},[36,159786,159787],{"class":50},"command ",[36,159789,70],{"class":42},[36,159791,61936],{"class":73},[36,159793,222],{"class":50},[36,159795,159796],{"class":110},"\"请输入命令:\"",[36,159798,1680],{"class":50},[36,159800,159801],{"class":38,"line":54},[36,159802,58],{"emptyLinePlaceholder":57},[36,159804,159805,159807],{"class":38,"line":61},[36,159806,72596],{"class":42},[36,159808,159809],{"class":50}," command:\n",[36,159811,159812,159815,159818],{"class":38,"line":80},[36,159813,159814],{"class":42},"    case",[36,159816,159817],{"class":110}," \"start\"",[36,159819,5230],{"class":50},[36,159821,159822,159824,159826,159829],{"class":38,"line":96},[36,159823,33782],{"class":73},[36,159825,222],{"class":50},[36,159827,159828],{"class":110},"\"启动\"",[36,159830,1680],{"class":50},[36,159832,159833,159835,159838],{"class":38,"line":101},[36,159834,159814],{"class":42},[36,159836,159837],{"class":110}," \"stop\"",[36,159839,5230],{"class":50},[36,159841,159842,159844,159846,159849],{"class":38,"line":128},[36,159843,33782],{"class":73},[36,159845,222],{"class":50},[36,159847,159848],{"class":110},"\"停止\"",[36,159850,1680],{"class":50},[36,159852,159853,159855,159858],{"class":38,"line":149},[36,159854,159814],{"class":42},[36,159856,159857],{"class":110}," \"restart\"",[36,159859,5230],{"class":50},[36,159861,159862,159864,159866,159869],{"class":38,"line":154},[36,159863,33782],{"class":73},[36,159865,222],{"class":50},[36,159867,159868],{"class":110},"\"重启\"",[36,159870,1680],{"class":50},[36,159872,159873,159875],{"class":38,"line":167},[36,159874,159814],{"class":42},[36,159876,159877],{"class":50}," _:\n",[36,159879,159880,159882,159884,159887],{"class":38,"line":172},[36,159881,33782],{"class":73},[36,159883,222],{"class":50},[36,159885,159886],{"class":110},"\"未知命令\"",[36,159888,1680],{"class":50},[19,159890,159891,159892,159894,159895,159897],{},"入门阶段掌握 ",[33,159893,155989],{}," 更重要，",[33,159896,72596],{}," 可以作为补充。",[14,159899,159901],{"id":159900},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159903,124623],{},[256,159905,159906,159909,159912],{},[259,159907,159908],{},"输入成绩。",[259,159910,159911],{},"判断成绩是否合法。",[259,159913,159914],{},"输出等级。",[19,159916,11501],{},[26,159918,159920],{"className":31709,"code":159919,"language":31711,"meta":31,"style":31},"score = float(input(\"请输入成绩:\"))\n\nif not 0 \u003C= score \u003C= 100:\n    print(\"成绩不合法\")\nelif score >= 90:\n    print(\"等级:A\")\nelif score >= 80:\n    print(\"等级:B\")\nelif score >= 70:\n    print(\"等级:C\")\nelif score >= 60:\n    print(\"等级:D\")\nelse:\n    print(\"等级:E\")\n",[33,159921,159922,159940,159944,159962,159973,159985,159996,160008,160019,160032,160043,160055,160066,160072],{"__ignoreMap":31},[36,159923,159924,159926,159928,159930,159932,159934,159936,159938],{"class":38,"line":39},[36,159925,156689],{"class":50},[36,159927,70],{"class":42},[36,159929,111128],{"class":73},[36,159931,222],{"class":50},[36,159933,55152],{"class":73},[36,159935,222],{"class":50},[36,159937,153740],{"class":110},[36,159939,31828],{"class":50},[36,159941,159942],{"class":38,"line":54},[36,159943,58],{"emptyLinePlaceholder":57},[36,159945,159946,159948,159950,159952,159954,159956,159958,159960],{"class":38,"line":61},[36,159947,3061],{"class":42},[36,159949,40261],{"class":42},[36,159951,242],{"class":73},[36,159953,159583],{"class":42},[36,159955,159114],{"class":50},[36,159957,3117],{"class":42},[36,159959,162],{"class":73},[36,159961,5230],{"class":50},[36,159963,159964,159966,159968,159971],{"class":38,"line":80},[36,159965,32630],{"class":73},[36,159967,222],{"class":50},[36,159969,159970],{"class":110},"\"成绩不合法\"",[36,159972,1680],{"class":50},[36,159974,159975,159977,159979,159981,159983],{"class":38,"line":96},[36,159976,159137],{"class":42},[36,159978,159114],{"class":50},[36,159980,3228],{"class":42},[36,159982,159119],{"class":73},[36,159984,5230],{"class":50},[36,159986,159987,159989,159991,159994],{"class":38,"line":101},[36,159988,32630],{"class":73},[36,159990,222],{"class":50},[36,159992,159993],{"class":110},"\"等级:A\"",[36,159995,1680],{"class":50},[36,159997,159998,160000,160002,160004,160006],{"class":38,"line":128},[36,159999,159137],{"class":42},[36,160001,159114],{"class":50},[36,160003,3228],{"class":42},[36,160005,159144],{"class":73},[36,160007,5230],{"class":50},[36,160009,160010,160012,160014,160017],{"class":38,"line":149},[36,160011,32630],{"class":73},[36,160013,222],{"class":50},[36,160015,160016],{"class":110},"\"等级:B\"",[36,160018,1680],{"class":50},[36,160020,160021,160023,160025,160027,160030],{"class":38,"line":154},[36,160022,159137],{"class":42},[36,160024,159114],{"class":50},[36,160026,3228],{"class":42},[36,160028,160029],{"class":73}," 70",[36,160031,5230],{"class":50},[36,160033,160034,160036,160038,160041],{"class":38,"line":167},[36,160035,32630],{"class":73},[36,160037,222],{"class":50},[36,160039,160040],{"class":110},"\"等级:C\"",[36,160042,1680],{"class":50},[36,160044,160045,160047,160049,160051,160053],{"class":38,"line":172},[36,160046,159137],{"class":42},[36,160048,159114],{"class":50},[36,160050,3228],{"class":42},[36,160052,159168],{"class":73},[36,160054,5230],{"class":50},[36,160056,160057,160059,160061,160064],{"class":38,"line":192},[36,160058,32630],{"class":73},[36,160060,222],{"class":50},[36,160062,160063],{"class":110},"\"等级:D\"",[36,160065,1680],{"class":50},[36,160067,160068,160070],{"class":38,"line":211},[36,160069,3219],{"class":42},[36,160071,5230],{"class":50},[36,160073,160074,160076,160078,160081],{"class":38,"line":216},[36,160075,32630],{"class":73},[36,160077,222],{"class":50},[36,160079,160080],{"class":110},"\"等级:E\"",[36,160082,1680],{"class":50},[14,160084,160086],{"id":160085},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160088,124623],{},[256,160090,160091,160094,160097,160100],{},[259,160092,160093],{},"输入消费金额。",[259,160095,160096],{},"输入会员等级，普通、银卡、金卡。",[259,160098,160099],{},"普通不打折，银卡 9 折，金卡 8 折。",[259,160101,160102],{},"满 500 再减 50。",[19,160104,11501],{},[26,160106,160108],{"className":31709,"code":160107,"language":31711,"meta":31,"style":31},"amount = float(input(\"请输入消费金额:\"))\nlevel = input(\"请输入会员等级(普通\u002F银卡\u002F金卡):\")\n\ndiscount = 1\n\nif level == \"银卡\":\n    discount = 0.9\nelif level == \"金卡\":\n    discount = 0.8\nelif level == \"普通\":\n    discount = 1\nelse:\n    print(\"会员等级输入错误，按普通会员计算\")\n\npay = amount * discount\n\nif pay >= 500:\n    pay -= 50\n\nprint(f\"应付金额:{pay:.2f}元\")\n",[33,160109,160110,160130,160146,160150,160158,160162,160176,160186,160199,160208,160221,160229,160235,160246,160250,160264,160268,160282,160292,160296],{"__ignoreMap":31},[36,160111,160112,160115,160117,160119,160121,160123,160125,160128],{"class":38,"line":39},[36,160113,160114],{"class":50},"amount ",[36,160116,70],{"class":42},[36,160118,111128],{"class":73},[36,160120,222],{"class":50},[36,160122,55152],{"class":73},[36,160124,222],{"class":50},[36,160126,160127],{"class":110},"\"请输入消费金额:\"",[36,160129,31828],{"class":50},[36,160131,160132,160135,160137,160139,160141,160144],{"class":38,"line":54},[36,160133,160134],{"class":50},"level ",[36,160136,70],{"class":42},[36,160138,61936],{"class":73},[36,160140,222],{"class":50},[36,160142,160143],{"class":110},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[36,160145,1680],{"class":50},[36,160147,160148],{"class":38,"line":61},[36,160149,58],{"emptyLinePlaceholder":57},[36,160151,160152,160154,160156],{"class":38,"line":80},[36,160153,158567],{"class":50},[36,160155,70],{"class":42},[36,160157,57030],{"class":73},[36,160159,160160],{"class":38,"line":96},[36,160161,58],{"emptyLinePlaceholder":57},[36,160163,160164,160166,160169,160171,160174],{"class":38,"line":101},[36,160165,3061],{"class":42},[36,160167,160168],{"class":50}," level ",[36,160170,4441],{"class":42},[36,160172,160173],{"class":110}," \"银卡\"",[36,160175,5230],{"class":50},[36,160177,160178,160181,160183],{"class":38,"line":128},[36,160179,160180],{"class":50},"    discount ",[36,160182,70],{"class":42},[36,160184,160185],{"class":73}," 0.9\n",[36,160187,160188,160190,160192,160194,160197],{"class":38,"line":149},[36,160189,159137],{"class":42},[36,160191,160168],{"class":50},[36,160193,4441],{"class":42},[36,160195,160196],{"class":110}," \"金卡\"",[36,160198,5230],{"class":50},[36,160200,160201,160203,160205],{"class":38,"line":154},[36,160202,160180],{"class":50},[36,160204,70],{"class":42},[36,160206,160207],{"class":73}," 0.8\n",[36,160209,160210,160212,160214,160216,160219],{"class":38,"line":167},[36,160211,159137],{"class":42},[36,160213,160168],{"class":50},[36,160215,4441],{"class":42},[36,160217,160218],{"class":110}," \"普通\"",[36,160220,5230],{"class":50},[36,160222,160223,160225,160227],{"class":38,"line":172},[36,160224,160180],{"class":50},[36,160226,70],{"class":42},[36,160228,57030],{"class":73},[36,160230,160231,160233],{"class":38,"line":192},[36,160232,3219],{"class":42},[36,160234,5230],{"class":50},[36,160236,160237,160239,160241,160244],{"class":38,"line":211},[36,160238,32630],{"class":73},[36,160240,222],{"class":50},[36,160242,160243],{"class":110},"\"会员等级输入错误，按普通会员计算\"",[36,160245,1680],{"class":50},[36,160247,160248],{"class":38,"line":216},[36,160249,58],{"emptyLinePlaceholder":57},[36,160251,160252,160255,160257,160260,160262],{"class":38,"line":231},[36,160253,160254],{"class":50},"pay ",[36,160256,70],{"class":42},[36,160258,160259],{"class":50}," amount ",[36,160261,2122],{"class":42},[36,160263,158606],{"class":50},[36,160265,160266],{"class":38,"line":236},[36,160267,58],{"emptyLinePlaceholder":57},[36,160269,160270,160272,160275,160277,160280],{"class":38,"line":247},[36,160271,3061],{"class":42},[36,160273,160274],{"class":50}," pay ",[36,160276,3228],{"class":42},[36,160278,160279],{"class":73}," 500",[36,160281,5230],{"class":50},[36,160283,160284,160287,160289],{"class":38,"line":637},[36,160285,160286],{"class":50},"    pay ",[36,160288,151583],{"class":42},[36,160290,160291],{"class":73}," 50\n",[36,160293,160294],{"class":38,"line":646},[36,160295,58],{"emptyLinePlaceholder":57},[36,160297,160298,160300,160302,160304,160306,160308,160311,160313,160315,160317],{"class":38,"line":655},[36,160299,31746],{"class":73},[36,160301,222],{"class":50},[36,160303,1724],{"class":42},[36,160305,158687],{"class":110},[36,160307,2563],{"class":73},[36,160309,160310],{"class":50},"pay",[36,160312,158490],{"class":42},[36,160314,2613],{"class":73},[36,160316,158343],{"class":110},[36,160318,1680],{"class":50},[14,160320,160322],{"id":160321},"_312-易错点","3.12 易错点",[256,160324,160325,160328,160331,160334,160339],{},[259,160326,160327],{},"冒号不能漏。",[259,160329,160330],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[259,160332,160333],{},"多分支判断要注意顺序。",[259,160335,160336,160337,29716],{},"判断相等用 ",[33,160338,4441],{},[259,160340,160341],{},"字符串比较区分大小写：",[26,160343,160345],{"className":31709,"code":160344,"language":31711,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[33,160346,160347],{"__ignoreMap":31},[36,160348,160349,160352,160354,160356],{"class":38,"line":39},[36,160350,160351],{"class":110},"\"Y\"",[36,160353,102890],{"class":42},[36,160355,159336],{"class":110},[36,160357,160358],{"class":124},"  # False\n",[19,160360,160361],{},"可转换后再判断：",[26,160363,160365],{"className":31709,"code":160364,"language":31711,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[33,160366,160367,160384,160397],{"__ignoreMap":31},[36,160368,160369,160372,160374,160376,160378,160381],{"class":38,"line":39},[36,160370,160371],{"class":50},"answer ",[36,160373,70],{"class":42},[36,160375,61936],{"class":73},[36,160377,222],{"class":50},[36,160379,160380],{"class":110},"\"是否继续(y\u002Fn):\"",[36,160382,160383],{"class":50},").lower()\n",[36,160385,160386,160388,160391,160393,160395],{"class":38,"line":54},[36,160387,3061],{"class":42},[36,160389,160390],{"class":50}," answer ",[36,160392,4441],{"class":42},[36,160394,159336],{"class":110},[36,160396,5230],{"class":50},[36,160398,160399,160401,160403,160406],{"class":38,"line":61},[36,160400,32630],{"class":73},[36,160402,222],{"class":50},[36,160404,160405],{"class":110},"\"继续\"",[36,160407,1680],{"class":50},[14,160409,160411],{"id":160410},"_313-本章练习","3.13 本章练习",[256,160413,160414,160417,160420,160423,160433],{},[259,160415,160416],{},"输入年龄，判断是否成年。",[259,160418,160419],{},"输入年份，判断是否为闰年。",[259,160421,160422],{},"输入三个数字，输出最大值。",[259,160424,160425,160426,160429,160430,160432],{},"写登录判断：用户名是 ",[33,160427,160428],{},"admin"," 且密码是 ",[33,160431,16413],{}," 才登录成功。",[259,160434,160435],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1592,160437,160438],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":31,"searchDepth":54,"depth":54,"links":160440},[160441,160442,160443,160444,160445,160446,160451,160452,160453,160454,160455,160456,160457],{"id":158829,"depth":54,"text":158830},{"id":158882,"depth":54,"text":158883},{"id":158986,"depth":54,"text":158987},{"id":159076,"depth":54,"text":159077},{"id":159266,"depth":54,"text":159267},{"id":159389,"depth":54,"text":159390,"children":160447},[160448,160449,160450],{"id":159393,"depth":61,"text":159394},{"id":159450,"depth":61,"text":159451},{"id":159507,"depth":61,"text":159508},{"id":159552,"depth":54,"text":159553},{"id":159643,"depth":54,"text":159644},{"id":159770,"depth":54,"text":159771},{"id":159900,"depth":54,"text":159901},{"id":160085,"depth":54,"text":160086},{"id":160321,"depth":54,"text":160322},{"id":160410,"depth":54,"text":160411},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158821,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160464,"title":160465,"body":160466,"description":24706,"extension":1603,"meta":162235,"navigation":57,"path":162236,"seo":162237,"stem":162238,"__hash__":162239},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160467,"toc":162215},[160468,160471,160475,160481,160484,160501,160505,160507,160524,160526,160571,160573,160590,160594,160597,160663,160666,160684,160688,160849,160858,160862,160866,160871,160918,160920,160926,160930,160935,160982,160984,160990,160994,160999,161035,161038,161085,161089,161095,161153,161158,161189,161194,161198,161253,161256,161328,161331,161390,161394,161397,161472,161475,161479,161585,161588,161614,161618,161630,161699,161702,161794,161798,161800,161811,161813,161943,161947,162149,162157,162161,162191,162195,162212],[10,160469,160465],{"id":160470},"_4-循环语句",[14,160472,160474],{"id":160473},"_41-为什么需要循环","4.1 为什么需要循环",[19,160476,160477,160478,160480],{},"如果要输出 1 到 100，不应该写 100 行 ",[33,160479,147803],{},"，而应该用循环。",[19,160482,160483],{},"循环适合处理重复任务：",[256,160485,160486,160489,160492,160495,160498],{},[259,160487,160488],{},"重复输出。",[259,160490,160491],{},"重复输入。",[259,160493,160494],{},"遍历数据。",[259,160496,160497],{},"持续执行菜单。",[259,160499,160500],{},"批量处理文件或数据。",[14,160502,160504],{"id":160503},"_42-while循环","4.2 while循环",[19,160506,6670],{},[26,160508,160510],{"className":31709,"code":160509,"language":31711,"meta":31,"style":31},"while 条件:\n    循环体\n",[33,160511,160512,160519],{"__ignoreMap":31},[36,160513,160514,160516],{"class":38,"line":39},[36,160515,109994],{"class":42},[36,160517,160518],{"class":50}," 条件:\n",[36,160520,160521],{"class":38,"line":54},[36,160522,160523],{"class":50},"    循环体\n",[19,160525,16464],{},[26,160527,160529],{"className":31709,"code":160528,"language":31711,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[33,160530,160531,160539,160543,160555,160562],{"__ignoreMap":31},[36,160532,160533,160535,160537],{"class":38,"line":39},[36,160534,101479],{"class":50},[36,160536,70],{"class":42},[36,160538,57030],{"class":73},[36,160540,160541],{"class":38,"line":54},[36,160542,58],{"emptyLinePlaceholder":57},[36,160544,160545,160547,160549,160551,160553],{"class":38,"line":61},[36,160546,109994],{"class":42},[36,160548,10906],{"class":50},[36,160550,3117],{"class":42},[36,160552,3654],{"class":73},[36,160554,5230],{"class":50},[36,160556,160557,160559],{"class":38,"line":80},[36,160558,32630],{"class":73},[36,160560,160561],{"class":50},"(i)\n",[36,160563,160564,160567,160569],{"class":38,"line":96},[36,160565,160566],{"class":50},"    i ",[36,160568,10945],{"class":42},[36,160570,57030],{"class":73},[19,160572,82260],{},[256,160574,160575,160581,160584,160587],{},[259,160576,160577,160578,29716],{},"判断条件 ",[33,160579,160580],{},"i \u003C= 5",[259,160582,160583],{},"条件成立，执行循环体。",[259,160585,160586],{},"执行完后回到条件判断。",[259,160588,160589],{},"条件不成立，退出循环。",[14,160591,160593],{"id":160592},"_43-while累加","4.3 while累加",[19,160595,160596],{},"计算 1 到 100 的和：",[26,160598,160600],{"className":31709,"code":160599,"language":31711,"meta":31,"style":31},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[33,160601,160602,160610,160618,160622,160634,160644,160652,160656],{"__ignoreMap":31},[36,160603,160604,160606,160608],{"class":38,"line":39},[36,160605,101479],{"class":50},[36,160607,70],{"class":42},[36,160609,57030],{"class":73},[36,160611,160612,160614,160616],{"class":38,"line":54},[36,160613,158591],{"class":50},[36,160615,70],{"class":42},[36,160617,48664],{"class":73},[36,160619,160620],{"class":38,"line":61},[36,160621,58],{"emptyLinePlaceholder":57},[36,160623,160624,160626,160628,160630,160632],{"class":38,"line":80},[36,160625,109994],{"class":42},[36,160627,10906],{"class":50},[36,160629,3117],{"class":42},[36,160631,162],{"class":73},[36,160633,5230],{"class":50},[36,160635,160636,160639,160641],{"class":38,"line":96},[36,160637,160638],{"class":50},"    total ",[36,160640,10945],{"class":42},[36,160642,160643],{"class":50}," i\n",[36,160645,160646,160648,160650],{"class":38,"line":101},[36,160647,160566],{"class":50},[36,160649,10945],{"class":42},[36,160651,57030],{"class":73},[36,160653,160654],{"class":38,"line":128},[36,160655,58],{"emptyLinePlaceholder":57},[36,160657,160658,160660],{"class":38,"line":149},[36,160659,31746],{"class":73},[36,160661,160662],{"class":50},"(total)\n",[19,160664,160665],{},"核心思想：",[256,160667,160668,160673,160678],{},[259,160669,160670,160672],{},[33,160671,2108],{}," 控制循环次数。",[259,160674,160675,160677],{},[33,160676,158692],{}," 保存累加结果。",[259,160679,160680,160681,160683],{},"每轮循环都要更新 ",[33,160682,2108],{},"，否则可能死循环。",[14,160685,160687],{"id":160686},"_44-while猜数字","4.4 while猜数字",[26,160689,160691],{"className":31709,"code":160690,"language":31711,"meta":31,"style":31},"import random\n\nanswer = random.randint(1, 100)\ncount = 0\n\nwhile True:\n    guess = int(input(\"请输入1到100之间的数字:\"))\n    count += 1\n\n    if guess > answer:\n        print(\"猜大了\")\n    elif guess \u003C answer:\n        print(\"猜小了\")\n    else:\n        print(f\"猜对了，一共猜了{count}次\")\n        break\n",[33,160692,160693,160699,160703,160720,160728,160732,160740,160760,160769,160773,160785,160796,160806,160817,160823,160845],{"__ignoreMap":31},[36,160694,160695,160697],{"class":38,"line":39},[36,160696,31723],{"class":42},[36,160698,46659],{"class":50},[36,160700,160701],{"class":38,"line":54},[36,160702,58],{"emptyLinePlaceholder":57},[36,160704,160705,160707,160709,160712,160714,160716,160718],{"class":38,"line":61},[36,160706,160371],{"class":50},[36,160708,70],{"class":42},[36,160710,160711],{"class":50}," random.randint(",[36,160713,1885],{"class":73},[36,160715,477],{"class":50},[36,160717,1979],{"class":73},[36,160719,1680],{"class":50},[36,160721,160722,160724,160726],{"class":38,"line":80},[36,160723,148022],{"class":50},[36,160725,70],{"class":42},[36,160727,48664],{"class":73},[36,160729,160730],{"class":38,"line":96},[36,160731,58],{"emptyLinePlaceholder":57},[36,160733,160734,160736,160738],{"class":38,"line":101},[36,160735,109994],{"class":42},[36,160737,96623],{"class":73},[36,160739,5230],{"class":50},[36,160741,160742,160745,160747,160749,160751,160753,160755,160758],{"class":38,"line":128},[36,160743,160744],{"class":50},"    guess ",[36,160746,70],{"class":42},[36,160748,965],{"class":73},[36,160750,222],{"class":50},[36,160752,55152],{"class":73},[36,160754,222],{"class":50},[36,160756,160757],{"class":110},"\"请输入1到100之间的数字:\"",[36,160759,31828],{"class":50},[36,160761,160762,160765,160767],{"class":38,"line":149},[36,160763,160764],{"class":50},"    count ",[36,160766,10945],{"class":42},[36,160768,57030],{"class":73},[36,160770,160771],{"class":38,"line":154},[36,160772,58],{"emptyLinePlaceholder":57},[36,160774,160775,160777,160780,160782],{"class":38,"line":167},[36,160776,4592],{"class":42},[36,160778,160779],{"class":50}," guess ",[36,160781,2627],{"class":42},[36,160783,160784],{"class":50}," answer:\n",[36,160786,160787,160789,160791,160794],{"class":38,"line":172},[36,160788,33782],{"class":73},[36,160790,222],{"class":50},[36,160792,160793],{"class":110},"\"猜大了\"",[36,160795,1680],{"class":50},[36,160797,160798,160800,160802,160804],{"class":38,"line":192},[36,160799,40624],{"class":42},[36,160801,160779],{"class":50},[36,160803,2577],{"class":42},[36,160805,160784],{"class":50},[36,160807,160808,160810,160812,160815],{"class":38,"line":211},[36,160809,33782],{"class":73},[36,160811,222],{"class":50},[36,160813,160814],{"class":110},"\"猜小了\"",[36,160816,1680],{"class":50},[36,160818,160819,160821],{"class":38,"line":216},[36,160820,159353],{"class":42},[36,160822,5230],{"class":50},[36,160824,160825,160827,160829,160831,160834,160836,160838,160840,160843],{"class":38,"line":231},[36,160826,33782],{"class":73},[36,160828,222],{"class":50},[36,160830,1724],{"class":42},[36,160832,160833],{"class":110},"\"猜对了，一共猜了",[36,160835,2563],{"class":73},[36,160837,85765],{"class":50},[36,160839,2613],{"class":73},[36,160841,160842],{"class":110},"次\"",[36,160844,1680],{"class":50},[36,160846,160847],{"class":38,"line":236},[36,160848,32958],{"class":42},[19,160850,160851,160854,160855,160857],{},[33,160852,160853],{},"while True"," 表示无限循环，通常配合 ",[33,160856,3559],{}," 使用。",[14,160859,160861],{"id":160860},"_45-break和continue","4.5 break和continue",[1645,160863,160865],{"id":160864},"_451-break","4.5.1 break",[19,160867,160868,160870],{},[33,160869,3559],{}," 直接结束整个循环。",[26,160872,160874],{"className":31709,"code":160873,"language":31711,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[33,160875,160876,160896,160908,160912],{"__ignoreMap":31},[36,160877,160878,160880,160882,160884,160886,160888,160890,160892,160894],{"class":38,"line":39},[36,160879,4516],{"class":42},[36,160881,10906],{"class":50},[36,160883,27374],{"class":42},[36,160885,33774],{"class":73},[36,160887,222],{"class":50},[36,160889,1885],{"class":73},[36,160891,477],{"class":50},[36,160893,2012],{"class":73},[36,160895,32117],{"class":50},[36,160897,160898,160900,160902,160904,160906],{"class":38,"line":54},[36,160899,4592],{"class":42},[36,160901,10906],{"class":50},[36,160903,4441],{"class":42},[36,160905,79401],{"class":73},[36,160907,5230],{"class":50},[36,160909,160910],{"class":38,"line":61},[36,160911,32958],{"class":42},[36,160913,160914,160916],{"class":38,"line":80},[36,160915,32630],{"class":73},[36,160917,160561],{"class":50},[19,160919,147788],{},[26,160921,160924],{"className":160922,"code":160923,"language":6676,"meta":31},[6674],"1\n2\n",[33,160925,160923],{"__ignoreMap":31},[1645,160927,160929],{"id":160928},"_452-continue","4.5.2 continue",[19,160931,160932,160934],{},[33,160933,156003],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,160936,160938],{"className":31709,"code":160937,"language":31711,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[33,160939,160940,160960,160972,160976],{"__ignoreMap":31},[36,160941,160942,160944,160946,160948,160950,160952,160954,160956,160958],{"class":38,"line":39},[36,160943,4516],{"class":42},[36,160945,10906],{"class":50},[36,160947,27374],{"class":42},[36,160949,33774],{"class":73},[36,160951,222],{"class":50},[36,160953,1885],{"class":73},[36,160955,477],{"class":50},[36,160957,2012],{"class":73},[36,160959,32117],{"class":50},[36,160961,160962,160964,160966,160968,160970],{"class":38,"line":54},[36,160963,4592],{"class":42},[36,160965,10906],{"class":50},[36,160967,4441],{"class":42},[36,160969,79401],{"class":73},[36,160971,5230],{"class":50},[36,160973,160974],{"class":38,"line":61},[36,160975,149843],{"class":42},[36,160977,160978,160980],{"class":38,"line":80},[36,160979,32630],{"class":73},[36,160981,160561],{"class":50},[19,160983,147788],{},[26,160985,160988],{"className":160986,"code":160987,"language":6676,"meta":31},[6674],"1\n2\n4\n5\n",[33,160989,160987],{"__ignoreMap":31},[14,160991,160993],{"id":160992},"_46-for循环","4.6 for循环",[19,160995,160996,160998],{},[33,160997,4516],{}," 常用于遍历序列。",[26,161000,161002],{"className":31709,"code":161001,"language":31711,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[33,161003,161004,161013,161017,161028],{"__ignoreMap":31},[36,161005,161006,161008,161010],{"class":38,"line":39},[36,161007,147867],{"class":50},[36,161009,70],{"class":42},[36,161011,161012],{"class":110}," \"python\"\n",[36,161014,161015],{"class":38,"line":54},[36,161016,58],{"emptyLinePlaceholder":57},[36,161018,161019,161021,161024,161026],{"class":38,"line":61},[36,161020,4516],{"class":42},[36,161022,161023],{"class":50}," ch ",[36,161025,27374],{"class":42},[36,161027,159730],{"class":50},[36,161029,161030,161032],{"class":38,"line":80},[36,161031,32630],{"class":73},[36,161033,161034],{"class":50},"(ch)\n",[19,161036,161037],{},"遍历列表：",[26,161039,161041],{"className":31709,"code":161040,"language":31711,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[33,161042,161043,161065,161069,161079],{"__ignoreMap":31},[36,161044,161045,161048,161050,161052,161054,161056,161058,161060,161063],{"class":38,"line":39},[36,161046,161047],{"class":50},"students ",[36,161049,70],{"class":42},[36,161051,53557],{"class":50},[36,161053,151219],{"class":110},[36,161055,477],{"class":50},[36,161057,152267],{"class":110},[36,161059,477],{"class":50},[36,161061,161062],{"class":110},"\"小刚\"",[36,161064,34577],{"class":50},[36,161066,161067],{"class":38,"line":54},[36,161068,58],{"emptyLinePlaceholder":57},[36,161070,161071,161073,161075,161077],{"class":38,"line":61},[36,161072,4516],{"class":42},[36,161074,153468],{"class":50},[36,161076,27374],{"class":42},[36,161078,153473],{"class":50},[36,161080,161081,161083],{"class":38,"line":80},[36,161082,32630],{"class":73},[36,161084,151373],{"class":50},[14,161086,161088],{"id":161087},"_47-range函数","4.7 range函数",[19,161090,161091,161094],{},[33,161092,161093],{},"range()"," 用于生成整数序列。",[26,161096,161098],{"className":31709,"code":161097,"language":31711,"meta":31,"style":31},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[33,161099,161100,161114,161132],{"__ignoreMap":31},[36,161101,161102,161104,161106,161108,161111],{"class":38,"line":39},[36,161103,34747],{"class":73},[36,161105,222],{"class":50},[36,161107,1987],{"class":73},[36,161109,161110],{"class":50},")          ",[36,161112,161113],{"class":124},"# 0,1,2,3,4\n",[36,161115,161116,161118,161120,161122,161124,161126,161129],{"class":38,"line":54},[36,161117,34747],{"class":73},[36,161119,222],{"class":50},[36,161121,1885],{"class":73},[36,161123,477],{"class":50},[36,161125,1987],{"class":73},[36,161127,161128],{"class":50},")       ",[36,161130,161131],{"class":124},"# 1,2,3,4\n",[36,161133,161134,161136,161138,161140,161142,161144,161146,161148,161150],{"class":38,"line":61},[36,161135,34747],{"class":73},[36,161137,222],{"class":50},[36,161139,1885],{"class":73},[36,161141,477],{"class":50},[36,161143,2113],{"class":73},[36,161145,477],{"class":50},[36,161147,1747],{"class":73},[36,161149,156992],{"class":50},[36,161151,161152],{"class":124},"# 1,3,5,7,9\n",[19,161154,161155,161156,25949],{},"配合 ",[33,161157,4516],{},[26,161159,161161],{"className":31709,"code":161160,"language":31711,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[33,161162,161163,161183],{"__ignoreMap":31},[36,161164,161165,161167,161169,161171,161173,161175,161177,161179,161181],{"class":38,"line":39},[36,161166,4516],{"class":42},[36,161168,10906],{"class":50},[36,161170,27374],{"class":42},[36,161172,33774],{"class":73},[36,161174,222],{"class":50},[36,161176,1885],{"class":73},[36,161178,477],{"class":50},[36,161180,2012],{"class":73},[36,161182,32117],{"class":50},[36,161184,161185,161187],{"class":38,"line":54},[36,161186,32630],{"class":73},[36,161188,160561],{"class":50},[19,161190,885,161191,161193],{},[33,161192,34747],{}," 的结束值不包含在内。",[14,161195,161197],{"id":161196},"_48-for循环求和","4.8 for循环求和",[26,161199,161201],{"className":31709,"code":161200,"language":31711,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[33,161202,161203,161211,161215,161235,161243,161247],{"__ignoreMap":31},[36,161204,161205,161207,161209],{"class":38,"line":39},[36,161206,158591],{"class":50},[36,161208,70],{"class":42},[36,161210,48664],{"class":73},[36,161212,161213],{"class":38,"line":54},[36,161214,58],{"emptyLinePlaceholder":57},[36,161216,161217,161219,161221,161223,161225,161227,161229,161231,161233],{"class":38,"line":61},[36,161218,4516],{"class":42},[36,161220,10906],{"class":50},[36,161222,27374],{"class":42},[36,161224,33774],{"class":73},[36,161226,222],{"class":50},[36,161228,1885],{"class":73},[36,161230,477],{"class":50},[36,161232,2005],{"class":73},[36,161234,32117],{"class":50},[36,161236,161237,161239,161241],{"class":38,"line":80},[36,161238,160638],{"class":50},[36,161240,10945],{"class":42},[36,161242,160643],{"class":50},[36,161244,161245],{"class":38,"line":96},[36,161246,58],{"emptyLinePlaceholder":57},[36,161248,161249,161251],{"class":38,"line":101},[36,161250,31746],{"class":73},[36,161252,160662],{"class":50},[19,161254,161255],{},"求偶数和：",[26,161257,161259],{"className":31709,"code":161258,"language":31711,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[33,161260,161261,161269,161273,161293,161309,161318,161322],{"__ignoreMap":31},[36,161262,161263,161265,161267],{"class":38,"line":39},[36,161264,158591],{"class":50},[36,161266,70],{"class":42},[36,161268,48664],{"class":73},[36,161270,161271],{"class":38,"line":54},[36,161272,58],{"emptyLinePlaceholder":57},[36,161274,161275,161277,161279,161281,161283,161285,161287,161289,161291],{"class":38,"line":61},[36,161276,4516],{"class":42},[36,161278,10906],{"class":50},[36,161280,27374],{"class":42},[36,161282,33774],{"class":73},[36,161284,222],{"class":50},[36,161286,1885],{"class":73},[36,161288,477],{"class":50},[36,161290,2005],{"class":73},[36,161292,32117],{"class":50},[36,161294,161295,161297,161299,161301,161303,161305,161307],{"class":38,"line":80},[36,161296,4592],{"class":42},[36,161298,10906],{"class":50},[36,161300,1996],{"class":42},[36,161302,16084],{"class":73},[36,161304,102890],{"class":42},[36,161306,242],{"class":73},[36,161308,5230],{"class":50},[36,161310,161311,161314,161316],{"class":38,"line":96},[36,161312,161313],{"class":50},"        total ",[36,161315,10945],{"class":42},[36,161317,160643],{"class":50},[36,161319,161320],{"class":38,"line":101},[36,161321,58],{"emptyLinePlaceholder":57},[36,161323,161324,161326],{"class":38,"line":128},[36,161325,31746],{"class":73},[36,161327,160662],{"class":50},[19,161329,161330],{},"也可以：",[26,161332,161334],{"className":31709,"code":161333,"language":31711,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[33,161335,161336,161344,161348,161372,161380,161384],{"__ignoreMap":31},[36,161337,161338,161340,161342],{"class":38,"line":39},[36,161339,158591],{"class":50},[36,161341,70],{"class":42},[36,161343,48664],{"class":73},[36,161345,161346],{"class":38,"line":54},[36,161347,58],{"emptyLinePlaceholder":57},[36,161349,161350,161352,161354,161356,161358,161360,161362,161364,161366,161368,161370],{"class":38,"line":61},[36,161351,4516],{"class":42},[36,161353,10906],{"class":50},[36,161355,27374],{"class":42},[36,161357,33774],{"class":73},[36,161359,222],{"class":50},[36,161361,1747],{"class":73},[36,161363,477],{"class":50},[36,161365,2005],{"class":73},[36,161367,477],{"class":50},[36,161369,1747],{"class":73},[36,161371,32117],{"class":50},[36,161373,161374,161376,161378],{"class":38,"line":80},[36,161375,160638],{"class":50},[36,161377,10945],{"class":42},[36,161379,160643],{"class":50},[36,161381,161382],{"class":38,"line":96},[36,161383,58],{"emptyLinePlaceholder":57},[36,161385,161386,161388],{"class":38,"line":101},[36,161387,31746],{"class":73},[36,161389,160662],{"class":50},[14,161391,161393],{"id":161392},"_49-循环嵌套","4.9 循环嵌套",[19,161395,161396],{},"嵌套循环就是循环里面再写循环。",[26,161398,161400],{"className":31709,"code":161399,"language":31711,"meta":31,"style":31},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[33,161401,161402,161422,161442],{"__ignoreMap":31},[36,161403,161404,161406,161408,161410,161412,161414,161416,161418,161420],{"class":38,"line":39},[36,161405,4516],{"class":42},[36,161407,10906],{"class":50},[36,161409,27374],{"class":42},[36,161411,33774],{"class":73},[36,161413,222],{"class":50},[36,161415,1885],{"class":73},[36,161417,477],{"class":50},[36,161419,1961],{"class":73},[36,161421,32117],{"class":50},[36,161423,161424,161426,161428,161430,161432,161434,161436,161438,161440],{"class":38,"line":54},[36,161425,4692],{"class":42},[36,161427,10968],{"class":50},[36,161429,27374],{"class":42},[36,161431,33774],{"class":73},[36,161433,222],{"class":50},[36,161435,1885],{"class":73},[36,161437,477],{"class":50},[36,161439,1961],{"class":73},[36,161441,32117],{"class":50},[36,161443,161444,161446,161448,161450,161453,161455,161457,161459,161462,161464,161466,161468,161470],{"class":38,"line":61},[36,161445,33782],{"class":73},[36,161447,222],{"class":50},[36,161449,1724],{"class":42},[36,161451,161452],{"class":110},"\"i=",[36,161454,2563],{"class":73},[36,161456,2108],{"class":50},[36,161458,2613],{"class":73},[36,161460,161461],{"class":110},", j=",[36,161463,2563],{"class":73},[36,161465,2134],{"class":50},[36,161467,2613],{"class":73},[36,161469,1919],{"class":110},[36,161471,1680],{"class":50},[19,161473,161474],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161476,161478],{"id":161477},"_410-九九乘法表","4.10 九九乘法表",[26,161480,161482],{"className":31709,"code":161481,"language":31711,"meta":31,"style":31},"for i in range(1, 10):\n    for j in range(1, i + 1):\n        print(f\"{j}*{i}={i * j}\", end=\"\\t\")\n    print()\n",[33,161483,161484,161504,161527,161579],{"__ignoreMap":31},[36,161485,161486,161488,161490,161492,161494,161496,161498,161500,161502],{"class":38,"line":39},[36,161487,4516],{"class":42},[36,161489,10906],{"class":50},[36,161491,27374],{"class":42},[36,161493,33774],{"class":73},[36,161495,222],{"class":50},[36,161497,1885],{"class":73},[36,161499,477],{"class":50},[36,161501,2113],{"class":73},[36,161503,32117],{"class":50},[36,161505,161506,161508,161510,161512,161514,161516,161518,161521,161523,161525],{"class":38,"line":54},[36,161507,4692],{"class":42},[36,161509,10968],{"class":50},[36,161511,27374],{"class":42},[36,161513,33774],{"class":73},[36,161515,222],{"class":50},[36,161517,1885],{"class":73},[36,161519,161520],{"class":50},", i ",[36,161522,2148],{"class":42},[36,161524,26449],{"class":73},[36,161526,32117],{"class":50},[36,161528,161529,161531,161533,161535,161537,161539,161541,161543,161545,161547,161549,161551,161553,161555,161557,161559,161561,161563,161565,161567,161569,161571,161573,161575,161577],{"class":38,"line":61},[36,161530,33782],{"class":73},[36,161532,222],{"class":50},[36,161534,1724],{"class":42},[36,161536,1919],{"class":110},[36,161538,2563],{"class":73},[36,161540,2134],{"class":50},[36,161542,2613],{"class":73},[36,161544,2122],{"class":110},[36,161546,2563],{"class":73},[36,161548,2108],{"class":50},[36,161550,2613],{"class":73},[36,161552,70],{"class":110},[36,161554,2563],{"class":73},[36,161556,101479],{"class":50},[36,161558,2122],{"class":42},[36,161560,4901],{"class":50},[36,161562,2613],{"class":73},[36,161564,1919],{"class":110},[36,161566,477],{"class":50},[36,161568,47132],{"class":473},[36,161570,70],{"class":42},[36,161572,1919],{"class":110},[36,161574,2767],{"class":73},[36,161576,1919],{"class":110},[36,161578,1680],{"class":50},[36,161580,161581,161583],{"class":38,"line":80},[36,161582,32630],{"class":73},[36,161584,3484],{"class":50},[19,161586,161587],{},"关键点：",[256,161589,161590,161596,161602,161608],{},[259,161591,161592,161593,161595],{},"外层 ",[33,161594,2108],{}," 控制行。",[259,161597,161598,161599,161601],{},"内层 ",[33,161600,2134],{}," 控制列。",[259,161603,161604,161605,161607],{},"每行结束后用 ",[33,161606,147803],{}," 换行。",[259,161609,161610,161613],{},[33,161611,161612],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161615,161617],{"id":161616},"_411-循环else","4.11 循环else",[19,161619,161620,161621,161623,161624,161626,161627,161629],{},"Python 的循环可以带 ",[33,161622,3219],{},"。当循环正常结束时执行 ",[33,161625,3219],{},"，如果被 ",[33,161628,3559],{}," 打断，则不执行。",[26,161631,161633],{"className":31709,"code":161632,"language":31711,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,161634,161635,161655,161667,161678,161682,161688],{"__ignoreMap":31},[36,161636,161637,161639,161641,161643,161645,161647,161649,161651,161653],{"class":38,"line":39},[36,161638,4516],{"class":42},[36,161640,10906],{"class":50},[36,161642,27374],{"class":42},[36,161644,33774],{"class":73},[36,161646,222],{"class":50},[36,161648,1885],{"class":73},[36,161650,477],{"class":50},[36,161652,2012],{"class":73},[36,161654,32117],{"class":50},[36,161656,161657,161659,161661,161663,161665],{"class":38,"line":54},[36,161658,4592],{"class":42},[36,161660,10906],{"class":50},[36,161662,4441],{"class":42},[36,161664,74],{"class":73},[36,161666,5230],{"class":50},[36,161668,161669,161671,161673,161676],{"class":38,"line":61},[36,161670,33782],{"class":73},[36,161672,222],{"class":50},[36,161674,161675],{"class":110},"\"找到了\"",[36,161677,1680],{"class":50},[36,161679,161680],{"class":38,"line":80},[36,161681,32958],{"class":42},[36,161683,161684,161686],{"class":38,"line":96},[36,161685,3219],{"class":42},[36,161687,5230],{"class":50},[36,161689,161690,161692,161694,161697],{"class":38,"line":101},[36,161691,32630],{"class":73},[36,161693,222],{"class":50},[36,161695,161696],{"class":110},"\"没找到\"",[36,161698,1680],{"class":50},[19,161700,161701],{},"常用于搜索。",[26,161703,161705],{"className":31709,"code":161704,"language":31711,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,161706,161707,161728,161737,161741,161753,161764,161774,161778,161784],{"__ignoreMap":31},[36,161708,161709,161712,161714,161716,161718,161720,161722,161724,161726],{"class":38,"line":39},[36,161710,161711],{"class":50},"names ",[36,161713,70],{"class":42},[36,161715,53557],{"class":50},[36,161717,151219],{"class":110},[36,161719,477],{"class":50},[36,161721,152267],{"class":110},[36,161723,477],{"class":50},[36,161725,161062],{"class":110},[36,161727,34577],{"class":50},[36,161729,161730,161732,161734],{"class":38,"line":54},[36,161731,112909],{"class":50},[36,161733,70],{"class":42},[36,161735,161736],{"class":110}," \"小李\"\n",[36,161738,161739],{"class":38,"line":61},[36,161740,58],{"emptyLinePlaceholder":57},[36,161742,161743,161745,161748,161750],{"class":38,"line":80},[36,161744,4516],{"class":42},[36,161746,161747],{"class":50}," name ",[36,161749,27374],{"class":42},[36,161751,161752],{"class":50}," names:\n",[36,161754,161755,161757,161759,161761],{"class":38,"line":96},[36,161756,4592],{"class":42},[36,161758,161747],{"class":50},[36,161760,4441],{"class":42},[36,161762,161763],{"class":50}," target:\n",[36,161765,161766,161768,161770,161772],{"class":38,"line":101},[36,161767,33782],{"class":73},[36,161769,222],{"class":50},[36,161771,161675],{"class":110},[36,161773,1680],{"class":50},[36,161775,161776],{"class":38,"line":128},[36,161777,32958],{"class":42},[36,161779,161780,161782],{"class":38,"line":149},[36,161781,3219],{"class":42},[36,161783,5230],{"class":50},[36,161785,161786,161788,161790,161792],{"class":38,"line":154},[36,161787,32630],{"class":73},[36,161789,222],{"class":50},[36,161791,161696],{"class":110},[36,161793,1680],{"class":50},[14,161795,161797],{"id":161796},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161799,124623],{},[256,161801,161802,161805,161808],{},[259,161803,161804],{},"用户最多输入 3 次密码。",[259,161806,161807],{},"密码正确则登录成功。",[259,161809,161810],{},"3 次都错误则锁定账号。",[19,161812,11501],{},[26,161814,161816],{"className":31709,"code":161815,"language":31711,"meta":31,"style":31},"password = \"123456\"\n\nfor i in range(3):\n    user_password = input(\"请输入密码:\")\n\n    if user_password == password:\n        print(\"登录成功\")\n        break\n    else:\n        print(f\"密码错误，还剩{2 - i}次机会\")\nelse:\n    print(\"账号已锁定\")\n",[33,161817,161818,161828,161832,161848,161864,161868,161880,161891,161895,161901,161926,161932],{"__ignoreMap":31},[36,161819,161820,161823,161825],{"class":38,"line":39},[36,161821,161822],{"class":50},"password ",[36,161824,70],{"class":42},[36,161826,161827],{"class":110}," \"123456\"\n",[36,161829,161830],{"class":38,"line":54},[36,161831,58],{"emptyLinePlaceholder":57},[36,161833,161834,161836,161838,161840,161842,161844,161846],{"class":38,"line":61},[36,161835,4516],{"class":42},[36,161837,10906],{"class":50},[36,161839,27374],{"class":42},[36,161841,33774],{"class":73},[36,161843,222],{"class":50},[36,161845,1741],{"class":73},[36,161847,32117],{"class":50},[36,161849,161850,161853,161855,161857,161859,161862],{"class":38,"line":80},[36,161851,161852],{"class":50},"    user_password ",[36,161854,70],{"class":42},[36,161856,61936],{"class":73},[36,161858,222],{"class":50},[36,161860,161861],{"class":110},"\"请输入密码:\"",[36,161863,1680],{"class":50},[36,161865,161866],{"class":38,"line":96},[36,161867,58],{"emptyLinePlaceholder":57},[36,161869,161870,161872,161875,161877],{"class":38,"line":101},[36,161871,4592],{"class":42},[36,161873,161874],{"class":50}," user_password ",[36,161876,4441],{"class":42},[36,161878,161879],{"class":50}," password:\n",[36,161881,161882,161884,161886,161889],{"class":38,"line":128},[36,161883,33782],{"class":73},[36,161885,222],{"class":50},[36,161887,161888],{"class":110},"\"登录成功\"",[36,161890,1680],{"class":50},[36,161892,161893],{"class":38,"line":149},[36,161894,32958],{"class":42},[36,161896,161897,161899],{"class":38,"line":154},[36,161898,159353],{"class":42},[36,161900,5230],{"class":50},[36,161902,161903,161905,161907,161909,161912,161915,161917,161919,161921,161924],{"class":38,"line":167},[36,161904,33782],{"class":73},[36,161906,222],{"class":50},[36,161908,1724],{"class":42},[36,161910,161911],{"class":110},"\"密码错误，还剩",[36,161913,161914],{"class":73},"{2",[36,161916,53602],{"class":42},[36,161918,4523],{"class":50},[36,161920,2613],{"class":73},[36,161922,161923],{"class":110},"次机会\"",[36,161925,1680],{"class":50},[36,161927,161928,161930],{"class":38,"line":172},[36,161929,3219],{"class":42},[36,161931,5230],{"class":50},[36,161933,161934,161936,161938,161941],{"class":38,"line":192},[36,161935,32630],{"class":73},[36,161937,222],{"class":50},[36,161939,161940],{"class":110},"\"账号已锁定\"",[36,161942,1680],{"class":50},[14,161944,161946],{"id":161945},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,161948,161950],{"className":31709,"code":161949,"language":31711,"meta":31,"style":31},"while True:\n    print(\"====== 菜单 ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        print(\"余额为1000元\")\n    elif choice == \"2\":\n        print(\"存款功能\")\n    elif choice == \"3\":\n        print(\"取款功能\")\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[33,161951,161952,161960,161971,161982,161993,162004,162015,162019,162034,162038,162050,162061,162073,162084,162096,162107,162119,162129,162133,162139],{"__ignoreMap":31},[36,161953,161954,161956,161958],{"class":38,"line":39},[36,161955,109994],{"class":42},[36,161957,96623],{"class":73},[36,161959,5230],{"class":50},[36,161961,161962,161964,161966,161969],{"class":38,"line":54},[36,161963,32630],{"class":73},[36,161965,222],{"class":50},[36,161967,161968],{"class":110},"\"====== 菜单 ======\"",[36,161970,1680],{"class":50},[36,161972,161973,161975,161977,161980],{"class":38,"line":61},[36,161974,32630],{"class":73},[36,161976,222],{"class":50},[36,161978,161979],{"class":110},"\"1. 查询余额\"",[36,161981,1680],{"class":50},[36,161983,161984,161986,161988,161991],{"class":38,"line":80},[36,161985,32630],{"class":73},[36,161987,222],{"class":50},[36,161989,161990],{"class":110},"\"2. 存款\"",[36,161992,1680],{"class":50},[36,161994,161995,161997,161999,162002],{"class":38,"line":96},[36,161996,32630],{"class":73},[36,161998,222],{"class":50},[36,162000,162001],{"class":110},"\"3. 取款\"",[36,162003,1680],{"class":50},[36,162005,162006,162008,162010,162013],{"class":38,"line":101},[36,162007,32630],{"class":73},[36,162009,222],{"class":50},[36,162011,162012],{"class":110},"\"0. 退出\"",[36,162014,1680],{"class":50},[36,162016,162017],{"class":38,"line":128},[36,162018,58],{"emptyLinePlaceholder":57},[36,162020,162021,162024,162026,162028,162030,162032],{"class":38,"line":149},[36,162022,162023],{"class":50},"    choice ",[36,162025,70],{"class":42},[36,162027,61936],{"class":73},[36,162029,222],{"class":50},[36,162031,154404],{"class":110},[36,162033,1680],{"class":50},[36,162035,162036],{"class":38,"line":154},[36,162037,58],{"emptyLinePlaceholder":57},[36,162039,162040,162042,162044,162046,162048],{"class":38,"line":167},[36,162041,4592],{"class":42},[36,162043,154417],{"class":50},[36,162045,4441],{"class":42},[36,162047,154422],{"class":110},[36,162049,5230],{"class":50},[36,162051,162052,162054,162056,162059],{"class":38,"line":172},[36,162053,33782],{"class":73},[36,162055,222],{"class":50},[36,162057,162058],{"class":110},"\"余额为1000元\"",[36,162060,1680],{"class":50},[36,162062,162063,162065,162067,162069,162071],{"class":38,"line":192},[36,162064,40624],{"class":42},[36,162066,154417],{"class":50},[36,162068,4441],{"class":42},[36,162070,154441],{"class":110},[36,162072,5230],{"class":50},[36,162074,162075,162077,162079,162082],{"class":38,"line":211},[36,162076,33782],{"class":73},[36,162078,222],{"class":50},[36,162080,162081],{"class":110},"\"存款功能\"",[36,162083,1680],{"class":50},[36,162085,162086,162088,162090,162092,162094],{"class":38,"line":216},[36,162087,40624],{"class":42},[36,162089,154417],{"class":50},[36,162091,4441],{"class":42},[36,162093,154459],{"class":110},[36,162095,5230],{"class":50},[36,162097,162098,162100,162102,162105],{"class":38,"line":231},[36,162099,33782],{"class":73},[36,162101,222],{"class":50},[36,162103,162104],{"class":110},"\"取款功能\"",[36,162106,1680],{"class":50},[36,162108,162109,162111,162113,162115,162117],{"class":38,"line":236},[36,162110,40624],{"class":42},[36,162112,154417],{"class":50},[36,162114,4441],{"class":42},[36,162116,154513],{"class":110},[36,162118,5230],{"class":50},[36,162120,162121,162123,162125,162127],{"class":38,"line":247},[36,162122,33782],{"class":73},[36,162124,222],{"class":50},[36,162126,154524],{"class":110},[36,162128,1680],{"class":50},[36,162130,162131],{"class":38,"line":637},[36,162132,32958],{"class":42},[36,162134,162135,162137],{"class":38,"line":646},[36,162136,159353],{"class":42},[36,162138,5230],{"class":50},[36,162140,162141,162143,162145,162147],{"class":38,"line":655},[36,162142,33782],{"class":73},[36,162144,222],{"class":50},[36,162146,154545],{"class":110},[36,162148,1680],{"class":50},[19,162150,162151,162152,162154,162155,29716],{},"菜单类程序通常使用 ",[33,162153,160853],{},"，用户选择退出时 ",[33,162156,3559],{},[14,162158,162160],{"id":162159},"_414-易错点","4.14 易错点",[256,162162,162163,162168,162174,162182,162188],{},[259,162164,162165,162167],{},[33,162166,109994],{}," 循环必须更新控制变量。",[259,162169,162170,162173],{},[33,162171,162172],{},"range(1, 10)"," 不包含 10。",[259,162175,162176,162178,162179,162181],{},[33,162177,3559],{}," 结束整个循环，",[33,162180,156003],{}," 只跳过本轮。",[259,162183,162184,162185,162187],{},"嵌套循环中，",[33,162186,3559],{}," 只跳出当前所在的一层循环。",[259,162189,162190],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162192,162194],{"id":162193},"_415-本章练习","4.15 本章练习",[256,162196,162197,162200,162203,162206,162209],{},[259,162198,162199],{},"输出 1 到 100。",[259,162201,162202],{},"计算 1 到 100 的偶数和。",[259,162204,162205],{},"输出 100 以内能被 3 和 5 同时整除的数。",[259,162207,162208],{},"编写猜数字游戏，限制最多猜 7 次。",[259,162210,162211],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1592,162213,162214],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":162216},[162217,162218,162219,162220,162221,162225,162226,162227,162228,162229,162230,162231,162232,162233,162234],{"id":160473,"depth":54,"text":160474},{"id":160503,"depth":54,"text":160504},{"id":160592,"depth":54,"text":160593},{"id":160686,"depth":54,"text":160687},{"id":160860,"depth":54,"text":160861,"children":162222},[162223,162224],{"id":160864,"depth":61,"text":160865},{"id":160928,"depth":61,"text":160929},{"id":160992,"depth":54,"text":160993},{"id":161087,"depth":54,"text":161088},{"id":161196,"depth":54,"text":161197},{"id":161392,"depth":54,"text":161393},{"id":161477,"depth":54,"text":161478},{"id":161616,"depth":54,"text":161617},{"id":161796,"depth":54,"text":161797},{"id":161945,"depth":54,"text":161946},{"id":162159,"depth":54,"text":162160},{"id":162193,"depth":54,"text":162194},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160465,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162241,"title":162242,"body":162243,"description":24706,"extension":1603,"meta":164248,"navigation":57,"path":164249,"seo":164250,"stem":164251,"__hash__":164252},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162244,"toc":164228},[162245,162248,162252,162255,162258,162272,162275,162289,162293,162295,162314,162316,162363,162365,162379,162383,162457,162460,162464,162467,162526,162534,162537,162590,162593,162597,162602,162657,162665,162715,162719,162724,162732,162831,162837,162841,162846,162849,162860,162901,162914,162918,162921,162957,162960,162973,162976,163036,163040,163044,163047,163098,163102,163105,163152,163158,163224,163227,163231,163234,163350,163353,163357,163360,163466,163470,163473,163511,163514,163556,163559,163619,163622,163626,164090,164093,164097,164124,164130,164191,164195,164225],[10,162246,162242],{"id":162247},"_5-函数基础",[14,162249,162251],{"id":162250},"_51-为什么需要函数","5.1 为什么需要函数",[19,162253,162254],{},"函数用于封装一段可以重复使用的代码。",[19,162256,162257],{},"不使用函数的问题：",[256,162259,162260,162263,162266,162269],{},[259,162261,162262],{},"重复代码多。",[259,162264,162265],{},"修改逻辑时容易漏改。",[259,162267,162268],{},"主流程不清晰。",[259,162270,162271],{},"程序越写越长，难以维护。",[19,162273,162274],{},"使用函数后的好处：",[256,162276,162277,162280,162283,162286],{},[259,162278,162279],{},"提高复用性。",[259,162281,162282],{},"提高可读性。",[259,162284,162285],{},"便于调试。",[259,162287,162288],{},"便于分工。",[14,162290,162292],{"id":162291},"_52-函数定义","5.2 函数定义",[19,162294,6670],{},[26,162296,162298],{"className":31709,"code":162297,"language":31711,"meta":31,"style":31},"def 函数名():\n    函数体\n",[33,162299,162300,162309],{"__ignoreMap":31},[36,162301,162302,162304,162307],{"class":38,"line":39},[36,162303,33278],{"class":42},[36,162305,162306],{"class":46}," 函数名",[36,162308,33284],{"class":50},[36,162310,162311],{"class":38,"line":54},[36,162312,162313],{"class":50},"    函数体\n",[19,162315,16464],{},[26,162317,162319],{"className":31709,"code":162318,"language":31711,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[33,162320,162321,162330,162340,162350,162354,162358],{"__ignoreMap":31},[36,162322,162323,162325,162328],{"class":38,"line":39},[36,162324,33278],{"class":42},[36,162326,162327],{"class":46}," say_hello",[36,162329,33284],{"class":50},[36,162331,162332,162334,162336,162338],{"class":38,"line":54},[36,162333,32630],{"class":73},[36,162335,222],{"class":50},[36,162337,7326],{"class":110},[36,162339,1680],{"class":50},[36,162341,162342,162344,162346,162348],{"class":38,"line":61},[36,162343,32630],{"class":73},[36,162345,222],{"class":50},[36,162347,147970],{"class":110},[36,162349,1680],{"class":50},[36,162351,162352],{"class":38,"line":80},[36,162353,58],{"emptyLinePlaceholder":57},[36,162355,162356],{"class":38,"line":96},[36,162357,58],{"emptyLinePlaceholder":57},[36,162359,162360],{"class":38,"line":101},[36,162361,162362],{"class":50},"say_hello()\n",[19,162364,885],{},[256,162366,162367,162370,162373,162376],{},[259,162368,162369],{},"函数必须先定义，再调用。",[259,162371,162372],{},"函数名遵循变量命名规则。",[259,162374,162375],{},"函数体需要缩进。",[259,162377,162378],{},"函数不调用就不会执行。",[14,162380,162382],{"id":162381},"_53-函数调用","5.3 函数调用",[26,162384,162386],{"className":31709,"code":162385,"language":31711,"meta":31,"style":31},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[33,162387,162388,162397,162408,162419,162430,162440,162444,162448,162453],{"__ignoreMap":31},[36,162389,162390,162392,162395],{"class":38,"line":39},[36,162391,33278],{"class":42},[36,162393,162394],{"class":46}," print_menu",[36,162396,33284],{"class":50},[36,162398,162399,162401,162403,162406],{"class":38,"line":54},[36,162400,32630],{"class":73},[36,162402,222],{"class":50},[36,162404,162405],{"class":110},"\"1. 查询\"",[36,162407,1680],{"class":50},[36,162409,162410,162412,162414,162417],{"class":38,"line":61},[36,162411,32630],{"class":73},[36,162413,222],{"class":50},[36,162415,162416],{"class":110},"\"2. 添加\"",[36,162418,1680],{"class":50},[36,162420,162421,162423,162425,162428],{"class":38,"line":80},[36,162422,32630],{"class":73},[36,162424,222],{"class":50},[36,162426,162427],{"class":110},"\"3. 删除\"",[36,162429,1680],{"class":50},[36,162431,162432,162434,162436,162438],{"class":38,"line":96},[36,162433,32630],{"class":73},[36,162435,222],{"class":50},[36,162437,162012],{"class":110},[36,162439,1680],{"class":50},[36,162441,162442],{"class":38,"line":101},[36,162443,58],{"emptyLinePlaceholder":57},[36,162445,162446],{"class":38,"line":128},[36,162447,58],{"emptyLinePlaceholder":57},[36,162449,162450],{"class":38,"line":149},[36,162451,162452],{"class":50},"print_menu()\n",[36,162454,162455],{"class":38,"line":154},[36,162456,162452],{"class":50},[19,162458,162459],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162461,162463],{"id":162462},"_54-参数","5.4 参数",[19,162465,162466],{},"参数用于向函数传递数据。",[26,162468,162470],{"className":31709,"code":162469,"language":31711,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[33,162471,162472,162481,162501,162505,162509,162518],{"__ignoreMap":31},[36,162473,162474,162476,162478],{"class":38,"line":39},[36,162475,33278],{"class":42},[36,162477,162327],{"class":46},[36,162479,162480],{"class":50},"(name):\n",[36,162482,162483,162485,162487,162489,162491,162493,162495,162497,162499],{"class":38,"line":54},[36,162484,32630],{"class":73},[36,162486,222],{"class":50},[36,162488,1724],{"class":42},[36,162490,158385],{"class":110},[36,162492,2563],{"class":73},[36,162494,81141],{"class":50},[36,162496,2613],{"class":73},[36,162498,1919],{"class":110},[36,162500,1680],{"class":50},[36,162502,162503],{"class":38,"line":61},[36,162504,58],{"emptyLinePlaceholder":57},[36,162506,162507],{"class":38,"line":80},[36,162508,58],{"emptyLinePlaceholder":57},[36,162510,162511,162514,162516],{"class":38,"line":96},[36,162512,162513],{"class":50},"say_hello(",[36,162515,151219],{"class":110},[36,162517,1680],{"class":50},[36,162519,162520,162522,162524],{"class":38,"line":101},[36,162521,162513],{"class":50},[36,162523,152267],{"class":110},[36,162525,1680],{"class":50},[19,162527,162528,162530,162531,162533],{},[33,162529,81141],{}," 是形参，",[33,162532,151219],{}," 是实参。",[19,162535,162536],{},"多个参数：",[26,162538,162540],{"className":31709,"code":162539,"language":31711,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[33,162541,162542,162550,162563,162569,162573,162577],{"__ignoreMap":31},[36,162543,162544,162546,162548],{"class":38,"line":39},[36,162545,33278],{"class":42},[36,162547,6698],{"class":46},[36,162549,152424],{"class":50},[36,162551,162552,162555,162557,162559,162561],{"class":38,"line":54},[36,162553,162554],{"class":50},"    result ",[36,162556,70],{"class":42},[36,162558,67],{"class":50},[36,162560,2148],{"class":42},[36,162562,152435],{"class":50},[36,162564,162565,162567],{"class":38,"line":61},[36,162566,32630],{"class":73},[36,162568,77916],{"class":50},[36,162570,162571],{"class":38,"line":80},[36,162572,58],{"emptyLinePlaceholder":57},[36,162574,162575],{"class":38,"line":96},[36,162576,58],{"emptyLinePlaceholder":57},[36,162578,162579,162582,162584,162586,162588],{"class":38,"line":101},[36,162580,162581],{"class":50},"add(",[36,162583,2113],{"class":73},[36,162585,477],{"class":50},[36,162587,2367],{"class":73},[36,162589,1680],{"class":50},[19,162591,162592],{},"调用时参数数量必须匹配。",[14,162594,162596],{"id":162595},"_55-返回值","5.5 返回值",[19,162598,162599,162601],{},[33,162600,18375],{}," 用于把函数内部的结果返回给调用者。",[26,162603,162605],{"className":31709,"code":162604,"language":31711,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[33,162606,162607,162615,162625,162629,162633,162651],{"__ignoreMap":31},[36,162608,162609,162611,162613],{"class":38,"line":39},[36,162610,33278],{"class":42},[36,162612,6698],{"class":46},[36,162614,152424],{"class":50},[36,162616,162617,162619,162621,162623],{"class":38,"line":54},[36,162618,239],{"class":42},[36,162620,67],{"class":50},[36,162622,2148],{"class":42},[36,162624,152435],{"class":50},[36,162626,162627],{"class":38,"line":61},[36,162628,58],{"emptyLinePlaceholder":57},[36,162630,162631],{"class":38,"line":80},[36,162632,58],{"emptyLinePlaceholder":57},[36,162634,162635,162638,162640,162643,162645,162647,162649],{"class":38,"line":96},[36,162636,162637],{"class":50},"result ",[36,162639,70],{"class":42},[36,162641,162642],{"class":50}," add(",[36,162644,2113],{"class":73},[36,162646,477],{"class":50},[36,162648,2367],{"class":73},[36,162650,1680],{"class":50},[36,162652,162653,162655],{"class":38,"line":101},[36,162654,31746],{"class":73},[36,162656,77916],{"class":50},[19,162658,162659,162660,162662,162663,29716],{},"如果函数没有写 ",[33,162661,18375],{},"，默认返回 ",[33,162664,97017],{},[26,162666,162668],{"className":31709,"code":162667,"language":31711,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[33,162669,162670,162678,162688,162692,162696,162705],{"__ignoreMap":31},[36,162671,162672,162674,162676],{"class":38,"line":39},[36,162673,33278],{"class":42},[36,162675,162327],{"class":46},[36,162677,33284],{"class":50},[36,162679,162680,162682,162684,162686],{"class":38,"line":54},[36,162681,32630],{"class":73},[36,162683,222],{"class":50},[36,162685,7326],{"class":110},[36,162687,1680],{"class":50},[36,162689,162690],{"class":38,"line":61},[36,162691,58],{"emptyLinePlaceholder":57},[36,162693,162694],{"class":38,"line":80},[36,162695,58],{"emptyLinePlaceholder":57},[36,162697,162698,162700,162702],{"class":38,"line":96},[36,162699,162637],{"class":50},[36,162701,70],{"class":42},[36,162703,162704],{"class":50}," say_hello()\n",[36,162706,162707,162709,162712],{"class":38,"line":101},[36,162708,31746],{"class":73},[36,162710,162711],{"class":50},"(result)  ",[36,162713,162714],{"class":124},"# None\n",[14,162716,162718],{"id":162717},"_56-return的作用","5.6 return的作用",[19,162720,162721,162723],{},[33,162722,18375],{}," 有两个作用：",[256,162725,162726,162729],{},[259,162727,162728],{},"返回结果。",[259,162730,162731],{},"结束函数。",[26,162733,162735],{"className":31709,"code":162734,"language":31711,"meta":31,"style":31},"def check_age(age):\n    if age \u003C 0:\n        return \"年龄不合法\"\n\n    if age >= 18:\n        return \"成年人\"\n\n    return \"未成年人\"\n\n\nprint(check_age(20))\nprint(check_age(-1))\n",[33,162736,162737,162747,162759,162766,162770,162782,162789,162793,162800,162804,162808,162819],{"__ignoreMap":31},[36,162738,162739,162741,162744],{"class":38,"line":39},[36,162740,33278],{"class":42},[36,162742,162743],{"class":46}," check_age",[36,162745,162746],{"class":50},"(age):\n",[36,162748,162749,162751,162753,162755,162757],{"class":38,"line":54},[36,162750,4592],{"class":42},[36,162752,17036],{"class":50},[36,162754,2577],{"class":42},[36,162756,242],{"class":73},[36,162758,5230],{"class":50},[36,162760,162761,162763],{"class":38,"line":61},[36,162762,16081],{"class":42},[36,162764,162765],{"class":110}," \"年龄不合法\"\n",[36,162767,162768],{"class":38,"line":80},[36,162769,58],{"emptyLinePlaceholder":57},[36,162771,162772,162774,162776,162778,162780],{"class":38,"line":96},[36,162773,4592],{"class":42},[36,162775,17036],{"class":50},[36,162777,3228],{"class":42},[36,162779,157616],{"class":73},[36,162781,5230],{"class":50},[36,162783,162784,162786],{"class":38,"line":101},[36,162785,16081],{"class":42},[36,162787,162788],{"class":110}," \"成年人\"\n",[36,162790,162791],{"class":38,"line":128},[36,162792,58],{"emptyLinePlaceholder":57},[36,162794,162795,162797],{"class":38,"line":149},[36,162796,239],{"class":42},[36,162798,162799],{"class":110}," \"未成年人\"\n",[36,162801,162802],{"class":38,"line":154},[36,162803,58],{"emptyLinePlaceholder":57},[36,162805,162806],{"class":38,"line":167},[36,162807,58],{"emptyLinePlaceholder":57},[36,162809,162810,162812,162815,162817],{"class":38,"line":172},[36,162811,31746],{"class":73},[36,162813,162814],{"class":50},"(check_age(",[36,162816,2367],{"class":73},[36,162818,31828],{"class":50},[36,162820,162821,162823,162825,162827,162829],{"class":38,"line":192},[36,162822,31746],{"class":73},[36,162824,162814],{"class":50},[36,162826,2199],{"class":42},[36,162828,1885],{"class":73},[36,162830,31828],{"class":50},[19,162832,162833,162834,162836],{},"函数执行到 ",[33,162835,18375],{}," 后，后面的代码不会继续执行。",[14,162838,162840],{"id":162839},"_57-none","5.7 None",[19,162842,162843,162845],{},[33,162844,97017],{}," 表示空值或没有结果。",[19,162847,162848],{},"常见使用场景：",[256,162850,162851,162854,162857],{},[259,162852,162853],{},"函数没有返回值。",[259,162855,162856],{},"变量暂时没有具体值。",[259,162858,162859],{},"表示查询不到结果。",[26,162861,162863],{"className":31709,"code":162862,"language":31711,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[33,162864,162865,162873,162877,162890],{"__ignoreMap":31},[36,162866,162867,162869,162871],{"class":38,"line":39},[36,162868,162637],{"class":50},[36,162870,70],{"class":42},[36,162872,153503],{"class":73},[36,162874,162875],{"class":38,"line":54},[36,162876,58],{"emptyLinePlaceholder":57},[36,162878,162879,162881,162884,162886,162888],{"class":38,"line":61},[36,162880,3061],{"class":42},[36,162882,162883],{"class":50}," result ",[36,162885,40258],{"class":42},[36,162887,40264],{"class":73},[36,162889,5230],{"class":50},[36,162891,162892,162894,162896,162899],{"class":38,"line":80},[36,162893,32630],{"class":73},[36,162895,222],{"class":50},[36,162897,162898],{"class":110},"\"没有数据\"",[36,162900,1680],{"class":50},[19,162902,162903,162904,162906,162907,162910,162911,29716],{},"判断 ",[33,162905,97017],{}," 推荐使用 ",[33,162908,162909],{},"is None","，不要写成 ",[33,162912,162913],{},"== None",[14,162915,162917],{"id":162916},"_58-函数文档字符串","5.8 函数文档字符串",[19,162919,162920],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,162922,162924],{"className":31709,"code":162923,"language":31711,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[33,162925,162926,162936,162941],{"__ignoreMap":31},[36,162927,162928,162930,162933],{"class":38,"line":39},[36,162929,33278],{"class":42},[36,162931,162932],{"class":46}," calculate_bmi",[36,162934,162935],{"class":50},"(weight, height):\n",[36,162937,162938],{"class":38,"line":54},[36,162939,162940],{"class":110},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[36,162942,162943,162945,162948,162950,162953,162955],{"class":38,"line":61},[36,162944,239],{"class":42},[36,162946,162947],{"class":50}," weight ",[36,162949,2251],{"class":42},[36,162951,162952],{"class":50}," height ",[36,162954,12126],{"class":42},[36,162956,49054],{"class":73},[19,162958,162959],{},"查看说明：",[26,162961,162963],{"className":31709,"code":162962,"language":31711,"meta":31,"style":31},"help(calculate_bmi)\n",[33,162964,162965],{"__ignoreMap":31},[36,162966,162967,162970],{"class":38,"line":39},[36,162968,162969],{"class":73},"help",[36,162971,162972],{"class":50},"(calculate_bmi)\n",[19,162974,162975],{},"较完整的写法：",[26,162977,162979],{"className":31709,"code":162978,"language":31711,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"\n    计算BMI。\n\n    :param weight: 体重，单位kg\n    :param height: 身高，单位m\n    :return: BMI数值\n    \"\"\"\n    return weight \u002F height ** 2\n",[33,162980,162981,162989,162994,162999,163003,163008,163013,163018,163022],{"__ignoreMap":31},[36,162982,162983,162985,162987],{"class":38,"line":39},[36,162984,33278],{"class":42},[36,162986,162932],{"class":46},[36,162988,162935],{"class":50},[36,162990,162991],{"class":38,"line":54},[36,162992,162993],{"class":110},"    \"\"\"\n",[36,162995,162996],{"class":38,"line":61},[36,162997,162998],{"class":110},"    计算BMI。\n",[36,163000,163001],{"class":38,"line":80},[36,163002,58],{"emptyLinePlaceholder":57},[36,163004,163005],{"class":38,"line":96},[36,163006,163007],{"class":110},"    :param weight: 体重，单位kg\n",[36,163009,163010],{"class":38,"line":101},[36,163011,163012],{"class":110},"    :param height: 身高，单位m\n",[36,163014,163015],{"class":38,"line":128},[36,163016,163017],{"class":110},"    :return: BMI数值\n",[36,163019,163020],{"class":38,"line":149},[36,163021,162993],{"class":110},[36,163023,163024,163026,163028,163030,163032,163034],{"class":38,"line":154},[36,163025,239],{"class":42},[36,163027,162947],{"class":50},[36,163029,2251],{"class":42},[36,163031,162952],{"class":50},[36,163033,12126],{"class":42},[36,163035,49054],{"class":73},[14,163037,163039],{"id":163038},"_59-变量作用域","5.9 变量作用域",[1645,163041,163043],{"id":163042},"_591-局部变量","5.9.1 局部变量",[19,163045,163046],{},"在函数内部定义的变量，只能在函数内部使用。",[26,163048,163050],{"className":31709,"code":163049,"language":31711,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[33,163051,163052,163061,163069,163075,163079,163083,163088],{"__ignoreMap":31},[36,163053,163054,163056,163059],{"class":38,"line":39},[36,163055,33278],{"class":42},[36,163057,163058],{"class":46}," test",[36,163060,33284],{"class":50},[36,163062,163063,163065,163067],{"class":38,"line":54},[36,163064,46924],{"class":50},[36,163066,70],{"class":42},[36,163068,59759],{"class":73},[36,163070,163071,163073],{"class":38,"line":61},[36,163072,32630],{"class":73},[36,163074,1687],{"class":50},[36,163076,163077],{"class":38,"line":80},[36,163078,58],{"emptyLinePlaceholder":57},[36,163080,163081],{"class":38,"line":96},[36,163082,58],{"emptyLinePlaceholder":57},[36,163084,163085],{"class":38,"line":101},[36,163086,163087],{"class":50},"test()\n",[36,163089,163090,163092,163095],{"class":38,"line":128},[36,163091,31746],{"class":73},[36,163093,163094],{"class":50},"(num)  ",[36,163096,163097],{"class":124},"# 报错\n",[1645,163099,163101],{"id":163100},"_592-全局变量","5.9.2 全局变量",[19,163103,163104],{},"在函数外部定义的变量，可以在函数内部读取。",[26,163106,163108],{"className":31709,"code":163107,"language":31711,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[33,163109,163110,163118,163122,163126,163134,163140,163144,163148],{"__ignoreMap":31},[36,163111,163112,163114,163116],{"class":38,"line":39},[36,163113,147867],{"class":50},[36,163115,70],{"class":42},[36,163117,150684],{"class":110},[36,163119,163120],{"class":38,"line":54},[36,163121,58],{"emptyLinePlaceholder":57},[36,163123,163124],{"class":38,"line":61},[36,163125,58],{"emptyLinePlaceholder":57},[36,163127,163128,163130,163132],{"class":38,"line":80},[36,163129,33278],{"class":42},[36,163131,162327],{"class":46},[36,163133,33284],{"class":50},[36,163135,163136,163138],{"class":38,"line":96},[36,163137,32630],{"class":73},[36,163139,151991],{"class":50},[36,163141,163142],{"class":38,"line":101},[36,163143,58],{"emptyLinePlaceholder":57},[36,163145,163146],{"class":38,"line":128},[36,163147,58],{"emptyLinePlaceholder":57},[36,163149,163150],{"class":38,"line":149},[36,163151,162362],{"class":50},[19,163153,163154,163155,29716],{},"如果要在函数内部修改全局变量，需要 ",[33,163156,163157],{},"global",[26,163159,163161],{"className":31709,"code":163160,"language":31711,"meta":31,"style":31},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[33,163162,163163,163171,163175,163179,163188,163196,163204,163208,163212,163217],{"__ignoreMap":31},[36,163164,163165,163167,163169],{"class":38,"line":39},[36,163166,148022],{"class":50},[36,163168,70],{"class":42},[36,163170,48664],{"class":73},[36,163172,163173],{"class":38,"line":54},[36,163174,58],{"emptyLinePlaceholder":57},[36,163176,163177],{"class":38,"line":61},[36,163178,58],{"emptyLinePlaceholder":57},[36,163180,163181,163183,163186],{"class":38,"line":80},[36,163182,33278],{"class":42},[36,163184,163185],{"class":46}," add_count",[36,163187,33284],{"class":50},[36,163189,163190,163193],{"class":38,"line":96},[36,163191,163192],{"class":42},"    global",[36,163194,163195],{"class":50}," count\n",[36,163197,163198,163200,163202],{"class":38,"line":101},[36,163199,160764],{"class":50},[36,163201,10945],{"class":42},[36,163203,57030],{"class":73},[36,163205,163206],{"class":38,"line":128},[36,163207,58],{"emptyLinePlaceholder":57},[36,163209,163210],{"class":38,"line":149},[36,163211,58],{"emptyLinePlaceholder":57},[36,163213,163214],{"class":38,"line":154},[36,163215,163216],{"class":50},"add_count()\n",[36,163218,163219,163221],{"class":38,"line":167},[36,163220,31746],{"class":73},[36,163222,163223],{"class":50},"(count)\n",[19,163225,163226],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163228,163230],{"id":163229},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163232,163233],{},"一个函数中可以调用另一个函数。",[26,163235,163237],{"className":31709,"code":163236,"language":31711,"meta":31,"style":31},"def print_line():\n    print(\"-\" * 30)\n\n\ndef print_info(name, age):\n    print_line()\n    print(f\"姓名:{name}\")\n    print(f\"年龄:{age}\")\n    print_line()\n\n\nprint_info(\"小明\", 18)\n",[33,163238,163239,163248,163262,163266,163270,163279,163284,163304,163325,163329,163333,163337],{"__ignoreMap":31},[36,163240,163241,163243,163246],{"class":38,"line":39},[36,163242,33278],{"class":42},[36,163244,163245],{"class":46}," print_line",[36,163247,33284],{"class":50},[36,163249,163250,163252,163254,163256,163258,163260],{"class":38,"line":54},[36,163251,32630],{"class":73},[36,163253,222],{"class":50},[36,163255,33814],{"class":110},[36,163257,561],{"class":42},[36,163259,79996],{"class":73},[36,163261,1680],{"class":50},[36,163263,163264],{"class":38,"line":61},[36,163265,58],{"emptyLinePlaceholder":57},[36,163267,163268],{"class":38,"line":80},[36,163269,58],{"emptyLinePlaceholder":57},[36,163271,163272,163274,163277],{"class":38,"line":96},[36,163273,33278],{"class":42},[36,163275,163276],{"class":46}," print_info",[36,163278,150706],{"class":50},[36,163280,163281],{"class":38,"line":101},[36,163282,163283],{"class":50},"    print_line()\n",[36,163285,163286,163288,163290,163292,163294,163296,163298,163300,163302],{"class":38,"line":128},[36,163287,32630],{"class":73},[36,163289,222],{"class":50},[36,163291,1724],{"class":42},[36,163293,158013],{"class":110},[36,163295,2563],{"class":73},[36,163297,81141],{"class":50},[36,163299,2613],{"class":73},[36,163301,1919],{"class":110},[36,163303,1680],{"class":50},[36,163305,163306,163308,163310,163312,163315,163317,163319,163321,163323],{"class":38,"line":149},[36,163307,32630],{"class":73},[36,163309,222],{"class":50},[36,163311,1724],{"class":42},[36,163313,163314],{"class":110},"\"年龄:",[36,163316,2563],{"class":73},[36,163318,71552],{"class":50},[36,163320,2613],{"class":73},[36,163322,1919],{"class":110},[36,163324,1680],{"class":50},[36,163326,163327],{"class":38,"line":154},[36,163328,163283],{"class":50},[36,163330,163331],{"class":38,"line":167},[36,163332,58],{"emptyLinePlaceholder":57},[36,163334,163335],{"class":38,"line":172},[36,163336,58],{"emptyLinePlaceholder":57},[36,163338,163339,163342,163344,163346,163348],{"class":38,"line":192},[36,163340,163341],{"class":50},"print_info(",[36,163343,151219],{"class":110},[36,163345,477],{"class":50},[36,163347,2317],{"class":73},[36,163349,1680],{"class":50},[19,163351,163352],{},"这种方式可以把小功能组合成大功能。",[14,163354,163356],{"id":163355},"_511-参数检查","5.11 参数检查",[19,163358,163359],{},"函数内部可以检查参数是否合法。",[26,163361,163363],{"className":31709,"code":163362,"language":31711,"meta":31,"style":31},"def divide(a, b):\n    if b == 0:\n        return None\n    return a \u002F b\n\n\nresult = divide(10, 0)\n\nif result is None:\n    print(\"除数不能为0\")\nelse:\n    print(result)\n",[33,163364,163365,163374,163386,163392,163402,163406,163410,163427,163431,163443,163454,163460],{"__ignoreMap":31},[36,163366,163367,163369,163372],{"class":38,"line":39},[36,163368,33278],{"class":42},[36,163370,163371],{"class":46}," divide",[36,163373,152424],{"class":50},[36,163375,163376,163378,163380,163382,163384],{"class":38,"line":54},[36,163377,4592],{"class":42},[36,163379,140],{"class":50},[36,163381,4441],{"class":42},[36,163383,242],{"class":73},[36,163385,5230],{"class":50},[36,163387,163388,163390],{"class":38,"line":61},[36,163389,16081],{"class":42},[36,163391,153503],{"class":73},[36,163393,163394,163396,163398,163400],{"class":38,"line":80},[36,163395,239],{"class":42},[36,163397,67],{"class":50},[36,163399,2251],{"class":42},[36,163401,152435],{"class":50},[36,163403,163404],{"class":38,"line":96},[36,163405,58],{"emptyLinePlaceholder":57},[36,163407,163408],{"class":38,"line":101},[36,163409,58],{"emptyLinePlaceholder":57},[36,163411,163412,163414,163416,163419,163421,163423,163425],{"class":38,"line":128},[36,163413,162637],{"class":50},[36,163415,70],{"class":42},[36,163417,163418],{"class":50}," divide(",[36,163420,2113],{"class":73},[36,163422,477],{"class":50},[36,163424,1859],{"class":73},[36,163426,1680],{"class":50},[36,163428,163429],{"class":38,"line":149},[36,163430,58],{"emptyLinePlaceholder":57},[36,163432,163433,163435,163437,163439,163441],{"class":38,"line":154},[36,163434,3061],{"class":42},[36,163436,162883],{"class":50},[36,163438,40258],{"class":42},[36,163440,40264],{"class":73},[36,163442,5230],{"class":50},[36,163444,163445,163447,163449,163452],{"class":38,"line":167},[36,163446,32630],{"class":73},[36,163448,222],{"class":50},[36,163450,163451],{"class":110},"\"除数不能为0\"",[36,163453,1680],{"class":50},[36,163455,163456,163458],{"class":38,"line":172},[36,163457,3219],{"class":42},[36,163459,5230],{"class":50},[36,163461,163462,163464],{"class":38,"line":192},[36,163463,32630],{"class":73},[36,163465,77916],{"class":50},[14,163467,163469],{"id":163468},"_512-类型提示","5.12 类型提示",[19,163471,163472],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,163474,163476],{"className":31709,"code":163475,"language":31711,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[33,163477,163478,163501],{"__ignoreMap":31},[36,163479,163480,163482,163484,163487,163489,163492,163494,163497,163499],{"class":38,"line":39},[36,163481,33278],{"class":42},[36,163483,6698],{"class":46},[36,163485,163486],{"class":50},"(a: ",[36,163488,43],{"class":73},[36,163490,163491],{"class":50},", b: ",[36,163493,43],{"class":73},[36,163495,163496],{"class":50},") -> ",[36,163498,43],{"class":73},[36,163500,5230],{"class":50},[36,163502,163503,163505,163507,163509],{"class":38,"line":54},[36,163504,239],{"class":42},[36,163506,67],{"class":50},[36,163508,2148],{"class":42},[36,163510,152435],{"class":50},[19,163512,163513],{},"字符串参数：",[26,163515,163517],{"className":31709,"code":163516,"language":31711,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[33,163518,163519,163536],{"__ignoreMap":31},[36,163520,163521,163523,163525,163528,163530,163532,163534],{"class":38,"line":39},[36,163522,33278],{"class":42},[36,163524,162327],{"class":46},[36,163526,163527],{"class":50},"(name: ",[36,163529,2835],{"class":73},[36,163531,163496],{"class":50},[36,163533,97017],{"class":73},[36,163535,5230],{"class":50},[36,163537,163538,163540,163542,163544,163546,163548,163550,163552,163554],{"class":38,"line":54},[36,163539,32630],{"class":73},[36,163541,222],{"class":50},[36,163543,1724],{"class":42},[36,163545,158385],{"class":110},[36,163547,2563],{"class":73},[36,163549,81141],{"class":50},[36,163551,2613],{"class":73},[36,163553,1919],{"class":110},[36,163555,1680],{"class":50},[19,163557,163558],{},"列表参数：",[26,163560,163562],{"className":31709,"code":163561,"language":31711,"meta":31,"style":31},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[33,163563,163564,163583,163591,163603,163612],{"__ignoreMap":31},[36,163565,163566,163568,163571,163574,163576,163579,163581],{"class":38,"line":39},[36,163567,33278],{"class":42},[36,163569,163570],{"class":46}," get_total",[36,163572,163573],{"class":50},"(numbers: list[",[36,163575,43],{"class":73},[36,163577,163578],{"class":50},"]) -> ",[36,163580,43],{"class":73},[36,163582,5230],{"class":50},[36,163584,163585,163587,163589],{"class":38,"line":54},[36,163586,160638],{"class":50},[36,163588,70],{"class":42},[36,163590,48664],{"class":73},[36,163592,163593,163595,163598,163600],{"class":38,"line":61},[36,163594,4692],{"class":42},[36,163596,163597],{"class":50}," number ",[36,163599,27374],{"class":42},[36,163601,163602],{"class":50}," numbers:\n",[36,163604,163605,163607,163609],{"class":38,"line":80},[36,163606,161313],{"class":50},[36,163608,10945],{"class":42},[36,163610,163611],{"class":50}," number\n",[36,163613,163614,163616],{"class":38,"line":96},[36,163615,239],{"class":42},[36,163617,163618],{"class":50}," total\n",[19,163620,163621],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163623,163625],{"id":163624},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,163627,163629],{"className":31709,"code":163628,"language":31711,"meta":31,"style":31},"balance = 1000\n\n\ndef show_menu():\n    print(\"====== ATM ======\")\n    print(\"1. 查询余额\")\n    print(\"2. 存款\")\n    print(\"3. 取款\")\n    print(\"0. 退出\")\n\n\ndef show_balance():\n    print(f\"当前余额:{balance}元\")\n\n\ndef save_money():\n    global balance\n    money = float(input(\"请输入存款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    balance += money\n    print(\"存款成功\")\n    show_balance()\n\n\ndef withdraw_money():\n    global balance\n    money = float(input(\"请输入取款金额:\"))\n    if money \u003C= 0:\n        print(\"金额必须大于0\")\n        return\n    if money > balance:\n        print(\"余额不足\")\n        return\n    balance -= money\n    print(\"取款成功\")\n    show_balance()\n\n\nwhile True:\n    show_menu()\n    choice = input(\"请输入操作:\")\n\n    if choice == \"1\":\n        show_balance()\n    elif choice == \"2\":\n        save_money()\n    elif choice == \"3\":\n        withdraw_money()\n    elif choice == \"0\":\n        print(\"退出系统\")\n        break\n    else:\n        print(\"输入错误\")\n",[33,163630,163631,163641,163645,163649,163657,163668,163678,163688,163698,163708,163712,163716,163725,163747,163751,163755,163764,163770,163790,163802,163813,163817,163826,163837,163842,163846,163850,163859,163865,163884,163896,163906,163910,163921,163931,163935,163943,163954,163958,163962,163966,163974,163979,163993,163997,164009,164014,164026,164031,164043,164048,164060,164070,164074,164080],{"__ignoreMap":31},[36,163632,163633,163636,163638],{"class":38,"line":39},[36,163634,163635],{"class":50},"balance ",[36,163637,70],{"class":42},[36,163639,163640],{"class":73}," 1000\n",[36,163642,163643],{"class":38,"line":54},[36,163644,58],{"emptyLinePlaceholder":57},[36,163646,163647],{"class":38,"line":61},[36,163648,58],{"emptyLinePlaceholder":57},[36,163650,163651,163653,163655],{"class":38,"line":80},[36,163652,33278],{"class":42},[36,163654,153364],{"class":46},[36,163656,33284],{"class":50},[36,163658,163659,163661,163663,163666],{"class":38,"line":96},[36,163660,32630],{"class":73},[36,163662,222],{"class":50},[36,163664,163665],{"class":110},"\"====== ATM ======\"",[36,163667,1680],{"class":50},[36,163669,163670,163672,163674,163676],{"class":38,"line":101},[36,163671,32630],{"class":73},[36,163673,222],{"class":50},[36,163675,161979],{"class":110},[36,163677,1680],{"class":50},[36,163679,163680,163682,163684,163686],{"class":38,"line":128},[36,163681,32630],{"class":73},[36,163683,222],{"class":50},[36,163685,161990],{"class":110},[36,163687,1680],{"class":50},[36,163689,163690,163692,163694,163696],{"class":38,"line":149},[36,163691,32630],{"class":73},[36,163693,222],{"class":50},[36,163695,162001],{"class":110},[36,163697,1680],{"class":50},[36,163699,163700,163702,163704,163706],{"class":38,"line":154},[36,163701,32630],{"class":73},[36,163703,222],{"class":50},[36,163705,162012],{"class":110},[36,163707,1680],{"class":50},[36,163709,163710],{"class":38,"line":167},[36,163711,58],{"emptyLinePlaceholder":57},[36,163713,163714],{"class":38,"line":172},[36,163715,58],{"emptyLinePlaceholder":57},[36,163717,163718,163720,163723],{"class":38,"line":192},[36,163719,33278],{"class":42},[36,163721,163722],{"class":46}," show_balance",[36,163724,33284],{"class":50},[36,163726,163727,163729,163731,163733,163736,163738,163741,163743,163745],{"class":38,"line":211},[36,163728,32630],{"class":73},[36,163730,222],{"class":50},[36,163732,1724],{"class":42},[36,163734,163735],{"class":110},"\"当前余额:",[36,163737,2563],{"class":73},[36,163739,163740],{"class":50},"balance",[36,163742,2613],{"class":73},[36,163744,158343],{"class":110},[36,163746,1680],{"class":50},[36,163748,163749],{"class":38,"line":216},[36,163750,58],{"emptyLinePlaceholder":57},[36,163752,163753],{"class":38,"line":231},[36,163754,58],{"emptyLinePlaceholder":57},[36,163756,163757,163759,163762],{"class":38,"line":236},[36,163758,33278],{"class":42},[36,163760,163761],{"class":46}," save_money",[36,163763,33284],{"class":50},[36,163765,163766,163768],{"class":38,"line":247},[36,163767,163192],{"class":42},[36,163769,151430],{"class":50},[36,163771,163772,163775,163777,163779,163781,163783,163785,163788],{"class":38,"line":637},[36,163773,163774],{"class":50},"    money ",[36,163776,70],{"class":42},[36,163778,111128],{"class":73},[36,163780,222],{"class":50},[36,163782,55152],{"class":73},[36,163784,222],{"class":50},[36,163786,163787],{"class":110},"\"请输入存款金额:\"",[36,163789,31828],{"class":50},[36,163791,163792,163794,163796,163798,163800],{"class":38,"line":646},[36,163793,4592],{"class":42},[36,163795,151473],{"class":50},[36,163797,3117],{"class":42},[36,163799,242],{"class":73},[36,163801,5230],{"class":50},[36,163803,163804,163806,163808,163811],{"class":38,"line":655},[36,163805,33782],{"class":73},[36,163807,222],{"class":50},[36,163809,163810],{"class":110},"\"金额必须大于0\"",[36,163812,1680],{"class":50},[36,163814,163815],{"class":38,"line":660},[36,163816,153692],{"class":42},[36,163818,163819,163822,163824],{"class":38,"line":665},[36,163820,163821],{"class":50},"    balance ",[36,163823,10945],{"class":42},[36,163825,151506],{"class":50},[36,163827,163828,163830,163832,163835],{"class":38,"line":674},[36,163829,32630],{"class":73},[36,163831,222],{"class":50},[36,163833,163834],{"class":110},"\"存款成功\"",[36,163836,1680],{"class":50},[36,163838,163839],{"class":38,"line":679},[36,163840,163841],{"class":50},"    show_balance()\n",[36,163843,163844],{"class":38,"line":692},[36,163845,58],{"emptyLinePlaceholder":57},[36,163847,163848],{"class":38,"line":705},[36,163849,58],{"emptyLinePlaceholder":57},[36,163851,163852,163854,163857],{"class":38,"line":710},[36,163853,33278],{"class":42},[36,163855,163856],{"class":46}," withdraw_money",[36,163858,33284],{"class":50},[36,163860,163861,163863],{"class":38,"line":722},[36,163862,163192],{"class":42},[36,163864,151430],{"class":50},[36,163866,163867,163869,163871,163873,163875,163877,163879,163882],{"class":38,"line":750},[36,163868,163774],{"class":50},[36,163870,70],{"class":42},[36,163872,111128],{"class":73},[36,163874,222],{"class":50},[36,163876,55152],{"class":73},[36,163878,222],{"class":50},[36,163880,163881],{"class":110},"\"请输入取款金额:\"",[36,163883,31828],{"class":50},[36,163885,163886,163888,163890,163892,163894],{"class":38,"line":755},[36,163887,4592],{"class":42},[36,163889,151473],{"class":50},[36,163891,3117],{"class":42},[36,163893,242],{"class":73},[36,163895,5230],{"class":50},[36,163897,163898,163900,163902,163904],{"class":38,"line":777},[36,163899,33782],{"class":73},[36,163901,222],{"class":50},[36,163903,163810],{"class":110},[36,163905,1680],{"class":50},[36,163907,163908],{"class":38,"line":802},[36,163909,153692],{"class":42},[36,163911,163912,163914,163916,163918],{"class":38,"line":807},[36,163913,4592],{"class":42},[36,163915,151473],{"class":50},[36,163917,2627],{"class":42},[36,163919,163920],{"class":50}," balance:\n",[36,163922,163923,163925,163927,163929],{"class":38,"line":818},[36,163924,33782],{"class":73},[36,163926,222],{"class":50},[36,163928,151568],{"class":110},[36,163930,1680],{"class":50},[36,163932,163933],{"class":38,"line":843},[36,163934,153692],{"class":42},[36,163936,163937,163939,163941],{"class":38,"line":848},[36,163938,163821],{"class":50},[36,163940,151583],{"class":42},[36,163942,151506],{"class":50},[36,163944,163945,163947,163949,163952],{"class":38,"line":859},[36,163946,32630],{"class":73},[36,163948,222],{"class":50},[36,163950,163951],{"class":110},"\"取款成功\"",[36,163953,1680],{"class":50},[36,163955,163956],{"class":38,"line":864},[36,163957,163841],{"class":50},[36,163959,163960],{"class":38,"line":873},[36,163961,58],{"emptyLinePlaceholder":57},[36,163963,163964],{"class":38,"line":9454},[36,163965,58],{"emptyLinePlaceholder":57},[36,163967,163968,163970,163972],{"class":38,"line":9481},[36,163969,109994],{"class":42},[36,163971,96623],{"class":73},[36,163973,5230],{"class":50},[36,163975,163976],{"class":38,"line":9486},[36,163977,163978],{"class":50},"    show_menu()\n",[36,163980,163981,163983,163985,163987,163989,163991],{"class":38,"line":9492},[36,163982,162023],{"class":50},[36,163984,70],{"class":42},[36,163986,61936],{"class":73},[36,163988,222],{"class":50},[36,163990,154404],{"class":110},[36,163992,1680],{"class":50},[36,163994,163995],{"class":38,"line":9504},[36,163996,58],{"emptyLinePlaceholder":57},[36,163998,163999,164001,164003,164005,164007],{"class":38,"line":9516},[36,164000,4592],{"class":42},[36,164002,154417],{"class":50},[36,164004,4441],{"class":42},[36,164006,154422],{"class":110},[36,164008,5230],{"class":50},[36,164010,164011],{"class":38,"line":9528},[36,164012,164013],{"class":50},"        show_balance()\n",[36,164015,164016,164018,164020,164022,164024],{"class":38,"line":11184},[36,164017,40624],{"class":42},[36,164019,154417],{"class":50},[36,164021,4441],{"class":42},[36,164023,154441],{"class":110},[36,164025,5230],{"class":50},[36,164027,164028],{"class":38,"line":11209},[36,164029,164030],{"class":50},"        save_money()\n",[36,164032,164033,164035,164037,164039,164041],{"class":38,"line":11232},[36,164034,40624],{"class":42},[36,164036,154417],{"class":50},[36,164038,4441],{"class":42},[36,164040,154459],{"class":110},[36,164042,5230],{"class":50},[36,164044,164045],{"class":38,"line":11256},[36,164046,164047],{"class":50},"        withdraw_money()\n",[36,164049,164050,164052,164054,164056,164058],{"class":38,"line":11261},[36,164051,40624],{"class":42},[36,164053,154417],{"class":50},[36,164055,4441],{"class":42},[36,164057,154513],{"class":110},[36,164059,5230],{"class":50},[36,164061,164062,164064,164066,164068],{"class":38,"line":11266},[36,164063,33782],{"class":73},[36,164065,222],{"class":50},[36,164067,154524],{"class":110},[36,164069,1680],{"class":50},[36,164071,164072],{"class":38,"line":11271},[36,164073,32958],{"class":42},[36,164075,164076,164078],{"class":38,"line":11280},[36,164077,159353],{"class":42},[36,164079,5230],{"class":50},[36,164081,164082,164084,164086,164088],{"class":38,"line":11285},[36,164083,33782],{"class":73},[36,164085,222],{"class":50},[36,164087,154545],{"class":110},[36,164089,1680],{"class":50},[19,164091,164092],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164094,164096],{"id":164095},"_514-易错点","5.14 易错点",[256,164098,164099,164102,164105,164110,164115,164118],{},[259,164100,164101],{},"函数定义后必须调用才会执行。",[259,164103,164104],{},"函数名后面有括号才是调用。",[259,164106,164107,164109],{},[33,164108,18375],{}," 后面的代码不会执行。",[259,164111,164112,164113,29716],{},"没有返回值的函数默认返回 ",[33,164114,97017],{},[259,164116,164117],{},"局部变量不能在函数外部访问。",[259,164119,164120,164121,164123],{},"不要滥用 ",[33,164122,163157],{},"，更好的方式是让函数返回新值。",[19,164125,164126,164127,164129],{},"例如不用 ",[33,164128,163157],{}," 改写存款：",[26,164131,164133],{"className":31709,"code":164132,"language":31711,"meta":31,"style":31},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[33,164134,164135,164144,164155,164159,164163,164171,164184],{"__ignoreMap":31},[36,164136,164137,164139,164141],{"class":38,"line":39},[36,164138,33278],{"class":42},[36,164140,163761],{"class":46},[36,164142,164143],{"class":50},"(balance, money):\n",[36,164145,164146,164148,164151,164153],{"class":38,"line":54},[36,164147,239],{"class":42},[36,164149,164150],{"class":50}," balance ",[36,164152,2148],{"class":42},[36,164154,151506],{"class":50},[36,164156,164157],{"class":38,"line":61},[36,164158,58],{"emptyLinePlaceholder":57},[36,164160,164161],{"class":38,"line":80},[36,164162,58],{"emptyLinePlaceholder":57},[36,164164,164165,164167,164169],{"class":38,"line":96},[36,164166,163635],{"class":50},[36,164168,70],{"class":42},[36,164170,163640],{"class":73},[36,164172,164173,164175,164177,164180,164182],{"class":38,"line":101},[36,164174,163635],{"class":50},[36,164176,70],{"class":42},[36,164178,164179],{"class":50}," save_money(balance, ",[36,164181,3240],{"class":73},[36,164183,1680],{"class":50},[36,164185,164186,164188],{"class":38,"line":128},[36,164187,31746],{"class":73},[36,164189,164190],{"class":50},"(balance)\n",[14,164192,164194],{"id":164193},"_515-本章练习","5.15 本章练习",[256,164196,164197,164204,164210,164216,164222],{},[259,164198,164199,164200,164203],{},"定义函数 ",[33,164201,164202],{},"print_student(name, age)","，输出学生信息。",[259,164205,164199,164206,164209],{},[33,164207,164208],{},"get_max(a, b, c)","，返回三个数中的最大值。",[259,164211,164199,164212,164215],{},[33,164213,164214],{},"is_even(num)","，判断一个数是否为偶数。",[259,164217,164199,164218,164221],{},[33,164219,164220],{},"calculate_bmi(weight, height)","，返回 BMI。",[259,164223,164224],{},"把第 4 章的菜单程序拆分成多个函数。",[1592,164226,164227],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":31,"searchDepth":54,"depth":54,"links":164229},[164230,164231,164232,164233,164234,164235,164236,164237,164238,164242,164243,164244,164245,164246,164247],{"id":162250,"depth":54,"text":162251},{"id":162291,"depth":54,"text":162292},{"id":162381,"depth":54,"text":162382},{"id":162462,"depth":54,"text":162463},{"id":162595,"depth":54,"text":162596},{"id":162717,"depth":54,"text":162718},{"id":162839,"depth":54,"text":162840},{"id":162916,"depth":54,"text":162917},{"id":163038,"depth":54,"text":163039,"children":164239},[164240,164241],{"id":163042,"depth":61,"text":163043},{"id":163100,"depth":61,"text":163101},{"id":163229,"depth":54,"text":163230},{"id":163355,"depth":54,"text":163356},{"id":163468,"depth":54,"text":163469},{"id":163624,"depth":54,"text":163625},{"id":164095,"depth":54,"text":164096},{"id":164193,"depth":54,"text":164194},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162242,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164254,"title":164255,"body":164256,"description":24706,"extension":1603,"meta":167300,"navigation":57,"path":167301,"seo":167302,"stem":167303,"__hash__":167304},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164257,"toc":167281},[164258,164261,164265,164268,164271,164375,164378,164382,164385,164465,164468,164472,164475,164535,164538,164574,164577,164592,164596,164669,164672,164727,164730,164800,164803,164887,164897,164955,164959,165004,165007,165033,165036,165142,165146,165149,165191,165194,165258,165261,165265,165268,165329,165332,165362,165365,165403,165407,165410,165419,165422,165546,165549,165590,165594,165597,165608,165648,165651,165666,165671,165674,165741,165744,165834,165838,165841,165889,165892,165919,165921,165951,165954,165974,165977,166008,166011,166044,166048,166051,166075,166078,166102,166105,166129,166133,166136,166266,166269,166349,166352,166427,166431,166434,166484,166487,166529,166532,166556,166558,166582,166585,166640,166643,166709,166713,166716,166719,166757,166760,166813,166816,166862,166865,166898,166901,166905,167224,167228,167257,167261,167278],[10,164259,164255],{"id":164260},"_6-数据容器",[14,164262,164264],{"id":164263},"_61-什么是数据容器","6.1 什么是数据容器",[19,164266,164267],{},"数据容器用于一次保存多个数据。",[19,164269,164270],{},"常见容器：",[1806,164272,164273,164290],{},[1809,164274,164275],{},[1812,164276,164277,164279,164282,164285,164288],{},[1815,164278,27102],{},[1815,164280,164281],{},"是否有序",[1815,164283,164284],{},"是否可变",[1815,164286,164287],{},"是否允许重复",[1815,164289,28823],{},[1852,164291,164292,164310,164326,164341,164358],{},[1812,164293,164294,164297,164300,164303,164306],{},[1857,164295,164296],{},"list列表",[1857,164298,164299],{},"有序",[1857,164301,164302],{},"可变",[1857,164304,164305],{},"允许",[1857,164307,164308],{},[33,164309,156588],{},[1812,164311,164312,164315,164317,164320,164322],{},[1857,164313,164314],{},"tuple元组",[1857,164316,164299],{},[1857,164318,164319],{},"不可变",[1857,164321,164305],{},[1857,164323,164324],{},[33,164325,156601],{},[1812,164327,164328,164331,164333,164335,164337],{},[1857,164329,164330],{},"str字符串",[1857,164332,164299],{},[1857,164334,164319],{},[1857,164336,164305],{},[1857,164338,164339],{},[33,164340,157211],{},[1812,164342,164343,164346,164349,164351,164354],{},[1857,164344,164345],{},"set集合",[1857,164347,164348],{},"无序",[1857,164350,164302],{},[1857,164352,164353],{},"不允许",[1857,164355,164356],{},[33,164357,156626],{},[1812,164359,164360,164363,164365,164367,164370],{},[1857,164361,164362],{},"dict字典",[1857,164364,164299],{},[1857,164366,164302],{},[1857,164368,164369],{},"key不允许重复",[1857,164371,164372],{},[33,164373,164374],{},"{\"name\": \"小明\"}",[19,164376,164377],{},"Python 3.7 之后，字典保持插入顺序。",[14,164379,164381],{"id":164380},"_62-列表list","6.2 列表list",[19,164383,164384],{},"列表用于保存一组有顺序的数据。",[26,164386,164388],{"className":31709,"code":164387,"language":31711,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[33,164389,164390,164410,164435,164456],{"__ignoreMap":31},[36,164391,164392,164394,164396,164398,164400,164402,164404,164406,164408],{"class":38,"line":39},[36,164393,161711],{"class":50},[36,164395,70],{"class":42},[36,164397,53557],{"class":50},[36,164399,151219],{"class":110},[36,164401,477],{"class":50},[36,164403,152267],{"class":110},[36,164405,477],{"class":50},[36,164407,161062],{"class":110},[36,164409,34577],{"class":50},[36,164411,164412,164415,164417,164419,164421,164423,164425,164427,164429,164431,164433],{"class":38,"line":54},[36,164413,164414],{"class":50},"numbers ",[36,164416,70],{"class":42},[36,164418,53557],{"class":50},[36,164420,1885],{"class":73},[36,164422,477],{"class":50},[36,164424,1747],{"class":73},[36,164426,477],{"class":50},[36,164428,1741],{"class":73},[36,164430,477],{"class":50},[36,164432,1961],{"class":73},[36,164434,34577],{"class":50},[36,164436,164437,164440,164442,164444,164446,164448,164450,164452,164454],{"class":38,"line":61},[36,164438,164439],{"class":50},"mixed ",[36,164441,70],{"class":42},[36,164443,53557],{"class":50},[36,164445,151219],{"class":110},[36,164447,477],{"class":50},[36,164449,2317],{"class":73},[36,164451,477],{"class":50},[36,164453,32807],{"class":73},[36,164455,34577],{"class":50},[36,164457,164458,164461,164463],{"class":38,"line":80},[36,164459,164460],{"class":50},"empty ",[36,164462,70],{"class":42},[36,164464,53169],{"class":50},[19,164466,164467],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164469,164471],{"id":164470},"_63-列表索引","6.3 列表索引",[19,164473,164474],{},"正向索引从 0 开始：",[26,164476,164478],{"className":31709,"code":164477,"language":31711,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[33,164479,164480,164500,164504,164515,164525],{"__ignoreMap":31},[36,164481,164482,164484,164486,164488,164490,164492,164494,164496,164498],{"class":38,"line":39},[36,164483,161711],{"class":50},[36,164485,70],{"class":42},[36,164487,53557],{"class":50},[36,164489,151219],{"class":110},[36,164491,477],{"class":50},[36,164493,152267],{"class":110},[36,164495,477],{"class":50},[36,164497,161062],{"class":110},[36,164499,34577],{"class":50},[36,164501,164502],{"class":38,"line":54},[36,164503,58],{"emptyLinePlaceholder":57},[36,164505,164506,164508,164511,164513],{"class":38,"line":61},[36,164507,31746],{"class":73},[36,164509,164510],{"class":50},"(names[",[36,164512,1859],{"class":73},[36,164514,6146],{"class":50},[36,164516,164517,164519,164521,164523],{"class":38,"line":80},[36,164518,31746],{"class":73},[36,164520,164510],{"class":50},[36,164522,1885],{"class":73},[36,164524,6146],{"class":50},[36,164526,164527,164529,164531,164533],{"class":38,"line":96},[36,164528,31746],{"class":73},[36,164530,164510],{"class":50},[36,164532,1747],{"class":73},[36,164534,6146],{"class":50},[19,164536,164537],{},"反向索引从 -1 开始：",[26,164539,164541],{"className":31709,"code":164540,"language":31711,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[33,164542,164543,164559],{"__ignoreMap":31},[36,164544,164545,164547,164549,164551,164553,164556],{"class":38,"line":39},[36,164546,31746],{"class":73},[36,164548,164510],{"class":50},[36,164550,2199],{"class":42},[36,164552,1885],{"class":73},[36,164554,164555],{"class":50},"])  ",[36,164557,164558],{"class":124},"# 小刚\n",[36,164560,164561,164563,164565,164567,164569,164571],{"class":38,"line":54},[36,164562,31746],{"class":73},[36,164564,164510],{"class":50},[36,164566,2199],{"class":42},[36,164568,1747],{"class":73},[36,164570,164555],{"class":50},[36,164572,164573],{"class":124},"# 小红\n",[19,164575,164576],{},"索引越界会报错：",[26,164578,164580],{"className":31709,"code":164579,"language":31711,"meta":31,"style":31},"print(names[3])\n",[33,164581,164582],{"__ignoreMap":31},[36,164583,164584,164586,164588,164590],{"class":38,"line":39},[36,164585,31746],{"class":73},[36,164587,164510],{"class":50},[36,164589,1741],{"class":73},[36,164591,6146],{"class":50},[14,164593,164595],{"id":164594},"_64-列表常用方法","6.4 列表常用方法",[26,164597,164599],{"className":31709,"code":164598,"language":31711,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[33,164600,164601,164617,164621,164630,164644,164658,164662],{"__ignoreMap":31},[36,164602,164603,164605,164607,164609,164611,164613,164615],{"class":38,"line":39},[36,164604,161711],{"class":50},[36,164606,70],{"class":42},[36,164608,53557],{"class":50},[36,164610,151219],{"class":110},[36,164612,477],{"class":50},[36,164614,152267],{"class":110},[36,164616,34577],{"class":50},[36,164618,164619],{"class":38,"line":54},[36,164620,58],{"emptyLinePlaceholder":57},[36,164622,164623,164626,164628],{"class":38,"line":61},[36,164624,164625],{"class":50},"names.append(",[36,164627,161062],{"class":110},[36,164629,1680],{"class":50},[36,164631,164632,164635,164637,164639,164642],{"class":38,"line":80},[36,164633,164634],{"class":50},"names.insert(",[36,164636,1885],{"class":73},[36,164638,477],{"class":50},[36,164640,164641],{"class":110},"\"小李\"",[36,164643,1680],{"class":50},[36,164645,164646,164649,164651,164653,164656],{"class":38,"line":96},[36,164647,164648],{"class":50},"names.extend([",[36,164650,10154],{"class":110},[36,164652,477],{"class":50},[36,164654,164655],{"class":110},"\"小赵\"",[36,164657,6146],{"class":50},[36,164659,164660],{"class":38,"line":101},[36,164661,58],{"emptyLinePlaceholder":57},[36,164663,164664,164666],{"class":38,"line":128},[36,164665,31746],{"class":73},[36,164667,164668],{"class":50},"(names)\n",[19,164670,164671],{},"删除元素：",[26,164673,164675],{"className":31709,"code":164674,"language":31711,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[33,164676,164677,164686,164696,164710,164722],{"__ignoreMap":31},[36,164678,164679,164682,164684],{"class":38,"line":39},[36,164680,164681],{"class":50},"names.remove(",[36,164683,152267],{"class":110},[36,164685,1680],{"class":50},[36,164687,164688,164691,164693],{"class":38,"line":54},[36,164689,164690],{"class":50},"last ",[36,164692,70],{"class":42},[36,164694,164695],{"class":50}," names.pop()\n",[36,164697,164698,164701,164703,164706,164708],{"class":38,"line":61},[36,164699,164700],{"class":50},"first ",[36,164702,70],{"class":42},[36,164704,164705],{"class":50}," names.pop(",[36,164707,1859],{"class":73},[36,164709,1680],{"class":50},[36,164711,164712,164715,164718,164720],{"class":38,"line":80},[36,164713,164714],{"class":42},"del",[36,164716,164717],{"class":50}," names[",[36,164719,1859],{"class":73},[36,164721,34577],{"class":50},[36,164723,164724],{"class":38,"line":96},[36,164725,164726],{"class":50},"names.clear()\n",[19,164728,164729],{},"查询和统计：",[26,164731,164733],{"className":31709,"code":164732,"language":31711,"meta":31,"style":31},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[33,164734,164735,164763,164767,164778,164789],{"__ignoreMap":31},[36,164736,164737,164739,164741,164743,164745,164747,164749,164751,164753,164755,164757,164759,164761],{"class":38,"line":39},[36,164738,164414],{"class":50},[36,164740,70],{"class":42},[36,164742,53557],{"class":50},[36,164744,1885],{"class":73},[36,164746,477],{"class":50},[36,164748,1747],{"class":73},[36,164750,477],{"class":50},[36,164752,1741],{"class":73},[36,164754,477],{"class":50},[36,164756,1747],{"class":73},[36,164758,477],{"class":50},[36,164760,1961],{"class":73},[36,164762,34577],{"class":50},[36,164764,164765],{"class":38,"line":54},[36,164766,58],{"emptyLinePlaceholder":57},[36,164768,164769,164771,164774,164776],{"class":38,"line":61},[36,164770,31746],{"class":73},[36,164772,164773],{"class":50},"(numbers.index(",[36,164775,1741],{"class":73},[36,164777,31828],{"class":50},[36,164779,164780,164782,164785,164787],{"class":38,"line":80},[36,164781,31746],{"class":73},[36,164783,164784],{"class":50},"(numbers.count(",[36,164786,1747],{"class":73},[36,164788,31828],{"class":50},[36,164790,164791,164793,164795,164797],{"class":38,"line":96},[36,164792,31746],{"class":73},[36,164794,222],{"class":50},[36,164796,8832],{"class":73},[36,164798,164799],{"class":50},"(numbers))\n",[19,164801,164802],{},"排序：",[26,164804,164806],{"className":31709,"code":164805,"language":31711,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[33,164807,164808,164832,164836,164841,164848,164852,164866,164872,164876,164881],{"__ignoreMap":31},[36,164809,164810,164812,164814,164816,164818,164820,164822,164824,164826,164828,164830],{"class":38,"line":39},[36,164811,164414],{"class":50},[36,164813,70],{"class":42},[36,164815,53557],{"class":50},[36,164817,1741],{"class":73},[36,164819,477],{"class":50},[36,164821,1885],{"class":73},[36,164823,477],{"class":50},[36,164825,1987],{"class":73},[36,164827,477],{"class":50},[36,164829,1747],{"class":73},[36,164831,34577],{"class":50},[36,164833,164834],{"class":38,"line":54},[36,164835,58],{"emptyLinePlaceholder":57},[36,164837,164838],{"class":38,"line":61},[36,164839,164840],{"class":50},"numbers.sort()\n",[36,164842,164843,164845],{"class":38,"line":80},[36,164844,31746],{"class":73},[36,164846,164847],{"class":50},"(numbers)\n",[36,164849,164850],{"class":38,"line":96},[36,164851,58],{"emptyLinePlaceholder":57},[36,164853,164854,164857,164860,164862,164864],{"class":38,"line":101},[36,164855,164856],{"class":50},"numbers.sort(",[36,164858,164859],{"class":473},"reverse",[36,164861,70],{"class":42},[36,164863,32807],{"class":73},[36,164865,1680],{"class":50},[36,164867,164868,164870],{"class":38,"line":128},[36,164869,31746],{"class":73},[36,164871,164847],{"class":50},[36,164873,164874],{"class":38,"line":149},[36,164875,58],{"emptyLinePlaceholder":57},[36,164877,164878],{"class":38,"line":154},[36,164879,164880],{"class":50},"numbers.reverse()\n",[36,164882,164883,164885],{"class":38,"line":167},[36,164884,31746],{"class":73},[36,164886,164847],{"class":50},[19,164888,164889,164892,164893,164896],{},[33,164890,164891],{},"sort()"," 会修改原列表，",[33,164894,164895],{},"sorted()"," 返回新列表。",[26,164898,164900],{"className":31709,"code":164899,"language":31711,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[33,164901,164902,164926,164938,164942,164948],{"__ignoreMap":31},[36,164903,164904,164906,164908,164910,164912,164914,164916,164918,164920,164922,164924],{"class":38,"line":39},[36,164905,164414],{"class":50},[36,164907,70],{"class":42},[36,164909,53557],{"class":50},[36,164911,1741],{"class":73},[36,164913,477],{"class":50},[36,164915,1885],{"class":73},[36,164917,477],{"class":50},[36,164919,1987],{"class":73},[36,164921,477],{"class":50},[36,164923,1747],{"class":73},[36,164925,34577],{"class":50},[36,164927,164928,164931,164933,164936],{"class":38,"line":54},[36,164929,164930],{"class":50},"new_numbers ",[36,164932,70],{"class":42},[36,164934,164935],{"class":73}," sorted",[36,164937,164847],{"class":50},[36,164939,164940],{"class":38,"line":61},[36,164941,58],{"emptyLinePlaceholder":57},[36,164943,164944,164946],{"class":38,"line":80},[36,164945,31746],{"class":73},[36,164947,164847],{"class":50},[36,164949,164950,164952],{"class":38,"line":96},[36,164951,31746],{"class":73},[36,164953,164954],{"class":50},"(new_numbers)\n",[14,164956,164958],{"id":164957},"_65-列表遍历","6.5 列表遍历",[26,164960,164962],{"className":31709,"code":164961,"language":31711,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[33,164963,164964,164984,164988,164998],{"__ignoreMap":31},[36,164965,164966,164968,164970,164972,164974,164976,164978,164980,164982],{"class":38,"line":39},[36,164967,161711],{"class":50},[36,164969,70],{"class":42},[36,164971,53557],{"class":50},[36,164973,151219],{"class":110},[36,164975,477],{"class":50},[36,164977,152267],{"class":110},[36,164979,477],{"class":50},[36,164981,161062],{"class":110},[36,164983,34577],{"class":50},[36,164985,164986],{"class":38,"line":54},[36,164987,58],{"emptyLinePlaceholder":57},[36,164989,164990,164992,164994,164996],{"class":38,"line":61},[36,164991,4516],{"class":42},[36,164993,161747],{"class":50},[36,164995,27374],{"class":42},[36,164997,161752],{"class":50},[36,164999,165000,165002],{"class":38,"line":80},[36,165001,32630],{"class":73},[36,165003,151991],{"class":50},[19,165005,165006],{},"需要索引时：",[26,165008,165010],{"className":31709,"code":165009,"language":31711,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[33,165011,165012,165026],{"__ignoreMap":31},[36,165013,165014,165016,165019,165021,165023],{"class":38,"line":39},[36,165015,4516],{"class":42},[36,165017,165018],{"class":50}," index, name ",[36,165020,27374],{"class":42},[36,165022,32937],{"class":73},[36,165024,165025],{"class":50},"(names):\n",[36,165027,165028,165030],{"class":38,"line":54},[36,165029,32630],{"class":73},[36,165031,165032],{"class":50},"(index, name)\n",[19,165034,165035],{},"统计总分：",[26,165037,165039],{"className":31709,"code":165038,"language":31711,"meta":31,"style":31},"scores = [90, 85, 66, 78]\ntotal = 0\n\nfor score in scores:\n    total += score\n\navg = total \u002F len(scores)\nprint(f\"平均分:{avg:.2f}\")\n",[33,165040,165041,165066,165074,165078,165089,165097,165101,165118],{"__ignoreMap":31},[36,165042,165043,165046,165048,165050,165052,165054,165056,165058,165060,165062,165064],{"class":38,"line":39},[36,165044,165045],{"class":50},"scores ",[36,165047,70],{"class":42},[36,165049,53557],{"class":50},[36,165051,2529],{"class":73},[36,165053,477],{"class":50},[36,165055,2403],{"class":73},[36,165057,477],{"class":50},[36,165059,1922],{"class":73},[36,165061,477],{"class":50},[36,165063,2228],{"class":73},[36,165065,34577],{"class":50},[36,165067,165068,165070,165072],{"class":38,"line":54},[36,165069,158591],{"class":50},[36,165071,70],{"class":42},[36,165073,48664],{"class":73},[36,165075,165076],{"class":38,"line":61},[36,165077,58],{"emptyLinePlaceholder":57},[36,165079,165080,165082,165084,165086],{"class":38,"line":80},[36,165081,4516],{"class":42},[36,165083,159114],{"class":50},[36,165085,27374],{"class":42},[36,165087,165088],{"class":50}," scores:\n",[36,165090,165091,165093,165095],{"class":38,"line":96},[36,165092,160638],{"class":50},[36,165094,10945],{"class":42},[36,165096,3108],{"class":50},[36,165098,165099],{"class":38,"line":101},[36,165100,58],{"emptyLinePlaceholder":57},[36,165102,165103,165106,165108,165111,165113,165115],{"class":38,"line":128},[36,165104,165105],{"class":50},"avg ",[36,165107,70],{"class":42},[36,165109,165110],{"class":50}," total ",[36,165112,2251],{"class":42},[36,165114,8805],{"class":73},[36,165116,165117],{"class":50},"(scores)\n",[36,165119,165120,165122,165124,165126,165129,165131,165134,165136,165138,165140],{"class":38,"line":149},[36,165121,31746],{"class":73},[36,165123,222],{"class":50},[36,165125,1724],{"class":42},[36,165127,165128],{"class":110},"\"平均分:",[36,165130,2563],{"class":73},[36,165132,165133],{"class":50},"avg",[36,165135,158490],{"class":42},[36,165137,2613],{"class":73},[36,165139,1919],{"class":110},[36,165141,1680],{"class":50},[14,165143,165145],{"id":165144},"_66-元组tuple","6.6 元组tuple",[19,165147,165148],{},"元组和列表类似，但不可修改。",[26,165150,165152],{"className":31709,"code":165151,"language":31711,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[33,165153,165154,165171],{"__ignoreMap":31},[36,165155,165156,165159,165161,165163,165165,165167,165169],{"class":38,"line":39},[36,165157,165158],{"class":50},"point ",[36,165160,70],{"class":42},[36,165162,3180],{"class":50},[36,165164,2113],{"class":73},[36,165166,477],{"class":50},[36,165168,2367],{"class":73},[36,165170,1680],{"class":50},[36,165172,165173,165175,165177,165179,165181,165183,165185,165187,165189],{"class":38,"line":54},[36,165174,117645],{"class":50},[36,165176,70],{"class":42},[36,165178,3180],{"class":50},[36,165180,151219],{"class":110},[36,165182,477],{"class":50},[36,165184,2317],{"class":73},[36,165186,477],{"class":50},[36,165188,70600],{"class":110},[36,165190,1680],{"class":50},[19,165192,165193],{},"单元素元组必须加逗号：",[26,165195,165197],{"className":31709,"code":165196,"language":31711,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[33,165198,165199,165213,165226,165230,165244],{"__ignoreMap":31},[36,165200,165201,165204,165206,165208,165210],{"class":38,"line":39},[36,165202,165203],{"class":50},"t1 ",[36,165205,70],{"class":42},[36,165207,3180],{"class":50},[36,165209,2113],{"class":73},[36,165211,165212],{"class":50},",)\n",[36,165214,165215,165218,165220,165222,165224],{"class":38,"line":54},[36,165216,165217],{"class":50},"t2 ",[36,165219,70],{"class":42},[36,165221,3180],{"class":50},[36,165223,2113],{"class":73},[36,165225,1680],{"class":50},[36,165227,165228],{"class":38,"line":61},[36,165229,58],{"emptyLinePlaceholder":57},[36,165231,165232,165234,165236,165238,165241],{"class":38,"line":80},[36,165233,31746],{"class":73},[36,165235,222],{"class":50},[36,165237,104438],{"class":73},[36,165239,165240],{"class":50},"(t1))  ",[36,165242,165243],{"class":124},"# tuple\n",[36,165245,165246,165248,165250,165252,165255],{"class":38,"line":96},[36,165247,31746],{"class":73},[36,165249,222],{"class":50},[36,165251,104438],{"class":73},[36,165253,165254],{"class":50},"(t2))  ",[36,165256,165257],{"class":124},"# int\n",[19,165259,165260],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165262,165264],{"id":165263},"_67-字符串str","6.7 字符串str",[19,165266,165267],{},"字符串也是序列，可以索引、切片和遍历。",[26,165269,165271],{"className":31709,"code":165270,"language":31711,"meta":31,"style":31},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[33,165272,165273,165281,165285,165296,165308,165312,165323],{"__ignoreMap":31},[36,165274,165275,165277,165279],{"class":38,"line":39},[36,165276,157775],{"class":50},[36,165278,70],{"class":42},[36,165280,161012],{"class":110},[36,165282,165283],{"class":38,"line":54},[36,165284,58],{"emptyLinePlaceholder":57},[36,165286,165287,165289,165292,165294],{"class":38,"line":61},[36,165288,31746],{"class":73},[36,165290,165291],{"class":50},"(text[",[36,165293,1859],{"class":73},[36,165295,6146],{"class":50},[36,165297,165298,165300,165302,165304,165306],{"class":38,"line":80},[36,165299,31746],{"class":73},[36,165301,165291],{"class":50},[36,165303,2199],{"class":42},[36,165305,1885],{"class":73},[36,165307,6146],{"class":50},[36,165309,165310],{"class":38,"line":96},[36,165311,58],{"emptyLinePlaceholder":57},[36,165313,165314,165316,165318,165320],{"class":38,"line":101},[36,165315,4516],{"class":42},[36,165317,161023],{"class":50},[36,165319,27374],{"class":42},[36,165321,165322],{"class":50}," text:\n",[36,165324,165325,165327],{"class":38,"line":128},[36,165326,32630],{"class":73},[36,165328,161034],{"class":50},[19,165330,165331],{},"字符串不可变：",[26,165333,165335],{"className":31709,"code":165334,"language":31711,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[33,165336,165337,165345],{"__ignoreMap":31},[36,165338,165339,165341,165343],{"class":38,"line":39},[36,165340,157775],{"class":50},[36,165342,70],{"class":42},[36,165344,161012],{"class":110},[36,165346,165347,165350,165352,165354,165356,165359],{"class":38,"line":54},[36,165348,165349],{"class":50},"text[",[36,165351,1859],{"class":73},[36,165353,5932],{"class":50},[36,165355,70],{"class":42},[36,165357,165358],{"class":110}," \"P\"",[36,165360,165361],{"class":124},"  # 报错\n",[19,165363,165364],{},"如果要得到新字符串：",[26,165366,165368],{"className":31709,"code":165367,"language":31711,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[33,165369,165370,165378,165396],{"__ignoreMap":31},[36,165371,165372,165374,165376],{"class":38,"line":39},[36,165373,157775],{"class":50},[36,165375,70],{"class":42},[36,165377,161012],{"class":110},[36,165379,165380,165382,165384,165386,165388,165391,165393],{"class":38,"line":54},[36,165381,157775],{"class":50},[36,165383,70],{"class":42},[36,165385,165358],{"class":110},[36,165387,46897],{"class":42},[36,165389,165390],{"class":50}," text[",[36,165392,1885],{"class":73},[36,165394,165395],{"class":50},":]\n",[36,165397,165398,165400],{"class":38,"line":61},[36,165399,31746],{"class":73},[36,165401,165402],{"class":50},"(text)\n",[14,165404,165406],{"id":165405},"_68-切片","6.8 切片",[19,165408,165409],{},"切片用于从序列中取一部分。",[26,165411,165413],{"className":31709,"code":165412,"language":31711,"meta":31,"style":31},"序列[开始:结束:步长]\n",[33,165414,165415],{"__ignoreMap":31},[36,165416,165417],{"class":38,"line":39},[36,165418,165412],{"class":50},[19,165420,165421],{},"结束位置不包含。",[26,165423,165425],{"className":31709,"code":165424,"language":31711,"meta":31,"style":31},"nums = [0, 1, 2, 3, 4, 5, 6]\n\nprint(nums[1:4])    # [1, 2, 3]\nprint(nums[:3])     # [0, 1, 2]\nprint(nums[3:])     # [3, 4, 5, 6]\nprint(nums[::2])    # [0, 2, 4, 6]\nprint(nums[::-1])   # 反转\n",[33,165426,165427,165464,165468,165487,165502,165516,165530],{"__ignoreMap":31},[36,165428,165429,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456,165458,165460,165462],{"class":38,"line":39},[36,165430,165431],{"class":50},"nums ",[36,165433,70],{"class":42},[36,165435,53557],{"class":50},[36,165437,1859],{"class":73},[36,165439,477],{"class":50},[36,165441,1885],{"class":73},[36,165443,477],{"class":50},[36,165445,1747],{"class":73},[36,165447,477],{"class":50},[36,165449,1741],{"class":73},[36,165451,477],{"class":50},[36,165453,1961],{"class":73},[36,165455,477],{"class":50},[36,165457,1987],{"class":73},[36,165459,477],{"class":50},[36,165461,2012],{"class":73},[36,165463,34577],{"class":50},[36,165465,165466],{"class":38,"line":54},[36,165467,58],{"emptyLinePlaceholder":57},[36,165469,165470,165472,165475,165477,165479,165481,165484],{"class":38,"line":61},[36,165471,31746],{"class":73},[36,165473,165474],{"class":50},"(nums[",[36,165476,1885],{"class":73},[36,165478,2526],{"class":50},[36,165480,1961],{"class":73},[36,165482,165483],{"class":50},"])    ",[36,165485,165486],{"class":124},"# [1, 2, 3]\n",[36,165488,165489,165491,165494,165496,165499],{"class":38,"line":80},[36,165490,31746],{"class":73},[36,165492,165493],{"class":50},"(nums[:",[36,165495,1741],{"class":73},[36,165497,165498],{"class":50},"])     ",[36,165500,165501],{"class":124},"# [0, 1, 2]\n",[36,165503,165504,165506,165508,165510,165513],{"class":38,"line":96},[36,165505,31746],{"class":73},[36,165507,165474],{"class":50},[36,165509,1741],{"class":73},[36,165511,165512],{"class":50},":])     ",[36,165514,165515],{"class":124},"# [3, 4, 5, 6]\n",[36,165517,165518,165520,165523,165525,165527],{"class":38,"line":101},[36,165519,31746],{"class":73},[36,165521,165522],{"class":50},"(nums[::",[36,165524,1747],{"class":73},[36,165526,165483],{"class":50},[36,165528,165529],{"class":124},"# [0, 2, 4, 6]\n",[36,165531,165532,165534,165536,165538,165540,165543],{"class":38,"line":128},[36,165533,31746],{"class":73},[36,165535,165522],{"class":50},[36,165537,2199],{"class":42},[36,165539,1885],{"class":73},[36,165541,165542],{"class":50},"])   ",[36,165544,165545],{"class":124},"# 反转\n",[19,165547,165548],{},"字符串切片：",[26,165550,165552],{"className":31709,"code":165551,"language":31711,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[33,165553,165554,165563,165577],{"__ignoreMap":31},[36,165555,165556,165558,165560],{"class":38,"line":39},[36,165557,157775],{"class":50},[36,165559,70],{"class":42},[36,165561,165562],{"class":110}," \"abcdef\"\n",[36,165564,165565,165567,165569,165571,165573,165575],{"class":38,"line":54},[36,165566,31746],{"class":73},[36,165568,165291],{"class":50},[36,165570,1885],{"class":73},[36,165572,2526],{"class":50},[36,165574,1961],{"class":73},[36,165576,6146],{"class":50},[36,165578,165579,165581,165584,165586,165588],{"class":38,"line":61},[36,165580,31746],{"class":73},[36,165582,165583],{"class":50},"(text[::",[36,165585,2199],{"class":42},[36,165587,1885],{"class":73},[36,165589,6146],{"class":50},[14,165591,165593],{"id":165592},"_69-集合set","6.9 集合set",[19,165595,165596],{},"集合特点：",[256,165598,165599,165602,165605],{},[259,165600,165601],{},"无序。",[259,165603,165604],{},"元素不重复。",[259,165606,165607],{},"可以做交集、并集、差集。",[26,165609,165611],{"className":31709,"code":165610,"language":31711,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[33,165612,165613,165641],{"__ignoreMap":31},[36,165614,165615,165617,165619,165621,165623,165625,165627,165629,165631,165633,165635,165637,165639],{"class":38,"line":39},[36,165616,165431],{"class":50},[36,165618,70],{"class":42},[36,165620,5937],{"class":50},[36,165622,1885],{"class":73},[36,165624,477],{"class":50},[36,165626,1747],{"class":73},[36,165628,477],{"class":50},[36,165630,1741],{"class":73},[36,165632,477],{"class":50},[36,165634,1741],{"class":73},[36,165636,477],{"class":50},[36,165638,1961],{"class":73},[36,165640,250],{"class":50},[36,165642,165643,165645],{"class":38,"line":54},[36,165644,31746],{"class":73},[36,165646,165647],{"class":50},"(nums)\n",[19,165649,165650],{},"创建空集合：",[26,165652,165654],{"className":31709,"code":165653,"language":31711,"meta":31,"style":31},"s = set()\n",[33,165655,165656],{"__ignoreMap":31},[36,165657,165658,165660,165662,165664],{"class":38,"line":39},[36,165659,12045],{"class":50},[36,165661,70],{"class":42},[36,165663,121053],{"class":73},[36,165665,3484],{"class":50},[19,165667,885,165668,165670],{},[33,165669,33790],{}," 是空字典，不是空集合。",[19,165672,165673],{},"集合常用操作：",[26,165675,165677],{"className":31709,"code":165676,"language":31711,"meta":31,"style":31},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[33,165678,165679,165699,165703,165712,165721,165730],{"__ignoreMap":31},[36,165680,165681,165683,165685,165687,165689,165691,165693,165695,165697],{"class":38,"line":39},[36,165682,12045],{"class":50},[36,165684,70],{"class":42},[36,165686,5937],{"class":50},[36,165688,1885],{"class":73},[36,165690,477],{"class":50},[36,165692,1747],{"class":73},[36,165694,477],{"class":50},[36,165696,1741],{"class":73},[36,165698,250],{"class":50},[36,165700,165701],{"class":38,"line":54},[36,165702,58],{"emptyLinePlaceholder":57},[36,165704,165705,165708,165710],{"class":38,"line":61},[36,165706,165707],{"class":50},"s.add(",[36,165709,1961],{"class":73},[36,165711,1680],{"class":50},[36,165713,165714,165717,165719],{"class":38,"line":80},[36,165715,165716],{"class":50},"s.remove(",[36,165718,1747],{"class":73},[36,165720,1680],{"class":50},[36,165722,165723,165726,165728],{"class":38,"line":96},[36,165724,165725],{"class":50},"s.discard(",[36,165727,2113],{"class":73},[36,165729,1680],{"class":50},[36,165731,165732,165734,165736,165738],{"class":38,"line":101},[36,165733,31746],{"class":73},[36,165735,222],{"class":50},[36,165737,8832],{"class":73},[36,165739,165740],{"class":50},"(s))\n",[19,165742,165743],{},"交并差：",[26,165745,165747],{"className":31709,"code":165746,"language":31711,"meta":31,"style":31},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[33,165748,165749,165769,165789,165793,165808,165821],{"__ignoreMap":31},[36,165750,165751,165753,165755,165757,165759,165761,165763,165765,165767],{"class":38,"line":39},[36,165752,572],{"class":50},[36,165754,70],{"class":42},[36,165756,5937],{"class":50},[36,165758,1885],{"class":73},[36,165760,477],{"class":50},[36,165762,1747],{"class":73},[36,165764,477],{"class":50},[36,165766,1741],{"class":73},[36,165768,250],{"class":50},[36,165770,165771,165773,165775,165777,165779,165781,165783,165785,165787],{"class":38,"line":54},[36,165772,88],{"class":50},[36,165774,70],{"class":42},[36,165776,5937],{"class":50},[36,165778,1741],{"class":73},[36,165780,477],{"class":50},[36,165782,1961],{"class":73},[36,165784,477],{"class":50},[36,165786,1987],{"class":73},[36,165788,250],{"class":50},[36,165790,165791],{"class":38,"line":61},[36,165792,58],{"emptyLinePlaceholder":57},[36,165794,165795,165797,165800,165802,165805],{"class":38,"line":80},[36,165796,31746],{"class":73},[36,165798,165799],{"class":50},"(a ",[36,165801,763],{"class":42},[36,165803,165804],{"class":50}," b)  ",[36,165806,165807],{"class":124},"# 交集\n",[36,165809,165810,165812,165814,165816,165818],{"class":38,"line":96},[36,165811,31746],{"class":73},[36,165813,165799],{"class":50},[36,165815,2588],{"class":42},[36,165817,165804],{"class":50},[36,165819,165820],{"class":124},"# 并集\n",[36,165822,165823,165825,165827,165829,165831],{"class":38,"line":101},[36,165824,31746],{"class":73},[36,165826,165799],{"class":50},[36,165828,2199],{"class":42},[36,165830,165804],{"class":50},[36,165832,165833],{"class":124},"# 差集\n",[14,165835,165837],{"id":165836},"_610-字典dict","6.10 字典dict",[19,165839,165840],{},"字典通过 key-value 保存数据。",[26,165842,165844],{"className":31709,"code":165843,"language":31711,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[33,165845,165846,165854,165864,165875,165885],{"__ignoreMap":31},[36,165847,165848,165850,165852],{"class":38,"line":39},[36,165849,150812],{"class":50},[36,165851,70],{"class":42},[36,165853,16901],{"class":50},[36,165855,165856,165858,165860,165862],{"class":38,"line":54},[36,165857,148351],{"class":110},[36,165859,52768],{"class":50},[36,165861,151219],{"class":110},[36,165863,32797],{"class":50},[36,165865,165866,165869,165871,165873],{"class":38,"line":61},[36,165867,165868],{"class":110},"    \"age\"",[36,165870,52768],{"class":50},[36,165872,2317],{"class":73},[36,165874,32797],{"class":50},[36,165876,165877,165880,165882],{"class":38,"line":80},[36,165878,165879],{"class":110},"    \"score\"",[36,165881,52768],{"class":50},[36,165883,165884],{"class":73},"95\n",[36,165886,165887],{"class":38,"line":96},[36,165888,250],{"class":50},[19,165890,165891],{},"获取值：",[26,165893,165895],{"className":31709,"code":165894,"language":31711,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[33,165896,165897,165908],{"__ignoreMap":31},[36,165898,165899,165901,165904,165906],{"class":38,"line":39},[36,165900,31746],{"class":73},[36,165902,165903],{"class":50},"(student[",[36,165905,64010],{"class":110},[36,165907,6146],{"class":50},[36,165909,165910,165912,165915,165917],{"class":38,"line":54},[36,165911,31746],{"class":73},[36,165913,165914],{"class":50},"(student.get(",[36,165916,64010],{"class":110},[36,165918,31828],{"class":50},[19,165920,16717],{},[26,165922,165924],{"className":31709,"code":165923,"language":31711,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[33,165925,165926,165939],{"__ignoreMap":31},[36,165927,165928,165930,165933,165936],{"class":38,"line":39},[36,165929,154190],{"class":50},[36,165931,165932],{"class":110},"\"address\"",[36,165934,165935],{"class":50},"]     ",[36,165937,165938],{"class":124},"# key不存在会报错\n",[36,165940,165941,165944,165946,165948],{"class":38,"line":54},[36,165942,165943],{"class":50},"student.get(",[36,165945,165932],{"class":110},[36,165947,15043],{"class":50},[36,165949,165950],{"class":124},"# key不存在返回None\n",[19,165952,165953],{},"设置默认值：",[26,165955,165957],{"className":31709,"code":165956,"language":31711,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[33,165958,165959],{"__ignoreMap":31},[36,165960,165961,165963,165965,165967,165969,165972],{"class":38,"line":39},[36,165962,31746],{"class":73},[36,165964,165914],{"class":50},[36,165966,165932],{"class":110},[36,165968,477],{"class":50},[36,165970,165971],{"class":110},"\"未知\"",[36,165973,31828],{"class":50},[19,165975,165976],{},"新增和修改：",[26,165978,165980],{"className":31709,"code":165979,"language":31711,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[33,165981,165982,165995],{"__ignoreMap":31},[36,165983,165984,165986,165988,165990,165992],{"class":38,"line":39},[36,165985,154190],{"class":50},[36,165987,70455],{"class":110},[36,165989,5932],{"class":50},[36,165991,70],{"class":42},[36,165993,165994],{"class":73}," 19\n",[36,165996,165997,165999,166001,166003,166005],{"class":38,"line":54},[36,165998,154190],{"class":50},[36,166000,165932],{"class":110},[36,166002,5932],{"class":50},[36,166004,70],{"class":42},[36,166006,166007],{"class":110}," \"北京\"\n",[19,166009,166010],{},"删除：",[26,166012,166014],{"className":31709,"code":166013,"language":31711,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[33,166015,166016,166029,166039],{"__ignoreMap":31},[36,166017,166018,166020,166022,166025,166027],{"class":38,"line":39},[36,166019,156689],{"class":50},[36,166021,70],{"class":42},[36,166023,166024],{"class":50}," student.pop(",[36,166026,152803],{"class":110},[36,166028,1680],{"class":50},[36,166030,166031,166033,166035,166037],{"class":38,"line":54},[36,166032,164714],{"class":42},[36,166034,153480],{"class":50},[36,166036,70455],{"class":110},[36,166038,34577],{"class":50},[36,166040,166041],{"class":38,"line":61},[36,166042,166043],{"class":50},"student.clear()\n",[14,166045,166047],{"id":166046},"_611-字典遍历","6.11 字典遍历",[19,166049,166050],{},"遍历 key：",[26,166052,166054],{"className":31709,"code":166053,"language":31711,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[33,166055,166056,166068],{"__ignoreMap":31},[36,166057,166058,166060,166063,166065],{"class":38,"line":39},[36,166059,4516],{"class":42},[36,166061,166062],{"class":50}," key ",[36,166064,27374],{"class":42},[36,166066,166067],{"class":50}," student:\n",[36,166069,166070,166072],{"class":38,"line":54},[36,166071,32630],{"class":73},[36,166073,166074],{"class":50},"(key, student[key])\n",[19,166076,166077],{},"遍历 value：",[26,166079,166081],{"className":31709,"code":166080,"language":31711,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[33,166082,166083,166095],{"__ignoreMap":31},[36,166084,166085,166087,166090,166092],{"class":38,"line":39},[36,166086,4516],{"class":42},[36,166088,166089],{"class":50}," value ",[36,166091,27374],{"class":42},[36,166093,166094],{"class":50}," student.values():\n",[36,166096,166097,166099],{"class":38,"line":54},[36,166098,32630],{"class":73},[36,166100,166101],{"class":50},"(value)\n",[19,166103,166104],{},"遍历 key 和 value：",[26,166106,166108],{"className":31709,"code":166107,"language":31711,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[33,166109,166110,166122],{"__ignoreMap":31},[36,166111,166112,166114,166117,166119],{"class":38,"line":39},[36,166113,4516],{"class":42},[36,166115,166116],{"class":50}," key, value ",[36,166118,27374],{"class":42},[36,166120,166121],{"class":50}," student.items():\n",[36,166123,166124,166126],{"class":38,"line":54},[36,166125,32630],{"class":73},[36,166127,166128],{"class":50},"(key, value)\n",[14,166130,166132],{"id":166131},"_612-嵌套容器","6.12 嵌套容器",[19,166134,166135],{},"列表中保存字典，是项目中最常见的结构之一。",[26,166137,166139],{"className":31709,"code":166138,"language":31711,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 72},\n]\n\nfor student in students:\n    print(student[\"name\"], student[\"score\"])\n",[33,166140,166141,166149,166177,166205,166233,166237,166241,166251],{"__ignoreMap":31},[36,166142,166143,166145,166147],{"class":38,"line":39},[36,166144,161047],{"class":50},[36,166146,70],{"class":42},[36,166148,56778],{"class":50},[36,166150,166151,166153,166155,166157,166159,166161,166163,166165,166167,166169,166171,166173,166175],{"class":38,"line":54},[36,166152,149716],{"class":50},[36,166154,64010],{"class":110},[36,166156,52768],{"class":50},[36,166158,151219],{"class":110},[36,166160,477],{"class":50},[36,166162,70455],{"class":110},[36,166164,52768],{"class":50},[36,166166,2317],{"class":73},[36,166168,477],{"class":50},[36,166170,152803],{"class":110},[36,166172,52768],{"class":50},[36,166174,2656],{"class":73},[36,166176,6419],{"class":50},[36,166178,166179,166181,166183,166185,166187,166189,166191,166193,166195,166197,166199,166201,166203],{"class":38,"line":61},[36,166180,149716],{"class":50},[36,166182,64010],{"class":110},[36,166184,52768],{"class":50},[36,166186,152267],{"class":110},[36,166188,477],{"class":50},[36,166190,70455],{"class":110},[36,166192,52768],{"class":50},[36,166194,2292],{"class":73},[36,166196,477],{"class":50},[36,166198,152803],{"class":110},[36,166200,52768],{"class":50},[36,166202,2478],{"class":73},[36,166204,6419],{"class":50},[36,166206,166207,166209,166211,166213,166215,166217,166219,166221,166223,166225,166227,166229,166231],{"class":38,"line":80},[36,166208,149716],{"class":50},[36,166210,64010],{"class":110},[36,166212,52768],{"class":50},[36,166214,161062],{"class":110},[36,166216,477],{"class":50},[36,166218,70455],{"class":110},[36,166220,52768],{"class":50},[36,166222,2342],{"class":73},[36,166224,477],{"class":50},[36,166226,152803],{"class":110},[36,166228,52768],{"class":50},[36,166230,2073],{"class":73},[36,166232,6419],{"class":50},[36,166234,166235],{"class":38,"line":96},[36,166236,34577],{"class":50},[36,166238,166239],{"class":38,"line":101},[36,166240,58],{"emptyLinePlaceholder":57},[36,166242,166243,166245,166247,166249],{"class":38,"line":128},[36,166244,4516],{"class":42},[36,166246,153468],{"class":50},[36,166248,27374],{"class":42},[36,166250,153473],{"class":50},[36,166252,166253,166255,166257,166259,166262,166264],{"class":38,"line":149},[36,166254,32630],{"class":73},[36,166256,165903],{"class":50},[36,166258,64010],{"class":110},[36,166260,166261],{"class":50},"], student[",[36,166263,152803],{"class":110},[36,166265,6146],{"class":50},[19,166267,166268],{},"统计平均分：",[26,166270,166272],{"className":31709,"code":166271,"language":31711,"meta":31,"style":31},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[33,166273,166274,166282,166286,166296,166308,166312,166327],{"__ignoreMap":31},[36,166275,166276,166278,166280],{"class":38,"line":39},[36,166277,158591],{"class":50},[36,166279,70],{"class":42},[36,166281,48664],{"class":73},[36,166283,166284],{"class":38,"line":54},[36,166285,58],{"emptyLinePlaceholder":57},[36,166287,166288,166290,166292,166294],{"class":38,"line":61},[36,166289,4516],{"class":42},[36,166291,153468],{"class":50},[36,166293,27374],{"class":42},[36,166295,153473],{"class":50},[36,166297,166298,166300,166302,166304,166306],{"class":38,"line":80},[36,166299,160638],{"class":50},[36,166301,10945],{"class":42},[36,166303,153480],{"class":50},[36,166305,152803],{"class":110},[36,166307,34577],{"class":50},[36,166309,166310],{"class":38,"line":96},[36,166311,58],{"emptyLinePlaceholder":57},[36,166313,166314,166316,166318,166320,166322,166324],{"class":38,"line":101},[36,166315,165105],{"class":50},[36,166317,70],{"class":42},[36,166319,165110],{"class":50},[36,166321,2251],{"class":42},[36,166323,8805],{"class":73},[36,166325,166326],{"class":50},"(students)\n",[36,166328,166329,166331,166333,166335,166337,166339,166341,166343,166345,166347],{"class":38,"line":128},[36,166330,31746],{"class":73},[36,166332,222],{"class":50},[36,166334,1724],{"class":42},[36,166336,165128],{"class":110},[36,166338,2563],{"class":73},[36,166340,165133],{"class":50},[36,166342,158490],{"class":42},[36,166344,2613],{"class":73},[36,166346,1919],{"class":110},[36,166348,1680],{"class":50},[19,166350,166351],{},"查找学生：",[26,166353,166355],{"className":31709,"code":166354,"language":31711,"meta":31,"style":31},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[33,166356,166357,166372,166376,166386,166400,166406,166410,166416],{"__ignoreMap":31},[36,166358,166359,166361,166363,166365,166367,166370],{"class":38,"line":39},[36,166360,112909],{"class":50},[36,166362,70],{"class":42},[36,166364,61936],{"class":73},[36,166366,222],{"class":50},[36,166368,166369],{"class":110},"\"请输入学生姓名:\"",[36,166371,1680],{"class":50},[36,166373,166374],{"class":38,"line":54},[36,166375,58],{"emptyLinePlaceholder":57},[36,166377,166378,166380,166382,166384],{"class":38,"line":61},[36,166379,4516],{"class":42},[36,166381,153468],{"class":50},[36,166383,27374],{"class":42},[36,166385,153473],{"class":50},[36,166387,166388,166390,166392,166394,166396,166398],{"class":38,"line":80},[36,166389,4592],{"class":42},[36,166391,153480],{"class":50},[36,166393,64010],{"class":110},[36,166395,5932],{"class":50},[36,166397,4441],{"class":42},[36,166399,161763],{"class":50},[36,166401,166402,166404],{"class":38,"line":96},[36,166403,33782],{"class":73},[36,166405,151373],{"class":50},[36,166407,166408],{"class":38,"line":101},[36,166409,32958],{"class":42},[36,166411,166412,166414],{"class":38,"line":128},[36,166413,3219],{"class":42},[36,166415,5230],{"class":50},[36,166417,166418,166420,166422,166425],{"class":38,"line":149},[36,166419,32630],{"class":73},[36,166421,222],{"class":50},[36,166423,166424],{"class":110},"\"没有找到\"",[36,166426,1680],{"class":50},[14,166428,166430],{"id":166429},"_613-容器通用操作","6.13 容器通用操作",[19,166432,166433],{},"长度：",[26,166435,166437],{"className":31709,"code":166436,"language":31711,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[33,166438,166439,166458,166468],{"__ignoreMap":31},[36,166440,166441,166443,166446,166448,166450,166452,166454,166456],{"class":38,"line":39},[36,166442,8832],{"class":73},[36,166444,166445],{"class":50},"([",[36,166447,1885],{"class":73},[36,166449,477],{"class":50},[36,166451,1747],{"class":73},[36,166453,477],{"class":50},[36,166455,1741],{"class":73},[36,166457,6146],{"class":50},[36,166459,166460,166462,166464,166466],{"class":38,"line":54},[36,166461,8832],{"class":73},[36,166463,222],{"class":50},[36,166465,157211],{"class":110},[36,166467,1680],{"class":50},[36,166469,166470,166472,166475,166477,166479,166481],{"class":38,"line":61},[36,166471,8832],{"class":73},[36,166473,166474],{"class":50},"({",[36,166476,64010],{"class":110},[36,166478,52768],{"class":50},[36,166480,151219],{"class":110},[36,166482,166483],{"class":50},"})\n",[19,166485,166486],{},"最大最小：",[26,166488,166490],{"className":31709,"code":166489,"language":31711,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[33,166491,166492,166510],{"__ignoreMap":31},[36,166493,166494,166496,166498,166500,166502,166504,166506,166508],{"class":38,"line":39},[36,166495,7497],{"class":73},[36,166497,166445],{"class":50},[36,166499,1885],{"class":73},[36,166501,477],{"class":50},[36,166503,1747],{"class":73},[36,166505,477],{"class":50},[36,166507,1741],{"class":73},[36,166509,6146],{"class":50},[36,166511,166512,166515,166517,166519,166521,166523,166525,166527],{"class":38,"line":54},[36,166513,166514],{"class":73},"min",[36,166516,166445],{"class":50},[36,166518,1885],{"class":73},[36,166520,477],{"class":50},[36,166522,1747],{"class":73},[36,166524,477],{"class":50},[36,166526,1741],{"class":73},[36,166528,6146],{"class":50},[19,166530,166531],{},"求和：",[26,166533,166535],{"className":31709,"code":166534,"language":31711,"meta":31,"style":31},"sum([1, 2, 3])\n",[33,166536,166537],{"__ignoreMap":31},[36,166538,166539,166542,166544,166546,166548,166550,166552,166554],{"class":38,"line":39},[36,166540,166541],{"class":73},"sum",[36,166543,166445],{"class":50},[36,166545,1885],{"class":73},[36,166547,477],{"class":50},[36,166549,1747],{"class":73},[36,166551,477],{"class":50},[36,166553,1741],{"class":73},[36,166555,6146],{"class":50},[19,166557,164802],{},[26,166559,166561],{"className":31709,"code":166560,"language":31711,"meta":31,"style":31},"sorted([3, 1, 2])\n",[33,166562,166563],{"__ignoreMap":31},[36,166564,166565,166568,166570,166572,166574,166576,166578,166580],{"class":38,"line":39},[36,166566,166567],{"class":73},"sorted",[36,166569,166445],{"class":50},[36,166571,1741],{"class":73},[36,166573,477],{"class":50},[36,166575,1885],{"class":73},[36,166577,477],{"class":50},[36,166579,1747],{"class":73},[36,166581,6146],{"class":50},[19,166583,166584],{},"类型转换：",[26,166586,166588],{"className":31709,"code":166587,"language":31711,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[33,166589,166590,166600,166618],{"__ignoreMap":31},[36,166591,166592,166594,166596,166598],{"class":38,"line":39},[36,166593,155401],{"class":73},[36,166595,222],{"class":50},[36,166597,157211],{"class":110},[36,166599,1680],{"class":50},[36,166601,166602,166604,166606,166608,166610,166612,166614,166616],{"class":38,"line":54},[36,166603,156596],{"class":73},[36,166605,166445],{"class":50},[36,166607,1885],{"class":73},[36,166609,477],{"class":50},[36,166611,1747],{"class":73},[36,166613,477],{"class":50},[36,166615,1741],{"class":73},[36,166617,6146],{"class":50},[36,166619,166620,166622,166624,166626,166628,166630,166632,166634,166636,166638],{"class":38,"line":61},[36,166621,156621],{"class":73},[36,166623,166445],{"class":50},[36,166625,1885],{"class":73},[36,166627,477],{"class":50},[36,166629,1885],{"class":73},[36,166631,477],{"class":50},[36,166633,1747],{"class":73},[36,166635,477],{"class":50},[36,166637,1741],{"class":73},[36,166639,6146],{"class":50},[19,166641,166642],{},"成员判断：",[26,166644,166646],{"className":31709,"code":166645,"language":31711,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[33,166647,166648,166665,166689],{"__ignoreMap":31},[36,166649,166650,166652,166654,166657,166660,166663],{"class":38,"line":39},[36,166651,31746],{"class":73},[36,166653,222],{"class":50},[36,166655,166656],{"class":110},"\"a\"",[36,166658,166659],{"class":42}," in",[36,166661,166662],{"class":110}," \"abc\"",[36,166664,1680],{"class":50},[36,166666,166667,166669,166671,166673,166675,166677,166679,166681,166683,166685,166687],{"class":38,"line":54},[36,166668,31746],{"class":73},[36,166670,222],{"class":50},[36,166672,1885],{"class":73},[36,166674,166659],{"class":42},[36,166676,53557],{"class":50},[36,166678,1885],{"class":73},[36,166680,477],{"class":50},[36,166682,1747],{"class":73},[36,166684,477],{"class":50},[36,166686,1741],{"class":73},[36,166688,6146],{"class":50},[36,166690,166691,166693,166695,166697,166699,166701,166703,166705,166707],{"class":38,"line":61},[36,166692,31746],{"class":73},[36,166694,222],{"class":50},[36,166696,64010],{"class":110},[36,166698,166659],{"class":42},[36,166700,5937],{"class":50},[36,166702,64010],{"class":110},[36,166704,52768],{"class":50},[36,166706,151219],{"class":110},[36,166708,166483],{"class":50},[14,166710,166712],{"id":166711},"_614-推导式","6.14 推导式",[19,166714,166715],{},"推导式用于快速生成容器。",[19,166717,166718],{},"列表推导式：",[26,166720,166722],{"className":31709,"code":166721,"language":31711,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[33,166723,166724,166751],{"__ignoreMap":31},[36,166725,166726,166728,166730,166733,166735,166737,166739,166741,166743,166745,166747,166749],{"class":38,"line":39},[36,166727,165431],{"class":50},[36,166729,70],{"class":42},[36,166731,166732],{"class":50}," [i ",[36,166734,4516],{"class":42},[36,166736,10906],{"class":50},[36,166738,27374],{"class":42},[36,166740,33774],{"class":73},[36,166742,222],{"class":50},[36,166744,1885],{"class":73},[36,166746,477],{"class":50},[36,166748,2012],{"class":73},[36,166750,98631],{"class":50},[36,166752,166753,166755],{"class":38,"line":54},[36,166754,31746],{"class":73},[36,166756,165647],{"class":50},[19,166758,166759],{},"带条件：",[26,166761,166763],{"className":31709,"code":166762,"language":31711,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[33,166764,166765,166806],{"__ignoreMap":31},[36,166766,166767,166770,166772,166774,166776,166778,166780,166782,166784,166786,166788,166790,166792,166794,166796,166798,166800,166802,166804],{"class":38,"line":39},[36,166768,166769],{"class":50},"even_nums ",[36,166771,70],{"class":42},[36,166773,166732],{"class":50},[36,166775,4516],{"class":42},[36,166777,10906],{"class":50},[36,166779,27374],{"class":42},[36,166781,33774],{"class":73},[36,166783,222],{"class":50},[36,166785,1885],{"class":73},[36,166787,477],{"class":50},[36,166789,2005],{"class":73},[36,166791,15043],{"class":50},[36,166793,3061],{"class":42},[36,166795,10906],{"class":50},[36,166797,1996],{"class":42},[36,166799,16084],{"class":73},[36,166801,102890],{"class":42},[36,166803,242],{"class":73},[36,166805,34577],{"class":50},[36,166807,166808,166810],{"class":38,"line":54},[36,166809,31746],{"class":73},[36,166811,166812],{"class":50},"(even_nums)\n",[19,166814,166815],{},"字典推导式：",[26,166817,166819],{"className":31709,"code":166818,"language":31711,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[33,166820,166821,166855],{"__ignoreMap":31},[36,166822,166823,166826,166828,166831,166833,166835,166838,166840,166842,166844,166846,166848,166850,166852],{"class":38,"line":39},[36,166824,166825],{"class":50},"squares ",[36,166827,70],{"class":42},[36,166829,166830],{"class":50}," {i: i ",[36,166832,12126],{"class":42},[36,166834,16084],{"class":73},[36,166836,166837],{"class":42}," for",[36,166839,10906],{"class":50},[36,166841,27374],{"class":42},[36,166843,33774],{"class":73},[36,166845,222],{"class":50},[36,166847,1885],{"class":73},[36,166849,477],{"class":50},[36,166851,2012],{"class":73},[36,166853,166854],{"class":50},")}\n",[36,166856,166857,166859],{"class":38,"line":54},[36,166858,31746],{"class":73},[36,166860,166861],{"class":50},"(squares)\n",[19,166863,166864],{},"集合推导式：",[26,166866,166868],{"className":31709,"code":166867,"language":31711,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[33,166869,166870,166891],{"__ignoreMap":31},[36,166871,166872,166875,166877,166880,166882,166884,166886,166889],{"class":38,"line":39},[36,166873,166874],{"class":50},"chars ",[36,166876,70],{"class":42},[36,166878,166879],{"class":50}," {ch ",[36,166881,4516],{"class":42},[36,166883,161023],{"class":50},[36,166885,27374],{"class":42},[36,166887,166888],{"class":110}," \"hello\"",[36,166890,250],{"class":50},[36,166892,166893,166895],{"class":38,"line":54},[36,166894,31746],{"class":73},[36,166896,166897],{"class":50},"(chars)\n",[19,166899,166900],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166902,166904],{"id":166903},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,166906,166908],{"className":31709,"code":166907,"language":31711,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n    {\"name\": \"小李\", \"score\": 59},\n]\n\ntotal = 0\nmax_student = students[0]\npassed = []\n\nfor student in students:\n    total += student[\"score\"]\n\n    if student[\"score\"] > max_student[\"score\"]:\n        max_student = student\n\n    if student[\"score\"] >= 60:\n        passed.append(student)\n\navg = total \u002F len(students)\n\nprint(f\"平均分:{avg:.2f}\")\nprint(f\"最高分学生:{max_student['name']} {max_student['score']}\")\nprint(f\"及格人数:{len(passed)}\")\n",[33,166909,166910,166918,166938,166958,166978,166998,167002,167006,167014,167028,167037,167041,167051,167063,167067,167087,167096,167100,167116,167121,167125,167139,167143,167165,167201],{"__ignoreMap":31},[36,166911,166912,166914,166916],{"class":38,"line":39},[36,166913,161047],{"class":50},[36,166915,70],{"class":42},[36,166917,56778],{"class":50},[36,166919,166920,166922,166924,166926,166928,166930,166932,166934,166936],{"class":38,"line":54},[36,166921,149716],{"class":50},[36,166923,64010],{"class":110},[36,166925,52768],{"class":50},[36,166927,151219],{"class":110},[36,166929,477],{"class":50},[36,166931,152803],{"class":110},[36,166933,52768],{"class":50},[36,166935,2656],{"class":73},[36,166937,6419],{"class":50},[36,166939,166940,166942,166944,166946,166948,166950,166952,166954,166956],{"class":38,"line":61},[36,166941,149716],{"class":50},[36,166943,64010],{"class":110},[36,166945,52768],{"class":50},[36,166947,152267],{"class":110},[36,166949,477],{"class":50},[36,166951,152803],{"class":110},[36,166953,52768],{"class":50},[36,166955,2478],{"class":73},[36,166957,6419],{"class":50},[36,166959,166960,166962,166964,166966,166968,166970,166972,166974,166976],{"class":38,"line":80},[36,166961,149716],{"class":50},[36,166963,64010],{"class":110},[36,166965,52768],{"class":50},[36,166967,161062],{"class":110},[36,166969,477],{"class":50},[36,166971,152803],{"class":110},[36,166973,52768],{"class":50},[36,166975,2073],{"class":73},[36,166977,6419],{"class":50},[36,166979,166980,166982,166984,166986,166988,166990,166992,166994,166996],{"class":38,"line":96},[36,166981,149716],{"class":50},[36,166983,64010],{"class":110},[36,166985,52768],{"class":50},[36,166987,164641],{"class":110},[36,166989,477],{"class":50},[36,166991,152803],{"class":110},[36,166993,52768],{"class":50},[36,166995,2549],{"class":73},[36,166997,6419],{"class":50},[36,166999,167000],{"class":38,"line":101},[36,167001,34577],{"class":50},[36,167003,167004],{"class":38,"line":128},[36,167005,58],{"emptyLinePlaceholder":57},[36,167007,167008,167010,167012],{"class":38,"line":149},[36,167009,158591],{"class":50},[36,167011,70],{"class":42},[36,167013,48664],{"class":73},[36,167015,167016,167019,167021,167024,167026],{"class":38,"line":154},[36,167017,167018],{"class":50},"max_student ",[36,167020,70],{"class":42},[36,167022,167023],{"class":50}," students[",[36,167025,1859],{"class":73},[36,167027,34577],{"class":50},[36,167029,167030,167033,167035],{"class":38,"line":167},[36,167031,167032],{"class":50},"passed ",[36,167034,70],{"class":42},[36,167036,53169],{"class":50},[36,167038,167039],{"class":38,"line":172},[36,167040,58],{"emptyLinePlaceholder":57},[36,167042,167043,167045,167047,167049],{"class":38,"line":192},[36,167044,4516],{"class":42},[36,167046,153468],{"class":50},[36,167048,27374],{"class":42},[36,167050,153473],{"class":50},[36,167052,167053,167055,167057,167059,167061],{"class":38,"line":211},[36,167054,160638],{"class":50},[36,167056,10945],{"class":42},[36,167058,153480],{"class":50},[36,167060,152803],{"class":110},[36,167062,34577],{"class":50},[36,167064,167065],{"class":38,"line":216},[36,167066,58],{"emptyLinePlaceholder":57},[36,167068,167069,167071,167073,167075,167077,167079,167082,167084],{"class":38,"line":231},[36,167070,4592],{"class":42},[36,167072,153480],{"class":50},[36,167074,152803],{"class":110},[36,167076,5932],{"class":50},[36,167078,2627],{"class":42},[36,167080,167081],{"class":50}," max_student[",[36,167083,152803],{"class":110},[36,167085,167086],{"class":50},"]:\n",[36,167088,167089,167092,167094],{"class":38,"line":236},[36,167090,167091],{"class":50},"        max_student ",[36,167093,70],{"class":42},[36,167095,153496],{"class":50},[36,167097,167098],{"class":38,"line":247},[36,167099,58],{"emptyLinePlaceholder":57},[36,167101,167102,167104,167106,167108,167110,167112,167114],{"class":38,"line":637},[36,167103,4592],{"class":42},[36,167105,153480],{"class":50},[36,167107,152803],{"class":110},[36,167109,5932],{"class":50},[36,167111,3228],{"class":42},[36,167113,159168],{"class":73},[36,167115,5230],{"class":50},[36,167117,167118],{"class":38,"line":646},[36,167119,167120],{"class":50},"        passed.append(student)\n",[36,167122,167123],{"class":38,"line":655},[36,167124,58],{"emptyLinePlaceholder":57},[36,167126,167127,167129,167131,167133,167135,167137],{"class":38,"line":660},[36,167128,165105],{"class":50},[36,167130,70],{"class":42},[36,167132,165110],{"class":50},[36,167134,2251],{"class":42},[36,167136,8805],{"class":73},[36,167138,166326],{"class":50},[36,167140,167141],{"class":38,"line":665},[36,167142,58],{"emptyLinePlaceholder":57},[36,167144,167145,167147,167149,167151,167153,167155,167157,167159,167161,167163],{"class":38,"line":674},[36,167146,31746],{"class":73},[36,167148,222],{"class":50},[36,167150,1724],{"class":42},[36,167152,165128],{"class":110},[36,167154,2563],{"class":73},[36,167156,165133],{"class":50},[36,167158,158490],{"class":42},[36,167160,2613],{"class":73},[36,167162,1919],{"class":110},[36,167164,1680],{"class":50},[36,167166,167167,167169,167171,167173,167176,167178,167181,167183,167185,167187,167189,167191,167193,167195,167197,167199],{"class":38,"line":679},[36,167168,31746],{"class":73},[36,167170,222],{"class":50},[36,167172,1724],{"class":42},[36,167174,167175],{"class":110},"\"最高分学生:",[36,167177,2563],{"class":73},[36,167179,167180],{"class":50},"max_student[",[36,167182,154213],{"class":110},[36,167184,2607],{"class":50},[36,167186,2613],{"class":73},[36,167188,5937],{"class":73},[36,167190,167180],{"class":50},[36,167192,154251],{"class":110},[36,167194,2607],{"class":50},[36,167196,2613],{"class":73},[36,167198,1919],{"class":110},[36,167200,1680],{"class":50},[36,167202,167203,167205,167207,167209,167212,167215,167218,167220,167222],{"class":38,"line":692},[36,167204,31746],{"class":73},[36,167206,222],{"class":50},[36,167208,1724],{"class":42},[36,167210,167211],{"class":110},"\"及格人数:",[36,167213,167214],{"class":73},"{len",[36,167216,167217],{"class":50},"(passed)",[36,167219,2613],{"class":73},[36,167221,1919],{"class":110},[36,167223,1680],{"class":50},[14,167225,167227],{"id":167226},"_616-易错点","6.16 易错点",[256,167229,167230,167233,167236,167239,167245,167254],{},[259,167231,167232],{},"列表可变，元组和字符串不可变。",[259,167234,167235],{},"切片结束位置不包含。",[259,167237,167238],{},"字典通过 key 取值，不是通过索引。",[259,167240,167241,167242,29716],{},"空集合要用 ",[33,167243,167244],{},"set()",[259,167246,105697,167247,167250,167251,29716],{},[33,167248,167249],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[33,167252,167253],{},"get()",[259,167255,167256],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167258,167260],{"id":167259},"_617-本章练习","6.17 本章练习",[256,167262,167263,167266,167269,167272,167275],{},[259,167264,167265],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[259,167267,167268],{},"输入一句话，统计每个字符出现次数。",[259,167270,167271],{},"使用集合去除列表中的重复元素。",[259,167273,167274],{},"使用字典保存一个学生的信息，并实现修改成绩。",[259,167276,167277],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1592,167279,167280],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":167282},[167283,167284,167285,167286,167287,167288,167289,167290,167291,167292,167293,167294,167295,167296,167297,167298,167299],{"id":164263,"depth":54,"text":164264},{"id":164380,"depth":54,"text":164381},{"id":164470,"depth":54,"text":164471},{"id":164594,"depth":54,"text":164595},{"id":164957,"depth":54,"text":164958},{"id":165144,"depth":54,"text":165145},{"id":165263,"depth":54,"text":165264},{"id":165405,"depth":54,"text":165406},{"id":165592,"depth":54,"text":165593},{"id":165836,"depth":54,"text":165837},{"id":166046,"depth":54,"text":166047},{"id":166131,"depth":54,"text":166132},{"id":166429,"depth":54,"text":166430},{"id":166711,"depth":54,"text":166712},{"id":166903,"depth":54,"text":166904},{"id":167226,"depth":54,"text":167227},{"id":167259,"depth":54,"text":167260},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164255,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167306,"title":167307,"body":167308,"description":24706,"extension":1603,"meta":169480,"navigation":57,"path":169481,"seo":169482,"stem":169483,"__hash__":169484},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167309,"toc":169455},[167310,167313,167317,167320,167400,167403,167424,167427,167431,167434,167496,167499,167516,167520,167523,167568,167570,167578,167582,167585,167667,167670,167673,167698,167701,167724,167728,167731,167733,167795,167798,167800,167851,167855,167859,167865,167970,167974,167980,168051,168055,168058,168126,168129,168209,168213,168219,168255,168258,168261,168371,168377,168381,168384,168456,168459,168463,168467,168472,168534,168538,168543,168611,168615,168620,168736,168740,168743,168823,168826,168830,168833,168937,168939,168954,168957,168961,169099,169107,169111,169113,169124,169126,169384,169388,169420,169424,169452],[10,167311,167307],{"id":167312},"_7-函数进阶",[14,167314,167316],{"id":167315},"_71-多返回值","7.1 多返回值",[19,167318,167319],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,167321,167323],{"className":31709,"code":167322,"language":31711,"meta":31,"style":31},"def get_info():\n    name = \"小明\"\n    age = 18\n    score = 95\n    return name, age, score\n\n\nresult = get_info()\nprint(result)\nprint(type(result))\n",[33,167324,167325,167334,167342,167350,167359,167366,167370,167374,167383,167389],{"__ignoreMap":31},[36,167326,167327,167329,167332],{"class":38,"line":39},[36,167328,33278],{"class":42},[36,167330,167331],{"class":46}," get_info",[36,167333,33284],{"class":50},[36,167335,167336,167338,167340],{"class":38,"line":54},[36,167337,153701],{"class":50},[36,167339,70],{"class":42},[36,167341,150684],{"class":110},[36,167343,167344,167346,167348],{"class":38,"line":61},[36,167345,153717],{"class":50},[36,167347,70],{"class":42},[36,167349,147882],{"class":73},[36,167351,167352,167354,167356],{"class":38,"line":80},[36,167353,153732],{"class":50},[36,167355,70],{"class":42},[36,167357,167358],{"class":73}," 95\n",[36,167360,167361,167363],{"class":38,"line":96},[36,167362,239],{"class":42},[36,167364,167365],{"class":50}," name, age, score\n",[36,167367,167368],{"class":38,"line":101},[36,167369,58],{"emptyLinePlaceholder":57},[36,167371,167372],{"class":38,"line":128},[36,167373,58],{"emptyLinePlaceholder":57},[36,167375,167376,167378,167380],{"class":38,"line":149},[36,167377,162637],{"class":50},[36,167379,70],{"class":42},[36,167381,167382],{"class":50}," get_info()\n",[36,167384,167385,167387],{"class":38,"line":154},[36,167386,31746],{"class":73},[36,167388,77916],{"class":50},[36,167390,167391,167393,167395,167397],{"class":38,"line":167},[36,167392,31746],{"class":73},[36,167394,222],{"class":50},[36,167396,104438],{"class":73},[36,167398,167399],{"class":50},"(result))\n",[19,167401,167402],{},"可以直接解包：",[26,167404,167406],{"className":31709,"code":167405,"language":31711,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[33,167407,167408,167417],{"__ignoreMap":31},[36,167409,167410,167413,167415],{"class":38,"line":39},[36,167411,167412],{"class":50},"name, age, score ",[36,167414,70],{"class":42},[36,167416,167382],{"class":50},[36,167418,167419,167421],{"class":38,"line":54},[36,167420,31746],{"class":73},[36,167422,167423],{"class":50},"(name, age, score)\n",[19,167425,167426],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167428,167430],{"id":167429},"_72-位置参数","7.2 位置参数",[19,167432,167433],{},"位置参数按顺序传递。",[26,167435,167437],{"className":31709,"code":167436,"language":31711,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[33,167438,167439,167447,167475,167479,167483],{"__ignoreMap":31},[36,167440,167441,167443,167445],{"class":38,"line":39},[36,167442,33278],{"class":42},[36,167444,150703],{"class":46},[36,167446,150706],{"class":50},[36,167448,167449,167451,167453,167455,167457,167459,167461,167463,167465,167467,167469,167471,167473],{"class":38,"line":54},[36,167450,32630],{"class":73},[36,167452,222],{"class":50},[36,167454,1724],{"class":42},[36,167456,150717],{"class":110},[36,167458,2563],{"class":73},[36,167460,81141],{"class":50},[36,167462,2613],{"class":73},[36,167464,150726],{"class":110},[36,167466,2563],{"class":73},[36,167468,71552],{"class":50},[36,167470,2613],{"class":73},[36,167472,150735],{"class":110},[36,167474,1680],{"class":50},[36,167476,167477],{"class":38,"line":61},[36,167478,58],{"emptyLinePlaceholder":57},[36,167480,167481],{"class":38,"line":80},[36,167482,58],{"emptyLinePlaceholder":57},[36,167484,167485,167488,167490,167492,167494],{"class":38,"line":96},[36,167486,167487],{"class":50},"introduce(",[36,167489,151219],{"class":110},[36,167491,477],{"class":50},[36,167493,2317],{"class":73},[36,167495,1680],{"class":50},[19,167497,167498],{},"顺序错了就会得到错误含义：",[26,167500,167502],{"className":31709,"code":167501,"language":31711,"meta":31,"style":31},"introduce(18, \"小明\")\n",[33,167503,167504],{"__ignoreMap":31},[36,167505,167506,167508,167510,167512,167514],{"class":38,"line":39},[36,167507,167487],{"class":50},[36,167509,2317],{"class":73},[36,167511,477],{"class":50},[36,167513,151219],{"class":110},[36,167515,1680],{"class":50},[14,167517,167519],{"id":167518},"_73-关键字参数","7.3 关键字参数",[19,167521,167522],{},"关键字参数按参数名传递。",[26,167524,167526],{"className":31709,"code":167525,"language":31711,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[33,167527,167528,167548],{"__ignoreMap":31},[36,167529,167530,167532,167534,167536,167538,167540,167542,167544,167546],{"class":38,"line":39},[36,167531,167487],{"class":50},[36,167533,81141],{"class":473},[36,167535,70],{"class":42},[36,167537,151219],{"class":110},[36,167539,477],{"class":50},[36,167541,71552],{"class":473},[36,167543,70],{"class":42},[36,167545,2317],{"class":73},[36,167547,1680],{"class":50},[36,167549,167550,167552,167554,167556,167558,167560,167562,167564,167566],{"class":38,"line":54},[36,167551,167487],{"class":50},[36,167553,71552],{"class":473},[36,167555,70],{"class":42},[36,167557,2317],{"class":73},[36,167559,477],{"class":50},[36,167561,81141],{"class":473},[36,167563,70],{"class":42},[36,167565,151219],{"class":110},[36,167567,1680],{"class":50},[19,167569,119265],{},[256,167571,167572,167575],{},[259,167573,167574],{},"顺序不容易错。",[259,167576,167577],{},"调用时可读性更强。",[14,167579,167581],{"id":167580},"_74-默认参数","7.4 默认参数",[19,167583,167584],{},"默认参数给参数设置默认值。",[26,167586,167588],{"className":31709,"code":167587,"language":31711,"meta":31,"style":31},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[33,167589,167590,167606,167636,167640,167644,167654],{"__ignoreMap":31},[36,167591,167592,167594,167596,167599,167601,167604],{"class":38,"line":39},[36,167593,33278],{"class":42},[36,167595,123424],{"class":46},[36,167597,167598],{"class":50},"(host, port",[36,167600,70],{"class":42},[36,167602,167603],{"class":73},"3306",[36,167605,32117],{"class":50},[36,167607,167608,167610,167612,167614,167617,167619,167621,167623,167625,167627,167630,167632,167634],{"class":38,"line":54},[36,167609,32630],{"class":73},[36,167611,222],{"class":50},[36,167613,1724],{"class":42},[36,167615,167616],{"class":110},"\"连接",[36,167618,2563],{"class":73},[36,167620,28726],{"class":50},[36,167622,2613],{"class":73},[36,167624,2526],{"class":110},[36,167626,2563],{"class":73},[36,167628,167629],{"class":50},"port",[36,167631,2613],{"class":73},[36,167633,1919],{"class":110},[36,167635,1680],{"class":50},[36,167637,167638],{"class":38,"line":61},[36,167639,58],{"emptyLinePlaceholder":57},[36,167641,167642],{"class":38,"line":80},[36,167643,58],{"emptyLinePlaceholder":57},[36,167645,167646,167649,167652],{"class":38,"line":96},[36,167647,167648],{"class":50},"connect(",[36,167650,167651],{"class":110},"\"localhost\"",[36,167653,1680],{"class":50},[36,167655,167656,167658,167660,167662,167665],{"class":38,"line":101},[36,167657,167648],{"class":50},[36,167659,167651],{"class":110},[36,167661,477],{"class":50},[36,167663,167664],{"class":73},"6379",[36,167666,1680],{"class":50},[19,167668,167669],{},"注意：默认参数必须放在非默认参数后面。",[19,167671,167672],{},"错误：",[26,167674,167676],{"className":31709,"code":167675,"language":31711,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[33,167677,167678,167694],{"__ignoreMap":31},[36,167679,167680,167682,167684,167687,167689,167691],{"class":38,"line":39},[36,167681,33278],{"class":42},[36,167683,123424],{"class":46},[36,167685,167686],{"class":50},"(port",[36,167688,70],{"class":42},[36,167690,167603],{"class":73},[36,167692,167693],{"class":50},", host):\n",[36,167695,167696],{"class":38,"line":54},[36,167697,150868],{"class":42},[19,167699,167700],{},"正确：",[26,167702,167704],{"className":31709,"code":167703,"language":31711,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[33,167705,167706,167720],{"__ignoreMap":31},[36,167707,167708,167710,167712,167714,167716,167718],{"class":38,"line":39},[36,167709,33278],{"class":42},[36,167711,123424],{"class":46},[36,167713,167598],{"class":50},[36,167715,70],{"class":42},[36,167717,167603],{"class":73},[36,167719,32117],{"class":50},[36,167721,167722],{"class":38,"line":54},[36,167723,150868],{"class":42},[14,167725,167727],{"id":167726},"_75-默认参数的坑","7.5 默认参数的坑",[19,167729,167730],{},"不要使用可变对象作为默认参数。",[19,167732,158954],{},[26,167734,167736],{"className":31709,"code":167735,"language":31711,"meta":31,"style":31},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[33,167737,167738,167753,167758,167765,167769,167773,167784],{"__ignoreMap":31},[36,167739,167740,167742,167745,167748,167750],{"class":38,"line":39},[36,167741,33278],{"class":42},[36,167743,167744],{"class":46}," add_item",[36,167746,167747],{"class":50},"(item, items",[36,167749,70],{"class":42},[36,167751,167752],{"class":50},"[]):\n",[36,167754,167755],{"class":38,"line":54},[36,167756,167757],{"class":50},"    items.append(item)\n",[36,167759,167760,167762],{"class":38,"line":61},[36,167761,239],{"class":42},[36,167763,167764],{"class":50}," items\n",[36,167766,167767],{"class":38,"line":80},[36,167768,58],{"emptyLinePlaceholder":57},[36,167770,167771],{"class":38,"line":96},[36,167772,58],{"emptyLinePlaceholder":57},[36,167774,167775,167777,167780,167782],{"class":38,"line":101},[36,167776,31746],{"class":73},[36,167778,167779],{"class":50},"(add_item(",[36,167781,166656],{"class":110},[36,167783,31828],{"class":50},[36,167785,167786,167788,167790,167793],{"class":38,"line":128},[36,167787,31746],{"class":73},[36,167789,167779],{"class":50},[36,167791,167792],{"class":110},"\"b\"",[36,167794,31828],{"class":50},[19,167796,167797],{},"第二次调用会复用第一次的列表。",[19,167799,157219],{},[26,167801,167803],{"className":31709,"code":167802,"language":31711,"meta":31,"style":31},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[33,167804,167805,167819,167832,167841,167845],{"__ignoreMap":31},[36,167806,167807,167809,167811,167813,167815,167817],{"class":38,"line":39},[36,167808,33278],{"class":42},[36,167810,167744],{"class":46},[36,167812,167747],{"class":50},[36,167814,70],{"class":42},[36,167816,97017],{"class":73},[36,167818,32117],{"class":50},[36,167820,167821,167823,167826,167828,167830],{"class":38,"line":54},[36,167822,4592],{"class":42},[36,167824,167825],{"class":50}," items ",[36,167827,40258],{"class":42},[36,167829,40264],{"class":73},[36,167831,5230],{"class":50},[36,167833,167834,167837,167839],{"class":38,"line":61},[36,167835,167836],{"class":50},"        items ",[36,167838,70],{"class":42},[36,167840,53169],{"class":50},[36,167842,167843],{"class":38,"line":80},[36,167844,167757],{"class":50},[36,167846,167847,167849],{"class":38,"line":96},[36,167848,239],{"class":42},[36,167850,167764],{"class":50},[14,167852,167854],{"id":167853},"_76-不定长参数","7.6 不定长参数",[1645,167856,167858],{"id":167857},"_761-args","7.6.1 *args",[19,167860,167861,167864],{},[33,167862,167863],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,167866,167868],{"className":31709,"code":167867,"language":31711,"meta":31,"style":31},"def add(*args):\n    total = 0\n    for num in args:\n        total += num\n    return total\n\n\nprint(add(1, 2, 3))\nprint(add(1, 2, 3, 4, 5))\n",[33,167869,167870,167883,167891,167902,167911,167917,167921,167925,167944],{"__ignoreMap":31},[36,167871,167872,167874,167876,167878,167880],{"class":38,"line":39},[36,167873,33278],{"class":42},[36,167875,6698],{"class":46},[36,167877,222],{"class":50},[36,167879,2122],{"class":42},[36,167881,167882],{"class":50},"args):\n",[36,167884,167885,167887,167889],{"class":38,"line":54},[36,167886,160638],{"class":50},[36,167888,70],{"class":42},[36,167890,48664],{"class":73},[36,167892,167893,167895,167897,167899],{"class":38,"line":61},[36,167894,4692],{"class":42},[36,167896,157511],{"class":50},[36,167898,27374],{"class":42},[36,167900,167901],{"class":50}," args:\n",[36,167903,167904,167906,167908],{"class":38,"line":80},[36,167905,161313],{"class":50},[36,167907,10945],{"class":42},[36,167909,167910],{"class":50}," num\n",[36,167912,167913,167915],{"class":38,"line":96},[36,167914,239],{"class":42},[36,167916,163618],{"class":50},[36,167918,167919],{"class":38,"line":101},[36,167920,58],{"emptyLinePlaceholder":57},[36,167922,167923],{"class":38,"line":128},[36,167924,58],{"emptyLinePlaceholder":57},[36,167926,167927,167929,167932,167934,167936,167938,167940,167942],{"class":38,"line":149},[36,167928,31746],{"class":73},[36,167930,167931],{"class":50},"(add(",[36,167933,1885],{"class":73},[36,167935,477],{"class":50},[36,167937,1747],{"class":73},[36,167939,477],{"class":50},[36,167941,1741],{"class":73},[36,167943,31828],{"class":50},[36,167945,167946,167948,167950,167952,167954,167956,167958,167960,167962,167964,167966,167968],{"class":38,"line":154},[36,167947,31746],{"class":73},[36,167949,167931],{"class":50},[36,167951,1885],{"class":73},[36,167953,477],{"class":50},[36,167955,1747],{"class":73},[36,167957,477],{"class":50},[36,167959,1741],{"class":73},[36,167961,477],{"class":50},[36,167963,1961],{"class":73},[36,167965,477],{"class":50},[36,167967,1987],{"class":73},[36,167969,31828],{"class":50},[1645,167971,167973],{"id":167972},"_762-kwargs","7.6.2 **kwargs",[19,167975,167976,167979],{},[33,167977,167978],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,167981,167983],{"className":31709,"code":167982,"language":31711,"meta":31,"style":31},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[33,167984,167985,167998,168009,168015,168019,168023],{"__ignoreMap":31},[36,167986,167987,167989,167991,167993,167995],{"class":38,"line":39},[36,167988,33278],{"class":42},[36,167990,163276],{"class":46},[36,167992,222],{"class":50},[36,167994,12126],{"class":42},[36,167996,167997],{"class":50},"kwargs):\n",[36,167999,168000,168002,168004,168006],{"class":38,"line":54},[36,168001,4692],{"class":42},[36,168003,166116],{"class":50},[36,168005,27374],{"class":42},[36,168007,168008],{"class":50}," kwargs.items():\n",[36,168010,168011,168013],{"class":38,"line":61},[36,168012,33782],{"class":73},[36,168014,166128],{"class":50},[36,168016,168017],{"class":38,"line":80},[36,168018,58],{"emptyLinePlaceholder":57},[36,168020,168021],{"class":38,"line":96},[36,168022,58],{"emptyLinePlaceholder":57},[36,168024,168025,168027,168029,168031,168033,168035,168037,168039,168041,168043,168045,168047,168049],{"class":38,"line":101},[36,168026,163341],{"class":50},[36,168028,81141],{"class":473},[36,168030,70],{"class":42},[36,168032,151219],{"class":110},[36,168034,477],{"class":50},[36,168036,71552],{"class":473},[36,168038,70],{"class":42},[36,168040,2317],{"class":73},[36,168042,477],{"class":50},[36,168044,71603],{"class":473},[36,168046,70],{"class":42},[36,168048,70600],{"class":110},[36,168050,1680],{"class":50},[14,168052,168054],{"id":168053},"_77-参数解包","7.7 参数解包",[19,168056,168057],{},"列表或元组解包为位置参数：",[26,168059,168061],{"className":31709,"code":168060,"language":31711,"meta":31,"style":31},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[33,168062,168063,168072,168087,168091,168095,168115],{"__ignoreMap":31},[36,168064,168065,168067,168069],{"class":38,"line":39},[36,168066,33278],{"class":42},[36,168068,6698],{"class":46},[36,168070,168071],{"class":50},"(a, b, c):\n",[36,168073,168074,168076,168078,168080,168082,168084],{"class":38,"line":54},[36,168075,239],{"class":42},[36,168077,67],{"class":50},[36,168079,2148],{"class":42},[36,168081,140],{"class":50},[36,168083,2148],{"class":42},[36,168085,168086],{"class":50}," c\n",[36,168088,168089],{"class":38,"line":61},[36,168090,58],{"emptyLinePlaceholder":57},[36,168092,168093],{"class":38,"line":80},[36,168094,58],{"emptyLinePlaceholder":57},[36,168096,168097,168099,168101,168103,168105,168107,168109,168111,168113],{"class":38,"line":96},[36,168098,165431],{"class":50},[36,168100,70],{"class":42},[36,168102,53557],{"class":50},[36,168104,1885],{"class":73},[36,168106,477],{"class":50},[36,168108,1747],{"class":73},[36,168110,477],{"class":50},[36,168112,1741],{"class":73},[36,168114,34577],{"class":50},[36,168116,168117,168119,168121,168123],{"class":38,"line":101},[36,168118,31746],{"class":73},[36,168120,167931],{"class":50},[36,168122,2122],{"class":42},[36,168124,168125],{"class":50},"nums))\n",[19,168127,168128],{},"字典解包为关键字参数：",[26,168130,168132],{"className":31709,"code":168131,"language":31711,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[33,168133,168134,168142,168168,168172,168176,168200],{"__ignoreMap":31},[36,168135,168136,168138,168140],{"class":38,"line":39},[36,168137,33278],{"class":42},[36,168139,150703],{"class":46},[36,168141,150706],{"class":50},[36,168143,168144,168146,168148,168150,168152,168154,168156,168158,168160,168162,168164,168166],{"class":38,"line":54},[36,168145,32630],{"class":73},[36,168147,222],{"class":50},[36,168149,1724],{"class":42},[36,168151,1919],{"class":110},[36,168153,2563],{"class":73},[36,168155,81141],{"class":50},[36,168157,2613],{"class":73},[36,168159,5937],{"class":73},[36,168161,71552],{"class":50},[36,168163,2613],{"class":73},[36,168165,1919],{"class":110},[36,168167,1680],{"class":50},[36,168169,168170],{"class":38,"line":61},[36,168171,58],{"emptyLinePlaceholder":57},[36,168173,168174],{"class":38,"line":80},[36,168175,58],{"emptyLinePlaceholder":57},[36,168177,168178,168180,168182,168184,168186,168188,168190,168192,168194,168196,168198],{"class":38,"line":96},[36,168179,117645],{"class":50},[36,168181,70],{"class":42},[36,168183,5937],{"class":50},[36,168185,64010],{"class":110},[36,168187,52768],{"class":50},[36,168189,151219],{"class":110},[36,168191,477],{"class":50},[36,168193,70455],{"class":110},[36,168195,52768],{"class":50},[36,168197,2317],{"class":73},[36,168199,250],{"class":50},[36,168201,168202,168204,168206],{"class":38,"line":101},[36,168203,167487],{"class":50},[36,168205,12126],{"class":42},[36,168207,168208],{"class":50},"info)\n",[14,168210,168212],{"id":168211},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168214,168215,168218],{},[33,168216,168217],{},"lambda"," 用于定义简单匿名函数。",[26,168220,168222],{"className":31709,"code":168221,"language":31711,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[33,168223,168224,168241],{"__ignoreMap":31},[36,168225,168226,168229,168231,168234,168237,168239],{"class":38,"line":39},[36,168227,168228],{"class":50},"add ",[36,168230,70],{"class":42},[36,168232,168233],{"class":42}," lambda",[36,168235,168236],{"class":50}," a, b: a ",[36,168238,2148],{"class":42},[36,168240,152435],{"class":50},[36,168242,168243,168245,168247,168249,168251,168253],{"class":38,"line":54},[36,168244,31746],{"class":73},[36,168246,167931],{"class":50},[36,168248,1885],{"class":73},[36,168250,477],{"class":50},[36,168252,1747],{"class":73},[36,168254,31828],{"class":50},[19,168256,168257],{},"常和排序、过滤等函数一起使用。",[19,168259,168260],{},"按分数排序：",[26,168262,168264],{"className":31709,"code":168263,"language":31711,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nstudents.sort(key=lambda item: item[\"score\"], reverse=True)\nprint(students)\n",[33,168265,168266,168274,168294,168314,168334,168338,168342,168365],{"__ignoreMap":31},[36,168267,168268,168270,168272],{"class":38,"line":39},[36,168269,161047],{"class":50},[36,168271,70],{"class":42},[36,168273,56778],{"class":50},[36,168275,168276,168278,168280,168282,168284,168286,168288,168290,168292],{"class":38,"line":54},[36,168277,149716],{"class":50},[36,168279,64010],{"class":110},[36,168281,52768],{"class":50},[36,168283,151219],{"class":110},[36,168285,477],{"class":50},[36,168287,152803],{"class":110},[36,168289,52768],{"class":50},[36,168291,2656],{"class":73},[36,168293,6419],{"class":50},[36,168295,168296,168298,168300,168302,168304,168306,168308,168310,168312],{"class":38,"line":61},[36,168297,149716],{"class":50},[36,168299,64010],{"class":110},[36,168301,52768],{"class":50},[36,168303,152267],{"class":110},[36,168305,477],{"class":50},[36,168307,152803],{"class":110},[36,168309,52768],{"class":50},[36,168311,2478],{"class":73},[36,168313,6419],{"class":50},[36,168315,168316,168318,168320,168322,168324,168326,168328,168330,168332],{"class":38,"line":80},[36,168317,149716],{"class":50},[36,168319,64010],{"class":110},[36,168321,52768],{"class":50},[36,168323,161062],{"class":110},[36,168325,477],{"class":50},[36,168327,152803],{"class":110},[36,168329,52768],{"class":50},[36,168331,2073],{"class":73},[36,168333,6419],{"class":50},[36,168335,168336],{"class":38,"line":96},[36,168337,34577],{"class":50},[36,168339,168340],{"class":38,"line":101},[36,168341,58],{"emptyLinePlaceholder":57},[36,168343,168344,168347,168349,168351,168353,168355,168357,168359,168361,168363],{"class":38,"line":128},[36,168345,168346],{"class":50},"students.sort(",[36,168348,155277],{"class":473},[36,168350,155280],{"class":42},[36,168352,155283],{"class":50},[36,168354,152803],{"class":110},[36,168356,113533],{"class":50},[36,168358,164859],{"class":473},[36,168360,70],{"class":42},[36,168362,32807],{"class":73},[36,168364,1680],{"class":50},[36,168366,168367,168369],{"class":38,"line":149},[36,168368,31746],{"class":73},[36,168370,166326],{"class":50},[19,168372,168373,168374,168376],{},"如果逻辑复杂，不要硬写 ",[33,168375,168217],{},"，定义普通函数更清晰。",[14,168378,168380],{"id":168379},"_79-函数作为参数","7.9 函数作为参数",[19,168382,168383],{},"函数可以作为参数传给另一个函数。",[26,168385,168387],{"className":31709,"code":168386,"language":31711,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef calculate(a, b, func):\n    return func(a, b)\n\n\nprint(calculate(10, 20, add))\n",[33,168388,168389,168397,168407,168411,168415,168425,168432,168436,168440],{"__ignoreMap":31},[36,168390,168391,168393,168395],{"class":38,"line":39},[36,168392,33278],{"class":42},[36,168394,6698],{"class":46},[36,168396,152424],{"class":50},[36,168398,168399,168401,168403,168405],{"class":38,"line":54},[36,168400,239],{"class":42},[36,168402,67],{"class":50},[36,168404,2148],{"class":42},[36,168406,152435],{"class":50},[36,168408,168409],{"class":38,"line":61},[36,168410,58],{"emptyLinePlaceholder":57},[36,168412,168413],{"class":38,"line":80},[36,168414,58],{"emptyLinePlaceholder":57},[36,168416,168417,168419,168422],{"class":38,"line":96},[36,168418,33278],{"class":42},[36,168420,168421],{"class":46}," calculate",[36,168423,168424],{"class":50},"(a, b, func):\n",[36,168426,168427,168429],{"class":38,"line":101},[36,168428,239],{"class":42},[36,168430,168431],{"class":50}," func(a, b)\n",[36,168433,168434],{"class":38,"line":128},[36,168435,58],{"emptyLinePlaceholder":57},[36,168437,168438],{"class":38,"line":149},[36,168439,58],{"emptyLinePlaceholder":57},[36,168441,168442,168444,168447,168449,168451,168453],{"class":38,"line":154},[36,168443,31746],{"class":73},[36,168445,168446],{"class":50},"(calculate(",[36,168448,2113],{"class":73},[36,168450,477],{"class":50},[36,168452,2367],{"class":73},[36,168454,168455],{"class":50},", add))\n",[19,168457,168458],{},"这种思想在排序、回调、框架中经常出现。",[14,168460,168462],{"id":168461},"_710-mapfiltersorted","7.10 map、filter、sorted",[1645,168464,168466],{"id":168465},"_7101-map","7.10.1 map",[19,168468,168469,168471],{},[33,168470,75375],{}," 对每个元素执行函数。",[26,168473,168475],{"className":31709,"code":168474,"language":31711,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[33,168476,168477,168501,168524],{"__ignoreMap":31},[36,168478,168479,168481,168483,168485,168487,168489,168491,168493,168495,168497,168499],{"class":38,"line":39},[36,168480,165431],{"class":50},[36,168482,70],{"class":42},[36,168484,53557],{"class":50},[36,168486,1885],{"class":73},[36,168488,477],{"class":50},[36,168490,1747],{"class":73},[36,168492,477],{"class":50},[36,168494,1741],{"class":73},[36,168496,477],{"class":50},[36,168498,1961],{"class":73},[36,168500,34577],{"class":50},[36,168502,168503,168505,168507,168510,168512,168514,168517,168519,168521],{"class":38,"line":54},[36,168504,162637],{"class":50},[36,168506,70],{"class":42},[36,168508,168509],{"class":73}," map",[36,168511,222],{"class":50},[36,168513,168217],{"class":42},[36,168515,168516],{"class":50}," x: x ",[36,168518,2122],{"class":42},[36,168520,16084],{"class":73},[36,168522,168523],{"class":50},", nums)\n",[36,168525,168526,168528,168530,168532],{"class":38,"line":61},[36,168527,31746],{"class":73},[36,168529,222],{"class":50},[36,168531,155401],{"class":73},[36,168533,167399],{"class":50},[1645,168535,168537],{"id":168536},"_7102-filter","7.10.2 filter",[19,168539,168540,168542],{},[33,168541,81382],{}," 保留满足条件的元素。",[26,168544,168546],{"className":31709,"code":168545,"language":31711,"meta":31,"style":31},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[33,168547,168548,168576,168601],{"__ignoreMap":31},[36,168549,168550,168552,168554,168556,168558,168560,168562,168564,168566,168568,168570,168572,168574],{"class":38,"line":39},[36,168551,165431],{"class":50},[36,168553,70],{"class":42},[36,168555,53557],{"class":50},[36,168557,1885],{"class":73},[36,168559,477],{"class":50},[36,168561,1747],{"class":73},[36,168563,477],{"class":50},[36,168565,1741],{"class":73},[36,168567,477],{"class":50},[36,168569,1961],{"class":73},[36,168571,477],{"class":50},[36,168573,1987],{"class":73},[36,168575,34577],{"class":50},[36,168577,168578,168580,168582,168585,168587,168589,168591,168593,168595,168597,168599],{"class":38,"line":54},[36,168579,162637],{"class":50},[36,168581,70],{"class":42},[36,168583,168584],{"class":73}," filter",[36,168586,222],{"class":50},[36,168588,168217],{"class":42},[36,168590,168516],{"class":50},[36,168592,1996],{"class":42},[36,168594,16084],{"class":73},[36,168596,102890],{"class":42},[36,168598,242],{"class":73},[36,168600,168523],{"class":50},[36,168602,168603,168605,168607,168609],{"class":38,"line":61},[36,168604,31746],{"class":73},[36,168606,222],{"class":50},[36,168608,155401],{"class":73},[36,168610,167399],{"class":50},[1645,168612,168614],{"id":168613},"_7103-sorted","7.10.3 sorted",[19,168616,168617,168619],{},[33,168618,166567],{}," 返回排序后的新列表。",[26,168621,168623],{"className":31709,"code":168622,"language":31711,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"score\": 95},\n    {\"name\": \"小红\", \"score\": 88},\n    {\"name\": \"小刚\", \"score\": 72},\n]\n\nresult = sorted(students, key=lambda item: item[\"score\"], reverse=True)\nprint(result)\n",[33,168624,168625,168633,168653,168673,168693,168697,168701,168730],{"__ignoreMap":31},[36,168626,168627,168629,168631],{"class":38,"line":39},[36,168628,161047],{"class":50},[36,168630,70],{"class":42},[36,168632,56778],{"class":50},[36,168634,168635,168637,168639,168641,168643,168645,168647,168649,168651],{"class":38,"line":54},[36,168636,149716],{"class":50},[36,168638,64010],{"class":110},[36,168640,52768],{"class":50},[36,168642,151219],{"class":110},[36,168644,477],{"class":50},[36,168646,152803],{"class":110},[36,168648,52768],{"class":50},[36,168650,2656],{"class":73},[36,168652,6419],{"class":50},[36,168654,168655,168657,168659,168661,168663,168665,168667,168669,168671],{"class":38,"line":61},[36,168656,149716],{"class":50},[36,168658,64010],{"class":110},[36,168660,52768],{"class":50},[36,168662,152267],{"class":110},[36,168664,477],{"class":50},[36,168666,152803],{"class":110},[36,168668,52768],{"class":50},[36,168670,2478],{"class":73},[36,168672,6419],{"class":50},[36,168674,168675,168677,168679,168681,168683,168685,168687,168689,168691],{"class":38,"line":80},[36,168676,149716],{"class":50},[36,168678,64010],{"class":110},[36,168680,52768],{"class":50},[36,168682,161062],{"class":110},[36,168684,477],{"class":50},[36,168686,152803],{"class":110},[36,168688,52768],{"class":50},[36,168690,2073],{"class":73},[36,168692,6419],{"class":50},[36,168694,168695],{"class":38,"line":96},[36,168696,34577],{"class":50},[36,168698,168699],{"class":38,"line":101},[36,168700,58],{"emptyLinePlaceholder":57},[36,168702,168703,168705,168707,168709,168712,168714,168716,168718,168720,168722,168724,168726,168728],{"class":38,"line":128},[36,168704,162637],{"class":50},[36,168706,70],{"class":42},[36,168708,164935],{"class":73},[36,168710,168711],{"class":50},"(students, ",[36,168713,155277],{"class":473},[36,168715,155280],{"class":42},[36,168717,155283],{"class":50},[36,168719,152803],{"class":110},[36,168721,113533],{"class":50},[36,168723,164859],{"class":473},[36,168725,70],{"class":42},[36,168727,32807],{"class":73},[36,168729,1680],{"class":50},[36,168731,168732,168734],{"class":38,"line":149},[36,168733,31746],{"class":73},[36,168735,77916],{"class":50},[14,168737,168739],{"id":168738},"_711-闭包入门","7.11 闭包入门",[19,168741,168742],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,168744,168746],{"className":31709,"code":168745,"language":31711,"meta":31,"style":31},"def outer(base):\n    def inner(num):\n        return base + num\n\n    return inner\n\n\nadd_10 = outer(10)\nprint(add_10(5))\n",[33,168747,168748,168758,168768,168779,168783,168790,168794,168798,168812],{"__ignoreMap":31},[36,168749,168750,168752,168755],{"class":38,"line":39},[36,168751,33278],{"class":42},[36,168753,168754],{"class":46}," outer",[36,168756,168757],{"class":50},"(base):\n",[36,168759,168760,168762,168765],{"class":38,"line":54},[36,168761,32132],{"class":42},[36,168763,168764],{"class":46}," inner",[36,168766,168767],{"class":50},"(num):\n",[36,168769,168770,168772,168775,168777],{"class":38,"line":61},[36,168771,16081],{"class":42},[36,168773,168774],{"class":50}," base ",[36,168776,2148],{"class":42},[36,168778,167910],{"class":50},[36,168780,168781],{"class":38,"line":80},[36,168782,58],{"emptyLinePlaceholder":57},[36,168784,168785,168787],{"class":38,"line":96},[36,168786,239],{"class":42},[36,168788,168789],{"class":50}," inner\n",[36,168791,168792],{"class":38,"line":101},[36,168793,58],{"emptyLinePlaceholder":57},[36,168795,168796],{"class":38,"line":128},[36,168797,58],{"emptyLinePlaceholder":57},[36,168799,168800,168803,168805,168808,168810],{"class":38,"line":149},[36,168801,168802],{"class":50},"add_10 ",[36,168804,70],{"class":42},[36,168806,168807],{"class":50}," outer(",[36,168809,2113],{"class":73},[36,168811,1680],{"class":50},[36,168813,168814,168816,168819,168821],{"class":38,"line":154},[36,168815,31746],{"class":73},[36,168817,168818],{"class":50},"(add_10(",[36,168820,1987],{"class":73},[36,168822,31828],{"class":50},[19,168824,168825],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168827,168829],{"id":168828},"_712-装饰器入门","7.12 装饰器入门",[19,168831,168832],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,168834,168836],{"className":31709,"code":168835,"language":31711,"meta":31,"style":31},"def log(func):\n    def wrapper():\n        print(\"函数开始执行\")\n        func()\n        print(\"函数执行结束\")\n\n    return wrapper\n\n\n@log\ndef say_hello():\n    print(\"hello\")\n\n\nsay_hello()\n",[33,168837,168838,168847,168856,168867,168872,168883,168887,168894,168898,168902,168907,168915,168925,168929,168933],{"__ignoreMap":31},[36,168839,168840,168842,168844],{"class":38,"line":39},[36,168841,33278],{"class":42},[36,168843,88522],{"class":46},[36,168845,168846],{"class":50},"(func):\n",[36,168848,168849,168851,168854],{"class":38,"line":54},[36,168850,32132],{"class":42},[36,168852,168853],{"class":46}," wrapper",[36,168855,33284],{"class":50},[36,168857,168858,168860,168862,168865],{"class":38,"line":61},[36,168859,33782],{"class":73},[36,168861,222],{"class":50},[36,168863,168864],{"class":110},"\"函数开始执行\"",[36,168866,1680],{"class":50},[36,168868,168869],{"class":38,"line":80},[36,168870,168871],{"class":50},"        func()\n",[36,168873,168874,168876,168878,168881],{"class":38,"line":96},[36,168875,33782],{"class":73},[36,168877,222],{"class":50},[36,168879,168880],{"class":110},"\"函数执行结束\"",[36,168882,1680],{"class":50},[36,168884,168885],{"class":38,"line":101},[36,168886,58],{"emptyLinePlaceholder":57},[36,168888,168889,168891],{"class":38,"line":128},[36,168890,239],{"class":42},[36,168892,168893],{"class":50}," wrapper\n",[36,168895,168896],{"class":38,"line":149},[36,168897,58],{"emptyLinePlaceholder":57},[36,168899,168900],{"class":38,"line":154},[36,168901,58],{"emptyLinePlaceholder":57},[36,168903,168904],{"class":38,"line":167},[36,168905,168906],{"class":46},"@log\n",[36,168908,168909,168911,168913],{"class":38,"line":172},[36,168910,33278],{"class":42},[36,168912,162327],{"class":46},[36,168914,33284],{"class":50},[36,168916,168917,168919,168921,168923],{"class":38,"line":192},[36,168918,32630],{"class":73},[36,168920,222],{"class":50},[36,168922,7326],{"class":110},[36,168924,1680],{"class":50},[36,168926,168927],{"class":38,"line":211},[36,168928,58],{"emptyLinePlaceholder":57},[36,168930,168931],{"class":38,"line":216},[36,168932,58],{"emptyLinePlaceholder":57},[36,168934,168935],{"class":38,"line":231},[36,168936,162362],{"class":50},[19,168938,159605],{},[26,168940,168942],{"className":31709,"code":168941,"language":31711,"meta":31,"style":31},"say_hello = log(say_hello)\n",[33,168943,168944],{"__ignoreMap":31},[36,168945,168946,168949,168951],{"class":38,"line":39},[36,168947,168948],{"class":50},"say_hello ",[36,168950,70],{"class":42},[36,168952,168953],{"class":50}," log(say_hello)\n",[19,168955,168956],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168958,168960],{"id":168959},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,168962,168964],{"className":31709,"code":168963,"language":31711,"meta":31,"style":31},"def log(func):\n    def wrapper(*args, **kwargs):\n        print(\"函数开始执行\")\n        result = func(*args, **kwargs)\n        print(\"函数执行结束\")\n        return result\n\n    return wrapper\n\n\n@log\ndef add(a, b):\n    return a + b\n\n\nprint(add(10, 20))\n",[33,168965,168966,168974,168991,169001,169020,169030,169037,169041,169047,169051,169055,169059,169067,169077,169081,169085],{"__ignoreMap":31},[36,168967,168968,168970,168972],{"class":38,"line":39},[36,168969,33278],{"class":42},[36,168971,88522],{"class":46},[36,168973,168846],{"class":50},[36,168975,168976,168978,168980,168982,168984,168987,168989],{"class":38,"line":54},[36,168977,32132],{"class":42},[36,168979,168853],{"class":46},[36,168981,222],{"class":50},[36,168983,2122],{"class":42},[36,168985,168986],{"class":50},"args, ",[36,168988,12126],{"class":42},[36,168990,167997],{"class":50},[36,168992,168993,168995,168997,168999],{"class":38,"line":61},[36,168994,33782],{"class":73},[36,168996,222],{"class":50},[36,168998,168864],{"class":110},[36,169000,1680],{"class":50},[36,169002,169003,169006,169008,169011,169013,169015,169017],{"class":38,"line":80},[36,169004,169005],{"class":50},"        result ",[36,169007,70],{"class":42},[36,169009,169010],{"class":50}," func(",[36,169012,2122],{"class":42},[36,169014,168986],{"class":50},[36,169016,12126],{"class":42},[36,169018,169019],{"class":50},"kwargs)\n",[36,169021,169022,169024,169026,169028],{"class":38,"line":96},[36,169023,33782],{"class":73},[36,169025,222],{"class":50},[36,169027,168880],{"class":110},[36,169029,1680],{"class":50},[36,169031,169032,169034],{"class":38,"line":101},[36,169033,16081],{"class":42},[36,169035,169036],{"class":50}," result\n",[36,169038,169039],{"class":38,"line":128},[36,169040,58],{"emptyLinePlaceholder":57},[36,169042,169043,169045],{"class":38,"line":149},[36,169044,239],{"class":42},[36,169046,168893],{"class":50},[36,169048,169049],{"class":38,"line":154},[36,169050,58],{"emptyLinePlaceholder":57},[36,169052,169053],{"class":38,"line":167},[36,169054,58],{"emptyLinePlaceholder":57},[36,169056,169057],{"class":38,"line":172},[36,169058,168906],{"class":46},[36,169060,169061,169063,169065],{"class":38,"line":192},[36,169062,33278],{"class":42},[36,169064,6698],{"class":46},[36,169066,152424],{"class":50},[36,169068,169069,169071,169073,169075],{"class":38,"line":211},[36,169070,239],{"class":42},[36,169072,67],{"class":50},[36,169074,2148],{"class":42},[36,169076,152435],{"class":50},[36,169078,169079],{"class":38,"line":216},[36,169080,58],{"emptyLinePlaceholder":57},[36,169082,169083],{"class":38,"line":231},[36,169084,58],{"emptyLinePlaceholder":57},[36,169086,169087,169089,169091,169093,169095,169097],{"class":38,"line":236},[36,169088,31746],{"class":73},[36,169090,167931],{"class":50},[36,169092,2113],{"class":73},[36,169094,477],{"class":50},[36,169096,2367],{"class":73},[36,169098,31828],{"class":50},[19,169100,169101,169102,102349,169104,169106],{},"这个写法使用 ",[33,169103,167863],{},[33,169105,167978],{}," 接收原函数的所有参数。",[14,169108,169110],{"id":169109},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169112,124623],{},[256,169114,169115,169118,169121],{},[259,169116,169117],{},"给定一组学生数据。",[259,169119,169120],{},"封装函数，根据传入规则筛选学生。",[259,169122,169123],{},"筛选及格、优秀、未成年学生。",[19,169125,11501],{},[26,169127,169129],{"className":31709,"code":169128,"language":31711,"meta":31,"style":31},"students = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n    {\"name\": \"小刚\", \"age\": 19, \"score\": 59},\n]\n\n\ndef filter_students(students, condition):\n    result = []\n    for student in students:\n        if condition(student):\n            result.append(student)\n    return result\n\n\npassed = filter_students(students, lambda s: s[\"score\"] >= 60)\nexcellent = filter_students(students, lambda s: s[\"score\"] >= 90)\nunder_age = filter_students(students, lambda s: s[\"age\"] \u003C 18)\n\nprint(passed)\nprint(excellent)\nprint(under_age)\n",[33,169130,169131,169139,169167,169195,169223,169227,169231,169235,169245,169253,169263,169270,169275,169281,169285,169289,169313,169336,169359,169363,169370,169377],{"__ignoreMap":31},[36,169132,169133,169135,169137],{"class":38,"line":39},[36,169134,161047],{"class":50},[36,169136,70],{"class":42},[36,169138,56778],{"class":50},[36,169140,169141,169143,169145,169147,169149,169151,169153,169155,169157,169159,169161,169163,169165],{"class":38,"line":54},[36,169142,149716],{"class":50},[36,169144,64010],{"class":110},[36,169146,52768],{"class":50},[36,169148,151219],{"class":110},[36,169150,477],{"class":50},[36,169152,70455],{"class":110},[36,169154,52768],{"class":50},[36,169156,2317],{"class":73},[36,169158,477],{"class":50},[36,169160,152803],{"class":110},[36,169162,52768],{"class":50},[36,169164,2656],{"class":73},[36,169166,6419],{"class":50},[36,169168,169169,169171,169173,169175,169177,169179,169181,169183,169185,169187,169189,169191,169193],{"class":38,"line":61},[36,169170,149716],{"class":50},[36,169172,64010],{"class":110},[36,169174,52768],{"class":50},[36,169176,152267],{"class":110},[36,169178,477],{"class":50},[36,169180,70455],{"class":110},[36,169182,52768],{"class":50},[36,169184,2292],{"class":73},[36,169186,477],{"class":50},[36,169188,152803],{"class":110},[36,169190,52768],{"class":50},[36,169192,2478],{"class":73},[36,169194,6419],{"class":50},[36,169196,169197,169199,169201,169203,169205,169207,169209,169211,169213,169215,169217,169219,169221],{"class":38,"line":80},[36,169198,149716],{"class":50},[36,169200,64010],{"class":110},[36,169202,52768],{"class":50},[36,169204,161062],{"class":110},[36,169206,477],{"class":50},[36,169208,70455],{"class":110},[36,169210,52768],{"class":50},[36,169212,2342],{"class":73},[36,169214,477],{"class":50},[36,169216,152803],{"class":110},[36,169218,52768],{"class":50},[36,169220,2549],{"class":73},[36,169222,6419],{"class":50},[36,169224,169225],{"class":38,"line":96},[36,169226,34577],{"class":50},[36,169228,169229],{"class":38,"line":101},[36,169230,58],{"emptyLinePlaceholder":57},[36,169232,169233],{"class":38,"line":128},[36,169234,58],{"emptyLinePlaceholder":57},[36,169236,169237,169239,169242],{"class":38,"line":149},[36,169238,33278],{"class":42},[36,169240,169241],{"class":46}," filter_students",[36,169243,169244],{"class":50},"(students, condition):\n",[36,169246,169247,169249,169251],{"class":38,"line":154},[36,169248,162554],{"class":50},[36,169250,70],{"class":42},[36,169252,53169],{"class":50},[36,169254,169255,169257,169259,169261],{"class":38,"line":167},[36,169256,4692],{"class":42},[36,169258,153468],{"class":50},[36,169260,27374],{"class":42},[36,169262,153473],{"class":50},[36,169264,169265,169267],{"class":38,"line":172},[36,169266,3999],{"class":42},[36,169268,169269],{"class":50}," condition(student):\n",[36,169271,169272],{"class":38,"line":192},[36,169273,169274],{"class":50},"            result.append(student)\n",[36,169276,169277,169279],{"class":38,"line":211},[36,169278,239],{"class":42},[36,169280,169036],{"class":50},[36,169282,169283],{"class":38,"line":216},[36,169284,58],{"emptyLinePlaceholder":57},[36,169286,169287],{"class":38,"line":231},[36,169288,58],{"emptyLinePlaceholder":57},[36,169290,169291,169293,169295,169298,169300,169303,169305,169307,169309,169311],{"class":38,"line":236},[36,169292,167032],{"class":50},[36,169294,70],{"class":42},[36,169296,169297],{"class":50}," filter_students(students, ",[36,169299,168217],{"class":42},[36,169301,169302],{"class":50}," s: s[",[36,169304,152803],{"class":110},[36,169306,5932],{"class":50},[36,169308,3228],{"class":42},[36,169310,159168],{"class":73},[36,169312,1680],{"class":50},[36,169314,169315,169318,169320,169322,169324,169326,169328,169330,169332,169334],{"class":38,"line":247},[36,169316,169317],{"class":50},"excellent ",[36,169319,70],{"class":42},[36,169321,169297],{"class":50},[36,169323,168217],{"class":42},[36,169325,169302],{"class":50},[36,169327,152803],{"class":110},[36,169329,5932],{"class":50},[36,169331,3228],{"class":42},[36,169333,159119],{"class":73},[36,169335,1680],{"class":50},[36,169337,169338,169341,169343,169345,169347,169349,169351,169353,169355,169357],{"class":38,"line":637},[36,169339,169340],{"class":50},"under_age ",[36,169342,70],{"class":42},[36,169344,169297],{"class":50},[36,169346,168217],{"class":42},[36,169348,169302],{"class":50},[36,169350,70455],{"class":110},[36,169352,5932],{"class":50},[36,169354,2577],{"class":42},[36,169356,157616],{"class":73},[36,169358,1680],{"class":50},[36,169360,169361],{"class":38,"line":646},[36,169362,58],{"emptyLinePlaceholder":57},[36,169364,169365,169367],{"class":38,"line":655},[36,169366,31746],{"class":73},[36,169368,169369],{"class":50},"(passed)\n",[36,169371,169372,169374],{"class":38,"line":660},[36,169373,31746],{"class":73},[36,169375,169376],{"class":50},"(excellent)\n",[36,169378,169379,169381],{"class":38,"line":665},[36,169380,31746],{"class":73},[36,169382,169383],{"class":50},"(under_age)\n",[14,169385,169387],{"id":169386},"_715-易错点","7.15 易错点",[256,169389,169390,169393,169401,169406,169417],{},[259,169391,169392],{},"默认参数不要写可变对象。",[259,169394,169395,169397,169398,169400],{},[33,169396,167863],{}," 是元组，",[33,169399,167978],{}," 是字典。",[259,169402,169403,169405],{},[33,169404,168217],{}," 只适合简单表达式。",[259,169407,169408,102349,169410,169412,169413,169416],{},[33,169409,75375],{},[33,169411,81382],{}," 的结果是迭代器，常用 ",[33,169414,169415],{},"list()"," 转换查看。",[259,169418,169419],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169421,169423],{"id":169422},"_716-本章练习","7.16 本章练习",[256,169425,169426,169433,169439,169444,169449],{},[259,169427,169428,169429,169432],{},"写函数 ",[33,169430,169431],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[259,169434,169428,169435,169438],{},[33,169436,169437],{},"print_user(**kwargs)","，输出用户所有字段。",[259,169440,105697,169441,169443],{},[33,169442,168217],{}," 对学生列表按年龄排序。",[259,169445,105697,169446,169448],{},[33,169447,81382],{}," 找出成绩不及格的学生。",[259,169450,169451],{},"写一个装饰器，统计函数执行前后的提示信息。",[1592,169453,169454],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":169456},[169457,169458,169459,169460,169461,169462,169466,169467,169468,169469,169474,169475,169476,169477,169478,169479],{"id":167315,"depth":54,"text":167316},{"id":167429,"depth":54,"text":167430},{"id":167518,"depth":54,"text":167519},{"id":167580,"depth":54,"text":167581},{"id":167726,"depth":54,"text":167727},{"id":167853,"depth":54,"text":167854,"children":169463},[169464,169465],{"id":167857,"depth":61,"text":167858},{"id":167972,"depth":61,"text":167973},{"id":168053,"depth":54,"text":168054},{"id":168211,"depth":54,"text":168212},{"id":168379,"depth":54,"text":168380},{"id":168461,"depth":54,"text":168462,"children":169470},[169471,169472,169473],{"id":168465,"depth":61,"text":168466},{"id":168536,"depth":61,"text":168537},{"id":168613,"depth":61,"text":168614},{"id":168738,"depth":54,"text":168739},{"id":168828,"depth":54,"text":168829},{"id":168959,"depth":54,"text":168960},{"id":169109,"depth":54,"text":169110},{"id":169386,"depth":54,"text":169387},{"id":169422,"depth":54,"text":169423},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167307,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169486,"title":169487,"body":169488,"description":24706,"extension":1603,"meta":172007,"navigation":57,"path":172008,"seo":172009,"stem":172010,"__hash__":172011},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169489,"toc":171982},[169490,169493,169497,169500,169503,169534,169538,169542,169545,169572,169576,169579,169630,169633,169648,169651,169686,169690,169692,169716,169719,169779,169783,169787,169790,169847,169850,169870,169874,169877,169940,169944,169947,170003,170010,170034,170038,170041,170104,170108,170113,170164,170167,170171,170176,170243,170246,170328,170332,170337,170388,170391,170395,170398,170401,170409,170412,170458,170461,170507,170511,170517,170561,170564,170610,170613,170653,170656,170717,170721,170724,170814,170817,170959,170962,171029,171033,171036,171039,171180,171183,171261,171264,171440,171444,171446,171457,171459,171658,171662,171906,171910,171944,171948,171979],[10,169491,169487],{"id":169492},"_8-文件操作",[14,169494,169496],{"id":169495},"_81-文件操作的意义","8.1 文件操作的意义",[19,169498,169499],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169501,169502],{},"常见文件类型：",[256,169504,169505,169511,169517,169523,169529],{},[259,169506,169507,169510],{},[33,169508,169509],{},".txt","：普通文本。",[259,169512,169513,169516],{},[33,169514,169515],{},".csv","：表格文本。",[259,169518,169519,169522],{},[33,169520,169521],{},".json","：结构化数据。",[259,169524,169525,169528],{},[33,169526,169527],{},".log","：日志文件。",[259,169530,169531,169533],{},[33,169532,147683],{},"：Python 源代码。",[14,169535,169537],{"id":169536},"_82-路径","8.2 路径",[1645,169539,169541],{"id":169540},"_821-相对路径","8.2.1 相对路径",[19,169543,169544],{},"相对当前运行目录：",[26,169546,169548],{"className":31709,"code":169547,"language":31711,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[33,169549,169550],{"__ignoreMap":31},[36,169551,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570],{"class":38,"line":39},[36,169553,88246],{"class":73},[36,169555,222],{"class":50},[36,169557,148127],{"class":110},[36,169559,477],{"class":50},[36,169561,148132],{"class":110},[36,169563,477],{"class":50},[36,169565,148137],{"class":473},[36,169567,70],{"class":42},[36,169569,148142],{"class":110},[36,169571,1680],{"class":50},[1645,169573,169575],{"id":169574},"_822-绝对路径","8.2.2 绝对路径",[19,169577,169578],{},"从根目录或盘符开始：",[26,169580,169582],{"className":31709,"code":169581,"language":31711,"meta":31,"style":31},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[33,169583,169584,169607],{"__ignoreMap":31},[36,169585,169586,169588,169590,169593,169595,169597,169599,169601,169603,169605],{"class":38,"line":39},[36,169587,88246],{"class":73},[36,169589,222],{"class":50},[36,169591,169592],{"class":110},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[36,169594,477],{"class":50},[36,169596,148132],{"class":110},[36,169598,477],{"class":50},[36,169600,148137],{"class":473},[36,169602,70],{"class":42},[36,169604,148142],{"class":110},[36,169606,1680],{"class":50},[36,169608,169609,169611,169613,169616,169618,169620,169622,169624,169626,169628],{"class":38,"line":54},[36,169610,88246],{"class":73},[36,169612,222],{"class":50},[36,169614,169615],{"class":110},"\"D:\u002Fdata\u002Fdata.txt\"",[36,169617,477],{"class":50},[36,169619,148132],{"class":110},[36,169621,477],{"class":50},[36,169623,148137],{"class":473},[36,169625,70],{"class":42},[36,169627,148142],{"class":110},[36,169629,1680],{"class":50},[19,169631,169632],{},"Windows 路径建议写成：",[26,169634,169636],{"className":31709,"code":169635,"language":31711,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[33,169637,169638],{"__ignoreMap":31},[36,169639,169640,169643,169645],{"class":38,"line":39},[36,169641,169642],{"class":50},"path ",[36,169644,70],{"class":42},[36,169646,169647],{"class":110}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169649,169650],{},"或原始字符串：",[26,169652,169654],{"className":31709,"code":169653,"language":31711,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[33,169655,169656],{"__ignoreMap":31},[36,169657,169658,169660,169662,169664,169666,169669,169672,169675,169677,169679,169681,169684],{"class":38,"line":39},[36,169659,169642],{"class":50},[36,169661,70],{"class":42},[36,169663,18450],{"class":42},[36,169665,1919],{"class":110},[36,169667,169668],{"class":49308},"D:",[36,169670,169671],{"class":73},"\\d",[36,169673,169674],{"class":49308},"ata",[36,169676,169671],{"class":73},[36,169678,169674],{"class":49308},[36,169680,2225],{"class":73},[36,169682,169683],{"class":49308},"txt",[36,169685,26464],{"class":110},[14,169687,169689],{"id":169688},"_83-open函数","8.3 open函数",[19,169691,6670],{},[26,169693,169695],{"className":31709,"code":169694,"language":31711,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[33,169696,169697],{"__ignoreMap":31},[36,169698,169699,169701,169703,169705,169708,169710,169712,169714],{"class":38,"line":39},[36,169700,46685],{"class":473},[36,169702,14893],{"class":42},[36,169704,148122],{"class":73},[36,169706,169707],{"class":50},"(文件路径, 打开模式, ",[36,169709,148137],{"class":473},[36,169711,70],{"class":42},[36,169713,148142],{"class":110},[36,169715,1680],{"class":50},[19,169717,169718],{},"常见模式：",[1806,169720,169721,169730],{},[1809,169722,169723],{},[1812,169724,169725,169728],{},[1815,169726,169727],{},"模式",[1815,169729,27200],{},[1852,169731,169732,169741,169750,169759,169769],{},[1812,169733,169734,169738],{},[1857,169735,169736],{},[33,169737,2337],{},[1857,169739,169740],{},"只读，文件不存在会报错",[1812,169742,169743,169747],{},[1857,169744,169745],{},[33,169746,2462],{},[1857,169748,169749],{},"只写，文件不存在会创建，存在会清空",[1812,169751,169752,169756],{},[1857,169753,169754],{},[33,169755,1906],{},[1857,169757,169758],{},"追加，文件不存在会创建",[1812,169760,169761,169766],{},[1857,169762,169763],{},[33,169764,169765],{},"rb",[1857,169767,169768],{},"二进制只读",[1812,169770,169771,169776],{},[1857,169772,169773],{},[33,169774,169775],{},"wb",[1857,169777,169778],{},"二进制只写",[14,169780,169782],{"id":169781},"_84-读取文件","8.4 读取文件",[1645,169784,169786],{"id":169785},"_841-read","8.4.1 read",[19,169788,169789],{},"一次读取全部内容：",[26,169791,169793],{"className":31709,"code":169792,"language":31711,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[33,169794,169795,169821,169833,169840],{"__ignoreMap":31},[36,169796,169797,169799,169801,169803,169805,169807,169809,169811,169813,169815,169817,169819],{"class":38,"line":39},[36,169798,46685],{"class":473},[36,169800,14893],{"class":42},[36,169802,148122],{"class":73},[36,169804,222],{"class":50},[36,169806,148127],{"class":110},[36,169808,477],{"class":50},[36,169810,148132],{"class":110},[36,169812,477],{"class":50},[36,169814,148137],{"class":473},[36,169816,70],{"class":42},[36,169818,148142],{"class":110},[36,169820,1680],{"class":50},[36,169822,169823,169826,169828,169830],{"class":38,"line":54},[36,169824,169825],{"class":50},"content ",[36,169827,70],{"class":42},[36,169829,149484],{"class":473},[36,169831,169832],{"class":50},".read()\n",[36,169834,169835,169837],{"class":38,"line":61},[36,169836,31746],{"class":73},[36,169838,169839],{"class":50},"(content)\n",[36,169841,169842,169844],{"class":38,"line":80},[36,169843,46685],{"class":473},[36,169845,169846],{"class":50},".close()\n",[19,169848,169849],{},"可以指定读取字符数：",[26,169851,169853],{"className":31709,"code":169852,"language":31711,"meta":31,"style":31},"content = file.read(10)\n",[33,169854,169855],{"__ignoreMap":31},[36,169856,169857,169859,169861,169863,169866,169868],{"class":38,"line":39},[36,169858,169825],{"class":50},[36,169860,70],{"class":42},[36,169862,149484],{"class":473},[36,169864,169865],{"class":50},".read(",[36,169867,2113],{"class":73},[36,169869,1680],{"class":50},[1645,169871,169873],{"id":169872},"_842-readline","8.4.2 readline",[19,169875,169876],{},"一次读取一行：",[26,169878,169880],{"className":31709,"code":169879,"language":31711,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[33,169881,169882,169908,169912,169923,169930,169934],{"__ignoreMap":31},[36,169883,169884,169886,169888,169890,169892,169894,169896,169898,169900,169902,169904,169906],{"class":38,"line":39},[36,169885,46685],{"class":473},[36,169887,14893],{"class":42},[36,169889,148122],{"class":73},[36,169891,222],{"class":50},[36,169893,148127],{"class":110},[36,169895,477],{"class":50},[36,169897,148132],{"class":110},[36,169899,477],{"class":50},[36,169901,148137],{"class":473},[36,169903,70],{"class":42},[36,169905,148142],{"class":110},[36,169907,1680],{"class":50},[36,169909,169910],{"class":38,"line":54},[36,169911,58],{"emptyLinePlaceholder":57},[36,169913,169914,169916,169918,169920],{"class":38,"line":61},[36,169915,148583],{"class":50},[36,169917,70],{"class":42},[36,169919,149484],{"class":473},[36,169921,169922],{"class":50},".readline()\n",[36,169924,169925,169927],{"class":38,"line":80},[36,169926,31746],{"class":73},[36,169928,169929],{"class":50},"(line)\n",[36,169931,169932],{"class":38,"line":96},[36,169933,58],{"emptyLinePlaceholder":57},[36,169935,169936,169938],{"class":38,"line":101},[36,169937,46685],{"class":473},[36,169939,169846],{"class":50},[1645,169941,169943],{"id":169942},"_843-readlines","8.4.3 readlines",[19,169945,169946],{},"读取所有行，返回列表：",[26,169948,169950],{"className":31709,"code":169949,"language":31711,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[33,169951,169952,169978,169990,169997],{"__ignoreMap":31},[36,169953,169954,169956,169958,169960,169962,169964,169966,169968,169970,169972,169974,169976],{"class":38,"line":39},[36,169955,46685],{"class":473},[36,169957,14893],{"class":42},[36,169959,148122],{"class":73},[36,169961,222],{"class":50},[36,169963,148127],{"class":110},[36,169965,477],{"class":50},[36,169967,148132],{"class":110},[36,169969,477],{"class":50},[36,169971,148137],{"class":473},[36,169973,70],{"class":42},[36,169975,148142],{"class":110},[36,169977,1680],{"class":50},[36,169979,169980,169983,169985,169987],{"class":38,"line":54},[36,169981,169982],{"class":50},"lines ",[36,169984,70],{"class":42},[36,169986,149484],{"class":473},[36,169988,169989],{"class":50},".readlines()\n",[36,169991,169992,169994],{"class":38,"line":61},[36,169993,31746],{"class":73},[36,169995,169996],{"class":50},"(lines)\n",[36,169998,169999,170001],{"class":38,"line":80},[36,170000,46685],{"class":473},[36,170002,169846],{"class":50},[19,170004,170005,170006,170009],{},"每一行通常带有换行符，可以用 ",[33,170007,170008],{},"strip()"," 去掉：",[26,170011,170013],{"className":31709,"code":170012,"language":31711,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[33,170014,170015,170027],{"__ignoreMap":31},[36,170016,170017,170019,170022,170024],{"class":38,"line":39},[36,170018,4516],{"class":42},[36,170020,170021],{"class":50}," line ",[36,170023,27374],{"class":42},[36,170025,170026],{"class":50}," lines:\n",[36,170028,170029,170031],{"class":38,"line":54},[36,170030,32630],{"class":73},[36,170032,170033],{"class":50},"(line.strip())\n",[1645,170035,170037],{"id":170036},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170039,170040],{},"推荐读取大文件时使用：",[26,170042,170044],{"className":31709,"code":170043,"language":31711,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[33,170045,170046,170072,170076,170088,170094,170098],{"__ignoreMap":31},[36,170047,170048,170050,170052,170054,170056,170058,170060,170062,170064,170066,170068,170070],{"class":38,"line":39},[36,170049,46685],{"class":473},[36,170051,14893],{"class":42},[36,170053,148122],{"class":73},[36,170055,222],{"class":50},[36,170057,148127],{"class":110},[36,170059,477],{"class":50},[36,170061,148132],{"class":110},[36,170063,477],{"class":50},[36,170065,148137],{"class":473},[36,170067,70],{"class":42},[36,170069,148142],{"class":110},[36,170071,1680],{"class":50},[36,170073,170074],{"class":38,"line":54},[36,170075,58],{"emptyLinePlaceholder":57},[36,170077,170078,170080,170082,170084,170086],{"class":38,"line":61},[36,170079,4516],{"class":42},[36,170081,170021],{"class":50},[36,170083,27374],{"class":42},[36,170085,149484],{"class":473},[36,170087,5230],{"class":50},[36,170089,170090,170092],{"class":38,"line":80},[36,170091,32630],{"class":73},[36,170093,170033],{"class":50},[36,170095,170096],{"class":38,"line":96},[36,170097,58],{"emptyLinePlaceholder":57},[36,170099,170100,170102],{"class":38,"line":101},[36,170101,46685],{"class":473},[36,170103,169846],{"class":50},[14,170105,170107],{"id":170106},"_85-with语句","8.5 with语句",[19,170109,170110,170112],{},[33,170111,109164],{}," 会自动关闭文件，推荐使用。",[26,170114,170116],{"className":31709,"code":170115,"language":31711,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[33,170117,170118,170148,170158],{"__ignoreMap":31},[36,170119,170120,170122,170124,170126,170128,170130,170132,170134,170136,170138,170140,170142,170144,170146],{"class":38,"line":39},[36,170121,109164],{"class":42},[36,170123,148122],{"class":73},[36,170125,222],{"class":50},[36,170127,148127],{"class":110},[36,170129,477],{"class":50},[36,170131,148132],{"class":110},[36,170133,477],{"class":50},[36,170135,148137],{"class":473},[36,170137,70],{"class":42},[36,170139,148142],{"class":110},[36,170141,15043],{"class":50},[36,170143,32714],{"class":42},[36,170145,149484],{"class":473},[36,170147,5230],{"class":50},[36,170149,170150,170152,170154,170156],{"class":38,"line":54},[36,170151,148154],{"class":50},[36,170153,70],{"class":42},[36,170155,149484],{"class":473},[36,170157,169832],{"class":50},[36,170159,170160,170162],{"class":38,"line":61},[36,170161,32630],{"class":73},[36,170163,169839],{"class":50},[19,170165,170166],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170168,170170],{"id":170169},"_86-写入文件","8.6 写入文件",[19,170172,170173,170175],{},[33,170174,2462],{}," 模式会清空原文件。",[26,170177,170179],{"className":31709,"code":170178,"language":31711,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[33,170180,170181,170211,170228],{"__ignoreMap":31},[36,170182,170183,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203,170205,170207,170209],{"class":38,"line":39},[36,170184,109164],{"class":42},[36,170186,148122],{"class":73},[36,170188,222],{"class":50},[36,170190,148127],{"class":110},[36,170192,477],{"class":50},[36,170194,153307],{"class":110},[36,170196,477],{"class":50},[36,170198,148137],{"class":473},[36,170200,70],{"class":42},[36,170202,148142],{"class":110},[36,170204,15043],{"class":50},[36,170206,32714],{"class":42},[36,170208,149484],{"class":473},[36,170210,5230],{"class":50},[36,170212,170213,170216,170219,170222,170224,170226],{"class":38,"line":54},[36,170214,170215],{"class":473},"    file",[36,170217,170218],{"class":50},".write(",[36,170220,170221],{"class":110},"\"hello",[36,170223,157856],{"class":73},[36,170225,1919],{"class":110},[36,170227,1680],{"class":50},[36,170229,170230,170232,170234,170237,170239,170241],{"class":38,"line":61},[36,170231,170215],{"class":473},[36,170233,170218],{"class":50},[36,170235,170236],{"class":110},"\"python",[36,170238,157856],{"class":73},[36,170240,1919],{"class":110},[36,170242,1680],{"class":50},[19,170244,170245],{},"写入多行：",[26,170247,170249],{"className":31709,"code":170248,"language":31711,"meta":31,"style":31},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[33,170250,170251,170286,170290,170321],{"__ignoreMap":31},[36,170252,170253,170255,170257,170259,170262,170264,170266,170268,170271,170273,170275,170277,170280,170282,170284],{"class":38,"line":39},[36,170254,169982],{"class":50},[36,170256,70],{"class":42},[36,170258,53557],{"class":50},[36,170260,170261],{"class":110},"\"小明,18",[36,170263,157856],{"class":73},[36,170265,1919],{"class":110},[36,170267,477],{"class":50},[36,170269,170270],{"class":110},"\"小红,17",[36,170272,157856],{"class":73},[36,170274,1919],{"class":110},[36,170276,477],{"class":50},[36,170278,170279],{"class":110},"\"小刚,19",[36,170281,157856],{"class":73},[36,170283,1919],{"class":110},[36,170285,34577],{"class":50},[36,170287,170288],{"class":38,"line":54},[36,170289,58],{"emptyLinePlaceholder":57},[36,170291,170292,170294,170296,170298,170301,170303,170305,170307,170309,170311,170313,170315,170317,170319],{"class":38,"line":61},[36,170293,109164],{"class":42},[36,170295,148122],{"class":73},[36,170297,222],{"class":50},[36,170299,170300],{"class":110},"\"students.txt\"",[36,170302,477],{"class":50},[36,170304,153307],{"class":110},[36,170306,477],{"class":50},[36,170308,148137],{"class":473},[36,170310,70],{"class":42},[36,170312,148142],{"class":110},[36,170314,15043],{"class":50},[36,170316,32714],{"class":42},[36,170318,149484],{"class":473},[36,170320,5230],{"class":50},[36,170322,170323,170325],{"class":38,"line":80},[36,170324,170215],{"class":473},[36,170326,170327],{"class":50},".writelines(lines)\n",[14,170329,170331],{"id":170330},"_87-追加文件","8.7 追加文件",[19,170333,170334,170336],{},[33,170335,1906],{}," 模式不会清空原内容，而是在末尾追加。",[26,170338,170340],{"className":31709,"code":170339,"language":31711,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[33,170341,170342,170373],{"__ignoreMap":31},[36,170343,170344,170346,170348,170350,170353,170355,170357,170359,170361,170363,170365,170367,170369,170371],{"class":38,"line":39},[36,170345,109164],{"class":42},[36,170347,148122],{"class":73},[36,170349,222],{"class":50},[36,170351,170352],{"class":110},"\"log.txt\"",[36,170354,477],{"class":50},[36,170356,166656],{"class":110},[36,170358,477],{"class":50},[36,170360,148137],{"class":473},[36,170362,70],{"class":42},[36,170364,148142],{"class":110},[36,170366,15043],{"class":50},[36,170368,32714],{"class":42},[36,170370,149484],{"class":473},[36,170372,5230],{"class":50},[36,170374,170375,170377,170379,170382,170384,170386],{"class":38,"line":54},[36,170376,170215],{"class":473},[36,170378,170218],{"class":50},[36,170380,170381],{"class":110},"\"程序启动",[36,170383,157856],{"class":73},[36,170385,1919],{"class":110},[36,170387,1680],{"class":50},[19,170389,170390],{},"日志类文件常用追加模式。",[14,170392,170394],{"id":170393},"_88-文件编码","8.8 文件编码",[19,170396,170397],{},"编码决定文字如何保存为字节。",[19,170399,170400],{},"常见编码：",[256,170402,170403,170406],{},[259,170404,170405],{},"UTF-8：推荐。",[259,170407,170408],{},"GBK：部分 Windows 中文文件常见。",[19,170410,170411],{},"读取文件乱码时，可以尝试：",[26,170413,170415],{"className":31709,"code":170414,"language":31711,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[33,170416,170417,170448],{"__ignoreMap":31},[36,170418,170419,170421,170423,170425,170427,170429,170431,170433,170435,170437,170440,170442,170444,170446],{"class":38,"line":39},[36,170420,109164],{"class":42},[36,170422,148122],{"class":73},[36,170424,222],{"class":50},[36,170426,148127],{"class":110},[36,170428,477],{"class":50},[36,170430,148132],{"class":110},[36,170432,477],{"class":50},[36,170434,148137],{"class":473},[36,170436,70],{"class":42},[36,170438,170439],{"class":110},"\"gbk\"",[36,170441,15043],{"class":50},[36,170443,32714],{"class":42},[36,170445,149484],{"class":473},[36,170447,5230],{"class":50},[36,170449,170450,170452,170454,170456],{"class":38,"line":54},[36,170451,148154],{"class":50},[36,170453,70],{"class":42},[36,170455,149484],{"class":473},[36,170457,169832],{"class":50},[19,170459,170460],{},"写文件时建议统一 UTF-8：",[26,170462,170464],{"className":31709,"code":170463,"language":31711,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[33,170465,170466,170496],{"__ignoreMap":31},[36,170467,170468,170470,170472,170474,170476,170478,170480,170482,170484,170486,170488,170490,170492,170494],{"class":38,"line":39},[36,170469,109164],{"class":42},[36,170471,148122],{"class":73},[36,170473,222],{"class":50},[36,170475,148127],{"class":110},[36,170477,477],{"class":50},[36,170479,153307],{"class":110},[36,170481,477],{"class":50},[36,170483,148137],{"class":473},[36,170485,70],{"class":42},[36,170487,148142],{"class":110},[36,170489,15043],{"class":50},[36,170491,32714],{"class":42},[36,170493,149484],{"class":473},[36,170495,5230],{"class":50},[36,170497,170498,170500,170502,170505],{"class":38,"line":54},[36,170499,170215],{"class":473},[36,170501,170218],{"class":50},[36,170503,170504],{"class":110},"\"中文内容\"",[36,170506,1680],{"class":50},[14,170508,170510],{"id":170509},"_89-pathlib","8.9 pathlib",[19,170512,170513,170516],{},[33,170514,170515],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,170518,170520],{"className":31709,"code":170519,"language":31711,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[33,170521,170522,170532,170536,170554],{"__ignoreMap":31},[36,170523,170524,170526,170528,170530],{"class":38,"line":39},[36,170525,32068],{"class":42},[36,170527,109642],{"class":50},[36,170529,31723],{"class":42},[36,170531,109647],{"class":50},[36,170533,170534],{"class":38,"line":54},[36,170535,58],{"emptyLinePlaceholder":57},[36,170537,170538,170540,170542,170544,170547,170549,170551],{"class":38,"line":61},[36,170539,169642],{"class":50},[36,170541,70],{"class":42},[36,170543,109876],{"class":50},[36,170545,170546],{"class":110},"\"data\"",[36,170548,15043],{"class":50},[36,170550,2251],{"class":42},[36,170552,170553],{"class":110}," \"students.txt\"\n",[36,170555,170556,170558],{"class":38,"line":80},[36,170557,31746],{"class":73},[36,170559,170560],{"class":50},"(path)\n",[19,170562,170563],{},"创建目录：",[26,170565,170567],{"className":31709,"code":170566,"language":31711,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[33,170568,170569,170579,170583,170596],{"__ignoreMap":31},[36,170570,170571,170573,170575,170577],{"class":38,"line":39},[36,170572,32068],{"class":42},[36,170574,109642],{"class":50},[36,170576,31723],{"class":42},[36,170578,109647],{"class":50},[36,170580,170581],{"class":38,"line":54},[36,170582,58],{"emptyLinePlaceholder":57},[36,170584,170585,170588,170590,170592,170594],{"class":38,"line":61},[36,170586,170587],{"class":50},"data_dir ",[36,170589,70],{"class":42},[36,170591,109876],{"class":50},[36,170593,170546],{"class":110},[36,170595,1680],{"class":50},[36,170597,170598,170601,170604,170606,170608],{"class":38,"line":80},[36,170599,170600],{"class":50},"data_dir.mkdir(",[36,170602,170603],{"class":473},"exist_ok",[36,170605,70],{"class":42},[36,170607,32807],{"class":73},[36,170609,1680],{"class":50},[19,170611,170612],{},"判断文件是否存在：",[26,170614,170616],{"className":31709,"code":170615,"language":31711,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[33,170617,170618,170631,170635,170642],{"__ignoreMap":31},[36,170619,170620,170622,170624,170626,170629],{"class":38,"line":39},[36,170621,169642],{"class":50},[36,170623,70],{"class":42},[36,170625,109876],{"class":50},[36,170627,170628],{"class":110},"\"data\u002Fstudents.txt\"",[36,170630,1680],{"class":50},[36,170632,170633],{"class":38,"line":54},[36,170634,58],{"emptyLinePlaceholder":57},[36,170636,170637,170639],{"class":38,"line":61},[36,170638,3061],{"class":42},[36,170640,170641],{"class":50}," path.exists():\n",[36,170643,170644,170646,170648,170651],{"class":38,"line":80},[36,170645,32630],{"class":73},[36,170647,222],{"class":50},[36,170649,170650],{"class":110},"\"文件存在\"",[36,170652,1680],{"class":50},[19,170654,170655],{},"读写文本：",[26,170657,170659],{"className":31709,"code":170658,"language":31711,"meta":31,"style":31},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[33,170660,170661,170673,170677,170694,170711],{"__ignoreMap":31},[36,170662,170663,170665,170667,170669,170671],{"class":38,"line":39},[36,170664,169642],{"class":50},[36,170666,70],{"class":42},[36,170668,109876],{"class":50},[36,170670,148127],{"class":110},[36,170672,1680],{"class":50},[36,170674,170675],{"class":38,"line":54},[36,170676,58],{"emptyLinePlaceholder":57},[36,170678,170679,170682,170684,170686,170688,170690,170692],{"class":38,"line":61},[36,170680,170681],{"class":50},"path.write_text(",[36,170683,147207],{"class":110},[36,170685,477],{"class":50},[36,170687,148137],{"class":473},[36,170689,70],{"class":42},[36,170691,148142],{"class":110},[36,170693,1680],{"class":50},[36,170695,170696,170698,170700,170703,170705,170707,170709],{"class":38,"line":80},[36,170697,169825],{"class":50},[36,170699,70],{"class":42},[36,170701,170702],{"class":50}," path.read_text(",[36,170704,148137],{"class":473},[36,170706,70],{"class":42},[36,170708,148142],{"class":110},[36,170710,1680],{"class":50},[36,170712,170713,170715],{"class":38,"line":96},[36,170714,31746],{"class":73},[36,170716,169839],{"class":50},[14,170718,170720],{"id":170719},"_810-json文件","8.10 JSON文件",[19,170722,170723],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,170725,170727],{"className":31709,"code":170726,"language":31711,"meta":31,"style":31},"import json\n\nstudent = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n\ntext = json.dumps(student, ensure_ascii=False, indent=2)\nprint(text)\n",[33,170728,170729,170735,170739,170747,170757,170767,170775,170779,170783,170808],{"__ignoreMap":31},[36,170730,170731,170733],{"class":38,"line":39},[36,170732,31723],{"class":42},[36,170734,148422],{"class":50},[36,170736,170737],{"class":38,"line":54},[36,170738,58],{"emptyLinePlaceholder":57},[36,170740,170741,170743,170745],{"class":38,"line":61},[36,170742,150812],{"class":50},[36,170744,70],{"class":42},[36,170746,16901],{"class":50},[36,170748,170749,170751,170753,170755],{"class":38,"line":80},[36,170750,148351],{"class":110},[36,170752,52768],{"class":50},[36,170754,151219],{"class":110},[36,170756,32797],{"class":50},[36,170758,170759,170761,170763,170765],{"class":38,"line":96},[36,170760,165868],{"class":110},[36,170762,52768],{"class":50},[36,170764,2317],{"class":73},[36,170766,32797],{"class":50},[36,170768,170769,170771,170773],{"class":38,"line":101},[36,170770,165879],{"class":110},[36,170772,52768],{"class":50},[36,170774,165884],{"class":73},[36,170776,170777],{"class":38,"line":128},[36,170778,250],{"class":50},[36,170780,170781],{"class":38,"line":149},[36,170782,58],{"emptyLinePlaceholder":57},[36,170784,170785,170787,170789,170792,170794,170796,170798,170800,170802,170804,170806],{"class":38,"line":154},[36,170786,157775],{"class":50},[36,170788,70],{"class":42},[36,170790,170791],{"class":50}," json.dumps(student, ",[36,170793,148468],{"class":473},[36,170795,70],{"class":42},[36,170797,35318],{"class":73},[36,170799,477],{"class":50},[36,170801,153343],{"class":473},[36,170803,70],{"class":42},[36,170805,1747],{"class":73},[36,170807,1680],{"class":50},[36,170809,170810,170812],{"class":38,"line":167},[36,170811,31746],{"class":73},[36,170813,165402],{"class":50},[19,170815,170816],{},"写入 JSON 文件：",[26,170818,170820],{"className":31709,"code":170819,"language":31711,"meta":31,"style":31},"import json\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.json\", \"w\", encoding=\"utf-8\") as file:\n    json.dump(students, file, ensure_ascii=False, indent=2)\n",[33,170821,170822,170828,170832,170840,170868,170896,170900,170904,170934],{"__ignoreMap":31},[36,170823,170824,170826],{"class":38,"line":39},[36,170825,31723],{"class":42},[36,170827,148422],{"class":50},[36,170829,170830],{"class":38,"line":54},[36,170831,58],{"emptyLinePlaceholder":57},[36,170833,170834,170836,170838],{"class":38,"line":61},[36,170835,161047],{"class":50},[36,170837,70],{"class":42},[36,170839,56778],{"class":50},[36,170841,170842,170844,170846,170848,170850,170852,170854,170856,170858,170860,170862,170864,170866],{"class":38,"line":80},[36,170843,149716],{"class":50},[36,170845,64010],{"class":110},[36,170847,52768],{"class":50},[36,170849,151219],{"class":110},[36,170851,477],{"class":50},[36,170853,70455],{"class":110},[36,170855,52768],{"class":50},[36,170857,2317],{"class":73},[36,170859,477],{"class":50},[36,170861,152803],{"class":110},[36,170863,52768],{"class":50},[36,170865,2656],{"class":73},[36,170867,6419],{"class":50},[36,170869,170870,170872,170874,170876,170878,170880,170882,170884,170886,170888,170890,170892,170894],{"class":38,"line":96},[36,170871,149716],{"class":50},[36,170873,64010],{"class":110},[36,170875,52768],{"class":50},[36,170877,152267],{"class":110},[36,170879,477],{"class":50},[36,170881,70455],{"class":110},[36,170883,52768],{"class":50},[36,170885,2292],{"class":73},[36,170887,477],{"class":50},[36,170889,152803],{"class":110},[36,170891,52768],{"class":50},[36,170893,2478],{"class":73},[36,170895,6419],{"class":50},[36,170897,170898],{"class":38,"line":101},[36,170899,34577],{"class":50},[36,170901,170902],{"class":38,"line":128},[36,170903,58],{"emptyLinePlaceholder":57},[36,170905,170906,170908,170910,170912,170914,170916,170918,170920,170922,170924,170926,170928,170930,170932],{"class":38,"line":149},[36,170907,109164],{"class":42},[36,170909,148122],{"class":73},[36,170911,222],{"class":50},[36,170913,153162],{"class":110},[36,170915,477],{"class":50},[36,170917,153307],{"class":110},[36,170919,477],{"class":50},[36,170921,148137],{"class":473},[36,170923,70],{"class":42},[36,170925,148142],{"class":110},[36,170927,15043],{"class":50},[36,170929,32714],{"class":42},[36,170931,149484],{"class":473},[36,170933,5230],{"class":50},[36,170935,170936,170939,170941,170943,170945,170947,170949,170951,170953,170955,170957],{"class":38,"line":154},[36,170937,170938],{"class":50},"    json.dump(students, ",[36,170940,46685],{"class":473},[36,170942,477],{"class":50},[36,170944,148468],{"class":473},[36,170946,70],{"class":42},[36,170948,35318],{"class":73},[36,170950,477],{"class":50},[36,170952,153343],{"class":473},[36,170954,70],{"class":42},[36,170956,1747],{"class":73},[36,170958,1680],{"class":50},[19,170960,170961],{},"读取 JSON 文件：",[26,170963,170965],{"className":31709,"code":170964,"language":31711,"meta":31,"style":31},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[33,170966,170967,170973,170977,171007,171019,171023],{"__ignoreMap":31},[36,170968,170969,170971],{"class":38,"line":39},[36,170970,31723],{"class":42},[36,170972,148422],{"class":50},[36,170974,170975],{"class":38,"line":54},[36,170976,58],{"emptyLinePlaceholder":57},[36,170978,170979,170981,170983,170985,170987,170989,170991,170993,170995,170997,170999,171001,171003,171005],{"class":38,"line":61},[36,170980,109164],{"class":42},[36,170982,148122],{"class":73},[36,170984,222],{"class":50},[36,170986,153162],{"class":110},[36,170988,477],{"class":50},[36,170990,148132],{"class":110},[36,170992,477],{"class":50},[36,170994,148137],{"class":473},[36,170996,70],{"class":42},[36,170998,148142],{"class":110},[36,171000,15043],{"class":50},[36,171002,32714],{"class":42},[36,171004,149484],{"class":473},[36,171006,5230],{"class":50},[36,171008,171009,171011,171013,171015,171017],{"class":38,"line":80},[36,171010,154368],{"class":50},[36,171012,70],{"class":42},[36,171014,149495],{"class":50},[36,171016,46685],{"class":473},[36,171018,1680],{"class":50},[36,171020,171021],{"class":38,"line":96},[36,171022,58],{"emptyLinePlaceholder":57},[36,171024,171025,171027],{"class":38,"line":101},[36,171026,31746],{"class":73},[36,171028,166326],{"class":50},[14,171030,171032],{"id":171031},"_811-csv文件","8.11 CSV文件",[19,171034,171035],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171037,171038],{},"写入 CSV：",[26,171040,171042],{"className":31709,"code":171041,"language":31711,"meta":31,"style":31},"import csv\n\nstudents = [\n    [\"姓名\", \"年龄\", \"成绩\"],\n    [\"小明\", 18, 95],\n    [\"小红\", 17, 88],\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    writer = csv.writer(file)\n    writer.writerows(students)\n",[33,171043,171044,171051,171055,171063,171081,171097,171113,171117,171121,171161,171175],{"__ignoreMap":31},[36,171045,171046,171048],{"class":38,"line":39},[36,171047,31723],{"class":42},[36,171049,171050],{"class":50}," csv\n",[36,171052,171053],{"class":38,"line":54},[36,171054,58],{"emptyLinePlaceholder":57},[36,171056,171057,171059,171061],{"class":38,"line":61},[36,171058,161047],{"class":50},[36,171060,70],{"class":42},[36,171062,56778],{"class":50},[36,171064,171065,171068,171070,171072,171074,171076,171079],{"class":38,"line":80},[36,171066,171067],{"class":50},"    [",[36,171069,74430],{"class":110},[36,171071,477],{"class":50},[36,171073,74463],{"class":110},[36,171075,477],{"class":50},[36,171077,171078],{"class":110},"\"成绩\"",[36,171080,89167],{"class":50},[36,171082,171083,171085,171087,171089,171091,171093,171095],{"class":38,"line":96},[36,171084,171067],{"class":50},[36,171086,151219],{"class":110},[36,171088,477],{"class":50},[36,171090,2317],{"class":73},[36,171092,477],{"class":50},[36,171094,2656],{"class":73},[36,171096,89167],{"class":50},[36,171098,171099,171101,171103,171105,171107,171109,171111],{"class":38,"line":101},[36,171100,171067],{"class":50},[36,171102,152267],{"class":110},[36,171104,477],{"class":50},[36,171106,2292],{"class":73},[36,171108,477],{"class":50},[36,171110,2478],{"class":73},[36,171112,89167],{"class":50},[36,171114,171115],{"class":38,"line":128},[36,171116,34577],{"class":50},[36,171118,171119],{"class":38,"line":149},[36,171120,58],{"emptyLinePlaceholder":57},[36,171122,171123,171125,171127,171129,171132,171134,171136,171138,171140,171142,171144,171146,171149,171151,171153,171155,171157,171159],{"class":38,"line":154},[36,171124,109164],{"class":42},[36,171126,148122],{"class":73},[36,171128,222],{"class":50},[36,171130,171131],{"class":110},"\"students.csv\"",[36,171133,477],{"class":50},[36,171135,153307],{"class":110},[36,171137,477],{"class":50},[36,171139,148137],{"class":473},[36,171141,70],{"class":42},[36,171143,148142],{"class":110},[36,171145,477],{"class":50},[36,171147,171148],{"class":473},"newline",[36,171150,70],{"class":42},[36,171152,9126],{"class":110},[36,171154,15043],{"class":50},[36,171156,32714],{"class":42},[36,171158,149484],{"class":473},[36,171160,5230],{"class":50},[36,171162,171163,171166,171168,171171,171173],{"class":38,"line":167},[36,171164,171165],{"class":50},"    writer ",[36,171167,70],{"class":42},[36,171169,171170],{"class":50}," csv.writer(",[36,171172,46685],{"class":473},[36,171174,1680],{"class":50},[36,171176,171177],{"class":38,"line":172},[36,171178,171179],{"class":50},"    writer.writerows(students)\n",[19,171181,171182],{},"读取 CSV：",[26,171184,171186],{"className":31709,"code":171185,"language":31711,"meta":31,"style":31},"import csv\n\nwith open(\"students.csv\", \"r\", encoding=\"utf-8\") as file:\n    reader = csv.reader(file)\n    for row in reader:\n        print(row)\n",[33,171187,171188,171194,171198,171228,171242,171254],{"__ignoreMap":31},[36,171189,171190,171192],{"class":38,"line":39},[36,171191,31723],{"class":42},[36,171193,171050],{"class":50},[36,171195,171196],{"class":38,"line":54},[36,171197,58],{"emptyLinePlaceholder":57},[36,171199,171200,171202,171204,171206,171208,171210,171212,171214,171216,171218,171220,171222,171224,171226],{"class":38,"line":61},[36,171201,109164],{"class":42},[36,171203,148122],{"class":73},[36,171205,222],{"class":50},[36,171207,171131],{"class":110},[36,171209,477],{"class":50},[36,171211,148132],{"class":110},[36,171213,477],{"class":50},[36,171215,148137],{"class":473},[36,171217,70],{"class":42},[36,171219,148142],{"class":110},[36,171221,15043],{"class":50},[36,171223,32714],{"class":42},[36,171225,149484],{"class":473},[36,171227,5230],{"class":50},[36,171229,171230,171233,171235,171238,171240],{"class":38,"line":80},[36,171231,171232],{"class":50},"    reader ",[36,171234,70],{"class":42},[36,171236,171237],{"class":50}," csv.reader(",[36,171239,46685],{"class":473},[36,171241,1680],{"class":50},[36,171243,171244,171246,171249,171251],{"class":38,"line":96},[36,171245,4692],{"class":42},[36,171247,171248],{"class":50}," row ",[36,171250,27374],{"class":42},[36,171252,171253],{"class":50}," reader:\n",[36,171255,171256,171258],{"class":38,"line":101},[36,171257,33782],{"class":73},[36,171259,171260],{"class":50},"(row)\n",[19,171262,171263],{},"使用字典写入：",[26,171265,171267],{"className":31709,"code":171266,"language":31711,"meta":31,"style":31},"import csv\n\nstudents = [\n    {\"name\": \"小明\", \"age\": 18, \"score\": 95},\n    {\"name\": \"小红\", \"age\": 17, \"score\": 88},\n]\n\nwith open(\"students.csv\", \"w\", encoding=\"utf-8\", newline=\"\") as file:\n    fieldnames = [\"name\", \"age\", \"score\"]\n    writer = csv.DictWriter(file, fieldnames=fieldnames)\n    writer.writeheader()\n    writer.writerows(students)\n",[33,171268,171269,171275,171279,171287,171315,171343,171347,171351,171389,171410,171431,171436],{"__ignoreMap":31},[36,171270,171271,171273],{"class":38,"line":39},[36,171272,31723],{"class":42},[36,171274,171050],{"class":50},[36,171276,171277],{"class":38,"line":54},[36,171278,58],{"emptyLinePlaceholder":57},[36,171280,171281,171283,171285],{"class":38,"line":61},[36,171282,161047],{"class":50},[36,171284,70],{"class":42},[36,171286,56778],{"class":50},[36,171288,171289,171291,171293,171295,171297,171299,171301,171303,171305,171307,171309,171311,171313],{"class":38,"line":80},[36,171290,149716],{"class":50},[36,171292,64010],{"class":110},[36,171294,52768],{"class":50},[36,171296,151219],{"class":110},[36,171298,477],{"class":50},[36,171300,70455],{"class":110},[36,171302,52768],{"class":50},[36,171304,2317],{"class":73},[36,171306,477],{"class":50},[36,171308,152803],{"class":110},[36,171310,52768],{"class":50},[36,171312,2656],{"class":73},[36,171314,6419],{"class":50},[36,171316,171317,171319,171321,171323,171325,171327,171329,171331,171333,171335,171337,171339,171341],{"class":38,"line":96},[36,171318,149716],{"class":50},[36,171320,64010],{"class":110},[36,171322,52768],{"class":50},[36,171324,152267],{"class":110},[36,171326,477],{"class":50},[36,171328,70455],{"class":110},[36,171330,52768],{"class":50},[36,171332,2292],{"class":73},[36,171334,477],{"class":50},[36,171336,152803],{"class":110},[36,171338,52768],{"class":50},[36,171340,2478],{"class":73},[36,171342,6419],{"class":50},[36,171344,171345],{"class":38,"line":101},[36,171346,34577],{"class":50},[36,171348,171349],{"class":38,"line":128},[36,171350,58],{"emptyLinePlaceholder":57},[36,171352,171353,171355,171357,171359,171361,171363,171365,171367,171369,171371,171373,171375,171377,171379,171381,171383,171385,171387],{"class":38,"line":149},[36,171354,109164],{"class":42},[36,171356,148122],{"class":73},[36,171358,222],{"class":50},[36,171360,171131],{"class":110},[36,171362,477],{"class":50},[36,171364,153307],{"class":110},[36,171366,477],{"class":50},[36,171368,148137],{"class":473},[36,171370,70],{"class":42},[36,171372,148142],{"class":110},[36,171374,477],{"class":50},[36,171376,171148],{"class":473},[36,171378,70],{"class":42},[36,171380,9126],{"class":110},[36,171382,15043],{"class":50},[36,171384,32714],{"class":42},[36,171386,149484],{"class":473},[36,171388,5230],{"class":50},[36,171390,171391,171394,171396,171398,171400,171402,171404,171406,171408],{"class":38,"line":154},[36,171392,171393],{"class":50},"    fieldnames ",[36,171395,70],{"class":42},[36,171397,53557],{"class":50},[36,171399,64010],{"class":110},[36,171401,477],{"class":50},[36,171403,70455],{"class":110},[36,171405,477],{"class":50},[36,171407,152803],{"class":110},[36,171409,34577],{"class":50},[36,171411,171412,171414,171416,171419,171421,171423,171426,171428],{"class":38,"line":167},[36,171413,171165],{"class":50},[36,171415,70],{"class":42},[36,171417,171418],{"class":50}," csv.DictWriter(",[36,171420,46685],{"class":473},[36,171422,477],{"class":50},[36,171424,171425],{"class":473},"fieldnames",[36,171427,70],{"class":42},[36,171429,171430],{"class":50},"fieldnames)\n",[36,171432,171433],{"class":38,"line":172},[36,171434,171435],{"class":50},"    writer.writeheader()\n",[36,171437,171438],{"class":38,"line":192},[36,171439,171179],{"class":50},[14,171441,171443],{"id":171442},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171445,124623],{},[256,171447,171448,171451,171454],{},[259,171449,171450],{},"读取文本文件。",[259,171452,171453],{},"统计每个单词出现次数。",[259,171455,171456],{},"输出出现次数最多的前 10 个单词。",[19,171458,11501],{},[26,171460,171462],{"className":31709,"code":171461,"language":31711,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"article.txt\")\ncontent = path.read_text(encoding=\"utf-8\")\n\nwords = content.lower().split()\ncounter = {}\n\nfor word in words:\n    word = word.strip(\".,!?;:\\\"'()[]\")\n    if not word:\n        continue\n    counter[word] = counter.get(word, 0) + 1\n\nitems = sorted(counter.items(), key=lambda item: item[1], reverse=True)\n\nfor word, count in items[:10]:\n    print(word, count)\n",[33,171463,171464,171474,171478,171491,171507,171511,171521,171530,171534,171546,171566,171575,171579,171597,171601,171631,171635,171651],{"__ignoreMap":31},[36,171465,171466,171468,171470,171472],{"class":38,"line":39},[36,171467,32068],{"class":42},[36,171469,109642],{"class":50},[36,171471,31723],{"class":42},[36,171473,109647],{"class":50},[36,171475,171476],{"class":38,"line":54},[36,171477,58],{"emptyLinePlaceholder":57},[36,171479,171480,171482,171484,171486,171489],{"class":38,"line":61},[36,171481,169642],{"class":50},[36,171483,70],{"class":42},[36,171485,109876],{"class":50},[36,171487,171488],{"class":110},"\"article.txt\"",[36,171490,1680],{"class":50},[36,171492,171493,171495,171497,171499,171501,171503,171505],{"class":38,"line":80},[36,171494,169825],{"class":50},[36,171496,70],{"class":42},[36,171498,170702],{"class":50},[36,171500,148137],{"class":473},[36,171502,70],{"class":42},[36,171504,148142],{"class":110},[36,171506,1680],{"class":50},[36,171508,171509],{"class":38,"line":96},[36,171510,58],{"emptyLinePlaceholder":57},[36,171512,171513,171516,171518],{"class":38,"line":101},[36,171514,171515],{"class":50},"words ",[36,171517,70],{"class":42},[36,171519,171520],{"class":50}," content.lower().split()\n",[36,171522,171523,171526,171528],{"class":38,"line":128},[36,171524,171525],{"class":50},"counter ",[36,171527,70],{"class":42},[36,171529,89199],{"class":50},[36,171531,171532],{"class":38,"line":149},[36,171533,58],{"emptyLinePlaceholder":57},[36,171535,171536,171538,171541,171543],{"class":38,"line":154},[36,171537,4516],{"class":42},[36,171539,171540],{"class":50}," word ",[36,171542,27374],{"class":42},[36,171544,171545],{"class":50}," words:\n",[36,171547,171548,171551,171553,171556,171559,171561,171564],{"class":38,"line":167},[36,171549,171550],{"class":50},"    word ",[36,171552,70],{"class":42},[36,171554,171555],{"class":50}," word.strip(",[36,171557,171558],{"class":110},"\".,!?;:",[36,171560,157826],{"class":73},[36,171562,171563],{"class":110},"'()[]\"",[36,171565,1680],{"class":50},[36,171567,171568,171570,171572],{"class":38,"line":172},[36,171569,4592],{"class":42},[36,171571,40261],{"class":42},[36,171573,171574],{"class":50}," word:\n",[36,171576,171577],{"class":38,"line":192},[36,171578,149843],{"class":42},[36,171580,171581,171584,171586,171589,171591,171593,171595],{"class":38,"line":211},[36,171582,171583],{"class":50},"    counter[word] ",[36,171585,70],{"class":42},[36,171587,171588],{"class":50}," counter.get(word, ",[36,171590,1859],{"class":73},[36,171592,15043],{"class":50},[36,171594,2148],{"class":42},[36,171596,57030],{"class":73},[36,171598,171599],{"class":38,"line":216},[36,171600,58],{"emptyLinePlaceholder":57},[36,171602,171603,171606,171608,171610,171613,171615,171617,171619,171621,171623,171625,171627,171629],{"class":38,"line":231},[36,171604,171605],{"class":50},"items ",[36,171607,70],{"class":42},[36,171609,164935],{"class":73},[36,171611,171612],{"class":50},"(counter.items(), ",[36,171614,155277],{"class":473},[36,171616,155280],{"class":42},[36,171618,155283],{"class":50},[36,171620,1885],{"class":73},[36,171622,113533],{"class":50},[36,171624,164859],{"class":473},[36,171626,70],{"class":42},[36,171628,32807],{"class":73},[36,171630,1680],{"class":50},[36,171632,171633],{"class":38,"line":236},[36,171634,58],{"emptyLinePlaceholder":57},[36,171636,171637,171639,171642,171644,171647,171649],{"class":38,"line":247},[36,171638,4516],{"class":42},[36,171640,171641],{"class":50}," word, count ",[36,171643,27374],{"class":42},[36,171645,171646],{"class":50}," items[:",[36,171648,2113],{"class":73},[36,171650,167086],{"class":50},[36,171652,171653,171655],{"class":38,"line":637},[36,171654,32630],{"class":73},[36,171656,171657],{"class":50},"(word, count)\n",[14,171659,171661],{"id":171660},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,171663,171665],{"className":31709,"code":171664,"language":31711,"meta":31,"style":31},"import json\nfrom pathlib import Path\n\nDATA_FILE = Path(\"students.json\")\n\n\ndef load_students():\n    if not DATA_FILE.exists():\n        return []\n\n    with open(DATA_FILE, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef save_students(students):\n    with open(DATA_FILE, \"w\", encoding=\"utf-8\") as file:\n        json.dump(students, file, ensure_ascii=False, indent=2)\n\n\nstudents = load_students()\nstudents.append({\"name\": \"小明\", \"age\": 18, \"score\": 95})\nsave_students(students)\nprint(\"保存成功\")\n",[33,171666,171667,171673,171683,171687,171699,171703,171707,171715,171725,171731,171735,171765,171775,171779,171783,171791,171821,171845,171849,171853,171861,171890,171895],{"__ignoreMap":31},[36,171668,171669,171671],{"class":38,"line":39},[36,171670,31723],{"class":42},[36,171672,148422],{"class":50},[36,171674,171675,171677,171679,171681],{"class":38,"line":54},[36,171676,32068],{"class":42},[36,171678,109642],{"class":50},[36,171680,31723],{"class":42},[36,171682,109647],{"class":50},[36,171684,171685],{"class":38,"line":61},[36,171686,58],{"emptyLinePlaceholder":57},[36,171688,171689,171691,171693,171695,171697],{"class":38,"line":80},[36,171690,153155],{"class":73},[36,171692,14893],{"class":42},[36,171694,109876],{"class":50},[36,171696,153162],{"class":110},[36,171698,1680],{"class":50},[36,171700,171701],{"class":38,"line":96},[36,171702,58],{"emptyLinePlaceholder":57},[36,171704,171705],{"class":38,"line":101},[36,171706,58],{"emptyLinePlaceholder":57},[36,171708,171709,171711,171713],{"class":38,"line":128},[36,171710,33278],{"class":42},[36,171712,153179],{"class":46},[36,171714,33284],{"class":50},[36,171716,171717,171719,171721,171723],{"class":38,"line":149},[36,171718,4592],{"class":42},[36,171720,40261],{"class":42},[36,171722,153190],{"class":73},[36,171724,153193],{"class":50},[36,171726,171727,171729],{"class":38,"line":154},[36,171728,16081],{"class":42},[36,171730,53169],{"class":50},[36,171732,171733],{"class":38,"line":167},[36,171734,58],{"emptyLinePlaceholder":57},[36,171736,171737,171739,171741,171743,171745,171747,171749,171751,171753,171755,171757,171759,171761,171763],{"class":38,"line":172},[36,171738,35509],{"class":42},[36,171740,148122],{"class":73},[36,171742,222],{"class":50},[36,171744,153155],{"class":73},[36,171746,477],{"class":50},[36,171748,148132],{"class":110},[36,171750,477],{"class":50},[36,171752,148137],{"class":473},[36,171754,70],{"class":42},[36,171756,148142],{"class":110},[36,171758,15043],{"class":50},[36,171760,32714],{"class":42},[36,171762,149484],{"class":473},[36,171764,5230],{"class":50},[36,171766,171767,171769,171771,171773],{"class":38,"line":192},[36,171768,16081],{"class":42},[36,171770,149495],{"class":50},[36,171772,46685],{"class":473},[36,171774,1680],{"class":50},[36,171776,171777],{"class":38,"line":211},[36,171778,58],{"emptyLinePlaceholder":57},[36,171780,171781],{"class":38,"line":216},[36,171782,58],{"emptyLinePlaceholder":57},[36,171784,171785,171787,171789],{"class":38,"line":231},[36,171786,33278],{"class":42},[36,171788,153289],{"class":46},[36,171790,153292],{"class":50},[36,171792,171793,171795,171797,171799,171801,171803,171805,171807,171809,171811,171813,171815,171817,171819],{"class":38,"line":236},[36,171794,35509],{"class":42},[36,171796,148122],{"class":73},[36,171798,222],{"class":50},[36,171800,153155],{"class":73},[36,171802,477],{"class":50},[36,171804,153307],{"class":110},[36,171806,477],{"class":50},[36,171808,148137],{"class":473},[36,171810,70],{"class":42},[36,171812,148142],{"class":110},[36,171814,15043],{"class":50},[36,171816,32714],{"class":42},[36,171818,149484],{"class":473},[36,171820,5230],{"class":50},[36,171822,171823,171825,171827,171829,171831,171833,171835,171837,171839,171841,171843],{"class":38,"line":247},[36,171824,153328],{"class":50},[36,171826,46685],{"class":473},[36,171828,477],{"class":50},[36,171830,148468],{"class":473},[36,171832,70],{"class":42},[36,171834,35318],{"class":73},[36,171836,477],{"class":50},[36,171838,153343],{"class":473},[36,171840,70],{"class":42},[36,171842,1747],{"class":73},[36,171844,1680],{"class":50},[36,171846,171847],{"class":38,"line":637},[36,171848,58],{"emptyLinePlaceholder":57},[36,171850,171851],{"class":38,"line":646},[36,171852,58],{"emptyLinePlaceholder":57},[36,171854,171855,171857,171859],{"class":38,"line":655},[36,171856,161047],{"class":50},[36,171858,70],{"class":42},[36,171860,154373],{"class":50},[36,171862,171863,171866,171868,171870,171872,171874,171876,171878,171880,171882,171884,171886,171888],{"class":38,"line":660},[36,171864,171865],{"class":50},"students.append({",[36,171867,64010],{"class":110},[36,171869,52768],{"class":50},[36,171871,151219],{"class":110},[36,171873,477],{"class":50},[36,171875,70455],{"class":110},[36,171877,52768],{"class":50},[36,171879,2317],{"class":73},[36,171881,477],{"class":50},[36,171883,152803],{"class":110},[36,171885,52768],{"class":50},[36,171887,2656],{"class":73},[36,171889,166483],{"class":50},[36,171891,171892],{"class":38,"line":665},[36,171893,171894],{"class":50},"save_students(students)\n",[36,171896,171897,171899,171901,171904],{"class":38,"line":674},[36,171898,31746],{"class":73},[36,171900,222],{"class":50},[36,171902,171903],{"class":110},"\"保存成功\"",[36,171905,1680],{"class":50},[14,171907,171909],{"id":171908},"_814-易错点","8.14 易错点",[256,171911,171912,171916,171922,171927,171934,171941],{},[259,171913,171914,170175],{},[33,171915,2462],{},[259,171917,171918,171919,29716],{},"读写中文要指定 ",[33,171920,171921],{},"encoding=\"utf-8\"",[259,171923,171924,171925,29716],{},"打开文件后要关闭，推荐使用 ",[33,171926,109164],{},[259,171928,171929,171930,171933],{},"读取大文件不要直接 ",[33,171931,171932],{},"read()"," 全部内容。",[259,171935,171936,171937,171940],{},"Windows 写 CSV 时建议加 ",[33,171938,171939],{},"newline=\"\"","，避免空行。",[259,171942,171943],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171945,171947],{"id":171946},"_815-本章练习","8.15 本章练习",[256,171949,171950,171957,171962,171965,171968],{},[259,171951,171952,171953,171956],{},"写入一个 ",[33,171954,171955],{},"students.txt","，每行保存一个学生姓名。",[259,171958,105686,171959,171961],{},[33,171960,171955],{}," 并输出所有学生。",[259,171963,171964],{},"把学生列表保存为 JSON 文件。",[259,171966,171967],{},"从 JSON 文件读取学生数据，计算平均分。",[259,171969,171970,171971,171974,171975,171978],{},"写一个日志函数 ",[33,171972,171973],{},"write_log(message)","，每次调用向 ",[33,171976,171977],{},"app.log"," 追加一行。",[1592,171980,171981],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":31,"searchDepth":54,"depth":54,"links":171983},[171984,171985,171989,171990,171996,171997,171998,171999,172000,172001,172002,172003,172004,172005,172006],{"id":169495,"depth":54,"text":169496},{"id":169536,"depth":54,"text":169537,"children":171986},[171987,171988],{"id":169540,"depth":61,"text":169541},{"id":169574,"depth":61,"text":169575},{"id":169688,"depth":54,"text":169689},{"id":169781,"depth":54,"text":169782,"children":171991},[171992,171993,171994,171995],{"id":169785,"depth":61,"text":169786},{"id":169872,"depth":61,"text":169873},{"id":169942,"depth":61,"text":169943},{"id":170036,"depth":61,"text":170037},{"id":170106,"depth":54,"text":170107},{"id":170169,"depth":54,"text":170170},{"id":170330,"depth":54,"text":170331},{"id":170393,"depth":54,"text":170394},{"id":170509,"depth":54,"text":170510},{"id":170719,"depth":54,"text":170720},{"id":171031,"depth":54,"text":171032},{"id":171442,"depth":54,"text":171443},{"id":171660,"depth":54,"text":171661},{"id":171908,"depth":54,"text":171909},{"id":171946,"depth":54,"text":171947},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169487,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172013,"title":172014,"body":172015,"description":24706,"extension":1603,"meta":174201,"navigation":57,"path":174202,"seo":174203,"stem":174204,"__hash__":174205},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172016,"toc":174168},[172017,172020,172024,172027,172030,172122,172124,172143,172148,172152,172155,172158,172187,172194,172197,172201,172204,172233,172235,172287,172293,172346,172350,172448,172451,172518,172522,172579,172581,172587,172591,172596,172602,172693,172698,172702,172705,172783,172786,172824,172828,172946,172949,172953,172956,173001,173004,173008,173013,173019,173069,173072,173103,173107,173111,173141,173145,173180,173184,173219,173259,173263,173279,173282,173286,173290,173369,173373,173414,173418,173473,173477,173511,173515,173545,173554,173561,173567,173624,173627,173635,173638,173642,173649,173652,173658,173661,173678,173683,173687,173693,173706,173709,173746,173749,173760,173763,173777,173780,173794,173798,173805,173838,173841,173843,173849,173852,173856,173858,173864,173869,174042,174046,174109,174113,174137,174141,174165],[10,172018,172014],{"id":172019},"_9-异常模块与包",[14,172021,172023],{"id":172022},"_91-什么是异常","9.1 什么是异常",[19,172025,172026],{},"异常是程序运行过程中出现的错误。",[19,172028,172029],{},"常见异常：",[1806,172031,172032,172041],{},[1809,172033,172034],{},[1812,172035,172036,172039],{},[1815,172037,172038],{},"异常",[1815,172040,27200],{},[1852,172042,172043,172053,172063,172072,172082,172092,172102,172112],{},[1812,172044,172045,172050],{},[1857,172046,172047],{},[33,172048,172049],{},"NameError",[1857,172051,172052],{},"使用了未定义变量",[1812,172054,172055,172060],{},[1857,172056,172057],{},[33,172058,172059],{},"TypeError",[1857,172061,172062],{},"类型不匹配",[1812,172064,172065,172069],{},[1857,172066,172067],{},[33,172068,156165],{},[1857,172070,172071],{},"值不合法",[1812,172073,172074,172079],{},[1857,172075,172076],{},[33,172077,172078],{},"IndexError",[1857,172080,172081],{},"列表索引越界",[1812,172083,172084,172089],{},[1857,172085,172086],{},[33,172087,172088],{},"KeyError",[1857,172090,172091],{},"字典 key 不存在",[1812,172093,172094,172099],{},[1857,172095,172096],{},[33,172097,172098],{},"FileNotFoundError",[1857,172100,172101],{},"文件不存在",[1812,172103,172104,172109],{},[1857,172105,172106],{},[33,172107,172108],{},"ZeroDivisionError",[1857,172110,172111],{},"除数为 0",[1812,172113,172114,172119],{},[1857,172115,172116],{},[33,172117,172118],{},"ImportError",[1857,172120,172121],{},"导入失败",[19,172123,16464],{},[26,172125,172127],{"className":31709,"code":172126,"language":31711,"meta":31,"style":31},"num = int(\"abc\")\n",[33,172128,172129],{"__ignoreMap":31},[36,172130,172131,172133,172135,172137,172139,172141],{"class":38,"line":39},[36,172132,157118],{"class":50},[36,172134,70],{"class":42},[36,172136,965],{"class":73},[36,172138,222],{"class":50},[36,172140,157211],{"class":110},[36,172142,1680],{"class":50},[19,172144,172145,172146,29716],{},"会触发 ",[33,172147,156165],{},[14,172149,172151],{"id":172150},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172153,172154],{},"如果不处理异常，程序会直接终止。",[19,172156,172157],{},"例如用户输入年龄：",[26,172159,172161],{"className":31709,"code":172160,"language":31711,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[33,172162,172163,172181],{"__ignoreMap":31},[36,172164,172165,172167,172169,172171,172173,172175,172177,172179],{"class":38,"line":39},[36,172166,147877],{"class":50},[36,172168,70],{"class":42},[36,172170,965],{"class":73},[36,172172,222],{"class":50},[36,172174,55152],{"class":73},[36,172176,222],{"class":50},[36,172178,153725],{"class":110},[36,172180,31828],{"class":50},[36,172182,172183,172185],{"class":38,"line":54},[36,172184,31746],{"class":73},[36,172186,157092],{"class":50},[19,172188,172189,172190,172193],{},"用户输入 ",[33,172191,172192],{},"abc","，程序就会报错退出。",[19,172195,172196],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172198,172200],{"id":172199},"_93-try-except","9.3 try except",[19,172202,172203],{},"基础语法：",[26,172205,172207],{"className":31709,"code":172206,"language":31711,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[33,172208,172209,172216,172221,172228],{"__ignoreMap":31},[36,172210,172211,172214],{"class":38,"line":39},[36,172212,172213],{"class":42},"try",[36,172215,5230],{"class":50},[36,172217,172218],{"class":38,"line":54},[36,172219,172220],{"class":50},"    可能出错的代码\n",[36,172222,172223,172226],{"class":38,"line":61},[36,172224,172225],{"class":42},"except",[36,172227,5230],{"class":50},[36,172229,172230],{"class":38,"line":80},[36,172231,172232],{"class":50},"    出错后的处理代码\n",[19,172234,16464],{},[26,172236,172238],{"className":31709,"code":172237,"language":31711,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[33,172239,172240,172246,172264,172270,172276],{"__ignoreMap":31},[36,172241,172242,172244],{"class":38,"line":39},[36,172243,172213],{"class":42},[36,172245,5230],{"class":50},[36,172247,172248,172250,172252,172254,172256,172258,172260,172262],{"class":38,"line":54},[36,172249,153717],{"class":50},[36,172251,70],{"class":42},[36,172253,965],{"class":73},[36,172255,222],{"class":50},[36,172257,55152],{"class":73},[36,172259,222],{"class":50},[36,172261,153725],{"class":110},[36,172263,31828],{"class":50},[36,172265,172266,172268],{"class":38,"line":61},[36,172267,32630],{"class":73},[36,172269,157092],{"class":50},[36,172271,172272,172274],{"class":38,"line":80},[36,172273,172225],{"class":42},[36,172275,5230],{"class":50},[36,172277,172278,172280,172282,172285],{"class":38,"line":96},[36,172279,32630],{"class":73},[36,172281,222],{"class":50},[36,172283,172284],{"class":110},"\"年龄必须是数字\"",[36,172286,1680],{"class":50},[19,172288,172289,172290,172292],{},"不建议裸写 ",[33,172291,172225],{},"，最好指定异常类型。",[26,172294,172296],{"className":31709,"code":172295,"language":31711,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[33,172297,172298,172304,172322,172328,172336],{"__ignoreMap":31},[36,172299,172300,172302],{"class":38,"line":39},[36,172301,172213],{"class":42},[36,172303,5230],{"class":50},[36,172305,172306,172308,172310,172312,172314,172316,172318,172320],{"class":38,"line":54},[36,172307,153717],{"class":50},[36,172309,70],{"class":42},[36,172311,965],{"class":73},[36,172313,222],{"class":50},[36,172315,55152],{"class":73},[36,172317,222],{"class":50},[36,172319,153725],{"class":110},[36,172321,31828],{"class":50},[36,172323,172324,172326],{"class":38,"line":61},[36,172325,32630],{"class":73},[36,172327,157092],{"class":50},[36,172329,172330,172332,172334],{"class":38,"line":80},[36,172331,172225],{"class":42},[36,172333,153557],{"class":73},[36,172335,5230],{"class":50},[36,172337,172338,172340,172342,172344],{"class":38,"line":96},[36,172339,32630],{"class":73},[36,172341,222],{"class":50},[36,172343,172284],{"class":110},[36,172345,1680],{"class":50},[14,172347,172349],{"id":172348},"_94-捕获多个异常","9.4 捕获多个异常",[26,172351,172353],{"className":31709,"code":172352,"language":31711,"meta":31,"style":31},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[33,172354,172355,172361,172382,172402,172409,172417,172428,172437],{"__ignoreMap":31},[36,172356,172357,172359],{"class":38,"line":39},[36,172358,172213],{"class":42},[36,172360,5230],{"class":50},[36,172362,172363,172366,172368,172370,172372,172374,172376,172378,172380],{"class":38,"line":54},[36,172364,172365],{"class":50},"    nums ",[36,172367,70],{"class":42},[36,172369,53557],{"class":50},[36,172371,1885],{"class":73},[36,172373,477],{"class":50},[36,172375,1747],{"class":73},[36,172377,477],{"class":50},[36,172379,1741],{"class":73},[36,172381,34577],{"class":50},[36,172383,172384,172387,172389,172391,172393,172395,172397,172400],{"class":38,"line":61},[36,172385,172386],{"class":50},"    index ",[36,172388,70],{"class":42},[36,172390,965],{"class":73},[36,172392,222],{"class":50},[36,172394,55152],{"class":73},[36,172396,222],{"class":50},[36,172398,172399],{"class":110},"\"请输入索引:\"",[36,172401,31828],{"class":50},[36,172403,172404,172406],{"class":38,"line":80},[36,172405,32630],{"class":73},[36,172407,172408],{"class":50},"(nums[index])\n",[36,172410,172411,172413,172415],{"class":38,"line":96},[36,172412,172225],{"class":42},[36,172414,153557],{"class":73},[36,172416,5230],{"class":50},[36,172418,172419,172421,172423,172426],{"class":38,"line":101},[36,172420,32630],{"class":73},[36,172422,222],{"class":50},[36,172424,172425],{"class":110},"\"索引必须是整数\"",[36,172427,1680],{"class":50},[36,172429,172430,172432,172435],{"class":38,"line":128},[36,172431,172225],{"class":42},[36,172433,172434],{"class":73}," IndexError",[36,172436,5230],{"class":50},[36,172438,172439,172441,172443,172446],{"class":38,"line":149},[36,172440,32630],{"class":73},[36,172442,222],{"class":50},[36,172444,172445],{"class":110},"\"索引越界\"",[36,172447,1680],{"class":50},[19,172449,172450],{},"多个异常使用相同处理逻辑：",[26,172452,172454],{"className":31709,"code":172453,"language":31711,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[33,172455,172456,172462,172480,172493,172507],{"__ignoreMap":31},[36,172457,172458,172460],{"class":38,"line":39},[36,172459,172213],{"class":42},[36,172461,5230],{"class":50},[36,172463,172464,172466,172468,172470,172472,172474,172476,172478],{"class":38,"line":54},[36,172465,46924],{"class":50},[36,172467,70],{"class":42},[36,172469,965],{"class":73},[36,172471,222],{"class":50},[36,172473,55152],{"class":73},[36,172475,222],{"class":50},[36,172477,157127],{"class":110},[36,172479,31828],{"class":50},[36,172481,172482,172484,172486,172488,172490],{"class":38,"line":61},[36,172483,32630],{"class":73},[36,172485,222],{"class":50},[36,172487,2113],{"class":73},[36,172489,157377],{"class":42},[36,172491,172492],{"class":50}," num)\n",[36,172494,172495,172497,172499,172501,172503,172505],{"class":38,"line":80},[36,172496,172225],{"class":42},[36,172498,3180],{"class":50},[36,172500,156165],{"class":73},[36,172502,477],{"class":50},[36,172504,172108],{"class":73},[36,172506,32117],{"class":50},[36,172508,172509,172511,172513,172516],{"class":38,"line":96},[36,172510,32630],{"class":73},[36,172512,222],{"class":50},[36,172514,172515],{"class":110},"\"输入不合法\"",[36,172517,1680],{"class":50},[14,172519,172521],{"id":172520},"_95-获取异常信息","9.5 获取异常信息",[26,172523,172525],{"className":31709,"code":172524,"language":31711,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[33,172526,172527,172533,172547,172558],{"__ignoreMap":31},[36,172528,172529,172531],{"class":38,"line":39},[36,172530,172213],{"class":42},[36,172532,5230],{"class":50},[36,172534,172535,172537,172539,172541,172543,172545],{"class":38,"line":54},[36,172536,46924],{"class":50},[36,172538,70],{"class":42},[36,172540,965],{"class":73},[36,172542,222],{"class":50},[36,172544,157211],{"class":110},[36,172546,1680],{"class":50},[36,172548,172549,172551,172553,172555],{"class":38,"line":61},[36,172550,172225],{"class":42},[36,172552,153557],{"class":73},[36,172554,65935],{"class":42},[36,172556,172557],{"class":50}," e:\n",[36,172559,172560,172562,172564,172566,172569,172571,172573,172575,172577],{"class":38,"line":80},[36,172561,32630],{"class":73},[36,172563,222],{"class":50},[36,172565,1724],{"class":42},[36,172567,172568],{"class":110},"\"出错了:",[36,172570,2563],{"class":73},[36,172572,1744],{"class":50},[36,172574,2613],{"class":73},[36,172576,1919],{"class":110},[36,172578,1680],{"class":50},[19,172580,147788],{},[26,172582,172585],{"className":172583,"code":172584,"language":6676,"meta":31},[6674],"出错了:invalid literal for int() with base 10: 'abc'\n",[33,172586,172584],{"__ignoreMap":31},[14,172588,172590],{"id":172589},"_96-else和finally","9.6 else和finally",[19,172592,172593,172595],{},[33,172594,3219],{},"：没有异常时执行。",[19,172597,172598,172601],{},[33,172599,172600],{},"finally","：无论是否异常都会执行。",[26,172603,172605],{"className":31709,"code":172604,"language":31711,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[33,172606,172607,172613,172631,172639,172649,172655,172676,172682],{"__ignoreMap":31},[36,172608,172609,172611],{"class":38,"line":39},[36,172610,172213],{"class":42},[36,172612,5230],{"class":50},[36,172614,172615,172617,172619,172621,172623,172625,172627,172629],{"class":38,"line":54},[36,172616,46924],{"class":50},[36,172618,70],{"class":42},[36,172620,965],{"class":73},[36,172622,222],{"class":50},[36,172624,55152],{"class":73},[36,172626,222],{"class":50},[36,172628,157127],{"class":110},[36,172630,31828],{"class":50},[36,172632,172633,172635,172637],{"class":38,"line":61},[36,172634,172225],{"class":42},[36,172636,153557],{"class":73},[36,172638,5230],{"class":50},[36,172640,172641,172643,172645,172647],{"class":38,"line":80},[36,172642,32630],{"class":73},[36,172644,222],{"class":50},[36,172646,154545],{"class":110},[36,172648,1680],{"class":50},[36,172650,172651,172653],{"class":38,"line":96},[36,172652,3219],{"class":42},[36,172654,5230],{"class":50},[36,172656,172657,172659,172661,172663,172666,172668,172670,172672,172674],{"class":38,"line":101},[36,172658,32630],{"class":73},[36,172660,222],{"class":50},[36,172662,1724],{"class":42},[36,172664,172665],{"class":110},"\"输入正确:",[36,172667,2563],{"class":73},[36,172669,3187],{"class":50},[36,172671,2613],{"class":73},[36,172673,1919],{"class":110},[36,172675,1680],{"class":50},[36,172677,172678,172680],{"class":38,"line":128},[36,172679,172600],{"class":42},[36,172681,5230],{"class":50},[36,172683,172684,172686,172688,172691],{"class":38,"line":149},[36,172685,32630],{"class":73},[36,172687,222],{"class":50},[36,172689,172690],{"class":110},"\"程序结束\"",[36,172692,1680],{"class":50},[19,172694,172695,172697],{},[33,172696,172600],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172699,172701],{"id":172700},"_97-抛出异常","9.7 抛出异常",[19,172703,172704],{},"程序可以主动抛出异常。",[26,172706,172708],{"className":31709,"code":172707,"language":31711,"meta":31,"style":31},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[33,172709,172710,172719,172731,172744,172764,172768,172772],{"__ignoreMap":31},[36,172711,172712,172714,172717],{"class":38,"line":39},[36,172713,33278],{"class":42},[36,172715,172716],{"class":46}," set_age",[36,172718,162746],{"class":50},[36,172720,172721,172723,172725,172727,172729],{"class":38,"line":54},[36,172722,4592],{"class":42},[36,172724,17036],{"class":50},[36,172726,2577],{"class":42},[36,172728,242],{"class":73},[36,172730,5230],{"class":50},[36,172732,172733,172735,172737,172739,172742],{"class":38,"line":61},[36,172734,104763],{"class":42},[36,172736,153557],{"class":73},[36,172738,222],{"class":50},[36,172740,172741],{"class":110},"\"年龄不能为负数\"",[36,172743,1680],{"class":50},[36,172745,172746,172748,172750,172752,172754,172756,172758,172760,172762],{"class":38,"line":80},[36,172747,32630],{"class":73},[36,172749,222],{"class":50},[36,172751,1724],{"class":42},[36,172753,163314],{"class":110},[36,172755,2563],{"class":73},[36,172757,71552],{"class":50},[36,172759,2613],{"class":73},[36,172761,1919],{"class":110},[36,172763,1680],{"class":50},[36,172765,172766],{"class":38,"line":96},[36,172767,58],{"emptyLinePlaceholder":57},[36,172769,172770],{"class":38,"line":101},[36,172771,58],{"emptyLinePlaceholder":57},[36,172773,172774,172777,172779,172781],{"class":38,"line":128},[36,172775,172776],{"class":50},"set_age(",[36,172778,2199],{"class":42},[36,172780,1885],{"class":73},[36,172782,1680],{"class":50},[19,172784,172785],{},"调用者可以捕获：",[26,172787,172789],{"className":31709,"code":172788,"language":31711,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[33,172790,172791,172797,172808,172818],{"__ignoreMap":31},[36,172792,172793,172795],{"class":38,"line":39},[36,172794,172213],{"class":42},[36,172796,5230],{"class":50},[36,172798,172799,172802,172804,172806],{"class":38,"line":54},[36,172800,172801],{"class":50},"    set_age(",[36,172803,2199],{"class":42},[36,172805,1885],{"class":73},[36,172807,1680],{"class":50},[36,172809,172810,172812,172814,172816],{"class":38,"line":61},[36,172811,172225],{"class":42},[36,172813,153557],{"class":73},[36,172815,65935],{"class":42},[36,172817,172557],{"class":50},[36,172819,172820,172822],{"class":38,"line":80},[36,172821,32630],{"class":73},[36,172823,68330],{"class":50},[14,172825,172827],{"id":172826},"_98-自定义异常","9.8 自定义异常",[26,172829,172831],{"className":31709,"code":172830,"language":31711,"meta":31,"style":31},"class BalanceNotEnoughError(Exception):\n    pass\n\n\ndef withdraw(balance, money):\n    if money > balance:\n        raise BalanceNotEnoughError(\"余额不足\")\n    return balance - money\n\n\ntry:\n    balance = withdraw(100, 200)\nexcept BalanceNotEnoughError as e:\n    print(e)\n",[33,172832,172833,172847,172851,172855,172859,172867,172877,172888,172898,172902,172906,172912,172929,172940],{"__ignoreMap":31},[36,172834,172835,172837,172840,172842,172845],{"class":38,"line":39},[36,172836,16023],{"class":42},[36,172838,172839],{"class":46}," BalanceNotEnoughError",[36,172841,222],{"class":50},[36,172843,172844],{"class":73},"Exception",[36,172846,32117],{"class":50},[36,172848,172849],{"class":38,"line":54},[36,172850,150868],{"class":42},[36,172852,172853],{"class":38,"line":61},[36,172854,58],{"emptyLinePlaceholder":57},[36,172856,172857],{"class":38,"line":80},[36,172858,58],{"emptyLinePlaceholder":57},[36,172860,172861,172863,172865],{"class":38,"line":96},[36,172862,33278],{"class":42},[36,172864,151517],{"class":46},[36,172866,164143],{"class":50},[36,172868,172869,172871,172873,172875],{"class":38,"line":101},[36,172870,4592],{"class":42},[36,172872,151473],{"class":50},[36,172874,2627],{"class":42},[36,172876,163920],{"class":50},[36,172878,172879,172881,172884,172886],{"class":38,"line":128},[36,172880,104763],{"class":42},[36,172882,172883],{"class":50}," BalanceNotEnoughError(",[36,172885,151568],{"class":110},[36,172887,1680],{"class":50},[36,172889,172890,172892,172894,172896],{"class":38,"line":149},[36,172891,239],{"class":42},[36,172893,164150],{"class":50},[36,172895,2199],{"class":42},[36,172897,151506],{"class":50},[36,172899,172900],{"class":38,"line":154},[36,172901,58],{"emptyLinePlaceholder":57},[36,172903,172904],{"class":38,"line":167},[36,172905,58],{"emptyLinePlaceholder":57},[36,172907,172908,172910],{"class":38,"line":172},[36,172909,172213],{"class":42},[36,172911,5230],{"class":50},[36,172913,172914,172916,172918,172921,172923,172925,172927],{"class":38,"line":192},[36,172915,163821],{"class":50},[36,172917,70],{"class":42},[36,172919,172920],{"class":50}," withdraw(",[36,172922,1979],{"class":73},[36,172924,477],{"class":50},[36,172926,3240],{"class":73},[36,172928,1680],{"class":50},[36,172930,172931,172933,172936,172938],{"class":38,"line":211},[36,172932,172225],{"class":42},[36,172934,172935],{"class":50}," BalanceNotEnoughError ",[36,172937,32714],{"class":42},[36,172939,172557],{"class":50},[36,172941,172942,172944],{"class":38,"line":216},[36,172943,32630],{"class":73},[36,172945,68330],{"class":50},[19,172947,172948],{},"入门阶段大多数情况使用内置异常即可。",[14,172950,172952],{"id":172951},"_99-traceback","9.9 traceback",[19,172954,172955],{},"调试时可以输出完整异常堆栈。",[26,172957,172959],{"className":31709,"code":172958,"language":31711,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[33,172960,172961,172968,172972,172978,172988,172996],{"__ignoreMap":31},[36,172962,172963,172965],{"class":38,"line":39},[36,172964,31723],{"class":42},[36,172966,172967],{"class":50}," traceback\n",[36,172969,172970],{"class":38,"line":54},[36,172971,58],{"emptyLinePlaceholder":57},[36,172973,172974,172976],{"class":38,"line":61},[36,172975,172213],{"class":42},[36,172977,5230],{"class":50},[36,172979,172980,172982,172984,172986],{"class":38,"line":80},[36,172981,64],{"class":73},[36,172983,222],{"class":50},[36,172985,157211],{"class":110},[36,172987,1680],{"class":50},[36,172989,172990,172992,172994],{"class":38,"line":96},[36,172991,172225],{"class":42},[36,172993,153557],{"class":73},[36,172995,5230],{"class":50},[36,172997,172998],{"class":38,"line":101},[36,172999,173000],{"class":50},"    traceback.print_exc()\n",[19,173002,173003],{},"日志系统中常把异常堆栈记录到文件。",[14,173005,173007],{"id":173006},"_910-什么是模块","9.10 什么是模块",[19,173009,173010,173011,127314],{},"模块就是一个 ",[33,173012,147683],{},[19,173014,173015,173016,25949],{},"例如创建 ",[33,173017,173018],{},"my_math.py",[26,173020,173022],{"className":31709,"code":173021,"language":31711,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[33,173023,173024,173032,173042,173046,173050,173059],{"__ignoreMap":31},[36,173025,173026,173028,173030],{"class":38,"line":39},[36,173027,33278],{"class":42},[36,173029,6698],{"class":46},[36,173031,152424],{"class":50},[36,173033,173034,173036,173038,173040],{"class":38,"line":54},[36,173035,239],{"class":42},[36,173037,67],{"class":50},[36,173039,2148],{"class":42},[36,173041,152435],{"class":50},[36,173043,173044],{"class":38,"line":61},[36,173045,58],{"emptyLinePlaceholder":57},[36,173047,173048],{"class":38,"line":80},[36,173049,58],{"emptyLinePlaceholder":57},[36,173051,173052,173054,173057],{"class":38,"line":96},[36,173053,33278],{"class":42},[36,173055,173056],{"class":46}," sub",[36,173058,152424],{"class":50},[36,173060,173061,173063,173065,173067],{"class":38,"line":101},[36,173062,239],{"class":42},[36,173064,67],{"class":50},[36,173066,2199],{"class":42},[36,173068,152435],{"class":50},[19,173070,173071],{},"在另一个文件中导入：",[26,173073,173075],{"className":31709,"code":173074,"language":31711,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[33,173076,173077,173084,173088],{"__ignoreMap":31},[36,173078,173079,173081],{"class":38,"line":39},[36,173080,31723],{"class":42},[36,173082,173083],{"class":50}," my_math\n",[36,173085,173086],{"class":38,"line":54},[36,173087,58],{"emptyLinePlaceholder":57},[36,173089,173090,173092,173095,173097,173099,173101],{"class":38,"line":61},[36,173091,31746],{"class":73},[36,173093,173094],{"class":50},"(my_math.add(",[36,173096,1885],{"class":73},[36,173098,477],{"class":50},[36,173100,1747],{"class":73},[36,173102,31828],{"class":50},[14,173104,173106],{"id":173105},"_911-import导入","9.11 import导入",[1645,173108,173110],{"id":173109},"_9111-导入模块","9.11.1 导入模块",[26,173112,173114],{"className":31709,"code":173113,"language":31711,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[33,173115,173116,173122,173126],{"__ignoreMap":31},[36,173117,173118,173120],{"class":38,"line":39},[36,173119,31723],{"class":42},[36,173121,46659],{"class":50},[36,173123,173124],{"class":38,"line":54},[36,173125,58],{"emptyLinePlaceholder":57},[36,173127,173128,173130,173133,173135,173137,173139],{"class":38,"line":61},[36,173129,31746],{"class":73},[36,173131,173132],{"class":50},"(random.randint(",[36,173134,1885],{"class":73},[36,173136,477],{"class":50},[36,173138,2113],{"class":73},[36,173140,31828],{"class":50},[1645,173142,173144],{"id":173143},"_9112-导入指定内容","9.11.2 导入指定内容",[26,173146,173148],{"className":31709,"code":173147,"language":31711,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[33,173149,173150,173161,173165],{"__ignoreMap":31},[36,173151,173152,173154,173156,173158],{"class":38,"line":39},[36,173153,32068],{"class":42},[36,173155,59127],{"class":50},[36,173157,31723],{"class":42},[36,173159,173160],{"class":50}," randint\n",[36,173162,173163],{"class":38,"line":54},[36,173164,58],{"emptyLinePlaceholder":57},[36,173166,173167,173169,173172,173174,173176,173178],{"class":38,"line":61},[36,173168,31746],{"class":73},[36,173170,173171],{"class":50},"(randint(",[36,173173,1885],{"class":73},[36,173175,477],{"class":50},[36,173177,2113],{"class":73},[36,173179,31828],{"class":50},[1645,173181,173183],{"id":173182},"_9113-起别名","9.11.3 起别名",[26,173185,173187],{"className":31709,"code":173186,"language":31711,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[33,173188,173189,173200,173204],{"__ignoreMap":31},[36,173190,173191,173193,173195,173197],{"class":38,"line":39},[36,173192,31723],{"class":42},[36,173194,59127],{"class":50},[36,173196,32714],{"class":42},[36,173198,173199],{"class":50}," rd\n",[36,173201,173202],{"class":38,"line":54},[36,173203,58],{"emptyLinePlaceholder":57},[36,173205,173206,173208,173211,173213,173215,173217],{"class":38,"line":61},[36,173207,31746],{"class":73},[36,173209,173210],{"class":50},"(rd.randint(",[36,173212,1885],{"class":73},[36,173214,477],{"class":50},[36,173216,2113],{"class":73},[36,173218,31828],{"class":50},[26,173220,173222],{"className":31709,"code":173221,"language":31711,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[33,173223,173224,173240,173244],{"__ignoreMap":31},[36,173225,173226,173228,173230,173232,173235,173237],{"class":38,"line":39},[36,173227,32068],{"class":42},[36,173229,59127],{"class":50},[36,173231,31723],{"class":42},[36,173233,173234],{"class":50}," randint ",[36,173236,32714],{"class":42},[36,173238,173239],{"class":50}," rint\n",[36,173241,173242],{"class":38,"line":54},[36,173243,58],{"emptyLinePlaceholder":57},[36,173245,173246,173248,173251,173253,173255,173257],{"class":38,"line":61},[36,173247,31746],{"class":73},[36,173249,173250],{"class":50},"(rint(",[36,173252,1885],{"class":73},[36,173254,477],{"class":50},[36,173256,2113],{"class":73},[36,173258,31828],{"class":50},[1645,173260,173262],{"id":173261},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,173264,173266],{"className":31709,"code":173265,"language":31711,"meta":31,"style":31},"from random import *\n",[33,173267,173268],{"__ignoreMap":31},[36,173269,173270,173272,173274,173276],{"class":38,"line":39},[36,173271,32068],{"class":42},[36,173273,59127],{"class":50},[36,173275,31723],{"class":42},[36,173277,173278],{"class":42}," *\n",[19,173280,173281],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173283,173285],{"id":173284},"_912-常用内置模块","9.12 常用内置模块",[1645,173287,173289],{"id":173288},"_9121-random","9.12.1 random",[26,173291,173293],{"className":31709,"code":173292,"language":31711,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[33,173294,173295,173301,173305,173319,173338],{"__ignoreMap":31},[36,173296,173297,173299],{"class":38,"line":39},[36,173298,31723],{"class":42},[36,173300,46659],{"class":50},[36,173302,173303],{"class":38,"line":54},[36,173304,58],{"emptyLinePlaceholder":57},[36,173306,173307,173309,173311,173313,173315,173317],{"class":38,"line":61},[36,173308,31746],{"class":73},[36,173310,173132],{"class":50},[36,173312,1885],{"class":73},[36,173314,477],{"class":50},[36,173316,2113],{"class":73},[36,173318,31828],{"class":50},[36,173320,173321,173323,173326,173328,173330,173332,173334,173336],{"class":38,"line":80},[36,173322,31746],{"class":73},[36,173324,173325],{"class":50},"(random.choice([",[36,173327,151219],{"class":110},[36,173329,477],{"class":50},[36,173331,152267],{"class":110},[36,173333,477],{"class":50},[36,173335,161062],{"class":110},[36,173337,34474],{"class":50},[36,173339,173340,173342,173345,173347,173349,173351,173353,173355,173357,173359,173361,173363,173365,173367],{"class":38,"line":96},[36,173341,31746],{"class":73},[36,173343,173344],{"class":50},"(random.sample([",[36,173346,1885],{"class":73},[36,173348,477],{"class":50},[36,173350,1747],{"class":73},[36,173352,477],{"class":50},[36,173354,1741],{"class":73},[36,173356,477],{"class":50},[36,173358,1961],{"class":73},[36,173360,477],{"class":50},[36,173362,1987],{"class":73},[36,173364,113533],{"class":50},[36,173366,1747],{"class":73},[36,173368,31828],{"class":50},[1645,173370,173372],{"id":173371},"_9122-time","9.12.2 time",[26,173374,173376],{"className":31709,"code":173375,"language":31711,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[33,173377,173378,173384,173388,173395,173403],{"__ignoreMap":31},[36,173379,173380,173382],{"class":38,"line":39},[36,173381,31723],{"class":42},[36,173383,33160],{"class":50},[36,173385,173386],{"class":38,"line":54},[36,173387,58],{"emptyLinePlaceholder":57},[36,173389,173390,173392],{"class":38,"line":61},[36,173391,31746],{"class":73},[36,173393,173394],{"class":50},"(time.time())\n",[36,173396,173397,173399,173401],{"class":38,"line":80},[36,173398,96402],{"class":50},[36,173400,1885],{"class":73},[36,173402,1680],{"class":50},[36,173404,173405,173407,173409,173412],{"class":38,"line":96},[36,173406,31746],{"class":73},[36,173408,222],{"class":50},[36,173410,173411],{"class":110},"\"1秒后执行\"",[36,173413,1680],{"class":50},[1645,173415,173417],{"id":173416},"_9123-datetime","9.12.3 datetime",[26,173419,173421],{"className":31709,"code":173420,"language":31711,"meta":31,"style":31},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[33,173422,173423,173435,173439,173449,173456],{"__ignoreMap":31},[36,173424,173425,173427,173430,173432],{"class":38,"line":39},[36,173426,32068],{"class":42},[36,173428,173429],{"class":50}," datetime ",[36,173431,31723],{"class":42},[36,173433,173434],{"class":50}," datetime\n",[36,173436,173437],{"class":38,"line":54},[36,173438,58],{"emptyLinePlaceholder":57},[36,173440,173441,173444,173446],{"class":38,"line":61},[36,173442,173443],{"class":50},"now ",[36,173445,70],{"class":42},[36,173447,173448],{"class":50}," datetime.now()\n",[36,173450,173451,173453],{"class":38,"line":80},[36,173452,31746],{"class":73},[36,173454,173455],{"class":50},"(now)\n",[36,173457,173458,173460,173463,173466,173468,173471],{"class":38,"line":96},[36,173459,31746],{"class":73},[36,173461,173462],{"class":50},"(now.strftime(",[36,173464,173465],{"class":110},"\"%Y-%m-",[36,173467,158022],{"class":73},[36,173469,173470],{"class":110}," %H:%M:%S\"",[36,173472,31828],{"class":50},[1645,173474,173476],{"id":173475},"_9124-os","9.12.4 os",[26,173478,173480],{"className":31709,"code":173479,"language":31711,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[33,173481,173482,173488,173492,173499],{"__ignoreMap":31},[36,173483,173484,173486],{"class":38,"line":39},[36,173485,31723],{"class":42},[36,173487,46636],{"class":50},[36,173489,173490],{"class":38,"line":54},[36,173491,58],{"emptyLinePlaceholder":57},[36,173493,173494,173496],{"class":38,"line":61},[36,173495,31746],{"class":73},[36,173497,173498],{"class":50},"(os.getcwd())\n",[36,173500,173501,173503,173506,173509],{"class":38,"line":80},[36,173502,31746],{"class":73},[36,173504,173505],{"class":50},"(os.listdir(",[36,173507,173508],{"class":110},"\".\"",[36,173510,31828],{"class":50},[1645,173512,173514],{"id":173513},"_9125-sys","9.12.5 sys",[26,173516,173518],{"className":31709,"code":173517,"language":31711,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[33,173519,173520,173527,173531,173538],{"__ignoreMap":31},[36,173521,173522,173524],{"class":38,"line":39},[36,173523,31723],{"class":42},[36,173525,173526],{"class":50}," sys\n",[36,173528,173529],{"class":38,"line":54},[36,173530,58],{"emptyLinePlaceholder":57},[36,173532,173533,173535],{"class":38,"line":61},[36,173534,31746],{"class":73},[36,173536,173537],{"class":50},"(sys.version)\n",[36,173539,173540,173542],{"class":38,"line":80},[36,173541,31746],{"class":73},[36,173543,173544],{"class":50},"(sys.path)\n",[14,173546,173548,173549,173551,173552,1919],{"id":173547},"_913-if-name-main","9.13 if ",[887,173550,81141],{}," == \"",[887,173553,103389],{},[19,173555,173556,173557,173560],{},"模块被直接运行和被导入时，",[33,173558,173559],{},"__name__"," 的值不同。",[19,173562,173563,173564,25949],{},"创建 ",[33,173565,173566],{},"my_module.py",[26,173568,173570],{"className":31709,"code":173569,"language":31711,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[33,173571,173572,173580,173590,173594,173598,173610],{"__ignoreMap":31},[36,173573,173574,173576,173578],{"class":38,"line":39},[36,173575,33278],{"class":42},[36,173577,6698],{"class":46},[36,173579,152424],{"class":50},[36,173581,173582,173584,173586,173588],{"class":38,"line":54},[36,173583,239],{"class":42},[36,173585,67],{"class":50},[36,173587,2148],{"class":42},[36,173589,152435],{"class":50},[36,173591,173592],{"class":38,"line":61},[36,173593,58],{"emptyLinePlaceholder":57},[36,173595,173596],{"class":38,"line":80},[36,173597,58],{"emptyLinePlaceholder":57},[36,173599,173600,173602,173604,173606,173608],{"class":38,"line":96},[36,173601,3061],{"class":42},[36,173603,32551],{"class":73},[36,173605,102890],{"class":42},[36,173607,102893],{"class":110},[36,173609,5230],{"class":50},[36,173611,173612,173614,173616,173618,173620,173622],{"class":38,"line":101},[36,173613,32630],{"class":73},[36,173615,167931],{"class":50},[36,173617,1885],{"class":73},[36,173619,477],{"class":50},[36,173621,1747],{"class":73},[36,173623,31828],{"class":50},[19,173625,173626],{},"作用：",[256,173628,173629,173632],{},[259,173630,173631],{},"直接运行该文件时，执行测试代码。",[259,173633,173634],{},"被其他文件导入时，不执行测试代码。",[19,173636,173637],{},"这是写模块时很常用的习惯。",[14,173639,173641],{"id":173640},"_914-包","9.14 包",[19,173643,173644,173645,173648],{},"包是包含 ",[33,173646,173647],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173650,173651],{},"目录结构：",[26,173653,173656],{"className":173654,"code":173655,"language":6676,"meta":31},[6674],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[33,173657,173655],{"__ignoreMap":31},[19,173659,173660],{},"导入：",[26,173662,173664],{"className":31709,"code":173663,"language":31711,"meta":31,"style":31},"from utils.file_utils import read_file\n",[33,173665,173666],{"__ignoreMap":31},[36,173667,173668,173670,173673,173675],{"class":38,"line":39},[36,173669,32068],{"class":42},[36,173671,173672],{"class":50}," utils.file_utils ",[36,173674,31723],{"class":42},[36,173676,173677],{"class":50}," read_file\n",[19,173679,173680,173682],{},[33,173681,173647],{}," 可以为空，也可以写包初始化逻辑。",[14,173684,173686],{"id":173685},"_915-第三方包","9.15 第三方包",[19,173688,173689,173690,173692],{},"第三方包通过 ",[33,173691,25161],{}," 安装。",[26,173694,173696],{"className":25152,"code":173695,"language":25154,"meta":31,"style":31},"pip install requests\n",[33,173697,173698],{"__ignoreMap":31},[36,173699,173700,173702,173704],{"class":38,"line":39},[36,173701,25161],{"class":46},[36,173703,25164],{"class":110},[36,173705,147429],{"class":110},[19,173707,173708],{},"使用：",[26,173710,173712],{"className":31709,"code":173711,"language":31711,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[33,173713,173714,173720,173724,173739],{"__ignoreMap":31},[36,173715,173716,173718],{"class":38,"line":39},[36,173717,31723],{"class":42},[36,173719,147429],{"class":50},[36,173721,173722],{"class":38,"line":54},[36,173723,58],{"emptyLinePlaceholder":57},[36,173725,173726,173729,173731,173734,173737],{"class":38,"line":61},[36,173727,173728],{"class":50},"response ",[36,173730,70],{"class":42},[36,173732,173733],{"class":50}," requests.get(",[36,173735,173736],{"class":110},"\"https:\u002F\u002Fwww.example.com\"",[36,173738,1680],{"class":50},[36,173740,173741,173743],{"class":38,"line":80},[36,173742,31746],{"class":73},[36,173744,173745],{"class":50},"(response.status_code)\n",[19,173747,173748],{},"查看已安装包：",[26,173750,173752],{"className":25152,"code":173751,"language":25154,"meta":31,"style":31},"pip list\n",[33,173753,173754],{"__ignoreMap":31},[36,173755,173756,173758],{"class":38,"line":39},[36,173757,25161],{"class":46},[36,173759,120286],{"class":110},[19,173761,173762],{},"导出项目依赖：",[26,173764,173765],{"className":25152,"code":147624,"language":25154,"meta":31,"style":31},[33,173766,173767],{"__ignoreMap":31},[36,173768,173769,173771,173773,173775],{"class":38,"line":39},[36,173770,25161],{"class":46},[36,173772,147633],{"class":110},[36,173774,27553],{"class":42},[36,173776,147638],{"class":110},[19,173778,173779],{},"安装项目依赖：",[26,173781,173782],{"className":25152,"code":147644,"language":25154,"meta":31,"style":31},[33,173783,173784],{"__ignoreMap":31},[36,173785,173786,173788,173790,173792],{"class":38,"line":39},[36,173787,25161],{"class":46},[36,173789,25164],{"class":110},[36,173791,120970],{"class":73},[36,173793,147638],{"class":110},[14,173795,173797],{"id":173796},"_916-模块搜索路径","9.16 模块搜索路径",[19,173799,173800,173801,173804],{},"Python 导入模块时会在 ",[33,173802,173803],{},"sys.path"," 中查找。",[26,173806,173808],{"className":31709,"code":173807,"language":31711,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[33,173809,173810,173816,173820,173832],{"__ignoreMap":31},[36,173811,173812,173814],{"class":38,"line":39},[36,173813,31723],{"class":42},[36,173815,173526],{"class":50},[36,173817,173818],{"class":38,"line":54},[36,173819,58],{"emptyLinePlaceholder":57},[36,173821,173822,173824,173827,173829],{"class":38,"line":61},[36,173823,4516],{"class":42},[36,173825,173826],{"class":50}," path ",[36,173828,27374],{"class":42},[36,173830,173831],{"class":50}," sys.path:\n",[36,173833,173834,173836],{"class":38,"line":80},[36,173835,32630],{"class":73},[36,173837,170560],{"class":50},[19,173839,173840],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173842,158954],{},[26,173844,173847],{"className":173845,"code":173846,"language":6676,"meta":31},[6674],"random.py\njson.py\ntime.py\n",[33,173848,173846],{"__ignoreMap":31},[19,173850,173851],{},"这些文件名可能导致导入异常。",[14,173853,173855],{"id":173854},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173857,173651],{},[26,173859,173862],{"className":173860,"code":173861,"language":6676,"meta":31},[6674],"student_system\u002F\n  main.py\n  services\u002F\n    __init__.py\n    student_service.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n",[33,173863,173861],{"__ignoreMap":31},[19,173865,173866,25949],{},[33,173867,173868],{},"utils\u002Ffile_utils.py",[26,173870,173872],{"className":31709,"code":173871,"language":31711,"meta":31,"style":31},"import json\nfrom pathlib import Path\n\n\ndef read_json(path):\n    path = Path(path)\n    if not path.exists():\n        return []\n\n    with open(path, \"r\", encoding=\"utf-8\") as file:\n        return json.load(file)\n\n\ndef write_json(path, data):\n    with open(path, \"w\", encoding=\"utf-8\") as file:\n        json.dump(data, file, ensure_ascii=False, indent=2)\n",[33,173873,173874,173880,173890,173894,173898,173908,173918,173926,173932,173936,173963,173973,173977,173981,173991,174017],{"__ignoreMap":31},[36,173875,173876,173878],{"class":38,"line":39},[36,173877,31723],{"class":42},[36,173879,148422],{"class":50},[36,173881,173882,173884,173886,173888],{"class":38,"line":54},[36,173883,32068],{"class":42},[36,173885,109642],{"class":50},[36,173887,31723],{"class":42},[36,173889,109647],{"class":50},[36,173891,173892],{"class":38,"line":61},[36,173893,58],{"emptyLinePlaceholder":57},[36,173895,173896],{"class":38,"line":80},[36,173897,58],{"emptyLinePlaceholder":57},[36,173899,173900,173902,173905],{"class":38,"line":96},[36,173901,33278],{"class":42},[36,173903,173904],{"class":46}," read_json",[36,173906,173907],{"class":50},"(path):\n",[36,173909,173910,173913,173915],{"class":38,"line":101},[36,173911,173912],{"class":50},"    path ",[36,173914,70],{"class":42},[36,173916,173917],{"class":50}," Path(path)\n",[36,173919,173920,173922,173924],{"class":38,"line":128},[36,173921,4592],{"class":42},[36,173923,40261],{"class":42},[36,173925,170641],{"class":50},[36,173927,173928,173930],{"class":38,"line":149},[36,173929,16081],{"class":42},[36,173931,53169],{"class":50},[36,173933,173934],{"class":38,"line":154},[36,173935,58],{"emptyLinePlaceholder":57},[36,173937,173938,173940,173942,173945,173947,173949,173951,173953,173955,173957,173959,173961],{"class":38,"line":167},[36,173939,35509],{"class":42},[36,173941,148122],{"class":73},[36,173943,173944],{"class":50},"(path, ",[36,173946,148132],{"class":110},[36,173948,477],{"class":50},[36,173950,148137],{"class":473},[36,173952,70],{"class":42},[36,173954,148142],{"class":110},[36,173956,15043],{"class":50},[36,173958,32714],{"class":42},[36,173960,149484],{"class":473},[36,173962,5230],{"class":50},[36,173964,173965,173967,173969,173971],{"class":38,"line":172},[36,173966,16081],{"class":42},[36,173968,149495],{"class":50},[36,173970,46685],{"class":473},[36,173972,1680],{"class":50},[36,173974,173975],{"class":38,"line":192},[36,173976,58],{"emptyLinePlaceholder":57},[36,173978,173979],{"class":38,"line":211},[36,173980,58],{"emptyLinePlaceholder":57},[36,173982,173983,173985,173988],{"class":38,"line":216},[36,173984,33278],{"class":42},[36,173986,173987],{"class":46}," write_json",[36,173989,173990],{"class":50},"(path, data):\n",[36,173992,173993,173995,173997,173999,174001,174003,174005,174007,174009,174011,174013,174015],{"class":38,"line":231},[36,173994,35509],{"class":42},[36,173996,148122],{"class":73},[36,173998,173944],{"class":50},[36,174000,153307],{"class":110},[36,174002,477],{"class":50},[36,174004,148137],{"class":473},[36,174006,70],{"class":42},[36,174008,148142],{"class":110},[36,174010,15043],{"class":50},[36,174012,32714],{"class":42},[36,174014,149484],{"class":473},[36,174016,5230],{"class":50},[36,174018,174019,174022,174024,174026,174028,174030,174032,174034,174036,174038,174040],{"class":38,"line":236},[36,174020,174021],{"class":50},"        json.dump(data, ",[36,174023,46685],{"class":473},[36,174025,477],{"class":50},[36,174027,148468],{"class":473},[36,174029,70],{"class":42},[36,174031,35318],{"class":73},[36,174033,477],{"class":50},[36,174035,153343],{"class":473},[36,174037,70],{"class":42},[36,174039,1747],{"class":73},[36,174041,1680],{"class":50},[19,174043,174044,25949],{},[33,174045,155938],{},[26,174047,174049],{"className":31709,"code":174048,"language":31711,"meta":31,"style":31},"from utils.file_utils import read_json, write_json\n\nstudents = read_json(\"students.json\")\nstudents.append({\"name\": \"小明\", \"score\": 95})\nwrite_json(\"students.json\", students)\n",[33,174050,174051,174062,174066,174079,174099],{"__ignoreMap":31},[36,174052,174053,174055,174057,174059],{"class":38,"line":39},[36,174054,32068],{"class":42},[36,174056,173672],{"class":50},[36,174058,31723],{"class":42},[36,174060,174061],{"class":50}," read_json, write_json\n",[36,174063,174064],{"class":38,"line":54},[36,174065,58],{"emptyLinePlaceholder":57},[36,174067,174068,174070,174072,174075,174077],{"class":38,"line":61},[36,174069,161047],{"class":50},[36,174071,70],{"class":42},[36,174073,174074],{"class":50}," read_json(",[36,174076,153162],{"class":110},[36,174078,1680],{"class":50},[36,174080,174081,174083,174085,174087,174089,174091,174093,174095,174097],{"class":38,"line":80},[36,174082,171865],{"class":50},[36,174084,64010],{"class":110},[36,174086,52768],{"class":50},[36,174088,151219],{"class":110},[36,174090,477],{"class":50},[36,174092,152803],{"class":110},[36,174094,52768],{"class":50},[36,174096,2656],{"class":73},[36,174098,166483],{"class":50},[36,174100,174101,174104,174106],{"class":38,"line":96},[36,174102,174103],{"class":50},"write_json(",[36,174105,153162],{"class":110},[36,174107,174108],{"class":50},", students)\n",[14,174110,174112],{"id":174111},"_918-易错点","9.18 易错点",[256,174114,174115,174118,174123,174128,174131,174134],{},[259,174116,174117],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[259,174119,174120,174121,29716],{},"能指定异常类型就不要裸写 ",[33,174122,172225],{},[259,174124,174125,174127],{},[33,174126,172600],{}," 无论是否出错都会执行。",[259,174129,174130],{},"模块文件名不要和标准库重名。",[259,174132,174133],{},"导入自己写的模块时，要注意运行目录。",[259,174135,174136],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174138,174140],{"id":174139},"_919-本章练习","9.19 本章练习",[256,174142,174143,174146,174149,174155,174162],{},[259,174144,174145],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[259,174147,174148],{},"写函数读取文件，如果文件不存在则返回空字符串。",[259,174150,173563,174151,174154],{},[33,174152,174153],{},"math_utils.py","，实现加减乘除函数并导入使用。",[259,174156,174157,174158,174161],{},"创建一个 ",[33,174159,174160],{},"utils"," 包，把 JSON 读写函数放进去。",[259,174163,174164],{},"写一个程序，捕获除零异常和输入格式异常。",[1592,174166,174167],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":31,"searchDepth":54,"depth":54,"links":174169},[174170,174171,174172,174173,174174,174175,174176,174177,174178,174179,174180,174186,174193,174195,174196,174197,174198,174199,174200],{"id":172022,"depth":54,"text":172023},{"id":172150,"depth":54,"text":172151},{"id":172199,"depth":54,"text":172200},{"id":172348,"depth":54,"text":172349},{"id":172520,"depth":54,"text":172521},{"id":172589,"depth":54,"text":172590},{"id":172700,"depth":54,"text":172701},{"id":172826,"depth":54,"text":172827},{"id":172951,"depth":54,"text":172952},{"id":173006,"depth":54,"text":173007},{"id":173105,"depth":54,"text":173106,"children":174181},[174182,174183,174184,174185],{"id":173109,"depth":61,"text":173110},{"id":173143,"depth":61,"text":173144},{"id":173182,"depth":61,"text":173183},{"id":173261,"depth":61,"text":173262},{"id":173284,"depth":54,"text":173285,"children":174187},[174188,174189,174190,174191,174192],{"id":173288,"depth":61,"text":173289},{"id":173371,"depth":61,"text":173372},{"id":173416,"depth":61,"text":173417},{"id":173475,"depth":61,"text":173476},{"id":173513,"depth":61,"text":173514},{"id":173547,"depth":54,"text":174194},"9.13 if name == \"main\"",{"id":173640,"depth":54,"text":173641},{"id":173685,"depth":54,"text":173686},{"id":173796,"depth":54,"text":173797},{"id":173854,"depth":54,"text":173855},{"id":174111,"depth":54,"text":174112},{"id":174139,"depth":54,"text":174140},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172014,"description":24706},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174207,"title":174208,"body":174209,"description":174372,"extension":1603,"meta":174373,"navigation":57,"path":174374,"seo":174375,"stem":174376,"__hash__":174377},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174210,"toc":174367},[174211,174214,174217,174220,174231,174233,174307,174310,174313,174316,174319,174322,174325,174328,174331,174334,174337],[10,174212,174208],{"id":174213},"python教程",[19,174215,174216],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174218,174219],{},"建议学习环境：",[256,174221,174222,174225,174228],{},[259,174223,174224],{},"Python 版本：Python 3.10 及以上。",[259,174226,174227],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[259,174229,174230],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174232,118409],{"id":118409},[256,174234,174235,174241,174247,174253,174259,174265,174271,174277,174283,174289,174295,174301],{},[259,174236,174237],{},[1906,174238,174240],{"href":174239},".\u002Fch1-Python","Python环境与第一个程序",[259,174242,174243],{},[1906,174244,174246],{"href":174245},".\u002Fch2","基础语法、变量与字符串",[259,174248,174249],{},[1906,174250,174252],{"href":174251},".\u002Fch3","判断语句",[259,174254,174255],{},[1906,174256,174258],{"href":174257},".\u002Fch4","循环语句",[259,174260,174261],{},[1906,174262,174264],{"href":174263},".\u002Fch5","函数基础",[259,174266,174267],{},[1906,174268,174270],{"href":174269},".\u002Fch6","数据容器",[259,174272,174273],{},[1906,174274,174276],{"href":174275},".\u002Fch7","函数进阶",[259,174278,174279],{},[1906,174280,174282],{"href":174281},".\u002Fch8","文件操作",[259,174284,174285],{},[1906,174286,174288],{"href":174287},".\u002Fch9","异常、模块与包",[259,174290,174291],{},[1906,174292,174294],{"href":174293},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[259,174296,174297],{},[1906,174298,174300],{"href":174299},".\u002Fch11","面向对象基础",[259,174302,174303],{},[1906,174304,174306],{"href":174305},".\u002Fch12","综合案例与复习路线",[14,174308,174309],{"id":174309},"学习路线",[19,174311,174312],{},"第一阶段：能运行程序。",[19,174314,174315],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174317,174318],{},"第二阶段：能组织数据。",[19,174320,174321],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174323,174324],{},"第三阶段：能封装逻辑。",[19,174326,174327],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174329,174330],{},"第四阶段：能做小项目。",[19,174332,174333],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174335,174336],{"id":174336},"参考资料",[256,174338,174339,174346,174353,174360],{},[259,174340,174341,174342],{},"黑马程序员 Python 入门教程推荐：",[1906,174343,174344],{"href":174344,"rel":174345},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25195],[259,174347,174348,174349],{},"Python 官方中文教程：",[1906,174350,174351],{"href":174351,"rel":174352},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25195],[259,174354,174355,174356],{},"Python 标准库文档：",[1906,174357,174358],{"href":174358,"rel":174359},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25195],[259,174361,174362,174363],{},"pyecharts 文档：",[1906,174364,174365],{"href":174365,"rel":174366},"https:\u002F\u002Fpyecharts.org\u002F",[25195],{"title":31,"searchDepth":54,"depth":54,"links":174368},[174369,174370,174371],{"id":118409,"depth":54,"text":118409},{"id":174309,"depth":54,"text":174309},{"id":174336,"depth":54,"text":174336},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24708},"\u002Fwiki\u002F2024-10-10-python",{"title":174208,"description":174372},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379675]